urbanopt-cli 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/release.yml +24 -0
- data/.github/workflows/nightly_ci_build.yml +39 -29
- data/.gitignore +1 -0
- data/CHANGELOG.md +17 -0
- data/CMakeLists.txt +7 -7
- data/FindOpenStudioSDK.cmake +8 -8
- data/LICENSE.md +8 -35
- data/README.md +25 -10
- data/example_files/Gemfile +9 -9
- data/example_files/example_project_combined.json +6 -2
- data/example_files/example_project_with_ghe.json +859 -0
- data/example_files/mappers/Baseline.rb +39 -415
- data/example_files/mappers/ChilledWaterStorage.rb +1 -1
- data/example_files/mappers/CreateBar.rb +1 -1
- data/example_files/mappers/EvCharging.rb +1 -1
- data/example_files/mappers/FlexibleHotWater.rb +1 -1
- data/example_files/mappers/Floorspace.rb +1 -1
- data/example_files/mappers/HighEfficiency.rb +1 -1
- data/example_files/mappers/HighEfficiencyCreateBar.rb +1 -1
- data/example_files/mappers/HighEfficiencyFloorspace.rb +1 -1
- data/example_files/mappers/PeakHoursMelsShedding.rb +1 -1
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +1 -1
- data/example_files/mappers/ThermalStorage.rb +1 -1
- data/example_files/mappers/base_workflow.osw +11 -4
- data/example_files/mappers/residential/template/util.rb +138 -0
- data/example_files/mappers/residential/util.rb +276 -0
- data/example_files/measures/BuildResidentialModel/measure.rb +118 -230
- data/example_files/measures/BuildResidentialModel/measure.xml +344 -233
- data/example_files/measures/BuildResidentialModel/resources/geometry.rb +7 -2
- data/example_files/measures/BuildResidentialModel/resources/unit_conversions.rb +5 -0
- data/example_files/measures/BuildResidentialModel/resources/util.rb +5 -0
- data/example_files/measures/BuildResidentialModel/tests/test_build_residential_model.rb +344 -0
- data/example_files/measures/BuildResidentialModel/tests/xml_building/17/feature1.xml +2112 -0
- data/example_files/measures/BuildResidentialModel/tests/xml_building/17/feature2.xml +2112 -0
- data/example_files/osm_building/7.osm +0 -2
- data/example_files/osm_building/8.osm +0 -2
- data/example_files/osm_building/9.osm +0 -2
- data/example_files/python_deps/dependencies.json +4 -3
- data/example_files/resources/hpxml-measures/.gitattributes +3 -0
- data/example_files/resources/hpxml-measures/.github/pull_request_template.md +2 -2
- data/example_files/resources/hpxml-measures/.github/workflows/add_to_project.yml +17 -0
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +37 -8
- data/example_files/resources/hpxml-measures/.gitignore +1 -0
- data/example_files/resources/hpxml-measures/.readthedocs.yml +6 -2
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/README.md +5596 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/README.md.erb +41 -0
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1324 -1035
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +325 -236
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +119 -152
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/{build_residential_hpxml_test.rb → test_build_residential_hpxml.rb} +225 -107
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/README.md +96 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/README.md.erb +41 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +73 -31
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +60 -40
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/README.md +48 -23
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/constants.rb +5 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +6 -12
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/{build_residential_schedule_file_test.rb → test_build_residential_schedule_file.rb} +162 -35
- data/example_files/resources/hpxml-measures/Changelog.md +57 -1
- data/example_files/resources/hpxml-measures/Gemfile +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/README.md +83 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/README.md.erb +41 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +1081 -878
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +258 -204
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +205 -178
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +43 -18
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +37 -112
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +34 -73
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/Xing_okstate_0664D_13659_Table_A-3.csv +4165 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +5 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/generator.rb +13 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +95 -42
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +132 -108
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +1695 -1267
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +668 -589
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd +304 -553
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml +197 -112
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +1140 -1745
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +412 -325
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +56 -48
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +49 -38
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +5 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +17 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +5 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +94 -78
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/output.rb +60 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/psychrometrics.rb +6 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +11 -5
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-non-stochastic.csv +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic-30-mins.csv +52561 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_2.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_3.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_4.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_5.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/occupancy-stochastic_6.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +129 -137
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/simcontrols.rb +12 -21
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/unit_conversions.rb +5 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/util.rb +7 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/utility_bills.rb +6 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +7 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +179 -144
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +129 -71
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +5 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlvalidator.rb +23 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +129 -118
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +25 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +2282 -2239
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +395 -204
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +12 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +56 -51
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +369 -230
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac_sizing.rb +371 -191
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +27 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_location.rb +55 -5
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_miscloads.rb +35 -30
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +13 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +107 -93
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_simcontrols.rb +11 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +757 -573
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +77 -72
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_weather.rb +36 -6
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +5 -0
- data/example_files/resources/hpxml-measures/README.md +2 -0
- data/example_files/resources/hpxml-measures/Rakefile +10 -3
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/README.md +787 -0
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/README.md.erb +41 -0
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +730 -418
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +1215 -9
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/tests/{output_report_test.rb → test_report_sim_output.rb} +130 -299
- data/example_files/resources/hpxml-measures/ReportUtilityBills/README.md +87 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/README.md.erb +41 -0
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.rb +261 -89
- data/example_files/resources/hpxml-measures/ReportUtilityBills/measure.xml +179 -94
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/Average_retail_price_of_electricity.csv +68 -68
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/NG_PRI_SUM_A_EPG0_PRS_DMCF_A.csv +3 -2
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/PET_PRI_WFR_A_EPD2F_PRS_DPGAL_W.csv +713 -685
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/PET_PRI_WFR_A_EPLLPA_PRS_DPGAL_W.csv +716 -688
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/simple_rates/README.md +5 -2
- data/example_files/resources/hpxml-measures/ReportUtilityBills/resources/util.rb +18 -9
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/test_report_utility_bills.rb +1308 -0
- data/example_files/resources/hpxml-measures/docs/requirements.txt +5 -0
- data/example_files/resources/hpxml-measures/docs/source/conf.py +1 -2
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +3 -20
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +1 -1
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +917 -564
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +79 -42
- data/example_files/resources/hpxml-measures/tasks.rb +2305 -2055
- data/example_files/resources/hpxml-measures/workflow/hpxml_inputs.json +270 -587
- data/example_files/resources/hpxml-measures/workflow/real_homes/house001.xml +559 -557
- data/example_files/resources/hpxml-measures/workflow/real_homes/house002.xml +522 -520
- data/example_files/resources/hpxml-measures/workflow/real_homes/house003.xml +534 -532
- data/example_files/resources/hpxml-measures/workflow/real_homes/house004.xml +547 -545
- data/example_files/resources/hpxml-measures/workflow/real_homes/house005.xml +546 -544
- data/example_files/resources/hpxml-measures/workflow/real_homes/house006.xml +603 -623
- data/example_files/resources/hpxml-measures/workflow/real_homes/house007.xml +613 -633
- data/example_files/resources/hpxml-measures/workflow/real_homes/house008.xml +699 -721
- data/example_files/resources/hpxml-measures/workflow/real_homes/house009.xml +662 -661
- data/example_files/resources/hpxml-measures/workflow/real_homes/house010.xml +657 -677
- data/example_files/resources/hpxml-measures/workflow/real_homes/house011.xml +470 -467
- data/example_files/resources/hpxml-measures/workflow/real_homes/house012.xml +441 -438
- data/example_files/resources/hpxml-measures/workflow/real_homes/house013.xml +468 -465
- data/example_files/resources/hpxml-measures/workflow/real_homes/house014.xml +469 -466
- data/example_files/resources/hpxml-measures/workflow/real_homes/house015.xml +468 -465
- data/example_files/resources/hpxml-measures/workflow/real_homes/house016.xml +717 -714
- data/example_files/resources/hpxml-measures/workflow/real_homes/house017.xml +647 -645
- data/example_files/resources/hpxml-measures/workflow/real_homes/house018.xml +569 -566
- data/example_files/resources/hpxml-measures/workflow/real_homes/house019.xml +602 -599
- data/example_files/resources/hpxml-measures/workflow/real_homes/house020.xml +630 -627
- data/example_files/resources/hpxml-measures/workflow/real_homes/house021.xml +776 -774
- data/example_files/resources/hpxml-measures/workflow/real_homes/house022.xml +670 -667
- data/example_files/resources/hpxml-measures/workflow/real_homes/house023.xml +632 -629
- data/example_files/resources/hpxml-measures/workflow/real_homes/house024.xml +731 -729
- data/example_files/resources/hpxml-measures/workflow/real_homes/house025.xml +672 -669
- data/example_files/resources/hpxml-measures/workflow/real_homes/house026.xml +667 -644
- data/example_files/resources/hpxml-measures/workflow/real_homes/house027.xml +646 -644
- data/example_files/resources/hpxml-measures/workflow/real_homes/house028.xml +690 -688
- data/example_files/resources/hpxml-measures/workflow/real_homes/house029.xml +701 -699
- data/example_files/resources/hpxml-measures/workflow/real_homes/house030.xml +637 -615
- data/example_files/resources/hpxml-measures/workflow/real_homes/house031.xml +690 -688
- data/example_files/resources/hpxml-measures/workflow/real_homes/house032.xml +557 -554
- data/example_files/resources/hpxml-measures/workflow/real_homes/house033.xml +534 -531
- data/example_files/resources/hpxml-measures/workflow/real_homes/house034.xml +636 -635
- data/example_files/resources/hpxml-measures/workflow/real_homes/house035.xml +616 -613
- data/example_files/resources/hpxml-measures/workflow/real_homes/house036.xml +601 -598
- data/example_files/resources/hpxml-measures/workflow/real_homes/house037.xml +581 -578
- data/example_files/resources/hpxml-measures/workflow/real_homes/house038.xml +624 -622
- data/example_files/resources/hpxml-measures/workflow/real_homes/house039.xml +584 -582
- data/example_files/resources/hpxml-measures/workflow/real_homes/house040.xml +631 -629
- data/example_files/resources/hpxml-measures/workflow/real_homes/house041.xml +922 -921
- data/example_files/resources/hpxml-measures/workflow/real_homes/house042.xml +855 -853
- data/example_files/resources/hpxml-measures/workflow/real_homes/house043.xml +739 -737
- data/example_files/resources/hpxml-measures/workflow/real_homes/house044.xml +798 -796
- data/example_files/resources/hpxml-measures/workflow/real_homes/house045.xml +696 -694
- data/example_files/resources/hpxml-measures/workflow/real_homes/house046.xml +487 -483
- data/example_files/resources/hpxml-measures/workflow/real_homes/house047.xml +443 -440
- data/example_files/resources/hpxml-measures/workflow/real_homes/house048.xml +688 -686
- data/example_files/resources/hpxml-measures/workflow/real_homes/house049.xml +722 -720
- data/example_files/resources/hpxml-measures/workflow/real_homes/house050.xml +619 -617
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +13 -20
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +11 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +11 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +12 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +11 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +10 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-scheduled.xml +571 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml → base-bldgtype-mf-unit-adjacent-to-multifamily-buffer-space.xml} +5 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-multiple.xml → base-bldgtype-mf-unit-adjacent-to-multiple.xml} +17 -17
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml → base-bldgtype-mf-unit-adjacent-to-non-freezing-space.xml} +5 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-other-heated-space.xml → base-bldgtype-mf-unit-adjacent-to-other-heated-space.xml} +5 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml → base-bldgtype-mf-unit-adjacent-to-other-housing-unit.xml} +5 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-infil-compartmentalization-test.xml → base-bldgtype-mf-unit-infil-compartmentalization-test.xml} +461 -461
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-residents-1.xml → base-bldgtype-mf-unit-residents-1.xml} +453 -453
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml → base-bldgtype-mf-unit-shared-boiler-chiller-baseboard.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml → base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil-ducted.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml → base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-boiler-chiller-water-loop-heat-pump.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-boiler-cooling-tower-water-loop-heat-pump.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-baseboard.xml → base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml → base-bldgtype-mf-unit-shared-boiler-only-fan-coil-ducted.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml → base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-fireplace-elec.xml +433 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml → base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-boiler-only-water-loop-heat-pump.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-baseboard.xml → base-bldgtype-mf-unit-shared-chiller-only-baseboard.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml → base-bldgtype-mf-unit-shared-chiller-only-fan-coil-ducted.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml → base-bldgtype-mf-unit-shared-chiller-only-fan-coil.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-chiller-only-water-loop-heat-pump.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml → base-bldgtype-mf-unit-shared-cooling-tower-only-water-loop-heat-pump.xml} +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-generator.xml → base-bldgtype-mf-unit-shared-generator.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml → base-bldgtype-mf-unit-shared-ground-loop-ground-to-air-heat-pump.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-laundry-room-multiple-water-heaters.xml → base-bldgtype-mf-unit-shared-laundry-room-multiple-water-heaters.xml} +480 -480
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-laundry-room.xml → base-bldgtype-mf-unit-shared-laundry-room.xml} +10 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-mechvent-multiple.xml → base-bldgtype-mf-unit-shared-mechvent-multiple.xml} +15 -15
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-mechvent-preconditioning.xml → base-bldgtype-mf-unit-shared-mechvent-preconditioning.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-mechvent.xml → base-bldgtype-mf-unit-shared-mechvent.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-pv.xml → base-bldgtype-mf-unit-shared-pv.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-water-heater-recirc.xml → base-bldgtype-mf-unit-shared-water-heater-recirc.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily-shared-water-heater.xml → base-bldgtype-mf-unit-shared-water-heater.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-multifamily.xml → base-bldgtype-mf-unit.xml} +13 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached-2stories.xml → base-bldgtype-sfa-unit-2stories.xml} +610 -610
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached-atticroof-cathedral.xml → base-bldgtype-sfa-unit-atticroof-cathedral.xml} +558 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached-infil-compartmentalization-test.xml → base-bldgtype-sfa-unit-infil-compartmentalization-test.xml} +610 -610
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-bldgtype-attached.xml → base-bldgtype-sfa-unit.xml} +610 -610
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-detailed-setpoints.xml +507 -505
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +14 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +5 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-detailed-setpoints.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-detailed-schedules.xml +13 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-operating-mode-heat-pump-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified-detailed-occupancy-stochastic.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-model-type-stratified.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-detailed-setpoints.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +13 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +11 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-ceilingtypes.xml +576 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-floortypes.xml +519 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ela.xml +548 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-cfm.xml +551 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-physical-properties.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-storms.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-thermal-mass.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +19 -19
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-natural-ventilation-availability.xml +555 -553
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading-seasons.xml +560 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-storms.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +10 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-belly-wing-no-skirt.xml +496 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-belly-wing-skirt.xml +496 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +18 -18
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-simple-power-outage-natvent-unavailable.xml → base-foundation-conditioned-basement-slab-insulation-full.xml} +552 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-insulation.xml +555 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +8 -8
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +5 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace-above-grade.xml +558 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +15 -15
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-capacity-17f.xml +552 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +562 -562
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-seer2-hspf2.xml +557 -557
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml +586 -586
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-furnace.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-acca.xml → base-hvac-air-to-air-heat-pump-var-speed-detailed-performance-other-temperatures.xml} +89 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-hers.xml → base-hvac-air-to-air-heat-pump-var-speed-detailed-performance.xml} +107 -13
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-sizing-controls.xml +567 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only-pilot.xml +512 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed-seer2.xml +536 -536
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-central-ac-only-var-speed.xml → base-hvac-central-ac-only-var-speed-detailed-performance.xml} +49 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-lockout-temperatures.xml +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-fractions.xml +11 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-area-multipliers.xml +558 -558
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-buried.xml +554 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-furnace-gas-room-ac.xml → base-hvac-ducts-defaults.xml} +28 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-effective-rvalue.xml +552 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-cfm50.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +15 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-detailed-setpoints.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only-pilot.xml +541 -541
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-air-to-air-heat-pump-1-speed-autosized-backup.xml → base-hvac-install-quality-air-to-air-heat-pump-var-speed-detailed-performance.xml} +650 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-furnace-gas-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-ground-to-air-heat-pump.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-install-quality-mini-split-heat-pump-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml → base-hvac-mini-split-air-conditioner-only-ductless-detailed-performance.xml} +50 -49
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-maxload.xml → base-hvac-mini-split-heat-pump-ducted-detailed-performance.xml} +109 -14
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-baseboard.xml +524 -524
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted-backup-hardsized.xml → base-hvac-mini-split-heat-pump-ductless-backup-furnace-ducts-defaults.xml} +560 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-furnace.xml +563 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml → base-hvac-mini-split-heat-pump-ductless-detailed-performance.xml} +108 -60
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-heating-capacity-17f.xml +505 -505
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-electricity.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac-with-heating-natural-gas.xml +504 -504
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ptac.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp-heating-capacity-17f.xml +512 -512
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-detailed-setpoints.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-heating.xml +504 -504
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-with-reverse-cycle.xml +517 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-schedules.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints-daily-setbacks.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-fixed-heater-gas-only.xml → base-hvac-space-heater-gas-only.xml} +10 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-kwh-per-year.xml +531 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-mixed.xml +536 -536
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none-ceiling-fans.xml +515 -515
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-capetown-zaf.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +4 -4
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +10 -11
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-airflow-fraction-zero.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-exhaust.xml +576 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-supplemental-fan-supply.xml +576 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-additional-properties.xml +21 -19
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-detailed-only.xml +605 -605
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv-mixed.xml +587 -587
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-pv.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +3 -3
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-emissions.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery-scheduled.xml +587 -585
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators-battery.xml +584 -584
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-ground-conductivity.xml +555 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +26 -26
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +26 -26
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading-bldgtype-multifamily.xml +508 -508
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-simple-power-outage-natvent-available.xml → base-misc-unit-multiplier.xml} +553 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +26 -26
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-mf-units.xml +2755 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-multiple-buildings.xml → base-multiple-sfd-buildings.xml} +31 -22
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-garage.xml +4 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-round-trip-efficiency.xml +597 -597
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-scheduled.xml +599 -597
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery-scheduled.xml +615 -613
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators-battery.xml +612 -612
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-generators.xml +596 -596
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0-runperiod-1-month.xml +559 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-0.xml +555 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-1-misc-loads-large-uncommon.xml +616 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-1-misc-loads-large-uncommon2.xml +616 -616
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-1.xml +547 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-residents-5.xml +515 -515
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-all-10-mins.xml +14 -12
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-crankcase-heater-40w.xml → base-schedules-detailed-mixed-timesteps-power-outage.xml} +565 -555
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-schedules-detailed-occupancy-stochastic-vacancy-year-round.xml → base-schedules-detailed-mixed-timesteps.xml} +554 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml +566 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-occupancy-stochastic.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-schedules.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints-daily-setbacks.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-detailed-setpoints.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml +619 -619
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml +618 -618
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-temperature-capacitance-multiplier.xml +553 -553
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-10-mins.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins-occupancy-stochastic-60-mins.xml +12 -10
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-30-mins.xml +552 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +9 -9
- data/example_files/resources/hpxml-measures/workflow/template-build-and-run-hpxml-with-stochastic-occupancy.osw +2 -0
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +2 -0
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +2 -0
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml.osw +4 -1
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Long_Residence.xml +385 -385
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Vatilo_Residence.xml +378 -380
- data/example_files/resources/hpxml-measures/workflow/tests/ACCA_Examples/Victor_Residence.xml +369 -369
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +7 -7
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +7 -8
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +7 -8
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +6 -6
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +6 -6
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_sizing.csv +363 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1.csv +281 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1_bills.csv +281 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2.csv +141 -0
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2_bills.csv +141 -0
- data/example_files/resources/hpxml-measures/workflow/tests/compare.py +12 -6
- data/example_files/resources/hpxml-measures/workflow/tests/util.rb +1141 -0
- data/example_files/weather/USA_CO_Denver.Intl.AP.725650_TMY3.ddy +536 -0
- data/example_files/weather/USA_CO_Denver.Intl.AP.725650_TMY3.epw +8768 -0
- data/example_files/weather/USA_CO_Denver.Intl.AP.725650_TMY3.stat +554 -0
- data/example_files/weather/USA_FL_MacDill.AFB.747880_TMY3.ddy +536 -0
- data/example_files/weather/USA_FL_MacDill.AFB.747880_TMY3.epw +8768 -0
- data/example_files/weather/USA_FL_MacDill.AFB.747880_TMY3.stat +553 -0
- data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3-cache.csv +35 -0
- data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3.ddy +536 -0
- data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3.epw +8768 -0
- data/example_files/weather/USA_GA_Atlanta-Hartsfield-Jackson.Intl.AP.722190_TMY3.stat +553 -0
- data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3-cache.csv +35 -0
- data/example_files/xml_building/17/README.md +4 -2
- data/example_files/xml_building/17/feature.xml +2112 -0
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +110 -17
- data/uo_cli.gemspec +6 -8
- metadata +130 -177
- data/Jenkinsfile +0 -10
- data/example_files/base_workflow_res.osw +0 -276
- data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/utility_bills_test.rb +0 -1226
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil-location-miami-fl.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane-location-portland-or.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +0 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +0 -550
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-acca.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-hers.xml +0 -552
- 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 +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-sizing-methodology-maxload.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-acca.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-hers.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-sizing-methodology-maxload.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml +0 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-furnace.xml +0 -599
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-sizing-methodology-maxload.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +0 -506
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +0 -560
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +0 -507
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +0 -536
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +0 -536
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +0 -565
- 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 +0 -553
- 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 +0 -553
- 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 +0 -553
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +0 -497
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +0 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +0 -500
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +0 -536
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +0 -536
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +0 -546
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +0 -552
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-acca.xml +0 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-hers.xml +0 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-sizing-methodology-maxload.xml +0 -554
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +0 -543
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +0 -549
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-acca.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-sizing-methodology-hers.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-baseboard.xml +0 -519
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +0 -522
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac-with-heating.xml +0 -503
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ptac.xml +0 -496
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-acca.xml +0 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-hers.xml +0 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp-sizing-methodology-maxload.xml +0 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +0 -496
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-heating.xml +0 -503
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-acca.xml +0 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-hers.xml +0 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-with-reverse-cycle-sizing-methodology-maxload.xml +0 -518
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +0 -500
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +0 -500
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only-pilot-light.xml +0 -506
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +0 -501
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +0 -556
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-bills-none.xml +0 -548
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy-year-round.xml +0 -619
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +0 -475
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_bills.csv +0 -475
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +0 -1313
- data/example_files/resources/measure-info.json +0 -26
- data/example_files/resources/meta_measure.rb +0 -301
- data/example_files/xml_building/17/unit 1.xml +0 -580
- data/example_files/xml_building/17/unit 2.xml +0 -553
- data/example_files/xml_building/17/unit 3.xml +0 -553
- data/example_files/xml_building/17/unit 4.xml +0 -580
- /data/example_files/{residential → mappers/residential/template/iecc}/clothes_dryer.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/clothes_washer.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/cooling_system.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/dishwasher.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/enclosure.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/heat_pump.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/heating_system.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/mechanical_ventilation.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/refrigerator.tsv +0 -0
- /data/example_files/{residential → mappers/residential/template/iecc}/water_heater.tsv +0 -0
- /data/example_files/resources/hpxml-measures/ReportUtilityBills/tests/{JacksonElectricMemberCorp-ResidentialSeniorCitizenLowIncomeAssistance.json → Detailed Rate.json} +0 -0
@@ -1,3 +1,8 @@
|
|
1
|
+
# *********************************************************************************
|
2
|
+
# URBANopt (tm), Copyright (c) Alliance for Sustainable Energy, LLC.
|
3
|
+
# See also https://github.com/urbanopt/urbanopt-cli/blob/develop/LICENSE.md
|
4
|
+
# *********************************************************************************
|
5
|
+
|
1
6
|
# frozen_string_literal: true
|
2
7
|
|
3
8
|
# Require all gems up front; this is much faster than multiple resource
|
@@ -35,6 +40,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
35
40
|
|
36
41
|
# define the arguments that the user will input
|
37
42
|
def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
|
43
|
+
docs_base_url = "https://openstudio-hpxml.readthedocs.io/en/v#{Version::OS_HPXML_Version}/workflow_inputs.html"
|
44
|
+
|
38
45
|
args = OpenStudio::Measure::OSArgumentVector.new
|
39
46
|
|
40
47
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('hpxml_path', true)
|
@@ -42,6 +49,11 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
42
49
|
arg.setDescription('Absolute/relative path of the HPXML file.')
|
43
50
|
args << arg
|
44
51
|
|
52
|
+
arg = OpenStudio::Measure::OSArgument.makeStringArgument('existing_hpxml_path', false)
|
53
|
+
arg.setDisplayName('Existing HPXML File Path')
|
54
|
+
arg.setDescription('Absolute/relative path of the existing HPXML file. If not provided, a new HPXML file with one Building element is created. If provided, a new Building element will be appended to this HPXML file (e.g., to create a multifamily HPXML file describing multiple dwelling units).')
|
55
|
+
args << arg
|
56
|
+
|
45
57
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('software_info_program_used', false)
|
46
58
|
arg.setDisplayName('Software Info: Program Used')
|
47
59
|
arg.setDescription('The name of the software program used.')
|
@@ -80,33 +92,33 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
80
92
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('simulation_control_timestep', false)
|
81
93
|
arg.setDisplayName('Simulation Control: Timestep')
|
82
94
|
arg.setUnits('min')
|
83
|
-
arg.setDescription(
|
95
|
+
arg.setDescription("Value must be a divisor of 60. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.")
|
84
96
|
args << arg
|
85
97
|
|
86
98
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('simulation_control_run_period', false)
|
87
99
|
arg.setDisplayName('Simulation Control: Run Period')
|
88
|
-
arg.setDescription(
|
100
|
+
arg.setDescription("Enter a date like 'Jan 1 - Dec 31'. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.")
|
89
101
|
args << arg
|
90
102
|
|
91
103
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('simulation_control_run_period_calendar_year', false)
|
92
104
|
arg.setDisplayName('Simulation Control: Run Period Calendar Year')
|
93
105
|
arg.setUnits('year')
|
94
|
-
arg.setDescription(
|
106
|
+
arg.setDescription("This numeric field should contain the calendar year that determines the start day of week. If you are running simulations using AMY weather files, the value entered for calendar year will not be used; it will be overridden by the actual year found in the AMY weather file. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.")
|
95
107
|
args << arg
|
96
108
|
|
97
109
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('simulation_control_daylight_saving_enabled', false)
|
98
110
|
arg.setDisplayName('Simulation Control: Daylight Saving Enabled')
|
99
|
-
arg.setDescription(
|
111
|
+
arg.setDescription("Whether to use daylight saving. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-building-site'>HPXML Building Site</a>) is used.")
|
100
112
|
args << arg
|
101
113
|
|
102
114
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('simulation_control_daylight_saving_period', false)
|
103
115
|
arg.setDisplayName('Simulation Control: Daylight Saving Period')
|
104
|
-
arg.setDescription(
|
116
|
+
arg.setDescription("Enter a date like 'Mar 15 - Dec 15'. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-building-site'>HPXML Building Site</a>) is used.")
|
105
117
|
args << arg
|
106
118
|
|
107
119
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('simulation_control_temperature_capacitance_multiplier', false)
|
108
120
|
arg.setDisplayName('Simulation Control: Temperature Capacitance Multiplier')
|
109
|
-
arg.setDescription(
|
121
|
+
arg.setDescription("Affects the transient calculation of indoor air temperatures. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-simulation-control'>HPXML Simulation Control</a>) is used.")
|
110
122
|
args << arg
|
111
123
|
|
112
124
|
site_type_choices = OpenStudio::StringVector.new
|
@@ -116,7 +128,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
116
128
|
|
117
129
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('site_type', site_type_choices, false)
|
118
130
|
arg.setDisplayName('Site: Type')
|
119
|
-
arg.setDescription(
|
131
|
+
arg.setDescription("The type of site. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
120
132
|
args << arg
|
121
133
|
|
122
134
|
site_shielding_of_home_choices = OpenStudio::StringVector.new
|
@@ -126,12 +138,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
126
138
|
|
127
139
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('site_shielding_of_home', site_shielding_of_home_choices, false)
|
128
140
|
arg.setDisplayName('Site: Shielding of Home')
|
129
|
-
arg.setDescription(
|
141
|
+
arg.setDescription("Presence of nearby buildings, trees, obstructions for infiltration model. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
130
142
|
args << arg
|
131
143
|
|
132
144
|
arg = OpenStudio::Measure::OSArgument.makeDoubleArgument('site_ground_conductivity', false)
|
133
145
|
arg.setDisplayName('Site: Ground Conductivity')
|
134
|
-
arg.setDescription(
|
146
|
+
arg.setDescription("Conductivity of the ground soil. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
135
147
|
arg.setUnits('Btu/hr-ft-F')
|
136
148
|
args << arg
|
137
149
|
|
@@ -181,6 +193,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
181
193
|
unit_type_choices << HPXML::ResidentialTypeSFD
|
182
194
|
unit_type_choices << HPXML::ResidentialTypeSFA
|
183
195
|
unit_type_choices << HPXML::ResidentialTypeApartment
|
196
|
+
unit_type_choices << HPXML::ResidentialTypeManufactured
|
197
|
+
|
198
|
+
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('unit_multiplier', false)
|
199
|
+
arg.setDisplayName('Building Construction: Unit Multiplier')
|
200
|
+
arg.setDescription('The number of similar dwelling units. EnergyPlus simulation results will be multiplied this value. If not provided, defaults to 1.')
|
201
|
+
args << arg
|
184
202
|
|
185
203
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_unit_type', unit_type_choices, true)
|
186
204
|
arg.setDisplayName('Geometry: Unit Type')
|
@@ -255,7 +273,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
255
273
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('geometry_unit_num_bathrooms', false)
|
256
274
|
arg.setDisplayName('Geometry: Unit Number of Bathrooms')
|
257
275
|
arg.setUnits('#')
|
258
|
-
arg.setDescription(
|
276
|
+
arg.setDescription("The number of bathrooms in the unit. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-building-construction'>HPXML Building Construction</a>) is used.")
|
259
277
|
args << arg
|
260
278
|
|
261
279
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_unit_num_occupants', false)
|
@@ -294,7 +312,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
294
312
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('geometry_garage_protrusion', true)
|
295
313
|
arg.setDisplayName('Geometry: Garage Protrusion')
|
296
314
|
arg.setUnits('Frac')
|
297
|
-
arg.setDescription("The fraction of the garage that is protruding from the
|
315
|
+
arg.setDescription("The fraction of the garage that is protruding from the conditioned space. Only applies to #{HPXML::ResidentialTypeSFD} units.")
|
298
316
|
arg.setDefaultValue(0.0)
|
299
317
|
args << arg
|
300
318
|
|
@@ -317,6 +335,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
317
335
|
foundation_type_choices << HPXML::FoundationTypeBasementConditioned
|
318
336
|
foundation_type_choices << HPXML::FoundationTypeAmbient
|
319
337
|
foundation_type_choices << HPXML::FoundationTypeAboveApartment # I.e., adiabatic
|
338
|
+
foundation_type_choices << "#{HPXML::FoundationTypeBellyAndWing}WithSkirt"
|
339
|
+
foundation_type_choices << "#{HPXML::FoundationTypeBellyAndWing}NoSkirt"
|
320
340
|
|
321
341
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('geometry_foundation_type', foundation_type_choices, true)
|
322
342
|
arg.setDisplayName('Geometry: Foundation Type')
|
@@ -425,25 +445,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
425
445
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_front_height', false)
|
426
446
|
arg.setDisplayName('Neighbor: Front Height')
|
427
447
|
arg.setUnits('ft')
|
428
|
-
arg.setDescription(
|
448
|
+
arg.setDescription("The height of the neighboring building to the front. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
429
449
|
args << arg
|
430
450
|
|
431
451
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_back_height', false)
|
432
452
|
arg.setDisplayName('Neighbor: Back Height')
|
433
453
|
arg.setUnits('ft')
|
434
|
-
arg.setDescription(
|
454
|
+
arg.setDescription("The height of the neighboring building to the back. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
435
455
|
args << arg
|
436
456
|
|
437
457
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_left_height', false)
|
438
458
|
arg.setDisplayName('Neighbor: Left Height')
|
439
459
|
arg.setUnits('ft')
|
440
|
-
arg.setDescription(
|
460
|
+
arg.setDescription("The height of the neighboring building to the left. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
441
461
|
args << arg
|
442
462
|
|
443
463
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('neighbor_right_height', false)
|
444
464
|
arg.setDisplayName('Neighbor: Right Height')
|
445
465
|
arg.setUnits('ft')
|
446
|
-
arg.setDescription(
|
466
|
+
arg.setDescription("The height of the neighboring building to the right. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-site'>HPXML Site</a>) is used.")
|
447
467
|
args << arg
|
448
468
|
|
449
469
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('floor_over_foundation_assembly_r', true)
|
@@ -484,13 +504,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
484
504
|
|
485
505
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('foundation_wall_type', foundation_wall_type_choices, false)
|
486
506
|
arg.setDisplayName('Foundation Wall: Type')
|
487
|
-
arg.setDescription(
|
507
|
+
arg.setDescription("The material type of the foundation wall. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.")
|
488
508
|
args << arg
|
489
509
|
|
490
510
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_thickness', false)
|
491
511
|
arg.setDisplayName('Foundation Wall: Thickness')
|
492
512
|
arg.setUnits('in')
|
493
|
-
arg.setDescription(
|
513
|
+
arg.setDescription("The thickness of the foundation wall. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.")
|
494
514
|
args << arg
|
495
515
|
|
496
516
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_r', true)
|
@@ -514,13 +534,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
514
534
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_distance_to_top', false)
|
515
535
|
arg.setDisplayName('Foundation Wall: Insulation Distance To Top')
|
516
536
|
arg.setUnits('ft')
|
517
|
-
arg.setDescription(
|
537
|
+
arg.setDescription("The distance from the top of the foundation wall to the top of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.")
|
518
538
|
args << arg
|
519
539
|
|
520
540
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_insulation_distance_to_bottom', false)
|
521
541
|
arg.setDisplayName('Foundation Wall: Insulation Distance To Bottom')
|
522
542
|
arg.setUnits('ft')
|
523
|
-
arg.setDescription(
|
543
|
+
arg.setDescription("The distance from the top of the foundation wall to the bottom of the foundation wall insulation. Only applies to basements/crawlspaces. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-foundation-walls'>HPXML Foundation Walls</a>) is used.")
|
524
544
|
args << arg
|
525
545
|
|
526
546
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('foundation_wall_assembly_r', false)
|
@@ -566,19 +586,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
566
586
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_thickness', false)
|
567
587
|
arg.setDisplayName('Slab: Thickness')
|
568
588
|
arg.setUnits('in')
|
569
|
-
arg.setDescription(
|
589
|
+
arg.setDescription("The thickness of the slab. Zero can be entered if there is a dirt floor instead of a slab. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-slabs'>HPXML Slabs</a>) is used.")
|
570
590
|
args << arg
|
571
591
|
|
572
592
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_carpet_fraction', false)
|
573
593
|
arg.setDisplayName('Slab: Carpet Fraction')
|
574
594
|
arg.setUnits('Frac')
|
575
|
-
arg.setDescription(
|
595
|
+
arg.setDescription("Fraction of the slab floor area that is carpeted. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-slabs'>HPXML Slabs</a>) is used.")
|
576
596
|
args << arg
|
577
597
|
|
578
598
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('slab_carpet_r', false)
|
579
599
|
arg.setDisplayName('Slab: Carpet R-value')
|
580
600
|
arg.setUnits('h-ft^2-R/Btu')
|
581
|
-
arg.setDescription(
|
601
|
+
arg.setDescription("R-value of the slab carpet. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-slabs'>HPXML Slabs</a>) is used.")
|
582
602
|
args << arg
|
583
603
|
|
584
604
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_assembly_r', true)
|
@@ -601,7 +621,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
601
621
|
|
602
622
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_material_type', roof_material_type_choices, false)
|
603
623
|
arg.setDisplayName('Roof: Material Type')
|
604
|
-
arg.setDescription(
|
624
|
+
arg.setDescription("The material type of the roof. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-roofs'>HPXML Roofs</a>) is used.")
|
605
625
|
args << arg
|
606
626
|
|
607
627
|
color_choices = OpenStudio::StringVector.new
|
@@ -613,7 +633,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
613
633
|
|
614
634
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_color', color_choices, false)
|
615
635
|
arg.setDisplayName('Roof: Color')
|
616
|
-
arg.setDescription(
|
636
|
+
arg.setDescription("The color of the roof. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-roofs'>HPXML Roofs</a>) is used.")
|
617
637
|
args << arg
|
618
638
|
|
619
639
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('roof_assembly_r', true)
|
@@ -636,8 +656,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
636
656
|
|
637
657
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_radiant_barrier_grade', roof_radiant_barrier_grade_choices, false)
|
638
658
|
arg.setDisplayName('Roof: Radiant Barrier Grade')
|
639
|
-
arg.setDescription(
|
640
|
-
arg.setDefaultValue('1')
|
659
|
+
arg.setDescription("The grade of the radiant barrier. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-roofs'>HPXML Roofs</a>) is used.")
|
641
660
|
args << arg
|
642
661
|
|
643
662
|
wall_type_choices = OpenStudio::StringVector.new
|
@@ -674,12 +693,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
674
693
|
|
675
694
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_siding_type', wall_siding_type_choices, false)
|
676
695
|
arg.setDisplayName('Wall: Siding Type')
|
677
|
-
arg.setDescription(
|
696
|
+
arg.setDescription("The siding type of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-walls'>HPXML Walls</a>) is used.")
|
678
697
|
args << arg
|
679
698
|
|
680
699
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('wall_color', color_choices, false)
|
681
700
|
arg.setDisplayName('Wall: Color')
|
682
|
-
arg.setDescription(
|
701
|
+
arg.setDescription("The color of the walls. Also applies to rim joists. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-walls'>HPXML Walls</a>) is used.")
|
683
702
|
args << arg
|
684
703
|
|
685
704
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('wall_assembly_r', true)
|
@@ -755,13 +774,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
755
774
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_fraction_operable', false)
|
756
775
|
arg.setDisplayName('Windows: Fraction Operable')
|
757
776
|
arg.setUnits('Frac')
|
758
|
-
arg.setDescription(
|
777
|
+
arg.setDescription("Fraction of windows that are operable. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
759
778
|
args << arg
|
760
779
|
|
761
780
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('window_natvent_availability', false)
|
762
781
|
arg.setDisplayName('Windows: Natural Ventilation Availability')
|
763
782
|
arg.setUnits('Days/week')
|
764
|
-
arg.setDescription(
|
783
|
+
arg.setDescription("For operable windows, the number of days/week that windows can be opened by occupants for natural ventilation. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
765
784
|
args << arg
|
766
785
|
|
767
786
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_ufactor', true)
|
@@ -780,30 +799,30 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
780
799
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_interior_shading_winter', false)
|
781
800
|
arg.setDisplayName('Windows: Winter Interior Shading')
|
782
801
|
arg.setUnits('Frac')
|
783
|
-
arg.setDescription(
|
802
|
+
arg.setDescription("Interior shading coefficient for the winter season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
784
803
|
args << arg
|
785
804
|
|
786
805
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_interior_shading_summer', false)
|
787
806
|
arg.setDisplayName('Windows: Summer Interior Shading')
|
788
807
|
arg.setUnits('Frac')
|
789
|
-
arg.setDescription(
|
808
|
+
arg.setDescription("Interior shading coefficient for the summer season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
790
809
|
args << arg
|
791
810
|
|
792
811
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_exterior_shading_winter', false)
|
793
812
|
arg.setDisplayName('Windows: Winter Exterior Shading')
|
794
813
|
arg.setUnits('Frac')
|
795
|
-
arg.setDescription(
|
814
|
+
arg.setDescription("Exterior shading coefficient for the winter season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
796
815
|
args << arg
|
797
816
|
|
798
817
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('window_exterior_shading_summer', false)
|
799
818
|
arg.setDisplayName('Windows: Summer Exterior Shading')
|
800
819
|
arg.setUnits('Frac')
|
801
|
-
arg.setDescription(
|
820
|
+
arg.setDescription("Exterior shading coefficient for the summer season. 1.0 indicates no reduction in solar gain, 0.85 indicates 15% reduction, etc. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
802
821
|
args << arg
|
803
822
|
|
804
823
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('window_shading_summer_season', false)
|
805
824
|
arg.setDisplayName('Windows: Shading Summer Season')
|
806
|
-
arg.setDescription(
|
825
|
+
arg.setDescription("Enter a date like 'May 1 - Sep 30'. Defines the summer season for purposes of shading coefficients; the rest of the year is assumed to be winter. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-windows'>HPXML Windows</a>) is used.")
|
807
826
|
args << arg
|
808
827
|
|
809
828
|
storm_window_type_choices = OpenStudio::StringVector.new
|
@@ -996,7 +1015,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
996
1015
|
|
997
1016
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('air_leakage_has_flue_or_chimney_in_conditioned_space', false)
|
998
1017
|
arg.setDisplayName('Air Leakage: Has Flue or Chimney in Conditioned Space')
|
999
|
-
arg.setDescription(
|
1018
|
+
arg.setDescription("Presence of flue or chimney with combustion air from conditioned space; used for infiltration model. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#flue-or-chimney'>Flue or Chimney</a>) is used.")
|
1000
1019
|
args << arg
|
1001
1020
|
|
1002
1021
|
heating_system_type_choices = OpenStudio::StringVector.new
|
@@ -1007,9 +1026,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1007
1026
|
heating_system_type_choices << HPXML::HVACTypeBoiler
|
1008
1027
|
heating_system_type_choices << HPXML::HVACTypeElectricResistance
|
1009
1028
|
heating_system_type_choices << HPXML::HVACTypeStove
|
1010
|
-
heating_system_type_choices << HPXML::
|
1029
|
+
heating_system_type_choices << HPXML::HVACTypeSpaceHeater
|
1011
1030
|
heating_system_type_choices << HPXML::HVACTypeFireplace
|
1012
|
-
heating_system_type_choices << HPXML::HVACTypeFixedHeater
|
1013
1031
|
heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Baseboard"
|
1014
1032
|
heating_system_type_choices << "Shared #{HPXML::HVACTypeBoiler} w/ Ductless Fan Coil"
|
1015
1033
|
|
@@ -1062,7 +1080,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1062
1080
|
|
1063
1081
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_heating_capacity', false)
|
1064
1082
|
arg.setDisplayName('Heating System: Heating Capacity')
|
1065
|
-
arg.setDescription(
|
1083
|
+
arg.setDescription("The output heating capacity of the heating system. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#hpxml-heating-systems'>HPXML Heating Systems</a>) is used.")
|
1066
1084
|
arg.setUnits('Btu/hr')
|
1067
1085
|
args << arg
|
1068
1086
|
|
@@ -1105,18 +1123,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1105
1123
|
|
1106
1124
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooling_system_cooling_compressor_type', compressor_type_choices, false)
|
1107
1125
|
arg.setDisplayName('Cooling System: Cooling Compressor Type')
|
1108
|
-
arg.setDescription("The compressor type of the cooling system. Only applies to #{HPXML::HVACTypeCentralAirConditioner}. If not provided, the OS-HPXML default is used.")
|
1126
|
+
arg.setDescription("The compressor type of the cooling system. Only applies to #{HPXML::HVACTypeCentralAirConditioner} and #{HPXML::HVACTypeMiniSplitAirConditioner}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#central-air-conditioner'>Central Air Conditioner</a>, <a href='#{docs_base_url}#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.")
|
1109
1127
|
args << arg
|
1110
1128
|
|
1111
1129
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_sensible_heat_fraction', false)
|
1112
1130
|
arg.setDisplayName('Cooling System: Cooling Sensible Heat Fraction')
|
1113
|
-
arg.setDescription("The sensible heat fraction of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}. If not provided, the OS-HPXML default is used.")
|
1131
|
+
arg.setDescription("The sensible heat fraction of the cooling system. Ignored for #{HPXML::HVACTypeEvaporativeCooler}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#central-air-conditioner'>Central Air Conditioner</a>, <a href='#{docs_base_url}#room-air-conditioner'>Room Air Conditioner</a>, <a href='#{docs_base_url}#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='#{docs_base_url}#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.")
|
1114
1132
|
arg.setUnits('Frac')
|
1115
1133
|
args << arg
|
1116
1134
|
|
1117
1135
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_cooling_capacity', false)
|
1118
1136
|
arg.setDisplayName('Cooling System: Cooling Capacity')
|
1119
|
-
arg.setDescription(
|
1137
|
+
arg.setDescription("The output cooling capacity of the cooling system. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#central-air-conditioner'>Central Air Conditioner</a>, <a href='#{docs_base_url}#room-air-conditioner'>Room Air Conditioner</a>, <a href='#{docs_base_url}#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='#{docs_base_url}#evaporative-cooler'>Evaporative Cooler</a>, <a href='#{docs_base_url}#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.")
|
1120
1138
|
arg.setUnits('Btu/hr')
|
1121
1139
|
args << arg
|
1122
1140
|
|
@@ -1147,7 +1165,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1147
1165
|
|
1148
1166
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_crankcase_heater_watts', false)
|
1149
1167
|
arg.setDisplayName('Cooling System: Crankcase Heater Power Watts')
|
1150
|
-
arg.setDescription("Cooling system crankcase heater power consumption in Watts. Applies only to #{HPXML::HVACTypeCentralAirConditioner}, #{HPXML::
|
1168
|
+
arg.setDescription("Cooling system crankcase heater power consumption in Watts. Applies only to #{HPXML::HVACTypeCentralAirConditioner}, #{HPXML::HVACTypeRoomAirConditioner}, #{HPXML::HVACTypePTAC} and #{HPXML::HVACTypeMiniSplitAirConditioner}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#central-air-conditioner'>Central Air Conditioner</a>, <a href='#{docs_base_url}#room-air-conditioner'>Room Air Conditioner</a>, <a href='#{docs_base_url}#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>, <a href='#{docs_base_url}#mini-split-air-conditioner'>Mini-Split Air Conditioner</a>) is used.")
|
1151
1169
|
arg.setUnits('W')
|
1152
1170
|
args << arg
|
1153
1171
|
|
@@ -1164,7 +1182,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1164
1182
|
|
1165
1183
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooling_system_integrated_heating_system_capacity', false)
|
1166
1184
|
arg.setDisplayName('Cooling System: Integrated Heating System Heating Capacity')
|
1167
|
-
arg.setDescription("The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default is used. Only used for #{HPXML::
|
1185
|
+
arg.setDescription("The output heating capacity of the heating system integrated into cooling system. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#room-air-conditioner'>Room Air Conditioner</a>, <a href='#{docs_base_url}#packaged-terminal-air-conditioner'>Packaged Terminal Air Conditioner</a>) is used. Only used for #{HPXML::HVACTypeRoomAirConditioner} and #{HPXML::HVACTypePTAC}.")
|
1168
1186
|
arg.setUnits('Btu/hr')
|
1169
1187
|
args << arg
|
1170
1188
|
|
@@ -1187,9 +1205,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1187
1205
|
heat_pump_heating_efficiency_type_choices << HPXML::UnitsHSPF2
|
1188
1206
|
heat_pump_heating_efficiency_type_choices << HPXML::UnitsCOP
|
1189
1207
|
|
1190
|
-
heat_pump_fuel_choices = OpenStudio::StringVector.new
|
1191
|
-
heat_pump_fuel_choices << HPXML::FuelTypeElectricity
|
1192
|
-
|
1193
1208
|
heat_pump_backup_type_choices = OpenStudio::StringVector.new
|
1194
1209
|
heat_pump_backup_type_choices << 'none'
|
1195
1210
|
heat_pump_backup_type_choices << HPXML::HeatPumpBackupTypeIntegrated
|
@@ -1238,24 +1253,24 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1238
1253
|
|
1239
1254
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_cooling_compressor_type', compressor_type_choices, false)
|
1240
1255
|
arg.setDisplayName('Heat Pump: Cooling Compressor Type')
|
1241
|
-
arg.setDescription("The compressor type of the heat pump. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir}. If not provided, the OS-HPXML default is used.")
|
1256
|
+
arg.setDescription("The compressor type of the heat pump. Only applies to #{HPXML::HVACTypeHeatPumpAirToAir} and #{HPXML::HVACTypeHeatPumpMiniSplit}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>) is used.")
|
1242
1257
|
args << arg
|
1243
1258
|
|
1244
1259
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_sensible_heat_fraction', false)
|
1245
1260
|
arg.setDisplayName('Heat Pump: Cooling Sensible Heat Fraction')
|
1246
|
-
arg.setDescription(
|
1261
|
+
arg.setDescription("The sensible heat fraction of the heat pump. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='#{docs_base_url}#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='#{docs_base_url}#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='#{docs_base_url}#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.")
|
1247
1262
|
arg.setUnits('Frac')
|
1248
1263
|
args << arg
|
1249
1264
|
|
1250
1265
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_capacity', false)
|
1251
1266
|
arg.setDisplayName('Heat Pump: Heating Capacity')
|
1252
|
-
arg.setDescription(
|
1267
|
+
arg.setDescription("The output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='#{docs_base_url}#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='#{docs_base_url}#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='#{docs_base_url}#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.")
|
1253
1268
|
arg.setUnits('Btu/hr')
|
1254
1269
|
args << arg
|
1255
1270
|
|
1256
1271
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_heating_capacity_retention_fraction', false)
|
1257
1272
|
arg.setDisplayName('Heat Pump: Heating Capacity Retention Fraction')
|
1258
|
-
arg.setDescription("The output heating capacity of the heat pump at a user-specified temperature (e.g., 17F or 5F) divided by the above nominal heating capacity. Applies to all heat pump types except #{HPXML::HVACTypeHeatPumpGroundToAir}. If not provided, the OS-HPXML default is used.")
|
1273
|
+
arg.setDescription("The output heating capacity of the heat pump at a user-specified temperature (e.g., 17F or 5F) divided by the above nominal heating capacity. Applies to all heat pump types except #{HPXML::HVACTypeHeatPumpGroundToAir}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='#{docs_base_url}#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='#{docs_base_url}#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.")
|
1259
1274
|
arg.setUnits('Frac')
|
1260
1275
|
args << arg
|
1261
1276
|
|
@@ -1267,7 +1282,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1267
1282
|
|
1268
1283
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_cooling_capacity', false)
|
1269
1284
|
arg.setDisplayName('Heat Pump: Cooling Capacity')
|
1270
|
-
arg.setDescription(
|
1285
|
+
arg.setDescription("The output cooling capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='#{docs_base_url}#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='#{docs_base_url}#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>, <a href='#{docs_base_url}#ground-to-air-heat-pump'>Ground-to-Air Heat Pump</a>) is used.")
|
1271
1286
|
arg.setUnits('Btu/hr')
|
1272
1287
|
args << arg
|
1273
1288
|
|
@@ -1287,7 +1302,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1287
1302
|
|
1288
1303
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_compressor_lockout_temp', false)
|
1289
1304
|
arg.setDisplayName('Heat Pump: Compressor Lockout Temperature')
|
1290
|
-
arg.setDescription("The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than #{HPXML::HVACTypeHeatPumpGroundToAir}. If not provided, the OS-HPXML default is used.")
|
1305
|
+
arg.setDescription("The temperature below which the heat pump compressor is disabled. If both this and Backup Heating Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies to all heat pump types other than #{HPXML::HVACTypeHeatPumpGroundToAir}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='#{docs_base_url}#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='#{docs_base_url}#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.")
|
1291
1306
|
arg.setUnits('deg-F')
|
1292
1307
|
args << arg
|
1293
1308
|
|
@@ -1311,19 +1326,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1311
1326
|
|
1312
1327
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_capacity', false)
|
1313
1328
|
arg.setDisplayName('Heat Pump: Backup Heating Capacity')
|
1314
|
-
arg.setDescription("The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default is used. Only applies if Backup Type is '#{HPXML::HeatPumpBackupTypeIntegrated}'.")
|
1329
|
+
arg.setDescription("The backup output heating capacity of the heat pump. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#backup'>Backup</a>) is used. Only applies if Backup Type is '#{HPXML::HeatPumpBackupTypeIntegrated}'.")
|
1315
1330
|
arg.setUnits('Btu/hr')
|
1316
1331
|
args << arg
|
1317
1332
|
|
1318
1333
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_backup_heating_lockout_temp', false)
|
1319
1334
|
arg.setDisplayName('Heat Pump: Backup Heating Lockout Temperature')
|
1320
|
-
arg.setDescription("The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of '#{HPXML::HeatPumpBackupTypeIntegrated}' and '#{HPXML::HeatPumpBackupTypeSeparate}'. If not provided, the OS-HPXML default is used.")
|
1335
|
+
arg.setDescription("The temperature above which the heat pump backup system is disabled. If both this and Compressor Lockout Temperature are provided and use the same value, it essentially defines a switchover temperature (for, e.g., a dual-fuel heat pump). Applies for both Backup Type of '#{HPXML::HeatPumpBackupTypeIntegrated}' and '#{HPXML::HeatPumpBackupTypeSeparate}'. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#backup'>Backup</a>) is used.")
|
1321
1336
|
arg.setUnits('deg-F')
|
1322
1337
|
args << arg
|
1323
1338
|
|
1324
1339
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heat_pump_sizing_methodology', heat_pump_sizing_choices, false)
|
1325
1340
|
arg.setDisplayName('Heat Pump: Sizing Methodology')
|
1326
|
-
arg.setDescription(
|
1341
|
+
arg.setDescription("The auto-sizing methodology to use when the heat pump capacity is not provided. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-hvac-sizing-control'>HPXML HVAC Sizing Control</a>) is used.")
|
1327
1342
|
args << arg
|
1328
1343
|
|
1329
1344
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('heat_pump_is_ducted', false)
|
@@ -1345,7 +1360,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1345
1360
|
|
1346
1361
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heat_pump_crankcase_heater_watts', false)
|
1347
1362
|
arg.setDisplayName('Heat Pump: Crankcase Heater Power Watts')
|
1348
|
-
arg.setDescription("Heat Pump crankcase heater power consumption in Watts. Applies only to #{HPXML::HVACTypeHeatPumpAirToAir}, #{HPXML::HVACTypeHeatPumpMiniSplit}, #{HPXML::HVACTypeHeatPumpPTHP} and #{HPXML::HVACTypeHeatPumpRoom}. If not provided, the OS-HPXML default is used.")
|
1363
|
+
arg.setDescription("Heat Pump crankcase heater power consumption in Watts. Applies only to #{HPXML::HVACTypeHeatPumpAirToAir}, #{HPXML::HVACTypeHeatPumpMiniSplit}, #{HPXML::HVACTypeHeatPumpPTHP} and #{HPXML::HVACTypeHeatPumpRoom}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-to-air-heat-pump'>Air-to-Air Heat Pump</a>, <a href='#{docs_base_url}#mini-split-heat-pump'>Mini-Split Heat Pump</a>, <a href='#{docs_base_url}#packaged-terminal-heat-pump'>Packaged Terminal Heat Pump</a>, <a href='#{docs_base_url}#room-air-conditioner-w-reverse-cycle'>Room Air Conditioner w/ Reverse Cycle</a>) is used.")
|
1349
1364
|
arg.setUnits('W')
|
1350
1365
|
args << arg
|
1351
1366
|
|
@@ -1357,9 +1372,8 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1357
1372
|
heating_system_2_type_choices << HPXML::HVACTypeBoiler
|
1358
1373
|
heating_system_2_type_choices << HPXML::HVACTypeElectricResistance
|
1359
1374
|
heating_system_2_type_choices << HPXML::HVACTypeStove
|
1360
|
-
heating_system_2_type_choices << HPXML::
|
1375
|
+
heating_system_2_type_choices << HPXML::HVACTypeSpaceHeater
|
1361
1376
|
heating_system_2_type_choices << HPXML::HVACTypeFireplace
|
1362
|
-
heating_system_2_type_choices << HPXML::HVACTypeFixedHeater
|
1363
1377
|
|
1364
1378
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('heating_system_2_type', heating_system_2_type_choices, true)
|
1365
1379
|
arg.setDisplayName('Heating System 2: Type')
|
@@ -1382,7 +1396,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1382
1396
|
|
1383
1397
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('heating_system_2_heating_capacity', false)
|
1384
1398
|
arg.setDisplayName('Heating System 2: Heating Capacity')
|
1385
|
-
arg.setDescription(
|
1399
|
+
arg.setDescription("The output heating capacity of the second heating system. If not provided, the OS-HPXML autosized default (see <a href='#{docs_base_url}#hpxml-heating-systems'>HPXML Heating Systems</a>) is used.")
|
1386
1400
|
arg.setUnits('Btu/hr')
|
1387
1401
|
args << arg
|
1388
1402
|
|
@@ -1419,12 +1433,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1419
1433
|
|
1420
1434
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_heating_season_period', false)
|
1421
1435
|
arg.setDisplayName('HVAC Control: Heating Season Period')
|
1422
|
-
arg.setDescription("Enter a date like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default is used. Can also provide '#{HPXML::BuildingAmerica}' to use automatic seasons from the Building America House Simulation Protocols.")
|
1436
|
+
arg.setDescription("Enter a date like 'Nov 1 - Jun 30'. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-hvac-control'>HPXML HVAC Control</a>) is used. Can also provide '#{HPXML::BuildingAmerica}' to use automatic seasons from the Building America House Simulation Protocols.")
|
1423
1437
|
args << arg
|
1424
1438
|
|
1425
1439
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('hvac_control_cooling_season_period', false)
|
1426
1440
|
arg.setDisplayName('HVAC Control: Cooling Season Period')
|
1427
|
-
arg.setDescription("Enter a date like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default is used. Can also provide '#{HPXML::BuildingAmerica}' to use automatic seasons from the Building America House Simulation Protocols.")
|
1441
|
+
arg.setDescription("Enter a date like 'Jun 1 - Oct 31'. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-hvac-control'>HPXML HVAC Control</a>) is used. Can also provide '#{HPXML::BuildingAmerica}' to use automatic seasons from the Building America House Simulation Protocols.")
|
1428
1442
|
args << arg
|
1429
1443
|
|
1430
1444
|
duct_leakage_units_choices = OpenStudio::StringVector.new
|
@@ -1433,12 +1447,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1433
1447
|
duct_leakage_units_choices << HPXML::UnitsPercent
|
1434
1448
|
|
1435
1449
|
duct_location_choices = OpenStudio::StringVector.new
|
1436
|
-
duct_location_choices << HPXML::
|
1450
|
+
duct_location_choices << HPXML::LocationConditionedSpace
|
1437
1451
|
duct_location_choices << HPXML::LocationBasementConditioned
|
1438
1452
|
duct_location_choices << HPXML::LocationBasementUnconditioned
|
1453
|
+
duct_location_choices << HPXML::LocationCrawlspace
|
1439
1454
|
duct_location_choices << HPXML::LocationCrawlspaceVented
|
1440
1455
|
duct_location_choices << HPXML::LocationCrawlspaceUnvented
|
1441
1456
|
duct_location_choices << HPXML::LocationCrawlspaceConditioned
|
1457
|
+
duct_location_choices << HPXML::LocationAttic
|
1442
1458
|
duct_location_choices << HPXML::LocationAtticVented
|
1443
1459
|
duct_location_choices << HPXML::LocationAtticUnvented
|
1444
1460
|
duct_location_choices << HPXML::LocationGarage
|
@@ -1450,6 +1466,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1450
1466
|
duct_location_choices << HPXML::LocationOtherHeatedSpace
|
1451
1467
|
duct_location_choices << HPXML::LocationOtherMultifamilyBufferSpace
|
1452
1468
|
duct_location_choices << HPXML::LocationOtherNonFreezingSpace
|
1469
|
+
duct_location_choices << HPXML::LocationManufacturedHomeBelly
|
1453
1470
|
|
1454
1471
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_leakage_units', duct_leakage_units_choices, true)
|
1455
1472
|
arg.setDisplayName('Ducts: Leakage Units')
|
@@ -1471,7 +1488,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1471
1488
|
|
1472
1489
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_supply_location', duct_location_choices, false)
|
1473
1490
|
arg.setDisplayName('Ducts: Supply Location')
|
1474
|
-
arg.setDescription(
|
1491
|
+
arg.setDescription("The location of the supply ducts. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1475
1492
|
args << arg
|
1476
1493
|
|
1477
1494
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_supply_insulation_r', true)
|
@@ -1494,13 +1511,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1494
1511
|
|
1495
1512
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_supply_surface_area', false)
|
1496
1513
|
arg.setDisplayName('Ducts: Supply Surface Area')
|
1497
|
-
arg.setDescription(
|
1514
|
+
arg.setDescription("The supply ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1498
1515
|
arg.setUnits('ft^2')
|
1499
1516
|
args << arg
|
1500
1517
|
|
1518
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_supply_surface_area_fraction', false)
|
1519
|
+
arg.setDisplayName('Ducts: Supply Area Fraction')
|
1520
|
+
arg.setDescription("The fraction of supply ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1521
|
+
arg.setUnits('frac')
|
1522
|
+
args << arg
|
1523
|
+
|
1501
1524
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('ducts_return_location', duct_location_choices, false)
|
1502
1525
|
arg.setDisplayName('Ducts: Return Location')
|
1503
|
-
arg.setDescription(
|
1526
|
+
arg.setDescription("The location of the return ducts. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1504
1527
|
args << arg
|
1505
1528
|
|
1506
1529
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_return_insulation_r', true)
|
@@ -1517,13 +1540,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1517
1540
|
|
1518
1541
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_return_surface_area', false)
|
1519
1542
|
arg.setDisplayName('Ducts: Return Surface Area')
|
1520
|
-
arg.setDescription(
|
1543
|
+
arg.setDescription("The return ducts surface area in the given location. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1521
1544
|
arg.setUnits('ft^2')
|
1522
1545
|
args << arg
|
1523
1546
|
|
1547
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ducts_return_surface_area_fraction', false)
|
1548
|
+
arg.setDisplayName('Ducts: Return Area Fraction')
|
1549
|
+
arg.setDescription("The fraction of return ducts surface area in the given location. Only used if Surface Area is not provided. If the fraction is less than 1, the remaining duct area is assumed to be in conditioned space. If neither Surface Area nor Area Fraction provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1550
|
+
arg.setUnits('frac')
|
1551
|
+
args << arg
|
1552
|
+
|
1524
1553
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('ducts_number_of_return_registers', false)
|
1525
1554
|
arg.setDisplayName('Ducts: Number of Return Registers')
|
1526
|
-
arg.setDescription(
|
1555
|
+
arg.setDescription("The number of return registers of the ducts. Only used to calculate default return duct surface area. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#air-distribution'>Air Distribution</a>) is used.")
|
1527
1556
|
arg.setUnits('#')
|
1528
1557
|
args << arg
|
1529
1558
|
|
@@ -1548,13 +1577,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1548
1577
|
|
1549
1578
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_flow_rate', false)
|
1550
1579
|
arg.setDisplayName('Mechanical Ventilation: Flow Rate')
|
1551
|
-
arg.setDescription(
|
1580
|
+
arg.setDescription("The flow rate of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#whole-ventilation-fan'>Whole Ventilation Fan</a>) is used.")
|
1552
1581
|
arg.setUnits('CFM')
|
1553
1582
|
args << arg
|
1554
1583
|
|
1555
1584
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_hours_in_operation', false)
|
1556
1585
|
arg.setDisplayName('Mechanical Ventilation: Hours In Operation')
|
1557
|
-
arg.setDescription(
|
1586
|
+
arg.setDescription("The hours in operation of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#whole-ventilation-fan'>Whole Ventilation Fan</a>) is used.")
|
1558
1587
|
arg.setUnits('hrs/day')
|
1559
1588
|
args << arg
|
1560
1589
|
|
@@ -1580,7 +1609,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1580
1609
|
|
1581
1610
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('mech_vent_fan_power', false)
|
1582
1611
|
arg.setDisplayName('Mechanical Ventilation: Fan Power')
|
1583
|
-
arg.setDescription(
|
1612
|
+
arg.setDescription("The fan power of the mechanical ventilation. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#whole-ventilation-fan'>Whole Ventilation Fan</a>) is used.")
|
1584
1613
|
arg.setUnits('W')
|
1585
1614
|
args << arg
|
1586
1615
|
|
@@ -1691,61 +1720,61 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1691
1720
|
|
1692
1721
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_quantity', false)
|
1693
1722
|
arg.setDisplayName('Kitchen Fans: Quantity')
|
1694
|
-
arg.setDescription(
|
1723
|
+
arg.setDescription("The quantity of the kitchen fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1695
1724
|
arg.setUnits('#')
|
1696
1725
|
args << arg
|
1697
1726
|
|
1698
1727
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_flow_rate', false)
|
1699
1728
|
arg.setDisplayName('Kitchen Fans: Flow Rate')
|
1700
|
-
arg.setDescription(
|
1729
|
+
arg.setDescription("The flow rate of the kitchen fan. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1701
1730
|
arg.setUnits('CFM')
|
1702
1731
|
args << arg
|
1703
1732
|
|
1704
1733
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_hours_in_operation', false)
|
1705
1734
|
arg.setDisplayName('Kitchen Fans: Hours In Operation')
|
1706
|
-
arg.setDescription(
|
1735
|
+
arg.setDescription("The hours in operation of the kitchen fan. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1707
1736
|
arg.setUnits('hrs/day')
|
1708
1737
|
args << arg
|
1709
1738
|
|
1710
1739
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('kitchen_fans_power', false)
|
1711
1740
|
arg.setDisplayName('Kitchen Fans: Fan Power')
|
1712
|
-
arg.setDescription(
|
1741
|
+
arg.setDescription("The fan power of the kitchen fan. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1713
1742
|
arg.setUnits('W')
|
1714
1743
|
args << arg
|
1715
1744
|
|
1716
1745
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('kitchen_fans_start_hour', false)
|
1717
1746
|
arg.setDisplayName('Kitchen Fans: Start Hour')
|
1718
|
-
arg.setDescription(
|
1747
|
+
arg.setDescription("The start hour of the kitchen fan. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1719
1748
|
arg.setUnits('hr')
|
1720
1749
|
args << arg
|
1721
1750
|
|
1722
1751
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_quantity', false)
|
1723
1752
|
arg.setDisplayName('Bathroom Fans: Quantity')
|
1724
|
-
arg.setDescription(
|
1753
|
+
arg.setDescription("The quantity of the bathroom fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1725
1754
|
arg.setUnits('#')
|
1726
1755
|
args << arg
|
1727
1756
|
|
1728
1757
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_flow_rate', false)
|
1729
1758
|
arg.setDisplayName('Bathroom Fans: Flow Rate')
|
1730
|
-
arg.setDescription(
|
1759
|
+
arg.setDescription("The flow rate of the bathroom fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1731
1760
|
arg.setUnits('CFM')
|
1732
1761
|
args << arg
|
1733
1762
|
|
1734
1763
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_hours_in_operation', false)
|
1735
1764
|
arg.setDisplayName('Bathroom Fans: Hours In Operation')
|
1736
|
-
arg.setDescription(
|
1765
|
+
arg.setDescription("The hours in operation of the bathroom fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1737
1766
|
arg.setUnits('hrs/day')
|
1738
1767
|
args << arg
|
1739
1768
|
|
1740
1769
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('bathroom_fans_power', false)
|
1741
1770
|
arg.setDisplayName('Bathroom Fans: Fan Power')
|
1742
|
-
arg.setDescription(
|
1771
|
+
arg.setDescription("The fan power of the bathroom fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1743
1772
|
arg.setUnits('W')
|
1744
1773
|
args << arg
|
1745
1774
|
|
1746
1775
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('bathroom_fans_start_hour', false)
|
1747
1776
|
arg.setDisplayName('Bathroom Fans: Start Hour')
|
1748
|
-
arg.setDescription(
|
1777
|
+
arg.setDescription("The start hour of the bathroom fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#local-ventilation-fan'>Local Ventilation Fan</a>) is used.")
|
1749
1778
|
arg.setUnits('hr')
|
1750
1779
|
args << arg
|
1751
1780
|
|
@@ -1757,13 +1786,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1757
1786
|
|
1758
1787
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('whole_house_fan_flow_rate', false)
|
1759
1788
|
arg.setDisplayName('Whole House Fan: Flow Rate')
|
1760
|
-
arg.setDescription(
|
1789
|
+
arg.setDescription("The flow rate of the whole house fan. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#whole-house-fan'>Whole House Fan</a>) is used.")
|
1761
1790
|
arg.setUnits('CFM')
|
1762
1791
|
args << arg
|
1763
1792
|
|
1764
1793
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('whole_house_fan_power', false)
|
1765
1794
|
arg.setDisplayName('Whole House Fan: Fan Power')
|
1766
|
-
arg.setDescription(
|
1795
|
+
arg.setDescription("The fan power of the whole house fan. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#whole-house-fan'>Whole House Fan</a>) is used.")
|
1767
1796
|
arg.setUnits('W')
|
1768
1797
|
args << arg
|
1769
1798
|
|
@@ -1784,12 +1813,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1784
1813
|
water_heater_fuel_choices << HPXML::FuelTypeCoal
|
1785
1814
|
|
1786
1815
|
water_heater_location_choices = OpenStudio::StringVector.new
|
1787
|
-
water_heater_location_choices << HPXML::
|
1816
|
+
water_heater_location_choices << HPXML::LocationConditionedSpace
|
1788
1817
|
water_heater_location_choices << HPXML::LocationBasementConditioned
|
1789
1818
|
water_heater_location_choices << HPXML::LocationBasementUnconditioned
|
1790
1819
|
water_heater_location_choices << HPXML::LocationGarage
|
1820
|
+
water_heater_location_choices << HPXML::LocationAttic
|
1791
1821
|
water_heater_location_choices << HPXML::LocationAtticVented
|
1792
1822
|
water_heater_location_choices << HPXML::LocationAtticUnvented
|
1823
|
+
water_heater_location_choices << HPXML::LocationCrawlspace
|
1793
1824
|
water_heater_location_choices << HPXML::LocationCrawlspaceVented
|
1794
1825
|
water_heater_location_choices << HPXML::LocationCrawlspaceUnvented
|
1795
1826
|
water_heater_location_choices << HPXML::LocationCrawlspaceConditioned
|
@@ -1823,12 +1854,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1823
1854
|
|
1824
1855
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_location', water_heater_location_choices, false)
|
1825
1856
|
arg.setDisplayName('Water Heater: Location')
|
1826
|
-
arg.setDescription(
|
1857
|
+
arg.setDescription("The location of water heater. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-water-heating-systems'>HPXML Water Heating Systems</a>) is used.")
|
1827
1858
|
args << arg
|
1828
1859
|
|
1829
1860
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_tank_volume', false)
|
1830
1861
|
arg.setDisplayName('Water Heater: Tank Volume')
|
1831
|
-
arg.setDescription("Nominal volume of water heater tank. Only applies to #{HPXML::WaterHeaterTypeStorage}, #{HPXML::WaterHeaterTypeHeatPump}, and #{HPXML::WaterHeaterTypeCombiStorage}. If not provided, the OS-HPXML default is used.")
|
1862
|
+
arg.setDescription("Nominal volume of water heater tank. Only applies to #{HPXML::WaterHeaterTypeStorage}, #{HPXML::WaterHeaterTypeHeatPump}, and #{HPXML::WaterHeaterTypeCombiStorage}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#conventional-storage'>Conventional Storage</a>, <a href='#{docs_base_url}#heat-pump'>Heat Pump</a>, <a href='#{docs_base_url}#combi-boiler-w-storage'>Combi Boiler w/ Storage</a>) is used.")
|
1832
1863
|
arg.setUnits('gal')
|
1833
1864
|
args << arg
|
1834
1865
|
|
@@ -1846,24 +1877,24 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1846
1877
|
|
1847
1878
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_usage_bin', water_heater_usage_bin_choices, false)
|
1848
1879
|
arg.setDisplayName('Water Heater: Usage Bin')
|
1849
|
-
arg.setDescription("The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not #{HPXML::WaterHeaterTypeTankless}. Does not apply to space-heating boilers. If not provided, the OS-HPXML default is used.")
|
1880
|
+
arg.setDescription("The usage of the water heater. Only applies if Efficiency Type is UniformEnergyFactor and Type is not #{HPXML::WaterHeaterTypeTankless}. Does not apply to space-heating boilers. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#conventional-storage'>Conventional Storage</a>, <a href='#{docs_base_url}#heat-pump'>Heat Pump</a>) is used.")
|
1850
1881
|
args << arg
|
1851
1882
|
|
1852
1883
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_recovery_efficiency', false)
|
1853
1884
|
arg.setDisplayName('Water Heater: Recovery Efficiency')
|
1854
|
-
arg.setDescription(
|
1885
|
+
arg.setDescription("Ratio of energy delivered to water heater to the energy content of the fuel consumed by the water heater. Only used for non-electric storage water heaters. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#conventional-storage'>Conventional Storage</a>) is used.")
|
1855
1886
|
arg.setUnits('Frac')
|
1856
1887
|
args << arg
|
1857
1888
|
|
1858
1889
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_heating_capacity', false)
|
1859
1890
|
arg.setDisplayName('Water Heater: Heating Capacity')
|
1860
|
-
arg.setDescription("Heating capacity. Only applies to #{HPXML::WaterHeaterTypeStorage}. If not provided, the OS-HPXML default is used.")
|
1891
|
+
arg.setDescription("Heating capacity. Only applies to #{HPXML::WaterHeaterTypeStorage}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#conventional-storage'>Conventional Storage</a>) is used.")
|
1861
1892
|
arg.setUnits('Btu/hr')
|
1862
1893
|
args << arg
|
1863
1894
|
|
1864
1895
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_standby_loss', false)
|
1865
1896
|
arg.setDisplayName('Water Heater: Standby Loss')
|
1866
|
-
arg.setDescription(
|
1897
|
+
arg.setDescription("The standby loss of water heater. Only applies to space-heating boilers. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#combi-boiler-w-storage'>Combi Boiler w/ Storage</a>) is used.")
|
1867
1898
|
arg.setUnits('deg-F/hr')
|
1868
1899
|
args << arg
|
1869
1900
|
|
@@ -1875,7 +1906,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1875
1906
|
|
1876
1907
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_heater_setpoint_temperature', false)
|
1877
1908
|
arg.setDisplayName('Water Heater: Setpoint Temperature')
|
1878
|
-
arg.setDescription(
|
1909
|
+
arg.setDescription("The setpoint temperature of water heater. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-water-heating-systems'>HPXML Water Heating Systems</a>) is used.")
|
1879
1910
|
arg.setUnits('deg-F')
|
1880
1911
|
args << arg
|
1881
1912
|
|
@@ -1897,7 +1928,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1897
1928
|
|
1898
1929
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_tank_model_type', water_heater_tank_model_type_choices, false)
|
1899
1930
|
arg.setDisplayName('Water Heater: Tank Type')
|
1900
|
-
arg.setDescription("Type of tank model to use. The '#{HPXML::WaterHeaterTankModelTypeStratified}' tank generally provide more accurate results, but may significantly increase run time. Applies only to #{HPXML::WaterHeaterTypeStorage}. If not provided, the OS-HPXML default is used.")
|
1931
|
+
arg.setDescription("Type of tank model to use. The '#{HPXML::WaterHeaterTankModelTypeStratified}' tank generally provide more accurate results, but may significantly increase run time. Applies only to #{HPXML::WaterHeaterTypeStorage}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#conventional-storage'>Conventional Storage</a>) is used.")
|
1901
1932
|
args << arg
|
1902
1933
|
|
1903
1934
|
water_heater_operating_mode_choices = OpenStudio::StringVector.new
|
@@ -1906,7 +1937,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1906
1937
|
|
1907
1938
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('water_heater_operating_mode', water_heater_operating_mode_choices, false)
|
1908
1939
|
arg.setDisplayName('Water Heater: Operating Mode')
|
1909
|
-
arg.setDescription("The water heater operating mode. The '#{HPXML::WaterHeaterOperatingModeHeatPumpOnly}' option only uses the heat pump, while '#{HPXML::WaterHeaterOperatingModeHybridAuto}' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to #{HPXML::WaterHeaterTypeHeatPump}. If not provided, the OS-HPXML default is used.")
|
1940
|
+
arg.setDescription("The water heater operating mode. The '#{HPXML::WaterHeaterOperatingModeHeatPumpOnly}' option only uses the heat pump, while '#{HPXML::WaterHeaterOperatingModeHybridAuto}' allows the backup electric resistance to come on in high demand situations. This is ignored if a scheduled operating mode type is selected. Applies only to #{HPXML::WaterHeaterTypeHeatPump}. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#heat-pump'>Heat Pump</a>) is used.")
|
1910
1941
|
args << arg
|
1911
1942
|
|
1912
1943
|
hot_water_distribution_system_type_choices = OpenStudio::StringVector.new
|
@@ -1922,7 +1953,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1922
1953
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_standard_piping_length', false)
|
1923
1954
|
arg.setDisplayName('Hot Water Distribution: Standard Piping Length')
|
1924
1955
|
arg.setUnits('ft')
|
1925
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeStandard}, the length of the piping. If not provided, the OS-HPXML default is used.")
|
1956
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeStandard}, the length of the piping. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#standard'>Standard</a>) is used.")
|
1926
1957
|
args << arg
|
1927
1958
|
|
1928
1959
|
recirculation_control_type_choices = OpenStudio::StringVector.new
|
@@ -1941,25 +1972,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
1941
1972
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_piping_length', false)
|
1942
1973
|
arg.setDisplayName('Hot Water Distribution: Recirculation Piping Length')
|
1943
1974
|
arg.setUnits('ft')
|
1944
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation piping. If not provided, the OS-HPXML default is used.")
|
1975
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation piping. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#recirculation'>Recirculation</a>) is used.")
|
1945
1976
|
args << arg
|
1946
1977
|
|
1947
1978
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_branch_piping_length', false)
|
1948
1979
|
arg.setDisplayName('Hot Water Distribution: Recirculation Branch Piping Length')
|
1949
1980
|
arg.setUnits('ft')
|
1950
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation branch piping. If not provided, the OS-HPXML default is used.")
|
1981
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the length of the recirculation branch piping. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#recirculation'>Recirculation</a>) is used.")
|
1951
1982
|
args << arg
|
1952
1983
|
|
1953
1984
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_recirc_pump_power', false)
|
1954
1985
|
arg.setDisplayName('Hot Water Distribution: Recirculation Pump Power')
|
1955
1986
|
arg.setUnits('W')
|
1956
|
-
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the recirculation pump power. If not provided, the OS-HPXML default is used.")
|
1987
|
+
arg.setDescription("If the distribution system is #{HPXML::DHWDistTypeRecirc}, the recirculation pump power. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#recirculation'>Recirculation</a>) is used.")
|
1957
1988
|
args << arg
|
1958
1989
|
|
1959
1990
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('hot_water_distribution_pipe_r', false)
|
1960
1991
|
arg.setDisplayName('Hot Water Distribution: Pipe Insulation Nominal R-Value')
|
1961
1992
|
arg.setUnits('h-ft^2-R/Btu')
|
1962
|
-
arg.setDescription(
|
1993
|
+
arg.setDescription("Nominal R-value of the pipe insulation. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-hot-water-distribution'>HPXML Hot Water Distribution</a>) is used.")
|
1963
1994
|
args << arg
|
1964
1995
|
|
1965
1996
|
dwhr_facilities_connected_choices = OpenStudio::StringVector.new
|
@@ -2000,7 +2031,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2000
2031
|
|
2001
2032
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('water_fixtures_usage_multiplier', false)
|
2002
2033
|
arg.setDisplayName('Hot Water Fixtures: Usage Multiplier')
|
2003
|
-
arg.setDescription(
|
2034
|
+
arg.setDescription("Multiplier on the hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-water-fixtures'>HPXML Water Fixtures</a>) is used.")
|
2004
2035
|
args << arg
|
2005
2036
|
|
2006
2037
|
solar_thermal_system_type_choices = OpenStudio::StringVector.new
|
@@ -2074,7 +2105,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2074
2105
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('solar_thermal_storage_volume', false)
|
2075
2106
|
arg.setDisplayName('Solar Thermal: Storage Volume')
|
2076
2107
|
arg.setUnits('gal')
|
2077
|
-
arg.setDescription(
|
2108
|
+
arg.setDescription("The storage volume of the solar thermal system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#detailed-inputs'>Detailed Inputs</a>) is used.")
|
2078
2109
|
args << arg
|
2079
2110
|
|
2080
2111
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('solar_thermal_solar_fraction', true)
|
@@ -2107,17 +2138,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2107
2138
|
|
2108
2139
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_module_type', pv_system_module_type_choices, false)
|
2109
2140
|
arg.setDisplayName('PV System: Module Type')
|
2110
|
-
arg.setDescription(
|
2141
|
+
arg.setDescription("Module type of the PV system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2111
2142
|
args << arg
|
2112
2143
|
|
2113
2144
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_location', pv_system_location_choices, false)
|
2114
2145
|
arg.setDisplayName('PV System: Location')
|
2115
|
-
arg.setDescription(
|
2146
|
+
arg.setDescription("Location of the PV system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2116
2147
|
args << arg
|
2117
2148
|
|
2118
2149
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_tracking', pv_system_tracking_choices, false)
|
2119
2150
|
arg.setDisplayName('PV System: Tracking')
|
2120
|
-
arg.setDescription(
|
2151
|
+
arg.setDescription("Type of tracking for the PV system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2121
2152
|
args << arg
|
2122
2153
|
|
2123
2154
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_array_azimuth', true)
|
@@ -2144,13 +2175,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2144
2175
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_inverter_efficiency', false)
|
2145
2176
|
arg.setDisplayName('PV System: Inverter Efficiency')
|
2146
2177
|
arg.setUnits('Frac')
|
2147
|
-
arg.setDescription(
|
2178
|
+
arg.setDescription("Inverter efficiency of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2148
2179
|
args << arg
|
2149
2180
|
|
2150
2181
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_system_losses_fraction', false)
|
2151
2182
|
arg.setDisplayName('PV System: System Losses Fraction')
|
2152
2183
|
arg.setUnits('Frac')
|
2153
|
-
arg.setDescription(
|
2184
|
+
arg.setDescription("System losses fraction of the PV system. If there are two PV systems, this will apply to both. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2154
2185
|
args << arg
|
2155
2186
|
|
2156
2187
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('pv_system_num_bedrooms_served', false)
|
@@ -2167,17 +2198,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2167
2198
|
|
2168
2199
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_module_type', pv_system_module_type_choices, false)
|
2169
2200
|
arg.setDisplayName('PV System 2: Module Type')
|
2170
|
-
arg.setDescription(
|
2201
|
+
arg.setDescription("Module type of the second PV system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2171
2202
|
args << arg
|
2172
2203
|
|
2173
2204
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_location', pv_system_location_choices, false)
|
2174
2205
|
arg.setDisplayName('PV System 2: Location')
|
2175
|
-
arg.setDescription(
|
2206
|
+
arg.setDescription("Location of the second PV system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2176
2207
|
args << arg
|
2177
2208
|
|
2178
2209
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pv_system_2_tracking', pv_system_tracking_choices, false)
|
2179
2210
|
arg.setDisplayName('PV System 2: Tracking')
|
2180
|
-
arg.setDescription(
|
2211
|
+
arg.setDescription("Type of tracking for the second PV system. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-photovoltaics'>HPXML Photovoltaics</a>) is used.")
|
2181
2212
|
args << arg
|
2182
2213
|
|
2183
2214
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pv_system_2_array_azimuth', true)
|
@@ -2202,12 +2233,14 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2202
2233
|
args << arg
|
2203
2234
|
|
2204
2235
|
battery_location_choices = OpenStudio::StringVector.new
|
2205
|
-
battery_location_choices << HPXML::
|
2236
|
+
battery_location_choices << HPXML::LocationConditionedSpace
|
2206
2237
|
battery_location_choices << HPXML::LocationBasementConditioned
|
2207
2238
|
battery_location_choices << HPXML::LocationBasementUnconditioned
|
2239
|
+
battery_location_choices << HPXML::LocationCrawlspace
|
2208
2240
|
battery_location_choices << HPXML::LocationCrawlspaceVented
|
2209
2241
|
battery_location_choices << HPXML::LocationCrawlspaceUnvented
|
2210
2242
|
battery_location_choices << HPXML::LocationCrawlspaceConditioned
|
2243
|
+
battery_location_choices << HPXML::LocationAttic
|
2211
2244
|
battery_location_choices << HPXML::LocationAtticVented
|
2212
2245
|
battery_location_choices << HPXML::LocationAtticUnvented
|
2213
2246
|
battery_location_choices << HPXML::LocationGarage
|
@@ -2221,30 +2254,30 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2221
2254
|
|
2222
2255
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('battery_location', battery_location_choices, false)
|
2223
2256
|
arg.setDisplayName('Battery: Location')
|
2224
|
-
arg.setDescription(
|
2257
|
+
arg.setDescription("The space type for the lithium ion battery location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-batteries'>HPXML Batteries</a>) is used.")
|
2225
2258
|
args << arg
|
2226
2259
|
|
2227
2260
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_power', false)
|
2228
2261
|
arg.setDisplayName('Battery: Rated Power Output')
|
2229
|
-
arg.setDescription(
|
2262
|
+
arg.setDescription("The rated power output of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-batteries'>HPXML Batteries</a>) is used.")
|
2230
2263
|
arg.setUnits('W')
|
2231
2264
|
args << arg
|
2232
2265
|
|
2233
2266
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_capacity', false)
|
2234
2267
|
arg.setDisplayName('Battery: Nominal Capacity')
|
2235
|
-
arg.setDescription(
|
2268
|
+
arg.setDescription("The nominal capacity of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-batteries'>HPXML Batteries</a>) is used.")
|
2236
2269
|
arg.setUnits('kWh')
|
2237
2270
|
args << arg
|
2238
2271
|
|
2239
2272
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_usable_capacity', false)
|
2240
2273
|
arg.setDisplayName('Battery: Usable Capacity')
|
2241
|
-
arg.setDescription(
|
2274
|
+
arg.setDescription("The usable capacity of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-batteries'>HPXML Batteries</a>) is used.")
|
2242
2275
|
arg.setUnits('kWh')
|
2243
2276
|
args << arg
|
2244
2277
|
|
2245
2278
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('battery_round_trip_efficiency', false)
|
2246
2279
|
arg.setDisplayName('Battery: Round Trip Efficiency')
|
2247
|
-
arg.setDescription(
|
2280
|
+
arg.setDescription("The round trip efficiency of the lithium ion battery. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-batteries'>HPXML Batteries</a>) is used.")
|
2248
2281
|
arg.setUnits('Frac')
|
2249
2282
|
args << arg
|
2250
2283
|
|
@@ -2274,7 +2307,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2274
2307
|
|
2275
2308
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_interior_usage_multiplier', false)
|
2276
2309
|
arg.setDisplayName('Lighting: Interior Usage Multiplier')
|
2277
|
-
arg.setDescription(
|
2310
|
+
arg.setDescription("Multiplier on the lighting energy usage (interior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-lighting'>HPXML Lighting</a>) is used.")
|
2278
2311
|
args << arg
|
2279
2312
|
|
2280
2313
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_exterior_fraction_cfl', true)
|
@@ -2297,7 +2330,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2297
2330
|
|
2298
2331
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_exterior_usage_multiplier', false)
|
2299
2332
|
arg.setDisplayName('Lighting: Exterior Usage Multiplier')
|
2300
|
-
arg.setDescription(
|
2333
|
+
arg.setDescription("Multiplier on the lighting energy usage (exterior) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-lighting'>HPXML Lighting</a>) is used.")
|
2301
2334
|
args << arg
|
2302
2335
|
|
2303
2336
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_garage_fraction_cfl', true)
|
@@ -2320,7 +2353,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2320
2353
|
|
2321
2354
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('lighting_garage_usage_multiplier', false)
|
2322
2355
|
arg.setDisplayName('Lighting: Garage Usage Multiplier')
|
2323
|
-
arg.setDescription(
|
2356
|
+
arg.setDescription("Multiplier on the lighting energy usage (garage) that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-lighting'>HPXML Lighting</a>) is used.")
|
2324
2357
|
args << arg
|
2325
2358
|
|
2326
2359
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('holiday_lighting_present', true)
|
@@ -2332,12 +2365,12 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2332
2365
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('holiday_lighting_daily_kwh', false)
|
2333
2366
|
arg.setDisplayName('Holiday Lighting: Daily Consumption')
|
2334
2367
|
arg.setUnits('kWh/day')
|
2335
|
-
arg.setDescription(
|
2368
|
+
arg.setDescription("The daily energy consumption for holiday lighting (exterior). If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-lighting'>HPXML Lighting</a>) is used.")
|
2336
2369
|
args << arg
|
2337
2370
|
|
2338
2371
|
arg = OpenStudio::Measure::OSArgument::makeStringArgument('holiday_lighting_period', false)
|
2339
2372
|
arg.setDisplayName('Holiday Lighting: Period')
|
2340
|
-
arg.setDescription(
|
2373
|
+
arg.setDescription("Enter a date like 'Nov 25 - Jan 5'. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-lighting'>HPXML Lighting</a>) is used.")
|
2341
2374
|
args << arg
|
2342
2375
|
|
2343
2376
|
dehumidifier_type_choices = OpenStudio::StringVector.new
|
@@ -2390,7 +2423,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2390
2423
|
args << arg
|
2391
2424
|
|
2392
2425
|
appliance_location_choices = OpenStudio::StringVector.new
|
2393
|
-
appliance_location_choices << HPXML::
|
2426
|
+
appliance_location_choices << HPXML::LocationConditionedSpace
|
2394
2427
|
appliance_location_choices << HPXML::LocationBasementConditioned
|
2395
2428
|
appliance_location_choices << HPXML::LocationBasementUnconditioned
|
2396
2429
|
appliance_location_choices << HPXML::LocationGarage
|
@@ -2411,7 +2444,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2411
2444
|
|
2412
2445
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_washer_location', appliance_location_choices, false)
|
2413
2446
|
arg.setDisplayName('Clothes Washer: Location')
|
2414
|
-
arg.setDescription(
|
2447
|
+
arg.setDescription("The space type for the clothes washer location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2415
2448
|
args << arg
|
2416
2449
|
|
2417
2450
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_washer_efficiency_type', clothes_washer_efficiency_type_choices, true)
|
@@ -2423,48 +2456,48 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2423
2456
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_efficiency', false)
|
2424
2457
|
arg.setDisplayName('Clothes Washer: Efficiency')
|
2425
2458
|
arg.setUnits('ft^3/kWh-cyc')
|
2426
|
-
arg.setDescription(
|
2459
|
+
arg.setDescription("The efficiency of the clothes washer. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2427
2460
|
args << arg
|
2428
2461
|
|
2429
2462
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_rated_annual_kwh', false)
|
2430
2463
|
arg.setDisplayName('Clothes Washer: Rated Annual Consumption')
|
2431
2464
|
arg.setUnits('kWh/yr')
|
2432
|
-
arg.setDescription(
|
2465
|
+
arg.setDescription("The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2433
2466
|
args << arg
|
2434
2467
|
|
2435
2468
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_electric_rate', false)
|
2436
2469
|
arg.setDisplayName('Clothes Washer: Label Electric Rate')
|
2437
2470
|
arg.setUnits('$/kWh')
|
2438
|
-
arg.setDescription(
|
2471
|
+
arg.setDescription("The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2439
2472
|
args << arg
|
2440
2473
|
|
2441
2474
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_gas_rate', false)
|
2442
2475
|
arg.setDisplayName('Clothes Washer: Label Gas Rate')
|
2443
2476
|
arg.setUnits('$/therm')
|
2444
|
-
arg.setDescription(
|
2477
|
+
arg.setDescription("The annual energy consumed by the clothes washer, as rated, obtained from the EnergyGuide label. This includes both the appliance electricity consumption and the energy required for water heating. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2445
2478
|
args << arg
|
2446
2479
|
|
2447
2480
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_annual_gas_cost', false)
|
2448
2481
|
arg.setDisplayName('Clothes Washer: Label Annual Cost with Gas DHW')
|
2449
2482
|
arg.setUnits('$')
|
2450
|
-
arg.setDescription(
|
2483
|
+
arg.setDescription("The annual cost of using the system under test conditions. Input is obtained from the EnergyGuide label. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2451
2484
|
args << arg
|
2452
2485
|
|
2453
2486
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_label_usage', false)
|
2454
2487
|
arg.setDisplayName('Clothes Washer: Label Usage')
|
2455
2488
|
arg.setUnits('cyc/wk')
|
2456
|
-
arg.setDescription(
|
2489
|
+
arg.setDescription("The clothes washer loads per week. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2457
2490
|
args << arg
|
2458
2491
|
|
2459
2492
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_capacity', false)
|
2460
2493
|
arg.setDisplayName('Clothes Washer: Drum Volume')
|
2461
2494
|
arg.setUnits('ft^3')
|
2462
|
-
arg.setDescription("Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature. If not provided, the OS-HPXML default is used.")
|
2495
|
+
arg.setDescription("Volume of the washer drum. Obtained from the EnergyStar website or the manufacturer's literature. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2463
2496
|
args << arg
|
2464
2497
|
|
2465
2498
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_washer_usage_multiplier', false)
|
2466
2499
|
arg.setDisplayName('Clothes Washer: Usage Multiplier')
|
2467
|
-
arg.setDescription(
|
2500
|
+
arg.setDescription("Multiplier on the clothes washer energy and hot water usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-washer'>HPXML Clothes Washer</a>) is used.")
|
2468
2501
|
args << arg
|
2469
2502
|
|
2470
2503
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('clothes_dryer_present', true)
|
@@ -2475,7 +2508,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2475
2508
|
|
2476
2509
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('clothes_dryer_location', appliance_location_choices, false)
|
2477
2510
|
arg.setDisplayName('Clothes Dryer: Location')
|
2478
|
-
arg.setDescription(
|
2511
|
+
arg.setDescription("The space type for the clothes dryer location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.")
|
2479
2512
|
args << arg
|
2480
2513
|
|
2481
2514
|
clothes_dryer_fuel_choices = OpenStudio::StringVector.new
|
@@ -2505,18 +2538,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2505
2538
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_efficiency', false)
|
2506
2539
|
arg.setDisplayName('Clothes Dryer: Efficiency')
|
2507
2540
|
arg.setUnits('lb/kWh')
|
2508
|
-
arg.setDescription(
|
2541
|
+
arg.setDescription("The efficiency of the clothes dryer. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.")
|
2509
2542
|
args << arg
|
2510
2543
|
|
2511
2544
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_vented_flow_rate', false)
|
2512
2545
|
arg.setDisplayName('Clothes Dryer: Vented Flow Rate')
|
2513
|
-
arg.setDescription(
|
2546
|
+
arg.setDescription("The exhaust flow rate of the vented clothes dryer. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.")
|
2514
2547
|
arg.setUnits('CFM')
|
2515
2548
|
args << arg
|
2516
2549
|
|
2517
2550
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('clothes_dryer_usage_multiplier', false)
|
2518
2551
|
arg.setDisplayName('Clothes Dryer: Usage Multiplier')
|
2519
|
-
arg.setDescription(
|
2552
|
+
arg.setDescription("Multiplier on the clothes dryer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-clothes-dryer'>HPXML Clothes Dryer</a>) is used.")
|
2520
2553
|
args << arg
|
2521
2554
|
|
2522
2555
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('dishwasher_present', true)
|
@@ -2527,7 +2560,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2527
2560
|
|
2528
2561
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('dishwasher_location', appliance_location_choices, false)
|
2529
2562
|
arg.setDisplayName('Dishwasher: Location')
|
2530
|
-
arg.setDescription(
|
2563
|
+
arg.setDescription("The space type for the dishwasher location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2531
2564
|
args << arg
|
2532
2565
|
|
2533
2566
|
dishwasher_efficiency_type_choices = OpenStudio::StringVector.new
|
@@ -2543,42 +2576,42 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2543
2576
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_efficiency', false)
|
2544
2577
|
arg.setDisplayName('Dishwasher: Efficiency')
|
2545
2578
|
arg.setUnits('RatedAnnualkWh or EnergyFactor')
|
2546
|
-
arg.setDescription(
|
2579
|
+
arg.setDescription("The efficiency of the dishwasher. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2547
2580
|
args << arg
|
2548
2581
|
|
2549
2582
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_electric_rate', false)
|
2550
2583
|
arg.setDisplayName('Dishwasher: Label Electric Rate')
|
2551
2584
|
arg.setUnits('$/kWh')
|
2552
|
-
arg.setDescription(
|
2585
|
+
arg.setDescription("The label electric rate of the dishwasher. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2553
2586
|
args << arg
|
2554
2587
|
|
2555
2588
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_gas_rate', false)
|
2556
2589
|
arg.setDisplayName('Dishwasher: Label Gas Rate')
|
2557
2590
|
arg.setUnits('$/therm')
|
2558
|
-
arg.setDescription(
|
2591
|
+
arg.setDescription("The label gas rate of the dishwasher. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2559
2592
|
args << arg
|
2560
2593
|
|
2561
2594
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_annual_gas_cost', false)
|
2562
2595
|
arg.setDisplayName('Dishwasher: Label Annual Gas Cost')
|
2563
2596
|
arg.setUnits('$')
|
2564
|
-
arg.setDescription(
|
2597
|
+
arg.setDescription("The label annual gas cost of the dishwasher. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2565
2598
|
args << arg
|
2566
2599
|
|
2567
2600
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_label_usage', false)
|
2568
2601
|
arg.setDisplayName('Dishwasher: Label Usage')
|
2569
2602
|
arg.setUnits('cyc/wk')
|
2570
|
-
arg.setDescription(
|
2603
|
+
arg.setDescription("The dishwasher loads per week. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2571
2604
|
args << arg
|
2572
2605
|
|
2573
2606
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('dishwasher_place_setting_capacity', false)
|
2574
2607
|
arg.setDisplayName('Dishwasher: Number of Place Settings')
|
2575
2608
|
arg.setUnits('#')
|
2576
|
-
arg.setDescription("The number of place settings for the unit. Data obtained from manufacturer's literature. If not provided, the OS-HPXML default is used.")
|
2609
|
+
arg.setDescription("The number of place settings for the unit. Data obtained from manufacturer's literature. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2577
2610
|
args << arg
|
2578
2611
|
|
2579
2612
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('dishwasher_usage_multiplier', false)
|
2580
2613
|
arg.setDisplayName('Dishwasher: Usage Multiplier')
|
2581
|
-
arg.setDescription(
|
2614
|
+
arg.setDescription("Multiplier on the dishwasher energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-dishwasher'>HPXML Dishwasher</a>) is used.")
|
2582
2615
|
args << arg
|
2583
2616
|
|
2584
2617
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('refrigerator_present', true)
|
@@ -2589,18 +2622,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2589
2622
|
|
2590
2623
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('refrigerator_location', appliance_location_choices, false)
|
2591
2624
|
arg.setDisplayName('Refrigerator: Location')
|
2592
|
-
arg.setDescription(
|
2625
|
+
arg.setDescription("The space type for the refrigerator location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.")
|
2593
2626
|
args << arg
|
2594
2627
|
|
2595
2628
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('refrigerator_rated_annual_kwh', false)
|
2596
2629
|
arg.setDisplayName('Refrigerator: Rated Annual Consumption')
|
2597
2630
|
arg.setUnits('kWh/yr')
|
2598
|
-
arg.setDescription(
|
2631
|
+
arg.setDescription("The EnergyGuide rated annual energy consumption for a refrigerator. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.")
|
2599
2632
|
args << arg
|
2600
2633
|
|
2601
2634
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('refrigerator_usage_multiplier', false)
|
2602
2635
|
arg.setDisplayName('Refrigerator: Usage Multiplier')
|
2603
|
-
arg.setDescription(
|
2636
|
+
arg.setDescription("Multiplier on the refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.")
|
2604
2637
|
args << arg
|
2605
2638
|
|
2606
2639
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('extra_refrigerator_present', true)
|
@@ -2611,18 +2644,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2611
2644
|
|
2612
2645
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('extra_refrigerator_location', appliance_location_choices, false)
|
2613
2646
|
arg.setDisplayName('Extra Refrigerator: Location')
|
2614
|
-
arg.setDescription(
|
2647
|
+
arg.setDescription("The space type for the extra refrigerator location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.")
|
2615
2648
|
args << arg
|
2616
2649
|
|
2617
2650
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('extra_refrigerator_rated_annual_kwh', false)
|
2618
2651
|
arg.setDisplayName('Extra Refrigerator: Rated Annual Consumption')
|
2619
2652
|
arg.setUnits('kWh/yr')
|
2620
|
-
arg.setDescription(
|
2653
|
+
arg.setDescription("The EnergyGuide rated annual energy consumption for an extra rrefrigerator. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.")
|
2621
2654
|
args << arg
|
2622
2655
|
|
2623
2656
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('extra_refrigerator_usage_multiplier', false)
|
2624
2657
|
arg.setDisplayName('Extra Refrigerator: Usage Multiplier')
|
2625
|
-
arg.setDescription(
|
2658
|
+
arg.setDescription("Multiplier on the extra refrigerator energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-refrigerators'>HPXML Refrigerators</a>) is used.")
|
2626
2659
|
args << arg
|
2627
2660
|
|
2628
2661
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('freezer_present', true)
|
@@ -2633,18 +2666,18 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2633
2666
|
|
2634
2667
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('freezer_location', appliance_location_choices, false)
|
2635
2668
|
arg.setDisplayName('Freezer: Location')
|
2636
|
-
arg.setDescription(
|
2669
|
+
arg.setDescription("The space type for the freezer location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-freezers'>HPXML Freezers</a>) is used.")
|
2637
2670
|
args << arg
|
2638
2671
|
|
2639
2672
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('freezer_rated_annual_kwh', false)
|
2640
2673
|
arg.setDisplayName('Freezer: Rated Annual Consumption')
|
2641
2674
|
arg.setUnits('kWh/yr')
|
2642
|
-
arg.setDescription(
|
2675
|
+
arg.setDescription("The EnergyGuide rated annual energy consumption for a freezer. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-freezers'>HPXML Freezers</a>) is used.")
|
2643
2676
|
args << arg
|
2644
2677
|
|
2645
2678
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('freezer_usage_multiplier', false)
|
2646
2679
|
arg.setDisplayName('Freezer: Usage Multiplier')
|
2647
|
-
arg.setDescription(
|
2680
|
+
arg.setDescription("Multiplier on the freezer energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-freezers'>HPXML Freezers</a>) is used.")
|
2648
2681
|
args << arg
|
2649
2682
|
|
2650
2683
|
cooking_range_oven_fuel_choices = OpenStudio::StringVector.new
|
@@ -2663,7 +2696,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2663
2696
|
|
2664
2697
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooking_range_oven_location', appliance_location_choices, false)
|
2665
2698
|
arg.setDisplayName('Cooking Range/Oven: Location')
|
2666
|
-
arg.setDescription(
|
2699
|
+
arg.setDescription("The space type for the cooking range/oven location. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.")
|
2667
2700
|
args << arg
|
2668
2701
|
|
2669
2702
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('cooking_range_oven_fuel_type', cooking_range_oven_fuel_choices, true)
|
@@ -2674,17 +2707,17 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2674
2707
|
|
2675
2708
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooking_range_oven_is_induction', false)
|
2676
2709
|
arg.setDisplayName('Cooking Range/Oven: Is Induction')
|
2677
|
-
arg.setDescription(
|
2710
|
+
arg.setDescription("Whether the cooking range is induction. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.")
|
2678
2711
|
args << arg
|
2679
2712
|
|
2680
2713
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('cooking_range_oven_is_convection', false)
|
2681
2714
|
arg.setDisplayName('Cooking Range/Oven: Is Convection')
|
2682
|
-
arg.setDescription(
|
2715
|
+
arg.setDescription("Whether the oven is convection. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.")
|
2683
2716
|
args << arg
|
2684
2717
|
|
2685
2718
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('cooking_range_oven_usage_multiplier', false)
|
2686
2719
|
arg.setDisplayName('Cooking Range/Oven: Usage Multiplier')
|
2687
|
-
arg.setDescription(
|
2720
|
+
arg.setDescription("Multiplier on the cooking range/oven energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-cooking-range-oven'>HPXML Cooking Range/Oven</a>) is used.")
|
2688
2721
|
args << arg
|
2689
2722
|
|
2690
2723
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('ceiling_fan_present', true)
|
@@ -2696,19 +2729,19 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2696
2729
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_efficiency', false)
|
2697
2730
|
arg.setDisplayName('Ceiling Fan: Efficiency')
|
2698
2731
|
arg.setUnits('CFM/W')
|
2699
|
-
arg.setDescription(
|
2732
|
+
arg.setDescription("The efficiency rating of the ceiling fan(s) at medium speed. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.")
|
2700
2733
|
args << arg
|
2701
2734
|
|
2702
2735
|
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('ceiling_fan_quantity', false)
|
2703
2736
|
arg.setDisplayName('Ceiling Fan: Quantity')
|
2704
2737
|
arg.setUnits('#')
|
2705
|
-
arg.setDescription(
|
2738
|
+
arg.setDescription("Total number of ceiling fans. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.")
|
2706
2739
|
args << arg
|
2707
2740
|
|
2708
2741
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_cooling_setpoint_temp_offset', false)
|
2709
2742
|
arg.setDisplayName('Ceiling Fan: Cooling Setpoint Temperature Offset')
|
2710
2743
|
arg.setUnits('deg-F')
|
2711
|
-
arg.setDescription(
|
2744
|
+
arg.setDescription("The cooling setpoint temperature offset during months when the ceiling fans are operating. Only applies if ceiling fan quantity is greater than zero. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.")
|
2712
2745
|
args << arg
|
2713
2746
|
|
2714
2747
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_plug_loads_television_present', true)
|
@@ -2719,36 +2752,36 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2719
2752
|
|
2720
2753
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_television_annual_kwh', false)
|
2721
2754
|
arg.setDisplayName('Misc Plug Loads: Television Annual kWh')
|
2722
|
-
arg.setDescription(
|
2755
|
+
arg.setDescription("The annual energy consumption of the television plug loads. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2723
2756
|
arg.setUnits('kWh/yr')
|
2724
2757
|
args << arg
|
2725
2758
|
|
2726
2759
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_television_usage_multiplier', false)
|
2727
2760
|
arg.setDisplayName('Misc Plug Loads: Television Usage Multiplier')
|
2728
|
-
arg.setDescription(
|
2761
|
+
arg.setDescription("Multiplier on the television energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2729
2762
|
args << arg
|
2730
2763
|
|
2731
2764
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_annual_kwh', false)
|
2732
2765
|
arg.setDisplayName('Misc Plug Loads: Other Annual kWh')
|
2733
|
-
arg.setDescription(
|
2766
|
+
arg.setDescription("The annual energy consumption of the other residual plug loads. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2734
2767
|
arg.setUnits('kWh/yr')
|
2735
2768
|
args << arg
|
2736
2769
|
|
2737
2770
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_frac_sensible', false)
|
2738
2771
|
arg.setDisplayName('Misc Plug Loads: Other Sensible Fraction')
|
2739
|
-
arg.setDescription("Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default is used.")
|
2772
|
+
arg.setDescription("Fraction of other residual plug loads' internal gains that are sensible. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2740
2773
|
arg.setUnits('Frac')
|
2741
2774
|
args << arg
|
2742
2775
|
|
2743
2776
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_frac_latent', false)
|
2744
2777
|
arg.setDisplayName('Misc Plug Loads: Other Latent Fraction')
|
2745
|
-
arg.setDescription("Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default is used.")
|
2778
|
+
arg.setDescription("Fraction of other residual plug loads' internal gains that are latent. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2746
2779
|
arg.setUnits('Frac')
|
2747
2780
|
args << arg
|
2748
2781
|
|
2749
2782
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_other_usage_multiplier', false)
|
2750
2783
|
arg.setDisplayName('Misc Plug Loads: Other Usage Multiplier')
|
2751
|
-
arg.setDescription(
|
2784
|
+
arg.setDescription("Multiplier on the other energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2752
2785
|
args << arg
|
2753
2786
|
|
2754
2787
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_plug_loads_well_pump_present', true)
|
@@ -2759,13 +2792,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2759
2792
|
|
2760
2793
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_well_pump_annual_kwh', false)
|
2761
2794
|
arg.setDisplayName('Misc Plug Loads: Well Pump Annual kWh')
|
2762
|
-
arg.setDescription(
|
2795
|
+
arg.setDescription("The annual energy consumption of the well pump plug loads. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2763
2796
|
arg.setUnits('kWh/yr')
|
2764
2797
|
args << arg
|
2765
2798
|
|
2766
2799
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_well_pump_usage_multiplier', false)
|
2767
2800
|
arg.setDisplayName('Misc Plug Loads: Well Pump Usage Multiplier')
|
2768
|
-
arg.setDescription(
|
2801
|
+
arg.setDescription("Multiplier on the well pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2769
2802
|
args << arg
|
2770
2803
|
|
2771
2804
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_plug_loads_vehicle_present', true)
|
@@ -2776,13 +2809,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2776
2809
|
|
2777
2810
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_vehicle_annual_kwh', false)
|
2778
2811
|
arg.setDisplayName('Misc Plug Loads: Vehicle Annual kWh')
|
2779
|
-
arg.setDescription(
|
2812
|
+
arg.setDescription("The annual energy consumption of the electric vehicle plug loads. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2780
2813
|
arg.setUnits('kWh/yr')
|
2781
2814
|
args << arg
|
2782
2815
|
|
2783
2816
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_plug_loads_vehicle_usage_multiplier', false)
|
2784
2817
|
arg.setDisplayName('Misc Plug Loads: Vehicle Usage Multiplier')
|
2785
|
-
arg.setDescription(
|
2818
|
+
arg.setDescription("Multiplier on the electric vehicle energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-plug-loads'>HPXML Plug Loads</a>) is used.")
|
2786
2819
|
args << arg
|
2787
2820
|
|
2788
2821
|
misc_fuel_loads_fuel_choices = OpenStudio::StringVector.new
|
@@ -2806,13 +2839,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2806
2839
|
|
2807
2840
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_grill_annual_therm', false)
|
2808
2841
|
arg.setDisplayName('Misc Fuel Loads: Grill Annual therm')
|
2809
|
-
arg.setDescription(
|
2842
|
+
arg.setDescription("The annual energy consumption of the fuel loads grill. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2810
2843
|
arg.setUnits('therm/yr')
|
2811
2844
|
args << arg
|
2812
2845
|
|
2813
2846
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_grill_usage_multiplier', false)
|
2814
2847
|
arg.setDisplayName('Misc Fuel Loads: Grill Usage Multiplier')
|
2815
|
-
arg.setDescription(
|
2848
|
+
arg.setDescription("Multiplier on the fuel loads grill energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2816
2849
|
args << arg
|
2817
2850
|
|
2818
2851
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_fuel_loads_lighting_present', true)
|
@@ -2829,13 +2862,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2829
2862
|
|
2830
2863
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_lighting_annual_therm', false)
|
2831
2864
|
arg.setDisplayName('Misc Fuel Loads: Lighting Annual therm')
|
2832
|
-
arg.setDescription(
|
2865
|
+
arg.setDescription("The annual energy consumption of the fuel loads lighting. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>)is used.")
|
2833
2866
|
arg.setUnits('therm/yr')
|
2834
2867
|
args << arg
|
2835
2868
|
|
2836
2869
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_lighting_usage_multiplier', false)
|
2837
2870
|
arg.setDisplayName('Misc Fuel Loads: Lighting Usage Multiplier')
|
2838
|
-
arg.setDescription(
|
2871
|
+
arg.setDescription("Multiplier on the fuel loads lighting energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2839
2872
|
args << arg
|
2840
2873
|
|
2841
2874
|
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('misc_fuel_loads_fireplace_present', true)
|
@@ -2852,25 +2885,25 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2852
2885
|
|
2853
2886
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_annual_therm', false)
|
2854
2887
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Annual therm')
|
2855
|
-
arg.setDescription(
|
2888
|
+
arg.setDescription("The annual energy consumption of the fuel loads fireplace. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2856
2889
|
arg.setUnits('therm/yr')
|
2857
2890
|
args << arg
|
2858
2891
|
|
2859
2892
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_frac_sensible', false)
|
2860
2893
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Sensible Fraction')
|
2861
|
-
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default is used.")
|
2894
|
+
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are sensible. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2862
2895
|
arg.setUnits('Frac')
|
2863
2896
|
args << arg
|
2864
2897
|
|
2865
2898
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_frac_latent', false)
|
2866
2899
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Latent Fraction')
|
2867
|
-
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default is used.")
|
2900
|
+
arg.setDescription("Fraction of fireplace residual fuel loads' internal gains that are latent. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2868
2901
|
arg.setUnits('Frac')
|
2869
2902
|
args << arg
|
2870
2903
|
|
2871
2904
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('misc_fuel_loads_fireplace_usage_multiplier', false)
|
2872
2905
|
arg.setDisplayName('Misc Fuel Loads: Fireplace Usage Multiplier')
|
2873
|
-
arg.setDescription(
|
2906
|
+
arg.setDescription("Multiplier on the fuel loads fireplace energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-fuel-loads'>HPXML Fuel Loads</a>) is used.")
|
2874
2907
|
args << arg
|
2875
2908
|
|
2876
2909
|
heater_type_choices = OpenStudio::StringVector.new
|
@@ -2887,13 +2920,13 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2887
2920
|
|
2888
2921
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_pump_annual_kwh', false)
|
2889
2922
|
arg.setDisplayName('Pool: Pump Annual kWh')
|
2890
|
-
arg.setDescription(
|
2923
|
+
arg.setDescription("The annual energy consumption of the pool pump. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#pool-pump'>Pool Pump</a>) is used.")
|
2891
2924
|
arg.setUnits('kWh/yr')
|
2892
2925
|
args << arg
|
2893
2926
|
|
2894
2927
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_pump_usage_multiplier', false)
|
2895
2928
|
arg.setDisplayName('Pool: Pump Usage Multiplier')
|
2896
|
-
arg.setDescription(
|
2929
|
+
arg.setDescription("Multiplier on the pool pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#pool-pump'>Pool Pump</a>) is used.")
|
2897
2930
|
args << arg
|
2898
2931
|
|
2899
2932
|
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('pool_heater_type', heater_type_choices, true)
|
@@ -2904,59 +2937,59 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
2904
2937
|
|
2905
2938
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_annual_kwh', false)
|
2906
2939
|
arg.setDisplayName('Pool: Heater Annual kWh')
|
2907
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} pool heater. If not provided, the OS-HPXML default is used.")
|
2940
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} pool heater. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#pool-heater'>Pool Heater</a>) is used.")
|
2908
2941
|
arg.setUnits('kWh/yr')
|
2909
2942
|
args << arg
|
2910
2943
|
|
2911
2944
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_annual_therm', false)
|
2912
2945
|
arg.setDisplayName('Pool: Heater Annual therm')
|
2913
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} pool heater. If not provided, the OS-HPXML default is used.")
|
2946
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} pool heater. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#pool-heater'>Pool Heater</a>) is used.")
|
2914
2947
|
arg.setUnits('therm/yr')
|
2915
2948
|
args << arg
|
2916
2949
|
|
2917
2950
|
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('pool_heater_usage_multiplier', false)
|
2918
2951
|
arg.setDisplayName('Pool: Heater Usage Multiplier')
|
2919
|
-
arg.setDescription(
|
2952
|
+
arg.setDescription("Multiplier on the pool heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#pool-heater'>Pool Heater</a>) is used.")
|
2920
2953
|
args << arg
|
2921
2954
|
|
2922
|
-
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('
|
2923
|
-
arg.setDisplayName('
|
2924
|
-
arg.setDescription('Whether there is a
|
2955
|
+
arg = OpenStudio::Measure::OSArgument::makeBoolArgument('permanent_spa_present', true)
|
2956
|
+
arg.setDisplayName('Permanent Spa: Present')
|
2957
|
+
arg.setDescription('Whether there is a permanent spa.')
|
2925
2958
|
arg.setDefaultValue(false)
|
2926
2959
|
args << arg
|
2927
2960
|
|
2928
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('
|
2929
|
-
arg.setDisplayName('
|
2930
|
-
arg.setDescription(
|
2961
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('permanent_spa_pump_annual_kwh', false)
|
2962
|
+
arg.setDisplayName('Permanent Spa: Pump Annual kWh')
|
2963
|
+
arg.setDescription("The annual energy consumption of the permanent spa pump. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#permanent-spa-pump'>Permanent Spa Pump</a>) is used.")
|
2931
2964
|
arg.setUnits('kWh/yr')
|
2932
2965
|
args << arg
|
2933
2966
|
|
2934
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('
|
2935
|
-
arg.setDisplayName('
|
2936
|
-
arg.setDescription(
|
2967
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('permanent_spa_pump_usage_multiplier', false)
|
2968
|
+
arg.setDisplayName('Permanent Spa: Pump Usage Multiplier')
|
2969
|
+
arg.setDescription("Multiplier on the permanent spa pump energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#permanent-spa-pump'>Permanent Spa Pump</a>) is used.")
|
2937
2970
|
args << arg
|
2938
2971
|
|
2939
|
-
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('
|
2940
|
-
arg.setDisplayName('
|
2941
|
-
arg.setDescription("The type of
|
2972
|
+
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('permanent_spa_heater_type', heater_type_choices, true)
|
2973
|
+
arg.setDisplayName('Permanent Spa: Heater Type')
|
2974
|
+
arg.setDescription("The type of permanent spa heater. Use '#{HPXML::TypeNone}' if there is no permanent spa heater.")
|
2942
2975
|
arg.setDefaultValue(HPXML::TypeNone)
|
2943
2976
|
args << arg
|
2944
2977
|
|
2945
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('
|
2946
|
-
arg.setDisplayName('
|
2947
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance}
|
2978
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('permanent_spa_heater_annual_kwh', false)
|
2979
|
+
arg.setDisplayName('Permanent Spa: Heater Annual kWh')
|
2980
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeElectricResistance} permanent spa heater. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#permanent-spa-heater'>Permanent Spa Heater</a>) is used.")
|
2948
2981
|
arg.setUnits('kWh/yr')
|
2949
2982
|
args << arg
|
2950
2983
|
|
2951
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('
|
2952
|
-
arg.setDisplayName('
|
2953
|
-
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas}
|
2984
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('permanent_spa_heater_annual_therm', false)
|
2985
|
+
arg.setDisplayName('Permanent Spa: Heater Annual therm')
|
2986
|
+
arg.setDescription("The annual energy consumption of the #{HPXML::HeaterTypeGas} permanent spa heater. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#permanent-spa-heater'>Permanent Spa Heater</a>) is used.")
|
2954
2987
|
arg.setUnits('therm/yr')
|
2955
2988
|
args << arg
|
2956
2989
|
|
2957
|
-
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('
|
2958
|
-
arg.setDisplayName('
|
2959
|
-
arg.setDescription(
|
2990
|
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('permanent_spa_heater_usage_multiplier', false)
|
2991
|
+
arg.setDisplayName('Permanent Spa: Heater Usage Multiplier')
|
2992
|
+
arg.setDescription("Multiplier on the permanent spa heater energy usage that can reflect, e.g., high/low usage occupants. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#permanent-spa-heater'>Permanent Spa Heater</a>) is used.")
|
2960
2993
|
args << arg
|
2961
2994
|
|
2962
2995
|
arg = OpenStudio::Measure::OSArgument.makeStringArgument('emissions_scenario_names', false)
|
@@ -3111,7 +3144,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3111
3144
|
|
3112
3145
|
args[:apply_validation] = args[:apply_validation].is_initialized ? args[:apply_validation].get : false
|
3113
3146
|
args[:apply_defaults] = args[:apply_defaults].is_initialized ? args[:apply_defaults].get : false
|
3114
|
-
args[:apply_validation] = true if args[:apply_defaults]
|
3115
3147
|
args[:geometry_unit_left_wall_is_adiabatic] = (args[:geometry_unit_left_wall_is_adiabatic].is_initialized && args[:geometry_unit_left_wall_is_adiabatic].get)
|
3116
3148
|
args[:geometry_unit_right_wall_is_adiabatic] = (args[:geometry_unit_right_wall_is_adiabatic].is_initialized && args[:geometry_unit_right_wall_is_adiabatic].get)
|
3117
3149
|
args[:geometry_unit_front_wall_is_adiabatic] = (args[:geometry_unit_front_wall_is_adiabatic].is_initialized && args[:geometry_unit_front_wall_is_adiabatic].get)
|
@@ -3149,16 +3181,20 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3149
3181
|
hpxml_path = File.expand_path(hpxml_path)
|
3150
3182
|
end
|
3151
3183
|
|
3152
|
-
|
3184
|
+
# Existing HPXML File
|
3185
|
+
if args[:existing_hpxml_path].is_initialized
|
3186
|
+
existing_hpxml_path = args[:existing_hpxml_path].get
|
3187
|
+
unless (Pathname.new existing_hpxml_path).absolute?
|
3188
|
+
existing_hpxml_path = File.expand_path(existing_hpxml_path)
|
3189
|
+
end
|
3190
|
+
end
|
3191
|
+
|
3192
|
+
hpxml_doc = HPXMLFile.create(runner, model, args, epw_path, hpxml_path, existing_hpxml_path)
|
3153
3193
|
if not hpxml_doc
|
3154
3194
|
runner.registerError('Unsuccessful creation of HPXML file.')
|
3155
3195
|
return false
|
3156
3196
|
end
|
3157
3197
|
|
3158
|
-
# Write HPXML file again if defaults applied
|
3159
|
-
if args[:apply_defaults]
|
3160
|
-
XMLHelper.write_file(hpxml_doc, hpxml_path)
|
3161
|
-
end
|
3162
3198
|
runner.registerInfo("Wrote file: #{hpxml_path}")
|
3163
3199
|
|
3164
3200
|
# Uncomment for debugging purposes
|
@@ -3177,6 +3213,10 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3177
3213
|
def argument_warnings(args)
|
3178
3214
|
warnings = []
|
3179
3215
|
|
3216
|
+
max_uninsulated_floor_rvalue = 6.0
|
3217
|
+
max_uninsulated_ceiling_rvalue = 3.0
|
3218
|
+
max_uninsulated_roof_rvalue = 3.0
|
3219
|
+
|
3180
3220
|
warning = ([HPXML::WaterHeaterTypeHeatPump].include?(args[:water_heater_type]) && (args[:water_heater_fuel_type] != HPXML::FuelTypeElectricity))
|
3181
3221
|
warnings << 'Cannot model a heat pump water heater with non-electric fuel type.' if warning
|
3182
3222
|
|
@@ -3186,19 +3226,16 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3186
3226
|
warning = (args[:geometry_foundation_type] == HPXML::FoundationTypeSlab) && (args[:geometry_foundation_height_above_grade] > 0)
|
3187
3227
|
warnings << 'Specified a slab foundation type with a non-zero height above grade.' if warning
|
3188
3228
|
|
3189
|
-
warning = (args[:
|
3190
|
-
warnings << 'The fraction of heat load served by the second heating system is greater than or equal to 50%.' if warning
|
3191
|
-
|
3192
|
-
warning = [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented, HPXML::FoundationTypeBasementUnconditioned].include?(args[:geometry_foundation_type]) && ((args[:foundation_wall_insulation_r] > 0) || args[:foundation_wall_assembly_r].is_initialized) && (args[:floor_over_foundation_assembly_r] > 2.1)
|
3229
|
+
warning = [HPXML::FoundationTypeCrawlspaceVented, HPXML::FoundationTypeCrawlspaceUnvented, HPXML::FoundationTypeBasementUnconditioned].include?(args[:geometry_foundation_type]) && ((args[:foundation_wall_insulation_r] > 0) || args[:foundation_wall_assembly_r].is_initialized) && (args[:floor_over_foundation_assembly_r] > max_uninsulated_floor_rvalue)
|
3193
3230
|
warnings << 'Home with unconditioned basement/crawlspace foundation type has both foundation wall insulation and floor insulation.' if warning
|
3194
3231
|
|
3195
|
-
warning = [HPXML::AtticTypeVented, HPXML::AtticTypeUnvented].include?(args[:geometry_attic_type]) && (args[:ceiling_assembly_r] >
|
3232
|
+
warning = [HPXML::AtticTypeVented, HPXML::AtticTypeUnvented].include?(args[:geometry_attic_type]) && (args[:ceiling_assembly_r] > max_uninsulated_ceiling_rvalue) && (args[:roof_assembly_r] > max_uninsulated_roof_rvalue)
|
3196
3233
|
warnings << 'Home with unconditioned attic type has both ceiling insulation and roof insulation.' if warning
|
3197
3234
|
|
3198
|
-
warning = (args[:geometry_foundation_type] == HPXML::FoundationTypeBasementConditioned) && (args[:floor_over_foundation_assembly_r] >
|
3235
|
+
warning = (args[:geometry_foundation_type] == HPXML::FoundationTypeBasementConditioned) && (args[:floor_over_foundation_assembly_r] > max_uninsulated_floor_rvalue)
|
3199
3236
|
warnings << 'Home with conditioned basement has floor insulation.' if warning
|
3200
3237
|
|
3201
|
-
warning = (args[:geometry_attic_type] == HPXML::AtticTypeConditioned) && (args[:ceiling_assembly_r] >
|
3238
|
+
warning = (args[:geometry_attic_type] == HPXML::AtticTypeConditioned) && (args[:ceiling_assembly_r] > max_uninsulated_ceiling_rvalue)
|
3202
3239
|
warnings << 'Home with conditioned attic has ceiling insulation.' if warning
|
3203
3240
|
|
3204
3241
|
return warnings
|
@@ -3219,12 +3256,6 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3219
3256
|
error = (args[:geometry_unit_type] == HPXML::ResidentialTypeApartment) && ([HPXML::FoundationTypeBasementConditioned, HPXML::FoundationTypeCrawlspaceConditioned].include? args[:geometry_foundation_type])
|
3220
3257
|
errors << 'Conditioned basement/crawlspace foundation type for apartment units is not currently supported.' if error
|
3221
3258
|
|
3222
|
-
error = (args[:ducts_supply_location].is_initialized != args[:ducts_supply_surface_area].is_initialized) || (args[:ducts_return_location].is_initialized != args[:ducts_return_surface_area].is_initialized)
|
3223
|
-
errors << 'Duct location and surface area not both defaulted or not both specified.' if error
|
3224
|
-
|
3225
|
-
error = (args[:heating_system_2_type] != 'none') && (args[:heating_system_2_fraction_heat_load_served] == 1.0)
|
3226
|
-
errors << 'The fraction of heat load served by the second heating system is 100%.' if error
|
3227
|
-
|
3228
3259
|
error = (args[:heating_system_type] == 'none') && (args[:heat_pump_type] == 'none') && (args[:heating_system_2_type] != 'none')
|
3229
3260
|
errors << 'A second heating system was specified without a primary heating system.' if error
|
3230
3261
|
|
@@ -3355,7 +3386,7 @@ class BuildResidentialHPXML < OpenStudio::Measure::ModelMeasure
|
|
3355
3386
|
end
|
3356
3387
|
|
3357
3388
|
class HPXMLFile
|
3358
|
-
def self.create(runner, model, args, epw_path, hpxml_path)
|
3389
|
+
def self.create(runner, model, args, epw_path, hpxml_path, existing_hpxml_path)
|
3359
3390
|
epw_file = OpenStudio::EpwFile.new(epw_path)
|
3360
3391
|
if (args[:hvac_control_heating_season_period].to_s == HPXML::BuildingAmerica) || (args[:hvac_control_cooling_season_period].to_s == HPXML::BuildingAmerica) || (args[:apply_defaults])
|
3361
3392
|
weather = WeatherProcess.new(epw_path: epw_path, runner: nil)
|
@@ -3370,75 +3401,88 @@ class HPXMLFile
|
|
3370
3401
|
sorted_surfaces = model.getSurfaces.sort_by { |s| s.additionalProperties.getFeatureAsInteger('Index').get }
|
3371
3402
|
sorted_subsurfaces = model.getSubSurfaces.sort_by { |ss| ss.additionalProperties.getFeatureAsInteger('Index').get }
|
3372
3403
|
|
3373
|
-
hpxml = HPXML.new
|
3374
|
-
|
3375
|
-
set_header(hpxml, args)
|
3376
|
-
|
3377
|
-
|
3378
|
-
|
3379
|
-
|
3380
|
-
|
3381
|
-
|
3382
|
-
|
3383
|
-
|
3384
|
-
|
3385
|
-
|
3386
|
-
|
3387
|
-
|
3388
|
-
|
3389
|
-
|
3390
|
-
|
3391
|
-
|
3392
|
-
|
3393
|
-
|
3394
|
-
|
3395
|
-
|
3396
|
-
|
3397
|
-
|
3398
|
-
|
3399
|
-
|
3400
|
-
|
3401
|
-
|
3402
|
-
|
3403
|
-
|
3404
|
-
|
3405
|
-
|
3406
|
-
|
3407
|
-
|
3408
|
-
|
3409
|
-
|
3410
|
-
|
3411
|
-
|
3412
|
-
|
3413
|
-
|
3414
|
-
|
3415
|
-
|
3416
|
-
|
3417
|
-
|
3418
|
-
|
3419
|
-
|
3420
|
-
|
3421
|
-
|
3422
|
-
|
3423
|
-
|
3424
|
-
|
3425
|
-
|
3426
|
-
|
3427
|
-
|
3428
|
-
|
3404
|
+
hpxml = HPXML.new(hpxml_path: existing_hpxml_path, building_id: 'ALL')
|
3405
|
+
|
3406
|
+
if not set_header(runner, hpxml, args)
|
3407
|
+
return false
|
3408
|
+
end
|
3409
|
+
|
3410
|
+
hpxml_bldg = add_building(hpxml, args)
|
3411
|
+
set_site(hpxml_bldg, args)
|
3412
|
+
set_neighbor_buildings(hpxml_bldg, args)
|
3413
|
+
set_building_occupancy(hpxml_bldg, args)
|
3414
|
+
set_building_construction(hpxml_bldg, args)
|
3415
|
+
set_building_header(hpxml_bldg, args)
|
3416
|
+
set_climate_and_risk_zones(hpxml_bldg, args)
|
3417
|
+
set_air_infiltration_measurements(hpxml_bldg, args)
|
3418
|
+
set_roofs(hpxml_bldg, args, sorted_surfaces)
|
3419
|
+
set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
|
3420
|
+
set_walls(hpxml_bldg, model, args, sorted_surfaces)
|
3421
|
+
set_foundation_walls(hpxml_bldg, model, args, sorted_surfaces)
|
3422
|
+
set_floors(hpxml_bldg, args, sorted_surfaces)
|
3423
|
+
set_slabs(hpxml_bldg, model, args, sorted_surfaces)
|
3424
|
+
set_windows(hpxml_bldg, model, args, sorted_subsurfaces)
|
3425
|
+
set_skylights(hpxml_bldg, args, sorted_subsurfaces)
|
3426
|
+
set_doors(hpxml_bldg, model, args, sorted_subsurfaces)
|
3427
|
+
set_attics(hpxml_bldg, args)
|
3428
|
+
set_foundations(hpxml_bldg, args)
|
3429
|
+
set_heating_systems(hpxml_bldg, args)
|
3430
|
+
set_cooling_systems(hpxml_bldg, args)
|
3431
|
+
set_heat_pumps(hpxml_bldg, args)
|
3432
|
+
set_secondary_heating_systems(hpxml_bldg, args)
|
3433
|
+
set_hvac_distribution(hpxml_bldg, args)
|
3434
|
+
set_hvac_control(hpxml, hpxml_bldg, args, epw_file, weather)
|
3435
|
+
set_ventilation_fans(hpxml_bldg, args)
|
3436
|
+
set_water_heating_systems(hpxml_bldg, args)
|
3437
|
+
set_hot_water_distribution(hpxml_bldg, args)
|
3438
|
+
set_water_fixtures(hpxml_bldg, args)
|
3439
|
+
set_solar_thermal(hpxml_bldg, args, epw_file)
|
3440
|
+
set_pv_systems(hpxml_bldg, args, epw_file)
|
3441
|
+
set_battery(hpxml_bldg, args)
|
3442
|
+
set_lighting(hpxml_bldg, args)
|
3443
|
+
set_dehumidifier(hpxml_bldg, args)
|
3444
|
+
set_clothes_washer(hpxml_bldg, args)
|
3445
|
+
set_clothes_dryer(hpxml_bldg, args)
|
3446
|
+
set_dishwasher(hpxml_bldg, args)
|
3447
|
+
set_refrigerator(hpxml_bldg, args)
|
3448
|
+
set_extra_refrigerator(hpxml_bldg, args)
|
3449
|
+
set_freezer(hpxml_bldg, args)
|
3450
|
+
set_cooking_range_oven(hpxml_bldg, args)
|
3451
|
+
set_ceiling_fans(hpxml_bldg, args)
|
3452
|
+
set_misc_plug_loads_television(hpxml_bldg, args)
|
3453
|
+
set_misc_plug_loads_other(hpxml_bldg, args)
|
3454
|
+
set_misc_plug_loads_vehicle(hpxml_bldg, args)
|
3455
|
+
set_misc_plug_loads_well_pump(hpxml_bldg, args)
|
3456
|
+
set_misc_fuel_loads_grill(hpxml_bldg, args)
|
3457
|
+
set_misc_fuel_loads_lighting(hpxml_bldg, args)
|
3458
|
+
set_misc_fuel_loads_fireplace(hpxml_bldg, args)
|
3459
|
+
set_pool(hpxml_bldg, args)
|
3460
|
+
set_permanent_spa(hpxml_bldg, args)
|
3461
|
+
collapse_surfaces(hpxml_bldg, args)
|
3462
|
+
renumber_hpxml_ids(hpxml_bldg)
|
3463
|
+
|
3464
|
+
hpxml_doc = hpxml.to_doc()
|
3465
|
+
hpxml.set_unique_hpxml_ids(hpxml_doc, true) if hpxml.buildings.size > 1
|
3429
3466
|
XMLHelper.write_file(hpxml_doc, hpxml_path)
|
3430
3467
|
|
3431
|
-
if args[:
|
3432
|
-
#
|
3468
|
+
if args[:apply_defaults]
|
3469
|
+
# Always check for invalid HPXML file before applying defaults
|
3433
3470
|
if not validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
|
3434
3471
|
return false
|
3435
3472
|
end
|
3436
|
-
end
|
3437
3473
|
|
3438
|
-
if args[:apply_defaults]
|
3439
3474
|
eri_version = Constants.ERIVersions[-1]
|
3440
|
-
HPXMLDefaults.apply(runner, hpxml, eri_version, weather, epw_file: epw_file)
|
3441
|
-
hpxml_doc = hpxml.
|
3475
|
+
HPXMLDefaults.apply(runner, hpxml, hpxml_bldg, eri_version, weather, epw_file: epw_file)
|
3476
|
+
hpxml_doc = hpxml.to_doc()
|
3477
|
+
hpxml.set_unique_hpxml_ids(hpxml_doc, true) if hpxml.buildings.size > 1
|
3478
|
+
XMLHelper.write_file(hpxml_doc, hpxml_path)
|
3479
|
+
end
|
3480
|
+
|
3481
|
+
if args[:apply_validation]
|
3482
|
+
# Optionally check for invalid HPXML file (with or without defaults applied)
|
3483
|
+
if not validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
|
3484
|
+
return false
|
3485
|
+
end
|
3442
3486
|
end
|
3443
3487
|
|
3444
3488
|
return hpxml_doc
|
@@ -3446,7 +3490,10 @@ class HPXMLFile
|
|
3446
3490
|
|
3447
3491
|
def self.validate_hpxml(runner, hpxml, hpxml_doc, hpxml_path)
|
3448
3492
|
# Check for errors in the HPXML object
|
3449
|
-
errors =
|
3493
|
+
errors = []
|
3494
|
+
hpxml.buildings.each do |hpxml_bldg|
|
3495
|
+
errors += hpxml_bldg.check_for_errors()
|
3496
|
+
end
|
3450
3497
|
if errors.size > 0
|
3451
3498
|
fail "ERROR: Invalid HPXML object produced.\n#{errors}"
|
3452
3499
|
end
|
@@ -3499,7 +3546,7 @@ class HPXMLFile
|
|
3499
3546
|
args[:geometry_foundation_height] = 0.0
|
3500
3547
|
args[:geometry_foundation_height_above_grade] = 0.0
|
3501
3548
|
args[:geometry_rim_joist_height] = 0.0
|
3502
|
-
elsif args[:geometry_foundation_type] == HPXML::FoundationTypeAmbient
|
3549
|
+
elsif (args[:geometry_foundation_type] == HPXML::FoundationTypeAmbient) || args[:geometry_foundation_type].start_with?(HPXML::FoundationTypeBellyAndWing)
|
3503
3550
|
args[:geometry_rim_joist_height] = 0.0
|
3504
3551
|
end
|
3505
3552
|
|
@@ -3514,6 +3561,8 @@ class HPXMLFile
|
|
3514
3561
|
success = Geometry.create_single_family_attached(model: model, **args)
|
3515
3562
|
elsif args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
|
3516
3563
|
success = Geometry.create_apartment(model: model, **args)
|
3564
|
+
elsif args[:geometry_unit_type] == HPXML::ResidentialTypeManufactured
|
3565
|
+
success = Geometry.create_single_family_detached(runner: runner, model: model, **args)
|
3517
3566
|
end
|
3518
3567
|
return false if not success
|
3519
3568
|
|
@@ -3526,23 +3575,40 @@ class HPXMLFile
|
|
3526
3575
|
return true
|
3527
3576
|
end
|
3528
3577
|
|
3529
|
-
def self.
|
3578
|
+
def self.unavailable_period_exists(hpxml, column_name, begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability = nil)
|
3579
|
+
natvent_availability = HPXML::ScheduleUnavailable if natvent_availability.nil?
|
3580
|
+
|
3581
|
+
hpxml.header.unavailable_periods.each do |unavailable_period|
|
3582
|
+
begin_hour = 0 if begin_hour.nil?
|
3583
|
+
end_hour = 24 if end_hour.nil?
|
3584
|
+
|
3585
|
+
next unless (unavailable_period.column_name == column_name) &&
|
3586
|
+
(unavailable_period.begin_month == begin_month) &&
|
3587
|
+
(unavailable_period.begin_day == begin_day) &&
|
3588
|
+
(unavailable_period.begin_hour == begin_hour) &&
|
3589
|
+
(unavailable_period.end_month == end_month) &&
|
3590
|
+
(unavailable_period.end_day == end_day) &&
|
3591
|
+
(unavailable_period.end_hour == end_hour) &&
|
3592
|
+
(unavailable_period.natvent_availability == natvent_availability)
|
3593
|
+
|
3594
|
+
return true
|
3595
|
+
end
|
3596
|
+
return false
|
3597
|
+
end
|
3598
|
+
|
3599
|
+
def self.set_header(runner, hpxml, args)
|
3600
|
+
errors = []
|
3601
|
+
|
3530
3602
|
hpxml.header.xml_type = 'HPXML'
|
3531
3603
|
hpxml.header.xml_generated_by = 'BuildResidentialHPXML'
|
3532
3604
|
hpxml.header.transaction = 'create'
|
3533
|
-
hpxml.header.building_id = 'MyBuilding'
|
3534
|
-
hpxml.header.event_type = 'proposed workscope'
|
3535
|
-
|
3536
|
-
if args[:window_natvent_availability].is_initialized
|
3537
|
-
hpxml.header.natvent_days_per_week = args[:window_natvent_availability].get
|
3538
|
-
end
|
3539
3605
|
|
3540
|
-
if args[:schedules_filepaths].is_initialized
|
3541
|
-
hpxml.header.schedules_filepaths = args[:schedules_filepaths].get.split(',').map(&:strip)
|
3542
|
-
end
|
3543
3606
|
if args[:schedules_vacancy_period].is_initialized
|
3544
3607
|
begin_month, begin_day, begin_hour, end_month, end_day, end_hour = Schedule.parse_date_time_range(args[:schedules_vacancy_period].get)
|
3545
|
-
|
3608
|
+
|
3609
|
+
if not unavailable_period_exists(hpxml, 'Vacancy', begin_month, begin_day, begin_hour, end_month, end_day, end_hour)
|
3610
|
+
hpxml.header.unavailable_periods.add(column_name: 'Vacancy', begin_month: begin_month, begin_day: begin_day, begin_hour: begin_hour, end_month: end_month, end_day: end_day, end_hour: end_hour, natvent_availability: HPXML::ScheduleUnavailable)
|
3611
|
+
end
|
3546
3612
|
end
|
3547
3613
|
if args[:schedules_power_outage_period].is_initialized
|
3548
3614
|
begin_month, begin_day, begin_hour, end_month, end_day, end_hour = Schedule.parse_date_time_range(args[:schedules_power_outage_period].get)
|
@@ -3551,22 +3617,39 @@ class HPXMLFile
|
|
3551
3617
|
natvent_availability = args[:schedules_power_outage_window_natvent_availability].get
|
3552
3618
|
end
|
3553
3619
|
|
3554
|
-
hpxml
|
3620
|
+
if not unavailable_period_exists(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability)
|
3621
|
+
hpxml.header.unavailable_periods.add(column_name: 'Power Outage', begin_month: begin_month, begin_day: begin_day, begin_hour: begin_hour, end_month: end_month, end_day: end_day, end_hour: end_hour, natvent_availability: natvent_availability)
|
3622
|
+
end
|
3555
3623
|
end
|
3556
3624
|
|
3557
3625
|
if args[:software_info_program_used].is_initialized
|
3626
|
+
if !hpxml.header.software_program_used.nil? && (hpxml.header.software_program_used != args[:software_info_program_used].get)
|
3627
|
+
errors << "'Software Info: Program Used' cannot vary across dwelling units."
|
3628
|
+
end
|
3558
3629
|
hpxml.header.software_program_used = args[:software_info_program_used].get
|
3559
3630
|
end
|
3560
3631
|
if args[:software_info_program_version].is_initialized
|
3632
|
+
if !hpxml.header.software_program_version.nil? && (hpxml.header.software_program_version != args[:software_info_program_version].get)
|
3633
|
+
errors << "'Software Info: Program Version' cannot vary across dwelling units."
|
3634
|
+
end
|
3561
3635
|
hpxml.header.software_program_version = args[:software_info_program_version].get
|
3562
3636
|
end
|
3563
3637
|
|
3564
3638
|
if args[:simulation_control_timestep].is_initialized
|
3639
|
+
if !hpxml.header.timestep.nil? && (hpxml.header.timestep != args[:simulation_control_timestep].get)
|
3640
|
+
errors << "'Simulation Control: Timestep' cannot vary across dwelling units."
|
3641
|
+
end
|
3565
3642
|
hpxml.header.timestep = args[:simulation_control_timestep].get
|
3566
3643
|
end
|
3567
3644
|
|
3568
3645
|
if args[:simulation_control_run_period].is_initialized
|
3569
3646
|
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Schedule.parse_date_time_range(args[:simulation_control_run_period].get)
|
3647
|
+
if (!hpxml.header.sim_begin_month.nil? && (hpxml.header.sim_begin_month != begin_month)) ||
|
3648
|
+
(!hpxml.header.sim_begin_day.nil? && (hpxml.header.sim_begin_day != begin_day)) ||
|
3649
|
+
(!hpxml.header.sim_end_month.nil? && (hpxml.header.sim_end_month != end_month)) ||
|
3650
|
+
(!hpxml.header.sim_end_day.nil? && (hpxml.header.sim_end_day != end_day))
|
3651
|
+
errors << "'Simulation Control: Run Period' cannot vary across dwelling units."
|
3652
|
+
end
|
3570
3653
|
hpxml.header.sim_begin_month = begin_month
|
3571
3654
|
hpxml.header.sim_begin_day = begin_day
|
3572
3655
|
hpxml.header.sim_end_month = end_month
|
@@ -3574,44 +3657,19 @@ class HPXMLFile
|
|
3574
3657
|
end
|
3575
3658
|
|
3576
3659
|
if args[:simulation_control_run_period_calendar_year].is_initialized
|
3660
|
+
if !hpxml.header.sim_calendar_year.nil? && (hpxml.header.sim_calendar_year != Integer(args[:simulation_control_run_period_calendar_year].get))
|
3661
|
+
errors << "'Simulation Control: Run Period Calendar Year' cannot vary across dwelling units."
|
3662
|
+
end
|
3577
3663
|
hpxml.header.sim_calendar_year = args[:simulation_control_run_period_calendar_year].get
|
3578
3664
|
end
|
3579
3665
|
|
3580
|
-
if args[:simulation_control_daylight_saving_enabled].is_initialized
|
3581
|
-
hpxml.header.dst_enabled = args[:simulation_control_daylight_saving_enabled].get
|
3582
|
-
end
|
3583
|
-
if args[:simulation_control_daylight_saving_period].is_initialized
|
3584
|
-
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Schedule.parse_date_time_range(args[:simulation_control_daylight_saving_period].get)
|
3585
|
-
hpxml.header.dst_begin_month = begin_month
|
3586
|
-
hpxml.header.dst_begin_day = begin_day
|
3587
|
-
hpxml.header.dst_end_month = end_month
|
3588
|
-
hpxml.header.dst_end_day = end_day
|
3589
|
-
end
|
3590
|
-
|
3591
3666
|
if args[:simulation_control_temperature_capacitance_multiplier].is_initialized
|
3667
|
+
if !hpxml.header.temperature_capacitance_multiplier.nil? && (hpxml.header.temperature_capacitance_multiplier != Float(args[:simulation_control_temperature_capacitance_multiplier].get))
|
3668
|
+
errors << "'Simulation Control: Temperature Capacitance Multiplier' cannot vary across dwelling units."
|
3669
|
+
end
|
3592
3670
|
hpxml.header.temperature_capacitance_multiplier = args[:simulation_control_temperature_capacitance_multiplier].get
|
3593
3671
|
end
|
3594
3672
|
|
3595
|
-
if args[:window_shading_summer_season].is_initialized
|
3596
|
-
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Schedule.parse_date_time_range(args[:window_shading_summer_season].get)
|
3597
|
-
hpxml.header.shading_summer_begin_month = begin_month
|
3598
|
-
hpxml.header.shading_summer_begin_day = begin_day
|
3599
|
-
hpxml.header.shading_summer_end_month = end_month
|
3600
|
-
hpxml.header.shading_summer_end_day = end_day
|
3601
|
-
end
|
3602
|
-
|
3603
|
-
if args[:site_zip_code].is_initialized
|
3604
|
-
hpxml.header.zip_code = args[:site_zip_code].get
|
3605
|
-
end
|
3606
|
-
|
3607
|
-
if args[:site_state_code].is_initialized
|
3608
|
-
hpxml.header.state_code = args[:site_state_code].get
|
3609
|
-
end
|
3610
|
-
|
3611
|
-
if args[:site_time_zone_utc_offset].is_initialized
|
3612
|
-
hpxml.header.time_zone_utc_offset = args[:site_time_zone_utc_offset].get
|
3613
|
-
end
|
3614
|
-
|
3615
3673
|
if args[:emissions_scenario_names].is_initialized
|
3616
3674
|
emissions_scenario_names = args[:emissions_scenario_names].get.split(',').map(&:strip)
|
3617
3675
|
emissions_types = args[:emissions_types].get.split(',').map(&:strip)
|
@@ -3659,6 +3717,7 @@ class HPXMLFile
|
|
3659
3717
|
fuel_values[HPXML::FuelTypeWoodPellets])
|
3660
3718
|
emissions_scenarios.each do |emissions_scenario|
|
3661
3719
|
name, emissions_type, elec_units, elec_value_or_schedule_filepath, elec_num_headers, elec_column_num, fuel_units, natural_gas_value, propane_value, fuel_oil_value, coal_value, wood_value, wood_pellets_value = emissions_scenario
|
3720
|
+
|
3662
3721
|
elec_value = Float(elec_value_or_schedule_filepath) rescue nil
|
3663
3722
|
if elec_value.nil?
|
3664
3723
|
elec_schedule_filepath = elec_value_or_schedule_filepath
|
@@ -3672,6 +3731,38 @@ class HPXMLFile
|
|
3672
3731
|
wood_value = Float(wood_value) rescue nil
|
3673
3732
|
wood_pellets_value = Float(wood_pellets_value) rescue nil
|
3674
3733
|
|
3734
|
+
emissions_scenario_exists = false
|
3735
|
+
hpxml.header.emissions_scenarios.each do |es|
|
3736
|
+
if (es.name != name) || (es.emissions_type != emissions_type)
|
3737
|
+
next
|
3738
|
+
end
|
3739
|
+
|
3740
|
+
if (es.emissions_type != emissions_type) ||
|
3741
|
+
(!elec_units.nil? && es.elec_units != elec_units) ||
|
3742
|
+
(!elec_value.nil? && es.elec_value != elec_value) ||
|
3743
|
+
(!elec_schedule_filepath.nil? && es.elec_schedule_filepath != elec_schedule_filepath) ||
|
3744
|
+
(!elec_num_headers.nil? && es.elec_schedule_number_of_header_rows != elec_num_headers) ||
|
3745
|
+
(!elec_column_num.nil? && es.elec_schedule_column_number != elec_column_num) ||
|
3746
|
+
(!es.natural_gas_units.nil? && !fuel_units.nil? && es.natural_gas_units != fuel_units) ||
|
3747
|
+
(!natural_gas_value.nil? && es.natural_gas_value != natural_gas_value) ||
|
3748
|
+
(!es.propane_units.nil? && !fuel_units.nil? && es.propane_units != fuel_units) ||
|
3749
|
+
(!propane_value.nil? && es.propane_value != propane_value) ||
|
3750
|
+
(!es.fuel_oil_units.nil? && !fuel_units.nil? && es.fuel_oil_units != fuel_units) ||
|
3751
|
+
(!fuel_oil_value.nil? && es.fuel_oil_value != fuel_oil_value) ||
|
3752
|
+
(!es.coal_units.nil? && !fuel_units.nil? && es.coal_units != fuel_units) ||
|
3753
|
+
(!coal_value.nil? && es.coal_value != coal_value) ||
|
3754
|
+
(!es.wood_units.nil? && !fuel_units.nil? && es.wood_units != fuel_units) ||
|
3755
|
+
(!wood_value.nil? && es.wood_value != wood_value) ||
|
3756
|
+
(!es.wood_pellets_units.nil? && !fuel_units.nil? && es.wood_pellets_units != fuel_units) ||
|
3757
|
+
(!wood_pellets_value.nil? && es.wood_pellets_value != wood_pellets_value)
|
3758
|
+
errors << "HPXML header already includes an emissions scenario named '#{name}' with type '#{emissions_type}'."
|
3759
|
+
else
|
3760
|
+
emissions_scenario_exists = true
|
3761
|
+
end
|
3762
|
+
end
|
3763
|
+
|
3764
|
+
next if emissions_scenario_exists
|
3765
|
+
|
3675
3766
|
hpxml.header.emissions_scenarios.add(name: name,
|
3676
3767
|
emissions_type: emissions_type,
|
3677
3768
|
elec_units: elec_units,
|
@@ -3785,6 +3876,7 @@ class HPXMLFile
|
|
3785
3876
|
|
3786
3877
|
bills_scenarios.each do |bills_scenario|
|
3787
3878
|
name, elec_tariff_filepath, elec_fixed_charge, natural_gas_fixed_charge, propane_fixed_charge, fuel_oil_fixed_charge, coal_fixed_charge, wood_fixed_charge, wood_pellets_fixed_charge, elec_marginal_rate, natural_gas_marginal_rate, propane_marginal_rate, fuel_oil_marginal_rate, coal_marginal_rate, wood_marginal_rate, wood_pellets_marginal_rate, pv_compensation_type, pv_net_metering_annual_excess_sellback_rate_type, pv_net_metering_annual_excess_sellback_rate, pv_feed_in_tariff_rate, pv_monthly_grid_connection_fee_unit, pv_monthly_grid_connection_fee = bills_scenario
|
3879
|
+
|
3788
3880
|
elec_tariff_filepath = (elec_tariff_filepath.to_s.include?('.') ? elec_tariff_filepath : nil)
|
3789
3881
|
elec_fixed_charge = Float(elec_fixed_charge) rescue nil
|
3790
3882
|
natural_gas_fixed_charge = Float(natural_gas_fixed_charge) rescue nil
|
@@ -3820,6 +3912,39 @@ class HPXMLFile
|
|
3820
3912
|
pv_monthly_grid_connection_fee_dollars = Float(pv_monthly_grid_connection_fee) rescue nil
|
3821
3913
|
end
|
3822
3914
|
|
3915
|
+
utility_bill_scenario_exists = false
|
3916
|
+
hpxml.header.utility_bill_scenarios.each do |ubs|
|
3917
|
+
next if ubs.name != name
|
3918
|
+
|
3919
|
+
if (!elec_tariff_filepath.nil? && ubs.elec_tariff_filepath != elec_tariff_filepath) ||
|
3920
|
+
(!elec_fixed_charge.nil? && ubs.elec_fixed_charge != elec_fixed_charge) ||
|
3921
|
+
(!natural_gas_fixed_charge.nil? && ubs.natural_gas_fixed_charge != natural_gas_fixed_charge) ||
|
3922
|
+
(!propane_fixed_charge.nil? && ubs.propane_fixed_charge != propane_fixed_charge) ||
|
3923
|
+
(!fuel_oil_fixed_charge.nil? && ubs.fuel_oil_fixed_charge != fuel_oil_fixed_charge) ||
|
3924
|
+
(!coal_fixed_charge.nil? && ubs.coal_fixed_charge != coal_fixed_charge) ||
|
3925
|
+
(!wood_fixed_charge.nil? && ubs.wood_fixed_charge != wood_fixed_charge) ||
|
3926
|
+
(!wood_pellets_fixed_charge.nil? && ubs.wood_pellets_fixed_charge != wood_pellets_fixed_charge) ||
|
3927
|
+
(!elec_marginal_rate.nil? && ubs.elec_marginal_rate != elec_marginal_rate) ||
|
3928
|
+
(!natural_gas_marginal_rate.nil? && ubs.natural_gas_marginal_rate != natural_gas_marginal_rate) ||
|
3929
|
+
(!propane_marginal_rate.nil? && ubs.propane_marginal_rate != propane_marginal_rate) ||
|
3930
|
+
(!fuel_oil_marginal_rate.nil? && ubs.fuel_oil_marginal_rate != fuel_oil_marginal_rate) ||
|
3931
|
+
(!coal_marginal_rate.nil? && ubs.coal_marginal_rate != coal_marginal_rate) ||
|
3932
|
+
(!wood_marginal_rate.nil? && ubs.wood_marginal_rate != wood_marginal_rate) ||
|
3933
|
+
(!wood_pellets_marginal_rate.nil? && ubs.wood_pellets_marginal_rate != wood_pellets_marginal_rate) ||
|
3934
|
+
(!pv_compensation_type.nil? && ubs.pv_compensation_type != pv_compensation_type) ||
|
3935
|
+
(!pv_net_metering_annual_excess_sellback_rate_type.nil? && ubs.pv_net_metering_annual_excess_sellback_rate_type != pv_net_metering_annual_excess_sellback_rate_type) ||
|
3936
|
+
(!pv_net_metering_annual_excess_sellback_rate.nil? && ubs.pv_net_metering_annual_excess_sellback_rate != pv_net_metering_annual_excess_sellback_rate) ||
|
3937
|
+
(!pv_feed_in_tariff_rate.nil? && ubs.pv_feed_in_tariff_rate != pv_feed_in_tariff_rate) ||
|
3938
|
+
(!pv_monthly_grid_connection_fee_dollars_per_kw.nil? && ubs.pv_monthly_grid_connection_fee_dollars_per_kw != pv_monthly_grid_connection_fee_dollars_per_kw) ||
|
3939
|
+
(!pv_monthly_grid_connection_fee_dollars.nil? && ubs.pv_monthly_grid_connection_fee_dollars != pv_monthly_grid_connection_fee_dollars)
|
3940
|
+
errors << "HPXML header already includes a utility bill scenario named '#{name}'."
|
3941
|
+
else
|
3942
|
+
utility_bill_scenario_exists = true
|
3943
|
+
end
|
3944
|
+
end
|
3945
|
+
|
3946
|
+
next if utility_bill_scenario_exists
|
3947
|
+
|
3823
3948
|
hpxml.header.utility_bill_scenarios.add(name: name,
|
3824
3949
|
elec_tariff_filepath: elec_tariff_filepath,
|
3825
3950
|
elec_fixed_charge: elec_fixed_charge,
|
@@ -3845,28 +3970,62 @@ class HPXMLFile
|
|
3845
3970
|
end
|
3846
3971
|
end
|
3847
3972
|
|
3848
|
-
|
3849
|
-
|
3850
|
-
|
3851
|
-
|
3852
|
-
|
3853
|
-
|
3854
|
-
|
3855
|
-
|
3973
|
+
errors.each do |error|
|
3974
|
+
runner.registerError(error)
|
3975
|
+
end
|
3976
|
+
return errors.empty?
|
3977
|
+
end
|
3978
|
+
|
3979
|
+
def self.add_building(hpxml, args)
|
3980
|
+
if args[:site_zip_code].is_initialized
|
3981
|
+
zip_code = args[:site_zip_code].get
|
3856
3982
|
end
|
3983
|
+
|
3984
|
+
if args[:site_state_code].is_initialized
|
3985
|
+
state_code = args[:site_state_code].get
|
3986
|
+
end
|
3987
|
+
|
3988
|
+
if args[:site_time_zone_utc_offset].is_initialized
|
3989
|
+
time_zone_utc_offset = args[:site_time_zone_utc_offset].get
|
3990
|
+
end
|
3991
|
+
|
3992
|
+
if args[:simulation_control_daylight_saving_enabled].is_initialized
|
3993
|
+
dst_enabled = args[:simulation_control_daylight_saving_enabled].get
|
3994
|
+
end
|
3995
|
+
if args[:simulation_control_daylight_saving_period].is_initialized
|
3996
|
+
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Schedule.parse_date_time_range(args[:simulation_control_daylight_saving_period].get)
|
3997
|
+
dst_begin_month = begin_month
|
3998
|
+
dst_begin_day = begin_day
|
3999
|
+
dst_end_month = end_month
|
4000
|
+
dst_end_day = end_day
|
4001
|
+
end
|
4002
|
+
|
4003
|
+
hpxml.buildings.add(building_id: 'MyBuilding',
|
4004
|
+
site_id: 'SiteID',
|
4005
|
+
event_type: 'proposed workscope',
|
4006
|
+
zip_code: zip_code,
|
4007
|
+
state_code: state_code,
|
4008
|
+
time_zone_utc_offset: time_zone_utc_offset,
|
4009
|
+
dst_enabled: dst_enabled,
|
4010
|
+
dst_begin_month: dst_begin_month,
|
4011
|
+
dst_begin_day: dst_begin_day,
|
4012
|
+
dst_end_month: dst_end_month,
|
4013
|
+
dst_end_day: dst_end_day)
|
4014
|
+
|
4015
|
+
return hpxml.buildings[-1]
|
3857
4016
|
end
|
3858
4017
|
|
3859
|
-
def self.set_site(
|
4018
|
+
def self.set_site(hpxml_bldg, args)
|
3860
4019
|
if args[:site_shielding_of_home].is_initialized
|
3861
|
-
|
4020
|
+
hpxml_bldg.site.shielding_of_home = args[:site_shielding_of_home].get
|
3862
4021
|
end
|
3863
4022
|
|
3864
4023
|
if args[:site_ground_conductivity].is_initialized
|
3865
|
-
|
4024
|
+
hpxml_bldg.site.ground_conductivity = args[:site_ground_conductivity].get
|
3866
4025
|
end
|
3867
4026
|
|
3868
4027
|
if args[:site_type].is_initialized
|
3869
|
-
|
4028
|
+
hpxml_bldg.site.site_type = args[:site_type].get
|
3870
4029
|
end
|
3871
4030
|
|
3872
4031
|
adb_walls = [args[:geometry_unit_left_wall_is_adiabatic], args[:geometry_unit_right_wall_is_adiabatic], args[:geometry_unit_front_wall_is_adiabatic], args[:geometry_unit_back_wall_is_adiabatic]]
|
@@ -3874,36 +4033,36 @@ class HPXMLFile
|
|
3874
4033
|
|
3875
4034
|
if [HPXML::ResidentialTypeSFA, HPXML::ResidentialTypeApartment].include? args[:geometry_unit_type]
|
3876
4035
|
if n_walls_attached == 3
|
3877
|
-
|
4036
|
+
hpxml_bldg.site.surroundings = HPXML::SurroundingsThreeSides
|
3878
4037
|
elsif n_walls_attached == 2
|
3879
|
-
|
4038
|
+
hpxml_bldg.site.surroundings = HPXML::SurroundingsTwoSides
|
3880
4039
|
elsif n_walls_attached == 1
|
3881
|
-
|
4040
|
+
hpxml_bldg.site.surroundings = HPXML::SurroundingsOneSide
|
3882
4041
|
else
|
3883
|
-
|
4042
|
+
hpxml_bldg.site.surroundings = HPXML::SurroundingsStandAlone
|
3884
4043
|
end
|
3885
4044
|
if args[:geometry_attic_type] == HPXML::AtticTypeBelowApartment
|
3886
4045
|
if args[:geometry_foundation_type] == HPXML::FoundationTypeAboveApartment
|
3887
|
-
|
4046
|
+
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsAboveAndBelow
|
3888
4047
|
else
|
3889
|
-
|
4048
|
+
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsAbove
|
3890
4049
|
end
|
3891
4050
|
else
|
3892
4051
|
if args[:geometry_foundation_type] == HPXML::FoundationTypeAboveApartment
|
3893
|
-
|
4052
|
+
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsBelow
|
3894
4053
|
else
|
3895
|
-
|
4054
|
+
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsNoAboveOrBelow
|
3896
4055
|
end
|
3897
4056
|
end
|
3898
|
-
elsif [HPXML::ResidentialTypeSFD].include? args[:geometry_unit_type]
|
3899
|
-
|
3900
|
-
|
4057
|
+
elsif [HPXML::ResidentialTypeSFD, HPXML::ResidentialTypeManufactured].include? args[:geometry_unit_type]
|
4058
|
+
hpxml_bldg.site.surroundings = HPXML::SurroundingsStandAlone
|
4059
|
+
hpxml_bldg.site.vertical_surroundings = HPXML::VerticalSurroundingsNoAboveOrBelow
|
3901
4060
|
end
|
3902
4061
|
|
3903
|
-
|
4062
|
+
hpxml_bldg.site.azimuth_of_front_of_home = args[:geometry_unit_orientation]
|
3904
4063
|
end
|
3905
4064
|
|
3906
|
-
def self.set_neighbor_buildings(
|
4065
|
+
def self.set_neighbor_buildings(hpxml_bldg, args)
|
3907
4066
|
nbr_map = { Constants.FacadeFront => [args[:neighbor_front_distance], args[:neighbor_front_height]],
|
3908
4067
|
Constants.FacadeBack => [args[:neighbor_back_distance], args[:neighbor_back_height]],
|
3909
4068
|
Constants.FacadeLeft => [args[:neighbor_left_distance], args[:neighbor_left_height]],
|
@@ -3919,19 +4078,19 @@ class HPXMLFile
|
|
3919
4078
|
height = neighbor_height.get
|
3920
4079
|
end
|
3921
4080
|
|
3922
|
-
|
3923
|
-
|
3924
|
-
|
4081
|
+
hpxml_bldg.neighbor_buildings.add(azimuth: azimuth,
|
4082
|
+
distance: distance,
|
4083
|
+
height: height)
|
3925
4084
|
end
|
3926
4085
|
end
|
3927
4086
|
|
3928
|
-
def self.set_building_occupancy(
|
4087
|
+
def self.set_building_occupancy(hpxml_bldg, args)
|
3929
4088
|
if args[:geometry_unit_num_occupants].is_initialized
|
3930
|
-
|
4089
|
+
hpxml_bldg.building_occupancy.number_of_residents = args[:geometry_unit_num_occupants].get
|
3931
4090
|
end
|
3932
4091
|
end
|
3933
4092
|
|
3934
|
-
def self.set_building_construction(
|
4093
|
+
def self.set_building_construction(hpxml_bldg, args)
|
3935
4094
|
if args[:geometry_unit_type] == HPXML::ResidentialTypeApartment
|
3936
4095
|
args[:geometry_unit_num_floors_above_grade] = 1
|
3937
4096
|
end
|
@@ -3947,34 +4106,70 @@ class HPXMLFile
|
|
3947
4106
|
|
3948
4107
|
conditioned_building_volume = args[:geometry_unit_cfa] * args[:geometry_average_ceiling_height]
|
3949
4108
|
|
3950
|
-
|
3951
|
-
|
3952
|
-
|
3953
|
-
|
3954
|
-
|
3955
|
-
|
3956
|
-
|
3957
|
-
|
4109
|
+
hpxml_bldg.building_construction.number_of_conditioned_floors = number_of_conditioned_floors
|
4110
|
+
hpxml_bldg.building_construction.number_of_conditioned_floors_above_grade = number_of_conditioned_floors_above_grade
|
4111
|
+
hpxml_bldg.building_construction.number_of_bedrooms = args[:geometry_unit_num_bedrooms]
|
4112
|
+
hpxml_bldg.building_construction.number_of_bathrooms = number_of_bathrooms
|
4113
|
+
hpxml_bldg.building_construction.conditioned_floor_area = args[:geometry_unit_cfa]
|
4114
|
+
hpxml_bldg.building_construction.conditioned_building_volume = conditioned_building_volume
|
4115
|
+
hpxml_bldg.building_construction.average_ceiling_height = args[:geometry_average_ceiling_height]
|
4116
|
+
hpxml_bldg.building_construction.residential_facility_type = args[:geometry_unit_type]
|
3958
4117
|
|
3959
4118
|
if args[:year_built].is_initialized
|
3960
|
-
|
4119
|
+
hpxml_bldg.building_construction.year_built = args[:year_built].get
|
4120
|
+
end
|
4121
|
+
|
4122
|
+
if args[:unit_multiplier].is_initialized
|
4123
|
+
hpxml_bldg.building_construction.number_of_units = args[:unit_multiplier].get
|
3961
4124
|
end
|
3962
4125
|
end
|
3963
4126
|
|
3964
|
-
def self.
|
3965
|
-
|
4127
|
+
def self.set_building_header(hpxml_bldg, args)
|
4128
|
+
if args[:schedules_filepaths].is_initialized
|
4129
|
+
hpxml_bldg.header.schedules_filepaths = args[:schedules_filepaths].get.split(',').map(&:strip)
|
4130
|
+
end
|
4131
|
+
|
4132
|
+
if args[:heat_pump_sizing_methodology].is_initialized
|
4133
|
+
hpxml_bldg.header.heat_pump_sizing_methodology = args[:heat_pump_sizing_methodology].get
|
4134
|
+
end
|
4135
|
+
|
4136
|
+
if args[:window_natvent_availability].is_initialized
|
4137
|
+
hpxml_bldg.header.natvent_days_per_week = args[:window_natvent_availability].get
|
4138
|
+
end
|
4139
|
+
|
4140
|
+
if args[:window_shading_summer_season].is_initialized
|
4141
|
+
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Schedule.parse_date_time_range(args[:window_shading_summer_season].get)
|
4142
|
+
hpxml_bldg.header.shading_summer_begin_month = begin_month
|
4143
|
+
hpxml_bldg.header.shading_summer_begin_day = begin_day
|
4144
|
+
hpxml_bldg.header.shading_summer_end_month = end_month
|
4145
|
+
hpxml_bldg.header.shading_summer_end_day = end_day
|
4146
|
+
end
|
4147
|
+
|
4148
|
+
if args[:additional_properties].is_initialized
|
4149
|
+
extension_properties = {}
|
4150
|
+
additional_properties = args[:additional_properties].get.split('|').map(&:strip)
|
4151
|
+
additional_properties.each do |additional_property|
|
4152
|
+
key, value = additional_property.split('=').map(&:strip)
|
4153
|
+
extension_properties[key] = value
|
4154
|
+
end
|
4155
|
+
hpxml_bldg.header.extension_properties = extension_properties
|
4156
|
+
end
|
4157
|
+
end
|
4158
|
+
|
4159
|
+
def self.set_climate_and_risk_zones(hpxml_bldg, args)
|
4160
|
+
hpxml_bldg.climate_and_risk_zones.weather_station_id = 'WeatherStation'
|
3966
4161
|
|
3967
4162
|
if args[:site_iecc_zone].is_initialized
|
3968
|
-
|
3969
|
-
|
4163
|
+
hpxml_bldg.climate_and_risk_zones.climate_zone_ieccs.add(zone: args[:site_iecc_zone].get,
|
4164
|
+
year: 2006)
|
3970
4165
|
end
|
3971
4166
|
|
3972
4167
|
weather_station_name = File.basename(args[:weather_station_epw_filepath]).gsub('.epw', '')
|
3973
|
-
|
3974
|
-
|
4168
|
+
hpxml_bldg.climate_and_risk_zones.weather_station_name = weather_station_name
|
4169
|
+
hpxml_bldg.climate_and_risk_zones.weather_station_epw_filepath = args[:weather_station_epw_filepath]
|
3975
4170
|
end
|
3976
4171
|
|
3977
|
-
def self.set_air_infiltration_measurements(
|
4172
|
+
def self.set_air_infiltration_measurements(hpxml_bldg, args)
|
3978
4173
|
if args[:air_leakage_units] == HPXML::UnitsELA
|
3979
4174
|
effective_leakage_area = args[:air_leakage_value]
|
3980
4175
|
else
|
@@ -3989,22 +4184,22 @@ class HPXMLFile
|
|
3989
4184
|
air_leakage_type = args[:air_leakage_type]
|
3990
4185
|
end
|
3991
4186
|
end
|
3992
|
-
infiltration_volume =
|
4187
|
+
infiltration_volume = hpxml_bldg.building_construction.conditioned_building_volume
|
3993
4188
|
|
3994
|
-
|
3995
|
-
|
3996
|
-
|
3997
|
-
|
3998
|
-
|
3999
|
-
|
4000
|
-
|
4189
|
+
hpxml_bldg.air_infiltration_measurements.add(id: "AirInfiltrationMeasurement#{hpxml_bldg.air_infiltration_measurements.size + 1}",
|
4190
|
+
house_pressure: house_pressure,
|
4191
|
+
unit_of_measure: unit_of_measure,
|
4192
|
+
air_leakage: air_leakage,
|
4193
|
+
effective_leakage_area: effective_leakage_area,
|
4194
|
+
infiltration_volume: infiltration_volume,
|
4195
|
+
infiltration_type: air_leakage_type)
|
4001
4196
|
|
4002
4197
|
if args[:air_leakage_has_flue_or_chimney_in_conditioned_space].is_initialized
|
4003
|
-
|
4198
|
+
hpxml_bldg.air_infiltration.has_flue_or_chimney_in_conditioned_space = args[:air_leakage_has_flue_or_chimney_in_conditioned_space].get
|
4004
4199
|
end
|
4005
4200
|
end
|
4006
4201
|
|
4007
|
-
def self.set_roofs(
|
4202
|
+
def self.set_roofs(hpxml_bldg, args, sorted_surfaces)
|
4008
4203
|
args[:geometry_roof_pitch] *= 12.0
|
4009
4204
|
if (args[:geometry_attic_type] == HPXML::AtticTypeFlatRoof) || (args[:geometry_attic_type] == HPXML::AtticTypeBelowApartment)
|
4010
4205
|
args[:geometry_roof_pitch] = 0.0
|
@@ -4036,21 +4231,21 @@ class HPXMLFile
|
|
4036
4231
|
azimuth = Geometry.get_surface_azimuth(surface: surface, orientation: args[:geometry_unit_orientation])
|
4037
4232
|
end
|
4038
4233
|
|
4039
|
-
|
4040
|
-
|
4041
|
-
|
4042
|
-
|
4043
|
-
|
4044
|
-
|
4045
|
-
|
4046
|
-
|
4047
|
-
|
4048
|
-
|
4049
|
-
@surface_ids[surface.name.to_s] =
|
4234
|
+
hpxml_bldg.roofs.add(id: "Roof#{hpxml_bldg.roofs.size + 1}",
|
4235
|
+
interior_adjacent_to: Geometry.get_adjacent_to(surface: surface),
|
4236
|
+
azimuth: azimuth,
|
4237
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'),
|
4238
|
+
roof_type: roof_type,
|
4239
|
+
roof_color: roof_color,
|
4240
|
+
pitch: args[:geometry_roof_pitch],
|
4241
|
+
radiant_barrier: radiant_barrier,
|
4242
|
+
radiant_barrier_grade: radiant_barrier_grade,
|
4243
|
+
insulation_assembly_r_value: args[:roof_assembly_r])
|
4244
|
+
@surface_ids[surface.name.to_s] = hpxml_bldg.roofs[-1].id
|
4050
4245
|
end
|
4051
4246
|
end
|
4052
4247
|
|
4053
|
-
def self.set_rim_joists(
|
4248
|
+
def self.set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
|
4054
4249
|
sorted_surfaces.each do |surface|
|
4055
4250
|
next if surface.surfaceType != 'Wall'
|
4056
4251
|
next unless ['Outdoors', 'Adiabatic'].include? surface.outsideBoundaryCondition
|
@@ -4069,7 +4264,7 @@ class HPXMLFile
|
|
4069
4264
|
if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
|
4070
4265
|
unless [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type])
|
4071
4266
|
exterior_adjacent_to = interior_adjacent_to
|
4072
|
-
if exterior_adjacent_to == HPXML::
|
4267
|
+
if exterior_adjacent_to == HPXML::LocationConditionedSpace # conditioned space adjacent to conditioned space
|
4073
4268
|
exterior_adjacent_to = HPXML::LocationOtherHousingUnit
|
4074
4269
|
end
|
4075
4270
|
end
|
@@ -4094,34 +4289,34 @@ class HPXMLFile
|
|
4094
4289
|
|
4095
4290
|
azimuth = Geometry.get_surface_azimuth(surface: surface, orientation: args[:geometry_unit_orientation])
|
4096
4291
|
|
4097
|
-
|
4098
|
-
|
4099
|
-
|
4100
|
-
|
4101
|
-
|
4102
|
-
|
4103
|
-
|
4104
|
-
|
4105
|
-
@surface_ids[surface.name.to_s] =
|
4292
|
+
hpxml_bldg.rim_joists.add(id: "RimJoist#{hpxml_bldg.rim_joists.size + 1}",
|
4293
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
4294
|
+
interior_adjacent_to: interior_adjacent_to,
|
4295
|
+
azimuth: azimuth,
|
4296
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'),
|
4297
|
+
siding: siding,
|
4298
|
+
color: color,
|
4299
|
+
insulation_assembly_r_value: insulation_assembly_r_value)
|
4300
|
+
@surface_ids[surface.name.to_s] = hpxml_bldg.rim_joists[-1].id
|
4106
4301
|
end
|
4107
4302
|
end
|
4108
4303
|
|
4109
|
-
def self.set_walls(
|
4304
|
+
def self.set_walls(hpxml_bldg, model, args, sorted_surfaces)
|
4110
4305
|
sorted_surfaces.each do |surface|
|
4111
4306
|
next if surface.surfaceType != 'Wall'
|
4112
4307
|
next if Geometry.surface_is_rim_joist(surface, args[:geometry_rim_joist_height])
|
4113
4308
|
|
4114
4309
|
interior_adjacent_to = Geometry.get_adjacent_to(surface: surface)
|
4115
|
-
next unless [HPXML::
|
4310
|
+
next unless [HPXML::LocationConditionedSpace, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented, HPXML::LocationGarage].include? interior_adjacent_to
|
4116
4311
|
|
4117
4312
|
exterior_adjacent_to = HPXML::LocationOutside
|
4118
4313
|
if surface.adjacentSurface.is_initialized
|
4119
4314
|
exterior_adjacent_to = Geometry.get_adjacent_to(surface: surface.adjacentSurface.get)
|
4120
|
-
elsif surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to
|
4315
|
+
elsif surface.outsideBoundaryCondition == 'Adiabatic' # can be adjacent to conditioned space, attic
|
4121
4316
|
adjacent_surface = Geometry.get_adiabatic_adjacent_surface(model: model, surface: surface)
|
4122
4317
|
if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
|
4123
4318
|
exterior_adjacent_to = interior_adjacent_to
|
4124
|
-
if exterior_adjacent_to == HPXML::
|
4319
|
+
if exterior_adjacent_to == HPXML::LocationConditionedSpace # conditioned space adjacent to conditioned space
|
4125
4320
|
exterior_adjacent_to = HPXML::LocationOtherHousingUnit
|
4126
4321
|
end
|
4127
4322
|
else # adjacent to a space that is explicitly in the model
|
@@ -4129,7 +4324,7 @@ class HPXMLFile
|
|
4129
4324
|
end
|
4130
4325
|
end
|
4131
4326
|
|
4132
|
-
next if exterior_adjacent_to == HPXML::
|
4327
|
+
next if exterior_adjacent_to == HPXML::LocationConditionedSpace # already captured these surfaces
|
4133
4328
|
|
4134
4329
|
attic_locations = [HPXML::LocationAtticUnconditioned, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented]
|
4135
4330
|
attic_wall_type = nil
|
@@ -4156,35 +4351,35 @@ class HPXMLFile
|
|
4156
4351
|
|
4157
4352
|
azimuth = Geometry.get_surface_azimuth(surface: surface, orientation: args[:geometry_unit_orientation])
|
4158
4353
|
|
4159
|
-
|
4160
|
-
|
4161
|
-
|
4162
|
-
|
4163
|
-
|
4164
|
-
|
4165
|
-
|
4166
|
-
|
4167
|
-
|
4168
|
-
@surface_ids[surface.name.to_s] =
|
4354
|
+
hpxml_bldg.walls.add(id: "Wall#{hpxml_bldg.walls.size + 1}",
|
4355
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
4356
|
+
interior_adjacent_to: interior_adjacent_to,
|
4357
|
+
azimuth: azimuth,
|
4358
|
+
wall_type: wall_type,
|
4359
|
+
attic_wall_type: attic_wall_type,
|
4360
|
+
siding: siding,
|
4361
|
+
color: color,
|
4362
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'))
|
4363
|
+
@surface_ids[surface.name.to_s] = hpxml_bldg.walls[-1].id
|
4169
4364
|
|
4170
4365
|
is_uncond_attic_roof_insulated = false
|
4171
4366
|
if attic_locations.include? interior_adjacent_to
|
4172
|
-
|
4367
|
+
hpxml_bldg.roofs.each do |roof|
|
4173
4368
|
next unless (roof.interior_adjacent_to == interior_adjacent_to) && (roof.insulation_assembly_r_value > 4.0)
|
4174
4369
|
|
4175
4370
|
is_uncond_attic_roof_insulated = true
|
4176
4371
|
end
|
4177
4372
|
end
|
4178
4373
|
|
4179
|
-
if
|
4180
|
-
|
4374
|
+
if hpxml_bldg.walls[-1].is_thermal_boundary || is_uncond_attic_roof_insulated # Assume wall is insulated if roof is insulated
|
4375
|
+
hpxml_bldg.walls[-1].insulation_assembly_r_value = args[:wall_assembly_r]
|
4181
4376
|
else
|
4182
|
-
|
4377
|
+
hpxml_bldg.walls[-1].insulation_assembly_r_value = 4.0 # Uninsulated
|
4183
4378
|
end
|
4184
4379
|
end
|
4185
4380
|
end
|
4186
4381
|
|
4187
|
-
def self.set_foundation_walls(
|
4382
|
+
def self.set_foundation_walls(hpxml_bldg, model, args, sorted_surfaces)
|
4188
4383
|
sorted_surfaces.each do |surface|
|
4189
4384
|
next if surface.surfaceType != 'Wall'
|
4190
4385
|
next unless ['Foundation', 'Adiabatic'].include? surface.outsideBoundaryCondition
|
@@ -4203,7 +4398,7 @@ class HPXMLFile
|
|
4203
4398
|
if adjacent_surface.nil? # adjacent to a space that is not explicitly in the model
|
4204
4399
|
unless [HPXML::ResidentialTypeSFD].include?(args[:geometry_unit_type])
|
4205
4400
|
exterior_adjacent_to = interior_adjacent_to
|
4206
|
-
if exterior_adjacent_to == HPXML::
|
4401
|
+
if exterior_adjacent_to == HPXML::LocationConditionedSpace # conditioned space adjacent to conditioned space
|
4207
4402
|
exterior_adjacent_to = HPXML::LocationOtherHousingUnit
|
4208
4403
|
end
|
4209
4404
|
end
|
@@ -4257,27 +4452,27 @@ class HPXMLFile
|
|
4257
4452
|
|
4258
4453
|
azimuth = Geometry.get_surface_azimuth(surface: surface, orientation: args[:geometry_unit_orientation])
|
4259
4454
|
|
4260
|
-
|
4261
|
-
|
4262
|
-
|
4263
|
-
|
4264
|
-
|
4265
|
-
|
4266
|
-
|
4267
|
-
|
4268
|
-
|
4269
|
-
|
4270
|
-
|
4271
|
-
|
4272
|
-
|
4273
|
-
|
4274
|
-
|
4275
|
-
|
4276
|
-
@surface_ids[surface.name.to_s] =
|
4455
|
+
hpxml_bldg.foundation_walls.add(id: "FoundationWall#{hpxml_bldg.foundation_walls.size + 1}",
|
4456
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
4457
|
+
interior_adjacent_to: interior_adjacent_to,
|
4458
|
+
type: type,
|
4459
|
+
azimuth: azimuth,
|
4460
|
+
height: args[:geometry_foundation_height],
|
4461
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'),
|
4462
|
+
thickness: thickness,
|
4463
|
+
depth_below_grade: args[:geometry_foundation_height] - args[:geometry_foundation_height_above_grade],
|
4464
|
+
insulation_assembly_r_value: insulation_assembly_r_value,
|
4465
|
+
insulation_interior_r_value: insulation_interior_r_value,
|
4466
|
+
insulation_interior_distance_to_top: insulation_interior_distance_to_top,
|
4467
|
+
insulation_interior_distance_to_bottom: insulation_interior_distance_to_bottom,
|
4468
|
+
insulation_exterior_r_value: insulation_exterior_r_value,
|
4469
|
+
insulation_exterior_distance_to_top: insulation_exterior_distance_to_top,
|
4470
|
+
insulation_exterior_distance_to_bottom: insulation_exterior_distance_to_bottom)
|
4471
|
+
@surface_ids[surface.name.to_s] = hpxml_bldg.foundation_walls[-1].id
|
4277
4472
|
end
|
4278
4473
|
end
|
4279
4474
|
|
4280
|
-
def self.set_floors(
|
4475
|
+
def self.set_floors(hpxml_bldg, args, sorted_surfaces)
|
4281
4476
|
if [HPXML::FoundationTypeBasementConditioned,
|
4282
4477
|
HPXML::FoundationTypeCrawlspaceConditioned].include?(args[:geometry_foundation_type]) && (args[:floor_over_foundation_assembly_r] > 2.1)
|
4283
4478
|
args[:floor_over_foundation_assembly_r] = 2.1 # Uninsulated
|
@@ -4292,7 +4487,7 @@ class HPXMLFile
|
|
4292
4487
|
next unless ['Floor', 'RoofCeiling'].include? surface.surfaceType
|
4293
4488
|
|
4294
4489
|
interior_adjacent_to = Geometry.get_adjacent_to(surface: surface)
|
4295
|
-
next unless [HPXML::
|
4490
|
+
next unless [HPXML::LocationConditionedSpace, HPXML::LocationGarage].include? interior_adjacent_to
|
4296
4491
|
|
4297
4492
|
exterior_adjacent_to = HPXML::LocationOutside
|
4298
4493
|
if surface.adjacentSurface.is_initialized
|
@@ -4308,40 +4503,40 @@ class HPXMLFile
|
|
4308
4503
|
|
4309
4504
|
next if interior_adjacent_to == exterior_adjacent_to
|
4310
4505
|
next if (surface.surfaceType == 'RoofCeiling') && (exterior_adjacent_to == HPXML::LocationOutside)
|
4311
|
-
next if [HPXML::
|
4506
|
+
next if [HPXML::LocationConditionedSpace,
|
4312
4507
|
HPXML::LocationBasementConditioned,
|
4313
4508
|
HPXML::LocationCrawlspaceConditioned].include? exterior_adjacent_to
|
4314
4509
|
|
4315
|
-
|
4316
|
-
|
4317
|
-
|
4318
|
-
|
4319
|
-
|
4320
|
-
|
4321
|
-
if
|
4322
|
-
if
|
4323
|
-
|
4324
|
-
elsif
|
4325
|
-
|
4510
|
+
hpxml_bldg.floors.add(id: "Floor#{hpxml_bldg.floors.size + 1}",
|
4511
|
+
exterior_adjacent_to: exterior_adjacent_to,
|
4512
|
+
interior_adjacent_to: interior_adjacent_to,
|
4513
|
+
floor_type: args[:floor_type],
|
4514
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'),
|
4515
|
+
floor_or_ceiling: floor_or_ceiling)
|
4516
|
+
if hpxml_bldg.floors[-1].floor_or_ceiling.nil?
|
4517
|
+
if hpxml_bldg.floors[-1].is_floor
|
4518
|
+
hpxml_bldg.floors[-1].floor_or_ceiling = HPXML::FloorOrCeilingFloor
|
4519
|
+
elsif hpxml_bldg.floors[-1].is_ceiling
|
4520
|
+
hpxml_bldg.floors[-1].floor_or_ceiling = HPXML::FloorOrCeilingCeiling
|
4326
4521
|
end
|
4327
4522
|
end
|
4328
|
-
@surface_ids[surface.name.to_s] =
|
4523
|
+
@surface_ids[surface.name.to_s] = hpxml_bldg.floors[-1].id
|
4329
4524
|
|
4330
|
-
if
|
4525
|
+
if hpxml_bldg.floors[-1].is_thermal_boundary
|
4331
4526
|
if [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include? exterior_adjacent_to
|
4332
|
-
|
4527
|
+
hpxml_bldg.floors[-1].insulation_assembly_r_value = args[:ceiling_assembly_r]
|
4333
4528
|
elsif [HPXML::LocationGarage].include? exterior_adjacent_to
|
4334
|
-
|
4529
|
+
hpxml_bldg.floors[-1].insulation_assembly_r_value = args[:floor_over_garage_assembly_r]
|
4335
4530
|
else
|
4336
|
-
|
4531
|
+
hpxml_bldg.floors[-1].insulation_assembly_r_value = args[:floor_over_foundation_assembly_r]
|
4337
4532
|
end
|
4338
4533
|
else
|
4339
|
-
|
4534
|
+
hpxml_bldg.floors[-1].insulation_assembly_r_value = 2.1 # Uninsulated
|
4340
4535
|
end
|
4341
4536
|
end
|
4342
4537
|
end
|
4343
4538
|
|
4344
|
-
def self.set_slabs(
|
4539
|
+
def self.set_slabs(hpxml_bldg, model, args, sorted_surfaces)
|
4345
4540
|
sorted_surfaces.each do |surface|
|
4346
4541
|
next unless ['Foundation'].include? surface.outsideBoundaryCondition
|
4347
4542
|
next if surface.surfaceType != 'Floor'
|
@@ -4368,10 +4563,6 @@ class HPXMLFile
|
|
4368
4563
|
exposed_perimeter -= Geometry.get_unexposed_garage_perimeter(**args)
|
4369
4564
|
end
|
4370
4565
|
|
4371
|
-
if [HPXML::LocationLivingSpace, HPXML::LocationGarage].include? interior_adjacent_to
|
4372
|
-
depth_below_grade = 0
|
4373
|
-
end
|
4374
|
-
|
4375
4566
|
if args[:slab_under_width] == 999
|
4376
4567
|
under_slab_insulation_spans_entire_slab = true
|
4377
4568
|
else
|
@@ -4390,31 +4581,30 @@ class HPXMLFile
|
|
4390
4581
|
carpet_r_value = args[:slab_carpet_r].get
|
4391
4582
|
end
|
4392
4583
|
|
4393
|
-
|
4394
|
-
|
4395
|
-
|
4396
|
-
|
4397
|
-
|
4398
|
-
|
4399
|
-
|
4400
|
-
|
4401
|
-
|
4402
|
-
|
4403
|
-
|
4404
|
-
|
4405
|
-
|
4406
|
-
@surface_ids[surface.name.to_s] = hpxml.slabs[-1].id
|
4584
|
+
hpxml_bldg.slabs.add(id: "Slab#{hpxml_bldg.slabs.size + 1}",
|
4585
|
+
interior_adjacent_to: interior_adjacent_to,
|
4586
|
+
area: UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2'),
|
4587
|
+
thickness: thickness,
|
4588
|
+
exposed_perimeter: exposed_perimeter,
|
4589
|
+
perimeter_insulation_depth: args[:slab_perimeter_depth],
|
4590
|
+
under_slab_insulation_width: under_slab_insulation_width,
|
4591
|
+
perimeter_insulation_r_value: args[:slab_perimeter_insulation_r],
|
4592
|
+
under_slab_insulation_r_value: args[:slab_under_insulation_r],
|
4593
|
+
under_slab_insulation_spans_entire_slab: under_slab_insulation_spans_entire_slab,
|
4594
|
+
carpet_fraction: carpet_fraction,
|
4595
|
+
carpet_r_value: carpet_r_value)
|
4596
|
+
@surface_ids[surface.name.to_s] = hpxml_bldg.slabs[-1].id
|
4407
4597
|
|
4408
4598
|
next unless interior_adjacent_to == HPXML::LocationCrawlspaceConditioned
|
4409
4599
|
|
4410
4600
|
# Increase Conditioned Building Volume & Infiltration Volume
|
4411
|
-
conditioned_crawlspace_volume =
|
4412
|
-
|
4413
|
-
|
4601
|
+
conditioned_crawlspace_volume = hpxml_bldg.slabs[-1].area * args[:geometry_foundation_height]
|
4602
|
+
hpxml_bldg.building_construction.conditioned_building_volume += conditioned_crawlspace_volume
|
4603
|
+
hpxml_bldg.air_infiltration_measurements[0].infiltration_volume += conditioned_crawlspace_volume
|
4414
4604
|
end
|
4415
4605
|
end
|
4416
4606
|
|
4417
|
-
def self.set_windows(
|
4607
|
+
def self.set_windows(hpxml_bldg, model, args, sorted_subsurfaces)
|
4418
4608
|
sorted_subsurfaces.each do |sub_surface|
|
4419
4609
|
next if sub_surface.subSurfaceType != 'FixedWindow'
|
4420
4610
|
|
@@ -4450,7 +4640,7 @@ class HPXMLFile
|
|
4450
4640
|
end
|
4451
4641
|
|
4452
4642
|
# Get max z coordinate of this window
|
4453
|
-
sub_surface_z = Geometry.
|
4643
|
+
sub_surface_z = Geometry.get_surface_z_values([sub_surface]).max + UnitConversions.convert(sub_surface.space.get.zOrigin, 'm', 'ft')
|
4454
4644
|
|
4455
4645
|
overhangs_depth = args[:geometry_eaves_depth]
|
4456
4646
|
overhangs_distance_to_top_of_window = eaves_z - sub_surface_z # difference between max z coordinates of eaves and this window
|
@@ -4486,25 +4676,25 @@ class HPXMLFile
|
|
4486
4676
|
wall_idref = @surface_ids[surface.name.to_s]
|
4487
4677
|
next if wall_idref.nil?
|
4488
4678
|
|
4489
|
-
|
4490
|
-
|
4491
|
-
|
4492
|
-
|
4493
|
-
|
4494
|
-
|
4495
|
-
|
4496
|
-
|
4497
|
-
|
4498
|
-
|
4499
|
-
|
4500
|
-
|
4501
|
-
|
4502
|
-
|
4503
|
-
|
4679
|
+
hpxml_bldg.windows.add(id: "Window#{hpxml_bldg.windows.size + 1}",
|
4680
|
+
area: UnitConversions.convert(sub_surface.grossArea, 'm^2', 'ft^2'),
|
4681
|
+
azimuth: azimuth,
|
4682
|
+
ufactor: args[:window_ufactor],
|
4683
|
+
shgc: args[:window_shgc],
|
4684
|
+
storm_type: window_storm_type,
|
4685
|
+
overhangs_depth: overhangs_depth,
|
4686
|
+
overhangs_distance_to_top_of_window: overhangs_distance_to_top_of_window,
|
4687
|
+
overhangs_distance_to_bottom_of_window: overhangs_distance_to_bottom_of_window,
|
4688
|
+
interior_shading_factor_winter: interior_shading_factor_winter,
|
4689
|
+
interior_shading_factor_summer: interior_shading_factor_summer,
|
4690
|
+
exterior_shading_factor_winter: exterior_shading_factor_winter,
|
4691
|
+
exterior_shading_factor_summer: exterior_shading_factor_summer,
|
4692
|
+
fraction_operable: fraction_operable,
|
4693
|
+
wall_idref: wall_idref)
|
4504
4694
|
end
|
4505
4695
|
end
|
4506
4696
|
|
4507
|
-
def self.set_skylights(
|
4697
|
+
def self.set_skylights(hpxml_bldg, args, sorted_subsurfaces)
|
4508
4698
|
sorted_subsurfaces.each do |sub_surface|
|
4509
4699
|
next if sub_surface.subSurfaceType != 'Skylight'
|
4510
4700
|
|
@@ -4520,17 +4710,17 @@ class HPXMLFile
|
|
4520
4710
|
roof_idref = @surface_ids[surface.name.to_s]
|
4521
4711
|
next if roof_idref.nil?
|
4522
4712
|
|
4523
|
-
|
4524
|
-
|
4525
|
-
|
4526
|
-
|
4527
|
-
|
4528
|
-
|
4529
|
-
|
4713
|
+
hpxml_bldg.skylights.add(id: "Skylight#{hpxml_bldg.skylights.size + 1}",
|
4714
|
+
area: UnitConversions.convert(sub_surface.grossArea, 'm^2', 'ft^2'),
|
4715
|
+
azimuth: azimuth,
|
4716
|
+
ufactor: args[:skylight_ufactor],
|
4717
|
+
shgc: args[:skylight_shgc],
|
4718
|
+
storm_type: skylight_storm_type,
|
4719
|
+
roof_idref: roof_idref)
|
4530
4720
|
end
|
4531
4721
|
end
|
4532
4722
|
|
4533
|
-
def self.set_doors(
|
4723
|
+
def self.set_doors(hpxml_bldg, model, args, sorted_subsurfaces)
|
4534
4724
|
sorted_subsurfaces.each do |sub_surface|
|
4535
4725
|
next if sub_surface.subSurfaceType != 'Door'
|
4536
4726
|
|
@@ -4546,18 +4736,18 @@ class HPXMLFile
|
|
4546
4736
|
wall_idref = @surface_ids[surface.name.to_s]
|
4547
4737
|
next if wall_idref.nil?
|
4548
4738
|
|
4549
|
-
|
4550
|
-
|
4551
|
-
|
4552
|
-
|
4553
|
-
|
4739
|
+
hpxml_bldg.doors.add(id: "Door#{hpxml_bldg.doors.size + 1}",
|
4740
|
+
wall_idref: wall_idref,
|
4741
|
+
area: UnitConversions.convert(sub_surface.grossArea, 'm^2', 'ft^2'),
|
4742
|
+
azimuth: args[:geometry_unit_orientation],
|
4743
|
+
r_value: args[:door_rvalue])
|
4554
4744
|
end
|
4555
4745
|
end
|
4556
4746
|
|
4557
|
-
def self.set_attics(
|
4558
|
-
surf_ids = { 'roofs' => { 'surfaces' =>
|
4559
|
-
'walls' => { 'surfaces' =>
|
4560
|
-
'floors' => { 'surfaces' =>
|
4747
|
+
def self.set_attics(hpxml_bldg, args)
|
4748
|
+
surf_ids = { 'roofs' => { 'surfaces' => hpxml_bldg.roofs, 'ids' => [] },
|
4749
|
+
'walls' => { 'surfaces' => hpxml_bldg.walls, 'ids' => [] },
|
4750
|
+
'floors' => { 'surfaces' => hpxml_bldg.floors, 'ids' => [] } }
|
4561
4751
|
|
4562
4752
|
attic_locations = [HPXML::LocationAtticUnconditioned, HPXML::LocationAtticUnvented, HPXML::LocationAtticVented]
|
4563
4753
|
surf_ids.values.each do |surf_hash|
|
@@ -4570,27 +4760,27 @@ class HPXMLFile
|
|
4570
4760
|
end
|
4571
4761
|
|
4572
4762
|
# Add attached roofs for cathedral ceiling
|
4573
|
-
|
4763
|
+
conditioned_space = HPXML::LocationConditionedSpace
|
4574
4764
|
surf_ids['roofs']['surfaces'].each do |surface|
|
4575
|
-
next if (
|
4576
|
-
(
|
4765
|
+
next if (conditioned_space != surface.interior_adjacent_to) &&
|
4766
|
+
(conditioned_space != surface.exterior_adjacent_to)
|
4577
4767
|
|
4578
4768
|
surf_ids['roofs']['ids'] << surface.id
|
4579
4769
|
end
|
4580
4770
|
|
4581
|
-
|
4582
|
-
|
4583
|
-
|
4584
|
-
|
4585
|
-
|
4771
|
+
hpxml_bldg.attics.add(id: "Attic#{hpxml_bldg.attics.size + 1}",
|
4772
|
+
attic_type: args[:geometry_attic_type],
|
4773
|
+
attached_to_roof_idrefs: surf_ids['roofs']['ids'],
|
4774
|
+
attached_to_wall_idrefs: surf_ids['walls']['ids'],
|
4775
|
+
attached_to_floor_idrefs: surf_ids['floors']['ids'])
|
4586
4776
|
end
|
4587
4777
|
|
4588
|
-
def self.set_foundations(
|
4589
|
-
surf_ids = { 'slabs' => { 'surfaces' =>
|
4590
|
-
'floors' => { 'surfaces' =>
|
4591
|
-
'foundation_walls' => { 'surfaces' =>
|
4592
|
-
'walls' => { 'surfaces' =>
|
4593
|
-
'rim_joists' => { 'surfaces' =>
|
4778
|
+
def self.set_foundations(hpxml_bldg, args)
|
4779
|
+
surf_ids = { 'slabs' => { 'surfaces' => hpxml_bldg.slabs, 'ids' => [] },
|
4780
|
+
'floors' => { 'surfaces' => hpxml_bldg.floors, 'ids' => [] },
|
4781
|
+
'foundation_walls' => { 'surfaces' => hpxml_bldg.foundation_walls, 'ids' => [] },
|
4782
|
+
'walls' => { 'surfaces' => hpxml_bldg.walls, 'ids' => [] },
|
4783
|
+
'rim_joists' => { 'surfaces' => hpxml_bldg.rim_joists, 'ids' => [] }, }
|
4594
4784
|
|
4595
4785
|
foundation_locations = [HPXML::LocationBasementConditioned,
|
4596
4786
|
HPXML::LocationBasementUnconditioned,
|
@@ -4602,23 +4792,37 @@ class HPXMLFile
|
|
4602
4792
|
surf_hash['surfaces'].each do |surface|
|
4603
4793
|
next unless (foundation_locations.include? surface.interior_adjacent_to) ||
|
4604
4794
|
(foundation_locations.include? surface.exterior_adjacent_to) ||
|
4605
|
-
(surf_type == 'slabs' && surface.interior_adjacent_to == HPXML::
|
4606
|
-
(surf_type == 'floors' && surface.exterior_adjacent_to
|
4795
|
+
(surf_type == 'slabs' && surface.interior_adjacent_to == HPXML::LocationConditionedSpace) ||
|
4796
|
+
(surf_type == 'floors' && [HPXML::LocationOutside, HPXML::LocationManufacturedHomeUnderBelly].include?(surface.exterior_adjacent_to))
|
4607
4797
|
|
4608
4798
|
surf_hash['ids'] << surface.id
|
4609
4799
|
end
|
4610
4800
|
end
|
4611
4801
|
|
4612
|
-
|
4613
|
-
|
4614
|
-
|
4615
|
-
|
4616
|
-
|
4617
|
-
|
4618
|
-
|
4802
|
+
if args[:geometry_foundation_type].start_with?(HPXML::FoundationTypeBellyAndWing)
|
4803
|
+
foundation_type = HPXML::FoundationTypeBellyAndWing
|
4804
|
+
if args[:geometry_foundation_type].end_with?('WithSkirt')
|
4805
|
+
belly_wing_skirt_present = true
|
4806
|
+
elsif args[:geometry_foundation_type].end_with?('NoSkirt')
|
4807
|
+
belly_wing_skirt_present = false
|
4808
|
+
else
|
4809
|
+
fail 'Unepected belly and wing foundation type.'
|
4810
|
+
end
|
4811
|
+
else
|
4812
|
+
foundation_type = args[:geometry_foundation_type]
|
4813
|
+
end
|
4814
|
+
|
4815
|
+
hpxml_bldg.foundations.add(id: "Foundation#{hpxml_bldg.foundations.size + 1}",
|
4816
|
+
foundation_type: foundation_type,
|
4817
|
+
attached_to_slab_idrefs: surf_ids['slabs']['ids'],
|
4818
|
+
attached_to_floor_idrefs: surf_ids['floors']['ids'],
|
4819
|
+
attached_to_foundation_wall_idrefs: surf_ids['foundation_walls']['ids'],
|
4820
|
+
attached_to_wall_idrefs: surf_ids['walls']['ids'],
|
4821
|
+
attached_to_rim_joist_idrefs: surf_ids['rim_joists']['ids'],
|
4822
|
+
belly_wing_skirt_present: belly_wing_skirt_present)
|
4619
4823
|
end
|
4620
4824
|
|
4621
|
-
def self.set_heating_systems(
|
4825
|
+
def self.set_heating_systems(hpxml_bldg, args)
|
4622
4826
|
heating_system_type = args[:heating_system_type]
|
4623
4827
|
|
4624
4828
|
return if heating_system_type == 'none'
|
@@ -4639,9 +4843,8 @@ class HPXMLFile
|
|
4639
4843
|
heating_efficiency_afue = args[:heating_system_heating_efficiency]
|
4640
4844
|
elsif [HPXML::HVACTypeElectricResistance,
|
4641
4845
|
HPXML::HVACTypeStove,
|
4642
|
-
HPXML::
|
4643
|
-
HPXML::HVACTypeFireplace
|
4644
|
-
HPXML::HVACTypeFixedHeater].include?(heating_system_type)
|
4846
|
+
HPXML::HVACTypeSpaceHeater,
|
4847
|
+
HPXML::HVACTypeFireplace].include?(heating_system_type)
|
4645
4848
|
heating_efficiency_percent = args[:heating_system_heating_efficiency]
|
4646
4849
|
end
|
4647
4850
|
|
@@ -4670,22 +4873,22 @@ class HPXMLFile
|
|
4670
4873
|
heating_system_type = HPXML::HVACTypeBoiler
|
4671
4874
|
end
|
4672
4875
|
|
4673
|
-
|
4674
|
-
|
4675
|
-
|
4676
|
-
|
4677
|
-
|
4678
|
-
|
4679
|
-
|
4680
|
-
|
4681
|
-
|
4682
|
-
|
4683
|
-
|
4684
|
-
|
4685
|
-
|
4876
|
+
hpxml_bldg.heating_systems.add(id: "HeatingSystem#{hpxml_bldg.heating_systems.size + 1}",
|
4877
|
+
heating_system_type: heating_system_type,
|
4878
|
+
heating_system_fuel: heating_system_fuel,
|
4879
|
+
heating_capacity: heating_capacity,
|
4880
|
+
fraction_heat_load_served: fraction_heat_load_served,
|
4881
|
+
heating_efficiency_afue: heating_efficiency_afue,
|
4882
|
+
heating_efficiency_percent: heating_efficiency_percent,
|
4883
|
+
airflow_defect_ratio: airflow_defect_ratio,
|
4884
|
+
pilot_light: pilot_light,
|
4885
|
+
pilot_light_btuh: pilot_light_btuh,
|
4886
|
+
is_shared_system: is_shared_system,
|
4887
|
+
number_of_units_served: number_of_units_served,
|
4888
|
+
primary_system: true)
|
4686
4889
|
end
|
4687
4890
|
|
4688
|
-
def self.set_cooling_systems(
|
4891
|
+
def self.set_cooling_systems(hpxml_bldg, args)
|
4689
4892
|
cooling_system_type = args[:cooling_system_type]
|
4690
4893
|
|
4691
4894
|
return if cooling_system_type == 'none'
|
@@ -4695,7 +4898,7 @@ class HPXMLFile
|
|
4695
4898
|
end
|
4696
4899
|
|
4697
4900
|
if args[:cooling_system_cooling_compressor_type].is_initialized
|
4698
|
-
if
|
4901
|
+
if [HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system_type
|
4699
4902
|
compressor_type = args[:cooling_system_cooling_compressor_type].get
|
4700
4903
|
end
|
4701
4904
|
end
|
@@ -4754,28 +4957,28 @@ class HPXMLFile
|
|
4754
4957
|
end
|
4755
4958
|
end
|
4756
4959
|
|
4757
|
-
|
4758
|
-
|
4759
|
-
|
4760
|
-
|
4761
|
-
|
4762
|
-
|
4763
|
-
|
4764
|
-
|
4765
|
-
|
4766
|
-
|
4767
|
-
|
4768
|
-
|
4769
|
-
|
4770
|
-
|
4771
|
-
|
4772
|
-
|
4773
|
-
|
4774
|
-
|
4775
|
-
|
4960
|
+
hpxml_bldg.cooling_systems.add(id: "CoolingSystem#{hpxml_bldg.cooling_systems.size + 1}",
|
4961
|
+
cooling_system_type: cooling_system_type,
|
4962
|
+
cooling_system_fuel: HPXML::FuelTypeElectricity,
|
4963
|
+
cooling_capacity: cooling_capacity,
|
4964
|
+
fraction_cool_load_served: args[:cooling_system_fraction_cool_load_served],
|
4965
|
+
compressor_type: compressor_type,
|
4966
|
+
cooling_shr: cooling_shr,
|
4967
|
+
cooling_efficiency_seer: cooling_efficiency_seer,
|
4968
|
+
cooling_efficiency_seer2: cooling_efficiency_seer2,
|
4969
|
+
cooling_efficiency_eer: cooling_efficiency_eer,
|
4970
|
+
cooling_efficiency_ceer: cooling_efficiency_ceer,
|
4971
|
+
airflow_defect_ratio: airflow_defect_ratio,
|
4972
|
+
charge_defect_ratio: charge_defect_ratio,
|
4973
|
+
crankcase_heater_watts: cooling_system_crankcase_heater_watts,
|
4974
|
+
primary_system: true,
|
4975
|
+
integrated_heating_system_fuel: integrated_heating_system_fuel,
|
4976
|
+
integrated_heating_system_capacity: integrated_heating_system_capacity,
|
4977
|
+
integrated_heating_system_efficiency_percent: integrated_heating_system_efficiency_percent,
|
4978
|
+
integrated_heating_system_fraction_heat_load_served: integrated_heating_system_fraction_heat_load_served)
|
4776
4979
|
end
|
4777
4980
|
|
4778
|
-
def self.set_heat_pumps(
|
4981
|
+
def self.set_heat_pumps(hpxml_bldg, args)
|
4779
4982
|
heat_pump_type = args[:heat_pump_type]
|
4780
4983
|
|
4781
4984
|
return if heat_pump_type == 'none'
|
@@ -4811,7 +5014,7 @@ class HPXMLFile
|
|
4811
5014
|
end
|
4812
5015
|
|
4813
5016
|
backup_type = args[:heat_pump_backup_type]
|
4814
|
-
backup_system_idref = "HeatingSystem#{
|
5017
|
+
backup_system_idref = "HeatingSystem#{hpxml_bldg.heating_systems.size + 1}"
|
4815
5018
|
end
|
4816
5019
|
|
4817
5020
|
if args[:heat_pump_compressor_lockout_temp].is_initialized
|
@@ -4834,7 +5037,7 @@ class HPXMLFile
|
|
4834
5037
|
end
|
4835
5038
|
|
4836
5039
|
if args[:heat_pump_cooling_compressor_type].is_initialized
|
4837
|
-
if [HPXML::HVACTypeHeatPumpAirToAir].include? heat_pump_type
|
5040
|
+
if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump_type
|
4838
5041
|
compressor_type = args[:heat_pump_cooling_compressor_type].get
|
4839
5042
|
end
|
4840
5043
|
end
|
@@ -4886,44 +5089,40 @@ class HPXMLFile
|
|
4886
5089
|
primary_cooling_system = true
|
4887
5090
|
end
|
4888
5091
|
|
4889
|
-
|
4890
|
-
|
4891
|
-
|
4892
|
-
|
4893
|
-
|
4894
|
-
|
4895
|
-
|
4896
|
-
|
4897
|
-
|
4898
|
-
|
4899
|
-
|
4900
|
-
|
4901
|
-
|
4902
|
-
|
4903
|
-
|
4904
|
-
|
4905
|
-
|
4906
|
-
|
4907
|
-
|
4908
|
-
|
4909
|
-
|
4910
|
-
|
4911
|
-
|
4912
|
-
|
4913
|
-
|
4914
|
-
|
4915
|
-
|
4916
|
-
|
4917
|
-
|
4918
|
-
|
4919
|
-
|
4920
|
-
charge_defect_ratio: charge_defect_ratio,
|
4921
|
-
crankcase_heater_watts: heat_pump_crankcase_heater_watts,
|
4922
|
-
primary_heating_system: primary_heating_system,
|
4923
|
-
primary_cooling_system: primary_cooling_system)
|
5092
|
+
hpxml_bldg.heat_pumps.add(id: "HeatPump#{hpxml_bldg.heat_pumps.size + 1}",
|
5093
|
+
heat_pump_type: heat_pump_type,
|
5094
|
+
heat_pump_fuel: HPXML::FuelTypeElectricity,
|
5095
|
+
heating_capacity: heating_capacity,
|
5096
|
+
heating_capacity_retention_fraction: heating_capacity_retention_fraction,
|
5097
|
+
heating_capacity_retention_temp: heating_capacity_retention_temp,
|
5098
|
+
compressor_type: compressor_type,
|
5099
|
+
compressor_lockout_temp: compressor_lockout_temp,
|
5100
|
+
cooling_shr: cooling_shr,
|
5101
|
+
cooling_capacity: cooling_capacity,
|
5102
|
+
fraction_heat_load_served: fraction_heat_load_served,
|
5103
|
+
fraction_cool_load_served: fraction_cool_load_served,
|
5104
|
+
backup_type: backup_type,
|
5105
|
+
backup_system_idref: backup_system_idref,
|
5106
|
+
backup_heating_fuel: backup_heating_fuel,
|
5107
|
+
backup_heating_capacity: backup_heating_capacity,
|
5108
|
+
backup_heating_efficiency_afue: backup_heating_efficiency_afue,
|
5109
|
+
backup_heating_efficiency_percent: backup_heating_efficiency_percent,
|
5110
|
+
backup_heating_switchover_temp: backup_heating_switchover_temp,
|
5111
|
+
backup_heating_lockout_temp: backup_heating_lockout_temp,
|
5112
|
+
heating_efficiency_hspf: heating_efficiency_hspf,
|
5113
|
+
heating_efficiency_hspf2: heating_efficiency_hspf2,
|
5114
|
+
cooling_efficiency_seer: cooling_efficiency_seer,
|
5115
|
+
cooling_efficiency_seer2: cooling_efficiency_seer2,
|
5116
|
+
heating_efficiency_cop: heating_efficiency_cop,
|
5117
|
+
cooling_efficiency_eer: cooling_efficiency_eer,
|
5118
|
+
airflow_defect_ratio: airflow_defect_ratio,
|
5119
|
+
charge_defect_ratio: charge_defect_ratio,
|
5120
|
+
crankcase_heater_watts: heat_pump_crankcase_heater_watts,
|
5121
|
+
primary_heating_system: primary_heating_system,
|
5122
|
+
primary_cooling_system: primary_cooling_system)
|
4924
5123
|
end
|
4925
5124
|
|
4926
|
-
def self.set_secondary_heating_systems(
|
5125
|
+
def self.set_secondary_heating_systems(hpxml_bldg, args)
|
4927
5126
|
heating_system_type = args[:heating_system_2_type]
|
4928
5127
|
heating_system_is_heatpump_backup = (args[:heat_pump_type] != 'none' && args[:heat_pump_backup_type] == HPXML::HeatPumpBackupTypeSeparate)
|
4929
5128
|
|
@@ -4941,7 +5140,7 @@ class HPXMLFile
|
|
4941
5140
|
|
4942
5141
|
if [HPXML::HVACTypeFurnace, HPXML::HVACTypeWallFurnace, HPXML::HVACTypeFloorFurnace].include?(heating_system_type) || heating_system_type.include?(HPXML::HVACTypeBoiler)
|
4943
5142
|
heating_efficiency_afue = args[:heating_system_2_heating_efficiency]
|
4944
|
-
elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::
|
5143
|
+
elsif [HPXML::HVACTypeElectricResistance, HPXML::HVACTypeStove, HPXML::HVACTypeSpaceHeater, HPXML::HVACTypeFireplace].include?(heating_system_type)
|
4945
5144
|
heating_efficiency_percent = args[:heating_system_2_heating_efficiency]
|
4946
5145
|
end
|
4947
5146
|
|
@@ -4953,42 +5152,42 @@ class HPXMLFile
|
|
4953
5152
|
fraction_heat_load_served = args[:heating_system_2_fraction_heat_load_served]
|
4954
5153
|
end
|
4955
5154
|
|
4956
|
-
|
4957
|
-
|
4958
|
-
|
4959
|
-
|
4960
|
-
|
4961
|
-
|
4962
|
-
|
5155
|
+
hpxml_bldg.heating_systems.add(id: "HeatingSystem#{hpxml_bldg.heating_systems.size + 1}",
|
5156
|
+
heating_system_type: heating_system_type,
|
5157
|
+
heating_system_fuel: heating_system_fuel,
|
5158
|
+
heating_capacity: heating_capacity,
|
5159
|
+
fraction_heat_load_served: fraction_heat_load_served,
|
5160
|
+
heating_efficiency_afue: heating_efficiency_afue,
|
5161
|
+
heating_efficiency_percent: heating_efficiency_percent)
|
4963
5162
|
end
|
4964
5163
|
|
4965
|
-
def self.set_hvac_distribution(
|
5164
|
+
def self.set_hvac_distribution(hpxml_bldg, args)
|
4966
5165
|
# HydronicDistribution?
|
4967
|
-
|
5166
|
+
hpxml_bldg.heating_systems.each do |heating_system|
|
4968
5167
|
next unless [heating_system.heating_system_type].include?(HPXML::HVACTypeBoiler)
|
4969
5168
|
next if args[:heating_system_type].include?('Fan Coil')
|
4970
5169
|
|
4971
|
-
|
4972
|
-
|
4973
|
-
|
4974
|
-
heating_system.distribution_system_idref =
|
5170
|
+
hpxml_bldg.hvac_distributions.add(id: "HVACDistribution#{hpxml_bldg.hvac_distributions.size + 1}",
|
5171
|
+
distribution_system_type: HPXML::HVACDistributionTypeHydronic,
|
5172
|
+
hydronic_type: HPXML::HydronicTypeBaseboard)
|
5173
|
+
heating_system.distribution_system_idref = hpxml_bldg.hvac_distributions[-1].id
|
4975
5174
|
end
|
4976
5175
|
|
4977
5176
|
# AirDistribution?
|
4978
5177
|
air_distribution_systems = []
|
4979
|
-
|
5178
|
+
hpxml_bldg.heating_systems.each do |heating_system|
|
4980
5179
|
if [HPXML::HVACTypeFurnace].include?(heating_system.heating_system_type)
|
4981
5180
|
air_distribution_systems << heating_system
|
4982
5181
|
end
|
4983
5182
|
end
|
4984
|
-
|
5183
|
+
hpxml_bldg.cooling_systems.each do |cooling_system|
|
4985
5184
|
if [HPXML::HVACTypeCentralAirConditioner].include?(cooling_system.cooling_system_type)
|
4986
5185
|
air_distribution_systems << cooling_system
|
4987
5186
|
elsif [HPXML::HVACTypeEvaporativeCooler, HPXML::HVACTypeMiniSplitAirConditioner].include?(cooling_system.cooling_system_type) && args[:cooling_system_is_ducted]
|
4988
5187
|
air_distribution_systems << cooling_system
|
4989
5188
|
end
|
4990
5189
|
end
|
4991
|
-
|
5190
|
+
hpxml_bldg.heat_pumps.each do |heat_pump|
|
4992
5191
|
if [HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
|
4993
5192
|
air_distribution_systems << heat_pump
|
4994
5193
|
elsif [HPXML::HVACTypeHeatPumpMiniSplit].include?(heat_pump.heat_pump_type)
|
@@ -5000,7 +5199,9 @@ class HPXMLFile
|
|
5000
5199
|
|
5001
5200
|
# FanCoil?
|
5002
5201
|
fan_coil_distribution_systems = []
|
5003
|
-
|
5202
|
+
hpxml_bldg.heating_systems.each do |heating_system|
|
5203
|
+
next unless heating_system.primary_system
|
5204
|
+
|
5004
5205
|
if args[:heating_system_type].include?('Fan Coil')
|
5005
5206
|
fan_coil_distribution_systems << heating_system
|
5006
5207
|
end
|
@@ -5012,7 +5213,7 @@ class HPXMLFile
|
|
5012
5213
|
number_of_return_registers = args[:ducts_number_of_return_registers].get
|
5013
5214
|
end
|
5014
5215
|
|
5015
|
-
if [HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) &&
|
5216
|
+
if [HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && hpxml_bldg.heating_systems.size == 0 && hpxml_bldg.heat_pumps.size == 0
|
5016
5217
|
number_of_return_registers = nil
|
5017
5218
|
if args[:cooling_system_is_ducted]
|
5018
5219
|
number_of_return_registers = 0
|
@@ -5020,23 +5221,23 @@ class HPXMLFile
|
|
5020
5221
|
end
|
5021
5222
|
|
5022
5223
|
if air_distribution_systems.size > 0
|
5023
|
-
|
5024
|
-
|
5025
|
-
|
5026
|
-
|
5224
|
+
hpxml_bldg.hvac_distributions.add(id: "HVACDistribution#{hpxml_bldg.hvac_distributions.size + 1}",
|
5225
|
+
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
5226
|
+
air_type: HPXML::AirTypeRegularVelocity,
|
5227
|
+
number_of_return_registers: number_of_return_registers)
|
5027
5228
|
air_distribution_systems.each do |hvac_system|
|
5028
|
-
hvac_system.distribution_system_idref =
|
5229
|
+
hvac_system.distribution_system_idref = hpxml_bldg.hvac_distributions[-1].id
|
5029
5230
|
end
|
5030
|
-
set_duct_leakages(args,
|
5031
|
-
set_ducts(args,
|
5231
|
+
set_duct_leakages(args, hpxml_bldg.hvac_distributions[-1])
|
5232
|
+
set_ducts(hpxml_bldg, args, hpxml_bldg.hvac_distributions[-1])
|
5032
5233
|
end
|
5033
5234
|
|
5034
5235
|
if fan_coil_distribution_systems.size > 0
|
5035
|
-
|
5036
|
-
|
5037
|
-
|
5236
|
+
hpxml_bldg.hvac_distributions.add(id: "HVACDistribution#{hpxml_bldg.hvac_distributions.size + 1}",
|
5237
|
+
distribution_system_type: HPXML::HVACDistributionTypeAir,
|
5238
|
+
air_type: HPXML::AirTypeFanCoil)
|
5038
5239
|
fan_coil_distribution_systems.each do |hvac_system|
|
5039
|
-
hvac_system.distribution_system_idref =
|
5240
|
+
hvac_system.distribution_system_idref = hpxml_bldg.hvac_distributions[-1].id
|
5040
5241
|
end
|
5041
5242
|
end
|
5042
5243
|
end
|
@@ -5053,23 +5254,74 @@ class HPXMLFile
|
|
5053
5254
|
duct_leakage_total_or_to_outside: HPXML::DuctLeakageToOutside)
|
5054
5255
|
end
|
5055
5256
|
|
5056
|
-
def self.
|
5257
|
+
def self.get_location(location, foundation_type, attic_type)
|
5258
|
+
if location == HPXML::LocationCrawlspace
|
5259
|
+
if foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
5260
|
+
return HPXML::LocationCrawlspaceUnvented
|
5261
|
+
elsif foundation_type == HPXML::FoundationTypeCrawlspaceVented
|
5262
|
+
return HPXML::LocationCrawlspaceVented
|
5263
|
+
elsif foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
|
5264
|
+
return HPXML::LocationCrawlspaceConditioned
|
5265
|
+
else
|
5266
|
+
fail "Specified '#{location}' but foundation type is '#{foundation_type}'."
|
5267
|
+
end
|
5268
|
+
elsif location == HPXML::LocationAttic
|
5269
|
+
if attic_type == HPXML::AtticTypeUnvented
|
5270
|
+
return HPXML::LocationAtticUnvented
|
5271
|
+
elsif attic_type == HPXML::AtticTypeVented
|
5272
|
+
return HPXML::LocationAtticVented
|
5273
|
+
elsif attic_type == HPXML::AtticTypeConditioned
|
5274
|
+
return HPXML::LocationConditionedSpace
|
5275
|
+
else
|
5276
|
+
fail "Specified '#{location}' but attic type is '#{attic_type}'."
|
5277
|
+
end
|
5278
|
+
end
|
5279
|
+
return location
|
5280
|
+
end
|
5281
|
+
|
5282
|
+
def self.set_ducts(hpxml_bldg, args, hvac_distribution)
|
5057
5283
|
if args[:ducts_supply_location].is_initialized
|
5058
|
-
ducts_supply_location = args[:ducts_supply_location].get
|
5284
|
+
ducts_supply_location = get_location(args[:ducts_supply_location].get, hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
|
5059
5285
|
end
|
5060
5286
|
|
5061
5287
|
if args[:ducts_return_location].is_initialized
|
5062
|
-
ducts_return_location = args[:ducts_return_location].get
|
5288
|
+
ducts_return_location = get_location(args[:ducts_return_location].get, hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
|
5063
5289
|
end
|
5064
5290
|
|
5065
5291
|
if args[:ducts_supply_surface_area].is_initialized
|
5066
5292
|
ducts_supply_surface_area = args[:ducts_supply_surface_area].get
|
5067
5293
|
end
|
5068
5294
|
|
5295
|
+
if args[:ducts_supply_surface_area_fraction].is_initialized
|
5296
|
+
ducts_supply_area_fraction = args[:ducts_supply_surface_area_fraction].get
|
5297
|
+
end
|
5298
|
+
|
5069
5299
|
if args[:ducts_return_surface_area].is_initialized
|
5070
5300
|
ducts_return_surface_area = args[:ducts_return_surface_area].get
|
5071
5301
|
end
|
5072
5302
|
|
5303
|
+
if args[:ducts_return_surface_area_fraction].is_initialized
|
5304
|
+
ducts_return_area_fraction = args[:ducts_return_surface_area_fraction].get
|
5305
|
+
end
|
5306
|
+
|
5307
|
+
if (not ducts_supply_location.nil?) && ducts_supply_surface_area.nil? && ducts_supply_area_fraction.nil?
|
5308
|
+
# Supply duct location without any area inputs provided; set area fraction
|
5309
|
+
if ducts_supply_location == HPXML::LocationConditionedSpace
|
5310
|
+
ducts_supply_area_fraction = 1.0
|
5311
|
+
else
|
5312
|
+
ducts_supply_area_fraction = HVAC.get_default_duct_fraction_outside_conditioned_space(args[:geometry_unit_num_floors_above_grade])
|
5313
|
+
end
|
5314
|
+
end
|
5315
|
+
|
5316
|
+
if (not ducts_return_location.nil?) && ducts_return_surface_area.nil? && ducts_return_area_fraction.nil?
|
5317
|
+
# Return duct location without any area inputs provided; set area fraction
|
5318
|
+
if ducts_return_location == HPXML::LocationConditionedSpace
|
5319
|
+
ducts_return_area_fraction = 1.0
|
5320
|
+
else
|
5321
|
+
ducts_return_area_fraction = HVAC.get_default_duct_fraction_outside_conditioned_space(args[:geometry_unit_num_floors_above_grade])
|
5322
|
+
end
|
5323
|
+
end
|
5324
|
+
|
5073
5325
|
if args[:ducts_supply_buried_insulation_level].is_initialized
|
5074
5326
|
ducts_supply_buried_insulation_level = args[:ducts_supply_buried_insulation_level].get
|
5075
5327
|
end
|
@@ -5083,7 +5335,8 @@ class HPXMLFile
|
|
5083
5335
|
duct_insulation_r_value: args[:ducts_supply_insulation_r],
|
5084
5336
|
duct_buried_insulation_level: ducts_supply_buried_insulation_level,
|
5085
5337
|
duct_location: ducts_supply_location,
|
5086
|
-
duct_surface_area: ducts_supply_surface_area
|
5338
|
+
duct_surface_area: ducts_supply_surface_area,
|
5339
|
+
duct_fraction_area: ducts_supply_area_fraction)
|
5087
5340
|
|
5088
5341
|
if not ([HPXML::HVACTypeEvaporativeCooler].include?(args[:cooling_system_type]) && args[:cooling_system_is_ducted])
|
5089
5342
|
hvac_distribution.ducts.add(id: "Ducts#{hvac_distribution.ducts.size + 1}",
|
@@ -5091,20 +5344,56 @@ class HPXMLFile
|
|
5091
5344
|
duct_insulation_r_value: args[:ducts_return_insulation_r],
|
5092
5345
|
duct_buried_insulation_level: ducts_return_buried_insulation_level,
|
5093
5346
|
duct_location: ducts_return_location,
|
5094
|
-
duct_surface_area: ducts_return_surface_area
|
5347
|
+
duct_surface_area: ducts_return_surface_area,
|
5348
|
+
duct_fraction_area: ducts_return_area_fraction)
|
5349
|
+
end
|
5350
|
+
|
5351
|
+
if (not ducts_supply_area_fraction.nil?) && (ducts_supply_area_fraction < 1)
|
5352
|
+
# OS-HPXML needs duct fractions to sum to 1; add remaining ducts in conditioned space.
|
5353
|
+
hvac_distribution.ducts.add(id: "Ducts#{hvac_distribution.ducts.size + 1}",
|
5354
|
+
duct_type: HPXML::DuctTypeSupply,
|
5355
|
+
duct_insulation_r_value: 0.0,
|
5356
|
+
duct_location: HPXML::LocationConditionedSpace,
|
5357
|
+
duct_fraction_area: 1.0 - ducts_supply_area_fraction)
|
5358
|
+
end
|
5359
|
+
|
5360
|
+
if not hvac_distribution.ducts.find { |d| d.duct_type == HPXML::DuctTypeReturn }.nil?
|
5361
|
+
if (not ducts_return_area_fraction.nil?) && (ducts_return_area_fraction < 1)
|
5362
|
+
# OS-HPXML needs duct fractions to sum to 1; add remaining ducts in conditioned space.
|
5363
|
+
hvac_distribution.ducts.add(id: "Ducts#{hvac_distribution.ducts.size + 1}",
|
5364
|
+
duct_type: HPXML::DuctTypeReturn,
|
5365
|
+
duct_insulation_r_value: 0.0,
|
5366
|
+
duct_location: HPXML::LocationConditionedSpace,
|
5367
|
+
duct_fraction_area: 1.0 - ducts_return_area_fraction)
|
5368
|
+
end
|
5095
5369
|
end
|
5096
5370
|
|
5097
5371
|
# If duct surface areas are defaulted, set CFA served
|
5098
5372
|
if hvac_distribution.ducts.select { |d| d.duct_surface_area.nil? }.size > 0
|
5099
|
-
|
5373
|
+
max_fraction_load_served = 0.0
|
5374
|
+
hvac_distribution.hvac_systems.each do |hvac_system|
|
5375
|
+
if hvac_system.respond_to?(:fraction_heat_load_served)
|
5376
|
+
if hvac_system.is_a?(HPXML::HeatingSystem) && hvac_system.is_heat_pump_backup_system
|
5377
|
+
# HP backup system, use HP fraction heat load served
|
5378
|
+
fraction_heat_load_served = hvac_system.primary_heat_pump.fraction_heat_load_served
|
5379
|
+
else
|
5380
|
+
fraction_heat_load_served = hvac_system.fraction_heat_load_served
|
5381
|
+
end
|
5382
|
+
max_fraction_load_served = [max_fraction_load_served, fraction_heat_load_served].max
|
5383
|
+
end
|
5384
|
+
if hvac_system.respond_to?(:fraction_cool_load_served)
|
5385
|
+
max_fraction_load_served = [max_fraction_load_served, hvac_system.fraction_cool_load_served].max
|
5386
|
+
end
|
5387
|
+
end
|
5388
|
+
hvac_distribution.conditioned_floor_area_served = args[:geometry_unit_cfa] * max_fraction_load_served
|
5100
5389
|
end
|
5101
5390
|
end
|
5102
5391
|
|
5103
|
-
def self.set_hvac_control(hpxml, args, epw_file, weather)
|
5392
|
+
def self.set_hvac_control(hpxml, hpxml_bldg, args, epw_file, weather)
|
5104
5393
|
return if (args[:heating_system_type] == 'none') && (args[:cooling_system_type] == 'none') && (args[:heat_pump_type] == 'none')
|
5105
5394
|
|
5106
5395
|
# Heating
|
5107
|
-
if
|
5396
|
+
if hpxml_bldg.total_fraction_heat_load_served > 0
|
5108
5397
|
|
5109
5398
|
if args[:hvac_control_heating_weekday_setpoint].is_initialized && args[:hvac_control_heating_weekend_setpoint].is_initialized
|
5110
5399
|
if args[:hvac_control_heating_weekday_setpoint].get == args[:hvac_control_heating_weekend_setpoint].get && !args[:hvac_control_heating_weekday_setpoint].get.include?(',')
|
@@ -5133,7 +5422,7 @@ class HPXMLFile
|
|
5133
5422
|
end
|
5134
5423
|
|
5135
5424
|
# Cooling
|
5136
|
-
if
|
5425
|
+
if hpxml_bldg.total_fraction_cool_load_served > 0
|
5137
5426
|
|
5138
5427
|
if args[:hvac_control_cooling_weekday_setpoint].is_initialized && args[:hvac_control_cooling_weekend_setpoint].is_initialized
|
5139
5428
|
if args[:hvac_control_cooling_weekday_setpoint].get == args[:hvac_control_cooling_weekend_setpoint].get && !args[:hvac_control_cooling_weekday_setpoint].get.include?(',')
|
@@ -5165,25 +5454,25 @@ class HPXMLFile
|
|
5165
5454
|
|
5166
5455
|
end
|
5167
5456
|
|
5168
|
-
|
5169
|
-
|
5170
|
-
|
5171
|
-
|
5172
|
-
|
5173
|
-
|
5174
|
-
|
5175
|
-
|
5176
|
-
|
5177
|
-
|
5178
|
-
|
5179
|
-
|
5180
|
-
|
5181
|
-
|
5182
|
-
|
5183
|
-
|
5457
|
+
hpxml_bldg.hvac_controls.add(id: "HVACControl#{hpxml_bldg.hvac_controls.size + 1}",
|
5458
|
+
heating_setpoint_temp: heating_setpoint_temp,
|
5459
|
+
cooling_setpoint_temp: cooling_setpoint_temp,
|
5460
|
+
weekday_heating_setpoints: weekday_heating_setpoints,
|
5461
|
+
weekend_heating_setpoints: weekend_heating_setpoints,
|
5462
|
+
weekday_cooling_setpoints: weekday_cooling_setpoints,
|
5463
|
+
weekend_cooling_setpoints: weekend_cooling_setpoints,
|
5464
|
+
ceiling_fan_cooling_setpoint_temp_offset: ceiling_fan_cooling_setpoint_temp_offset,
|
5465
|
+
seasons_heating_begin_month: seasons_heating_begin_month,
|
5466
|
+
seasons_heating_begin_day: seasons_heating_begin_day,
|
5467
|
+
seasons_heating_end_month: seasons_heating_end_month,
|
5468
|
+
seasons_heating_end_day: seasons_heating_end_day,
|
5469
|
+
seasons_cooling_begin_month: seasons_cooling_begin_month,
|
5470
|
+
seasons_cooling_begin_day: seasons_cooling_begin_day,
|
5471
|
+
seasons_cooling_end_month: seasons_cooling_end_month,
|
5472
|
+
seasons_cooling_end_day: seasons_cooling_end_day)
|
5184
5473
|
end
|
5185
5474
|
|
5186
|
-
def self.set_ventilation_fans(
|
5475
|
+
def self.set_ventilation_fans(hpxml_bldg, args)
|
5187
5476
|
if args[:mech_vent_fan_type] != 'none'
|
5188
5477
|
|
5189
5478
|
if [HPXML::MechVentTypeERV].include?(args[:mech_vent_fan_type])
|
@@ -5204,7 +5493,7 @@ class HPXMLFile
|
|
5204
5493
|
|
5205
5494
|
distribution_system_idref = nil
|
5206
5495
|
if args[:mech_vent_fan_type] == HPXML::MechVentTypeCFIS
|
5207
|
-
|
5496
|
+
hpxml_bldg.hvac_distributions.each do |hvac_distribution|
|
5208
5497
|
next unless hvac_distribution.distribution_system_type == HPXML::HVACDistributionTypeAir
|
5209
5498
|
next if hvac_distribution.air_type != HPXML::AirTypeRegularVelocity
|
5210
5499
|
|
@@ -5241,27 +5530,27 @@ class HPXMLFile
|
|
5241
5530
|
rated_flow_rate = args[:mech_vent_flow_rate].get
|
5242
5531
|
end
|
5243
5532
|
|
5244
|
-
|
5245
|
-
|
5246
|
-
|
5247
|
-
|
5248
|
-
|
5249
|
-
|
5250
|
-
|
5251
|
-
|
5252
|
-
|
5253
|
-
|
5254
|
-
|
5255
|
-
|
5256
|
-
|
5257
|
-
|
5258
|
-
|
5259
|
-
|
5260
|
-
|
5261
|
-
|
5262
|
-
|
5263
|
-
|
5264
|
-
|
5533
|
+
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
|
5534
|
+
fan_type: args[:mech_vent_fan_type],
|
5535
|
+
cfis_addtl_runtime_operating_mode: cfis_addtl_runtime_operating_mode,
|
5536
|
+
rated_flow_rate: rated_flow_rate,
|
5537
|
+
hours_in_operation: hours_in_operation,
|
5538
|
+
used_for_whole_building_ventilation: true,
|
5539
|
+
total_recovery_efficiency: total_recovery_efficiency,
|
5540
|
+
total_recovery_efficiency_adjusted: total_recovery_efficiency_adjusted,
|
5541
|
+
sensible_recovery_efficiency: sensible_recovery_efficiency,
|
5542
|
+
sensible_recovery_efficiency_adjusted: sensible_recovery_efficiency_adjusted,
|
5543
|
+
fan_power: fan_power,
|
5544
|
+
distribution_system_idref: distribution_system_idref,
|
5545
|
+
is_shared_system: is_shared_system,
|
5546
|
+
in_unit_flow_rate: in_unit_flow_rate,
|
5547
|
+
fraction_recirculation: fraction_recirculation,
|
5548
|
+
preheating_fuel: preheating_fuel,
|
5549
|
+
preheating_efficiency_cop: preheating_efficiency_cop,
|
5550
|
+
preheating_fraction_load_served: preheating_fraction_load_served,
|
5551
|
+
precooling_fuel: precooling_fuel,
|
5552
|
+
precooling_efficiency_cop: precooling_efficiency_cop,
|
5553
|
+
precooling_fraction_load_served: precooling_fraction_load_served)
|
5265
5554
|
end
|
5266
5555
|
|
5267
5556
|
if args[:mech_vent_2_fan_type] != 'none'
|
@@ -5286,16 +5575,16 @@ class HPXMLFile
|
|
5286
5575
|
hours_in_operation = args[:mech_vent_2_hours_in_operation]
|
5287
5576
|
fan_power = args[:mech_vent_2_fan_power]
|
5288
5577
|
|
5289
|
-
|
5290
|
-
|
5291
|
-
|
5292
|
-
|
5293
|
-
|
5294
|
-
|
5295
|
-
|
5296
|
-
|
5297
|
-
|
5298
|
-
|
5578
|
+
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
|
5579
|
+
fan_type: args[:mech_vent_2_fan_type],
|
5580
|
+
rated_flow_rate: args[:mech_vent_2_flow_rate],
|
5581
|
+
hours_in_operation: hours_in_operation,
|
5582
|
+
used_for_whole_building_ventilation: true,
|
5583
|
+
total_recovery_efficiency: total_recovery_efficiency,
|
5584
|
+
total_recovery_efficiency_adjusted: total_recovery_efficiency_adjusted,
|
5585
|
+
sensible_recovery_efficiency: sensible_recovery_efficiency,
|
5586
|
+
sensible_recovery_efficiency_adjusted: sensible_recovery_efficiency_adjusted,
|
5587
|
+
fan_power: fan_power)
|
5299
5588
|
end
|
5300
5589
|
|
5301
5590
|
if !args[:kitchen_fans_quantity].is_initialized || (args[:kitchen_fans_quantity].get > 0)
|
@@ -5319,14 +5608,14 @@ class HPXMLFile
|
|
5319
5608
|
quantity = args[:kitchen_fans_quantity].get
|
5320
5609
|
end
|
5321
5610
|
|
5322
|
-
|
5323
|
-
|
5324
|
-
|
5325
|
-
|
5326
|
-
|
5327
|
-
|
5328
|
-
|
5329
|
-
|
5611
|
+
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
|
5612
|
+
rated_flow_rate: rated_flow_rate,
|
5613
|
+
used_for_local_ventilation: true,
|
5614
|
+
hours_in_operation: hours_in_operation,
|
5615
|
+
fan_location: HPXML::LocationKitchen,
|
5616
|
+
fan_power: fan_power,
|
5617
|
+
start_hour: start_hour,
|
5618
|
+
count: quantity)
|
5330
5619
|
end
|
5331
5620
|
|
5332
5621
|
if !args[:bathroom_fans_quantity].is_initialized || (args[:bathroom_fans_quantity].get > 0)
|
@@ -5350,14 +5639,14 @@ class HPXMLFile
|
|
5350
5639
|
quantity = args[:bathroom_fans_quantity].get
|
5351
5640
|
end
|
5352
5641
|
|
5353
|
-
|
5354
|
-
|
5355
|
-
|
5356
|
-
|
5357
|
-
|
5358
|
-
|
5359
|
-
|
5360
|
-
|
5642
|
+
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
|
5643
|
+
rated_flow_rate: rated_flow_rate,
|
5644
|
+
used_for_local_ventilation: true,
|
5645
|
+
hours_in_operation: hours_in_operation,
|
5646
|
+
fan_location: HPXML::LocationBath,
|
5647
|
+
fan_power: fan_power,
|
5648
|
+
start_hour: start_hour,
|
5649
|
+
count: quantity)
|
5361
5650
|
end
|
5362
5651
|
|
5363
5652
|
if args[:whole_house_fan_present]
|
@@ -5369,14 +5658,14 @@ class HPXMLFile
|
|
5369
5658
|
fan_power = args[:whole_house_fan_power].get
|
5370
5659
|
end
|
5371
5660
|
|
5372
|
-
|
5373
|
-
|
5374
|
-
|
5375
|
-
|
5661
|
+
hpxml_bldg.ventilation_fans.add(id: "VentilationFan#{hpxml_bldg.ventilation_fans.size + 1}",
|
5662
|
+
rated_flow_rate: rated_flow_rate,
|
5663
|
+
used_for_seasonal_cooling_load_reduction: true,
|
5664
|
+
fan_power: fan_power)
|
5376
5665
|
end
|
5377
5666
|
end
|
5378
5667
|
|
5379
|
-
def self.set_water_heating_systems(
|
5668
|
+
def self.set_water_heating_systems(hpxml_bldg, args)
|
5380
5669
|
water_heater_type = args[:water_heater_type]
|
5381
5670
|
return if water_heater_type == 'none'
|
5382
5671
|
|
@@ -5387,7 +5676,7 @@ class HPXMLFile
|
|
5387
5676
|
end
|
5388
5677
|
|
5389
5678
|
if args[:water_heater_location].is_initialized
|
5390
|
-
location = args[:water_heater_location].get
|
5679
|
+
location = get_location(args[:water_heater_location].get, hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
|
5391
5680
|
end
|
5392
5681
|
|
5393
5682
|
if args[:water_heater_tank_volume].is_initialized
|
@@ -5426,8 +5715,8 @@ class HPXMLFile
|
|
5426
5715
|
fuel_type = nil
|
5427
5716
|
heating_capacity = nil
|
5428
5717
|
energy_factor = nil
|
5429
|
-
if
|
5430
|
-
related_hvac_idref =
|
5718
|
+
if hpxml_bldg.heating_systems.size > 0
|
5719
|
+
related_hvac_idref = hpxml_bldg.heating_systems[0].id
|
5431
5720
|
end
|
5432
5721
|
end
|
5433
5722
|
|
@@ -5456,13 +5745,13 @@ class HPXMLFile
|
|
5456
5745
|
uses_desuperheater = args[:water_heater_uses_desuperheater].get
|
5457
5746
|
if uses_desuperheater
|
5458
5747
|
related_hvac_idref = nil
|
5459
|
-
|
5748
|
+
hpxml_bldg.cooling_systems.each do |cooling_system|
|
5460
5749
|
next unless [HPXML::HVACTypeCentralAirConditioner,
|
5461
5750
|
HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
|
5462
5751
|
|
5463
5752
|
related_hvac_idref = cooling_system.id
|
5464
5753
|
end
|
5465
|
-
|
5754
|
+
hpxml_bldg.heat_pumps.each do |heat_pump|
|
5466
5755
|
next unless [HPXML::HVACTypeHeatPumpAirToAir,
|
5467
5756
|
HPXML::HVACTypeHeatPumpMiniSplit,
|
5468
5757
|
HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type
|
@@ -5486,30 +5775,30 @@ class HPXMLFile
|
|
5486
5775
|
end
|
5487
5776
|
end
|
5488
5777
|
|
5489
|
-
|
5490
|
-
|
5491
|
-
|
5492
|
-
|
5493
|
-
|
5494
|
-
|
5495
|
-
|
5496
|
-
|
5497
|
-
|
5498
|
-
|
5499
|
-
|
5500
|
-
|
5501
|
-
|
5502
|
-
|
5503
|
-
|
5504
|
-
|
5505
|
-
|
5506
|
-
|
5507
|
-
|
5508
|
-
|
5509
|
-
|
5778
|
+
hpxml_bldg.water_heating_systems.add(id: "WaterHeatingSystem#{hpxml_bldg.water_heating_systems.size + 1}",
|
5779
|
+
water_heater_type: water_heater_type,
|
5780
|
+
fuel_type: fuel_type,
|
5781
|
+
location: location,
|
5782
|
+
tank_volume: tank_volume,
|
5783
|
+
fraction_dhw_load_served: 1.0,
|
5784
|
+
energy_factor: energy_factor,
|
5785
|
+
uniform_energy_factor: uniform_energy_factor,
|
5786
|
+
usage_bin: usage_bin,
|
5787
|
+
recovery_efficiency: recovery_efficiency,
|
5788
|
+
uses_desuperheater: uses_desuperheater,
|
5789
|
+
related_hvac_idref: related_hvac_idref,
|
5790
|
+
standby_loss_units: standby_loss_units,
|
5791
|
+
standby_loss_value: standby_loss_value,
|
5792
|
+
jacket_r_value: jacket_r_value,
|
5793
|
+
temperature: temperature,
|
5794
|
+
heating_capacity: heating_capacity,
|
5795
|
+
is_shared_system: is_shared_system,
|
5796
|
+
number_of_units_served: number_of_units_served,
|
5797
|
+
tank_model_type: tank_model_type,
|
5798
|
+
operating_mode: operating_mode)
|
5510
5799
|
end
|
5511
5800
|
|
5512
|
-
def self.set_hot_water_distribution(
|
5801
|
+
def self.set_hot_water_distribution(hpxml_bldg, args)
|
5513
5802
|
return if args[:water_heater_type] == 'none'
|
5514
5803
|
|
5515
5804
|
if args[:dwhr_facilities_connected] != 'none'
|
@@ -5548,36 +5837,36 @@ class HPXMLFile
|
|
5548
5837
|
pipe_r_value = args[:hot_water_distribution_pipe_r].get
|
5549
5838
|
end
|
5550
5839
|
|
5551
|
-
|
5552
|
-
|
5553
|
-
|
5554
|
-
|
5555
|
-
|
5556
|
-
|
5557
|
-
|
5558
|
-
|
5559
|
-
|
5560
|
-
|
5561
|
-
|
5840
|
+
hpxml_bldg.hot_water_distributions.add(id: "HotWaterDistribution#{hpxml_bldg.hot_water_distributions.size + 1}",
|
5841
|
+
system_type: args[:hot_water_distribution_system_type],
|
5842
|
+
standard_piping_length: standard_piping_length,
|
5843
|
+
recirculation_control_type: recirculation_control_type,
|
5844
|
+
recirculation_piping_length: recirculation_piping_length,
|
5845
|
+
recirculation_branch_piping_length: recirculation_branch_piping_length,
|
5846
|
+
recirculation_pump_power: recirculation_pump_power,
|
5847
|
+
pipe_r_value: pipe_r_value,
|
5848
|
+
dwhr_facilities_connected: dwhr_facilities_connected,
|
5849
|
+
dwhr_equal_flow: dwhr_equal_flow,
|
5850
|
+
dwhr_efficiency: dwhr_efficiency)
|
5562
5851
|
end
|
5563
5852
|
|
5564
|
-
def self.set_water_fixtures(
|
5853
|
+
def self.set_water_fixtures(hpxml_bldg, args)
|
5565
5854
|
return if args[:water_heater_type] == 'none'
|
5566
5855
|
|
5567
|
-
|
5568
|
-
|
5569
|
-
|
5856
|
+
hpxml_bldg.water_fixtures.add(id: "WaterFixture#{hpxml_bldg.water_fixtures.size + 1}",
|
5857
|
+
water_fixture_type: HPXML::WaterFixtureTypeShowerhead,
|
5858
|
+
low_flow: args[:water_fixtures_shower_low_flow])
|
5570
5859
|
|
5571
|
-
|
5572
|
-
|
5573
|
-
|
5860
|
+
hpxml_bldg.water_fixtures.add(id: "WaterFixture#{hpxml_bldg.water_fixtures.size + 1}",
|
5861
|
+
water_fixture_type: HPXML::WaterFixtureTypeFaucet,
|
5862
|
+
low_flow: args[:water_fixtures_sink_low_flow])
|
5574
5863
|
|
5575
5864
|
if args[:water_fixtures_usage_multiplier].is_initialized
|
5576
|
-
|
5865
|
+
hpxml_bldg.water_heating.water_fixtures_usage_multiplier = args[:water_fixtures_usage_multiplier].get
|
5577
5866
|
end
|
5578
5867
|
end
|
5579
5868
|
|
5580
|
-
def self.set_solar_thermal(
|
5869
|
+
def self.set_solar_thermal(hpxml_bldg, args, epw_file)
|
5581
5870
|
return if args[:solar_thermal_system_type] == 'none'
|
5582
5871
|
|
5583
5872
|
if args[:solar_thermal_solar_fraction] > 0
|
@@ -5596,25 +5885,25 @@ class HPXMLFile
|
|
5596
5885
|
end
|
5597
5886
|
end
|
5598
5887
|
|
5599
|
-
if
|
5888
|
+
if hpxml_bldg.water_heating_systems.size == 0
|
5600
5889
|
fail 'Solar thermal system specified but no water heater found.'
|
5601
5890
|
end
|
5602
5891
|
|
5603
|
-
|
5604
|
-
|
5605
|
-
|
5606
|
-
|
5607
|
-
|
5608
|
-
|
5609
|
-
|
5610
|
-
|
5611
|
-
|
5612
|
-
|
5613
|
-
|
5614
|
-
|
5892
|
+
hpxml_bldg.solar_thermal_systems.add(id: "SolarThermalSystem#{hpxml_bldg.solar_thermal_systems.size + 1}",
|
5893
|
+
system_type: args[:solar_thermal_system_type],
|
5894
|
+
collector_area: collector_area,
|
5895
|
+
collector_loop_type: collector_loop_type,
|
5896
|
+
collector_type: collector_type,
|
5897
|
+
collector_azimuth: collector_azimuth,
|
5898
|
+
collector_tilt: collector_tilt,
|
5899
|
+
collector_frta: collector_frta,
|
5900
|
+
collector_frul: collector_frul,
|
5901
|
+
storage_volume: storage_volume,
|
5902
|
+
water_heating_system_idref: hpxml_bldg.water_heating_systems[0].id,
|
5903
|
+
solar_fraction: solar_fraction)
|
5615
5904
|
end
|
5616
5905
|
|
5617
|
-
def self.set_pv_systems(
|
5906
|
+
def self.set_pv_systems(hpxml_bldg, args, epw_file)
|
5618
5907
|
[args[:pv_system_present], args[:pv_system_2_present]].each_with_index do |pv_system_present, i|
|
5619
5908
|
next unless pv_system_present
|
5620
5909
|
|
@@ -5643,36 +5932,36 @@ class HPXMLFile
|
|
5643
5932
|
end
|
5644
5933
|
end
|
5645
5934
|
|
5646
|
-
|
5647
|
-
|
5648
|
-
|
5649
|
-
|
5650
|
-
|
5651
|
-
|
5652
|
-
|
5653
|
-
|
5654
|
-
|
5655
|
-
|
5935
|
+
hpxml_bldg.pv_systems.add(id: "PVSystem#{hpxml_bldg.pv_systems.size + 1}",
|
5936
|
+
location: location,
|
5937
|
+
module_type: module_type,
|
5938
|
+
tracking: tracking,
|
5939
|
+
array_azimuth: [args[:pv_system_array_azimuth], args[:pv_system_2_array_azimuth]][i],
|
5940
|
+
array_tilt: Geometry.get_absolute_tilt([args[:pv_system_array_tilt], args[:pv_system_2_array_tilt]][i], args[:geometry_roof_pitch], epw_file),
|
5941
|
+
max_power_output: max_power_output,
|
5942
|
+
system_losses_fraction: system_losses_fraction,
|
5943
|
+
is_shared_system: is_shared_system,
|
5944
|
+
number_of_bedrooms_served: number_of_bedrooms_served)
|
5656
5945
|
end
|
5657
|
-
if
|
5946
|
+
if hpxml_bldg.pv_systems.size > 0
|
5658
5947
|
# Add inverter efficiency; assume a single inverter even if multiple PV arrays
|
5659
5948
|
if args[:pv_system_inverter_efficiency].is_initialized
|
5660
5949
|
inverter_efficiency = args[:pv_system_inverter_efficiency].get
|
5661
5950
|
end
|
5662
5951
|
|
5663
|
-
|
5664
|
-
|
5665
|
-
|
5666
|
-
pv_system.inverter_idref =
|
5952
|
+
hpxml_bldg.inverters.add(id: "Inverter#{hpxml_bldg.inverters.size + 1}",
|
5953
|
+
inverter_efficiency: inverter_efficiency)
|
5954
|
+
hpxml_bldg.pv_systems.each do |pv_system|
|
5955
|
+
pv_system.inverter_idref = hpxml_bldg.inverters[-1].id
|
5667
5956
|
end
|
5668
5957
|
end
|
5669
5958
|
end
|
5670
5959
|
|
5671
|
-
def self.set_battery(
|
5960
|
+
def self.set_battery(hpxml_bldg, args)
|
5672
5961
|
return unless args[:battery_present]
|
5673
5962
|
|
5674
5963
|
if args[:battery_location].is_initialized
|
5675
|
-
location = args[:battery_location].get
|
5964
|
+
location = get_location(args[:battery_location].get, hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
|
5676
5965
|
end
|
5677
5966
|
|
5678
5967
|
if args[:battery_power].is_initialized
|
@@ -5691,16 +5980,16 @@ class HPXMLFile
|
|
5691
5980
|
round_trip_efficiency = args[:battery_round_trip_efficiency].get
|
5692
5981
|
end
|
5693
5982
|
|
5694
|
-
|
5695
|
-
|
5696
|
-
|
5697
|
-
|
5698
|
-
|
5699
|
-
|
5700
|
-
|
5983
|
+
hpxml_bldg.batteries.add(id: "Battery#{hpxml_bldg.batteries.size + 1}",
|
5984
|
+
type: HPXML::BatteryTypeLithiumIon,
|
5985
|
+
location: location,
|
5986
|
+
rated_power_output: rated_power_output,
|
5987
|
+
nominal_capacity_kwh: nominal_capacity_kwh,
|
5988
|
+
usable_capacity_kwh: usable_capacity_kwh,
|
5989
|
+
round_trip_efficiency: round_trip_efficiency)
|
5701
5990
|
end
|
5702
5991
|
|
5703
|
-
def self.set_lighting(
|
5992
|
+
def self.set_lighting(hpxml_bldg, args)
|
5704
5993
|
if args[:lighting_present]
|
5705
5994
|
has_garage = (args[:geometry_garage_width] * args[:geometry_garage_depth] > 0)
|
5706
5995
|
|
@@ -5709,19 +5998,19 @@ class HPXMLFile
|
|
5709
5998
|
interior_usage_multiplier = args[:lighting_interior_usage_multiplier].get
|
5710
5999
|
end
|
5711
6000
|
if interior_usage_multiplier.nil? || interior_usage_multiplier.to_f > 0
|
5712
|
-
|
5713
|
-
|
5714
|
-
|
5715
|
-
|
5716
|
-
|
5717
|
-
|
5718
|
-
|
5719
|
-
|
5720
|
-
|
5721
|
-
|
5722
|
-
|
5723
|
-
|
5724
|
-
|
6001
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6002
|
+
location: HPXML::LocationInterior,
|
6003
|
+
fraction_of_units_in_location: args[:lighting_interior_fraction_cfl],
|
6004
|
+
lighting_type: HPXML::LightingTypeCFL)
|
6005
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6006
|
+
location: HPXML::LocationInterior,
|
6007
|
+
fraction_of_units_in_location: args[:lighting_interior_fraction_lfl],
|
6008
|
+
lighting_type: HPXML::LightingTypeLFL)
|
6009
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6010
|
+
location: HPXML::LocationInterior,
|
6011
|
+
fraction_of_units_in_location: args[:lighting_interior_fraction_led],
|
6012
|
+
lighting_type: HPXML::LightingTypeLED)
|
6013
|
+
hpxml_bldg.lighting.interior_usage_multiplier = interior_usage_multiplier
|
5725
6014
|
end
|
5726
6015
|
|
5727
6016
|
# Exterior
|
@@ -5729,19 +6018,19 @@ class HPXMLFile
|
|
5729
6018
|
exterior_usage_multiplier = args[:lighting_exterior_usage_multiplier].get
|
5730
6019
|
end
|
5731
6020
|
if exterior_usage_multiplier.nil? || exterior_usage_multiplier.to_f > 0
|
5732
|
-
|
5733
|
-
|
5734
|
-
|
5735
|
-
|
5736
|
-
|
5737
|
-
|
5738
|
-
|
5739
|
-
|
5740
|
-
|
5741
|
-
|
5742
|
-
|
5743
|
-
|
5744
|
-
|
6021
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6022
|
+
location: HPXML::LocationExterior,
|
6023
|
+
fraction_of_units_in_location: args[:lighting_exterior_fraction_cfl],
|
6024
|
+
lighting_type: HPXML::LightingTypeCFL)
|
6025
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6026
|
+
location: HPXML::LocationExterior,
|
6027
|
+
fraction_of_units_in_location: args[:lighting_exterior_fraction_lfl],
|
6028
|
+
lighting_type: HPXML::LightingTypeLFL)
|
6029
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6030
|
+
location: HPXML::LocationExterior,
|
6031
|
+
fraction_of_units_in_location: args[:lighting_exterior_fraction_led],
|
6032
|
+
lighting_type: HPXML::LightingTypeLED)
|
6033
|
+
hpxml_bldg.lighting.exterior_usage_multiplier = exterior_usage_multiplier
|
5745
6034
|
end
|
5746
6035
|
|
5747
6036
|
# Garage
|
@@ -5750,41 +6039,41 @@ class HPXMLFile
|
|
5750
6039
|
garage_usage_multiplier = args[:lighting_garage_usage_multiplier].get
|
5751
6040
|
end
|
5752
6041
|
if garage_usage_multiplier.nil? || garage_usage_multiplier.to_f > 0
|
5753
|
-
|
5754
|
-
|
5755
|
-
|
5756
|
-
|
5757
|
-
|
5758
|
-
|
5759
|
-
|
5760
|
-
|
5761
|
-
|
5762
|
-
|
5763
|
-
|
5764
|
-
|
5765
|
-
|
6042
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6043
|
+
location: HPXML::LocationGarage,
|
6044
|
+
fraction_of_units_in_location: args[:lighting_garage_fraction_cfl],
|
6045
|
+
lighting_type: HPXML::LightingTypeCFL)
|
6046
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6047
|
+
location: HPXML::LocationGarage,
|
6048
|
+
fraction_of_units_in_location: args[:lighting_garage_fraction_lfl],
|
6049
|
+
lighting_type: HPXML::LightingTypeLFL)
|
6050
|
+
hpxml_bldg.lighting_groups.add(id: "LightingGroup#{hpxml_bldg.lighting_groups.size + 1}",
|
6051
|
+
location: HPXML::LocationGarage,
|
6052
|
+
fraction_of_units_in_location: args[:lighting_garage_fraction_led],
|
6053
|
+
lighting_type: HPXML::LightingTypeLED)
|
6054
|
+
hpxml_bldg.lighting.garage_usage_multiplier = garage_usage_multiplier
|
5766
6055
|
end
|
5767
6056
|
end
|
5768
6057
|
end
|
5769
6058
|
|
5770
6059
|
return unless args[:holiday_lighting_present]
|
5771
6060
|
|
5772
|
-
|
6061
|
+
hpxml_bldg.lighting.holiday_exists = true
|
5773
6062
|
|
5774
6063
|
if args[:holiday_lighting_daily_kwh].is_initialized
|
5775
|
-
|
6064
|
+
hpxml_bldg.lighting.holiday_kwh_per_day = args[:holiday_lighting_daily_kwh].get
|
5776
6065
|
end
|
5777
6066
|
|
5778
6067
|
if args[:holiday_lighting_period].is_initialized
|
5779
6068
|
begin_month, begin_day, _begin_hour, end_month, end_day, _end_hour = Schedule.parse_date_time_range(args[:holiday_lighting_period].get)
|
5780
|
-
|
5781
|
-
|
5782
|
-
|
5783
|
-
|
6069
|
+
hpxml_bldg.lighting.holiday_period_begin_month = begin_month
|
6070
|
+
hpxml_bldg.lighting.holiday_period_begin_day = begin_day
|
6071
|
+
hpxml_bldg.lighting.holiday_period_end_month = end_month
|
6072
|
+
hpxml_bldg.lighting.holiday_period_end_day = end_day
|
5784
6073
|
end
|
5785
6074
|
end
|
5786
6075
|
|
5787
|
-
def self.set_dehumidifier(
|
6076
|
+
def self.set_dehumidifier(hpxml_bldg, args)
|
5788
6077
|
return if args[:dehumidifier_type] == 'none'
|
5789
6078
|
|
5790
6079
|
if args[:dehumidifier_efficiency_type] == 'EnergyFactor'
|
@@ -5793,17 +6082,17 @@ class HPXMLFile
|
|
5793
6082
|
integrated_energy_factor = args[:dehumidifier_efficiency]
|
5794
6083
|
end
|
5795
6084
|
|
5796
|
-
|
5797
|
-
|
5798
|
-
|
5799
|
-
|
5800
|
-
|
5801
|
-
|
5802
|
-
|
5803
|
-
|
6085
|
+
hpxml_bldg.dehumidifiers.add(id: "Dehumidifier#{hpxml_bldg.dehumidifiers.size + 1}",
|
6086
|
+
type: args[:dehumidifier_type],
|
6087
|
+
capacity: args[:dehumidifier_capacity],
|
6088
|
+
energy_factor: energy_factor,
|
6089
|
+
integrated_energy_factor: integrated_energy_factor,
|
6090
|
+
rh_setpoint: args[:dehumidifier_rh_setpoint],
|
6091
|
+
fraction_served: args[:dehumidifier_fraction_dehumidification_load_served],
|
6092
|
+
location: HPXML::LocationConditionedSpace)
|
5804
6093
|
end
|
5805
6094
|
|
5806
|
-
def self.set_clothes_washer(
|
6095
|
+
def self.set_clothes_washer(hpxml_bldg, args)
|
5807
6096
|
return if args[:water_heater_type] == 'none'
|
5808
6097
|
return unless args[:clothes_washer_present]
|
5809
6098
|
|
@@ -5847,20 +6136,20 @@ class HPXMLFile
|
|
5847
6136
|
usage_multiplier = args[:clothes_washer_usage_multiplier].get
|
5848
6137
|
end
|
5849
6138
|
|
5850
|
-
|
5851
|
-
|
5852
|
-
|
5853
|
-
|
5854
|
-
|
5855
|
-
|
5856
|
-
|
5857
|
-
|
5858
|
-
|
5859
|
-
|
5860
|
-
|
6139
|
+
hpxml_bldg.clothes_washers.add(id: "ClothesWasher#{hpxml_bldg.clothes_washers.size + 1}",
|
6140
|
+
location: location,
|
6141
|
+
modified_energy_factor: modified_energy_factor,
|
6142
|
+
integrated_modified_energy_factor: integrated_modified_energy_factor,
|
6143
|
+
rated_annual_kwh: rated_annual_kwh,
|
6144
|
+
label_electric_rate: label_electric_rate,
|
6145
|
+
label_gas_rate: label_gas_rate,
|
6146
|
+
label_annual_gas_cost: label_annual_gas_cost,
|
6147
|
+
label_usage: label_usage,
|
6148
|
+
capacity: capacity,
|
6149
|
+
usage_multiplier: usage_multiplier)
|
5861
6150
|
end
|
5862
6151
|
|
5863
|
-
def self.set_clothes_dryer(
|
6152
|
+
def self.set_clothes_dryer(hpxml_bldg, args)
|
5864
6153
|
return if args[:water_heater_type] == 'none'
|
5865
6154
|
return unless args[:clothes_washer_present]
|
5866
6155
|
return unless args[:clothes_dryer_present]
|
@@ -5889,17 +6178,17 @@ class HPXMLFile
|
|
5889
6178
|
usage_multiplier = args[:clothes_dryer_usage_multiplier].get
|
5890
6179
|
end
|
5891
6180
|
|
5892
|
-
|
5893
|
-
|
5894
|
-
|
5895
|
-
|
5896
|
-
|
5897
|
-
|
5898
|
-
|
5899
|
-
|
6181
|
+
hpxml_bldg.clothes_dryers.add(id: "ClothesDryer#{hpxml_bldg.clothes_dryers.size + 1}",
|
6182
|
+
location: location,
|
6183
|
+
fuel_type: args[:clothes_dryer_fuel_type],
|
6184
|
+
energy_factor: energy_factor,
|
6185
|
+
combined_energy_factor: combined_energy_factor,
|
6186
|
+
is_vented: is_vented,
|
6187
|
+
vented_flow_rate: vented_flow_rate,
|
6188
|
+
usage_multiplier: usage_multiplier)
|
5900
6189
|
end
|
5901
6190
|
|
5902
|
-
def self.set_dishwasher(
|
6191
|
+
def self.set_dishwasher(hpxml_bldg, args)
|
5903
6192
|
return if args[:water_heater_type] == 'none'
|
5904
6193
|
return unless args[:dishwasher_present]
|
5905
6194
|
|
@@ -5941,19 +6230,19 @@ class HPXMLFile
|
|
5941
6230
|
usage_multiplier = args[:dishwasher_usage_multiplier].get
|
5942
6231
|
end
|
5943
6232
|
|
5944
|
-
|
5945
|
-
|
5946
|
-
|
5947
|
-
|
5948
|
-
|
5949
|
-
|
5950
|
-
|
5951
|
-
|
5952
|
-
|
5953
|
-
|
6233
|
+
hpxml_bldg.dishwashers.add(id: "Dishwasher#{hpxml_bldg.dishwashers.size + 1}",
|
6234
|
+
location: location,
|
6235
|
+
rated_annual_kwh: rated_annual_kwh,
|
6236
|
+
energy_factor: energy_factor,
|
6237
|
+
label_electric_rate: label_electric_rate,
|
6238
|
+
label_gas_rate: label_gas_rate,
|
6239
|
+
label_annual_gas_cost: label_annual_gas_cost,
|
6240
|
+
label_usage: label_usage,
|
6241
|
+
place_setting_capacity: place_setting_capacity,
|
6242
|
+
usage_multiplier: usage_multiplier)
|
5954
6243
|
end
|
5955
6244
|
|
5956
|
-
def self.set_refrigerator(
|
6245
|
+
def self.set_refrigerator(hpxml_bldg, args)
|
5957
6246
|
return unless args[:refrigerator_present]
|
5958
6247
|
|
5959
6248
|
if args[:refrigerator_rated_annual_kwh].is_initialized
|
@@ -5968,14 +6257,14 @@ class HPXMLFile
|
|
5968
6257
|
usage_multiplier = args[:refrigerator_usage_multiplier].get
|
5969
6258
|
end
|
5970
6259
|
|
5971
|
-
|
5972
|
-
|
5973
|
-
|
5974
|
-
|
5975
|
-
|
6260
|
+
hpxml_bldg.refrigerators.add(id: "Refrigerator#{hpxml_bldg.refrigerators.size + 1}",
|
6261
|
+
location: location,
|
6262
|
+
rated_annual_kwh: rated_annual_kwh,
|
6263
|
+
primary_indicator: true,
|
6264
|
+
usage_multiplier: usage_multiplier)
|
5976
6265
|
end
|
5977
6266
|
|
5978
|
-
def self.set_extra_refrigerator(
|
6267
|
+
def self.set_extra_refrigerator(hpxml_bldg, args)
|
5979
6268
|
return unless args[:extra_refrigerator_present]
|
5980
6269
|
|
5981
6270
|
if args[:extra_refrigerator_rated_annual_kwh].is_initialized
|
@@ -5990,14 +6279,14 @@ class HPXMLFile
|
|
5990
6279
|
usage_multiplier = args[:extra_refrigerator_usage_multiplier].get
|
5991
6280
|
end
|
5992
6281
|
|
5993
|
-
|
5994
|
-
|
5995
|
-
|
5996
|
-
|
5997
|
-
|
6282
|
+
hpxml_bldg.refrigerators.add(id: "Refrigerator#{hpxml_bldg.refrigerators.size + 1}",
|
6283
|
+
location: location,
|
6284
|
+
rated_annual_kwh: rated_annual_kwh,
|
6285
|
+
primary_indicator: false,
|
6286
|
+
usage_multiplier: usage_multiplier)
|
5998
6287
|
end
|
5999
6288
|
|
6000
|
-
def self.set_freezer(
|
6289
|
+
def self.set_freezer(hpxml_bldg, args)
|
6001
6290
|
return unless args[:freezer_present]
|
6002
6291
|
|
6003
6292
|
if args[:freezer_rated_annual_kwh].is_initialized
|
@@ -6012,13 +6301,13 @@ class HPXMLFile
|
|
6012
6301
|
usage_multiplier = args[:freezer_usage_multiplier].get
|
6013
6302
|
end
|
6014
6303
|
|
6015
|
-
|
6016
|
-
|
6017
|
-
|
6018
|
-
|
6304
|
+
hpxml_bldg.freezers.add(id: "Freezer#{hpxml_bldg.freezers.size + 1}",
|
6305
|
+
location: location,
|
6306
|
+
rated_annual_kwh: rated_annual_kwh,
|
6307
|
+
usage_multiplier: usage_multiplier)
|
6019
6308
|
end
|
6020
6309
|
|
6021
|
-
def self.set_cooking_range_oven(
|
6310
|
+
def self.set_cooking_range_oven(hpxml_bldg, args)
|
6022
6311
|
return unless args[:cooking_range_oven_present]
|
6023
6312
|
|
6024
6313
|
if args[:cooking_range_oven_location].is_initialized
|
@@ -6033,21 +6322,21 @@ class HPXMLFile
|
|
6033
6322
|
usage_multiplier = args[:cooking_range_oven_usage_multiplier].get
|
6034
6323
|
end
|
6035
6324
|
|
6036
|
-
|
6037
|
-
|
6038
|
-
|
6039
|
-
|
6040
|
-
|
6325
|
+
hpxml_bldg.cooking_ranges.add(id: "CookingRange#{hpxml_bldg.cooking_ranges.size + 1}",
|
6326
|
+
location: location,
|
6327
|
+
fuel_type: args[:cooking_range_oven_fuel_type],
|
6328
|
+
is_induction: is_induction,
|
6329
|
+
usage_multiplier: usage_multiplier)
|
6041
6330
|
|
6042
6331
|
if args[:cooking_range_oven_is_convection].is_initialized
|
6043
6332
|
is_convection = args[:cooking_range_oven_is_convection].get
|
6044
6333
|
end
|
6045
6334
|
|
6046
|
-
|
6047
|
-
|
6335
|
+
hpxml_bldg.ovens.add(id: "Oven#{hpxml_bldg.ovens.size + 1}",
|
6336
|
+
is_convection: is_convection)
|
6048
6337
|
end
|
6049
6338
|
|
6050
|
-
def self.set_ceiling_fans(
|
6339
|
+
def self.set_ceiling_fans(hpxml_bldg, args)
|
6051
6340
|
return unless args[:ceiling_fan_present]
|
6052
6341
|
|
6053
6342
|
if args[:ceiling_fan_efficiency].is_initialized
|
@@ -6058,12 +6347,12 @@ class HPXMLFile
|
|
6058
6347
|
quantity = args[:ceiling_fan_quantity].get
|
6059
6348
|
end
|
6060
6349
|
|
6061
|
-
|
6062
|
-
|
6063
|
-
|
6350
|
+
hpxml_bldg.ceiling_fans.add(id: "CeilingFan#{hpxml_bldg.ceiling_fans.size + 1}",
|
6351
|
+
efficiency: efficiency,
|
6352
|
+
count: quantity)
|
6064
6353
|
end
|
6065
6354
|
|
6066
|
-
def self.set_misc_plug_loads_television(
|
6355
|
+
def self.set_misc_plug_loads_television(hpxml_bldg, args)
|
6067
6356
|
return unless args[:misc_plug_loads_television_present]
|
6068
6357
|
|
6069
6358
|
if args[:misc_plug_loads_television_annual_kwh].is_initialized
|
@@ -6074,13 +6363,13 @@ class HPXMLFile
|
|
6074
6363
|
usage_multiplier = args[:misc_plug_loads_television_usage_multiplier].get
|
6075
6364
|
end
|
6076
6365
|
|
6077
|
-
|
6078
|
-
|
6079
|
-
|
6080
|
-
|
6366
|
+
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
|
6367
|
+
plug_load_type: HPXML::PlugLoadTypeTelevision,
|
6368
|
+
kwh_per_year: kwh_per_year,
|
6369
|
+
usage_multiplier: usage_multiplier)
|
6081
6370
|
end
|
6082
6371
|
|
6083
|
-
def self.set_misc_plug_loads_other(
|
6372
|
+
def self.set_misc_plug_loads_other(hpxml_bldg, args)
|
6084
6373
|
if args[:misc_plug_loads_other_annual_kwh].is_initialized
|
6085
6374
|
kwh_per_year = args[:misc_plug_loads_other_annual_kwh].get
|
6086
6375
|
end
|
@@ -6097,15 +6386,15 @@ class HPXMLFile
|
|
6097
6386
|
usage_multiplier = args[:misc_plug_loads_other_usage_multiplier].get
|
6098
6387
|
end
|
6099
6388
|
|
6100
|
-
|
6101
|
-
|
6102
|
-
|
6103
|
-
|
6104
|
-
|
6105
|
-
|
6389
|
+
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
|
6390
|
+
plug_load_type: HPXML::PlugLoadTypeOther,
|
6391
|
+
kwh_per_year: kwh_per_year,
|
6392
|
+
frac_sensible: frac_sensible,
|
6393
|
+
frac_latent: frac_latent,
|
6394
|
+
usage_multiplier: usage_multiplier)
|
6106
6395
|
end
|
6107
6396
|
|
6108
|
-
def self.set_misc_plug_loads_well_pump(
|
6397
|
+
def self.set_misc_plug_loads_well_pump(hpxml_bldg, args)
|
6109
6398
|
return unless args[:misc_plug_loads_well_pump_present]
|
6110
6399
|
|
6111
6400
|
if args[:misc_plug_loads_well_pump_annual_kwh].is_initialized
|
@@ -6116,13 +6405,13 @@ class HPXMLFile
|
|
6116
6405
|
usage_multiplier = args[:misc_plug_loads_well_pump_usage_multiplier].get
|
6117
6406
|
end
|
6118
6407
|
|
6119
|
-
|
6120
|
-
|
6121
|
-
|
6122
|
-
|
6408
|
+
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
|
6409
|
+
plug_load_type: HPXML::PlugLoadTypeWellPump,
|
6410
|
+
kwh_per_year: kwh_per_year,
|
6411
|
+
usage_multiplier: usage_multiplier)
|
6123
6412
|
end
|
6124
6413
|
|
6125
|
-
def self.set_misc_plug_loads_vehicle(
|
6414
|
+
def self.set_misc_plug_loads_vehicle(hpxml_bldg, args)
|
6126
6415
|
return unless args[:misc_plug_loads_vehicle_present]
|
6127
6416
|
|
6128
6417
|
if args[:misc_plug_loads_vehicle_annual_kwh].is_initialized
|
@@ -6133,13 +6422,13 @@ class HPXMLFile
|
|
6133
6422
|
usage_multiplier = args[:misc_plug_loads_vehicle_usage_multiplier].get
|
6134
6423
|
end
|
6135
6424
|
|
6136
|
-
|
6137
|
-
|
6138
|
-
|
6139
|
-
|
6425
|
+
hpxml_bldg.plug_loads.add(id: "PlugLoad#{hpxml_bldg.plug_loads.size + 1}",
|
6426
|
+
plug_load_type: HPXML::PlugLoadTypeElectricVehicleCharging,
|
6427
|
+
kwh_per_year: kwh_per_year,
|
6428
|
+
usage_multiplier: usage_multiplier)
|
6140
6429
|
end
|
6141
6430
|
|
6142
|
-
def self.set_misc_fuel_loads_grill(
|
6431
|
+
def self.set_misc_fuel_loads_grill(hpxml_bldg, args)
|
6143
6432
|
return unless args[:misc_fuel_loads_grill_present]
|
6144
6433
|
|
6145
6434
|
if args[:misc_fuel_loads_grill_annual_therm].is_initialized
|
@@ -6150,14 +6439,14 @@ class HPXMLFile
|
|
6150
6439
|
usage_multiplier = args[:misc_fuel_loads_grill_usage_multiplier].get
|
6151
6440
|
end
|
6152
6441
|
|
6153
|
-
|
6154
|
-
|
6155
|
-
|
6156
|
-
|
6157
|
-
|
6442
|
+
hpxml_bldg.fuel_loads.add(id: "FuelLoad#{hpxml_bldg.fuel_loads.size + 1}",
|
6443
|
+
fuel_load_type: HPXML::FuelLoadTypeGrill,
|
6444
|
+
fuel_type: args[:misc_fuel_loads_grill_fuel_type],
|
6445
|
+
therm_per_year: therm_per_year,
|
6446
|
+
usage_multiplier: usage_multiplier)
|
6158
6447
|
end
|
6159
6448
|
|
6160
|
-
def self.set_misc_fuel_loads_lighting(
|
6449
|
+
def self.set_misc_fuel_loads_lighting(hpxml_bldg, args)
|
6161
6450
|
return unless args[:misc_fuel_loads_lighting_present]
|
6162
6451
|
|
6163
6452
|
if args[:misc_fuel_loads_lighting_annual_therm].is_initialized
|
@@ -6168,14 +6457,14 @@ class HPXMLFile
|
|
6168
6457
|
usage_multiplier = args[:misc_fuel_loads_lighting_usage_multiplier].get
|
6169
6458
|
end
|
6170
6459
|
|
6171
|
-
|
6172
|
-
|
6173
|
-
|
6174
|
-
|
6175
|
-
|
6460
|
+
hpxml_bldg.fuel_loads.add(id: "FuelLoad#{hpxml_bldg.fuel_loads.size + 1}",
|
6461
|
+
fuel_load_type: HPXML::FuelLoadTypeLighting,
|
6462
|
+
fuel_type: args[:misc_fuel_loads_lighting_fuel_type],
|
6463
|
+
therm_per_year: therm_per_year,
|
6464
|
+
usage_multiplier: usage_multiplier)
|
6176
6465
|
end
|
6177
6466
|
|
6178
|
-
def self.set_misc_fuel_loads_fireplace(
|
6467
|
+
def self.set_misc_fuel_loads_fireplace(hpxml_bldg, args)
|
6179
6468
|
return unless args[:misc_fuel_loads_fireplace_present]
|
6180
6469
|
|
6181
6470
|
if args[:misc_fuel_loads_fireplace_annual_therm].is_initialized
|
@@ -6194,16 +6483,16 @@ class HPXMLFile
|
|
6194
6483
|
usage_multiplier = args[:misc_fuel_loads_fireplace_usage_multiplier].get
|
6195
6484
|
end
|
6196
6485
|
|
6197
|
-
|
6198
|
-
|
6199
|
-
|
6200
|
-
|
6201
|
-
|
6202
|
-
|
6203
|
-
|
6486
|
+
hpxml_bldg.fuel_loads.add(id: "FuelLoad#{hpxml_bldg.fuel_loads.size + 1}",
|
6487
|
+
fuel_load_type: HPXML::FuelLoadTypeFireplace,
|
6488
|
+
fuel_type: args[:misc_fuel_loads_fireplace_fuel_type],
|
6489
|
+
therm_per_year: therm_per_year,
|
6490
|
+
frac_sensible: frac_sensible,
|
6491
|
+
frac_latent: frac_latent,
|
6492
|
+
usage_multiplier: usage_multiplier)
|
6204
6493
|
end
|
6205
6494
|
|
6206
|
-
def self.set_pool(
|
6495
|
+
def self.set_pool(hpxml_bldg, args)
|
6207
6496
|
return unless args[:pool_present]
|
6208
6497
|
|
6209
6498
|
if args[:pool_pump_annual_kwh].is_initialized
|
@@ -6234,101 +6523,101 @@ class HPXMLFile
|
|
6234
6523
|
heater_usage_multiplier = args[:pool_heater_usage_multiplier].get
|
6235
6524
|
end
|
6236
6525
|
|
6237
|
-
|
6238
|
-
|
6239
|
-
|
6240
|
-
|
6241
|
-
|
6242
|
-
|
6243
|
-
|
6244
|
-
|
6245
|
-
|
6526
|
+
hpxml_bldg.pools.add(id: "Pool#{hpxml_bldg.pools.size + 1}",
|
6527
|
+
type: HPXML::TypeUnknown,
|
6528
|
+
pump_type: HPXML::TypeUnknown,
|
6529
|
+
pump_kwh_per_year: pump_kwh_per_year,
|
6530
|
+
pump_usage_multiplier: pump_usage_multiplier,
|
6531
|
+
heater_type: pool_heater_type,
|
6532
|
+
heater_load_units: heater_load_units,
|
6533
|
+
heater_load_value: heater_load_value,
|
6534
|
+
heater_usage_multiplier: heater_usage_multiplier)
|
6246
6535
|
end
|
6247
6536
|
|
6248
|
-
def self.
|
6249
|
-
return unless args[:
|
6537
|
+
def self.set_permanent_spa(hpxml_bldg, args)
|
6538
|
+
return unless args[:permanent_spa_present]
|
6250
6539
|
|
6251
|
-
if args[:
|
6252
|
-
pump_kwh_per_year = args[:
|
6540
|
+
if args[:permanent_spa_pump_annual_kwh].is_initialized
|
6541
|
+
pump_kwh_per_year = args[:permanent_spa_pump_annual_kwh].get
|
6253
6542
|
end
|
6254
6543
|
|
6255
|
-
if args[:
|
6256
|
-
pump_usage_multiplier = args[:
|
6544
|
+
if args[:permanent_spa_pump_usage_multiplier].is_initialized
|
6545
|
+
pump_usage_multiplier = args[:permanent_spa_pump_usage_multiplier].get
|
6257
6546
|
end
|
6258
6547
|
|
6259
|
-
|
6548
|
+
permanent_spa_heater_type = args[:permanent_spa_heater_type]
|
6260
6549
|
|
6261
|
-
if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(
|
6262
|
-
if args[:
|
6550
|
+
if [HPXML::HeaterTypeElectricResistance, HPXML::HeaterTypeHeatPump].include?(permanent_spa_heater_type)
|
6551
|
+
if args[:permanent_spa_heater_annual_kwh].is_initialized
|
6263
6552
|
heater_load_units = HPXML::UnitsKwhPerYear
|
6264
|
-
heater_load_value = args[:
|
6553
|
+
heater_load_value = args[:permanent_spa_heater_annual_kwh].get
|
6265
6554
|
end
|
6266
6555
|
end
|
6267
6556
|
|
6268
|
-
if [HPXML::HeaterTypeGas].include?(
|
6269
|
-
if args[:
|
6557
|
+
if [HPXML::HeaterTypeGas].include?(permanent_spa_heater_type)
|
6558
|
+
if args[:permanent_spa_heater_annual_therm].is_initialized
|
6270
6559
|
heater_load_units = HPXML::UnitsThermPerYear
|
6271
|
-
heater_load_value = args[:
|
6560
|
+
heater_load_value = args[:permanent_spa_heater_annual_therm].get
|
6272
6561
|
end
|
6273
6562
|
end
|
6274
6563
|
|
6275
|
-
if args[:
|
6276
|
-
heater_usage_multiplier = args[:
|
6564
|
+
if args[:permanent_spa_heater_usage_multiplier].is_initialized
|
6565
|
+
heater_usage_multiplier = args[:permanent_spa_heater_usage_multiplier].get
|
6277
6566
|
end
|
6278
6567
|
|
6279
|
-
|
6280
|
-
|
6281
|
-
|
6282
|
-
|
6283
|
-
|
6284
|
-
|
6285
|
-
|
6286
|
-
|
6287
|
-
|
6568
|
+
hpxml_bldg.permanent_spas.add(id: "PermanentSpa#{hpxml_bldg.permanent_spas.size + 1}",
|
6569
|
+
type: HPXML::TypeUnknown,
|
6570
|
+
pump_type: HPXML::TypeUnknown,
|
6571
|
+
pump_kwh_per_year: pump_kwh_per_year,
|
6572
|
+
pump_usage_multiplier: pump_usage_multiplier,
|
6573
|
+
heater_type: permanent_spa_heater_type,
|
6574
|
+
heater_load_units: heater_load_units,
|
6575
|
+
heater_load_value: heater_load_value,
|
6576
|
+
heater_usage_multiplier: heater_usage_multiplier)
|
6288
6577
|
end
|
6289
6578
|
|
6290
|
-
def self.collapse_surfaces(
|
6579
|
+
def self.collapse_surfaces(hpxml_bldg, args)
|
6291
6580
|
if args[:combine_like_surfaces].is_initialized && args[:combine_like_surfaces].get
|
6292
6581
|
# Collapse some surfaces whose azimuth is a minor effect to simplify HPXMLs.
|
6293
|
-
(
|
6582
|
+
(hpxml_bldg.roofs + hpxml_bldg.rim_joists + hpxml_bldg.walls + hpxml_bldg.foundation_walls).each do |surface|
|
6294
6583
|
surface.azimuth = nil
|
6295
6584
|
end
|
6296
|
-
|
6585
|
+
hpxml_bldg.collapse_enclosure_surfaces()
|
6297
6586
|
else
|
6298
6587
|
# Collapse surfaces so that we don't get, e.g., individual windows
|
6299
6588
|
# or the front wall split because of the door. Exclude foundation walls
|
6300
6589
|
# from the list so we get all 4 foundation walls.
|
6301
|
-
|
6302
|
-
|
6590
|
+
hpxml_bldg.collapse_enclosure_surfaces([:roofs, :walls, :rim_joists, :floors,
|
6591
|
+
:slabs, :windows, :skylights, :doors])
|
6303
6592
|
end
|
6304
6593
|
|
6305
6594
|
# After surfaces are collapsed, round all areas
|
6306
|
-
(
|
6307
|
-
|
6308
|
-
|
6309
|
-
|
6310
|
-
|
6311
|
-
|
6312
|
-
|
6313
|
-
|
6314
|
-
|
6595
|
+
(hpxml_bldg.roofs +
|
6596
|
+
hpxml_bldg.rim_joists +
|
6597
|
+
hpxml_bldg.walls +
|
6598
|
+
hpxml_bldg.foundation_walls +
|
6599
|
+
hpxml_bldg.floors +
|
6600
|
+
hpxml_bldg.slabs +
|
6601
|
+
hpxml_bldg.windows +
|
6602
|
+
hpxml_bldg.skylights +
|
6603
|
+
hpxml_bldg.doors).each do |s|
|
6315
6604
|
s.area = s.area.round(1)
|
6316
6605
|
end
|
6317
6606
|
end
|
6318
6607
|
|
6319
|
-
def self.renumber_hpxml_ids(
|
6608
|
+
def self.renumber_hpxml_ids(hpxml_bldg)
|
6320
6609
|
# Renumber surfaces
|
6321
|
-
{
|
6322
|
-
|
6323
|
-
|
6324
|
-
|
6325
|
-
|
6326
|
-
|
6327
|
-
|
6328
|
-
|
6329
|
-
|
6610
|
+
{ hpxml_bldg.walls => 'Wall',
|
6611
|
+
hpxml_bldg.foundation_walls => 'FoundationWall',
|
6612
|
+
hpxml_bldg.rim_joists => 'RimJoist',
|
6613
|
+
hpxml_bldg.floors => 'Floor',
|
6614
|
+
hpxml_bldg.roofs => 'Roof',
|
6615
|
+
hpxml_bldg.slabs => 'Slab',
|
6616
|
+
hpxml_bldg.windows => 'Window',
|
6617
|
+
hpxml_bldg.doors => 'Door',
|
6618
|
+
hpxml_bldg.skylights => 'Skylight' }.each do |surfs, surf_name|
|
6330
6619
|
surfs.each_with_index do |surf, i|
|
6331
|
-
(
|
6620
|
+
(hpxml_bldg.attics + hpxml_bldg.foundations).each do |attic_or_fnd|
|
6332
6621
|
if attic_or_fnd.respond_to?(:attached_to_roof_idrefs) && !attic_or_fnd.attached_to_roof_idrefs.nil? && !attic_or_fnd.attached_to_roof_idrefs.delete(surf.id).nil?
|
6333
6622
|
attic_or_fnd.attached_to_roof_idrefs << "#{surf_name}#{i + 1}"
|
6334
6623
|
end
|
@@ -6348,12 +6637,12 @@ class HPXMLFile
|
|
6348
6637
|
attic_or_fnd.attached_to_foundation_wall_idrefs << "#{surf_name}#{i + 1}"
|
6349
6638
|
end
|
6350
6639
|
end
|
6351
|
-
(
|
6640
|
+
(hpxml_bldg.windows + hpxml_bldg.doors).each do |subsurf|
|
6352
6641
|
if subsurf.respond_to?(:wall_idref) && (subsurf.wall_idref == surf.id)
|
6353
6642
|
subsurf.wall_idref = "#{surf_name}#{i + 1}"
|
6354
6643
|
end
|
6355
6644
|
end
|
6356
|
-
|
6645
|
+
hpxml_bldg.skylights.each do |subsurf|
|
6357
6646
|
if subsurf.respond_to?(:roof_idref) && (subsurf.roof_idref == surf.id)
|
6358
6647
|
subsurf.roof_idref = "#{surf_name}#{i + 1}"
|
6359
6648
|
end
|