urbanopt-cli 0.8.3 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -6
- data/CHANGELOG.md +14 -0
- data/CMakeLists.txt +7 -7
- data/Gemfile +3 -1
- data/README.md +9 -0
- data/example_files/Gemfile +23 -16
- data/example_files/Gemfile.lock +177 -0
- data/example_files/base_workflow_res.osw +57 -14
- data/example_files/class_project_coincident.json +1322 -0
- data/example_files/class_project_diverse.json +1322 -0
- data/example_files/disco/config.json +42 -0
- data/example_files/disco/cost_database.xlsx +0 -0
- data/example_files/disco/technical_catalog.json +12126 -0
- data/example_files/mappers/Baseline.rb +10 -7
- data/example_files/mappers/ChilledWaterStorage.rb +98 -0
- data/example_files/mappers/ClassProject.rb +110 -0
- data/example_files/mappers/CreateBar.rb +1 -0
- data/example_files/mappers/HighEfficiency.rb +13 -11
- data/example_files/mappers/PeakHoursMelsShedding.rb +72 -0
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +78 -0
- data/example_files/mappers/ThermalStorage.rb +1 -0
- data/example_files/mappers/base_workflow.osw +55 -14
- data/example_files/mappers/class_project_workflow.osw +328 -0
- data/example_files/mappers/createbar_workflow.osw +16 -16
- data/example_files/measures/BuildResidentialModel/measure.rb +7 -1
- data/example_files/measures/BuildResidentialModel/measure.xml +1313 -706
- data/example_files/opendss/electrical_database.json +1446 -1446
- data/example_files/python_deps/dependencies.json +5 -0
- data/example_files/python_deps/install_python.ps1 +96 -0
- data/example_files/python_deps/install_python.sh +120 -0
- data/example_files/residential/clothes_dryer.tsv +11 -11
- data/example_files/residential/clothes_washer.tsv +3 -3
- data/example_files/residential/dishwasher.tsv +3 -3
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +0 -1
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +8 -21
- data/example_files/resources/hpxml-measures/.gitignore +2 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1272 -1094
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +978 -659
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +52 -74
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +77 -140
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +30 -27
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +32 -13
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +55 -51
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +89 -16
- data/example_files/resources/hpxml-measures/Changelog.md +65 -0
- data/example_files/resources/hpxml-measures/Gemfile +2 -4
- data/example_files/resources/hpxml-measures/Gemfile.lock +2 -13
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +276 -300
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +221 -215
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +215 -170
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +108 -16
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +24 -44
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +564 -197
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/cambium/README.md +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +7 -55
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +24 -19
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +541 -211
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +300 -172
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +0 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLBaseElements.xsd +230 -141
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXMLDataTypes.xsd +145 -137
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +191 -97
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/iso-schematron.xsd +391 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +194 -198
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +140 -145
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +11 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +33 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +17 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +14 -12
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +39 -17
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/battery.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +114 -57
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +1 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/utility_bills.rb +148 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +85 -127
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +26 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +2 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +67 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +117 -56
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +141 -14
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +453 -344
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +124 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +28 -32
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +172 -79
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +54 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +3 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +4 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +7 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +6 -9
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +8 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +213 -95
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +1 -10
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +76 -0
- data/example_files/resources/hpxml-measures/README.md +2 -3
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +585 -287
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +304 -352
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/output_report_test.rb +404 -279
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +222 -501
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +137 -200
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate Min Annual Charge.json +649 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate Min Monthly Charge.json +649 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Flat Rate.json +647 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate Min Annual Charge.json +8776 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate Min Monthly Charge.json +8776 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Real-Time Pricing Rate.json +8774 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate Min Annual Charge.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate Min Monthly Charge.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Rate.json +657 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate Min Annual Charge.json +670 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate Min Monthly Charge.json +670 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Tiered Time-of-Use Rate.json +668 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate Min Annual Charge.json +655 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate Min Monthly Charge.json +655 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/Sample Time-of-Use Rate.json +653 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/detailed_rates/openei_rates.zip +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/Average_retail_price_of_electricity.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/HouseholdConsumption.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/NG_PRI_SUM_A_EPG0_PRS_DMCF_A.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/PET_PRI_WFR_A_EPD2F_PRS_DPGAL_W.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/PET_PRI_WFR_A_EPLLPA_PRS_DPGAL_W.csv +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/{Data/UtilityRates → simple_rates}/README.md +0 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/util.rb +506 -25
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Contains Demand Charges.json +1312 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Invalid Fixed Charge Units.json +657 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Invalid Min Charge Units.json +659 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/JacksonElectricMemberCorp-ResidentialSeniorCitizenLowIncomeAssistance.json +681 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/Missing Required Fields.json +54 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/data.csv +8761 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +1006 -235
- data/example_files/resources/hpxml-measures/docs/source/conf.py +1 -1
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +0 -1
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +2 -2
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +461 -261
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +146 -152
- data/example_files/resources/hpxml-measures/tasks.rb +616 -802
- data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +28 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +13 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +31 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +21 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +37 -22
- data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +24 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +33 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +28 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +30 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +10 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +22 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +12 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +18 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +25 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +22 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +26 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +19 -11
- data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +25 -16
- data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +35 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +28 -17
- data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +35 -21
- data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +20 -12
- data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +20 -13
- data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +12 -9
- data/example_files/resources/hpxml-measures/workflow/real_homes/house048.xml +25 -14
- data/example_files/resources/hpxml-measures/workflow/real_homes/house049.xml +10 -7
- data/example_files/resources/hpxml-measures/workflow/real_homes/house050.xml +20 -11
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +91 -88
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +546 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +546 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +555 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +7 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +17 -6
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +7 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +600 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +606 -593
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-calctype-operational.xml +480 -471
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +464 -457
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +496 -487
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +466 -459
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +518 -509
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +513 -504
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +445 -438
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +476 -467
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +443 -436
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +446 -439
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +445 -438
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +476 -467
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +446 -439
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +494 -485
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +489 -480
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +499 -490
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +491 -482
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml +510 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +495 -486
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +709 -695
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +528 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +512 -503
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +504 -495
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +497 -488
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +490 -481
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +487 -478
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached-2stories.xml +639 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached-atticroof-cathedral.xml +587 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +639 -628
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-defaults.xml +539 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-loads-large-uncommon.xml +644 -633
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational-misc-loads-large-uncommon2.xml +644 -633
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-calctype-operational.xml +575 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +536 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +20 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +584 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +584 -573
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +28 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +20 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +550 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +589 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +619 -608
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +620 -609
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +618 -607
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +90 -43
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +2507 -2460
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +595 -584
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +19 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +594 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +597 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +671 -656
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-foundation-conditioned-basement-wall-interior-insulation.xml → base-foundation-conditioned-basement-wall-insulation.xml} +585 -574
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +35 -16
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-backup-lockout-temperature.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +583 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +600 -589
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +599 -588
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +629 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +579 -568
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload-miami-fl.xml +582 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +628 -615
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +535 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +589 -578
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +536 -527
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +573 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +565 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +578 -567
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +575 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +551 -542
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +532 -530
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +525 -516
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +525 -516
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +533 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +529 -520
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +580 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +567 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +611 -598
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +589 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +17 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +566 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +574 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +587 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +591 -580
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +570 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +570 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +552 -543
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +963 -938
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +33 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-ptac-with-heating.xml → base-hvac-ptac-with-heating-natural-gas.xml} +23 -21
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +541 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +526 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +16 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +535 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +594 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +586 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +530 -521
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +591 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +27 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +537 -526
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +601 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +601 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +19 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +20 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +607 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +21 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +37 -19
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +590 -579
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +578 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +632 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +614 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +677 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +593 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +27 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +676 -665
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +616 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +615 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +598 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +586 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +1700 -1677
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +622 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +697 -682
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-pv-battery-lifetime-model.xml → base-pv-battery-round-trip-efficiency.xml} +20 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +624 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +622 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +640 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +639 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +623 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +606 -595
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +582 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-smooth.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +583 -572
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +581 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +636 -625
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +27 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +21 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +21 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-tank-heat-pump-detailed-operating-modes.xml → base-simcontrol-temperature-capacitance-multiplier.xml} +25 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-dhw-tank-heat-pump-detailed-setpoints.xml → base-simcontrol-timestep-30-mins.xml} +25 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +18 -7
- data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +18 -13
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +12 -7
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +8 -24
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +366 -358
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +311 -303
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +311 -303
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +327 -319
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +327 -319
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +332 -324
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +332 -324
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +341 -333
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +341 -333
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +369 -361
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +383 -379
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +383 -379
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +538 -534
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +550 -546
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +444 -410
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +8 -8
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +444 -410
- data/example_files/resources/hpxml-measures/workflow/tests/compare.py +18 -4
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +133 -288
- data/example_files/scripts/convert_urbanopt_to_disco.py +130 -0
- data/example_files/scripts/default_control_changes.csv +8 -0
- data/example_files/scripts/default_voltage_regulators.csv +3 -0
- data/example_files/scripts/read_data.py +331 -0
- data/example_files/visualization/input_visualization_feature.html +172 -81
- data/example_files/visualization/input_visualization_scenario.html +178 -82
- data/example_files/xml_building/17/README.md +2 -2
- data/example_files/xml_building/17/unit 1.xml +40 -41
- data/example_files/xml_building/17/unit 2.xml +35 -36
- data/example_files/xml_building/17/unit 3.xml +35 -36
- data/example_files/xml_building/17/unit 4.xml +41 -42
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +596 -96
- data/uo_cli.gemspec +6 -5
- metadata +121 -36
- data/example_files/residential/exhaust.tsv +0 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/hvac_equipment_efficiency.csv +0 -493
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/water_heater_efficiency.csv +0 -157
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/HPXMLvalidator.xml +0 -620
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +0 -107
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +0 -450
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +0 -85
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +0 -72
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +0 -290
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_10kW.csv +0 -8761
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_1kW.csv +0 -8761
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/PV_None.csv +0 -8761
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +0 -410
@@ -3,7 +3,7 @@
|
|
3
3
|
class Constructions
|
4
4
|
# Container class for walls, floors/ceilings, roofs, etc.
|
5
5
|
|
6
|
-
def self.apply_wood_stud_wall(
|
6
|
+
def self.apply_wood_stud_wall(model, surfaces, constr_name,
|
7
7
|
cavity_r, install_grade, cavity_depth_in, cavity_filled,
|
8
8
|
framing_factor, mat_int_finish, osb_thick_in,
|
9
9
|
rigid_r, mat_ext_finish, inside_film, outside_film,
|
@@ -62,10 +62,10 @@ class Constructions
|
|
62
62
|
constr.set_interior_material_properties()
|
63
63
|
|
64
64
|
# Create and assign construction to surfaces
|
65
|
-
constr.create_and_assign_constructions(
|
65
|
+
constr.create_and_assign_constructions(surfaces, model)
|
66
66
|
end
|
67
67
|
|
68
|
-
def self.apply_double_stud_wall(
|
68
|
+
def self.apply_double_stud_wall(model, surfaces, constr_name,
|
69
69
|
cavity_r, install_grade, stud_depth_in, gap_depth_in,
|
70
70
|
framing_factor, framing_spacing, is_staggered,
|
71
71
|
mat_int_finish, osb_thick_in, rigid_r,
|
@@ -135,10 +135,10 @@ class Constructions
|
|
135
135
|
constr.set_interior_material_properties()
|
136
136
|
|
137
137
|
# Create and assign construction to surfaces
|
138
|
-
constr.create_and_assign_constructions(
|
138
|
+
constr.create_and_assign_constructions(surfaces, model)
|
139
139
|
end
|
140
140
|
|
141
|
-
def self.apply_cmu_wall(
|
141
|
+
def self.apply_cmu_wall(model, surfaces, constr_name,
|
142
142
|
thick_in, conductivity, density, framing_factor,
|
143
143
|
furring_r, furring_cavity_depth, furring_spacing,
|
144
144
|
mat_int_finish, osb_thick_in, rigid_r,
|
@@ -206,10 +206,10 @@ class Constructions
|
|
206
206
|
constr.set_interior_material_properties()
|
207
207
|
|
208
208
|
# Create and assign construction to surfaces
|
209
|
-
constr.create_and_assign_constructions(
|
209
|
+
constr.create_and_assign_constructions(surfaces, model)
|
210
210
|
end
|
211
211
|
|
212
|
-
def self.apply_icf_wall(
|
212
|
+
def self.apply_icf_wall(model, surfaces, constr_name,
|
213
213
|
icf_r, ins_thick_in, concrete_thick_in, framing_factor,
|
214
214
|
mat_int_finish, osb_thick_in, rigid_r,
|
215
215
|
mat_ext_finish, inside_film, outside_film,
|
@@ -259,10 +259,10 @@ class Constructions
|
|
259
259
|
constr.set_interior_material_properties()
|
260
260
|
|
261
261
|
# Create and assign construction to surfaces
|
262
|
-
constr.create_and_assign_constructions(
|
262
|
+
constr.create_and_assign_constructions(surfaces, model)
|
263
263
|
end
|
264
264
|
|
265
|
-
def self.apply_sip_wall(
|
265
|
+
def self.apply_sip_wall(model, surfaces, constr_name, sip_r,
|
266
266
|
sip_thick_in, framing_factor, sheathing_thick_in,
|
267
267
|
mat_int_finish, osb_thick_in, rigid_r,
|
268
268
|
mat_ext_finish, inside_film, outside_film,
|
@@ -319,10 +319,10 @@ class Constructions
|
|
319
319
|
constr.set_interior_material_properties()
|
320
320
|
|
321
321
|
# Create and assign construction to surfaces
|
322
|
-
constr.create_and_assign_constructions(
|
322
|
+
constr.create_and_assign_constructions(surfaces, model)
|
323
323
|
end
|
324
324
|
|
325
|
-
def self.apply_steel_stud_wall(
|
325
|
+
def self.apply_steel_stud_wall(model, surfaces, constr_name,
|
326
326
|
cavity_r, install_grade, cavity_depth,
|
327
327
|
cavity_filled, framing_factor, correction_factor,
|
328
328
|
mat_int_finish, osb_thick_in, rigid_r,
|
@@ -382,10 +382,10 @@ class Constructions
|
|
382
382
|
constr.set_interior_material_properties()
|
383
383
|
|
384
384
|
# Create and assign construction to surfaces
|
385
|
-
constr.create_and_assign_constructions(
|
385
|
+
constr.create_and_assign_constructions(surfaces, model)
|
386
386
|
end
|
387
387
|
|
388
|
-
def self.apply_generic_layered_wall(
|
388
|
+
def self.apply_generic_layered_wall(model, surfaces, constr_name,
|
389
389
|
thick_ins, conds, denss, specheats,
|
390
390
|
mat_int_finish, osb_thick_in, rigid_r,
|
391
391
|
mat_ext_finish, inside_film, outside_film,
|
@@ -452,10 +452,10 @@ class Constructions
|
|
452
452
|
constr.set_interior_material_properties()
|
453
453
|
|
454
454
|
# Create and assign construction to surfaces
|
455
|
-
constr.create_and_assign_constructions(
|
455
|
+
constr.create_and_assign_constructions(surfaces, model)
|
456
456
|
end
|
457
457
|
|
458
|
-
def self.apply_rim_joist(
|
458
|
+
def self.apply_rim_joist(model, surfaces, constr_name,
|
459
459
|
cavity_r, install_grade, framing_factor,
|
460
460
|
mat_int_finish, osb_thick_in,
|
461
461
|
rigid_r, mat_ext_finish, inside_film,
|
@@ -512,10 +512,10 @@ class Constructions
|
|
512
512
|
constr.set_interior_material_properties()
|
513
513
|
|
514
514
|
# Create and assign construction to surfaces
|
515
|
-
constr.create_and_assign_constructions(
|
515
|
+
constr.create_and_assign_constructions(surfaces, model)
|
516
516
|
end
|
517
517
|
|
518
|
-
def self.apply_open_cavity_roof(
|
518
|
+
def self.apply_open_cavity_roof(model, surfaces, constr_name,
|
519
519
|
cavity_r, install_grade, cavity_ins_thick_in,
|
520
520
|
framing_factor, framing_thick_in,
|
521
521
|
osb_thick_in, rigid_r,
|
@@ -585,10 +585,10 @@ class Constructions
|
|
585
585
|
constr.set_interior_material_properties() unless has_radiant_barrier
|
586
586
|
|
587
587
|
# Create and assign construction to roof surfaces
|
588
|
-
constr.create_and_assign_constructions(
|
588
|
+
constr.create_and_assign_constructions(surfaces, model)
|
589
589
|
end
|
590
590
|
|
591
|
-
def self.apply_closed_cavity_roof(
|
591
|
+
def self.apply_closed_cavity_roof(model, surfaces, constr_name,
|
592
592
|
cavity_r, install_grade, cavity_depth,
|
593
593
|
filled_cavity, framing_factor, mat_int_finish,
|
594
594
|
osb_thick_in, rigid_r, mat_roofing, has_radiant_barrier,
|
@@ -655,116 +655,329 @@ class Constructions
|
|
655
655
|
constr.set_interior_material_properties() unless has_radiant_barrier
|
656
656
|
|
657
657
|
# Create and assign construction to surfaces
|
658
|
-
constr.create_and_assign_constructions(
|
658
|
+
constr.create_and_assign_constructions(surfaces, model)
|
659
659
|
end
|
660
660
|
|
661
|
-
def self.
|
662
|
-
|
663
|
-
|
664
|
-
|
661
|
+
def self.apply_wood_frame_floor_ceiling(model, surfaces, constr_name, is_ceiling,
|
662
|
+
cavity_r, install_grade,
|
663
|
+
framing_factor, joist_height_in,
|
664
|
+
plywood_thick_in, rigid_r, mat_int_finish_or_covering,
|
665
|
+
inside_film, outside_film)
|
665
666
|
|
666
667
|
# Interior finish below, open cavity above (e.g., attic floor)
|
668
|
+
# Open cavity below, floor covering above (e.g., crawlspace ceiling)
|
667
669
|
|
668
670
|
return if surfaces.empty?
|
669
671
|
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
672
|
+
if is_ceiling
|
673
|
+
# Define materials
|
674
|
+
mat_addtl_ins = nil
|
675
|
+
if cavity_r == 0
|
676
|
+
mat_cavity = Material.AirCavityOpen(joist_height_in)
|
677
|
+
else
|
678
|
+
if rigid_r > 0
|
679
|
+
# If there is additional insulation beyond the rafter height,
|
680
|
+
# these inputs are used for defining an additional layer
|
681
|
+
addtl_thick_in = rigid_r / 3.0 # Assume roughly R-3 per inch of loose-fill above cavity
|
682
|
+
mat_addtl_ins = Material.new(name: 'ceiling loosefill ins', thick_in: addtl_thick_in, mat_base: BaseMaterial.InsulationGenericLoosefill, k_in: addtl_thick_in / rigid_r)
|
683
|
+
end
|
684
|
+
mat_cavity = Material.new(thick_in: joist_height_in, mat_base: BaseMaterial.InsulationGenericLoosefill, k_in: joist_height_in / cavity_r)
|
685
|
+
end
|
686
|
+
mat_framing = Material.new(thick_in: joist_height_in, mat_base: BaseMaterial.Wood)
|
687
|
+
mat_gap = Material.AirCavityOpen(joist_height_in)
|
688
|
+
|
689
|
+
# Set paths
|
690
|
+
gapFactor = get_gap_factor(install_grade, framing_factor, cavity_r)
|
691
|
+
path_fracs = [framing_factor, 1 - framing_factor - gapFactor, gapFactor]
|
692
|
+
|
693
|
+
# Define construction
|
694
|
+
constr = Construction.new(constr_name, path_fracs)
|
695
|
+
constr.add_layer(outside_film)
|
696
|
+
if not mat_addtl_ins.nil?
|
697
|
+
constr.add_layer(mat_addtl_ins)
|
698
|
+
end
|
699
|
+
constr.add_layer([mat_framing, mat_cavity, mat_gap], 'ceiling stud and cavity')
|
700
|
+
if not mat_int_finish_or_covering.nil?
|
701
|
+
constr.add_layer(mat_int_finish_or_covering)
|
702
|
+
end
|
703
|
+
constr.add_layer(inside_film)
|
704
|
+
else # floors
|
705
|
+
# Define materials
|
706
|
+
mat_2x = Material.Stud2x(joist_height_in)
|
707
|
+
if cavity_r == 0
|
708
|
+
mat_cavity = Material.AirCavityOpen(mat_2x.thick_in)
|
709
|
+
else
|
710
|
+
mat_cavity = Material.new(thick_in: mat_2x.thick_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: mat_2x.thick_in / cavity_r)
|
711
|
+
end
|
712
|
+
mat_framing = Material.new(thick_in: mat_2x.thick_in, mat_base: BaseMaterial.Wood)
|
713
|
+
mat_gap = Material.AirCavityOpen(joist_height_in)
|
714
|
+
mat_rigid = nil
|
715
|
+
if rigid_r > 0
|
716
|
+
rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
|
717
|
+
mat_rigid = Material.new(name: 'floor rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
|
718
|
+
end
|
719
|
+
|
720
|
+
# Set paths
|
721
|
+
gapFactor = get_gap_factor(install_grade, framing_factor, cavity_r)
|
722
|
+
path_fracs = [framing_factor, 1 - framing_factor - gapFactor, gapFactor]
|
723
|
+
|
724
|
+
# Define construction
|
725
|
+
constr = Construction.new(constr_name, path_fracs)
|
726
|
+
constr.add_layer(outside_film)
|
727
|
+
constr.add_layer([mat_framing, mat_cavity, mat_gap], 'floor stud and cavity')
|
728
|
+
if not mat_rigid.nil?
|
729
|
+
constr.add_layer(mat_rigid)
|
730
|
+
end
|
731
|
+
if plywood_thick_in > 0
|
732
|
+
constr.add_layer(Material.OSBSheathing(plywood_thick_in))
|
680
733
|
end
|
681
|
-
|
734
|
+
if not mat_int_finish_or_covering.nil?
|
735
|
+
constr.add_layer(mat_int_finish_or_covering)
|
736
|
+
end
|
737
|
+
constr.add_layer(inside_film)
|
738
|
+
end
|
739
|
+
|
740
|
+
constr.set_interior_material_properties()
|
741
|
+
|
742
|
+
# Create and assign construction to surfaces
|
743
|
+
constr.create_and_assign_constructions(surfaces, model)
|
744
|
+
end
|
745
|
+
|
746
|
+
def self.apply_steel_frame_floor_ceiling(model, surfaces, constr_name, is_ceiling,
|
747
|
+
cavity_r, install_grade,
|
748
|
+
framing_factor, correction_factor, joist_height_in,
|
749
|
+
plywood_thick_in, rigid_r, mat_int_finish_or_covering,
|
750
|
+
inside_film, outside_film)
|
751
|
+
|
752
|
+
# Interior finish below, open cavity above (e.g., attic floor)
|
753
|
+
# Open cavity below, floor covering above (e.g., crawlspace ceiling)
|
754
|
+
|
755
|
+
return if surfaces.empty?
|
756
|
+
|
757
|
+
if is_ceiling
|
758
|
+
# Define materials
|
759
|
+
mat_addtl_ins = nil
|
760
|
+
eR = cavity_r * correction_factor # The effective R-value of the cavity insulation with steel stud framing
|
761
|
+
if eR == 0
|
762
|
+
mat_cavity = Material.AirCavityOpen(joist_height_in)
|
763
|
+
else
|
764
|
+
if rigid_r > 0
|
765
|
+
# If there is additional insulation beyond the rafter height,
|
766
|
+
# these inputs are used for defining an additional layer
|
767
|
+
addtl_thick_in = rigid_r / 3.0 # Assume roughly R-3 per inch of loose-fill above cavity
|
768
|
+
mat_addtl_ins = Material.new(name: 'ceiling loosefill ins', thick_in: addtl_thick_in, mat_base: BaseMaterial.InsulationGenericLoosefill, k_in: addtl_thick_in / rigid_r)
|
769
|
+
end
|
770
|
+
mat_cavity = Material.new(thick_in: joist_height_in, mat_base: BaseMaterial.InsulationGenericLoosefill, k_in: joist_height_in / eR)
|
771
|
+
end
|
772
|
+
mat_gap = Material.AirCavityOpen(joist_height_in)
|
773
|
+
|
774
|
+
# Set paths
|
775
|
+
gapFactor = get_gap_factor(install_grade, framing_factor, cavity_r)
|
776
|
+
path_fracs = [1 - gapFactor, gapFactor]
|
777
|
+
|
778
|
+
# Define construction
|
779
|
+
constr = Construction.new(constr_name, path_fracs)
|
780
|
+
constr.add_layer(outside_film)
|
781
|
+
if not mat_addtl_ins.nil?
|
782
|
+
constr.add_layer(mat_addtl_ins)
|
783
|
+
end
|
784
|
+
constr.add_layer([mat_cavity, mat_gap], 'ceiling stud and cavity')
|
785
|
+
if not mat_int_finish_or_covering.nil?
|
786
|
+
constr.add_layer(mat_int_finish_or_covering)
|
787
|
+
end
|
788
|
+
constr.add_layer(inside_film)
|
789
|
+
else # floors
|
790
|
+
# Define materials
|
791
|
+
mat_2x = Material.Stud2x(joist_height_in)
|
792
|
+
eR = cavity_r * correction_factor # The effective R-value of the cavity insulation with steel stud framing
|
793
|
+
if eR == 0
|
794
|
+
mat_cavity = Material.AirCavityOpen(mat_2x.thick_in)
|
795
|
+
else
|
796
|
+
mat_cavity = Material.new(thick_in: mat_2x.thick_in, mat_base: BaseMaterial.InsulationGenericDensepack, k_in: mat_2x.thick_in / eR)
|
797
|
+
end
|
798
|
+
mat_gap = Material.AirCavityOpen(joist_height_in)
|
799
|
+
mat_rigid = nil
|
800
|
+
if rigid_r > 0
|
801
|
+
rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
|
802
|
+
mat_rigid = Material.new(name: 'floor rigid ins', thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
|
803
|
+
end
|
804
|
+
|
805
|
+
# Set paths
|
806
|
+
gapFactor = get_gap_factor(install_grade, framing_factor, cavity_r)
|
807
|
+
path_fracs = [1 - gapFactor, gapFactor]
|
808
|
+
|
809
|
+
# Define construction
|
810
|
+
constr = Construction.new(constr_name, path_fracs)
|
811
|
+
constr.add_layer(outside_film)
|
812
|
+
constr.add_layer([mat_cavity, mat_gap], 'floor stud and cavity')
|
813
|
+
if not mat_rigid.nil?
|
814
|
+
constr.add_layer(mat_rigid)
|
815
|
+
end
|
816
|
+
if plywood_thick_in > 0
|
817
|
+
constr.add_layer(Material.OSBSheathing(plywood_thick_in))
|
818
|
+
end
|
819
|
+
if not mat_int_finish_or_covering.nil?
|
820
|
+
constr.add_layer(mat_int_finish_or_covering)
|
821
|
+
end
|
822
|
+
constr.add_layer(inside_film)
|
823
|
+
end
|
824
|
+
|
825
|
+
constr.set_interior_material_properties()
|
826
|
+
|
827
|
+
# Create and assign construction to surfaces
|
828
|
+
constr.create_and_assign_constructions(surfaces, model)
|
829
|
+
end
|
830
|
+
|
831
|
+
def self.apply_sip_floor_ceiling(model, surfaces, constr_name, is_ceiling,
|
832
|
+
sip_r, sip_thick_in, framing_factor,
|
833
|
+
mat_int_finish, osb_thick_in, rigid_r,
|
834
|
+
mat_ext_finish, inside_film, outside_film,
|
835
|
+
solar_absorptance = nil, emittance = nil)
|
836
|
+
|
837
|
+
return if surfaces.empty?
|
838
|
+
|
839
|
+
if is_ceiling
|
840
|
+
constr_type = HPXML::FloorOrCeilingCeiling
|
841
|
+
else
|
842
|
+
constr_type = HPXML::FloorOrCeilingFloor
|
843
|
+
end
|
844
|
+
|
845
|
+
# Define materials
|
846
|
+
spline_thick_in = 0.5
|
847
|
+
ins_thick_in = sip_thick_in - (2.0 * spline_thick_in) # in
|
848
|
+
mat_framing_inner_outer = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.Wood)
|
849
|
+
mat_framing_middle = Material.new(thick_in: ins_thick_in, mat_base: BaseMaterial.Wood)
|
850
|
+
mat_spline = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.Wood)
|
851
|
+
mat_ins_inner_outer = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: sip_thick_in / sip_r)
|
852
|
+
mat_ins_middle = Material.new(thick_in: ins_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: sip_thick_in / sip_r)
|
853
|
+
mat_osb = nil
|
854
|
+
if osb_thick_in > 0
|
855
|
+
mat_osb = Material.OSBSheathing(osb_thick_in)
|
856
|
+
end
|
857
|
+
mat_rigid = nil
|
858
|
+
if rigid_r > 0
|
859
|
+
rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
|
860
|
+
mat_rigid = Material.new(name: "#{constr_type} rigid ins", thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
|
682
861
|
end
|
683
|
-
mat_framing = Material.new(thick_in: joist_height_in, mat_base: BaseMaterial.Wood)
|
684
|
-
mat_gap = Material.AirCavityOpen(joist_height_in)
|
685
862
|
|
686
863
|
# Set paths
|
687
|
-
|
688
|
-
|
864
|
+
spline_frac = 4.0 / 48.0 # One 4" spline for every 48" wide panel
|
865
|
+
cavity_frac = 1.0 - (spline_frac + framing_factor)
|
866
|
+
path_fracs = [framing_factor, spline_frac, cavity_frac]
|
689
867
|
|
690
868
|
# Define construction
|
691
869
|
constr = Construction.new(constr_name, path_fracs)
|
692
870
|
constr.add_layer(outside_film)
|
693
|
-
if not
|
694
|
-
constr.add_layer(
|
871
|
+
if not mat_ext_finish.nil?
|
872
|
+
constr.add_layer(mat_ext_finish)
|
873
|
+
end
|
874
|
+
constr.add_layer([mat_framing_inner_outer, mat_spline, mat_ins_inner_outer], "#{constr_type} spline layer")
|
875
|
+
constr.add_layer([mat_framing_middle, mat_ins_middle, mat_ins_middle], "#{constr_type} ins layer")
|
876
|
+
constr.add_layer([mat_framing_inner_outer, mat_spline, mat_ins_inner_outer], "#{constr_type} spline layer")
|
877
|
+
if not mat_rigid.nil?
|
878
|
+
constr.add_layer(mat_rigid)
|
879
|
+
end
|
880
|
+
if not mat_osb.nil?
|
881
|
+
constr.add_layer(mat_osb)
|
695
882
|
end
|
696
|
-
constr.add_layer([mat_framing, mat_cavity, mat_gap], 'ceiling stud and cavity')
|
697
883
|
if not mat_int_finish.nil?
|
698
884
|
constr.add_layer(mat_int_finish)
|
699
885
|
end
|
700
886
|
constr.add_layer(inside_film)
|
701
887
|
|
702
|
-
constr.
|
888
|
+
constr.set_exterior_material_properties(solar_absorptance, emittance)
|
889
|
+
constr.set_interior_material_properties()
|
703
890
|
|
704
|
-
# Create and assign construction to
|
705
|
-
constr.create_and_assign_constructions(
|
891
|
+
# Create and assign construction to surfaces
|
892
|
+
constr.create_and_assign_constructions(surfaces, model)
|
706
893
|
end
|
707
894
|
|
708
|
-
def self.
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
# Open cavity below, floor covering above (e.g., crawlspace ceiling)
|
895
|
+
def self.apply_generic_layered_floor_ceiling(model, surfaces, constr_name, is_ceiling,
|
896
|
+
thick_ins, conds, denss, specheats,
|
897
|
+
mat_int_finish, osb_thick_in, rigid_r,
|
898
|
+
mat_ext_finish, inside_film, outside_film,
|
899
|
+
solar_absorptance = nil, emittance = nil)
|
715
900
|
|
716
901
|
return if surfaces.empty?
|
717
902
|
|
718
|
-
|
719
|
-
|
720
|
-
if cavity_r == 0
|
721
|
-
mat_cavity = Material.AirCavityOpen(mat_2x.thick_in)
|
903
|
+
if is_ceiling
|
904
|
+
constr_type = HPXML::FloorOrCeilingCeiling
|
722
905
|
else
|
723
|
-
|
906
|
+
constr_type = HPXML::FloorOrCeilingFloor
|
907
|
+
end
|
908
|
+
|
909
|
+
# Validate inputs
|
910
|
+
for idx in 0..4
|
911
|
+
if (thick_ins[idx].nil? != conds[idx].nil?) || (thick_ins[idx].nil? != denss[idx].nil?) || (thick_ins[idx].nil? != specheats[idx].nil?)
|
912
|
+
fail "Layer #{idx + 1} does not have all four properties (thickness, conductivity, density, specific heat) entered."
|
913
|
+
end
|
914
|
+
end
|
915
|
+
|
916
|
+
# Define materials
|
917
|
+
mats = []
|
918
|
+
mats << Material.new(name: "#{constr_type} layer 1", thick_in: thick_ins[0], k_in: conds[0], rho: denss[0], cp: specheats[0])
|
919
|
+
if not thick_ins[1].nil?
|
920
|
+
mats << Material.new(name: "#{constr_type} layer 2", thick_in: thick_ins[1], k_in: conds[1], rho: denss[1], cp: specheats[1])
|
921
|
+
end
|
922
|
+
if not thick_ins[2].nil?
|
923
|
+
mats << Material.new(name: "#{constr_type} layer 3", thick_in: thick_ins[2], k_in: conds[2], rho: denss[2], cp: specheats[2])
|
924
|
+
end
|
925
|
+
if not thick_ins[3].nil?
|
926
|
+
mats << Material.new(name: "#{constr_type} layer 4", thick_in: thick_ins[3], k_in: conds[3], rho: denss[3], cp: specheats[3])
|
927
|
+
end
|
928
|
+
if not thick_ins[4].nil?
|
929
|
+
mats << Material.new(name: "#{constr_type} layer 5", thick_in: thick_ins[4], k_in: conds[4], rho: denss[4], cp: specheats[4])
|
930
|
+
end
|
931
|
+
mat_osb = nil
|
932
|
+
if osb_thick_in > 0
|
933
|
+
mat_osb = Material.OSBSheathing(osb_thick_in)
|
724
934
|
end
|
725
|
-
mat_framing = Material.new(thick_in: mat_2x.thick_in, mat_base: BaseMaterial.Wood)
|
726
|
-
mat_gap = Material.AirCavityOpen(joist_height_in)
|
727
935
|
mat_rigid = nil
|
728
936
|
if rigid_r > 0
|
729
937
|
rigid_thick_in = rigid_r * BaseMaterial.InsulationRigid.k_in
|
730
|
-
mat_rigid = Material.new(name:
|
938
|
+
mat_rigid = Material.new(name: "#{constr_type} rigid ins", thick_in: rigid_thick_in, mat_base: BaseMaterial.InsulationRigid, k_in: rigid_thick_in / rigid_r)
|
731
939
|
end
|
732
940
|
|
733
941
|
# Set paths
|
734
|
-
|
735
|
-
path_fracs = [framing_factor, 1 - framing_factor - gapFactor, gapFactor]
|
942
|
+
path_fracs = [1]
|
736
943
|
|
737
944
|
# Define construction
|
738
945
|
constr = Construction.new(constr_name, path_fracs)
|
739
946
|
constr.add_layer(outside_film)
|
740
|
-
|
947
|
+
if not mat_ext_finish.nil?
|
948
|
+
constr.add_layer(mat_ext_finish)
|
949
|
+
end
|
950
|
+
mats.each do |mat|
|
951
|
+
constr.add_layer(mat)
|
952
|
+
end
|
741
953
|
if not mat_rigid.nil?
|
742
954
|
constr.add_layer(mat_rigid)
|
743
955
|
end
|
744
|
-
if
|
745
|
-
constr.add_layer(
|
956
|
+
if not mat_osb.nil?
|
957
|
+
constr.add_layer(mat_osb)
|
746
958
|
end
|
747
|
-
if not
|
748
|
-
constr.add_layer(
|
959
|
+
if not mat_int_finish.nil?
|
960
|
+
constr.add_layer(mat_int_finish)
|
749
961
|
end
|
750
962
|
constr.add_layer(inside_film)
|
751
963
|
|
964
|
+
constr.set_exterior_material_properties(solar_absorptance, emittance)
|
752
965
|
constr.set_interior_material_properties()
|
753
966
|
|
754
967
|
# Create and assign construction to surfaces
|
755
|
-
constr.create_and_assign_constructions(
|
968
|
+
constr.create_and_assign_constructions(surfaces, model)
|
756
969
|
end
|
757
970
|
|
758
|
-
def self.apply_foundation_wall(
|
971
|
+
def self.apply_foundation_wall(model, surfaces, constr_name,
|
759
972
|
ext_rigid_ins_offset, int_rigid_ins_offset, ext_rigid_ins_height,
|
760
973
|
int_rigid_ins_height, ext_rigid_r, int_rigid_r, mat_int_finish,
|
761
|
-
mat_wall, height_above_grade)
|
974
|
+
mat_wall, height_above_grade, soil_k_in)
|
762
975
|
|
763
976
|
# Create Kiva foundation
|
764
977
|
foundation = apply_kiva_walled_foundation(model, ext_rigid_r, int_rigid_r, ext_rigid_ins_offset,
|
765
978
|
int_rigid_ins_offset, ext_rigid_ins_height,
|
766
979
|
int_rigid_ins_height, height_above_grade,
|
767
|
-
mat_wall.thick_in, mat_int_finish)
|
980
|
+
mat_wall.thick_in, mat_int_finish, soil_k_in)
|
768
981
|
|
769
982
|
# Define construction
|
770
983
|
constr = Construction.new(constr_name, [1])
|
@@ -774,7 +987,7 @@ class Constructions
|
|
774
987
|
end
|
775
988
|
|
776
989
|
# Create and assign construction to surfaces
|
777
|
-
constr.create_and_assign_constructions(
|
990
|
+
constr.create_and_assign_constructions(surfaces, model)
|
778
991
|
|
779
992
|
# Assign surfaces to Kiva foundation
|
780
993
|
surfaces.each do |surface|
|
@@ -782,11 +995,11 @@ class Constructions
|
|
782
995
|
end
|
783
996
|
end
|
784
997
|
|
785
|
-
def self.apply_foundation_slab(
|
998
|
+
def self.apply_foundation_slab(model, surface, constr_name,
|
786
999
|
under_r, under_width, gap_r,
|
787
1000
|
perimeter_r, perimeter_depth,
|
788
1001
|
whole_r, concrete_thick_in, exposed_perimeter,
|
789
|
-
mat_carpet, foundation)
|
1002
|
+
mat_carpet, soil_k_in, foundation)
|
790
1003
|
|
791
1004
|
return if surface.nil?
|
792
1005
|
|
@@ -795,7 +1008,7 @@ class Constructions
|
|
795
1008
|
thick = UnitConversions.convert(concrete_thick_in, 'in', 'ft')
|
796
1009
|
foundation = create_kiva_slab_foundation(model, under_r, under_width,
|
797
1010
|
gap_r, thick, perimeter_r, perimeter_depth,
|
798
|
-
concrete_thick_in)
|
1011
|
+
concrete_thick_in, soil_k_in)
|
799
1012
|
else
|
800
1013
|
# Kiva foundation (for crawlspace/basement) exists
|
801
1014
|
if (under_r > 0) && (under_width > 0)
|
@@ -813,7 +1026,7 @@ class Constructions
|
|
813
1026
|
mat_concrete = Material.Concrete(concrete_thick_in)
|
814
1027
|
else
|
815
1028
|
# Use 0.5 - 1.0 inches of soil, per Neal Kruis recommendation
|
816
|
-
mat_soil = Material.Soil(0.5)
|
1029
|
+
mat_soil = Material.Soil(0.5, soil_k_in)
|
817
1030
|
end
|
818
1031
|
mat_rigid = nil
|
819
1032
|
if whole_r > 0
|
@@ -837,14 +1050,14 @@ class Constructions
|
|
837
1050
|
end
|
838
1051
|
|
839
1052
|
# Create and assign construction to surfaces
|
840
|
-
constr.create_and_assign_constructions(
|
1053
|
+
constr.create_and_assign_constructions([surface], model)
|
841
1054
|
|
842
1055
|
# Assign surface to Kiva foundation
|
843
1056
|
surface.setAdjacentFoundation(foundation)
|
844
1057
|
surface.createSurfacePropertyExposedFoundationPerimeter('TotalExposedPerimeter', UnitConversions.convert(exposed_perimeter, 'ft', 'm'))
|
845
1058
|
end
|
846
1059
|
|
847
|
-
def self.apply_door(
|
1060
|
+
def self.apply_door(model, subsurfaces, constr_name, ufactor, inside_film, outside_film)
|
848
1061
|
return if subsurfaces.empty?
|
849
1062
|
|
850
1063
|
# Define materials
|
@@ -860,52 +1073,33 @@ class Constructions
|
|
860
1073
|
constr.add_layer(fin_door_mat)
|
861
1074
|
|
862
1075
|
# Create and assign construction to subsurfaces
|
863
|
-
constr.create_and_assign_constructions(
|
1076
|
+
constr.create_and_assign_constructions(subsurfaces, model)
|
864
1077
|
end
|
865
1078
|
|
866
|
-
def self.apply_window(
|
867
|
-
apply_window_skylight(
|
1079
|
+
def self.apply_window(model, subsurface, constr_name, ufactor, shgc)
|
1080
|
+
apply_window_skylight(model, 'Window', subsurface, constr_name, ufactor, shgc)
|
868
1081
|
end
|
869
1082
|
|
870
|
-
def self.apply_skylight(
|
871
|
-
apply_window_skylight(
|
1083
|
+
def self.apply_skylight(model, subsurface, constr_name, ufactor, shgc)
|
1084
|
+
apply_window_skylight(model, 'Skylight', subsurface, constr_name, ufactor, shgc)
|
872
1085
|
end
|
873
1086
|
|
874
|
-
def self.apply_partition_walls(
|
875
|
-
|
876
|
-
|
877
|
-
imdefs = []
|
878
|
-
|
879
|
-
# Determine additional partition wall mass required
|
880
|
-
addtl_surface_area_base = partition_wall_area * basement_frac_of_cfa
|
881
|
-
addtl_surface_area_lv = partition_wall_area * (1.0 - basement_frac_of_cfa)
|
1087
|
+
def self.apply_partition_walls(model, constr_name, mat_int_finish, partition_wall_area, spaces)
|
1088
|
+
return if partition_wall_area <= 0
|
882
1089
|
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
imdef = create_os_int_mass_and_def(model, obj_name, living_space, addtl_surface_area_lv)
|
888
|
-
imdefs << imdef
|
889
|
-
end
|
890
|
-
|
891
|
-
if addtl_surface_area_base > 0
|
892
|
-
# Add remaining partition walls within spaces (those without geometric representation)
|
893
|
-
# as internal mass object.
|
894
|
-
obj_name = 'partition wall mass below grade'
|
895
|
-
imdef = create_os_int_mass_and_def(model, obj_name, living_space, addtl_surface_area_base)
|
896
|
-
imdefs << imdef
|
897
|
-
end
|
1090
|
+
# Add remaining partition walls within spaces (those without geometric representation)
|
1091
|
+
# as internal mass object.
|
1092
|
+
obj_name = 'partition wall mass'
|
1093
|
+
imdef = create_os_int_mass_and_def(model, obj_name, spaces[HPXML::LocationLivingSpace], partition_wall_area)
|
898
1094
|
|
899
|
-
apply_wood_stud_wall(
|
1095
|
+
apply_wood_stud_wall(model, [imdef], constr_name,
|
900
1096
|
0, 1, 3.5, false, 0.16,
|
901
1097
|
mat_int_finish, 0, 0, mat_int_finish,
|
902
1098
|
Material.AirFilmVertical,
|
903
1099
|
Material.AirFilmVertical)
|
904
1100
|
end
|
905
1101
|
|
906
|
-
def self.apply_furniture(
|
907
|
-
basement_frac_of_cfa, living_space)
|
908
|
-
|
1102
|
+
def self.apply_furniture(model, furniture_mass, spaces)
|
909
1103
|
if furniture_mass.type == HPXML::FurnitureMassTypeLightWeight
|
910
1104
|
mass_lb_per_sqft = 8.0
|
911
1105
|
mat = BaseMaterial.FurnitureLightWeight
|
@@ -915,29 +1109,28 @@ class Constructions
|
|
915
1109
|
end
|
916
1110
|
|
917
1111
|
# Add user-specified furniture mass
|
918
|
-
|
1112
|
+
spaces.each do |location, space|
|
1113
|
+
floor_area = UnitConversions.convert(space.floorArea, 'm^2', 'ft^2')
|
1114
|
+
next if floor_area <= 0
|
1115
|
+
|
919
1116
|
furnAreaFraction = nil # Fraction of conditioned floor area
|
920
1117
|
furnConductivity = mat.k_in
|
921
1118
|
furnSolarAbsorptance = 0.6
|
922
1119
|
furnSpecHeat = mat.cp
|
923
1120
|
furnDensity = mat.rho
|
924
|
-
if
|
1121
|
+
if location == HPXML::LocationLivingSpace
|
925
1122
|
furnAreaFraction = furniture_mass.area_fraction
|
926
1123
|
furnMass = mass_lb_per_sqft
|
927
|
-
|
928
|
-
elsif Geometry.is_unconditioned_basement(space)
|
1124
|
+
elsif location == HPXML::LocationBasementUnconditioned
|
929
1125
|
furnAreaFraction = 0.4
|
930
1126
|
furnMass = mass_lb_per_sqft
|
931
|
-
|
932
|
-
elsif Geometry.is_garage(space)
|
1127
|
+
elsif location == HPXML::LocationGarage
|
933
1128
|
furnAreaFraction = 0.1
|
934
1129
|
furnMass = 2.0
|
935
|
-
floor_area = gfa
|
936
1130
|
end
|
937
1131
|
|
938
1132
|
next if furnAreaFraction.nil?
|
939
1133
|
next if furnAreaFraction <= 0
|
940
|
-
next if space.floorArea <= 0
|
941
1134
|
|
942
1135
|
mat_obj_name_space = "#{Constants.ObjectNameFurniture} material #{space.name}"
|
943
1136
|
constr_obj_name_space = "#{Constants.ObjectNameFurniture} construction #{space.name}"
|
@@ -955,30 +1148,11 @@ class Constructions
|
|
955
1148
|
constr = Construction.new(constr_obj_name_space, path_fracs)
|
956
1149
|
constr.add_layer(mat_fm)
|
957
1150
|
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
living_surface_area = furnAreaFraction * floor_area * (1 - basement_frac_of_cfa)
|
962
|
-
base_surface_area = furnAreaFraction * floor_area * basement_frac_of_cfa
|
963
|
-
# living furniture mass
|
964
|
-
if living_surface_area > 0
|
965
|
-
living_obj_name = mass_obj_name_space + ' above grade'
|
966
|
-
imdef = create_os_int_mass_and_def(model, living_obj_name, space, living_surface_area)
|
967
|
-
imdefs << imdef
|
968
|
-
end
|
969
|
-
# basement furniture mass
|
970
|
-
if base_surface_area > 0
|
971
|
-
base_obj_name = mass_obj_name_space + ' below grade'
|
972
|
-
imdef = create_os_int_mass_and_def(model, base_obj_name, space, base_surface_area)
|
973
|
-
imdefs << imdef
|
974
|
-
end
|
975
|
-
else
|
976
|
-
surface_area = furnAreaFraction * floor_area
|
977
|
-
imdef = create_os_int_mass_and_def(model, mass_obj_name_space, space, surface_area)
|
978
|
-
imdefs << imdef
|
979
|
-
end
|
1151
|
+
surface_area = furnAreaFraction * floor_area
|
1152
|
+
imdef = create_os_int_mass_and_def(model, mass_obj_name_space, space, surface_area)
|
1153
|
+
|
980
1154
|
# Create and assign construction to surfaces
|
981
|
-
constr.create_and_assign_constructions(
|
1155
|
+
constr.create_and_assign_constructions([imdef], model)
|
982
1156
|
end
|
983
1157
|
end
|
984
1158
|
|
@@ -1010,7 +1184,7 @@ class Constructions
|
|
1010
1184
|
|
1011
1185
|
color_map[key[0]] = value
|
1012
1186
|
end
|
1013
|
-
color = color_map.min_by { |
|
1187
|
+
color = color_map.min_by { |_k, v| (v - solar_absorptance).abs }[0]
|
1014
1188
|
return color
|
1015
1189
|
end
|
1016
1190
|
|
@@ -1021,7 +1195,7 @@ class Constructions
|
|
1021
1195
|
|
1022
1196
|
def self.get_default_wall_color(solar_absorptance)
|
1023
1197
|
map = get_wall_color_and_solar_absorptance_map
|
1024
|
-
color = map.min_by { |
|
1198
|
+
color = map.min_by { |_k, v| (v - solar_absorptance).abs }[0]
|
1025
1199
|
return color
|
1026
1200
|
end
|
1027
1201
|
|
@@ -1214,7 +1388,7 @@ class Constructions
|
|
1214
1388
|
|
1215
1389
|
def self.create_kiva_slab_foundation(model, int_horiz_r, int_horiz_width, int_vert_r,
|
1216
1390
|
int_vert_depth, ext_vert_r, ext_vert_depth,
|
1217
|
-
concrete_thick_in)
|
1391
|
+
concrete_thick_in, soil_k_in)
|
1218
1392
|
|
1219
1393
|
# Create the Foundation:Kiva object for slab foundations
|
1220
1394
|
foundation = OpenStudio::Model::FoundationKiva.new(model)
|
@@ -1244,14 +1418,15 @@ class Constructions
|
|
1244
1418
|
foundation.setWallHeightAboveGrade(UnitConversions.convert(concrete_thick_in, 'in', 'm'))
|
1245
1419
|
foundation.setWallDepthBelowSlab(UnitConversions.convert(8.0, 'in', 'm'))
|
1246
1420
|
|
1247
|
-
apply_kiva_settings(model)
|
1421
|
+
apply_kiva_settings(model, soil_k_in)
|
1248
1422
|
|
1249
1423
|
return foundation
|
1250
1424
|
end
|
1251
1425
|
|
1252
1426
|
def self.apply_kiva_walled_foundation(model, ext_vert_r, int_vert_r,
|
1253
1427
|
ext_vert_offset, int_vert_offset, ext_vert_depth, int_vert_depth,
|
1254
|
-
wall_height_above_grade, wall_material_thick_in, wall_mat_int_finish
|
1428
|
+
wall_height_above_grade, wall_material_thick_in, wall_mat_int_finish,
|
1429
|
+
soil_k_in)
|
1255
1430
|
|
1256
1431
|
# Create the Foundation:Kiva object for crawl/basement foundations
|
1257
1432
|
foundation = OpenStudio::Model::FoundationKiva.new(model)
|
@@ -1278,14 +1453,14 @@ class Constructions
|
|
1278
1453
|
foundation.setWallHeightAboveGrade(UnitConversions.convert(wall_height_above_grade, 'ft', 'm'))
|
1279
1454
|
foundation.setWallDepthBelowSlab(UnitConversions.convert(8.0, 'in', 'm'))
|
1280
1455
|
|
1281
|
-
apply_kiva_settings(model)
|
1456
|
+
apply_kiva_settings(model, soil_k_in)
|
1282
1457
|
|
1283
1458
|
return foundation
|
1284
1459
|
end
|
1285
1460
|
|
1286
|
-
def self.apply_kiva_settings(model)
|
1461
|
+
def self.apply_kiva_settings(model, soil_k_in)
|
1287
1462
|
# Set the Foundation:Kiva:Settings object
|
1288
|
-
soil_mat = BaseMaterial.Soil
|
1463
|
+
soil_mat = BaseMaterial.Soil(soil_k_in)
|
1289
1464
|
settings = model.getFoundationKivaSettings
|
1290
1465
|
settings.setSoilConductivity(UnitConversions.convert(soil_mat.k_in, 'Btu*in/(hr*ft^2*R)', 'W/(m*K)'))
|
1291
1466
|
settings.setSoilDensity(UnitConversions.convert(soil_mat.rho, 'lbm/ft^3', 'kg/m^3'))
|
@@ -1298,7 +1473,113 @@ class Constructions
|
|
1298
1473
|
settings.setDeepGroundDepth(40)
|
1299
1474
|
settings.setMinimumCellDimension(0.2)
|
1300
1475
|
settings.setMaximumCellGrowthCoefficient(3.0)
|
1301
|
-
|
1476
|
+
# Using 'Timestep' instead of 'Hourly' below because it makes timeseries
|
1477
|
+
# results smoother with only a small increase in runtime (generally
|
1478
|
+
# less than 10%).
|
1479
|
+
settings.setSimulationTimestep('Timestep')
|
1480
|
+
end
|
1481
|
+
|
1482
|
+
def self.apply_kiva_initial_temp(foundation, slab, weather, conditioned_zone,
|
1483
|
+
sim_begin_month, sim_begin_day, sim_year, schedules_file,
|
1484
|
+
foundation_walls_insulated, foundation_ceiling_insulated)
|
1485
|
+
# Set Kiva foundation initial temperature
|
1486
|
+
|
1487
|
+
outdoor_temp = weather.data.MonthlyAvgDrybulbs[sim_begin_month - 1]
|
1488
|
+
|
1489
|
+
# Approximate indoor temperature
|
1490
|
+
if conditioned_zone.thermostatSetpointDualSetpoint.is_initialized
|
1491
|
+
# Building has HVAC system
|
1492
|
+
setpoint_sch = conditioned_zone.thermostatSetpointDualSetpoint.get
|
1493
|
+
sim_begin_date = OpenStudio::Date.new(OpenStudio::MonthOfYear.new(sim_begin_month), sim_begin_day, sim_year)
|
1494
|
+
sim_begin_hour = (Schedule.get_day_num_from_month_day(sim_year, sim_begin_month, sim_begin_day) - 1) * 24
|
1495
|
+
|
1496
|
+
# Get heating/cooling setpoints for the simulation start
|
1497
|
+
htg_setpoint_sch = setpoint_sch.heatingSetpointTemperatureSchedule.get
|
1498
|
+
if htg_setpoint_sch.to_ScheduleRuleset.is_initialized
|
1499
|
+
htg_day_sch = htg_setpoint_sch.to_ScheduleRuleset.get.getDaySchedules(sim_begin_date, sim_begin_date)[0]
|
1500
|
+
heat_setpoint = UnitConversions.convert(htg_day_sch.values[0], 'C', 'F')
|
1501
|
+
else
|
1502
|
+
heat_setpoint = schedules_file.schedules[SchedulesFile::ColumnHeatingSetpoint][sim_begin_hour]
|
1503
|
+
end
|
1504
|
+
clg_setpoint_sch = setpoint_sch.coolingSetpointTemperatureSchedule.get
|
1505
|
+
if clg_setpoint_sch.to_ScheduleRuleset.is_initialized
|
1506
|
+
clg_day_sch = clg_setpoint_sch.to_ScheduleRuleset.get.getDaySchedules(sim_begin_date, sim_begin_date)[0]
|
1507
|
+
cool_setpoint = UnitConversions.convert(clg_day_sch.values[0], 'C', 'F')
|
1508
|
+
else
|
1509
|
+
cool_setpoint = schedules_file.schedules[SchedulesFile::ColumnCoolingSetpoint][sim_begin_hour]
|
1510
|
+
end
|
1511
|
+
|
1512
|
+
# Methodology adapted from https://github.com/NREL/EnergyPlus/blob/b18a2733c3131db808feac44bc278a14b05d8e1f/src/EnergyPlus/HeatBalanceKivaManager.cc#L303-L313
|
1513
|
+
heat_balance_temp = UnitConversions.convert(10.0, 'C', 'F')
|
1514
|
+
cool_balance_temp = UnitConversions.convert(15.0, 'C', 'F')
|
1515
|
+
if outdoor_temp < heat_balance_temp
|
1516
|
+
indoor_temp = heat_setpoint
|
1517
|
+
elsif outdoor_temp > cool_balance_temp
|
1518
|
+
indoor_temp = cool_setpoint
|
1519
|
+
elsif cool_balance_temp == heat_balance_temp
|
1520
|
+
indoor_temp = heat_balance_temp
|
1521
|
+
else
|
1522
|
+
weight = (cool_balance_temp - outdoor_temp) / (cool_balance_temp - heat_balance_temp)
|
1523
|
+
indoor_temp = heat_setpoint * weight + cool_setpoint * (1.0 - weight)
|
1524
|
+
end
|
1525
|
+
else
|
1526
|
+
# Building does not have HVAC system
|
1527
|
+
indoor_temp = outdoor_temp
|
1528
|
+
end
|
1529
|
+
|
1530
|
+
# Determine initial temperature
|
1531
|
+
# For unconditioned spaces, this overrides EnergyPlus's built-in assumption of 22C (71.6F);
|
1532
|
+
# see https://github.com/NREL/EnergyPlus/blob/b18a2733c3131db808feac44bc278a14b05d8e1f/src/EnergyPlus/HeatBalanceKivaManager.cc#L257-L259
|
1533
|
+
# For conditioned spaces, this avoids an E+ 22.2 bug; see https://github.com/NREL/EnergyPlus/issues/9692
|
1534
|
+
if HPXML::conditioned_locations.include? slab.interior_adjacent_to
|
1535
|
+
initial_temp = indoor_temp
|
1536
|
+
else
|
1537
|
+
# Space temperature assumptions from ASHRAE 152 - Duct Efficiency Calculations.xls, Zone temperatures
|
1538
|
+
ground_temp = weather.data.GroundMonthlyTemps[sim_begin_month - 1]
|
1539
|
+
if slab.interior_adjacent_to == HPXML::LocationBasementUnconditioned
|
1540
|
+
if foundation_ceiling_insulated
|
1541
|
+
# Insulated ceiling: 75% ground, 25% outdoor, 0% indoor
|
1542
|
+
ground_weight, outdoor_weight, indoor_weight = 0.75, 0.25, 0.0
|
1543
|
+
elsif foundation_walls_insulated
|
1544
|
+
# Insulated walls: 50% ground, 0% outdoor, 50% indoor (case not in ASHRAE 152)
|
1545
|
+
ground_weight, outdoor_weight, indoor_weight = 0.5, 0.0, 0.5
|
1546
|
+
else
|
1547
|
+
# Uninsulated: 50% ground, 20% outdoor, 30% indoor
|
1548
|
+
ground_weight, outdoor_weight, indoor_weight = 0.5, 0.2, 0.3
|
1549
|
+
end
|
1550
|
+
initial_temp = outdoor_temp * outdoor_weight + ground_temp * ground_weight + indoor_weight * indoor_temp
|
1551
|
+
elsif slab.interior_adjacent_to == HPXML::LocationCrawlspaceVented
|
1552
|
+
if foundation_ceiling_insulated
|
1553
|
+
# Insulated ceiling: 90% outdoor, 10% indoor
|
1554
|
+
outdoor_weight, indoor_weight = 0.9, 0.1
|
1555
|
+
elsif foundation_walls_insulated
|
1556
|
+
# Insulated walls: 25% outdoor, 75% indoor (case not in ASHRAE 152)
|
1557
|
+
outdoor_weight, indoor_weight = 0.25, 0.75
|
1558
|
+
else
|
1559
|
+
# Uninsulated: 50% outdoor, 50% indoor
|
1560
|
+
outdoor_weight, indoor_weight = 0.5, 0.5
|
1561
|
+
end
|
1562
|
+
initial_temp = outdoor_temp * outdoor_weight + indoor_weight * indoor_temp
|
1563
|
+
elsif slab.interior_adjacent_to == HPXML::LocationCrawlspaceUnvented
|
1564
|
+
if foundation_ceiling_insulated
|
1565
|
+
# Insulated ceiling: 85% outdoor, 15% indoor
|
1566
|
+
outdoor_weight, indoor_weight = 0.85, 0.15
|
1567
|
+
elsif foundation_walls_insulated
|
1568
|
+
# Insulated walls: 25% outdoor, 75% indoor
|
1569
|
+
outdoor_weight, indoor_weight = 0.25, 0.75
|
1570
|
+
else
|
1571
|
+
# Uninsulated: 40% outdoor, 60% indoor
|
1572
|
+
outdoor_weight, indoor_weight = 0.4, 0.6
|
1573
|
+
end
|
1574
|
+
initial_temp = outdoor_temp * outdoor_weight + indoor_weight * indoor_temp
|
1575
|
+
elsif slab.interior_adjacent_to == HPXML::LocationGarage
|
1576
|
+
initial_temp = outdoor_temp + 11.0
|
1577
|
+
else
|
1578
|
+
fail "Unhandled space: #{slab.interior_adjacent_to}"
|
1579
|
+
end
|
1580
|
+
end
|
1581
|
+
|
1582
|
+
foundation.setInitialIndoorAirTemperature(UnitConversions.convert(initial_temp, 'F', 'C'))
|
1302
1583
|
end
|
1303
1584
|
|
1304
1585
|
def self.create_insulation_material(model, name, rvalue)
|
@@ -1313,20 +1594,7 @@ class Constructions
|
|
1313
1594
|
return mat
|
1314
1595
|
end
|
1315
1596
|
|
1316
|
-
def self.
|
1317
|
-
footing_mat = Material.Concrete(8.0)
|
1318
|
-
mat = OpenStudio::Model::StandardOpaqueMaterial.new(model)
|
1319
|
-
mat.setName(name)
|
1320
|
-
mat.setRoughness('Rough')
|
1321
|
-
mat.setThickness(UnitConversions.convert(footing_mat.thick_in, 'in', 'm'))
|
1322
|
-
mat.setConductivity(UnitConversions.convert(footing_mat.k_in, 'Btu*in/(hr*ft^2*R)', 'W/(m*K)'))
|
1323
|
-
mat.setDensity(UnitConversions.convert(footing_mat.rho, 'lbm/ft^3', 'kg/m^3'))
|
1324
|
-
mat.setSpecificHeat(UnitConversions.convert(footing_mat.cp, 'Btu/(lbm*R)', 'J/(kg*K)'))
|
1325
|
-
mat.setThermalAbsorptance(footing_mat.tAbs)
|
1326
|
-
return mat
|
1327
|
-
end
|
1328
|
-
|
1329
|
-
def self.apply_window_skylight(runner, model, type, subsurface, constr_name, ufactor, shgc)
|
1597
|
+
def self.apply_window_skylight(model, type, subsurface, constr_name, ufactor, shgc)
|
1330
1598
|
# Define materials
|
1331
1599
|
if type == 'Skylight'
|
1332
1600
|
# As of 2004, NFRC skylights are rated at a 20-degree slope (instead of vertical), but
|
@@ -1346,7 +1614,7 @@ class Constructions
|
|
1346
1614
|
constr.add_layer(glaz_mat)
|
1347
1615
|
|
1348
1616
|
# Create and assign construction to subsurfaces
|
1349
|
-
constr.create_and_assign_constructions(
|
1617
|
+
constr.create_and_assign_constructions([subsurface], model)
|
1350
1618
|
end
|
1351
1619
|
|
1352
1620
|
def self.apply_window_skylight_shading(model, window_or_skylight, index, shading_vertices, parent_surface, sub_surface, shading_group,
|
@@ -1440,7 +1708,6 @@ class Constructions
|
|
1440
1708
|
mat_int_finish, inside_film, outside_film, mat_ext_finish,
|
1441
1709
|
solar_absorptance, emittance)
|
1442
1710
|
|
1443
|
-
film_r = inside_film.rvalue + outside_film.rvalue
|
1444
1711
|
if mat_ext_finish.nil?
|
1445
1712
|
fallback_mat_ext_finish = nil
|
1446
1713
|
else
|
@@ -1463,9 +1730,9 @@ class Constructions
|
|
1463
1730
|
WoodStudConstructionSet.new(Material.Stud2x4, 0.23, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x4, 16" o.c.
|
1464
1731
|
WoodStudConstructionSet.new(Material.Stud2x4, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
|
1465
1732
|
]
|
1466
|
-
match, constr_set, cavity_r = pick_wood_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1733
|
+
match, constr_set, cavity_r = pick_wood_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1467
1734
|
|
1468
|
-
apply_wood_stud_wall(
|
1735
|
+
apply_wood_stud_wall(model, surfaces, "#{wall_id} construction",
|
1469
1736
|
cavity_r, install_grade, constr_set.stud.thick_in,
|
1470
1737
|
cavity_filled, constr_set.framing_factor,
|
1471
1738
|
constr_set.mat_int_finish, constr_set.osb_thick_in,
|
@@ -1484,9 +1751,9 @@ class Constructions
|
|
1484
1751
|
SteelStudConstructionSet.new(3.5, corr_factor, 0.23, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x4, 16" o.c.
|
1485
1752
|
SteelStudConstructionSet.new(3.5, 1.0, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
|
1486
1753
|
]
|
1487
|
-
match, constr_set, cavity_r = pick_steel_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1754
|
+
match, constr_set, cavity_r = pick_steel_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1488
1755
|
|
1489
|
-
apply_steel_stud_wall(
|
1756
|
+
apply_steel_stud_wall(model, surfaces, "#{wall_id} construction",
|
1490
1757
|
cavity_r, install_grade, constr_set.cavity_thick_in,
|
1491
1758
|
cavity_filled, constr_set.framing_factor,
|
1492
1759
|
constr_set.corr_factor, constr_set.mat_int_finish,
|
@@ -1501,9 +1768,9 @@ class Constructions
|
|
1501
1768
|
DoubleStudConstructionSet.new(Material.Stud2x4, 0.23, 24.0, 0.0, 0.5, mat_int_finish, mat_ext_finish), # 2x4, 24" o.c.
|
1502
1769
|
DoubleStudConstructionSet.new(Material.Stud2x4, 0.01, 16.0, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
|
1503
1770
|
]
|
1504
|
-
match, constr_set, cavity_r = pick_double_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1771
|
+
match, constr_set, cavity_r = pick_double_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1505
1772
|
|
1506
|
-
apply_double_stud_wall(
|
1773
|
+
apply_double_stud_wall(model, surfaces, "#{wall_id} construction",
|
1507
1774
|
cavity_r, install_grade, constr_set.stud.thick_in,
|
1508
1775
|
constr_set.stud.thick_in, constr_set.framing_factor,
|
1509
1776
|
constr_set.framing_spacing, is_staggered,
|
@@ -1521,9 +1788,9 @@ class Constructions
|
|
1521
1788
|
CMUConstructionSet.new(8.0, 1.4, 0.08, 0.5, mat_int_finish, mat_ext_finish), # 8" perlite-filled CMU
|
1522
1789
|
CMUConstructionSet.new(6.0, 5.29, 0.01, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback (6" hollow CMU)
|
1523
1790
|
]
|
1524
|
-
match, constr_set, rigid_r = pick_cmu_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1791
|
+
match, constr_set, rigid_r = pick_cmu_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1525
1792
|
|
1526
|
-
apply_cmu_wall(
|
1793
|
+
apply_cmu_wall(model, surfaces, "#{wall_id} construction",
|
1527
1794
|
constr_set.thick_in, constr_set.cond_in, density,
|
1528
1795
|
constr_set.framing_factor, furring_r,
|
1529
1796
|
furring_cavity_depth_in, furring_spacing,
|
@@ -1538,9 +1805,9 @@ class Constructions
|
|
1538
1805
|
SIPConstructionSet.new(5.0, 0.16, 0.0, sheathing_thick_in, 0.5, mat_int_finish, mat_ext_finish), # 5" SIP core
|
1539
1806
|
SIPConstructionSet.new(1.0, 0.01, 0.0, sheathing_thick_in, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
|
1540
1807
|
]
|
1541
|
-
match, constr_set, cavity_r = pick_sip_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1808
|
+
match, constr_set, cavity_r = pick_sip_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1542
1809
|
|
1543
|
-
apply_sip_wall(
|
1810
|
+
apply_sip_wall(model, surfaces, "#{wall_id} construction",
|
1544
1811
|
cavity_r, constr_set.thick_in, constr_set.framing_factor,
|
1545
1812
|
constr_set.sheath_thick_in, constr_set.mat_int_finish,
|
1546
1813
|
constr_set.osb_thick_in, constr_set.rigid_r,
|
@@ -1551,9 +1818,9 @@ class Constructions
|
|
1551
1818
|
ICFConstructionSet.new(2.0, 4.0, 0.08, 0.0, 0.5, mat_int_finish, mat_ext_finish), # ICF w/4" concrete and 2" rigid ins layers
|
1552
1819
|
ICFConstructionSet.new(1.0, 1.0, 0.01, 0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
|
1553
1820
|
]
|
1554
|
-
match, constr_set, icf_r = pick_icf_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1821
|
+
match, constr_set, icf_r = pick_icf_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1555
1822
|
|
1556
|
-
apply_icf_wall(
|
1823
|
+
apply_icf_wall(model, surfaces, "#{wall_id} construction",
|
1557
1824
|
icf_r, constr_set.ins_thick_in,
|
1558
1825
|
constr_set.concrete_thick_in, constr_set.framing_factor,
|
1559
1826
|
constr_set.mat_int_finish, constr_set.osb_thick_in,
|
@@ -1566,7 +1833,7 @@ class Constructions
|
|
1566
1833
|
GenericConstructionSet.new(0.0, 0.5, mat_int_finish, mat_ext_finish), # Standard
|
1567
1834
|
GenericConstructionSet.new(0.0, 0.0, fallback_mat_int_finish, fallback_mat_ext_finish), # Fallback
|
1568
1835
|
]
|
1569
|
-
match, constr_set, layer_r = pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
1836
|
+
match, constr_set, layer_r = pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1570
1837
|
|
1571
1838
|
if wall_type == HPXML::WallTypeConcrete
|
1572
1839
|
thick_in = 6.0
|
@@ -1576,7 +1843,7 @@ class Constructions
|
|
1576
1843
|
base_mat = BaseMaterial.Brick
|
1577
1844
|
elsif wall_type == HPXML::WallTypeAdobe
|
1578
1845
|
thick_in = 10.0
|
1579
|
-
base_mat = BaseMaterial.Soil
|
1846
|
+
base_mat = BaseMaterial.Soil(12.0)
|
1580
1847
|
elsif wall_type == HPXML::WallTypeStrawBale
|
1581
1848
|
thick_in = 23.0
|
1582
1849
|
base_mat = BaseMaterial.StrawBale
|
@@ -1596,7 +1863,7 @@ class Constructions
|
|
1596
1863
|
denss = [base_mat.rho]
|
1597
1864
|
specheats = [base_mat.cp]
|
1598
1865
|
|
1599
|
-
apply_generic_layered_wall(
|
1866
|
+
apply_generic_layered_wall(model, surfaces, "#{wall_id} construction",
|
1600
1867
|
thick_ins, conds, denss, specheats,
|
1601
1868
|
constr_set.mat_int_finish, constr_set.osb_thick_in,
|
1602
1869
|
constr_set.rigid_r, constr_set.mat_ext_finish,
|
@@ -1609,7 +1876,109 @@ class Constructions
|
|
1609
1876
|
check_surface_assembly_rvalue(runner, surfaces, inside_film, outside_film, assembly_r, match)
|
1610
1877
|
end
|
1611
1878
|
|
1612
|
-
def self.
|
1879
|
+
def self.apply_floor_ceiling_construction(runner, model, surface, floor_id, floor_type, is_ceiling, assembly_r,
|
1880
|
+
mat_int_finish_or_covering, inside_film, outside_film)
|
1881
|
+
|
1882
|
+
if mat_int_finish_or_covering.nil?
|
1883
|
+
fallback_mat_int_finish_or_covering = nil
|
1884
|
+
else
|
1885
|
+
if is_ceiling
|
1886
|
+
fallback_mat_int_finish_or_covering = Material.InteriorFinishMaterial(mat_int_finish_or_covering.name, 0.1) # Try thin material
|
1887
|
+
else
|
1888
|
+
fallback_mat_int_finish_or_covering = Material.CoveringBare(0.8, 0.01) # Try thin material
|
1889
|
+
end
|
1890
|
+
end
|
1891
|
+
osb_thick_in = (is_ceiling ? 0.0 : 0.75)
|
1892
|
+
|
1893
|
+
if floor_type == HPXML::FloorTypeWoodFrame
|
1894
|
+
install_grade = 1
|
1895
|
+
constr_sets = [
|
1896
|
+
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 50.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R50
|
1897
|
+
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 40.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R40
|
1898
|
+
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 30.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R30
|
1899
|
+
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 20.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R20
|
1900
|
+
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 10.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R10
|
1901
|
+
WoodStudConstructionSet.new(Material.Stud2x6, 0.10, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c.
|
1902
|
+
WoodStudConstructionSet.new(Material.Stud2x4, 0.13, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x4, 16" o.c.
|
1903
|
+
WoodStudConstructionSet.new(Material.Stud2x4, 0.01, 0.0, 0.0, fallback_mat_int_finish_or_covering, nil), # Fallback
|
1904
|
+
]
|
1905
|
+
match, constr_set, cavity_r = pick_wood_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1906
|
+
constr_int_finish_or_covering = constr_set.mat_int_finish
|
1907
|
+
|
1908
|
+
apply_wood_frame_floor_ceiling(model, surface, "#{floor_id} construction", is_ceiling,
|
1909
|
+
cavity_r, install_grade,
|
1910
|
+
constr_set.framing_factor, constr_set.stud.thick_in,
|
1911
|
+
constr_set.osb_thick_in, constr_set.rigid_r, constr_int_finish_or_covering,
|
1912
|
+
inside_film, outside_film)
|
1913
|
+
|
1914
|
+
elsif floor_type == HPXML::FloorTypeSteelFrame
|
1915
|
+
install_grade = 1
|
1916
|
+
corr_factor = 0.45
|
1917
|
+
osb_thick_in = (is_ceiling ? 0.0 : 0.75)
|
1918
|
+
constr_sets = [
|
1919
|
+
SteelStudConstructionSet.new(5.5, corr_factor, 0.10, 50.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R50
|
1920
|
+
SteelStudConstructionSet.new(5.5, corr_factor, 0.10, 40.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R40
|
1921
|
+
SteelStudConstructionSet.new(5.5, corr_factor, 0.10, 30.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R30
|
1922
|
+
SteelStudConstructionSet.new(5.5, corr_factor, 0.10, 20.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R20
|
1923
|
+
SteelStudConstructionSet.new(5.5, corr_factor, 0.10, 10.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x6, 24" o.c. + R10
|
1924
|
+
SteelStudConstructionSet.new(3.5, corr_factor, 0.13, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 2x4, 16" o.c.
|
1925
|
+
SteelStudConstructionSet.new(3.5, 1.0, 0.01, 0.0, 0.0, fallback_mat_int_finish_or_covering, nil), # Fallback
|
1926
|
+
]
|
1927
|
+
match, constr_set, cavity_r = pick_steel_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1928
|
+
constr_int_finish_or_covering = constr_set.mat_int_finish
|
1929
|
+
|
1930
|
+
apply_steel_frame_floor_ceiling(model, surface, "#{floor_id} construction", is_ceiling,
|
1931
|
+
cavity_r, install_grade,
|
1932
|
+
constr_set.framing_factor, constr_set.corr_factor, constr_set.cavity_thick_in,
|
1933
|
+
constr_set.osb_thick_in, constr_set.rigid_r, constr_int_finish_or_covering,
|
1934
|
+
inside_film, outside_film)
|
1935
|
+
|
1936
|
+
elsif floor_type == HPXML::FloorTypeSIP
|
1937
|
+
constr_sets = [
|
1938
|
+
SIPConstructionSet.new(16.0, 0.16, 0.0, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 16" SIP core
|
1939
|
+
SIPConstructionSet.new(12.0, 0.16, 0.0, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 12" SIP core
|
1940
|
+
SIPConstructionSet.new(8.0, 0.16, 0.0, 0.0, osb_thick_in, mat_int_finish_or_covering, nil), # 8" SIP core
|
1941
|
+
SIPConstructionSet.new(1.0, 0.01, 0.0, 0.0, 0.0, fallback_mat_int_finish_or_covering, nil), # Fallback
|
1942
|
+
]
|
1943
|
+
match, constr_set, cavity_r = pick_sip_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1944
|
+
|
1945
|
+
apply_sip_floor_ceiling(model, surface, "#{floor_id} construction", is_ceiling,
|
1946
|
+
cavity_r, constr_set.thick_in, constr_set.framing_factor,
|
1947
|
+
constr_set.mat_int_finish, constr_set.osb_thick_in, constr_set.rigid_r,
|
1948
|
+
constr_set.mat_ext_finish, inside_film, outside_film)
|
1949
|
+
elsif floor_type == HPXML::FloorTypeConcrete
|
1950
|
+
constr_sets = [
|
1951
|
+
GenericConstructionSet.new(20.0, osb_thick_in, mat_int_finish_or_covering, nil), # w/R-20 rigid
|
1952
|
+
GenericConstructionSet.new(10.0, osb_thick_in, mat_int_finish_or_covering, nil), # w/R-10 rigid
|
1953
|
+
GenericConstructionSet.new(0.0, osb_thick_in, mat_int_finish_or_covering, nil), # Standard
|
1954
|
+
GenericConstructionSet.new(0.0, 0.0, fallback_mat_int_finish_or_covering, nil), # Fallback
|
1955
|
+
]
|
1956
|
+
match, constr_set, layer_r = pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1957
|
+
|
1958
|
+
thick_in = 6.0
|
1959
|
+
base_mat = BaseMaterial.Concrete
|
1960
|
+
thick_ins = [thick_in]
|
1961
|
+
if layer_r == 0
|
1962
|
+
conds = [99]
|
1963
|
+
else
|
1964
|
+
conds = [thick_in / layer_r]
|
1965
|
+
end
|
1966
|
+
denss = [base_mat.rho]
|
1967
|
+
specheats = [base_mat.cp]
|
1968
|
+
|
1969
|
+
apply_generic_layered_floor_ceiling(model, surface, "#{floor_id} construction", is_ceiling,
|
1970
|
+
thick_ins, conds, denss, specheats,
|
1971
|
+
constr_set.mat_int_finish, constr_set.osb_thick_in,
|
1972
|
+
constr_set.rigid_r, constr_set.mat_ext_finish,
|
1973
|
+
inside_film, outside_film)
|
1974
|
+
else
|
1975
|
+
fail "Unexpected floor type '#{floor_type}'."
|
1976
|
+
end
|
1977
|
+
|
1978
|
+
check_surface_assembly_rvalue(runner, surface, inside_film, outside_film, assembly_r, match)
|
1979
|
+
end
|
1980
|
+
|
1981
|
+
def self.pick_wood_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1613
1982
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1614
1983
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1615
1984
|
|
@@ -1631,7 +2000,7 @@ class Constructions
|
|
1631
2000
|
return false, constr_sets[-1], 0.0 # Pick fallback construction with minimum R-value
|
1632
2001
|
end
|
1633
2002
|
|
1634
|
-
def self.pick_steel_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
2003
|
+
def self.pick_steel_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1635
2004
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1636
2005
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1637
2006
|
|
@@ -1652,7 +2021,7 @@ class Constructions
|
|
1652
2021
|
return false, constr_sets[-1], 0.0 # Pick fallback construction with minimum R-value
|
1653
2022
|
end
|
1654
2023
|
|
1655
|
-
def self.pick_double_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
2024
|
+
def self.pick_double_stud_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1656
2025
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1657
2026
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1658
2027
|
|
@@ -1667,7 +2036,6 @@ class Constructions
|
|
1667
2036
|
# Solved in Wolfram Alpha: https://www.wolframalpha.com/input/?i=1%2FA+%3D+B%2F(2*C%2Bx%2BD)+%2B+E%2F(3*C%2BD)+%2B+(1-B-E)%2F(3*x%2BD)
|
1668
2037
|
stud_frac = 1.5 / constr_set.framing_spacing
|
1669
2038
|
misc_framing_factor = constr_set.framing_factor - stud_frac
|
1670
|
-
cavity_frac = 1.0 - (2 * stud_frac + misc_framing_factor)
|
1671
2039
|
a = assembly_r
|
1672
2040
|
b = stud_frac
|
1673
2041
|
c = constr_set.stud.rvalue
|
@@ -1683,7 +2051,7 @@ class Constructions
|
|
1683
2051
|
return false, constr_sets[-1], 0.0 # Pick fallback construction with minimum R-value
|
1684
2052
|
end
|
1685
2053
|
|
1686
|
-
def self.pick_sip_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
2054
|
+
def self.pick_sip_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1687
2055
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1688
2056
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1689
2057
|
|
@@ -1701,7 +2069,6 @@ class Constructions
|
|
1701
2069
|
framing_r = Material.new(thick_in: constr_set.thick_in, mat_base: BaseMaterial.Wood).rvalue
|
1702
2070
|
spline_r = Material.new(thick_in: spline_thick_in, mat_base: BaseMaterial.Wood).rvalue
|
1703
2071
|
spline_frac = 4.0 / 48.0 # One 4" spline for every 48" wide panel
|
1704
|
-
cavity_frac = 1.0 - (spline_frac + constr_set.framing_factor)
|
1705
2072
|
a = assembly_r
|
1706
2073
|
b = constr_set.framing_factor
|
1707
2074
|
c = framing_r
|
@@ -1719,7 +2086,7 @@ class Constructions
|
|
1719
2086
|
return false, constr_sets[-1], 0.0 # Pick fallback construction with minimum R-value
|
1720
2087
|
end
|
1721
2088
|
|
1722
|
-
def self.pick_cmu_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
2089
|
+
def self.pick_cmu_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1723
2090
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1724
2091
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1725
2092
|
|
@@ -1746,7 +2113,7 @@ class Constructions
|
|
1746
2113
|
return false, constr_sets[-1], 0.0 # Pick fallback construction with minimum R-value
|
1747
2114
|
end
|
1748
2115
|
|
1749
|
-
def self.pick_icf_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
2116
|
+
def self.pick_icf_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1750
2117
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1751
2118
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1752
2119
|
|
@@ -1772,7 +2139,7 @@ class Constructions
|
|
1772
2139
|
return false, constr_sets[-1], 0.0 # Pick fallback construction with minimum R-value
|
1773
2140
|
end
|
1774
2141
|
|
1775
|
-
def self.pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film
|
2142
|
+
def self.pick_generic_construction_set(assembly_r, constr_sets, inside_film, outside_film)
|
1776
2143
|
# Picks a construction set from supplied constr_sets for which a positive R-value
|
1777
2144
|
# can be calculated for the unknown insulation to achieve the assembly R-value.
|
1778
2145
|
|
@@ -1910,11 +2277,11 @@ class Construction
|
|
1910
2277
|
|
1911
2278
|
# Creates constructions as needed and assigns to surfaces.
|
1912
2279
|
# Leave name as nil if the materials (e.g., exterior finish) apply to multiple constructions.
|
1913
|
-
def create_and_assign_constructions(
|
2280
|
+
def create_and_assign_constructions(surfaces, model)
|
1914
2281
|
validate
|
1915
2282
|
|
1916
2283
|
# Create list of OpenStudio materials
|
1917
|
-
materials = construct_materials(
|
2284
|
+
materials = construct_materials(model)
|
1918
2285
|
|
1919
2286
|
# Create OpenStudio construction and assign to surface
|
1920
2287
|
constr = OpenStudio::Model::Construction.new(model)
|
@@ -1944,7 +2311,7 @@ class Construction
|
|
1944
2311
|
end
|
1945
2312
|
end
|
1946
2313
|
|
1947
|
-
def set_interior_material_properties(solar_absorptance = 0.6, emittance = 0.9
|
2314
|
+
def set_interior_material_properties(solar_absorptance = 0.6, emittance = 0.9)
|
1948
2315
|
if @layers_materials.size > 3 # Only apply if there is a separate interior material
|
1949
2316
|
@layers_materials[-2].each do |interior_material|
|
1950
2317
|
interior_material.sAbs = solar_absorptance
|
@@ -2016,17 +2383,17 @@ class Construction
|
|
2016
2383
|
return mat
|
2017
2384
|
end
|
2018
2385
|
|
2019
|
-
def construct_materials(
|
2386
|
+
def construct_materials(model)
|
2020
2387
|
# Create materials
|
2021
2388
|
materials = []
|
2022
2389
|
@layers_materials.each_with_index do |layer_materials, layer_num|
|
2023
2390
|
if layer_materials.size == 1
|
2024
2391
|
next if layer_materials[0].name == Constants.AirFilm # Do not include air films in construction
|
2025
2392
|
|
2026
|
-
mat = Construction.create_os_material(
|
2393
|
+
mat = Construction.create_os_material(model, layer_materials[0])
|
2027
2394
|
else
|
2028
2395
|
parallel_path_mat = get_parallel_material(layer_num, @layers_names[layer_num])
|
2029
|
-
mat = Construction.create_os_material(
|
2396
|
+
mat = Construction.create_os_material(model, parallel_path_mat)
|
2030
2397
|
end
|
2031
2398
|
materials << mat
|
2032
2399
|
end
|
@@ -2123,7 +2490,7 @@ class Construction
|
|
2123
2490
|
end
|
2124
2491
|
|
2125
2492
|
# Creates (or returns an existing) OpenStudio Material from our own Material object
|
2126
|
-
def self.create_os_material(
|
2493
|
+
def self.create_os_material(model, material)
|
2127
2494
|
name = material.name
|
2128
2495
|
tolerance = 0.0001
|
2129
2496
|
if material.is_a? GlazingMaterial
|