urbanopt-cli 0.6.2 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +32 -0
- data/CMakeLists.txt +23 -23
- data/FindOpenStudioSDK.cmake +6 -6
- data/Gemfile +5 -5
- data/example_files/Gemfile +10 -7
- data/example_files/base_workflow_res.osw +10 -0
- data/example_files/example_project_combined.json +13 -3
- data/example_files/example_project_with_PV.json +751 -0
- data/example_files/mappers/Baseline.rb +51 -30
- data/example_files/mappers/CreateBar.rb +37 -0
- data/example_files/mappers/FlexibleHotWater.rb +69 -0
- data/example_files/mappers/Floorspace.rb +30 -0
- data/example_files/mappers/HighEfficiency.rb +5 -4
- data/example_files/mappers/base_workflow.osw +5 -0
- data/example_files/mappers/createbar_workflow.osw +3 -1
- data/example_files/mappers/floorspace_workflow.osw +2 -1
- data/example_files/measures/BuildResidentialModel/measure.rb +109 -76
- data/example_files/osm_building/7.osm +0 -307
- data/example_files/osm_building/8.osm +0 -419
- data/example_files/osm_building/9.osm +0 -664
- data/example_files/reopt/base_assumptions.json +3 -3
- data/example_files/reopt/multiPV_assumptions.json +2 -2
- data/example_files/residential/enclosure.tsv +102 -102
- data/example_files/resources/hpxml-measures/.github/workflows/config.yml +22 -16
- data/example_files/resources/hpxml-measures/.gitignore +3 -7
- data/example_files/resources/hpxml-measures/.rubocop.yml +67 -8
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.rb +1752 -1455
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/measure.xml +3229 -5431
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/geometry.rb +386 -553
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/build_residential_hpxml_test.rb +1075 -363
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +212 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +898 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules.rb +109 -188
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_README.md +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_dryer_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_dryer_consumption_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_dryer_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_dryer_duration_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_washer_consumption_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_clothes_washer_duration_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.json +2 -2
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_config.md +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_consumption_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_cooking_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_cooking_duration_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_consumption_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_consumption_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_power_duration_dist.csv → BuildResidentialScheduleFile/resources/schedules_dishwasher_duration_dist.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_cluster_size_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_clothes_washer_cluster_size_probability.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_clothes_washer_event_duration_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_clothes_washer_event_duration_probability.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_cluster_size_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_dishwasher_cluster_size_probability.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML/resources/schedules_dishwasher_event_duration_probability.csv → BuildResidentialScheduleFile/resources/schedules_hot_water_dishwasher_event_duration_probability.csv} +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_cluster_size_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_shower_event_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_0.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_1.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_2.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_initial_prob_cluster_3.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_0.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_1.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_2.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_mkv_chain_transition_prob_cluster_3.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekday_state_and_monthly_schedule_shift.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_0_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_1_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_2_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_cooking_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_dishwashing_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_laundry_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_evening_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_midday_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_duration_probability_cluster_3_shower_morning_duration_probability.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_0.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_1.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_2.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_initial_prob_cluster_3.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_0.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_1.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_2.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_mkv_chain_transition_prob_cluster_3.csv +0 -0
- data/example_files/resources/hpxml-measures/{BuildResidentialHPXML → BuildResidentialScheduleFile}/resources/schedules_weekend_state_and_monthly_schedule_shift.csv +0 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +526 -0
- data/example_files/resources/hpxml-measures/Changelog.md +84 -8
- data/example_files/resources/hpxml-measures/Gemfile +3 -0
- data/example_files/resources/hpxml-measures/Gemfile.lock +3 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.rb +387 -387
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +167 -251
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/BaseElements.xsd +275 -59
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/EPvalidator.xml +471 -247
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXML.xsd +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLDataTypes.xsd +171 -79
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/HPXMLvalidator.xml +155 -78
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb +188 -141
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +83 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constants.rb +99 -11
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb +558 -342
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/energyplus.rb +2 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb +64 -72
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +96 -93
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb +965 -350
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +887 -216
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb +664 -760
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb +306 -287
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb +20 -29
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/location.rb +0 -20
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_hvac_equipment_efficiency.csv +493 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/lu_water_heater_efficiency.csv +157 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/materials.rb +156 -108
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/meta_measure.rb +41 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/minitest_helper.rb +14 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb +18 -18
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/pv.rb +14 -7
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/smooth.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic-vacancy.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedule_files/stochastic.csv +8761 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb +431 -428
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/validator.rb +21 -12
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +3 -3
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +245 -234
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/weather.rb +10 -5
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/xmlhelper.rb +19 -8
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb +44 -23
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_battery.rb +241 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +1374 -297
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_enclosure.rb +702 -55
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_generator.rb +0 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hotwater_appliance.rb +1 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb +238 -40
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_pv.rb +0 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb +186 -0
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_validation.rb +955 -176
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_water_heater.rb +47 -61
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/util.rb +1 -1
- data/example_files/resources/hpxml-measures/LICENSE.md +1 -1
- data/example_files/resources/hpxml-measures/README.md +12 -9
- data/example_files/resources/hpxml-measures/Rakefile +1 -1
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.rb +448 -0
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/measure.xml +81 -0
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/resources/constants.rb +71 -0
- data/example_files/resources/hpxml-measures/ReportHPXMLOutput/tests/hpxml_output_report_test.rb +232 -0
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +1977 -0
- data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/measure.xml +682 -31
- data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/resources/constants.rb +20 -2
- data/example_files/resources/hpxml-measures/{SimulationOutputReport → ReportSimulationOutput}/tests/output_report_test.rb +83 -218
- data/example_files/resources/hpxml-measures/docs/source/index.rst +1 -2
- data/example_files/resources/hpxml-measures/docs/source/intro.rst +6 -3
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +73 -0
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +915 -494
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +263 -111
- data/example_files/resources/hpxml-measures/tasks.rb +3830 -6981
- data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC-cache.csv +35 -0
- data/example_files/resources/hpxml-measures/weather/ZAF_Cape.Town.688160_IWEC.epw +8768 -0
- data/example_files/resources/hpxml-measures/workflow/run_simulation.rb +25 -5
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-coal.xml +102 -91
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-portable.xml +93 -83
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-ief-whole-home.xml +93 -83
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier-multiple.xml +93 -83
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-dehumidifier.xml +93 -83
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-gas.xml +102 -91
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-modified.xml +103 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-none.xml +96 -85
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-oil.xml +102 -91
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-propane.xml +102 -91
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-appliances-wood.xml +102 -91
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-cathedral.xml +96 -125
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-conditioned.xml +119 -104
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-flat.xml +94 -89
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-radiant-barrier.xml +93 -83
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-unvented-insulated-roof.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-atticroof-vented.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-battery-outside.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multifamily-buffer-space.xml +99 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-multiple.xml +119 -79
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-non-freezing-space.xml +99 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-heated-space.xml +99 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-adjacent-to-other-housing-unit.xml +99 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-baseboard.xml +97 -66
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil-ducted.xml +97 -66
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-fan-coil.xml +97 -66
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-chiller-water-loop-heat-pump.xml +100 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-cooling-tower-water-loop-heat-pump.xml +100 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-baseboard.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-ducted.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil-eae.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-fan-coil.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-boiler-only-water-loop-heat-pump.xml +97 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-baseboard.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil-ducted.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-fan-coil.xml +94 -65
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-chiller-only-water-loop-heat-pump.xml +97 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-cooling-tower-only-water-loop-heat-pump.xml +97 -68
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-generator.xml +98 -67
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-ground-loop-ground-to-air-heat-pump.xml +96 -64
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-laundry-room.xml +105 -84
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-multiple.xml +108 -77
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent-preconditioning.xml +100 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-mechvent.xml +100 -69
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-pv.xml +98 -67
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater-recirc.xml +97 -66
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily-shared-water-heater.xml +97 -66
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-multifamily.xml +97 -66
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-facility-type-surfaces.xml → base-bldgtype-single-family-attached-2stories.xml} +152 -167
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-bldgtype-single-family-attached.xml +124 -114
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless-outside.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-combi-tankless.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-2-speed.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-gshp.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-hpwh.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-tankless.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater-var-speed.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-desuperheater.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-dwhr.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-dse.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-outside.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-standbyloss.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect-with-solar-fraction.xml +104 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-indirect.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-electric.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-gas.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-hpwh.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-jacket-indirect.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-low-flow-fixtures.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-multiple.xml +108 -101
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-none.xml +96 -85
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-demand.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-manual.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-nocontrol.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-temperature.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-recirc-timer.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-evacuated-tube.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-flat-plate.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-direct-ics.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-fraction.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-indirect-flat-plate.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-solar-thermosyphon-flat-plate.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-coal.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-elec-uef.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-outside.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef-fhr.xml +574 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas-uef.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-gas.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-outside.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-uef.xml +105 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar-fraction.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump-with-solar.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-heat-pump.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-oil.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tank-wood.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-outside.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric-uef.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-electric.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-uef.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar-fraction.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas-with-solar.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-gas.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-dhw-tankless-propane.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories-garage.xml +131 -119
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-2stories.xml +120 -99
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-1.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-2.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-4.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-beds-5.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-garage.xml +131 -118
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-ach-house-pressure.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm-house-pressure.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-cfm50.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-flue.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-infil-natural-ach.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-orientations.xml +579 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-overhangs.xml +110 -101
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-rooftypes.xml +213 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-id.xml → base-enclosure-skylights-physical-properties.xml} +123 -105
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights-shading.xml +114 -105
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-skylights.xml +112 -103
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-level.xml +92 -82
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces.xml +533 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-split-surfaces2.xml +545 -559
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/generator-output-greater-than-consumption.xml → base-enclosure-thermal-mass.xml} +117 -111
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-walltypes.xml +239 -109
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-none.xml +88 -79
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-physical-properties.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-enclosure-windows-shading.xml +115 -106
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-ambient.xml +89 -79
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-basement-garage.xml +123 -110
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-complex.xml +119 -172
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-slab-insulation.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-basement-wall-interior-insulation.xml +107 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-conditioned-crawlspace.xml +572 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-multiple.xml +119 -128
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-slab.xml +92 -82
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-above-grade.xml +117 -110
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-assembly-r.xml +106 -91
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement-wall-insulation.xml +107 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unconditioned-basement.xml +105 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-unvented-crawlspace.xml +108 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-vented-crawlspace.xml +108 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-foundation-walkout-basement.xml +115 -110
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed-heating-only.xml +103 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-1-speed.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-2-speed.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml +590 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml +589 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-air-to-air-heat-pump-var-speed.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-cooling-only.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-heating-only.xml +105 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed-manual-s-oversize-allowances.xml +103 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-1-speed.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed-manual-s-oversize-allowances.xml +103 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-2-speed.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-invalid-distribution-system-type.xml → base-hvac-autosize-air-to-air-heat-pump-var-speed-backup-boiler.xml} +587 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed-manual-s-oversize-allowances.xml +103 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-air-to-air-heat-pump-var-speed.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-elec-only.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-central-ac-1-speed.xml +103 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-boiler-gas-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-1-speed.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-2-speed.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-only-var-speed.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-central-ac-plus-air-to-air-heat-pump-heating.xml +108 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-air-to-air-heat-pump-1-speed.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-dual-fuel-mini-split-heat-pump-ducted.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-elec-resistance-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-evap-cooler-furnace-gas.xml +103 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-floor-furnace-propane-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-elec-only.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-2-speed.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-central-ac-var-speed.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-furnace-gas-room-ac.xml +103 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-cooling-only.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-heating-only.xml +105 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump-manual-s-oversize-allowances.xml +103 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-ground-to-air-heat-pump.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-air-conditioner-only-ducted.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-cooling-only.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-heating-only.xml +105 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted-manual-s-oversize-allowances.xml +103 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ducted.xml +106 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-mini-split-heat-pump-ductless-backup-stove.xml +541 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-relatedhvac-dhw-indirect.xml → base-hvac-autosize-ptac-with-heating.xml} +528 -517
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/boiler-invalid-afue.xml → base-hvac-autosize-ptac.xml} +109 -113
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-pthp.xml +531 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-room-ac-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-stove-oil-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize-wall-furnace-elec-only.xml +100 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-autosize.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-coal-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-elec-only.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-central-ac-1-speed.xml +103 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-gas-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-oil-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-propane-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-boiler-wood-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-1-speed.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-2-speed.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-only-var-speed.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.xml +106 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dse.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-dual-fuel-mini-split-heat-pump-ducted.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/unattached-solar-thermal-system.xml → base-hvac-ducts-area-fractions.xml} +596 -577
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.xml → base-hvac-ducts-leakage-cfm50.xml} +108 -106
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ducts-leakage-percent.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-elec-resistance-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-furnace-gas.xml +103 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only-ducted.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-evap-cooler-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fireplace-wood-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-fixed-heater-gas-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-floor-furnace-propane-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-coal-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-central-ac-1-speed.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-elec-only.xml +102 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-2-speed.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-central-ac-var-speed.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-gas-room-ac.xml +103 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-oil-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-propane-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-wood-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-furnace-x3-dse.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-cooling-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump-heating-only.xml +102 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-ground-to-air-heat-pump.xml +103 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-1-speed.xml} +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-2-speed.xml} +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.xml → base-hvac-install-quality-air-to-air-heat-pump-var-speed.xml} +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-1-speed.xml} +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-2-speed.xml} +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.xml → base-hvac-install-quality-furnace-gas-central-ac-var-speed.xml} +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-furnace-gas-only.xml → base-hvac-install-quality-furnace-gas-only.xml} +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-ground-to-air-heat-pump.xml → base-hvac-install-quality-ground-to-air-heat-pump.xml} +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.xml → base-hvac-install-quality-mini-split-air-conditioner-only-ducted.xml} +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-all-mini-split-heat-pump-ducted.xml → base-hvac-install-quality-mini-split-heat-pump-ducted.xml} +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ducted.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-air-conditioner-only-ductless.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-cooling-only.xml +101 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted-heating-only.xml +103 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ducted.xml +104 -94
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless-backup-stove.xml +542 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-mini-split-heat-pump-ductless.xml +101 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-multiple.xml +124 -100
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-none.xml +94 -89
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-portable-heater-gas-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat-detailed.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-programmable-thermostat.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/cfis-with-hydronic-distribution.xml → base-hvac-ptac-with-heating.xml} +530 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/hvac-distribution-return-duct-leakage-missing.xml → base-hvac-ptac.xml} +515 -528
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-pthp.xml +531 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-33percent.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only-ceer.xml +516 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-room-ac-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-seasons.xml +584 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-setpoints.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-oil-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-stove-wood-pellets-only.xml +99 -92
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized-allow-increased-fixed-capacities.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-undersized.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-hvac-wall-furnace-elec-only.xml +100 -93
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans.xml +110 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-holiday.xml +586 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-lighting-none.xml +95 -86
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-AMY-2012.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-baltimore-md.xml +108 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/invalid-foundation-wall-properties.xml → base-location-capetown-zaf.xml} +134 -127
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-dallas-tx.xml +92 -82
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-duluth-mn.xml +105 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-helena-mt.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-honolulu-hi.xml +92 -82
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-miami-fl.xml +92 -82
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-phoenix-az.xml +92 -82
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-location-portland-or.xml +108 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-balanced.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-bath-kitchen-fans.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-dse.xml +107 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis-evap-cooler-only-ducted.xml +104 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-cfis.xml +107 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv-atre-asre.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-erv.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust-rated-flow-rate.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-exhaust.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv-asre.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-hrv.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-multiple.xml +141 -114
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-supply.xml +106 -97
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-mechvent-whole-house-fan.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-defaults.xml +101 -101
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-generators.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon.xml +157 -112
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-large-uncommon2.xml +157 -112
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-loads-none.xml +96 -87
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-neighbor-shading.xml +108 -99
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-shielding-of-home.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-misc-usage-multiplier.xml +113 -102
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-multiple-buildings.xml +318 -291
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-ah.xml +608 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/enclosure-garage-missing-roof-ceiling.xml → base-pv-battery-garage.xml} +678 -626
- data/example_files/resources/hpxml-measures/workflow/sample_files/{invalid_files/multifamily-reference-surface.xml → base-pv-battery-outside-degrades.xml} +610 -575
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv-battery-outside.xml +608 -0
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-pv.xml +105 -96
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-smooth.xml} +105 -101
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-stochastic-vacancy.xml} +105 -98
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-hvac-install-quality-blower-efficiency-furnace-gas-central-ac-1-speed.xml → base-schedules-detailed-stochastic.xml} +105 -101
- data/example_files/resources/hpxml-measures/workflow/sample_files/{base-lighting-detailed.xml → base-schedules-simple.xml} +625 -585
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-calendar-year-custom.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-custom.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-daylight-saving-disabled.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-runperiod-1-month.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-simcontrol-timestep-10-mins.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/sample_files/base.xml +104 -95
- data/example_files/resources/hpxml-measures/workflow/template-build-hpxml-and-stocastic-schedules.osw +129 -0
- data/example_files/resources/hpxml-measures/workflow/template-stochastic-schedules.osw +53 -0
- data/example_files/resources/hpxml-measures/workflow/template.osw +7 -2
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L100AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L110AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L120AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L130AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AC.xml +63 -32
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L140AL.xml +63 -32
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AC.xml +66 -35
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L150AL.xml +66 -35
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AC.xml +66 -35
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L155AL.xml +66 -35
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AC.xml +69 -38
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L160AL.xml +69 -38
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L170AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L200AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AC.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L202AL.xml +75 -44
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L302XC.xml +78 -47
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L304XC.xml +78 -47
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L322XC.xml +114 -103
- data/example_files/resources/hpxml-measures/workflow/tests/ASHRAE_Standard_140/L324XC.xml +126 -103
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +321 -294
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_ashrae_140.csv +26 -26
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results_hvac_sizing.csv +320 -293
- data/example_files/resources/hpxml-measures/workflow/tests/compare.py +351 -0
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +253 -260
- data/example_files/visualization/input_visualization_feature.html +14 -5
- data/example_files/visualization/input_visualization_scenario.html +12 -6
- data/example_files/weather/USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.ddy +17 -17
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +66 -17
- data/uo_cli.gemspec +6 -6
- metadata +219 -639
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/resources/constants.rb +0 -59
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-coal.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-portable.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier-ief-whole-home.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-dehumidifier.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-gas.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-modified.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-none.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-oil.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-propane.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-appliances-wood.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-flat.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-radiant-barrier.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-unvented-insulated-roof.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-atticroof-vented.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-baseboard.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-boiler-only-fan-coil.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent-preconditioning.osw +0 -348
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-mechvent.osw +0 -342
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-pv.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily-shared-water-heater.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-multifamily.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-bldgtype-single-family-attached.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless-outside.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-combi-tankless.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-dwhr.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-outside.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-standbyloss.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect-with-solar-fraction.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-indirect.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-electric.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-gas.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-hpwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-jacket-indirect.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-low-flow-fixtures.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-none.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-demand.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-manual.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-nocontrol.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-temperature.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-recirc-timer.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-evacuated-tube.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-flat-plate.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-direct-ics.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-fraction.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-indirect-flat-plate.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-solar-thermosyphon-flat-plate.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-coal.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-elec-uef.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-outside.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas-uef.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-gas.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-outside.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-uef.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar-fraction.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump-with-solar.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-heat-pump.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-oil.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tank-wood.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-outside.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric-uef.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-electric.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-uef.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar-fraction.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas-with-solar.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-gas.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-dhw-tankless-propane.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories-garage.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-2stories.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-1.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-2.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-4.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-beds-5.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-garage.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-ach-house-pressure.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm-house-pressure.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-cfm50.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-flue.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-infil-natural-ach.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-overhangs.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-enclosure-windows-none.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-ambient.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-conditioned-basement-slab-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-slab.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-assembly-r.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement-wall-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unconditioned-basement.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-unvented-crawlspace.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-foundation-vented-crawlspace.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-cooling-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed-heating-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-1-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-2-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-air-to-air-heat-pump-var-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-coal-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-elec-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-central-ac-1-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-gas-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-oil-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-propane-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-boiler-wood-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-1-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-2-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-only-var-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-central-ac-plus-air-to-air-heat-pump-heating.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed-electric.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-1-speed.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-2-speed.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-air-to-air-heat-pump-var-speed.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-dual-fuel-mini-split-heat-pump-ducted.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ducts-leakage-percent.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-elec-resistance-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-furnace-gas.osw +0 -335
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only-ducted.osw +0 -335
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-evap-cooler-only.osw +0 -335
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fireplace-wood-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-fixed-heater-gas-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-floor-furnace-propane-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-coal-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-central-ac-1-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-elec-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-2-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-central-ac-var-speed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-gas-room-ac.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-oil-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-propane-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-furnace-wood-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-cooling-only.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump-heating-only.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-ground-to-air-heat-pump.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-airflow-defect-furnace-gas-central-ac-1-speed.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-1-speed.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-2-speed.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-air-to-air-heat-pump-var-speed.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-1-speed.osw +0 -340
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-2-speed.osw +0 -340
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-central-ac-var-speed.osw +0 -340
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-furnace-gas-only.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-ground-to-air-heat-pump.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-air-conditioner-only-ducted.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-all-mini-split-heat-pump-ducted.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-charge-defect-furnace-gas-central-ac-1-speed.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-install-quality-none-furnace-gas-central-ac-1-speed.osw +0 -340
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ducted.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-air-conditioner-only-ductless.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-cooling-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted-heating-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ducted.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-mini-split-heat-pump-ductless.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-none.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-portable-heater-gas-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-programmable-thermostat-detailed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only-33percent.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-room-ac-only.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-setpoints.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-oil-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-stove-wood-pellets-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-undersized.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-hvac-wall-furnace-elec-only.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-ceiling-fans.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-lighting-detailed.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-AMY-2012.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-baltimore-md.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-dallas-tx.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-duluth-mn.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-helena-mt.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-honolulu-hi.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-miami-fl.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-phoenix-az.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-location-portland-or.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-balanced.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-bath-kitchen-fans.osw +0 -345
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis-evap-cooler-only-ducted.osw +0 -335
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-cfis.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv-atre-asre.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-erv.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust-rated-flow-rate.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-exhaust.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv-asre.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-hrv.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-supply.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-mechvent-whole-house-fan.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-defaults.osw +0 -324
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-loads-large-uncommon2.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-neighbor-shading.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-shielding-of-home.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-misc-usage-multiplier.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-pv.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic-vacant.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-stochastic.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-schedules-user-specified.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-calendar-year-custom.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-custom.osw +0 -342
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-daylight-saving-disabled.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-runperiod-1-month.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base-simcontrol-timestep-10-mins.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/base.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-auto.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-exterior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-eaves.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-single-exterior-front.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-left-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-middle-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab-right-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-slab.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-left-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-middle-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace-right-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-unvented-crawlspace.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-left-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-middle-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-bottom.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-middle.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top-double-loaded-interior.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace-right-top.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-multifamily-vented-crawlspace.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-gable.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-conditioned-eaves-hip.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-atticroof-flat.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-exterior.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-double-loaded-interior.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-single-exterior-front.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-middle.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab-right.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-slab.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-middle.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement-right.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unconditioned-basement.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-middle.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace-right.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-unvented-crawlspace.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-middle.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace-right.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-bldgtype-single-family-attached-vented-crawlspace.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-dhw-solar-latitude.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-gable.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-atticroof-conditioned-eaves-hip.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-atticroof-conditioned.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-garage-partially-protruded.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-enclosure-windows-shading.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-hot-tub-heater-with-zero-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-gas-pool-heater-with-zero-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-pv-roofpitch.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-schedules-random-seed.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heat-pump.osw +0 -336
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-boiler-to-heating-system.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heat-pump.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-fireplace-to-heating-system.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heat-pump.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-heating-system-portable-heater-to-heating-system.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-second-refrigerator.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-clothes-washer-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-dishwasher-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-extra-refrigerator-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-freezer-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/extra-zero-refrigerator-kwh.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-floor-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-attic-with-one-floor-above-grade.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/conditioned-basement-with-ceiling-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/cooling-system-and-heat-pump.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/dhw-indirect-without-boiler.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/ducts-location-and-areas-not-same-type.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/foundation-wall-insulation-greater-than-height.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/heating-system-and-heat-pump.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-crawlspace-zero-foundation-height.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-bottom-slab-non-zero-foundation-height.osw +0 -341
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multifamily-no-building-orientation.osw +0 -338
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-fuel-loads.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-other-plug-loads.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-tv-plug-loads.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-vehicle-plug-loads.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/multipliers-without-well-pump-plug-loads.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-electric-heat-pump-water-heater.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-ceiling-fan-quantity.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/non-integer-geometry-num-bathrooms.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-but-no-primary-heating.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-majority-heat.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/second-heating-system-serves-total-heat-load.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-ambient.osw +0 -339
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-attached-no-building-orientation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-finished-basement-zero-foundation-height.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-slab-non-zero-foundation-height.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/single-family-detached-with-shared-system.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/slab-non-zero-foundation-height-above-grade.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unconditioned-basement-with-wall-and-ceiling-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-attic-with-floor-and-roof-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/unvented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-attic-with-floor-and-roof-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/vented-crawlspace-with-wall-and-ceiling-insulation.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/invalid_files/zero-number-of-bedrooms.osw +0 -337
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/stochastic.csv +0 -8761
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/user-specified.csv +0 -8761
- data/example_files/resources/hpxml-measures/BuildResidentialHPXML/tests/schedules/vacant.csv +0 -8761
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_1bed.csv +0 -369
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_2bed.csv +0 -465
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_3bed.csv +0 -611
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_4bed.csv +0 -685
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_bath_schedule_5bed.csv +0 -767
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_1bed.csv +0 -637
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_2bed.csv +0 -744
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_3bed.csv +0 -929
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_4bed.csv +0 -1044
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_clotheswasher_schedule_5bed.csv +0 -1250
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_1bed.csv +0 -754
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_2bed.csv +0 -961
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_3bed.csv +0 -1102
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_4bed.csv +0 -1293
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_dishwasher_schedule_5bed.csv +0 -1508
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_1bed.csv +0 -13097
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_2bed.csv +0 -15977
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_3bed.csv +0 -18624
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_4bed.csv +0 -22075
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_fixtures_schedule_5bed.csv +0 -25005
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/data_hot_water_max_flows.csv +0 -6
- data/example_files/resources/hpxml-measures/SimulationOutputReport/measure.rb +0 -2444
- data/example_files/resources/hpxml-measures/docs/source/build_residential_hpxml.rst +0 -110
- data/example_files/resources/hpxml-measures/docs/source/getting_started.rst +0 -57
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic-vacant.xml +0 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-stochastic.xml +0 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/base-schedules-user-specified.xml +0 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-dryer-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/clothes-washer-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/cooking-range-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-fraction-served.xml +0 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dehumidifier-setpoints.xml +0 -535
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-frac-load-served.xml +0 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-ef-tank.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dhw-invalid-uef-tank-heat-pump.xml +0 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/dishwasher-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-cfm25.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-leakage-percent.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location-unconditioned-space.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duct-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/duplicate-id.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-attic-missing-roof.xml +0 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-exterior-foundation-wall.xml +0 -544
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-basement-missing-slab.xml +0 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-floor-area-exceeds-cfa2.xml +0 -448
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-exterior-wall.xml +0 -614
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-garage-missing-slab.xml +0 -611
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-ceiling-roof.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-exterior-wall.xml +0 -473
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/enclosure-living-missing-floor-slab.xml +0 -489
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-fuel-load.xml +0 -760
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-sensible-plug-load.xml +0 -759
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-fuel-load.xml +0 -761
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/frac-total-plug-load.xml +0 -759
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/furnace-invalid-afue.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/generator-number-of-bedrooms-served.xml +0 -460
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/heat-pump-mixed-fixed-and-autosize-capacities.xml +0 -560
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-cooling.xml +0 -921
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-distribution-multiple-attached-heating.xml +0 -921
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-cooling.xml +0 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-dse-multiple-attached-heating.xml +0 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-frac-load-served.xml +0 -921
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-inconsistent-fan-powers.xml +0 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/hvac-shared-negative-seer-eq.xml +0 -407
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-assembly-effective-rvalue.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-boolean.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-float.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-datatype-integer.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-daylight-saving.xml +0 -570
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-distribution-cfa-served.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-epw-filepath.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-facility-type-equipment.xml +0 -466
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-id2.xml +0 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-infiltration-volume.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-input-parameters.xml +0 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-neighbor-shading-azimuth.xml +0 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-bedrooms-served.xml +0 -465
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-conditioned-floors.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-number-of-units-served.xml +0 -451
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-relatedhvac-desuperheater.xml +0 -551
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-runperiod.xml +0 -565
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-schema-version.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-shared-vent-in-unit-flowrate.xml +0 -473
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-timestep.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/invalid-window-height.xml +0 -583
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/lighting-fractions.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-duct-location.xml +0 -917
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/missing-elements.xml +0 -561
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-appliance.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-duct.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multifamily-reference-water-heater.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-without-building-id.xml +0 -1657
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-buildings-wrong-building-id.xml +0 -1657
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-cooling-systems.xml +0 -432
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/multiple-shared-heating-systems.xml +0 -434
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-roof.xml +0 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/net-area-negative-wall.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/num-bedrooms-exceeds-limit.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/orphaned-hvac-distribution.xml +0 -547
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerator-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-multiple-primary.xml +0 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/refrigerators-no-primary.xml +0 -569
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-desuperheater.xml +0 -564
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/repeated-relatedhvac-dhw-indirect.xml +0 -527
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-fraction-one.xml +0 -571
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-combi-tankless.xml +0 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-desuperheater.xml +0 -566
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/solar-thermal-system-with-dhw-indirect.xml +0 -532
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-cfis.xml +0 -576
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-door.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-hvac-distribution.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-clothes-washer-water-heater.xml +0 -466
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-shared-dishwasher-water-heater.xml +0 -466
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-skylight.xml +0 -591
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/unattached-window.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location-other.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/sample_files/invalid_files/water-heater-location.xml +0 -563
- data/example_files/resources/hpxml-measures/workflow/tests/compare.rb +0 -130
@@ -52,10 +52,11 @@ class HPXML < Object
|
|
52
52
|
HPXML_ATTRS = [:header, :site, :neighbor_buildings, :building_occupancy, :building_construction,
|
53
53
|
:climate_and_risk_zones, :air_infiltration_measurements, :attics, :foundations,
|
54
54
|
:roofs, :rim_joists, :walls, :foundation_walls, :frame_floors, :slabs, :windows,
|
55
|
-
:skylights, :doors, :
|
56
|
-
:
|
55
|
+
:skylights, :doors, :partition_wall_mass, :furniture_mass, :heating_systems,
|
56
|
+
:cooling_systems, :heat_pumps, :hvac_plant, :hvac_controls, :hvac_distributions,
|
57
|
+
:ventilation_fans, :water_heating_systems,
|
57
58
|
:hot_water_distributions, :water_fixtures, :water_heating, :solar_thermal_systems,
|
58
|
-
:pv_systems, :generators, :clothes_washers, :clothes_dryers, :dishwashers, :refrigerators,
|
59
|
+
:pv_systems, :generators, :batteries, :clothes_washers, :clothes_dryers, :dishwashers, :refrigerators,
|
59
60
|
:freezers, :dehumidifiers, :cooking_ranges, :ovens, :lighting_groups, :lighting,
|
60
61
|
:ceiling_fans, :pools, :hot_tubs, :plug_loads, :fuel_loads]
|
61
62
|
attr_reader(*HPXML_ATTRS, :doc, :errors, :warnings)
|
@@ -66,11 +67,16 @@ class HPXML < Object
|
|
66
67
|
AirTypeGravity = 'gravity'
|
67
68
|
AirTypeHighVelocity = 'high velocity'
|
68
69
|
AirTypeRegularVelocity = 'regular velocity'
|
70
|
+
AtticTypeBelowApartment = 'BelowApartment'
|
69
71
|
AtticTypeCathedral = 'CathedralCeiling'
|
70
72
|
AtticTypeConditioned = 'ConditionedAttic'
|
71
73
|
AtticTypeFlatRoof = 'FlatRoof'
|
72
74
|
AtticTypeUnvented = 'UnventedAttic'
|
73
75
|
AtticTypeVented = 'VentedAttic'
|
76
|
+
AtticWallTypeGable = 'gable'
|
77
|
+
BatteryTypeLithiumIon = 'Li-ion'
|
78
|
+
BatteryLifetimeModelNone = 'None'
|
79
|
+
BatteryLifetimeModelKandlerSmith = 'KandlerSmith'
|
74
80
|
CertificationEnergyStar = 'Energy Star'
|
75
81
|
ClothesDryerControlTypeMoisture = 'moisture'
|
76
82
|
ClothesDryerControlTypeTimer = 'timer'
|
@@ -97,12 +103,22 @@ class HPXML < Object
|
|
97
103
|
DWHRFacilitiesConnectedAll = 'all'
|
98
104
|
DWHRFacilitiesConnectedOne = 'one'
|
99
105
|
ExteriorShadingTypeSolarScreens = 'solar screens'
|
106
|
+
FoundationTypeAboveApartment = 'AboveApartment'
|
100
107
|
FoundationTypeAmbient = 'Ambient'
|
101
108
|
FoundationTypeBasementConditioned = 'ConditionedBasement'
|
102
109
|
FoundationTypeBasementUnconditioned = 'UnconditionedBasement'
|
110
|
+
FoundationTypeCrawlspaceConditioned = 'ConditionedCrawlspace'
|
103
111
|
FoundationTypeCrawlspaceUnvented = 'UnventedCrawlspace'
|
104
112
|
FoundationTypeCrawlspaceVented = 'VentedCrawlspace'
|
105
113
|
FoundationTypeSlab = 'SlabOnGrade'
|
114
|
+
FoundationWallTypeConcreteBlock = 'concrete block'
|
115
|
+
FoundationWallTypeConcreteBlockFoamCore = 'concrete block foam core'
|
116
|
+
FoundationWallTypeConcreteBlockPerliteCore = 'concrete block perlite core'
|
117
|
+
FoundationWallTypeConcreteBlockSolidCore = 'concrete block solid core'
|
118
|
+
FoundationWallTypeConcreteBlockVermiculiteCore = 'concrete block vermiculite core'
|
119
|
+
FoundationWallTypeDoubleBrick = 'double brick'
|
120
|
+
FoundationWallTypeSolidConcrete = 'solid concrete'
|
121
|
+
FoundationWallTypeWood = 'wood'
|
106
122
|
FrameFloorOtherSpaceAbove = 'above'
|
107
123
|
FrameFloorOtherSpaceBelow = 'below'
|
108
124
|
FuelLoadTypeGrill = 'grill'
|
@@ -124,9 +140,13 @@ class HPXML < Object
|
|
124
140
|
FuelTypePropane = 'propane'
|
125
141
|
FuelTypeWoodCord = 'wood'
|
126
142
|
FuelTypeWoodPellets = 'wood pellets'
|
143
|
+
FurnitureMassTypeLightWeight = 'light-weight'
|
144
|
+
FurnitureMassTypeHeavyWeight = 'heavy-weight'
|
127
145
|
HeaterTypeElectricResistance = 'electric resistance'
|
128
146
|
HeaterTypeGas = 'gas fired'
|
129
147
|
HeaterTypeHeatPump = 'heat pump'
|
148
|
+
HeatPumpBackupTypeIntegrated = 'integrated'
|
149
|
+
HeatPumpBackupTypeSeparate = 'separate'
|
130
150
|
HVACCompressorTypeSingleStage = 'single stage'
|
131
151
|
HVACCompressorTypeTwoStage = 'two stage'
|
132
152
|
HVACCompressorTypeVariableSpeed = 'variable speed'
|
@@ -145,13 +165,16 @@ class HPXML < Object
|
|
145
165
|
HVACTypeFixedHeater = 'FixedHeater'
|
146
166
|
HVACTypeFloorFurnace = 'FloorFurnace'
|
147
167
|
HVACTypeFurnace = 'Furnace'
|
168
|
+
HVACTypePTACHeating = 'PackagedTerminalAirConditionerHeating'
|
148
169
|
HVACTypeHeatPumpAirToAir = 'air-to-air'
|
149
170
|
HVACTypeHeatPumpGroundToAir = 'ground-to-air'
|
150
171
|
HVACTypeHeatPumpMiniSplit = 'mini-split'
|
151
172
|
HVACTypeHeatPumpWaterLoopToAir = 'water-loop-to-air'
|
173
|
+
HVACTypeHeatPumpPTHP = 'packaged terminal heat pump'
|
152
174
|
HVACTypeMiniSplitAirConditioner = 'mini-split'
|
153
175
|
HVACTypePortableHeater = 'PortableHeater'
|
154
176
|
HVACTypeRoomAirConditioner = 'room air conditioner'
|
177
|
+
HVACTypePTAC = 'packaged terminal air conditioner'
|
155
178
|
HVACTypeStove = 'Stove'
|
156
179
|
HVACTypeWallFurnace = 'WallFurnace'
|
157
180
|
HydronicTypeBaseboard = 'baseboard'
|
@@ -159,6 +182,11 @@ class HPXML < Object
|
|
159
182
|
HydronicTypeRadiantFloor = 'radiant floor'
|
160
183
|
HydronicTypeRadiator = 'radiator'
|
161
184
|
HydronicTypeWaterLoop = 'water loop'
|
185
|
+
InteriorFinishGypsumBoard = 'gypsum board'
|
186
|
+
InteriorFinishGypsumCompositeBoard = 'gypsum composite board'
|
187
|
+
InteriorFinishNone = 'none'
|
188
|
+
InteriorFinishPlaster = 'plaster'
|
189
|
+
InteriorFinishWood = 'wood'
|
162
190
|
LeakinessTight = 'tight'
|
163
191
|
LeakinessAverage = 'average'
|
164
192
|
LightingTypeCFL = 'CompactFluorescent'
|
@@ -170,6 +198,7 @@ class HPXML < Object
|
|
170
198
|
LocationBasementConditioned = 'basement - conditioned'
|
171
199
|
LocationBasementUnconditioned = 'basement - unconditioned'
|
172
200
|
LocationBath = 'bath'
|
201
|
+
LocationCrawlspaceConditioned = 'crawlspace - conditioned'
|
173
202
|
LocationCrawlspaceUnvented = 'crawlspace - unvented'
|
174
203
|
LocationCrawlspaceVented = 'crawlspace - vented'
|
175
204
|
LocationExterior = 'exterior'
|
@@ -220,17 +249,25 @@ class HPXML < Object
|
|
220
249
|
ResidentialTypeSFD = 'single-family detached'
|
221
250
|
RoofTypeAsphaltShingles = 'asphalt or fiberglass shingles'
|
222
251
|
RoofTypeConcrete = 'concrete'
|
252
|
+
RoofTypeCool = 'cool roof'
|
223
253
|
RoofTypeClayTile = 'slate or tile shingles'
|
254
|
+
RoofTypeEPS = 'expanded polystyrene sheathing'
|
224
255
|
RoofTypeMetal = 'metal surfacing'
|
225
256
|
RoofTypePlasticRubber = 'plastic/rubber/synthetic sheeting'
|
257
|
+
RoofTypeShingles = 'shingles'
|
226
258
|
RoofTypeWoodShingles = 'wood shingles or shakes'
|
227
259
|
ShieldingExposed = 'exposed'
|
228
260
|
ShieldingNormal = 'normal'
|
229
261
|
ShieldingWellShielded = 'well-shielded'
|
230
262
|
SidingTypeAluminum = 'aluminum siding'
|
263
|
+
SidingTypeAsbestos = 'asbestos siding'
|
231
264
|
SidingTypeBrick = 'brick veneer'
|
265
|
+
SidingTypeCompositeShingle = 'composite shingle siding'
|
232
266
|
SidingTypeFiberCement = 'fiber cement siding'
|
267
|
+
SidingTypeMasonite = 'masonite siding'
|
268
|
+
SidingTypeNone = 'none'
|
233
269
|
SidingTypeStucco = 'stucco'
|
270
|
+
SidingTypeSyntheticStucco = 'synthetic stucco'
|
234
271
|
SidingTypeVinyl = 'vinyl siding'
|
235
272
|
SidingTypeWood = 'wood siding'
|
236
273
|
SiteTypeUrban = 'urban'
|
@@ -239,26 +276,40 @@ class HPXML < Object
|
|
239
276
|
SolarThermalLoopTypeDirect = 'liquid direct'
|
240
277
|
SolarThermalLoopTypeIndirect = 'liquid indirect'
|
241
278
|
SolarThermalLoopTypeThermosyphon = 'passive thermosyphon'
|
279
|
+
SolarThermalSystemType = 'hot water'
|
242
280
|
SolarThermalTypeDoubleGlazing = 'double glazing black'
|
243
281
|
SolarThermalTypeEvacuatedTube = 'evacuated tube'
|
244
282
|
SolarThermalTypeICS = 'integrated collector storage'
|
245
283
|
SolarThermalTypeSingleGlazing = 'single glazing black'
|
284
|
+
SurroundingsOneSide = 'attached on one side'
|
285
|
+
SurroundingsTwoSides = 'attached on two sides'
|
286
|
+
SurroundingsThreeSides = 'attached on three sides'
|
287
|
+
SurroundingsStandAlone = 'stand-alone'
|
246
288
|
TypeNone = 'none'
|
247
289
|
TypeUnknown = 'unknown'
|
248
290
|
UnitsACH = 'ACH'
|
249
291
|
UnitsACHNatural = 'ACHnatural'
|
250
292
|
UnitsAFUE = 'AFUE'
|
293
|
+
UnitsAh = 'Ah'
|
251
294
|
UnitsCFM = 'CFM'
|
252
295
|
UnitsCFM25 = 'CFM25'
|
296
|
+
UnitsCFM50 = 'CFM50'
|
253
297
|
UnitsCOP = 'COP'
|
254
298
|
UnitsEER = 'EER'
|
299
|
+
UnitsCEER = 'CEER'
|
255
300
|
UnitsHSPF = 'HSPF'
|
301
|
+
UnitsKwh = 'kWh'
|
256
302
|
UnitsKwhPerYear = 'kWh/year'
|
303
|
+
UnitsKwhPerDay = 'kWh/day'
|
257
304
|
UnitsKwPerTon = 'kW/ton'
|
258
305
|
UnitsPercent = 'Percent'
|
259
306
|
UnitsSEER = 'SEER'
|
260
307
|
UnitsSLA = 'SLA'
|
261
308
|
UnitsThermPerYear = 'therm/year'
|
309
|
+
VerticalSurroundingsNoAboveOrBelow = 'no units above or below'
|
310
|
+
VerticalSurroundingsAboveAndBelow = 'unit above and below'
|
311
|
+
VerticalSurroundingsBelow = 'unit below'
|
312
|
+
VerticalSurroundingsAbove = 'unit above'
|
262
313
|
WallTypeAdobe = 'Adobe'
|
263
314
|
WallTypeBrick = 'StructuralBrick'
|
264
315
|
WallTypeCMU = 'ConcreteMasonryUnit'
|
@@ -278,6 +329,10 @@ class HPXML < Object
|
|
278
329
|
WaterHeaterTypeHeatPump = 'heat pump water heater'
|
279
330
|
WaterHeaterTypeTankless = 'instantaneous water heater'
|
280
331
|
WaterHeaterTypeStorage = 'storage water heater'
|
332
|
+
WaterHeaterUsageBinVerySmall = 'very small'
|
333
|
+
WaterHeaterUsageBinLow = 'low'
|
334
|
+
WaterHeaterUsageBinMedium = 'medium'
|
335
|
+
WaterHeaterUsageBinHigh = 'high'
|
281
336
|
WindowFrameTypeAluminum = 'Aluminum'
|
282
337
|
WindowFrameTypeComposite = 'Composite'
|
283
338
|
WindowFrameTypeFiberglass = 'Fiberglass'
|
@@ -286,10 +341,17 @@ class HPXML < Object
|
|
286
341
|
WindowFrameTypeWood = 'Wood'
|
287
342
|
WindowGasAir = 'air'
|
288
343
|
WindowGasArgon = 'argon'
|
289
|
-
|
290
|
-
|
291
|
-
|
344
|
+
WindowGasKrypton = 'krypton'
|
345
|
+
WindowGasNitrogen = 'nitrogen'
|
346
|
+
WindowGasOther = 'other'
|
347
|
+
WindowGasXenon = 'xenon'
|
348
|
+
WindowGlassTypeClear = 'clear'
|
349
|
+
WindowGlassTypeLowE = 'low-e'
|
350
|
+
WindowGlassTypeReflective = 'reflective'
|
351
|
+
WindowGlassTypeTinted = 'tinted'
|
352
|
+
WindowGlassTypeTintedReflective = 'tinted/reflective'
|
292
353
|
WindowLayersDoublePane = 'double-pane'
|
354
|
+
WindowLayersGlassBlock = 'glass block'
|
293
355
|
WindowLayersSinglePane = 'single-pane'
|
294
356
|
WindowLayersTriplePane = 'triple-pane'
|
295
357
|
WindowClassArchitectural = 'architectural'
|
@@ -355,11 +417,11 @@ class HPXML < Object
|
|
355
417
|
return (@heating_systems + @cooling_systems + @heat_pumps)
|
356
418
|
end
|
357
419
|
|
358
|
-
def
|
359
|
-
#
|
420
|
+
def has_location(location)
|
421
|
+
# Search for surfaces attached to this location
|
360
422
|
(@roofs + @rim_joists + @walls + @foundation_walls + @frame_floors + @slabs).each do |surface|
|
361
|
-
return true if surface.interior_adjacent_to ==
|
362
|
-
return true if surface.exterior_adjacent_to ==
|
423
|
+
return true if surface.interior_adjacent_to == location
|
424
|
+
return true if surface.exterior_adjacent_to == location
|
363
425
|
end
|
364
426
|
return false
|
365
427
|
end
|
@@ -386,7 +448,10 @@ class HPXML < Object
|
|
386
448
|
fuel_fracs[fuel] += heat_pump.fraction_heat_load_served.to_f
|
387
449
|
end
|
388
450
|
return FuelTypeElectricity if fuel_fracs.empty?
|
451
|
+
return FuelTypeElectricity if fuel_fracs[FuelTypeElectricity].to_f > 0.5
|
389
452
|
|
453
|
+
# Choose fossil fuel
|
454
|
+
fuel_fracs.delete FuelTypeElectricity
|
390
455
|
return fuel_fracs.key(fuel_fracs.values.max)
|
391
456
|
end
|
392
457
|
|
@@ -394,11 +459,17 @@ class HPXML < Object
|
|
394
459
|
fuel_fracs = {}
|
395
460
|
@water_heating_systems.each do |water_heating_system|
|
396
461
|
fuel = water_heating_system.fuel_type
|
462
|
+
if fuel.nil? # Combi boiler
|
463
|
+
fuel = water_heating_system.related_hvac_system.heating_system_fuel
|
464
|
+
end
|
397
465
|
fuel_fracs[fuel] = 0.0 if fuel_fracs[fuel].nil?
|
398
466
|
fuel_fracs[fuel] += water_heating_system.fraction_dhw_load_served
|
399
467
|
end
|
400
468
|
return FuelTypeElectricity if fuel_fracs.empty?
|
469
|
+
return FuelTypeElectricity if fuel_fracs[FuelTypeElectricity].to_f > 0.5
|
401
470
|
|
471
|
+
# Choose fossil fuel
|
472
|
+
fuel_fracs.delete FuelTypeElectricity
|
402
473
|
return fuel_fracs.key(fuel_fracs.values.max)
|
403
474
|
end
|
404
475
|
|
@@ -414,6 +485,10 @@ class HPXML < Object
|
|
414
485
|
return window_area_operable / window_area_total
|
415
486
|
end
|
416
487
|
|
488
|
+
def primary_hvac_systems()
|
489
|
+
return hvac_systems.select { |h| h.primary_system }
|
490
|
+
end
|
491
|
+
|
417
492
|
def total_fraction_cool_load_served()
|
418
493
|
return @cooling_systems.total_fraction_cool_load_served + @heat_pumps.total_fraction_cool_load_served
|
419
494
|
end
|
@@ -423,7 +498,7 @@ class HPXML < Object
|
|
423
498
|
end
|
424
499
|
|
425
500
|
def has_walkout_basement()
|
426
|
-
has_conditioned_basement =
|
501
|
+
has_conditioned_basement = has_location(LocationBasementConditioned)
|
427
502
|
ncfl = @building_construction.number_of_conditioned_floors
|
428
503
|
ncfl_ag = @building_construction.number_of_conditioned_floors_above_grade
|
429
504
|
return (has_conditioned_basement && (ncfl == ncfl_ag))
|
@@ -471,7 +546,7 @@ class HPXML < Object
|
|
471
546
|
exterior_area = 0.0 # Same as above excluding surfaces attached to garage or other housing units
|
472
547
|
|
473
548
|
# Determine which spaces are within infiltration volume
|
474
|
-
spaces_within_infil_volume =
|
549
|
+
spaces_within_infil_volume = HPXML::conditioned_locations_this_unit
|
475
550
|
@attics.each do |attic|
|
476
551
|
next unless [AtticTypeUnvented].include? attic.attic_type
|
477
552
|
next unless attic.within_infiltration_volume
|
@@ -479,26 +554,35 @@ class HPXML < Object
|
|
479
554
|
spaces_within_infil_volume << attic.to_location
|
480
555
|
end
|
481
556
|
@foundations.each do |foundation|
|
482
|
-
next unless [FoundationTypeBasementUnconditioned,
|
557
|
+
next unless [FoundationTypeBasementUnconditioned,
|
558
|
+
FoundationTypeCrawlspaceUnvented].include? foundation.foundation_type
|
483
559
|
next unless foundation.within_infiltration_volume
|
484
560
|
|
485
561
|
spaces_within_infil_volume << foundation.to_location
|
486
562
|
end
|
487
563
|
|
488
564
|
# Get surfaces bounding infiltration volume
|
489
|
-
spaces_within_infil_volume.each do |
|
565
|
+
spaces_within_infil_volume.each do |location|
|
490
566
|
(@roofs + @rim_joists + @walls + @foundation_walls + @frame_floors + @slabs).each do |surface|
|
491
|
-
|
567
|
+
is_adiabatic_surface = (surface.interior_adjacent_to == surface.exterior_adjacent_to)
|
568
|
+
next unless [surface.interior_adjacent_to,
|
569
|
+
surface.exterior_adjacent_to].include? location
|
492
570
|
|
493
|
-
|
494
|
-
|
571
|
+
if not is_adiabatic_surface
|
572
|
+
# Exclude surfaces between two different spaces that are both within infiltration volume
|
573
|
+
next if spaces_within_infil_volume.include?(surface.interior_adjacent_to) && spaces_within_infil_volume.include?(surface.exterior_adjacent_to)
|
574
|
+
end
|
495
575
|
|
496
576
|
# Update Compartmentalization Boundary areas
|
497
577
|
total_area += surface.area
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
578
|
+
next unless (not [LocationGarage,
|
579
|
+
LocationOtherHousingUnit,
|
580
|
+
LocationOtherHeatedSpace,
|
581
|
+
LocationOtherMultifamilyBufferSpace,
|
582
|
+
LocationOtherNonFreezingSpace].include? surface.exterior_adjacent_to) &&
|
583
|
+
(not is_adiabatic_surface)
|
584
|
+
|
585
|
+
exterior_area += surface.area
|
502
586
|
end
|
503
587
|
end
|
504
588
|
|
@@ -509,34 +593,47 @@ class HPXML < Object
|
|
509
593
|
# Infiltration height: vertical distance between lowest and highest above-grade points within the pressure boundary.
|
510
594
|
# Height is inferred from available HPXML properties.
|
511
595
|
# The WithinInfiltrationVolume properties are intentionally ignored for now.
|
512
|
-
# FUTURE: Move into AirInfiltrationMeasurement class?
|
513
596
|
cfa = @building_construction.conditioned_floor_area
|
597
|
+
|
514
598
|
ncfl_ag = @building_construction.number_of_conditioned_floors_above_grade
|
515
599
|
if has_walkout_basement()
|
516
600
|
infil_height = ncfl_ag * infil_volume / cfa
|
517
601
|
else
|
518
|
-
|
519
|
-
|
602
|
+
infil_volume -= inferred_conditioned_crawlspace_volume()
|
603
|
+
|
604
|
+
# Calculate maximum above-grade height of conditioned foundation walls
|
605
|
+
max_cond_fnd_wall_height_ag = 0.0
|
520
606
|
@foundation_walls.each do |foundation_wall|
|
521
|
-
next unless foundation_wall.is_exterior && (foundation_wall.interior_adjacent_to
|
607
|
+
next unless foundation_wall.is_exterior && HPXML::conditioned_below_grade_locations.include?(foundation_wall.interior_adjacent_to)
|
522
608
|
|
523
609
|
height_ag = foundation_wall.height - foundation_wall.depth_below_grade
|
524
|
-
next unless height_ag >
|
610
|
+
next unless height_ag > max_cond_fnd_wall_height_ag
|
525
611
|
|
526
|
-
|
612
|
+
max_cond_fnd_wall_height_ag = height_ag
|
527
613
|
end
|
614
|
+
|
528
615
|
# Add assumed rim joist height
|
529
|
-
|
616
|
+
cond_fnd_rim_joist_height = 0
|
530
617
|
@rim_joists.each do |rim_joist|
|
531
|
-
next unless rim_joist.is_exterior && (rim_joist.interior_adjacent_to
|
618
|
+
next unless rim_joist.is_exterior && HPXML::conditioned_below_grade_locations.include?(rim_joist.interior_adjacent_to)
|
532
619
|
|
533
|
-
|
620
|
+
cond_fnd_rim_joist_height = UnitConversions.convert(9, 'in', 'ft')
|
534
621
|
end
|
535
|
-
|
622
|
+
|
623
|
+
infil_height = ncfl_ag * infil_volume / cfa + max_cond_fnd_wall_height_ag + cond_fnd_rim_joist_height
|
536
624
|
end
|
537
625
|
return infil_height
|
538
626
|
end
|
539
627
|
|
628
|
+
def inferred_conditioned_crawlspace_volume
|
629
|
+
if has_location(HPXML::LocationCrawlspaceConditioned)
|
630
|
+
conditioned_crawl_area = @slabs.select { |s| s.interior_adjacent_to == HPXML::LocationCrawlspaceConditioned }.map { |s| s.area }.sum
|
631
|
+
conditioned_crawl_height = @foundation_walls.select { |w| w.interior_adjacent_to == HPXML::LocationCrawlspaceConditioned }.map { |w| w.height }.max
|
632
|
+
return conditioned_crawl_area * conditioned_crawl_height
|
633
|
+
end
|
634
|
+
return 0.0
|
635
|
+
end
|
636
|
+
|
540
637
|
def to_oga()
|
541
638
|
@doc = _create_oga_document()
|
542
639
|
@header.to_oga(@doc)
|
@@ -557,6 +654,8 @@ class HPXML < Object
|
|
557
654
|
@windows.to_oga(@doc)
|
558
655
|
@skylights.to_oga(@doc)
|
559
656
|
@doors.to_oga(@doc)
|
657
|
+
@partition_wall_mass.to_oga(@doc)
|
658
|
+
@furniture_mass.to_oga(@doc)
|
560
659
|
@heating_systems.to_oga(@doc)
|
561
660
|
@cooling_systems.to_oga(@doc)
|
562
661
|
@heat_pumps.to_oga(@doc)
|
@@ -570,6 +669,7 @@ class HPXML < Object
|
|
570
669
|
@water_heating.to_oga(@doc)
|
571
670
|
@solar_thermal_systems.to_oga(@doc)
|
572
671
|
@pv_systems.to_oga(@doc)
|
672
|
+
@batteries.to_oga(@doc)
|
573
673
|
@generators.to_oga(@doc)
|
574
674
|
@clothes_washers.to_oga(@doc)
|
575
675
|
@clothes_dryers.to_oga(@doc)
|
@@ -608,6 +708,8 @@ class HPXML < Object
|
|
608
708
|
@windows = Windows.new(self, hpxml)
|
609
709
|
@skylights = Skylights.new(self, hpxml)
|
610
710
|
@doors = Doors.new(self, hpxml)
|
711
|
+
@partition_wall_mass = PartitionWallMass.new(self, hpxml)
|
712
|
+
@furniture_mass = FurnitureMass.new(self, hpxml)
|
611
713
|
@heating_systems = HeatingSystems.new(self, hpxml)
|
612
714
|
@cooling_systems = CoolingSystems.new(self, hpxml)
|
613
715
|
@heat_pumps = HeatPumps.new(self, hpxml)
|
@@ -621,6 +723,7 @@ class HPXML < Object
|
|
621
723
|
@water_heating = WaterHeating.new(self, hpxml)
|
622
724
|
@solar_thermal_systems = SolarThermalSystems.new(self, hpxml)
|
623
725
|
@pv_systems = PVSystems.new(self, hpxml)
|
726
|
+
@batteries = Batteries.new(self, hpxml)
|
624
727
|
@generators = Generators.new(self, hpxml)
|
625
728
|
@clothes_washers = ClothesWashers.new(self, hpxml)
|
626
729
|
@clothes_dryers = ClothesDryers.new(self, hpxml)
|
@@ -753,11 +856,11 @@ class HPXML < Object
|
|
753
856
|
class Header < BaseElement
|
754
857
|
ATTRS = [:xml_type, :xml_generated_by, :created_date_and_time, :transaction,
|
755
858
|
:software_program_used, :software_program_version, :eri_calculation_version,
|
756
|
-
:eri_design, :timestep, :building_id, :event_type, :state_code,
|
859
|
+
:eri_design, :timestep, :building_id, :event_type, :state_code, :zip_code,
|
757
860
|
:sim_begin_month, :sim_begin_day, :sim_end_month, :sim_end_day, :sim_calendar_year,
|
758
861
|
:dst_enabled, :dst_begin_month, :dst_begin_day, :dst_end_month, :dst_end_day,
|
759
862
|
:use_max_load_for_heat_pumps, :allow_increased_fixed_capacities,
|
760
|
-
:apply_ashrae140_assumptions, :energystar_calculation_version, :
|
863
|
+
:apply_ashrae140_assumptions, :energystar_calculation_version, :schedules_filepath]
|
761
864
|
attr_accessor(*ATTRS)
|
762
865
|
|
763
866
|
def check_for_errors
|
@@ -770,54 +873,25 @@ class HPXML < Object
|
|
770
873
|
end
|
771
874
|
end
|
772
875
|
|
773
|
-
|
774
|
-
next unless not begin_month.nil?
|
775
|
-
|
776
|
-
valid_months = (1..12).to_a
|
777
|
-
if not valid_months.include? begin_month
|
778
|
-
errors << "#{sim_ctl} Begin Month (#{begin_month}) must be one of: #{valid_months.join(', ')}."
|
779
|
-
end
|
780
|
-
end
|
781
|
-
|
782
|
-
{ 'Run Period' => @sim_end_month, 'Daylight Saving' => @dst_end_month }.each do |sim_ctl, end_month|
|
783
|
-
next unless not end_month.nil?
|
876
|
+
errors += HPXML::check_dates('Run Period', @sim_begin_month, @sim_begin_day, @sim_end_month, @sim_end_day)
|
784
877
|
|
785
|
-
|
786
|
-
if
|
787
|
-
errors << "
|
878
|
+
if (not @sim_begin_month.nil?) && (not @sim_end_month.nil?)
|
879
|
+
if @sim_begin_month > @sim_end_month
|
880
|
+
errors << "Run Period Begin Month (#{@sim_begin_month}) cannot come after Run Period End Month (#{@sim_end_month})."
|
788
881
|
end
|
789
|
-
end
|
790
|
-
|
791
|
-
months_days = { [1, 3, 5, 7, 8, 10, 12] => (1..31).to_a, [4, 6, 9, 11] => (1..30).to_a, [2] => (1..28).to_a }
|
792
|
-
months_days.each do |months, valid_days|
|
793
|
-
{ 'Run Period' => [@sim_begin_month, @sim_begin_day, @sim_end_month, @sim_end_day], 'Daylight Saving' => [@dst_begin_month, @dst_begin_day, @dst_end_month, @dst_end_day] }.each do |sim_ctl, months_and_days|
|
794
|
-
begin_month, begin_day, end_month, end_day = months_and_days
|
795
|
-
if (not begin_day.nil?) && (months.include? begin_month)
|
796
|
-
if not valid_days.include? begin_day
|
797
|
-
errors << "#{sim_ctl} Begin Day of Month (#{begin_day}) must be one of: #{valid_days.join(', ')}."
|
798
|
-
end
|
799
|
-
end
|
800
|
-
next unless (not end_day.nil?) && (months.include? end_month)
|
801
882
|
|
802
|
-
|
803
|
-
|
883
|
+
if (not @sim_begin_day.nil?) && (not @sim_end_day.nil?)
|
884
|
+
if @sim_begin_month == @sim_end_month && @sim_begin_day > @sim_end_day
|
885
|
+
errors << "Run Period Begin Day of Month (#{@sim_begin_day}) cannot come after Run Period End Day of Month (#{@sim_end_day}) for the same month (#{begin_month})."
|
804
886
|
end
|
805
887
|
end
|
806
888
|
end
|
807
889
|
|
808
|
-
|
809
|
-
begin_month, begin_day, end_month, end_day = months_and_days
|
810
|
-
next unless (not begin_month.nil?) && (not end_month.nil?)
|
890
|
+
errors += HPXML::check_dates('Daylight Saving', @dst_begin_month, @dst_begin_day, @dst_end_month, @dst_end_day)
|
811
891
|
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
next unless (not begin_day.nil?) && (not end_day.nil?)
|
817
|
-
next unless begin_month == end_month
|
818
|
-
|
819
|
-
if begin_day > end_day
|
820
|
-
errors << "#{sim_ctl} Begin Day of Month (#{begin_day}) cannot come after #{sim_ctl} End Day of Month (#{end_day}) for the same month (#{begin_month})."
|
892
|
+
if not @schedules_filepath.nil?
|
893
|
+
unless File.exist? @schedules_filepath
|
894
|
+
errors << "Schedules file path '#{@schedules_filepath}' does not exist."
|
821
895
|
end
|
822
896
|
end
|
823
897
|
|
@@ -880,9 +954,9 @@ class HPXML < Object
|
|
880
954
|
XMLHelper.add_element(hvac_sizing_control, 'UseMaxLoadForHeatPumps', @use_max_load_for_heat_pumps, :boolean, @use_max_load_for_heat_pumps_isdefaulted) unless @use_max_load_for_heat_pumps.nil?
|
881
955
|
XMLHelper.add_element(hvac_sizing_control, 'AllowIncreasedFixedCapacities', @allow_increased_fixed_capacities, :boolean, @allow_increased_fixed_capacities_isdefaulted) unless @allow_increased_fixed_capacities.nil?
|
882
956
|
end
|
883
|
-
if not @
|
957
|
+
if not @schedules_filepath.nil?
|
884
958
|
extension = XMLHelper.create_elements_as_needed(software_info, ['extension'])
|
885
|
-
XMLHelper.add_element(extension, '
|
959
|
+
XMLHelper.add_element(extension, 'SchedulesFilePath', @schedules_filepath, :string) unless @schedules_filepath.nil?
|
886
960
|
end
|
887
961
|
|
888
962
|
building = XMLHelper.add_element(hpxml, 'Building')
|
@@ -894,6 +968,7 @@ class HPXML < Object
|
|
894
968
|
XMLHelper.add_attribute(site_id, 'id', 'SiteID')
|
895
969
|
address = XMLHelper.add_element(site, 'Address')
|
896
970
|
XMLHelper.add_element(address, 'StateCode', @state_code, :string)
|
971
|
+
XMLHelper.add_element(address, 'ZipCode', @zip_code, :string) unless @zip_code.nil?
|
897
972
|
end
|
898
973
|
project_status = XMLHelper.add_element(building, 'ProjectStatus')
|
899
974
|
XMLHelper.add_element(project_status, 'EventType', @event_type, :string)
|
@@ -925,15 +1000,16 @@ class HPXML < Object
|
|
925
1000
|
@apply_ashrae140_assumptions = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/ApplyASHRAE140Assumptions', :boolean)
|
926
1001
|
@use_max_load_for_heat_pumps = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/UseMaxLoadForHeatPumps', :boolean)
|
927
1002
|
@allow_increased_fixed_capacities = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/HVACSizingControl/AllowIncreasedFixedCapacities', :boolean)
|
928
|
-
@
|
1003
|
+
@schedules_filepath = XMLHelper.get_value(hpxml, 'SoftwareInfo/extension/SchedulesFilePath', :string)
|
929
1004
|
@building_id = HPXML::get_id(hpxml, 'Building/BuildingID')
|
930
1005
|
@event_type = XMLHelper.get_value(hpxml, 'Building/ProjectStatus/EventType', :string)
|
931
1006
|
@state_code = XMLHelper.get_value(hpxml, 'Building/Site/Address/StateCode', :string)
|
1007
|
+
@zip_code = XMLHelper.get_value(hpxml, 'Building/Site/Address/ZipCode', :string)
|
932
1008
|
end
|
933
1009
|
end
|
934
1010
|
|
935
1011
|
class Site < BaseElement
|
936
|
-
ATTRS = [:site_type, :surroundings, :shielding_of_home, :orientation_of_front_of_home, :fuels]
|
1012
|
+
ATTRS = [:site_type, :surroundings, :vertical_surroundings, :shielding_of_home, :orientation_of_front_of_home, :azimuth_of_front_of_home, :fuels]
|
937
1013
|
attr_accessor(*ATTRS)
|
938
1014
|
|
939
1015
|
def check_for_errors
|
@@ -947,14 +1023,21 @@ class HPXML < Object
|
|
947
1023
|
site = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'BuildingSummary', 'Site'])
|
948
1024
|
XMLHelper.add_element(site, 'SiteType', @site_type, :string, @site_type_isdefaulted) unless @site_type.nil?
|
949
1025
|
XMLHelper.add_element(site, 'Surroundings', @surroundings, :string) unless @surroundings.nil?
|
1026
|
+
XMLHelper.add_element(site, 'VerticalSurroundings', @vertical_surroundings, :string) unless @vertical_surroundings.nil?
|
950
1027
|
XMLHelper.add_element(site, 'ShieldingofHome', @shielding_of_home, :string, @shielding_of_home_isdefaulted) unless @shielding_of_home.nil?
|
951
1028
|
XMLHelper.add_element(site, 'OrientationOfFrontOfHome', @orientation_of_front_of_home, :string) unless @orientation_of_front_of_home.nil?
|
1029
|
+
XMLHelper.add_element(site, 'AzimuthOfFrontOfHome', @azimuth_of_front_of_home, :integer) unless @azimuth_of_front_of_home.nil?
|
952
1030
|
if (not @fuels.nil?) && (not @fuels.empty?)
|
953
1031
|
fuel_types_available = XMLHelper.add_element(site, 'FuelTypesAvailable')
|
954
1032
|
@fuels.each do |fuel|
|
955
1033
|
XMLHelper.add_element(fuel_types_available, 'Fuel', fuel, :string)
|
956
1034
|
end
|
957
1035
|
end
|
1036
|
+
|
1037
|
+
if site.children.size == 0
|
1038
|
+
bldg_summary = XMLHelper.get_element(doc, '/HPXML/Building/BuildingDetails/BuildingSummary')
|
1039
|
+
XMLHelper.delete_element(bldg_summary, 'Site')
|
1040
|
+
end
|
958
1041
|
end
|
959
1042
|
|
960
1043
|
def from_oga(hpxml)
|
@@ -965,8 +1048,10 @@ class HPXML < Object
|
|
965
1048
|
|
966
1049
|
@site_type = XMLHelper.get_value(site, 'SiteType', :string)
|
967
1050
|
@surroundings = XMLHelper.get_value(site, 'Surroundings', :string)
|
1051
|
+
@vertical_surroundings = XMLHelper.get_value(site, 'VerticalSurroundings', :string)
|
968
1052
|
@shielding_of_home = XMLHelper.get_value(site, 'ShieldingofHome', :string)
|
969
1053
|
@orientation_of_front_of_home = XMLHelper.get_value(site, 'OrientationOfFrontOfHome', :string)
|
1054
|
+
@azimuth_of_front_of_home = XMLHelper.get_value(site, 'AzimuthOfFrontOfHome', :integer)
|
970
1055
|
@fuels = XMLHelper.get_values(site, 'FuelTypesAvailable/Fuel', :string)
|
971
1056
|
end
|
972
1057
|
end
|
@@ -986,7 +1071,7 @@ class HPXML < Object
|
|
986
1071
|
end
|
987
1072
|
|
988
1073
|
class NeighborBuilding < BaseElement
|
989
|
-
ATTRS = [:azimuth, :distance, :height]
|
1074
|
+
ATTRS = [:azimuth, :orientation, :distance, :height]
|
990
1075
|
attr_accessor(*ATTRS)
|
991
1076
|
|
992
1077
|
def check_for_errors
|
@@ -999,7 +1084,8 @@ class HPXML < Object
|
|
999
1084
|
|
1000
1085
|
neighbors = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'BuildingSummary', 'Site', 'extension', 'Neighbors'])
|
1001
1086
|
neighbor_building = XMLHelper.add_element(neighbors, 'NeighborBuilding')
|
1002
|
-
XMLHelper.add_element(neighbor_building, '
|
1087
|
+
XMLHelper.add_element(neighbor_building, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
1088
|
+
XMLHelper.add_element(neighbor_building, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
1003
1089
|
XMLHelper.add_element(neighbor_building, 'Distance', @distance, :float) unless @distance.nil?
|
1004
1090
|
XMLHelper.add_element(neighbor_building, 'Height', @height, :float) unless @height.nil?
|
1005
1091
|
end
|
@@ -1007,6 +1093,7 @@ class HPXML < Object
|
|
1007
1093
|
def from_oga(neighbor_building)
|
1008
1094
|
return if neighbor_building.nil?
|
1009
1095
|
|
1096
|
+
@orientation = XMLHelper.get_value(neighbor_building, 'Orientation', :string)
|
1010
1097
|
@azimuth = XMLHelper.get_value(neighbor_building, 'Azimuth', :integer)
|
1011
1098
|
@distance = XMLHelper.get_value(neighbor_building, 'Distance', :float)
|
1012
1099
|
@height = XMLHelper.get_value(neighbor_building, 'Height', :float)
|
@@ -1014,7 +1101,7 @@ class HPXML < Object
|
|
1014
1101
|
end
|
1015
1102
|
|
1016
1103
|
class BuildingOccupancy < BaseElement
|
1017
|
-
ATTRS = [:number_of_residents]
|
1104
|
+
ATTRS = [:number_of_residents, :weekday_fractions, :weekend_fractions, :monthly_multipliers]
|
1018
1105
|
attr_accessor(*ATTRS)
|
1019
1106
|
|
1020
1107
|
def check_for_errors
|
@@ -1027,6 +1114,9 @@ class HPXML < Object
|
|
1027
1114
|
|
1028
1115
|
building_occupancy = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'BuildingSummary', 'BuildingOccupancy'])
|
1029
1116
|
XMLHelper.add_element(building_occupancy, 'NumberofResidents', @number_of_residents, :float, @number_of_residents_isdefaulted) unless @number_of_residents.nil?
|
1117
|
+
XMLHelper.add_extension(building_occupancy, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
1118
|
+
XMLHelper.add_extension(building_occupancy, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
1119
|
+
XMLHelper.add_extension(building_occupancy, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
|
1030
1120
|
end
|
1031
1121
|
|
1032
1122
|
def from_oga(hpxml)
|
@@ -1036,6 +1126,9 @@ class HPXML < Object
|
|
1036
1126
|
return if building_occupancy.nil?
|
1037
1127
|
|
1038
1128
|
@number_of_residents = XMLHelper.get_value(building_occupancy, 'NumberofResidents', :float)
|
1129
|
+
@weekday_fractions = XMLHelper.get_value(building_occupancy, 'extension/WeekdayScheduleFractions', :string)
|
1130
|
+
@weekend_fractions = XMLHelper.get_value(building_occupancy, 'extension/WeekendScheduleFractions', :string)
|
1131
|
+
@monthly_multipliers = XMLHelper.get_value(building_occupancy, 'extension/MonthlyScheduleMultipliers', :string)
|
1039
1132
|
end
|
1040
1133
|
end
|
1041
1134
|
|
@@ -1212,7 +1305,7 @@ class HPXML < Object
|
|
1212
1305
|
|
1213
1306
|
class Attic < BaseElement
|
1214
1307
|
ATTRS = [:id, :attic_type, :vented_attic_sla, :vented_attic_ach, :within_infiltration_volume,
|
1215
|
-
:attached_to_roof_idrefs, :attached_to_frame_floor_idrefs]
|
1308
|
+
:attached_to_roof_idrefs, :attached_to_wall_idrefs, :attached_to_frame_floor_idrefs]
|
1216
1309
|
attr_accessor(*ATTRS)
|
1217
1310
|
|
1218
1311
|
def attached_roofs
|
@@ -1226,6 +1319,17 @@ class HPXML < Object
|
|
1226
1319
|
return list
|
1227
1320
|
end
|
1228
1321
|
|
1322
|
+
def attached_walls
|
1323
|
+
return [] if @attached_to_wall_idrefs.nil?
|
1324
|
+
|
1325
|
+
list = @hpxml_object.walls.select { |wall| @attached_to_wall_idrefs.include? wall.id }
|
1326
|
+
if @attached_to_wall_idrefs.size > list.size
|
1327
|
+
fail "Attached wall not found for attic '#{@id}'."
|
1328
|
+
end
|
1329
|
+
|
1330
|
+
return list
|
1331
|
+
end
|
1332
|
+
|
1229
1333
|
def attached_frame_floors
|
1230
1334
|
return [] if @attached_to_frame_floor_idrefs.nil?
|
1231
1335
|
|
@@ -1240,24 +1344,25 @@ class HPXML < Object
|
|
1240
1344
|
def to_location
|
1241
1345
|
return if @attic_type.nil?
|
1242
1346
|
|
1243
|
-
if @attic_type
|
1244
|
-
return LocationLivingSpace
|
1245
|
-
elsif @attic_type == AtticTypeConditioned
|
1246
|
-
return LocationLivingSpace
|
1247
|
-
elsif @attic_type == AtticTypeFlatRoof
|
1347
|
+
if [AtticTypeCathedral, AtticTypeConditioned, AtticTypeFlatRoof, AtticTypeBelowApartment].include? @attic_type
|
1248
1348
|
return LocationLivingSpace
|
1249
|
-
elsif @attic_type
|
1349
|
+
elsif [AtticTypeUnvented].include? @attic_type
|
1250
1350
|
return LocationAtticUnvented
|
1251
|
-
elsif @attic_type
|
1351
|
+
elsif [AtticTypeVented].include? @attic_type
|
1252
1352
|
return LocationAtticVented
|
1253
1353
|
else
|
1254
1354
|
fail "Unexpected attic type: '#{@attic_type}'."
|
1255
1355
|
end
|
1256
1356
|
end
|
1257
1357
|
|
1358
|
+
def delete
|
1359
|
+
@hpxml_object.attics.delete(self)
|
1360
|
+
end
|
1361
|
+
|
1258
1362
|
def check_for_errors
|
1259
1363
|
errors = []
|
1260
1364
|
begin; attached_roofs; rescue StandardError => e; errors << e.message; end
|
1365
|
+
begin; attached_walls; rescue StandardError => e; errors << e.message; end
|
1261
1366
|
begin; attached_frame_floors; rescue StandardError => e; errors << e.message; end
|
1262
1367
|
begin; to_location; rescue StandardError => e; errors << e.message; end
|
1263
1368
|
return errors
|
@@ -1272,10 +1377,12 @@ class HPXML < Object
|
|
1272
1377
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1273
1378
|
if not @attic_type.nil?
|
1274
1379
|
attic_type_el = XMLHelper.add_element(attic, 'AtticType')
|
1275
|
-
if @attic_type
|
1380
|
+
if [AtticTypeFlatRoof, AtticTypeCathedral, AtticTypeBelowApartment].include? @attic_type
|
1381
|
+
XMLHelper.add_element(attic_type_el, @attic_type)
|
1382
|
+
elsif [AtticTypeUnvented].include? @attic_type
|
1276
1383
|
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
|
1277
1384
|
XMLHelper.add_element(attic_type_attic, 'Vented', false, :boolean)
|
1278
|
-
elsif @attic_type
|
1385
|
+
elsif [AtticTypeVented].include? @attic_type
|
1279
1386
|
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
|
1280
1387
|
XMLHelper.add_element(attic_type_attic, 'Vented', true, :boolean)
|
1281
1388
|
if not @vented_attic_sla.nil?
|
@@ -1287,16 +1394,32 @@ class HPXML < Object
|
|
1287
1394
|
XMLHelper.add_element(ventilation_rate, 'UnitofMeasure', UnitsACHNatural, :string)
|
1288
1395
|
XMLHelper.add_element(ventilation_rate, 'Value', @vented_attic_ach, :float)
|
1289
1396
|
end
|
1290
|
-
elsif @attic_type
|
1397
|
+
elsif [AtticTypeConditioned].include? @attic_type
|
1291
1398
|
attic_type_attic = XMLHelper.add_element(attic_type_el, 'Attic')
|
1292
1399
|
XMLHelper.add_element(attic_type_attic, 'Conditioned', true, :boolean)
|
1293
|
-
elsif (@attic_type == AtticTypeFlatRoof) || (@attic_type == AtticTypeCathedral)
|
1294
|
-
XMLHelper.add_element(attic_type_el, @attic_type)
|
1295
1400
|
else
|
1296
1401
|
fail "Unhandled attic type '#{@attic_type}'."
|
1297
1402
|
end
|
1298
1403
|
end
|
1299
1404
|
XMLHelper.add_element(attic, 'WithinInfiltrationVolume', within_infiltration_volume, :boolean) unless @within_infiltration_volume.nil?
|
1405
|
+
if not @attached_to_roof_idrefs.nil?
|
1406
|
+
@attached_to_roof_idrefs.each do |roof|
|
1407
|
+
roof_attached = XMLHelper.add_element(attic, 'AttachedToRoof')
|
1408
|
+
XMLHelper.add_attribute(roof_attached, 'idref', roof)
|
1409
|
+
end
|
1410
|
+
end
|
1411
|
+
if not @attached_to_wall_idrefs.nil?
|
1412
|
+
@attached_to_wall_idrefs.each do |wall|
|
1413
|
+
wall_attached = XMLHelper.add_element(attic, 'AttachedToWall')
|
1414
|
+
XMLHelper.add_attribute(wall_attached, 'idref', wall)
|
1415
|
+
end
|
1416
|
+
end
|
1417
|
+
if not @attached_to_frame_floor_idrefs.nil?
|
1418
|
+
@attached_to_frame_floor_idrefs.each do |floor|
|
1419
|
+
floor_attached = XMLHelper.add_element(attic, 'AttachedToFrameFloor')
|
1420
|
+
XMLHelper.add_attribute(floor_attached, 'idref', floor)
|
1421
|
+
end
|
1422
|
+
end
|
1300
1423
|
end
|
1301
1424
|
|
1302
1425
|
def from_oga(attic)
|
@@ -1313,6 +1436,8 @@ class HPXML < Object
|
|
1313
1436
|
@attic_type = AtticTypeFlatRoof
|
1314
1437
|
elsif XMLHelper.has_element(attic, 'AtticType/CathedralCeiling')
|
1315
1438
|
@attic_type = AtticTypeCathedral
|
1439
|
+
elsif XMLHelper.has_element(attic, 'AtticType/BelowApartment')
|
1440
|
+
@attic_type = AtticTypeBelowApartment
|
1316
1441
|
end
|
1317
1442
|
if @attic_type == AtticTypeVented
|
1318
1443
|
@vented_attic_sla = XMLHelper.get_value(attic, "VentilationRate[UnitofMeasure='#{UnitsSLA}']/Value", :float)
|
@@ -1323,6 +1448,10 @@ class HPXML < Object
|
|
1323
1448
|
XMLHelper.get_elements(attic, 'AttachedToRoof').each do |roof|
|
1324
1449
|
@attached_to_roof_idrefs << HPXML::get_idref(roof)
|
1325
1450
|
end
|
1451
|
+
@attached_to_wall_idrefs = []
|
1452
|
+
XMLHelper.get_elements(attic, 'AttachedToWall').each do |wall|
|
1453
|
+
@attached_to_wall_idrefs << HPXML::get_idref(wall)
|
1454
|
+
end
|
1326
1455
|
@attached_to_frame_floor_idrefs = []
|
1327
1456
|
XMLHelper.get_elements(attic, 'AttachedToFrameFloor').each do |frame_floor|
|
1328
1457
|
@attached_to_frame_floor_idrefs << HPXML::get_idref(frame_floor)
|
@@ -1346,7 +1475,8 @@ class HPXML < Object
|
|
1346
1475
|
|
1347
1476
|
class Foundation < BaseElement
|
1348
1477
|
ATTRS = [:id, :foundation_type, :vented_crawlspace_sla, :within_infiltration_volume,
|
1349
|
-
:attached_to_slab_idrefs, :attached_to_frame_floor_idrefs, :attached_to_foundation_wall_idrefs
|
1478
|
+
:attached_to_slab_idrefs, :attached_to_frame_floor_idrefs, :attached_to_foundation_wall_idrefs,
|
1479
|
+
:attached_to_wall_idrefs, :attached_to_rim_joist_idrefs]
|
1350
1480
|
attr_accessor(*ATTRS)
|
1351
1481
|
|
1352
1482
|
def attached_slabs
|
@@ -1382,19 +1512,45 @@ class HPXML < Object
|
|
1382
1512
|
return list
|
1383
1513
|
end
|
1384
1514
|
|
1515
|
+
def attached_walls
|
1516
|
+
return [] if @attached_to_wall_idrefs.nil?
|
1517
|
+
|
1518
|
+
list = @hpxml_object.walls.select { |wall| @attached_to_wall_idrefs.include? wall.id }
|
1519
|
+
if @attached_to_wall_idrefs.size > list.size
|
1520
|
+
fail "Attached wall not found for foundation '#{@id}'."
|
1521
|
+
end
|
1522
|
+
|
1523
|
+
return list
|
1524
|
+
end
|
1525
|
+
|
1526
|
+
def attached_rim_joists
|
1527
|
+
return [] if @attached_to_rim_joist_idrefs.nil?
|
1528
|
+
|
1529
|
+
list = @hpxml_object.rim_joists.select { |rim_joist| @attached_to_rim_joist_idrefs.include? rim_joist.id }
|
1530
|
+
if @attached_to_rim_joist_idrefs.size > list.size
|
1531
|
+
fail "Attached rim joist not found for foundation '#{@id}'."
|
1532
|
+
end
|
1533
|
+
|
1534
|
+
return list
|
1535
|
+
end
|
1536
|
+
|
1385
1537
|
def to_location
|
1386
1538
|
return if @foundation_type.nil?
|
1387
1539
|
|
1388
|
-
if @foundation_type
|
1540
|
+
if [FoundationTypeSlab, FoundationTypeAboveApartment].include? @foundation_type
|
1541
|
+
return LocationLivingSpace
|
1542
|
+
elsif [FoundationTypeAmbient].include? @foundation_type
|
1389
1543
|
return LocationOutside
|
1390
|
-
elsif @foundation_type
|
1544
|
+
elsif [FoundationTypeBasementConditioned].include? @foundation_type
|
1391
1545
|
return LocationBasementConditioned
|
1392
|
-
elsif @foundation_type
|
1546
|
+
elsif [FoundationTypeBasementUnconditioned].include? @foundation_type
|
1393
1547
|
return LocationBasementUnconditioned
|
1394
|
-
elsif @foundation_type
|
1548
|
+
elsif [FoundationTypeCrawlspaceUnvented].include? @foundation_type
|
1395
1549
|
return LocationCrawlspaceUnvented
|
1396
|
-
elsif @foundation_type
|
1550
|
+
elsif [FoundationTypeCrawlspaceVented].include? @foundation_type
|
1397
1551
|
return LocationCrawlspaceVented
|
1552
|
+
elsif @foundation_type == FoundationTypeCrawlspaceConditioned
|
1553
|
+
return LocationCrawlspaceConditioned
|
1398
1554
|
elsif @foundation_type == FoundationTypeSlab
|
1399
1555
|
return LocationLivingSpace
|
1400
1556
|
else
|
@@ -1417,11 +1573,17 @@ class HPXML < Object
|
|
1417
1573
|
return sum_area
|
1418
1574
|
end
|
1419
1575
|
|
1576
|
+
def delete
|
1577
|
+
@hpxml_object.foundations.delete(self)
|
1578
|
+
end
|
1579
|
+
|
1420
1580
|
def check_for_errors
|
1421
1581
|
errors = []
|
1422
1582
|
begin; attached_slabs; rescue StandardError => e; errors << e.message; end
|
1423
1583
|
begin; attached_frame_floors; rescue StandardError => e; errors << e.message; end
|
1424
1584
|
begin; attached_foundation_walls; rescue StandardError => e; errors << e.message; end
|
1585
|
+
begin; attached_walls; rescue StandardError => e; errors << e.message; end
|
1586
|
+
begin; attached_rim_joists; rescue StandardError => e; errors << e.message; end
|
1425
1587
|
begin; to_location; rescue StandardError => e; errors << e.message; end
|
1426
1588
|
return errors
|
1427
1589
|
end
|
@@ -1435,15 +1597,15 @@ class HPXML < Object
|
|
1435
1597
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1436
1598
|
if not @foundation_type.nil?
|
1437
1599
|
foundation_type_el = XMLHelper.add_element(foundation, 'FoundationType')
|
1438
|
-
if [FoundationTypeSlab, FoundationTypeAmbient].include? @foundation_type
|
1600
|
+
if [FoundationTypeSlab, FoundationTypeAmbient, FoundationTypeAboveApartment].include? @foundation_type
|
1439
1601
|
XMLHelper.add_element(foundation_type_el, @foundation_type)
|
1440
|
-
elsif @foundation_type
|
1602
|
+
elsif [FoundationTypeBasementConditioned].include? @foundation_type
|
1441
1603
|
basement = XMLHelper.add_element(foundation_type_el, 'Basement')
|
1442
1604
|
XMLHelper.add_element(basement, 'Conditioned', true, :boolean)
|
1443
|
-
elsif @foundation_type
|
1605
|
+
elsif [FoundationTypeBasementUnconditioned].include? @foundation_type
|
1444
1606
|
basement = XMLHelper.add_element(foundation_type_el, 'Basement')
|
1445
1607
|
XMLHelper.add_element(basement, 'Conditioned', false, :boolean)
|
1446
|
-
elsif @foundation_type
|
1608
|
+
elsif [FoundationTypeCrawlspaceVented].include? @foundation_type
|
1447
1609
|
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
|
1448
1610
|
XMLHelper.add_element(crawlspace, 'Vented', true, :boolean)
|
1449
1611
|
if not @vented_crawlspace_sla.nil?
|
@@ -1451,14 +1613,47 @@ class HPXML < Object
|
|
1451
1613
|
XMLHelper.add_element(ventilation_rate, 'UnitofMeasure', UnitsSLA, :string)
|
1452
1614
|
XMLHelper.add_element(ventilation_rate, 'Value', @vented_crawlspace_sla, :float, @vented_crawlspace_sla_isdefaulted)
|
1453
1615
|
end
|
1454
|
-
elsif @foundation_type
|
1616
|
+
elsif [FoundationTypeCrawlspaceUnvented].include? @foundation_type
|
1455
1617
|
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
|
1456
1618
|
XMLHelper.add_element(crawlspace, 'Vented', false, :boolean)
|
1619
|
+
elsif @foundation_type == FoundationTypeCrawlspaceConditioned
|
1620
|
+
crawlspace = XMLHelper.add_element(foundation_type_el, 'Crawlspace')
|
1621
|
+
XMLHelper.add_element(crawlspace, 'Conditioned', true, :boolean)
|
1457
1622
|
else
|
1458
1623
|
fail "Unhandled foundation type '#{@foundation_type}'."
|
1459
1624
|
end
|
1460
1625
|
end
|
1461
1626
|
XMLHelper.add_element(foundation, 'WithinInfiltrationVolume', @within_infiltration_volume, :boolean) unless @within_infiltration_volume.nil?
|
1627
|
+
if not @attached_to_rim_joist_idrefs.nil?
|
1628
|
+
@attached_to_rim_joist_idrefs.each do |rim_joist|
|
1629
|
+
rim_joist_attached = XMLHelper.add_element(foundation, 'AttachedToRimJoist')
|
1630
|
+
XMLHelper.add_attribute(rim_joist_attached, 'idref', rim_joist)
|
1631
|
+
end
|
1632
|
+
end
|
1633
|
+
if not @attached_to_wall_idrefs.nil?
|
1634
|
+
@attached_to_wall_idrefs.each do |wall|
|
1635
|
+
wall_attached = XMLHelper.add_element(foundation, 'AttachedToWall')
|
1636
|
+
XMLHelper.add_attribute(wall_attached, 'idref', wall)
|
1637
|
+
end
|
1638
|
+
end
|
1639
|
+
if not @attached_to_foundation_wall_idrefs.nil?
|
1640
|
+
@attached_to_foundation_wall_idrefs.each do |foundation_wall|
|
1641
|
+
foundation_wall_attached = XMLHelper.add_element(foundation, 'AttachedToFoundationWall')
|
1642
|
+
XMLHelper.add_attribute(foundation_wall_attached, 'idref', foundation_wall)
|
1643
|
+
end
|
1644
|
+
end
|
1645
|
+
if not @attached_to_frame_floor_idrefs.nil?
|
1646
|
+
@attached_to_frame_floor_idrefs.each do |frame_floor|
|
1647
|
+
floor_frame_attached = XMLHelper.add_element(foundation, 'AttachedToFrameFloor')
|
1648
|
+
XMLHelper.add_attribute(floor_frame_attached, 'idref', frame_floor)
|
1649
|
+
end
|
1650
|
+
end
|
1651
|
+
if not @attached_to_slab_idrefs.nil?
|
1652
|
+
@attached_to_slab_idrefs.each do |slab|
|
1653
|
+
slab_attached = XMLHelper.add_element(foundation, 'AttachedToSlab')
|
1654
|
+
XMLHelper.add_attribute(slab_attached, 'idref', slab)
|
1655
|
+
end
|
1656
|
+
end
|
1462
1657
|
end
|
1463
1658
|
|
1464
1659
|
def from_oga(foundation)
|
@@ -1475,13 +1670,25 @@ class HPXML < Object
|
|
1475
1670
|
@foundation_type = FoundationTypeCrawlspaceUnvented
|
1476
1671
|
elsif XMLHelper.has_element(foundation, "FoundationType/Crawlspace[Vented='true']")
|
1477
1672
|
@foundation_type = FoundationTypeCrawlspaceVented
|
1673
|
+
elsif XMLHelper.has_element(foundation, "FoundationType/Crawlspace[Conditioned='true']")
|
1674
|
+
@foundation_type = FoundationTypeCrawlspaceConditioned
|
1478
1675
|
elsif XMLHelper.has_element(foundation, 'FoundationType/Ambient')
|
1479
1676
|
@foundation_type = FoundationTypeAmbient
|
1677
|
+
elsif XMLHelper.has_element(foundation, 'FoundationType/AboveApartment')
|
1678
|
+
@foundation_type = FoundationTypeAboveApartment
|
1480
1679
|
end
|
1481
1680
|
if @foundation_type == FoundationTypeCrawlspaceVented
|
1482
1681
|
@vented_crawlspace_sla = XMLHelper.get_value(foundation, "VentilationRate[UnitofMeasure='#{UnitsSLA}']/Value", :float)
|
1483
1682
|
end
|
1484
1683
|
@within_infiltration_volume = XMLHelper.get_value(foundation, 'WithinInfiltrationVolume', :boolean)
|
1684
|
+
@attached_to_rim_joist_idrefs = []
|
1685
|
+
XMLHelper.get_elements(foundation, 'AttachedToRimJoist').each do |rim_joist|
|
1686
|
+
@attached_to_rim_joist_idrefs << HPXML::get_idref(rim_joist)
|
1687
|
+
end
|
1688
|
+
@attached_to_wall_idrefs = []
|
1689
|
+
XMLHelper.get_elements(foundation, 'AttachedToWall').each do |wall|
|
1690
|
+
@attached_to_wall_idrefs << HPXML::get_idref(wall)
|
1691
|
+
end
|
1485
1692
|
@attached_to_slab_idrefs = []
|
1486
1693
|
XMLHelper.get_elements(foundation, 'AttachedToSlab').each do |slab|
|
1487
1694
|
@attached_to_slab_idrefs << HPXML::get_idref(slab)
|
@@ -1515,7 +1722,8 @@ class HPXML < Object
|
|
1515
1722
|
ATTRS = [:id, :interior_adjacent_to, :area, :azimuth, :orientation, :roof_type,
|
1516
1723
|
:roof_color, :solar_absorptance, :emittance, :pitch, :radiant_barrier,
|
1517
1724
|
:insulation_id, :insulation_assembly_r_value, :insulation_cavity_r_value,
|
1518
|
-
:insulation_continuous_r_value, :radiant_barrier_grade
|
1725
|
+
:insulation_continuous_r_value, :radiant_barrier_grade,
|
1726
|
+
:interior_finish_type, :interior_finish_thickness]
|
1519
1727
|
attr_accessor(*ATTRS)
|
1520
1728
|
|
1521
1729
|
def skylights
|
@@ -1555,6 +1763,10 @@ class HPXML < Object
|
|
1555
1763
|
return (is_exterior && is_thermal_boundary)
|
1556
1764
|
end
|
1557
1765
|
|
1766
|
+
def is_conditioned
|
1767
|
+
return HPXML::is_conditioned(self)
|
1768
|
+
end
|
1769
|
+
|
1558
1770
|
def delete
|
1559
1771
|
@hpxml_object.roofs.delete(self)
|
1560
1772
|
skylights.reverse_each do |skylight|
|
@@ -1580,15 +1792,20 @@ class HPXML < Object
|
|
1580
1792
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1581
1793
|
XMLHelper.add_element(roof, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
1582
1794
|
XMLHelper.add_element(roof, 'Area', @area, :float) unless @area.nil?
|
1583
|
-
XMLHelper.add_element(roof, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1584
|
-
XMLHelper.add_element(roof, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
1795
|
+
XMLHelper.add_element(roof, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
1796
|
+
XMLHelper.add_element(roof, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
1585
1797
|
XMLHelper.add_element(roof, 'RoofType', @roof_type, :string, @roof_type_isdefaulted) unless @roof_type.nil?
|
1586
1798
|
XMLHelper.add_element(roof, 'RoofColor', @roof_color, :string, @roof_color_isdefaulted) unless @roof_color.nil?
|
1587
1799
|
XMLHelper.add_element(roof, 'SolarAbsorptance', @solar_absorptance, :float, @solar_absorptance_isdefaulted) unless @solar_absorptance.nil?
|
1588
1800
|
XMLHelper.add_element(roof, 'Emittance', @emittance, :float, @emittance_isdefaulted) unless @emittance.nil?
|
1801
|
+
if (not @interior_finish_type.nil?) || (not @interior_finish_thickness.nil?)
|
1802
|
+
interior_finish = XMLHelper.add_element(roof, 'InteriorFinish')
|
1803
|
+
XMLHelper.add_element(interior_finish, 'Type', @interior_finish_type, :string, @interior_finish_type_isdefaulted) unless @interior_finish_type.nil?
|
1804
|
+
XMLHelper.add_element(interior_finish, 'Thickness', @interior_finish_thickness, :float, @interior_finish_thickness_isdefaulted) unless @interior_finish_thickness.nil?
|
1805
|
+
end
|
1589
1806
|
XMLHelper.add_element(roof, 'Pitch', @pitch, :float) unless @pitch.nil?
|
1590
1807
|
XMLHelper.add_element(roof, 'RadiantBarrier', @radiant_barrier, :boolean, @radiant_barrier_isdefaulted) unless @radiant_barrier.nil?
|
1591
|
-
XMLHelper.add_element(roof, 'RadiantBarrierGrade', @radiant_barrier_grade, :integer) unless @radiant_barrier_grade.nil?
|
1808
|
+
XMLHelper.add_element(roof, 'RadiantBarrierGrade', @radiant_barrier_grade, :integer, @radiant_barrier_grade_isdefaulted) unless @radiant_barrier_grade.nil?
|
1592
1809
|
insulation = XMLHelper.add_element(roof, 'Insulation')
|
1593
1810
|
sys_id = XMLHelper.add_element(insulation, 'SystemIdentifier')
|
1594
1811
|
if not @insulation_id.nil?
|
@@ -1621,6 +1838,11 @@ class HPXML < Object
|
|
1621
1838
|
@roof_color = XMLHelper.get_value(roof, 'RoofColor', :string)
|
1622
1839
|
@solar_absorptance = XMLHelper.get_value(roof, 'SolarAbsorptance', :float)
|
1623
1840
|
@emittance = XMLHelper.get_value(roof, 'Emittance', :float)
|
1841
|
+
interior_finish = XMLHelper.get_element(roof, 'InteriorFinish')
|
1842
|
+
if not interior_finish.nil?
|
1843
|
+
@interior_finish_type = XMLHelper.get_value(interior_finish, 'Type', :string)
|
1844
|
+
@interior_finish_thickness = XMLHelper.get_value(interior_finish, 'Thickness', :float)
|
1845
|
+
end
|
1624
1846
|
@pitch = XMLHelper.get_value(roof, 'Pitch', :float)
|
1625
1847
|
@radiant_barrier = XMLHelper.get_value(roof, 'RadiantBarrier', :boolean)
|
1626
1848
|
@radiant_barrier_grade = XMLHelper.get_value(roof, 'RadiantBarrierGrade', :integer)
|
@@ -1678,8 +1900,15 @@ class HPXML < Object
|
|
1678
1900
|
return (is_exterior && is_thermal_boundary)
|
1679
1901
|
end
|
1680
1902
|
|
1903
|
+
def is_conditioned
|
1904
|
+
return HPXML::is_conditioned(self)
|
1905
|
+
end
|
1906
|
+
|
1681
1907
|
def delete
|
1682
1908
|
@hpxml_object.rim_joists.delete(self)
|
1909
|
+
@hpxml_object.foundations.each do |foundation|
|
1910
|
+
foundation.attached_to_rim_joist_idrefs.delete(@id) unless foundation.attached_to_rim_joist_idrefs.nil?
|
1911
|
+
end
|
1683
1912
|
end
|
1684
1913
|
|
1685
1914
|
def check_for_errors
|
@@ -1697,8 +1926,8 @@ class HPXML < Object
|
|
1697
1926
|
XMLHelper.add_element(rim_joist, 'ExteriorAdjacentTo', @exterior_adjacent_to, :string) unless @exterior_adjacent_to.nil?
|
1698
1927
|
XMLHelper.add_element(rim_joist, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
1699
1928
|
XMLHelper.add_element(rim_joist, 'Area', @area, :float) unless @area.nil?
|
1700
|
-
XMLHelper.add_element(rim_joist, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1701
|
-
XMLHelper.add_element(rim_joist, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
1929
|
+
XMLHelper.add_element(rim_joist, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
1930
|
+
XMLHelper.add_element(rim_joist, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
1702
1931
|
XMLHelper.add_element(rim_joist, 'Siding', @siding, :string, @siding_isdefaulted) unless @siding.nil?
|
1703
1932
|
XMLHelper.add_element(rim_joist, 'Color', @color, :string, @color_isdefaulted) unless @color.nil?
|
1704
1933
|
XMLHelper.add_element(rim_joist, 'SolarAbsorptance', @solar_absorptance, :float, @solar_absorptance_isdefaulted) unless @solar_absorptance.nil?
|
@@ -1763,7 +1992,8 @@ class HPXML < Object
|
|
1763
1992
|
class Wall < BaseElement
|
1764
1993
|
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :wall_type, :optimum_value_engineering,
|
1765
1994
|
:area, :orientation, :azimuth, :siding, :color, :solar_absorptance, :emittance, :insulation_id,
|
1766
|
-
:insulation_assembly_r_value, :insulation_cavity_r_value, :insulation_continuous_r_value
|
1995
|
+
:insulation_assembly_r_value, :insulation_cavity_r_value, :insulation_continuous_r_value,
|
1996
|
+
:interior_finish_type, :interior_finish_thickness, :attic_wall_type]
|
1767
1997
|
attr_accessor(*ATTRS)
|
1768
1998
|
|
1769
1999
|
def windows
|
@@ -1811,6 +2041,10 @@ class HPXML < Object
|
|
1811
2041
|
return (is_exterior && is_thermal_boundary)
|
1812
2042
|
end
|
1813
2043
|
|
2044
|
+
def is_conditioned
|
2045
|
+
return HPXML::is_conditioned(self)
|
2046
|
+
end
|
2047
|
+
|
1814
2048
|
def delete
|
1815
2049
|
@hpxml_object.walls.delete(self)
|
1816
2050
|
windows.reverse_each do |window|
|
@@ -1819,6 +2053,12 @@ class HPXML < Object
|
|
1819
2053
|
doors.reverse_each do |door|
|
1820
2054
|
door.delete
|
1821
2055
|
end
|
2056
|
+
@hpxml_object.attics.each do |attic|
|
2057
|
+
attic.attached_to_wall_idrefs.delete(@id) unless attic.attached_to_wall_idrefs.nil?
|
2058
|
+
end
|
2059
|
+
@hpxml_object.foundations.each do |foundation|
|
2060
|
+
foundation.attached_to_wall_idrefs.delete(@id) unless foundation.attached_to_wall_idrefs.nil?
|
2061
|
+
end
|
1822
2062
|
end
|
1823
2063
|
|
1824
2064
|
def check_for_errors
|
@@ -1836,6 +2076,7 @@ class HPXML < Object
|
|
1836
2076
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1837
2077
|
XMLHelper.add_element(wall, 'ExteriorAdjacentTo', @exterior_adjacent_to, :string) unless @exterior_adjacent_to.nil?
|
1838
2078
|
XMLHelper.add_element(wall, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
2079
|
+
XMLHelper.add_element(wall, 'AtticWallType', @attic_wall_type, :string) unless @attic_wall_type.nil?
|
1839
2080
|
if not @wall_type.nil?
|
1840
2081
|
wall_type_el = XMLHelper.add_element(wall, 'WallType')
|
1841
2082
|
wall_type = XMLHelper.add_element(wall_type_el, @wall_type)
|
@@ -1844,12 +2085,17 @@ class HPXML < Object
|
|
1844
2085
|
end
|
1845
2086
|
end
|
1846
2087
|
XMLHelper.add_element(wall, 'Area', @area, :float) unless @area.nil?
|
1847
|
-
XMLHelper.add_element(wall, 'Orientation', @orientation, :string) unless @orientation.nil?
|
1848
|
-
XMLHelper.add_element(wall, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2088
|
+
XMLHelper.add_element(wall, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
2089
|
+
XMLHelper.add_element(wall, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
1849
2090
|
XMLHelper.add_element(wall, 'Siding', @siding, :string, @siding_isdefaulted) unless @siding.nil?
|
1850
2091
|
XMLHelper.add_element(wall, 'Color', @color, :string, @color_isdefaulted) unless @color.nil?
|
1851
2092
|
XMLHelper.add_element(wall, 'SolarAbsorptance', @solar_absorptance, :float, @solar_absorptance_isdefaulted) unless @solar_absorptance.nil?
|
1852
2093
|
XMLHelper.add_element(wall, 'Emittance', @emittance, :float, @emittance_isdefaulted) unless @emittance.nil?
|
2094
|
+
if (not @interior_finish_type.nil?) || (not @interior_finish_thickness.nil?)
|
2095
|
+
interior_finish = XMLHelper.add_element(wall, 'InteriorFinish')
|
2096
|
+
XMLHelper.add_element(interior_finish, 'Type', @interior_finish_type, :string, @interior_finish_type_isdefaulted) unless @interior_finish_type.nil?
|
2097
|
+
XMLHelper.add_element(interior_finish, 'Thickness', @interior_finish_thickness, :float, @interior_finish_thickness_isdefaulted) unless @interior_finish_thickness.nil?
|
2098
|
+
end
|
1853
2099
|
insulation = XMLHelper.add_element(wall, 'Insulation')
|
1854
2100
|
sys_id = XMLHelper.add_element(insulation, 'SystemIdentifier')
|
1855
2101
|
if not @insulation_id.nil?
|
@@ -1876,6 +2122,7 @@ class HPXML < Object
|
|
1876
2122
|
@id = HPXML::get_id(wall)
|
1877
2123
|
@exterior_adjacent_to = XMLHelper.get_value(wall, 'ExteriorAdjacentTo', :string)
|
1878
2124
|
@interior_adjacent_to = XMLHelper.get_value(wall, 'InteriorAdjacentTo', :string)
|
2125
|
+
@attic_wall_type = XMLHelper.get_value(wall, 'AtticWallType', :string)
|
1879
2126
|
@wall_type = XMLHelper.get_child_name(wall, 'WallType')
|
1880
2127
|
if @wall_type == HPXML::WallTypeWoodStud
|
1881
2128
|
@optimum_value_engineering = XMLHelper.get_value(wall, 'WallType/WoodStud/OptimumValueEngineering', :boolean)
|
@@ -1887,6 +2134,11 @@ class HPXML < Object
|
|
1887
2134
|
@color = XMLHelper.get_value(wall, 'Color', :string)
|
1888
2135
|
@solar_absorptance = XMLHelper.get_value(wall, 'SolarAbsorptance', :float)
|
1889
2136
|
@emittance = XMLHelper.get_value(wall, 'Emittance', :float)
|
2137
|
+
interior_finish = XMLHelper.get_element(wall, 'InteriorFinish')
|
2138
|
+
if not interior_finish.nil?
|
2139
|
+
@interior_finish_type = XMLHelper.get_value(interior_finish, 'Type', :string)
|
2140
|
+
@interior_finish_thickness = XMLHelper.get_value(interior_finish, 'Thickness', :float)
|
2141
|
+
end
|
1890
2142
|
insulation = XMLHelper.get_element(wall, 'Insulation')
|
1891
2143
|
if not insulation.nil?
|
1892
2144
|
@insulation_id = HPXML::get_id(insulation)
|
@@ -1912,12 +2164,12 @@ class HPXML < Object
|
|
1912
2164
|
end
|
1913
2165
|
|
1914
2166
|
class FoundationWall < BaseElement
|
1915
|
-
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :height, :area, :orientation,
|
1916
|
-
:thickness, :depth_below_grade, :insulation_id, :insulation_interior_r_value,
|
2167
|
+
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :length, :height, :area, :orientation,
|
2168
|
+
:type, :azimuth, :thickness, :depth_below_grade, :insulation_id, :insulation_interior_r_value,
|
1917
2169
|
:insulation_interior_distance_to_top, :insulation_interior_distance_to_bottom,
|
1918
2170
|
:insulation_exterior_r_value, :insulation_exterior_distance_to_top,
|
1919
2171
|
:insulation_exterior_distance_to_bottom, :insulation_assembly_r_value,
|
1920
|
-
:insulation_continuous_r_value]
|
2172
|
+
:insulation_continuous_r_value, :interior_finish_type, :interior_finish_thickness]
|
1921
2173
|
attr_accessor(*ATTRS)
|
1922
2174
|
|
1923
2175
|
def windows
|
@@ -1967,6 +2219,10 @@ class HPXML < Object
|
|
1967
2219
|
return (is_exterior && is_thermal_boundary)
|
1968
2220
|
end
|
1969
2221
|
|
2222
|
+
def is_conditioned
|
2223
|
+
return HPXML::is_conditioned(self)
|
2224
|
+
end
|
2225
|
+
|
1970
2226
|
def delete
|
1971
2227
|
@hpxml_object.foundation_walls.delete(self)
|
1972
2228
|
windows.reverse_each do |window|
|
@@ -1995,12 +2251,19 @@ class HPXML < Object
|
|
1995
2251
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
1996
2252
|
XMLHelper.add_element(foundation_wall, 'ExteriorAdjacentTo', @exterior_adjacent_to, :string) unless @exterior_adjacent_to.nil?
|
1997
2253
|
XMLHelper.add_element(foundation_wall, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
2254
|
+
XMLHelper.add_element(foundation_wall, 'Type', @type, :string, @type_isdefaulted) unless @type.nil?
|
2255
|
+
XMLHelper.add_element(foundation_wall, 'Length', @length, :float) unless @length.nil?
|
1998
2256
|
XMLHelper.add_element(foundation_wall, 'Height', @height, :float) unless @height.nil?
|
1999
|
-
XMLHelper.add_element(foundation_wall, 'Area', @area, :float) unless @area.nil?
|
2000
|
-
XMLHelper.add_element(foundation_wall, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2001
|
-
XMLHelper.add_element(foundation_wall, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2257
|
+
XMLHelper.add_element(foundation_wall, 'Area', @area, :float, @area_isdefaulted) unless @area.nil?
|
2258
|
+
XMLHelper.add_element(foundation_wall, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
2259
|
+
XMLHelper.add_element(foundation_wall, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
2002
2260
|
XMLHelper.add_element(foundation_wall, 'Thickness', @thickness, :float, @thickness_isdefaulted) unless @thickness.nil?
|
2003
2261
|
XMLHelper.add_element(foundation_wall, 'DepthBelowGrade', @depth_below_grade, :float) unless @depth_below_grade.nil?
|
2262
|
+
if (not @interior_finish_type.nil?) || (not @interior_finish_thickness.nil?)
|
2263
|
+
interior_finish = XMLHelper.add_element(foundation_wall, 'InteriorFinish')
|
2264
|
+
XMLHelper.add_element(interior_finish, 'Type', @interior_finish_type, :string, @interior_finish_type_isdefaulted) unless @interior_finish_type.nil?
|
2265
|
+
XMLHelper.add_element(interior_finish, 'Thickness', @interior_finish_thickness, :float, @interior_finish_thickness_isdefaulted) unless @interior_finish_thickness.nil?
|
2266
|
+
end
|
2004
2267
|
insulation = XMLHelper.add_element(foundation_wall, 'Insulation')
|
2005
2268
|
sys_id = XMLHelper.add_element(insulation, 'SystemIdentifier')
|
2006
2269
|
if not @insulation_id.nil?
|
@@ -2013,15 +2276,15 @@ class HPXML < Object
|
|
2013
2276
|
layer = XMLHelper.add_element(insulation, 'Layer')
|
2014
2277
|
XMLHelper.add_element(layer, 'InstallationType', 'continuous - exterior', :string)
|
2015
2278
|
XMLHelper.add_element(layer, 'NominalRValue', @insulation_exterior_r_value, :float)
|
2016
|
-
XMLHelper.
|
2017
|
-
XMLHelper.
|
2279
|
+
XMLHelper.add_element(layer, 'DistanceToTopOfInsulation', @insulation_exterior_distance_to_top, :float, @insulation_exterior_distance_to_top_isdefaulted) unless @insulation_exterior_distance_to_top.nil?
|
2280
|
+
XMLHelper.add_element(layer, 'DistanceToBottomOfInsulation', @insulation_exterior_distance_to_bottom, :float, @insulation_exterior_distance_to_bottom_isdefaulted) unless @insulation_exterior_distance_to_bottom.nil?
|
2018
2281
|
end
|
2019
2282
|
if not @insulation_interior_r_value.nil?
|
2020
2283
|
layer = XMLHelper.add_element(insulation, 'Layer')
|
2021
2284
|
XMLHelper.add_element(layer, 'InstallationType', 'continuous - interior', :string)
|
2022
2285
|
XMLHelper.add_element(layer, 'NominalRValue', @insulation_interior_r_value, :float)
|
2023
|
-
XMLHelper.
|
2024
|
-
XMLHelper.
|
2286
|
+
XMLHelper.add_element(layer, 'DistanceToTopOfInsulation', @insulation_interior_distance_to_top, :float, @insulation_interior_distance_to_top_isdefaulted) unless @insulation_interior_distance_to_top.nil?
|
2287
|
+
XMLHelper.add_element(layer, 'DistanceToBottomOfInsulation', @insulation_interior_distance_to_bottom, :float, @insulation_interior_distance_to_bottom_isdefaulted) unless @insulation_interior_distance_to_bottom.nil?
|
2025
2288
|
end
|
2026
2289
|
end
|
2027
2290
|
|
@@ -2031,23 +2294,30 @@ class HPXML < Object
|
|
2031
2294
|
@id = HPXML::get_id(foundation_wall)
|
2032
2295
|
@exterior_adjacent_to = XMLHelper.get_value(foundation_wall, 'ExteriorAdjacentTo', :string)
|
2033
2296
|
@interior_adjacent_to = XMLHelper.get_value(foundation_wall, 'InteriorAdjacentTo', :string)
|
2297
|
+
@type = XMLHelper.get_value(foundation_wall, 'Type', :string)
|
2298
|
+
@length = XMLHelper.get_value(foundation_wall, 'Length', :float)
|
2034
2299
|
@height = XMLHelper.get_value(foundation_wall, 'Height', :float)
|
2035
2300
|
@area = XMLHelper.get_value(foundation_wall, 'Area', :float)
|
2036
2301
|
@orientation = XMLHelper.get_value(foundation_wall, 'Orientation', :string)
|
2037
2302
|
@azimuth = XMLHelper.get_value(foundation_wall, 'Azimuth', :integer)
|
2038
2303
|
@thickness = XMLHelper.get_value(foundation_wall, 'Thickness', :float)
|
2039
2304
|
@depth_below_grade = XMLHelper.get_value(foundation_wall, 'DepthBelowGrade', :float)
|
2305
|
+
interior_finish = XMLHelper.get_element(foundation_wall, 'InteriorFinish')
|
2306
|
+
if not interior_finish.nil?
|
2307
|
+
@interior_finish_type = XMLHelper.get_value(interior_finish, 'Type', :string)
|
2308
|
+
@interior_finish_thickness = XMLHelper.get_value(interior_finish, 'Thickness', :float)
|
2309
|
+
end
|
2040
2310
|
insulation = XMLHelper.get_element(foundation_wall, 'Insulation')
|
2041
2311
|
if not insulation.nil?
|
2042
2312
|
@insulation_id = HPXML::get_id(insulation)
|
2043
2313
|
@insulation_assembly_r_value = XMLHelper.get_value(insulation, 'AssemblyEffectiveRValue', :float)
|
2044
2314
|
@insulation_continuous_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous']/NominalRValue", :float)
|
2045
2315
|
@insulation_interior_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/NominalRValue", :float)
|
2046
|
-
@insulation_interior_distance_to_top = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/
|
2047
|
-
@insulation_interior_distance_to_bottom = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/
|
2316
|
+
@insulation_interior_distance_to_top = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/DistanceToTopOfInsulation", :float)
|
2317
|
+
@insulation_interior_distance_to_bottom = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - interior']/DistanceToBottomOfInsulation", :float)
|
2048
2318
|
@insulation_exterior_r_value = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/NominalRValue", :float)
|
2049
|
-
@insulation_exterior_distance_to_top = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/
|
2050
|
-
@insulation_exterior_distance_to_bottom = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/
|
2319
|
+
@insulation_exterior_distance_to_top = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/DistanceToTopOfInsulation", :float)
|
2320
|
+
@insulation_exterior_distance_to_bottom = XMLHelper.get_value(insulation, "Layer[InstallationType='continuous - exterior']/DistanceToBottomOfInsulation", :float)
|
2051
2321
|
end
|
2052
2322
|
end
|
2053
2323
|
end
|
@@ -2069,7 +2339,7 @@ class HPXML < Object
|
|
2069
2339
|
class FrameFloor < BaseElement
|
2070
2340
|
ATTRS = [:id, :exterior_adjacent_to, :interior_adjacent_to, :area, :insulation_id,
|
2071
2341
|
:insulation_assembly_r_value, :insulation_cavity_r_value, :insulation_continuous_r_value,
|
2072
|
-
:other_space_above_or_below]
|
2342
|
+
:other_space_above_or_below, :interior_finish_type, :interior_finish_thickness]
|
2073
2343
|
attr_accessor(*ATTRS)
|
2074
2344
|
|
2075
2345
|
def is_ceiling
|
@@ -2112,6 +2382,10 @@ class HPXML < Object
|
|
2112
2382
|
return (is_exterior && is_thermal_boundary)
|
2113
2383
|
end
|
2114
2384
|
|
2385
|
+
def is_conditioned
|
2386
|
+
return HPXML::is_conditioned(self)
|
2387
|
+
end
|
2388
|
+
|
2115
2389
|
def delete
|
2116
2390
|
@hpxml_object.frame_floors.delete(self)
|
2117
2391
|
@hpxml_object.attics.each do |attic|
|
@@ -2120,6 +2394,9 @@ class HPXML < Object
|
|
2120
2394
|
@hpxml_object.foundations.each do |foundation|
|
2121
2395
|
foundation.attached_to_frame_floor_idrefs.delete(@id) unless foundation.attached_to_frame_floor_idrefs.nil?
|
2122
2396
|
end
|
2397
|
+
@hpxml_object.attics.each do |attic|
|
2398
|
+
attic.attached_to_frame_floor_idrefs.delete(@id) unless attic.attached_to_frame_floor_idrefs.nil?
|
2399
|
+
end
|
2123
2400
|
end
|
2124
2401
|
|
2125
2402
|
def check_for_errors
|
@@ -2137,6 +2414,11 @@ class HPXML < Object
|
|
2137
2414
|
XMLHelper.add_element(frame_floor, 'ExteriorAdjacentTo', @exterior_adjacent_to, :string) unless @exterior_adjacent_to.nil?
|
2138
2415
|
XMLHelper.add_element(frame_floor, 'InteriorAdjacentTo', @interior_adjacent_to, :string) unless @interior_adjacent_to.nil?
|
2139
2416
|
XMLHelper.add_element(frame_floor, 'Area', @area, :float) unless @area.nil?
|
2417
|
+
if (not @interior_finish_type.nil?) || (not @interior_finish_thickness.nil?)
|
2418
|
+
interior_finish = XMLHelper.add_element(frame_floor, 'InteriorFinish')
|
2419
|
+
XMLHelper.add_element(interior_finish, 'Type', @interior_finish_type, :string, @interior_finish_type_isdefaulted) unless @interior_finish_type.nil?
|
2420
|
+
XMLHelper.add_element(interior_finish, 'Thickness', @interior_finish_thickness, :float, @interior_finish_thickness_isdefaulted) unless @interior_finish_thickness.nil?
|
2421
|
+
end
|
2140
2422
|
insulation = XMLHelper.add_element(frame_floor, 'Insulation')
|
2141
2423
|
sys_id = XMLHelper.add_element(insulation, 'SystemIdentifier')
|
2142
2424
|
if not @insulation_id.nil?
|
@@ -2165,6 +2447,11 @@ class HPXML < Object
|
|
2165
2447
|
@exterior_adjacent_to = XMLHelper.get_value(frame_floor, 'ExteriorAdjacentTo', :string)
|
2166
2448
|
@interior_adjacent_to = XMLHelper.get_value(frame_floor, 'InteriorAdjacentTo', :string)
|
2167
2449
|
@area = XMLHelper.get_value(frame_floor, 'Area', :float)
|
2450
|
+
interior_finish = XMLHelper.get_element(frame_floor, 'InteriorFinish')
|
2451
|
+
if not interior_finish.nil?
|
2452
|
+
@interior_finish_type = XMLHelper.get_value(interior_finish, 'Type', :string)
|
2453
|
+
@interior_finish_thickness = XMLHelper.get_value(interior_finish, 'Thickness', :float)
|
2454
|
+
end
|
2168
2455
|
insulation = XMLHelper.get_element(frame_floor, 'Insulation')
|
2169
2456
|
if not insulation.nil?
|
2170
2457
|
@insulation_id = HPXML::get_id(insulation)
|
@@ -2218,6 +2505,10 @@ class HPXML < Object
|
|
2218
2505
|
return (is_exterior && is_thermal_boundary)
|
2219
2506
|
end
|
2220
2507
|
|
2508
|
+
def is_conditioned
|
2509
|
+
return HPXML::is_conditioned(self)
|
2510
|
+
end
|
2511
|
+
|
2221
2512
|
def delete
|
2222
2513
|
@hpxml_object.slabs.delete(self)
|
2223
2514
|
@hpxml_object.foundations.each do |foundation|
|
@@ -2241,9 +2532,6 @@ class HPXML < Object
|
|
2241
2532
|
XMLHelper.add_element(slab, 'Area', @area, :float) unless @area.nil?
|
2242
2533
|
XMLHelper.add_element(slab, 'Thickness', @thickness, :float, @thickness_isdefaulted) unless @thickness.nil?
|
2243
2534
|
XMLHelper.add_element(slab, 'ExposedPerimeter', @exposed_perimeter, :float) unless @exposed_perimeter.nil?
|
2244
|
-
XMLHelper.add_element(slab, 'PerimeterInsulationDepth', @perimeter_insulation_depth, :float) unless @perimeter_insulation_depth.nil?
|
2245
|
-
XMLHelper.add_element(slab, 'UnderSlabInsulationWidth', @under_slab_insulation_width, :float) unless @under_slab_insulation_width.nil?
|
2246
|
-
XMLHelper.add_element(slab, 'UnderSlabInsulationSpansEntireSlab', @under_slab_insulation_spans_entire_slab, :boolean) unless @under_slab_insulation_spans_entire_slab.nil?
|
2247
2535
|
XMLHelper.add_element(slab, 'DepthBelowGrade', @depth_below_grade, :float) unless @depth_below_grade.nil?
|
2248
2536
|
insulation = XMLHelper.add_element(slab, 'PerimeterInsulation')
|
2249
2537
|
sys_id = XMLHelper.add_element(insulation, 'SystemIdentifier')
|
@@ -2254,6 +2542,7 @@ class HPXML < Object
|
|
2254
2542
|
end
|
2255
2543
|
layer = XMLHelper.add_element(insulation, 'Layer')
|
2256
2544
|
XMLHelper.add_element(layer, 'NominalRValue', @perimeter_insulation_r_value, :float) unless @perimeter_insulation_r_value.nil?
|
2545
|
+
XMLHelper.add_element(layer, 'InsulationDepth', @perimeter_insulation_depth, :float) unless @perimeter_insulation_depth.nil?
|
2257
2546
|
insulation = XMLHelper.add_element(slab, 'UnderSlabInsulation')
|
2258
2547
|
sys_id = XMLHelper.add_element(insulation, 'SystemIdentifier')
|
2259
2548
|
if not @under_slab_insulation_id.nil?
|
@@ -2263,6 +2552,8 @@ class HPXML < Object
|
|
2263
2552
|
end
|
2264
2553
|
layer = XMLHelper.add_element(insulation, 'Layer')
|
2265
2554
|
XMLHelper.add_element(layer, 'NominalRValue', @under_slab_insulation_r_value, :float) unless @under_slab_insulation_r_value.nil?
|
2555
|
+
XMLHelper.add_element(layer, 'InsulationWidth', @under_slab_insulation_width, :float) unless @under_slab_insulation_width.nil?
|
2556
|
+
XMLHelper.add_element(layer, 'InsulationSpansEntireSlab', @under_slab_insulation_spans_entire_slab, :boolean) unless @under_slab_insulation_spans_entire_slab.nil?
|
2266
2557
|
XMLHelper.add_extension(slab, 'CarpetFraction', @carpet_fraction, :float, @carpet_fraction_isdefaulted) unless @carpet_fraction.nil?
|
2267
2558
|
XMLHelper.add_extension(slab, 'CarpetRValue', @carpet_r_value, :float, @carpet_r_value_isdefaulted) unless @carpet_r_value.nil?
|
2268
2559
|
end
|
@@ -2275,19 +2566,19 @@ class HPXML < Object
|
|
2275
2566
|
@area = XMLHelper.get_value(slab, 'Area', :float)
|
2276
2567
|
@thickness = XMLHelper.get_value(slab, 'Thickness', :float)
|
2277
2568
|
@exposed_perimeter = XMLHelper.get_value(slab, 'ExposedPerimeter', :float)
|
2278
|
-
@perimeter_insulation_depth = XMLHelper.get_value(slab, 'PerimeterInsulationDepth', :float)
|
2279
|
-
@under_slab_insulation_width = XMLHelper.get_value(slab, 'UnderSlabInsulationWidth', :float)
|
2280
|
-
@under_slab_insulation_spans_entire_slab = XMLHelper.get_value(slab, 'UnderSlabInsulationSpansEntireSlab', :boolean)
|
2281
2569
|
@depth_below_grade = XMLHelper.get_value(slab, 'DepthBelowGrade', :float)
|
2282
2570
|
perimeter_insulation = XMLHelper.get_element(slab, 'PerimeterInsulation')
|
2283
2571
|
if not perimeter_insulation.nil?
|
2284
2572
|
@perimeter_insulation_id = HPXML::get_id(perimeter_insulation)
|
2285
2573
|
@perimeter_insulation_r_value = XMLHelper.get_value(perimeter_insulation, 'Layer/NominalRValue', :float)
|
2574
|
+
@perimeter_insulation_depth = XMLHelper.get_value(perimeter_insulation, 'Layer/InsulationDepth', :float)
|
2286
2575
|
end
|
2287
2576
|
under_slab_insulation = XMLHelper.get_element(slab, 'UnderSlabInsulation')
|
2288
2577
|
if not under_slab_insulation.nil?
|
2289
2578
|
@under_slab_insulation_id = HPXML::get_id(under_slab_insulation)
|
2290
2579
|
@under_slab_insulation_r_value = XMLHelper.get_value(under_slab_insulation, 'Layer/NominalRValue', :float)
|
2580
|
+
@under_slab_insulation_width = XMLHelper.get_value(under_slab_insulation, 'Layer/InsulationWidth', :float)
|
2581
|
+
@under_slab_insulation_spans_entire_slab = XMLHelper.get_value(under_slab_insulation, 'Layer/InsulationSpansEntireSlab', :boolean)
|
2291
2582
|
end
|
2292
2583
|
@carpet_fraction = XMLHelper.get_value(slab, 'extension/CarpetFraction', :float)
|
2293
2584
|
@carpet_r_value = XMLHelper.get_value(slab, 'extension/CarpetRValue', :float)
|
@@ -2309,7 +2600,7 @@ class HPXML < Object
|
|
2309
2600
|
end
|
2310
2601
|
|
2311
2602
|
class Window < BaseElement
|
2312
|
-
ATTRS = [:id, :area, :azimuth, :orientation, :frame_type, :
|
2603
|
+
ATTRS = [:id, :area, :azimuth, :orientation, :frame_type, :thermal_break, :glass_layers,
|
2313
2604
|
:glass_type, :gas_fill, :ufactor, :shgc, :interior_shading_factor_summer,
|
2314
2605
|
:interior_shading_factor_winter, :interior_shading_type, :exterior_shading_factor_summer,
|
2315
2606
|
:exterior_shading_factor_winter, :exterior_shading_type, :overhangs_depth,
|
@@ -2344,6 +2635,10 @@ class HPXML < Object
|
|
2344
2635
|
return (is_exterior && is_thermal_boundary)
|
2345
2636
|
end
|
2346
2637
|
|
2638
|
+
def is_conditioned
|
2639
|
+
return HPXML::is_conditioned(self)
|
2640
|
+
end
|
2641
|
+
|
2347
2642
|
def delete
|
2348
2643
|
@hpxml_object.windows.delete(self)
|
2349
2644
|
end
|
@@ -2362,20 +2657,20 @@ class HPXML < Object
|
|
2362
2657
|
sys_id = XMLHelper.add_element(window, 'SystemIdentifier')
|
2363
2658
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2364
2659
|
XMLHelper.add_element(window, 'Area', @area, :float) unless @area.nil?
|
2365
|
-
XMLHelper.add_element(window, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2366
|
-
XMLHelper.add_element(window, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2660
|
+
XMLHelper.add_element(window, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
2661
|
+
XMLHelper.add_element(window, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
2367
2662
|
if not @frame_type.nil?
|
2368
2663
|
frame_type_el = XMLHelper.add_element(window, 'FrameType')
|
2369
2664
|
frame_type = XMLHelper.add_element(frame_type_el, @frame_type)
|
2370
|
-
if
|
2371
|
-
XMLHelper.add_element(frame_type, 'ThermalBreak', @
|
2665
|
+
if [HPXML::WindowFrameTypeAluminum, HPXML::WindowFrameTypeMetal].include? @frame_type
|
2666
|
+
XMLHelper.add_element(frame_type, 'ThermalBreak', @thermal_break, :boolean, @thermal_break_isdefaulted) unless @thermal_break.nil?
|
2372
2667
|
end
|
2373
2668
|
end
|
2374
|
-
XMLHelper.add_element(window, 'GlassLayers', @glass_layers, :string) unless @glass_layers.nil?
|
2375
|
-
XMLHelper.add_element(window, 'GlassType', @glass_type, :string) unless @glass_type.nil?
|
2376
|
-
XMLHelper.add_element(window, 'GasFill', @gas_fill, :string) unless @gas_fill.nil?
|
2377
|
-
XMLHelper.add_element(window, 'UFactor', @ufactor, :float) unless @ufactor.nil?
|
2378
|
-
XMLHelper.add_element(window, 'SHGC', @shgc, :float) unless @shgc.nil?
|
2669
|
+
XMLHelper.add_element(window, 'GlassLayers', @glass_layers, :string, @glass_layers_isdefaulted) unless @glass_layers.nil?
|
2670
|
+
XMLHelper.add_element(window, 'GlassType', @glass_type, :string, @glass_type_isdefaulted) unless @glass_type.nil?
|
2671
|
+
XMLHelper.add_element(window, 'GasFill', @gas_fill, :string, @gas_fill_isdefaulted) unless @gas_fill.nil?
|
2672
|
+
XMLHelper.add_element(window, 'UFactor', @ufactor, :float, @ufactor_isdefaulted) unless @ufactor.nil?
|
2673
|
+
XMLHelper.add_element(window, 'SHGC', @shgc, :float, @shgc_isdefaulted) unless @shgc.nil?
|
2379
2674
|
if (not @exterior_shading_type.nil?) || (not @exterior_shading_factor_summer.nil?) || (not @exterior_shading_factor_winter.nil?)
|
2380
2675
|
exterior_shading = XMLHelper.add_element(window, 'ExteriorShading')
|
2381
2676
|
sys_id = XMLHelper.add_element(exterior_shading, 'SystemIdentifier')
|
@@ -2414,8 +2709,10 @@ class HPXML < Object
|
|
2414
2709
|
@azimuth = XMLHelper.get_value(window, 'Azimuth', :integer)
|
2415
2710
|
@orientation = XMLHelper.get_value(window, 'Orientation', :string)
|
2416
2711
|
@frame_type = XMLHelper.get_child_name(window, 'FrameType')
|
2417
|
-
if
|
2418
|
-
@
|
2712
|
+
if @frame_type == HPXML::WindowFrameTypeAluminum
|
2713
|
+
@thermal_break = XMLHelper.get_value(window, 'FrameType/Aluminum/ThermalBreak', :boolean)
|
2714
|
+
elsif @frame_type == HPXML::WindowFrameTypeMetal
|
2715
|
+
@thermal_break = XMLHelper.get_value(window, 'FrameType/Metal/ThermalBreak', :boolean)
|
2419
2716
|
end
|
2420
2717
|
@glass_layers = XMLHelper.get_value(window, 'GlassLayers', :string)
|
2421
2718
|
@glass_type = XMLHelper.get_value(window, 'GlassType', :string)
|
@@ -2452,7 +2749,7 @@ class HPXML < Object
|
|
2452
2749
|
end
|
2453
2750
|
|
2454
2751
|
class Skylight < BaseElement
|
2455
|
-
ATTRS = [:id, :area, :azimuth, :orientation, :frame_type, :
|
2752
|
+
ATTRS = [:id, :area, :azimuth, :orientation, :frame_type, :thermal_break, :glass_layers,
|
2456
2753
|
:glass_type, :gas_fill, :ufactor, :shgc, :interior_shading_factor_summer,
|
2457
2754
|
:interior_shading_factor_winter, :interior_shading_type, :exterior_shading_factor_summer,
|
2458
2755
|
:exterior_shading_factor_winter, :exterior_shading_type, :roof_idref]
|
@@ -2485,6 +2782,10 @@ class HPXML < Object
|
|
2485
2782
|
return (is_exterior && is_thermal_boundary)
|
2486
2783
|
end
|
2487
2784
|
|
2785
|
+
def is_conditioned
|
2786
|
+
return HPXML::is_conditioned(self)
|
2787
|
+
end
|
2788
|
+
|
2488
2789
|
def delete
|
2489
2790
|
@hpxml_object.skylights.delete(self)
|
2490
2791
|
end
|
@@ -2503,20 +2804,20 @@ class HPXML < Object
|
|
2503
2804
|
sys_id = XMLHelper.add_element(skylight, 'SystemIdentifier')
|
2504
2805
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
2505
2806
|
XMLHelper.add_element(skylight, 'Area', @area, :float) unless @area.nil?
|
2506
|
-
XMLHelper.add_element(skylight, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2507
|
-
XMLHelper.add_element(skylight, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2807
|
+
XMLHelper.add_element(skylight, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
2808
|
+
XMLHelper.add_element(skylight, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
2508
2809
|
if not @frame_type.nil?
|
2509
2810
|
frame_type_el = XMLHelper.add_element(skylight, 'FrameType')
|
2510
2811
|
frame_type = XMLHelper.add_element(frame_type_el, @frame_type)
|
2511
|
-
if
|
2512
|
-
XMLHelper.add_element(frame_type, 'ThermalBreak', @
|
2812
|
+
if [HPXML::WindowFrameTypeAluminum, HPXML::WindowFrameTypeMetal].include? @frame_type
|
2813
|
+
XMLHelper.add_element(frame_type, 'ThermalBreak', @thermal_break, :boolean, @thermal_break_isdefaulted) unless @thermal_break.nil?
|
2513
2814
|
end
|
2514
2815
|
end
|
2515
|
-
XMLHelper.add_element(skylight, 'GlassLayers', @glass_layers, :string) unless @glass_layers.nil?
|
2516
|
-
XMLHelper.add_element(skylight, 'GlassType', @glass_type, :string) unless @glass_type.nil?
|
2517
|
-
XMLHelper.add_element(skylight, 'GasFill', @gas_fill, :string) unless @gas_fill.nil?
|
2518
|
-
XMLHelper.add_element(skylight, 'UFactor', @ufactor, :float) unless @ufactor.nil?
|
2519
|
-
XMLHelper.add_element(skylight, 'SHGC', @shgc, :float) unless @shgc.nil?
|
2816
|
+
XMLHelper.add_element(skylight, 'GlassLayers', @glass_layers, :string, @glass_layers_isdefaulted) unless @glass_layers.nil?
|
2817
|
+
XMLHelper.add_element(skylight, 'GlassType', @glass_type, :string, @glass_type_isdefaulted) unless @glass_type.nil?
|
2818
|
+
XMLHelper.add_element(skylight, 'GasFill', @gas_fill, :string, @gas_fill_isdefaulted) unless @gas_fill.nil?
|
2819
|
+
XMLHelper.add_element(skylight, 'UFactor', @ufactor, :float, @ufactor_isdefaulted) unless @ufactor.nil?
|
2820
|
+
XMLHelper.add_element(skylight, 'SHGC', @shgc, :float, @shgc_isdefaulted) unless @shgc.nil?
|
2520
2821
|
if (not @exterior_shading_type.nil?) || (not @exterior_shading_factor_summer.nil?) || (not @exterior_shading_factor_winter.nil?)
|
2521
2822
|
exterior_shading = XMLHelper.add_element(skylight, 'ExteriorShading')
|
2522
2823
|
sys_id = XMLHelper.add_element(exterior_shading, 'SystemIdentifier')
|
@@ -2547,7 +2848,11 @@ class HPXML < Object
|
|
2547
2848
|
@azimuth = XMLHelper.get_value(skylight, 'Azimuth', :integer)
|
2548
2849
|
@orientation = XMLHelper.get_value(skylight, 'Orientation', :string)
|
2549
2850
|
@frame_type = XMLHelper.get_child_name(skylight, 'FrameType')
|
2550
|
-
@
|
2851
|
+
if @frame_type == HPXML::WindowFrameTypeAluminum
|
2852
|
+
@thermal_break = XMLHelper.get_value(skylight, 'FrameType/Aluminum/ThermalBreak', :boolean)
|
2853
|
+
elsif @frame_type == HPXML::WindowFrameTypeMetal
|
2854
|
+
@thermal_break = XMLHelper.get_value(skylight, 'FrameType/Metal/ThermalBreak', :boolean)
|
2855
|
+
end
|
2551
2856
|
@glass_layers = XMLHelper.get_value(skylight, 'GlassLayers', :string)
|
2552
2857
|
@glass_type = XMLHelper.get_value(skylight, 'GlassType', :string)
|
2553
2858
|
@gas_fill = XMLHelper.get_value(skylight, 'GasFill', :string)
|
@@ -2608,6 +2913,10 @@ class HPXML < Object
|
|
2608
2913
|
return (is_exterior && is_thermal_boundary)
|
2609
2914
|
end
|
2610
2915
|
|
2916
|
+
def is_conditioned
|
2917
|
+
return HPXML::is_conditioned(self)
|
2918
|
+
end
|
2919
|
+
|
2611
2920
|
def delete
|
2612
2921
|
@hpxml_object.doors.delete(self)
|
2613
2922
|
end
|
@@ -2630,8 +2939,8 @@ class HPXML < Object
|
|
2630
2939
|
XMLHelper.add_attribute(attached_to_wall, 'idref', @wall_idref)
|
2631
2940
|
end
|
2632
2941
|
XMLHelper.add_element(door, 'Area', @area, :float) unless @area.nil?
|
2633
|
-
XMLHelper.add_element(door, 'Azimuth', @azimuth, :integer) unless @azimuth.nil?
|
2634
|
-
XMLHelper.add_element(door, 'Orientation', @orientation, :string) unless @orientation.nil?
|
2942
|
+
XMLHelper.add_element(door, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
|
2943
|
+
XMLHelper.add_element(door, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
|
2635
2944
|
XMLHelper.add_element(door, 'RValue', @r_value, :float) unless @r_value.nil?
|
2636
2945
|
end
|
2637
2946
|
|
@@ -2647,6 +2956,70 @@ class HPXML < Object
|
|
2647
2956
|
end
|
2648
2957
|
end
|
2649
2958
|
|
2959
|
+
class PartitionWallMass < BaseElement
|
2960
|
+
ATTRS = [:area_fraction, :interior_finish_type, :interior_finish_thickness]
|
2961
|
+
attr_accessor(*ATTRS)
|
2962
|
+
|
2963
|
+
def check_for_errors
|
2964
|
+
errors = []
|
2965
|
+
return errors
|
2966
|
+
end
|
2967
|
+
|
2968
|
+
def to_oga(doc)
|
2969
|
+
return if nil?
|
2970
|
+
|
2971
|
+
partition_wall_mass = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Enclosure', 'extension', 'PartitionWallMass'])
|
2972
|
+
XMLHelper.add_element(partition_wall_mass, 'AreaFraction', @area_fraction, :float, @area_fraction_isdefaulted) unless @area_fraction.nil?
|
2973
|
+
if (not @interior_finish_type.nil?) || (not @interior_finish_thickness.nil?)
|
2974
|
+
interior_finish = XMLHelper.add_element(partition_wall_mass, 'InteriorFinish')
|
2975
|
+
XMLHelper.add_element(interior_finish, 'Type', @interior_finish_type, :string, @interior_finish_type_isdefaulted) unless @interior_finish_type.nil?
|
2976
|
+
XMLHelper.add_element(interior_finish, 'Thickness', @interior_finish_thickness, :float, @interior_finish_thickness_isdefaulted) unless @interior_finish_thickness.nil?
|
2977
|
+
end
|
2978
|
+
end
|
2979
|
+
|
2980
|
+
def from_oga(hpxml)
|
2981
|
+
return if hpxml.nil?
|
2982
|
+
|
2983
|
+
partition_wall_mass = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Enclosure/extension/PartitionWallMass')
|
2984
|
+
return if partition_wall_mass.nil?
|
2985
|
+
|
2986
|
+
@area_fraction = XMLHelper.get_value(partition_wall_mass, 'AreaFraction', :float)
|
2987
|
+
interior_finish = XMLHelper.get_element(partition_wall_mass, 'InteriorFinish')
|
2988
|
+
if not interior_finish.nil?
|
2989
|
+
@interior_finish_type = XMLHelper.get_value(interior_finish, 'Type', :string)
|
2990
|
+
@interior_finish_thickness = XMLHelper.get_value(interior_finish, 'Thickness', :float)
|
2991
|
+
end
|
2992
|
+
end
|
2993
|
+
end
|
2994
|
+
|
2995
|
+
class FurnitureMass < BaseElement
|
2996
|
+
ATTRS = [:area_fraction, :type]
|
2997
|
+
attr_accessor(*ATTRS)
|
2998
|
+
|
2999
|
+
def check_for_errors
|
3000
|
+
errors = []
|
3001
|
+
return errors
|
3002
|
+
end
|
3003
|
+
|
3004
|
+
def to_oga(doc)
|
3005
|
+
return if nil?
|
3006
|
+
|
3007
|
+
furniture_mass = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Enclosure', 'extension', 'FurnitureMass'])
|
3008
|
+
XMLHelper.add_element(furniture_mass, 'AreaFraction', @area_fraction, :float, @area_fraction_isdefaulted) unless @area_fraction.nil?
|
3009
|
+
XMLHelper.add_element(furniture_mass, 'Type', @type, :string, @type_isdefaulted) unless @type.nil?
|
3010
|
+
end
|
3011
|
+
|
3012
|
+
def from_oga(hpxml)
|
3013
|
+
return if hpxml.nil?
|
3014
|
+
|
3015
|
+
furniture_mass = XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Enclosure/extension/FurnitureMass')
|
3016
|
+
return if furniture_mass.nil?
|
3017
|
+
|
3018
|
+
@area_fraction = XMLHelper.get_value(furniture_mass, 'AreaFraction', :float)
|
3019
|
+
@type = XMLHelper.get_value(furniture_mass, 'Type', :string)
|
3020
|
+
end
|
3021
|
+
end
|
3022
|
+
|
2650
3023
|
class HeatingSystems < BaseArrayElement
|
2651
3024
|
def add(**kwargs)
|
2652
3025
|
self << HeatingSystem.new(@hpxml_object, **kwargs)
|
@@ -2671,8 +3044,7 @@ class HPXML < Object
|
|
2671
3044
|
:heating_efficiency_percent, :fraction_heat_load_served, :electric_auxiliary_energy,
|
2672
3045
|
:third_party_certification, :seed_id, :is_shared_system, :number_of_units_served,
|
2673
3046
|
:shared_loop_watts, :shared_loop_motor_efficiency, :fan_coil_watts, :fan_watts_per_cfm,
|
2674
|
-
:
|
2675
|
-
:fan_watts, :heating_airflow_cfm, :location]
|
3047
|
+
:airflow_defect_ratio, :fan_watts, :heating_airflow_cfm, :location, :primary_system]
|
2676
3048
|
attr_accessor(*ATTRS)
|
2677
3049
|
|
2678
3050
|
def distribution_system
|
@@ -2689,14 +3061,35 @@ class HPXML < Object
|
|
2689
3061
|
def attached_cooling_system
|
2690
3062
|
return if distribution_system.nil?
|
2691
3063
|
|
3064
|
+
# by distribution system
|
2692
3065
|
distribution_system.hvac_systems.each do |hvac_system|
|
2693
3066
|
next if hvac_system.id == @id
|
2694
3067
|
|
2695
3068
|
return hvac_system
|
2696
3069
|
end
|
3070
|
+
|
3071
|
+
return
|
3072
|
+
end
|
3073
|
+
|
3074
|
+
def related_water_heating_system
|
3075
|
+
@hpxml_object.water_heating_systems.each do |water_heating_system|
|
3076
|
+
next unless water_heating_system.related_hvac_idref == @id
|
3077
|
+
|
3078
|
+
return water_heating_system
|
3079
|
+
end
|
2697
3080
|
return
|
2698
3081
|
end
|
2699
3082
|
|
3083
|
+
def is_heat_pump_backup_system
|
3084
|
+
@hpxml_object.heat_pumps.each do |heat_pump|
|
3085
|
+
next if heat_pump.backup_system_idref.nil?
|
3086
|
+
next if heat_pump.backup_system_idref != @id
|
3087
|
+
|
3088
|
+
return true
|
3089
|
+
end
|
3090
|
+
return false
|
3091
|
+
end
|
3092
|
+
|
2700
3093
|
def delete
|
2701
3094
|
@hpxml_object.heating_systems.delete(self)
|
2702
3095
|
@hpxml_object.water_heating_systems.each do |water_heating_system|
|
@@ -2716,6 +3109,7 @@ class HPXML < Object
|
|
2716
3109
|
return if nil?
|
2717
3110
|
|
2718
3111
|
hvac_plant = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant'])
|
3112
|
+
primary_systems = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant', 'PrimarySystems']) unless @hpxml_object.primary_hvac_systems.empty?
|
2719
3113
|
heating_system = XMLHelper.add_element(hvac_plant, 'HeatingSystem')
|
2720
3114
|
sys_id = XMLHelper.add_element(heating_system, 'SystemIdentifier')
|
2721
3115
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
@@ -2734,20 +3128,15 @@ class HPXML < Object
|
|
2734
3128
|
end
|
2735
3129
|
XMLHelper.add_element(heating_system, 'HeatingSystemFuel', @heating_system_fuel, :string) unless @heating_system_fuel.nil?
|
2736
3130
|
XMLHelper.add_element(heating_system, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
|
2737
|
-
|
2738
|
-
|
2739
|
-
|
2740
|
-
|
2741
|
-
efficiency_units = UnitsAFUE
|
2742
|
-
efficiency_value = @heating_efficiency_afue
|
2743
|
-
elsif [HVACTypeElectricResistance, HVACTypeStove, HVACTypePortableHeater, HVACTypeFixedHeater, HVACTypeFireplace].include? @heating_system_type
|
2744
|
-
efficiency_units = UnitsPercent
|
2745
|
-
efficiency_value = @heating_efficiency_percent
|
3131
|
+
if not @heating_efficiency_afue.nil?
|
3132
|
+
annual_efficiency = XMLHelper.add_element(heating_system, 'AnnualHeatingEfficiency')
|
3133
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsAFUE, :string)
|
3134
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @heating_efficiency_afue, :float, @heating_efficiency_afue_isdefaulted)
|
2746
3135
|
end
|
2747
|
-
if not
|
3136
|
+
if not @heating_efficiency_percent.nil?
|
2748
3137
|
annual_efficiency = XMLHelper.add_element(heating_system, 'AnnualHeatingEfficiency')
|
2749
|
-
XMLHelper.add_element(annual_efficiency, 'Units',
|
2750
|
-
XMLHelper.add_element(annual_efficiency, 'Value',
|
3138
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsPercent, :string)
|
3139
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @heating_efficiency_percent, :float, @heating_efficiency_percent_isdefaulted)
|
2751
3140
|
end
|
2752
3141
|
XMLHelper.add_element(heating_system, 'FractionHeatLoadServed', @fraction_heat_load_served, :float, @fraction_heat_load_served_isdefaulted) unless @fraction_heat_load_served.nil?
|
2753
3142
|
XMLHelper.add_element(heating_system, 'ElectricAuxiliaryEnergy', @electric_auxiliary_energy, :float, @electric_auxiliary_energy_isdefaulted) unless @electric_auxiliary_energy.nil?
|
@@ -2756,11 +3145,13 @@ class HPXML < Object
|
|
2756
3145
|
XMLHelper.add_extension(heating_system, 'FanCoilWatts', @fan_coil_watts, :float) unless @fan_coil_watts.nil?
|
2757
3146
|
XMLHelper.add_extension(heating_system, 'FanPowerWattsPerCFM', @fan_watts_per_cfm, :float, @fan_watts_per_cfm_isdefaulted) unless @fan_watts_per_cfm.nil?
|
2758
3147
|
XMLHelper.add_extension(heating_system, 'FanPowerWatts', @fan_watts, :float, @fan_watts_isdefaulted) unless @fan_watts.nil?
|
2759
|
-
XMLHelper.add_extension(heating_system, 'FanPowerNotTested', @fan_power_not_tested, :boolean) unless @fan_power_not_tested.nil?
|
2760
3148
|
XMLHelper.add_extension(heating_system, 'AirflowDefectRatio', @airflow_defect_ratio, :float, @airflow_defect_ratio_isdefaulted) unless @airflow_defect_ratio.nil?
|
2761
|
-
XMLHelper.add_extension(heating_system, 'AirflowNotTested', @airflow_not_tested, :boolean) unless @airflow_not_tested.nil?
|
2762
3149
|
XMLHelper.add_extension(heating_system, 'HeatingAirflowCFM', @heating_airflow_cfm, :float, @heating_airflow_cfm_isdefaulted) unless @heating_airflow_cfm.nil?
|
2763
3150
|
XMLHelper.add_extension(heating_system, 'SeedId', @seed_id, :string) unless @seed_id.nil?
|
3151
|
+
if @primary_system
|
3152
|
+
primary_heating_system = XMLHelper.insert_element(primary_systems, 'PrimaryHeatingSystem')
|
3153
|
+
XMLHelper.add_attribute(primary_heating_system, 'idref', @id)
|
3154
|
+
end
|
2764
3155
|
end
|
2765
3156
|
|
2766
3157
|
def from_oga(heating_system)
|
@@ -2776,11 +3167,8 @@ class HPXML < Object
|
|
2776
3167
|
@heating_system_type = XMLHelper.get_child_name(heating_system, 'HeatingSystemType')
|
2777
3168
|
@heating_system_fuel = XMLHelper.get_value(heating_system, 'HeatingSystemFuel', :string)
|
2778
3169
|
@heating_capacity = XMLHelper.get_value(heating_system, 'HeatingCapacity', :float)
|
2779
|
-
|
2780
|
-
|
2781
|
-
elsif [HVACTypeElectricResistance, HVACTypeStove, HVACTypePortableHeater, HVACTypeFixedHeater, HVACTypeFireplace].include? @heating_system_type
|
2782
|
-
@heating_efficiency_percent = XMLHelper.get_value(heating_system, "AnnualHeatingEfficiency[Units='Percent']/Value", :float)
|
2783
|
-
end
|
3170
|
+
@heating_efficiency_afue = XMLHelper.get_value(heating_system, "AnnualHeatingEfficiency[Units='#{UnitsAFUE}']/Value", :float)
|
3171
|
+
@heating_efficiency_percent = XMLHelper.get_value(heating_system, "AnnualHeatingEfficiency[Units='Percent']/Value", :float)
|
2784
3172
|
@fraction_heat_load_served = XMLHelper.get_value(heating_system, 'FractionHeatLoadServed', :float)
|
2785
3173
|
@electric_auxiliary_energy = XMLHelper.get_value(heating_system, 'ElectricAuxiliaryEnergy', :float)
|
2786
3174
|
@shared_loop_watts = XMLHelper.get_value(heating_system, 'extension/SharedLoopWatts', :float)
|
@@ -2788,11 +3176,15 @@ class HPXML < Object
|
|
2788
3176
|
@fan_coil_watts = XMLHelper.get_value(heating_system, 'extension/FanCoilWatts', :float)
|
2789
3177
|
@fan_watts_per_cfm = XMLHelper.get_value(heating_system, 'extension/FanPowerWattsPerCFM', :float)
|
2790
3178
|
@fan_watts = XMLHelper.get_value(heating_system, 'extension/FanPowerWatts', :float)
|
2791
|
-
@fan_power_not_tested = XMLHelper.get_value(heating_system, 'extension/FanPowerNotTested', :boolean)
|
2792
3179
|
@airflow_defect_ratio = XMLHelper.get_value(heating_system, 'extension/AirflowDefectRatio', :float)
|
2793
|
-
@airflow_not_tested = XMLHelper.get_value(heating_system, 'extension/AirflowNotTested', :boolean)
|
2794
3180
|
@heating_airflow_cfm = XMLHelper.get_value(heating_system, 'extension/HeatingAirflowCFM', :float)
|
2795
3181
|
@seed_id = XMLHelper.get_value(heating_system, 'extension/SeedId', :string)
|
3182
|
+
primary_heating_system = HPXML::get_idref(XMLHelper.get_element(heating_system, '../PrimarySystems/PrimaryHeatingSystem'))
|
3183
|
+
if primary_heating_system == @id
|
3184
|
+
@primary_system = true
|
3185
|
+
else
|
3186
|
+
@primary_system = false
|
3187
|
+
end
|
2796
3188
|
end
|
2797
3189
|
end
|
2798
3190
|
|
@@ -2817,11 +3209,10 @@ class HPXML < Object
|
|
2817
3209
|
class CoolingSystem < BaseElement
|
2818
3210
|
ATTRS = [:id, :distribution_system_idref, :year_installed, :cooling_system_type,
|
2819
3211
|
:cooling_system_fuel, :cooling_capacity, :compressor_type, :fraction_cool_load_served,
|
2820
|
-
:cooling_efficiency_seer, :cooling_efficiency_eer, :cooling_efficiency_kw_per_ton,
|
3212
|
+
:cooling_efficiency_seer, :cooling_efficiency_eer, :cooling_efficiency_ceer, :cooling_efficiency_kw_per_ton,
|
2821
3213
|
:cooling_shr, :third_party_certification, :seed_id, :is_shared_system, :number_of_units_served,
|
2822
3214
|
:shared_loop_watts, :shared_loop_motor_efficiency, :fan_coil_watts, :airflow_defect_ratio,
|
2823
|
-
:fan_watts_per_cfm, :
|
2824
|
-
:charge_not_tested, :cooling_airflow_cfm, :location]
|
3215
|
+
:fan_watts_per_cfm, :charge_defect_ratio, :cooling_airflow_cfm, :location, :primary_system]
|
2825
3216
|
attr_accessor(*ATTRS)
|
2826
3217
|
|
2827
3218
|
def distribution_system
|
@@ -2836,6 +3227,7 @@ class HPXML < Object
|
|
2836
3227
|
end
|
2837
3228
|
|
2838
3229
|
def attached_heating_system
|
3230
|
+
# by distribution system
|
2839
3231
|
return if distribution_system.nil?
|
2840
3232
|
|
2841
3233
|
distribution_system.hvac_systems.each do |hvac_system|
|
@@ -2865,6 +3257,7 @@ class HPXML < Object
|
|
2865
3257
|
return if nil?
|
2866
3258
|
|
2867
3259
|
hvac_plant = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant'])
|
3260
|
+
primary_systems = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant', 'PrimarySystems']) unless @hpxml_object.primary_hvac_systems.empty?
|
2868
3261
|
cooling_system = XMLHelper.add_element(hvac_plant, 'CoolingSystem')
|
2869
3262
|
sys_id = XMLHelper.add_element(cooling_system, 'SystemIdentifier')
|
2870
3263
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
@@ -2882,36 +3275,39 @@ class HPXML < Object
|
|
2882
3275
|
XMLHelper.add_element(cooling_system, 'CoolingCapacity', @cooling_capacity, :float, @cooling_capacity_isdefaulted) unless @cooling_capacity.nil?
|
2883
3276
|
XMLHelper.add_element(cooling_system, 'CompressorType', @compressor_type, :string, @compressor_type_isdefaulted) unless @compressor_type.nil?
|
2884
3277
|
XMLHelper.add_element(cooling_system, 'FractionCoolLoadServed', @fraction_cool_load_served, :float, @fraction_cool_load_served_isdefaulted) unless @fraction_cool_load_served.nil?
|
2885
|
-
|
2886
|
-
efficiency_units = nil
|
2887
|
-
efficiency_value = nil
|
2888
|
-
if [HVACTypeCentralAirConditioner, HVACTypeMiniSplitAirConditioner].include? @cooling_system_type
|
2889
|
-
efficiency_units = UnitsSEER
|
2890
|
-
efficiency_value = @cooling_efficiency_seer
|
2891
|
-
elsif [HVACTypeRoomAirConditioner].include? @cooling_system_type
|
2892
|
-
efficiency_units = UnitsEER
|
2893
|
-
efficiency_value = @cooling_efficiency_eer
|
2894
|
-
elsif [HVACTypeChiller].include? @cooling_system_type
|
2895
|
-
efficiency_units = UnitsKwPerTon
|
2896
|
-
efficiency_value = @cooling_efficiency_kw_per_ton
|
2897
|
-
end
|
2898
|
-
if not efficiency_value.nil?
|
3278
|
+
if not @cooling_efficiency_seer.nil?
|
2899
3279
|
annual_efficiency = XMLHelper.add_element(cooling_system, 'AnnualCoolingEfficiency')
|
2900
|
-
XMLHelper.add_element(annual_efficiency, 'Units',
|
2901
|
-
XMLHelper.add_element(annual_efficiency, 'Value',
|
3280
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsSEER, :string)
|
3281
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_seer, :float, @cooling_efficiency_seer_isdefaulted)
|
3282
|
+
end
|
3283
|
+
if not @cooling_efficiency_eer.nil?
|
3284
|
+
annual_efficiency = XMLHelper.add_element(cooling_system, 'AnnualCoolingEfficiency')
|
3285
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsEER, :string)
|
3286
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_eer, :float, @cooling_efficiency_eer_isdefaulted)
|
3287
|
+
end
|
3288
|
+
if not @cooling_efficiency_ceer.nil?
|
3289
|
+
annual_efficiency = XMLHelper.add_element(cooling_system, 'AnnualCoolingEfficiency')
|
3290
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsCEER, :string)
|
3291
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_ceer, :float, @cooling_efficiency_ceer_isdefaulted)
|
3292
|
+
end
|
3293
|
+
if not @cooling_efficiency_kw_per_ton.nil?
|
3294
|
+
annual_efficiency = XMLHelper.add_element(cooling_system, 'AnnualCoolingEfficiency')
|
3295
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsKwPerTon, :string)
|
3296
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_kw_per_ton, :float, @cooling_efficiency_kw_per_ton_isdefaulted)
|
2902
3297
|
end
|
2903
3298
|
XMLHelper.add_element(cooling_system, 'SensibleHeatFraction', @cooling_shr, :float, @cooling_shr_isdefaulted) unless @cooling_shr.nil?
|
2904
3299
|
XMLHelper.add_extension(cooling_system, 'AirflowDefectRatio', @airflow_defect_ratio, :float, @airflow_defect_ratio_isdefaulted) unless @airflow_defect_ratio.nil?
|
2905
3300
|
XMLHelper.add_extension(cooling_system, 'ChargeDefectRatio', @charge_defect_ratio, :float, @charge_defect_ratio_isdefaulted) unless @charge_defect_ratio.nil?
|
2906
|
-
XMLHelper.add_extension(cooling_system, 'ChargeNotTested', @charge_not_tested, :boolean) unless @charge_not_tested.nil?
|
2907
3301
|
XMLHelper.add_extension(cooling_system, 'FanPowerWattsPerCFM', @fan_watts_per_cfm, :float, @fan_watts_per_cfm_isdefaulted) unless @fan_watts_per_cfm.nil?
|
2908
|
-
XMLHelper.add_extension(cooling_system, 'FanPowerNotTested', @fan_power_not_tested, :boolean) unless @fan_power_not_tested.nil?
|
2909
|
-
XMLHelper.add_extension(cooling_system, 'AirflowNotTested', @airflow_not_tested, :boolean) unless @airflow_not_tested.nil?
|
2910
3302
|
XMLHelper.add_extension(cooling_system, 'CoolingAirflowCFM', @cooling_airflow_cfm, :float, @cooling_airflow_cfm_isdefaulted) unless @cooling_airflow_cfm.nil?
|
2911
3303
|
XMLHelper.add_extension(cooling_system, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
|
2912
3304
|
XMLHelper.add_extension(cooling_system, 'SharedLoopMotorEfficiency', @shared_loop_motor_efficiency, :float) unless @shared_loop_motor_efficiency.nil?
|
2913
3305
|
XMLHelper.add_extension(cooling_system, 'FanCoilWatts', @fan_coil_watts, :float) unless @fan_coil_watts.nil?
|
2914
3306
|
XMLHelper.add_extension(cooling_system, 'SeedId', @seed_id, :string) unless @seed_id.nil?
|
3307
|
+
if @primary_system
|
3308
|
+
primary_cooling_system = XMLHelper.add_element(primary_systems, 'PrimaryCoolingSystem')
|
3309
|
+
XMLHelper.add_attribute(primary_cooling_system, 'idref', @id)
|
3310
|
+
end
|
2915
3311
|
end
|
2916
3312
|
|
2917
3313
|
def from_oga(cooling_system)
|
@@ -2929,25 +3325,25 @@ class HPXML < Object
|
|
2929
3325
|
@cooling_capacity = XMLHelper.get_value(cooling_system, 'CoolingCapacity', :float)
|
2930
3326
|
@compressor_type = XMLHelper.get_value(cooling_system, 'CompressorType', :string)
|
2931
3327
|
@fraction_cool_load_served = XMLHelper.get_value(cooling_system, 'FractionCoolLoadServed', :float)
|
2932
|
-
|
2933
|
-
|
2934
|
-
|
2935
|
-
|
2936
|
-
elsif [HVACTypeChiller].include? @cooling_system_type
|
2937
|
-
@cooling_efficiency_kw_per_ton = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsKwPerTon}']/Value", :float)
|
2938
|
-
end
|
3328
|
+
@cooling_efficiency_seer = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsSEER}']/Value", :float)
|
3329
|
+
@cooling_efficiency_eer = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsEER}']/Value", :float)
|
3330
|
+
@cooling_efficiency_ceer = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsCEER}']/Value", :float)
|
3331
|
+
@cooling_efficiency_kw_per_ton = XMLHelper.get_value(cooling_system, "AnnualCoolingEfficiency[Units='#{UnitsKwPerTon}']/Value", :float)
|
2939
3332
|
@cooling_shr = XMLHelper.get_value(cooling_system, 'SensibleHeatFraction', :float)
|
2940
3333
|
@airflow_defect_ratio = XMLHelper.get_value(cooling_system, 'extension/AirflowDefectRatio', :float)
|
2941
3334
|
@charge_defect_ratio = XMLHelper.get_value(cooling_system, 'extension/ChargeDefectRatio', :float)
|
2942
|
-
@charge_not_tested = XMLHelper.get_value(cooling_system, 'extension/ChargeNotTested', :boolean)
|
2943
3335
|
@fan_watts_per_cfm = XMLHelper.get_value(cooling_system, 'extension/FanPowerWattsPerCFM', :float)
|
2944
|
-
@fan_power_not_tested = XMLHelper.get_value(cooling_system, 'extension/FanPowerNotTested', :boolean)
|
2945
|
-
@airflow_not_tested = XMLHelper.get_value(cooling_system, 'extension/AirflowNotTested', :boolean)
|
2946
3336
|
@cooling_airflow_cfm = XMLHelper.get_value(cooling_system, 'extension/CoolingAirflowCFM', :float)
|
2947
3337
|
@shared_loop_watts = XMLHelper.get_value(cooling_system, 'extension/SharedLoopWatts', :float)
|
2948
3338
|
@shared_loop_motor_efficiency = XMLHelper.get_value(cooling_system, 'extension/SharedLoopMotorEfficiency', :float)
|
2949
3339
|
@fan_coil_watts = XMLHelper.get_value(cooling_system, 'extension/FanCoilWatts', :float)
|
2950
3340
|
@seed_id = XMLHelper.get_value(cooling_system, 'extension/SeedId', :string)
|
3341
|
+
primary_cooling_system = HPXML::get_idref(XMLHelper.get_element(cooling_system, '../PrimarySystems/PrimaryCoolingSystem'))
|
3342
|
+
if primary_cooling_system == @id
|
3343
|
+
@primary_system = true
|
3344
|
+
else
|
3345
|
+
@primary_system = false
|
3346
|
+
end
|
2951
3347
|
end
|
2952
3348
|
end
|
2953
3349
|
|
@@ -2976,15 +3372,14 @@ class HPXML < Object
|
|
2976
3372
|
class HeatPump < BaseElement
|
2977
3373
|
ATTRS = [:id, :distribution_system_idref, :year_installed, :heat_pump_type, :heat_pump_fuel,
|
2978
3374
|
:heating_capacity, :heating_capacity_17F, :cooling_capacity, :compressor_type,
|
2979
|
-
:cooling_shr, :backup_heating_fuel, :backup_heating_capacity,
|
3375
|
+
:cooling_shr, :backup_type, :backup_system_idref, :backup_heating_fuel, :backup_heating_capacity,
|
2980
3376
|
:backup_heating_efficiency_percent, :backup_heating_efficiency_afue,
|
2981
3377
|
:backup_heating_switchover_temp, :fraction_heat_load_served, :fraction_cool_load_served,
|
2982
|
-
:cooling_efficiency_seer, :cooling_efficiency_eer, :heating_efficiency_hspf,
|
3378
|
+
:cooling_efficiency_seer, :cooling_efficiency_eer, :cooling_efficiency_ceer, :heating_efficiency_hspf,
|
2983
3379
|
:heating_efficiency_cop, :third_party_certification, :seed_id, :pump_watts_per_ton,
|
2984
|
-
:fan_watts_per_cfm, :
|
2985
|
-
:
|
2986
|
-
:
|
2987
|
-
:location]
|
3380
|
+
:fan_watts_per_cfm, :is_shared_system, :number_of_units_served, :shared_loop_watts,
|
3381
|
+
:shared_loop_motor_efficiency, :airflow_defect_ratio, :charge_defect_ratio,
|
3382
|
+
:heating_airflow_cfm, :cooling_airflow_cfm, :location, :primary_heating_system, :primary_cooling_system]
|
2988
3383
|
attr_accessor(*ATTRS)
|
2989
3384
|
|
2990
3385
|
def distribution_system
|
@@ -2998,6 +3393,33 @@ class HPXML < Object
|
|
2998
3393
|
fail "Attached HVAC distribution system '#{@distribution_system_idref}' not found for HVAC system '#{@id}'."
|
2999
3394
|
end
|
3000
3395
|
|
3396
|
+
def is_dual_fuel
|
3397
|
+
if @backup_heating_fuel.nil?
|
3398
|
+
return false
|
3399
|
+
end
|
3400
|
+
if @backup_heating_fuel.to_s == @heat_pump_fuel.to_s
|
3401
|
+
return false
|
3402
|
+
end
|
3403
|
+
|
3404
|
+
return true
|
3405
|
+
end
|
3406
|
+
|
3407
|
+
def primary_system
|
3408
|
+
return true if @primary_heating_system || @primary_cooling_system
|
3409
|
+
|
3410
|
+
return false
|
3411
|
+
end
|
3412
|
+
|
3413
|
+
def backup_system
|
3414
|
+
return if @backup_system_idref.nil?
|
3415
|
+
|
3416
|
+
@hpxml_object.heating_systems.each do |heating_system|
|
3417
|
+
next unless heating_system.id == @backup_system_idref
|
3418
|
+
|
3419
|
+
return heating_system
|
3420
|
+
end
|
3421
|
+
end
|
3422
|
+
|
3001
3423
|
def delete
|
3002
3424
|
@hpxml_object.heat_pumps.delete(self)
|
3003
3425
|
@hpxml_object.water_heating_systems.each do |water_heating_system|
|
@@ -3017,6 +3439,7 @@ class HPXML < Object
|
|
3017
3439
|
return if nil?
|
3018
3440
|
|
3019
3441
|
hvac_plant = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant'])
|
3442
|
+
primary_systems = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'HVAC', 'HVACPlant', 'PrimarySystems']) unless @hpxml_object.primary_hvac_systems.empty?
|
3020
3443
|
heat_pump = XMLHelper.add_element(hvac_plant, 'HeatPump')
|
3021
3444
|
sys_id = XMLHelper.add_element(heat_pump, 'SystemIdentifier')
|
3022
3445
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
@@ -3036,58 +3459,68 @@ class HPXML < Object
|
|
3036
3459
|
XMLHelper.add_element(heat_pump, 'CoolingCapacity', @cooling_capacity, :float, @cooling_capacity_isdefaulted) unless @cooling_capacity.nil?
|
3037
3460
|
XMLHelper.add_element(heat_pump, 'CompressorType', @compressor_type, :string, @compressor_type_isdefaulted) unless @compressor_type.nil?
|
3038
3461
|
XMLHelper.add_element(heat_pump, 'CoolingSensibleHeatFraction', @cooling_shr, :float, @cooling_shr_isdefaulted) unless @cooling_shr.nil?
|
3039
|
-
XMLHelper.add_element(heat_pump, '
|
3040
|
-
|
3041
|
-
|
3042
|
-
|
3043
|
-
|
3044
|
-
|
3462
|
+
XMLHelper.add_element(heat_pump, 'BackupType', @backup_type, :string, @backup_type_isdefaulted) unless @backup_type.nil?
|
3463
|
+
if not @backup_system_idref.nil?
|
3464
|
+
backup_system = XMLHelper.add_element(heat_pump, 'BackupSystem')
|
3465
|
+
XMLHelper.add_attribute(backup_system, 'idref', @backup_system_idref)
|
3466
|
+
end
|
3467
|
+
XMLHelper.add_element(heat_pump, 'BackupSystemFuel', @backup_heating_fuel, :string, @backup_heating_fuel_isdefaulted) unless @backup_heating_fuel.nil?
|
3468
|
+
if not @backup_heating_efficiency_percent.nil?
|
3045
3469
|
backup_eff = XMLHelper.add_element(heat_pump, 'BackupAnnualHeatingEfficiency')
|
3046
|
-
XMLHelper.add_element(backup_eff, 'Units',
|
3047
|
-
XMLHelper.add_element(backup_eff, 'Value',
|
3470
|
+
XMLHelper.add_element(backup_eff, 'Units', UnitsPercent, :string)
|
3471
|
+
XMLHelper.add_element(backup_eff, 'Value', @backup_heating_efficiency_percent, :float)
|
3472
|
+
end
|
3473
|
+
if not @backup_heating_efficiency_afue.nil?
|
3474
|
+
backup_eff = XMLHelper.add_element(heat_pump, 'BackupAnnualHeatingEfficiency')
|
3475
|
+
XMLHelper.add_element(backup_eff, 'Units', UnitsAFUE, :string)
|
3476
|
+
XMLHelper.add_element(backup_eff, 'Value', @backup_heating_efficiency_afue, :float)
|
3048
3477
|
end
|
3049
3478
|
XMLHelper.add_element(heat_pump, 'BackupHeatingCapacity', @backup_heating_capacity, :float, @backup_heating_capacity_isdefaulted) unless @backup_heating_capacity.nil?
|
3050
|
-
XMLHelper.add_element(heat_pump, 'BackupHeatingSwitchoverTemperature', @backup_heating_switchover_temp, :float) unless @backup_heating_switchover_temp.nil?
|
3479
|
+
XMLHelper.add_element(heat_pump, 'BackupHeatingSwitchoverTemperature', @backup_heating_switchover_temp, :float, @backup_heating_switchover_temp_isdefaulted) unless @backup_heating_switchover_temp.nil?
|
3051
3480
|
XMLHelper.add_element(heat_pump, 'FractionHeatLoadServed', @fraction_heat_load_served, :float, @fraction_heat_load_served_isdefaulted) unless @fraction_heat_load_served.nil?
|
3052
3481
|
XMLHelper.add_element(heat_pump, 'FractionCoolLoadServed', @fraction_cool_load_served, :float, @fraction_cool_load_served_isdefaulted) unless @fraction_cool_load_served.nil?
|
3053
|
-
|
3054
|
-
clg_efficiency_units = nil
|
3055
|
-
clg_efficiency_value = nil
|
3056
|
-
htg_efficiency_units = nil
|
3057
|
-
htg_efficiency_value = nil
|
3058
|
-
if [HVACTypeHeatPumpAirToAir, HVACTypeHeatPumpMiniSplit].include? @heat_pump_type
|
3059
|
-
clg_efficiency_units = UnitsSEER
|
3060
|
-
clg_efficiency_value = @cooling_efficiency_seer
|
3061
|
-
htg_efficiency_units = UnitsHSPF
|
3062
|
-
htg_efficiency_value = @heating_efficiency_hspf
|
3063
|
-
elsif [HVACTypeHeatPumpGroundToAir, HVACTypeHeatPumpWaterLoopToAir].include? @heat_pump_type
|
3064
|
-
clg_efficiency_units = UnitsEER
|
3065
|
-
clg_efficiency_value = @cooling_efficiency_eer
|
3066
|
-
htg_efficiency_units = UnitsCOP
|
3067
|
-
htg_efficiency_value = @heating_efficiency_cop
|
3068
|
-
end
|
3069
|
-
if not clg_efficiency_value.nil?
|
3482
|
+
if not @cooling_efficiency_seer.nil?
|
3070
3483
|
annual_efficiency = XMLHelper.add_element(heat_pump, 'AnnualCoolingEfficiency')
|
3071
|
-
XMLHelper.add_element(annual_efficiency, 'Units',
|
3072
|
-
XMLHelper.add_element(annual_efficiency, 'Value',
|
3484
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsSEER, :string)
|
3485
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_seer, :float, @cooling_efficiency_seer_isdefaulted)
|
3073
3486
|
end
|
3074
|
-
if not
|
3487
|
+
if not @cooling_efficiency_ceer.nil?
|
3488
|
+
annual_efficiency = XMLHelper.add_element(heat_pump, 'AnnualCoolingEfficiency')
|
3489
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsCEER, :string)
|
3490
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_ceer, :float, @cooling_efficiency_ceer_isdefaulted)
|
3491
|
+
end
|
3492
|
+
if not @cooling_efficiency_eer.nil?
|
3493
|
+
annual_efficiency = XMLHelper.add_element(heat_pump, 'AnnualCoolingEfficiency')
|
3494
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsEER, :string)
|
3495
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @cooling_efficiency_eer, :float, @cooling_efficiency_eer_isdefaulted)
|
3496
|
+
end
|
3497
|
+
if not @heating_efficiency_hspf.nil?
|
3498
|
+
annual_efficiency = XMLHelper.add_element(heat_pump, 'AnnualHeatingEfficiency')
|
3499
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsHSPF, :string)
|
3500
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @heating_efficiency_hspf, :float, @heating_efficiency_hspf_isdefaulted)
|
3501
|
+
end
|
3502
|
+
if not @heating_efficiency_cop.nil?
|
3075
3503
|
annual_efficiency = XMLHelper.add_element(heat_pump, 'AnnualHeatingEfficiency')
|
3076
|
-
XMLHelper.add_element(annual_efficiency, 'Units',
|
3077
|
-
XMLHelper.add_element(annual_efficiency, 'Value',
|
3504
|
+
XMLHelper.add_element(annual_efficiency, 'Units', UnitsCOP, :string)
|
3505
|
+
XMLHelper.add_element(annual_efficiency, 'Value', @heating_efficiency_cop, :float, @heating_efficiency_cop_isdefaulted)
|
3078
3506
|
end
|
3079
3507
|
XMLHelper.add_extension(heat_pump, 'AirflowDefectRatio', @airflow_defect_ratio, :float, @airflow_defect_ratio_isdefaulted) unless @airflow_defect_ratio.nil?
|
3080
3508
|
XMLHelper.add_extension(heat_pump, 'ChargeDefectRatio', @charge_defect_ratio, :float, @charge_defect_ratio_isdefaulted) unless @charge_defect_ratio.nil?
|
3081
|
-
XMLHelper.add_extension(heat_pump, 'ChargeNotTested', @charge_not_tested, :boolean) unless @charge_not_tested.nil?
|
3082
3509
|
XMLHelper.add_extension(heat_pump, 'FanPowerWattsPerCFM', @fan_watts_per_cfm, :float, @fan_watts_per_cfm_isdefaulted) unless @fan_watts_per_cfm.nil?
|
3083
|
-
XMLHelper.add_extension(heat_pump, 'FanPowerNotTested', @fan_power_not_tested, :boolean) unless @fan_power_not_tested.nil?
|
3084
|
-
XMLHelper.add_extension(heat_pump, 'AirflowNotTested', @airflow_not_tested, :boolean) unless @airflow_not_tested.nil?
|
3085
3510
|
XMLHelper.add_extension(heat_pump, 'HeatingAirflowCFM', @heating_airflow_cfm, :float, @heating_airflow_cfm_isdefaulted) unless @heating_airflow_cfm.nil?
|
3086
3511
|
XMLHelper.add_extension(heat_pump, 'CoolingAirflowCFM', @cooling_airflow_cfm, :float, @cooling_airflow_cfm_isdefaulted) unless @cooling_airflow_cfm.nil?
|
3087
3512
|
XMLHelper.add_extension(heat_pump, 'PumpPowerWattsPerTon', @pump_watts_per_ton, :float, @pump_watts_per_ton_isdefaulted) unless @pump_watts_per_ton.nil?
|
3088
3513
|
XMLHelper.add_extension(heat_pump, 'SharedLoopWatts', @shared_loop_watts, :float) unless @shared_loop_watts.nil?
|
3089
3514
|
XMLHelper.add_extension(heat_pump, 'SharedLoopMotorEfficiency', @shared_loop_motor_efficiency, :float) unless @shared_loop_motor_efficiency.nil?
|
3090
3515
|
XMLHelper.add_extension(heat_pump, 'SeedId', @seed_id, :string) unless @seed_id.nil?
|
3516
|
+
if @primary_heating_system
|
3517
|
+
primary_heating_system = XMLHelper.insert_element(primary_systems, 'PrimaryHeatingSystem')
|
3518
|
+
XMLHelper.add_attribute(primary_heating_system, 'idref', @id)
|
3519
|
+
end
|
3520
|
+
if @primary_cooling_system
|
3521
|
+
primary_cooling_system = XMLHelper.add_element(primary_systems, 'PrimaryCoolingSystem')
|
3522
|
+
XMLHelper.add_attribute(primary_cooling_system, 'idref', @id)
|
3523
|
+
end
|
3091
3524
|
end
|
3092
3525
|
|
3093
3526
|
def from_oga(heat_pump)
|
@@ -3107,6 +3540,8 @@ class HPXML < Object
|
|
3107
3540
|
@cooling_capacity = XMLHelper.get_value(heat_pump, 'CoolingCapacity', :float)
|
3108
3541
|
@compressor_type = XMLHelper.get_value(heat_pump, 'CompressorType', :string)
|
3109
3542
|
@cooling_shr = XMLHelper.get_value(heat_pump, 'CoolingSensibleHeatFraction', :float)
|
3543
|
+
@backup_type = XMLHelper.get_value(heat_pump, 'BackupType', :string)
|
3544
|
+
@backup_system_idref = HPXML::get_idref(XMLHelper.get_element(heat_pump, 'BackupSystem'))
|
3110
3545
|
@backup_heating_fuel = XMLHelper.get_value(heat_pump, 'BackupSystemFuel', :string)
|
3111
3546
|
@backup_heating_efficiency_percent = XMLHelper.get_value(heat_pump, "BackupAnnualHeatingEfficiency[Units='Percent']/Value", :float)
|
3112
3547
|
@backup_heating_efficiency_afue = XMLHelper.get_value(heat_pump, "BackupAnnualHeatingEfficiency[Units='#{UnitsAFUE}']/Value", :float)
|
@@ -3114,28 +3549,32 @@ class HPXML < Object
|
|
3114
3549
|
@backup_heating_switchover_temp = XMLHelper.get_value(heat_pump, 'BackupHeatingSwitchoverTemperature', :float)
|
3115
3550
|
@fraction_heat_load_served = XMLHelper.get_value(heat_pump, 'FractionHeatLoadServed', :float)
|
3116
3551
|
@fraction_cool_load_served = XMLHelper.get_value(heat_pump, 'FractionCoolLoadServed', :float)
|
3117
|
-
|
3118
|
-
|
3119
|
-
|
3120
|
-
|
3121
|
-
|
3122
|
-
if [HVACTypeHeatPumpAirToAir, HVACTypeHeatPumpMiniSplit].include? @heat_pump_type
|
3123
|
-
@heating_efficiency_hspf = XMLHelper.get_value(heat_pump, "AnnualHeatingEfficiency[Units='#{UnitsHSPF}']/Value", :float)
|
3124
|
-
elsif [HVACTypeHeatPumpGroundToAir, HVACTypeHeatPumpWaterLoopToAir].include? @heat_pump_type
|
3125
|
-
@heating_efficiency_cop = XMLHelper.get_value(heat_pump, "AnnualHeatingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
3126
|
-
end
|
3552
|
+
@cooling_efficiency_seer = XMLHelper.get_value(heat_pump, "AnnualCoolingEfficiency[Units='#{UnitsSEER}']/Value", :float)
|
3553
|
+
@cooling_efficiency_ceer = XMLHelper.get_value(heat_pump, "AnnualCoolingEfficiency[Units='#{UnitsCEER}']/Value", :float)
|
3554
|
+
@cooling_efficiency_eer = XMLHelper.get_value(heat_pump, "AnnualCoolingEfficiency[Units='#{UnitsEER}']/Value", :float)
|
3555
|
+
@heating_efficiency_hspf = XMLHelper.get_value(heat_pump, "AnnualHeatingEfficiency[Units='#{UnitsHSPF}']/Value", :float)
|
3556
|
+
@heating_efficiency_cop = XMLHelper.get_value(heat_pump, "AnnualHeatingEfficiency[Units='#{UnitsCOP}']/Value", :float)
|
3127
3557
|
@airflow_defect_ratio = XMLHelper.get_value(heat_pump, 'extension/AirflowDefectRatio', :float)
|
3128
3558
|
@charge_defect_ratio = XMLHelper.get_value(heat_pump, 'extension/ChargeDefectRatio', :float)
|
3129
|
-
@charge_not_tested = XMLHelper.get_value(heat_pump, 'extension/ChargeNotTested', :boolean)
|
3130
3559
|
@fan_watts_per_cfm = XMLHelper.get_value(heat_pump, 'extension/FanPowerWattsPerCFM', :float)
|
3131
|
-
@fan_power_not_tested = XMLHelper.get_value(heat_pump, 'extension/FanPowerNotTested', :boolean)
|
3132
|
-
@airflow_not_tested = XMLHelper.get_value(heat_pump, 'extension/AirflowNotTested', :boolean)
|
3133
3560
|
@heating_airflow_cfm = XMLHelper.get_value(heat_pump, 'extension/HeatingAirflowCFM', :float)
|
3134
3561
|
@cooling_airflow_cfm = XMLHelper.get_value(heat_pump, 'extension/CoolingAirflowCFM', :float)
|
3135
3562
|
@pump_watts_per_ton = XMLHelper.get_value(heat_pump, 'extension/PumpPowerWattsPerTon', :float)
|
3136
3563
|
@shared_loop_watts = XMLHelper.get_value(heat_pump, 'extension/SharedLoopWatts', :float)
|
3137
3564
|
@shared_loop_motor_efficiency = XMLHelper.get_value(heat_pump, 'extension/SharedLoopMotorEfficiency', :float)
|
3138
3565
|
@seed_id = XMLHelper.get_value(heat_pump, 'extension/SeedId', :string)
|
3566
|
+
primary_heating_system = HPXML::get_idref(XMLHelper.get_element(heat_pump, '../PrimarySystems/PrimaryHeatingSystem'))
|
3567
|
+
if primary_heating_system == @id
|
3568
|
+
@primary_heating_system = true
|
3569
|
+
else
|
3570
|
+
@primary_heating_system = false
|
3571
|
+
end
|
3572
|
+
primary_cooling_system = HPXML::get_idref(XMLHelper.get_element(heat_pump, '../PrimarySystems/PrimaryCoolingSystem'))
|
3573
|
+
if primary_cooling_system == @id
|
3574
|
+
@primary_cooling_system = true
|
3575
|
+
else
|
3576
|
+
@primary_cooling_system = false
|
3577
|
+
end
|
3139
3578
|
end
|
3140
3579
|
end
|
3141
3580
|
|
@@ -3204,13 +3643,13 @@ class HPXML < Object
|
|
3204
3643
|
return if hvac_plant.nil?
|
3205
3644
|
|
3206
3645
|
HDL_ATTRS.each do |attr, element_name|
|
3207
|
-
send("#{attr
|
3646
|
+
send("#{attr}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/Heating/#{element_name}", :float))
|
3208
3647
|
end
|
3209
3648
|
CDL_SENS_ATTRS.each do |attr, element_name|
|
3210
|
-
send("#{attr
|
3649
|
+
send("#{attr}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/CoolingSensible/#{element_name}", :float))
|
3211
3650
|
end
|
3212
3651
|
CDL_LAT_ATTRS.each do |attr, element_name|
|
3213
|
-
send("#{attr
|
3652
|
+
send("#{attr}=", XMLHelper.get_value(hvac_plant, "extension/DesignLoads/CoolingLatent/#{element_name}", :float))
|
3214
3653
|
end
|
3215
3654
|
end
|
3216
3655
|
end
|
@@ -3235,7 +3674,9 @@ class HPXML < Object
|
|
3235
3674
|
:cooling_setup_temp, :cooling_setup_hours_per_week, :cooling_setup_start_hour,
|
3236
3675
|
:ceiling_fan_cooling_setpoint_temp_offset,
|
3237
3676
|
:weekday_heating_setpoints, :weekend_heating_setpoints,
|
3238
|
-
:weekday_cooling_setpoints, :weekend_cooling_setpoints
|
3677
|
+
:weekday_cooling_setpoints, :weekend_cooling_setpoints,
|
3678
|
+
:seasons_heating_begin_month, :seasons_heating_begin_day, :seasons_heating_end_month, :seasons_heating_end_day,
|
3679
|
+
:seasons_cooling_begin_month, :seasons_cooling_begin_day, :seasons_cooling_end_month, :seasons_cooling_end_day]
|
3239
3680
|
attr_accessor(*ATTRS)
|
3240
3681
|
|
3241
3682
|
def delete
|
@@ -3244,6 +3685,10 @@ class HPXML < Object
|
|
3244
3685
|
|
3245
3686
|
def check_for_errors
|
3246
3687
|
errors = []
|
3688
|
+
|
3689
|
+
errors += HPXML::check_dates('Heating Season', @seasons_heating_begin_month, @seasons_heating_begin_day, @seasons_heating_end_month, @seasons_heating_end_day)
|
3690
|
+
errors += HPXML::check_dates('Cooling Season', @seasons_cooling_begin_month, @seasons_cooling_begin_day, @seasons_cooling_end_month, @seasons_cooling_end_day)
|
3691
|
+
|
3247
3692
|
return errors
|
3248
3693
|
end
|
3249
3694
|
|
@@ -3255,12 +3700,26 @@ class HPXML < Object
|
|
3255
3700
|
sys_id = XMLHelper.add_element(hvac_control, 'SystemIdentifier')
|
3256
3701
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
3257
3702
|
XMLHelper.add_element(hvac_control, 'ControlType', @control_type, :string) unless @control_type.nil?
|
3258
|
-
XMLHelper.add_element(hvac_control, 'SetpointTempHeatingSeason', @heating_setpoint_temp, :float) unless @heating_setpoint_temp.nil?
|
3703
|
+
XMLHelper.add_element(hvac_control, 'SetpointTempHeatingSeason', @heating_setpoint_temp, :float, @heating_setpoint_temp_isdefaulted) unless @heating_setpoint_temp.nil?
|
3259
3704
|
XMLHelper.add_element(hvac_control, 'SetbackTempHeatingSeason', @heating_setback_temp, :float) unless @heating_setback_temp.nil?
|
3260
3705
|
XMLHelper.add_element(hvac_control, 'TotalSetbackHoursperWeekHeating', @heating_setback_hours_per_week, :integer) unless @heating_setback_hours_per_week.nil?
|
3261
3706
|
XMLHelper.add_element(hvac_control, 'SetupTempCoolingSeason', @cooling_setup_temp, :float) unless @cooling_setup_temp.nil?
|
3262
|
-
XMLHelper.add_element(hvac_control, 'SetpointTempCoolingSeason', @cooling_setpoint_temp, :float) unless @cooling_setpoint_temp.nil?
|
3707
|
+
XMLHelper.add_element(hvac_control, 'SetpointTempCoolingSeason', @cooling_setpoint_temp, :float, @cooling_setpoint_temp_isdefaulted) unless @cooling_setpoint_temp.nil?
|
3263
3708
|
XMLHelper.add_element(hvac_control, 'TotalSetupHoursperWeekCooling', @cooling_setup_hours_per_week, :integer) unless @cooling_setup_hours_per_week.nil?
|
3709
|
+
if (not @seasons_heating_begin_month.nil?) || (not @seasons_heating_begin_day.nil?) || (not @seasons_heating_end_month.nil?) || (not @seasons_heating_end_day.nil?)
|
3710
|
+
heating_season = XMLHelper.add_element(hvac_control, 'HeatingSeason')
|
3711
|
+
XMLHelper.add_element(heating_season, 'BeginMonth', @seasons_heating_begin_month, :integer, @seasons_heating_begin_month_isdefaulted) unless @seasons_heating_begin_month.nil?
|
3712
|
+
XMLHelper.add_element(heating_season, 'BeginDayOfMonth', @seasons_heating_begin_day, :integer, @seasons_heating_begin_day_isdefaulted) unless @seasons_heating_begin_day.nil?
|
3713
|
+
XMLHelper.add_element(heating_season, 'EndMonth', @seasons_heating_end_month, :integer, @seasons_heating_end_month_isdefaulted) unless @seasons_heating_end_month.nil?
|
3714
|
+
XMLHelper.add_element(heating_season, 'EndDayOfMonth', @seasons_heating_end_day, :integer, @seasons_heating_end_day_isdefaulted) unless @seasons_heating_end_day.nil?
|
3715
|
+
end
|
3716
|
+
if (not @seasons_cooling_begin_month.nil?) || (not @seasons_cooling_begin_day.nil?) || (not @seasons_cooling_end_month.nil?) || (not @seasons_cooling_end_day.nil?)
|
3717
|
+
cooling_season = XMLHelper.add_element(hvac_control, 'CoolingSeason')
|
3718
|
+
XMLHelper.add_element(cooling_season, 'BeginMonth', @seasons_cooling_begin_month, :integer, @seasons_cooling_begin_month_isdefaulted) unless @seasons_cooling_begin_month.nil?
|
3719
|
+
XMLHelper.add_element(cooling_season, 'BeginDayOfMonth', @seasons_cooling_begin_day, :integer, @seasons_cooling_begin_day_isdefaulted) unless @seasons_cooling_begin_day.nil?
|
3720
|
+
XMLHelper.add_element(cooling_season, 'EndMonth', @seasons_cooling_end_month, :integer, @seasons_cooling_end_month_isdefaulted) unless @seasons_cooling_end_month.nil?
|
3721
|
+
XMLHelper.add_element(cooling_season, 'EndDayOfMonth', @seasons_cooling_end_day, :integer, @seasons_cooling_end_day_isdefaulted) unless @seasons_cooling_end_day.nil?
|
3722
|
+
end
|
3264
3723
|
XMLHelper.add_extension(hvac_control, 'SetbackStartHourHeating', @heating_setback_start_hour, :integer, @heating_setback_start_hour_isdefaulted) unless @heating_setback_start_hour.nil?
|
3265
3724
|
XMLHelper.add_extension(hvac_control, 'SetupStartHourCooling', @cooling_setup_start_hour, :integer, @cooling_setup_start_hour_isdefaulted) unless @cooling_setup_start_hour.nil?
|
3266
3725
|
XMLHelper.add_extension(hvac_control, 'CeilingFanSetpointTempCoolingSeasonOffset', @ceiling_fan_cooling_setpoint_temp_offset, :float) unless @ceiling_fan_cooling_setpoint_temp_offset.nil?
|
@@ -3281,6 +3740,14 @@ class HPXML < Object
|
|
3281
3740
|
@cooling_setup_temp = XMLHelper.get_value(hvac_control, 'SetupTempCoolingSeason', :float)
|
3282
3741
|
@cooling_setpoint_temp = XMLHelper.get_value(hvac_control, 'SetpointTempCoolingSeason', :float)
|
3283
3742
|
@cooling_setup_hours_per_week = XMLHelper.get_value(hvac_control, 'TotalSetupHoursperWeekCooling', :integer)
|
3743
|
+
@seasons_heating_begin_month = XMLHelper.get_value(hvac_control, 'HeatingSeason/BeginMonth', :integer)
|
3744
|
+
@seasons_heating_begin_day = XMLHelper.get_value(hvac_control, 'HeatingSeason/BeginDayOfMonth', :integer)
|
3745
|
+
@seasons_heating_end_month = XMLHelper.get_value(hvac_control, 'HeatingSeason/EndMonth', :integer)
|
3746
|
+
@seasons_heating_end_day = XMLHelper.get_value(hvac_control, 'HeatingSeason/EndDayOfMonth', :integer)
|
3747
|
+
@seasons_cooling_begin_month = XMLHelper.get_value(hvac_control, 'CoolingSeason/BeginMonth', :integer)
|
3748
|
+
@seasons_cooling_begin_day = XMLHelper.get_value(hvac_control, 'CoolingSeason/BeginDayOfMonth', :integer)
|
3749
|
+
@seasons_cooling_end_month = XMLHelper.get_value(hvac_control, 'CoolingSeason/EndMonth', :integer)
|
3750
|
+
@seasons_cooling_end_day = XMLHelper.get_value(hvac_control, 'CoolingSeason/EndDayOfMonth', :integer)
|
3284
3751
|
@heating_setback_start_hour = XMLHelper.get_value(hvac_control, 'extension/SetbackStartHourHeating', :integer)
|
3285
3752
|
@cooling_setup_start_hour = XMLHelper.get_value(hvac_control, 'extension/SetupStartHourCooling', :integer)
|
3286
3753
|
@ceiling_fan_cooling_setpoint_temp_offset = XMLHelper.get_value(hvac_control, 'extension/CeilingFanSetpointTempCoolingSeasonOffset', :float)
|
@@ -3355,7 +3822,7 @@ class HPXML < Object
|
|
3355
3822
|
areas = { HPXML::DuctTypeSupply => 0,
|
3356
3823
|
HPXML::DuctTypeReturn => 0 }
|
3357
3824
|
@ducts.each do |duct|
|
3358
|
-
next if
|
3825
|
+
next if HPXML::conditioned_locations.include? duct.duct_location
|
3359
3826
|
next if duct.duct_type.nil?
|
3360
3827
|
|
3361
3828
|
areas[duct.duct_type] += duct.duct_surface_area
|
@@ -3549,7 +4016,7 @@ class HPXML < Object
|
|
3549
4016
|
end
|
3550
4017
|
XMLHelper.add_element(ducts_el, 'DuctInsulationRValue', @duct_insulation_r_value, :float) unless @duct_insulation_r_value.nil?
|
3551
4018
|
XMLHelper.add_element(ducts_el, 'DuctLocation', @duct_location, :string, @duct_location_isdefaulted) unless @duct_location.nil?
|
3552
|
-
XMLHelper.add_element(ducts_el, 'FractionDuctArea', @duct_fraction_area, :float) unless @duct_fraction_area.nil?
|
4019
|
+
XMLHelper.add_element(ducts_el, 'FractionDuctArea', @duct_fraction_area, :float, @duct_fraction_area_isdefaulted) unless @duct_fraction_area.nil?
|
3553
4020
|
XMLHelper.add_element(ducts_el, 'DuctSurfaceArea', @duct_surface_area, :float, @duct_surface_area_isdefaulted) unless @duct_surface_area.nil?
|
3554
4021
|
end
|
3555
4022
|
|
@@ -3587,7 +4054,8 @@ class HPXML < Object
|
|
3587
4054
|
:fan_power, :fan_power_defaulted, :quantity, :fan_location, :distribution_system_idref, :start_hour,
|
3588
4055
|
:is_shared_system, :in_unit_flow_rate, :fraction_recirculation,
|
3589
4056
|
:preheating_fuel, :preheating_efficiency_cop, :preheating_fraction_load_served, :precooling_fuel,
|
3590
|
-
:precooling_efficiency_cop, :precooling_fraction_load_served
|
4057
|
+
:precooling_efficiency_cop, :precooling_fraction_load_served, :calculated_flow_rate,
|
4058
|
+
:delivered_ventilation]
|
3591
4059
|
attr_accessor(*ATTRS)
|
3592
4060
|
|
3593
4061
|
def distribution_system
|
@@ -3606,13 +4074,16 @@ class HPXML < Object
|
|
3606
4074
|
fail "Attached HVAC distribution system '#{@distribution_system_idref}' not found for ventilation fan '#{@id}'."
|
3607
4075
|
end
|
3608
4076
|
|
4077
|
+
def flow_rate
|
4078
|
+
[@tested_flow_rate, @delivered_ventilation, @calculated_flow_rate, @rated_flow_rate].each do |fr|
|
4079
|
+
return fr unless fr.nil?
|
4080
|
+
end
|
4081
|
+
return
|
4082
|
+
end
|
4083
|
+
|
3609
4084
|
def total_unit_flow_rate
|
3610
4085
|
if not @is_shared_system
|
3611
|
-
|
3612
|
-
return @tested_flow_rate
|
3613
|
-
else
|
3614
|
-
return @rated_flow_rate
|
3615
|
-
end
|
4086
|
+
return flow_rate
|
3616
4087
|
else
|
3617
4088
|
return @in_unit_flow_rate
|
3618
4089
|
end
|
@@ -3651,13 +4122,9 @@ class HPXML < Object
|
|
3651
4122
|
return 1.0 unless @is_shared_system
|
3652
4123
|
return if @in_unit_flow_rate.nil?
|
3653
4124
|
|
3654
|
-
if not
|
3655
|
-
ratio = @in_unit_flow_rate /
|
3656
|
-
elsif not @rated_flow_rate.nil?
|
3657
|
-
ratio = @in_unit_flow_rate / @rated_flow_rate
|
4125
|
+
if not flow_rate.nil?
|
4126
|
+
ratio = @in_unit_flow_rate / flow_rate
|
3658
4127
|
end
|
3659
|
-
return if ratio.nil?
|
3660
|
-
|
3661
4128
|
return ratio
|
3662
4129
|
end
|
3663
4130
|
|
@@ -3726,8 +4193,10 @@ class HPXML < Object
|
|
3726
4193
|
XMLHelper.add_element(ventilation_fan, 'Quantity', @quantity, :integer, @quantity_isdefaulted) unless @quantity.nil?
|
3727
4194
|
XMLHelper.add_element(ventilation_fan, 'FanType', @fan_type, :string) unless @fan_type.nil?
|
3728
4195
|
XMLHelper.add_element(ventilation_fan, 'RatedFlowRate', @rated_flow_rate, :float, @rated_flow_rate_isdefaulted) unless @rated_flow_rate.nil?
|
3729
|
-
XMLHelper.add_element(ventilation_fan, '
|
4196
|
+
XMLHelper.add_element(ventilation_fan, 'CalculatedFlowRate', @calculated_flow_rate, :float, @calculated_flow_rate_isdefaulted) unless @calculated_flow_rate.nil?
|
4197
|
+
XMLHelper.add_element(ventilation_fan, 'TestedFlowRate', @tested_flow_rate, :float, @tested_flow_rate_isdefaulted) unless @tested_flow_rate.nil?
|
3730
4198
|
XMLHelper.add_element(ventilation_fan, 'HoursInOperation', @hours_in_operation, :float, @hours_in_operation_isdefaulted) unless @hours_in_operation.nil?
|
4199
|
+
XMLHelper.add_element(ventilation_fan, 'DeliveredVentilation', @delivered_ventilation, :float, @delivered_ventilation_isdefaulted) unless @delivered_ventilation.nil?
|
3731
4200
|
XMLHelper.add_element(ventilation_fan, 'FanLocation', @fan_location, :string) unless @fan_location.nil?
|
3732
4201
|
XMLHelper.add_element(ventilation_fan, 'UsedForLocalVentilation', @used_for_local_ventilation, :boolean) unless @used_for_local_ventilation.nil?
|
3733
4202
|
XMLHelper.add_element(ventilation_fan, 'UsedForWholeBuildingVentilation', @used_for_whole_building_ventilation, :boolean) unless @used_for_whole_building_ventilation.nil?
|
@@ -3772,8 +4241,10 @@ class HPXML < Object
|
|
3772
4241
|
@quantity = XMLHelper.get_value(ventilation_fan, 'Quantity', :integer)
|
3773
4242
|
@fan_type = XMLHelper.get_value(ventilation_fan, 'FanType', :string)
|
3774
4243
|
@rated_flow_rate = XMLHelper.get_value(ventilation_fan, 'RatedFlowRate', :float)
|
4244
|
+
@calculated_flow_rate = XMLHelper.get_value(ventilation_fan, 'CalculatedFlowRate', :float)
|
3775
4245
|
@tested_flow_rate = XMLHelper.get_value(ventilation_fan, 'TestedFlowRate', :float)
|
3776
4246
|
@hours_in_operation = XMLHelper.get_value(ventilation_fan, 'HoursInOperation', :float)
|
4247
|
+
@delivered_ventilation = XMLHelper.get_value(ventilation_fan, 'DeliveredVentilation', :float)
|
3777
4248
|
@fan_location = XMLHelper.get_value(ventilation_fan, 'FanLocation', :string)
|
3778
4249
|
@used_for_local_ventilation = XMLHelper.get_value(ventilation_fan, 'UsedForLocalVentilation', :boolean)
|
3779
4250
|
@used_for_whole_building_ventilation = XMLHelper.get_value(ventilation_fan, 'UsedForWholeBuildingVentilation', :boolean)
|
@@ -3815,7 +4286,7 @@ class HPXML < Object
|
|
3815
4286
|
|
3816
4287
|
class WaterHeatingSystem < BaseElement
|
3817
4288
|
ATTRS = [:id, :year_installed, :fuel_type, :water_heater_type, :location, :performance_adjustment,
|
3818
|
-
:tank_volume, :fraction_dhw_load_served, :heating_capacity, :energy_factor,
|
4289
|
+
:tank_volume, :fraction_dhw_load_served, :heating_capacity, :energy_factor, :usage_bin,
|
3819
4290
|
:uniform_energy_factor, :first_hour_rating, :recovery_efficiency, :uses_desuperheater, :jacket_r_value,
|
3820
4291
|
:related_hvac_idref, :third_party_certification, :standby_loss, :temperature, :is_shared_system,
|
3821
4292
|
:number_of_units_served]
|
@@ -3865,9 +4336,10 @@ class HPXML < Object
|
|
3865
4336
|
XMLHelper.add_element(water_heating_system, 'TankVolume', @tank_volume, :float, @tank_volume_isdefaulted) unless @tank_volume.nil?
|
3866
4337
|
XMLHelper.add_element(water_heating_system, 'FractionDHWLoadServed', @fraction_dhw_load_served, :float) unless @fraction_dhw_load_served.nil?
|
3867
4338
|
XMLHelper.add_element(water_heating_system, 'HeatingCapacity', @heating_capacity, :float, @heating_capacity_isdefaulted) unless @heating_capacity.nil?
|
3868
|
-
XMLHelper.add_element(water_heating_system, 'EnergyFactor', @energy_factor, :float) unless @energy_factor.nil?
|
4339
|
+
XMLHelper.add_element(water_heating_system, 'EnergyFactor', @energy_factor, :float, @energy_factor_isdefaulted) unless @energy_factor.nil?
|
3869
4340
|
XMLHelper.add_element(water_heating_system, 'UniformEnergyFactor', @uniform_energy_factor, :float) unless @uniform_energy_factor.nil?
|
3870
4341
|
XMLHelper.add_element(water_heating_system, 'FirstHourRating', @first_hour_rating, :float) unless @first_hour_rating.nil?
|
4342
|
+
XMLHelper.add_element(water_heating_system, 'UsageBin', @usage_bin, :string, @usage_bin_isdefaulted) unless @usage_bin.nil?
|
3871
4343
|
XMLHelper.add_element(water_heating_system, 'RecoveryEfficiency', @recovery_efficiency, :float, @recovery_efficiency_isdefaulted) unless @recovery_efficiency.nil?
|
3872
4344
|
if not @jacket_r_value.nil?
|
3873
4345
|
water_heater_insulation = XMLHelper.add_element(water_heating_system, 'WaterHeaterInsulation')
|
@@ -3901,6 +4373,7 @@ class HPXML < Object
|
|
3901
4373
|
@energy_factor = XMLHelper.get_value(water_heating_system, 'EnergyFactor', :float)
|
3902
4374
|
@uniform_energy_factor = XMLHelper.get_value(water_heating_system, 'UniformEnergyFactor', :float)
|
3903
4375
|
@first_hour_rating = XMLHelper.get_value(water_heating_system, 'FirstHourRating', :float)
|
4376
|
+
@usage_bin = XMLHelper.get_value(water_heating_system, 'UsageBin', :string)
|
3904
4377
|
@recovery_efficiency = XMLHelper.get_value(water_heating_system, 'RecoveryEfficiency', :float)
|
3905
4378
|
@jacket_r_value = XMLHelper.get_value(water_heating_system, 'WaterHeaterInsulation/Jacket/JacketRValue', :float)
|
3906
4379
|
@standby_loss = XMLHelper.get_value(water_heating_system, 'StandbyLoss', :float)
|
@@ -4059,7 +4532,8 @@ class HPXML < Object
|
|
4059
4532
|
end
|
4060
4533
|
|
4061
4534
|
class WaterHeating < BaseElement
|
4062
|
-
ATTRS = [:water_fixtures_usage_multiplier
|
4535
|
+
ATTRS = [:water_fixtures_usage_multiplier, :water_fixtures_weekday_fractions, :water_fixtures_weekend_fractions,
|
4536
|
+
:water_fixtures_monthly_multipliers]
|
4063
4537
|
attr_accessor(*ATTRS)
|
4064
4538
|
|
4065
4539
|
def check_for_errors
|
@@ -4072,6 +4546,9 @@ class HPXML < Object
|
|
4072
4546
|
|
4073
4547
|
water_heating = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'WaterHeating'])
|
4074
4548
|
XMLHelper.add_extension(water_heating, 'WaterFixturesUsageMultiplier', @water_fixtures_usage_multiplier, :float, @water_fixtures_usage_multiplier_isdefaulted) unless @water_fixtures_usage_multiplier.nil?
|
4549
|
+
XMLHelper.add_extension(water_heating, 'WaterFixturesWeekdayScheduleFractions', @water_fixtures_weekday_fractions, :string, @water_fixtures_weekday_fractions_isdefaulted) unless @water_fixtures_weekday_fractions.nil?
|
4550
|
+
XMLHelper.add_extension(water_heating, 'WaterFixturesWeekendScheduleFractions', @water_fixtures_weekend_fractions, :string, @water_fixtures_weekend_fractions_isdefaulted) unless @water_fixtures_weekend_fractions.nil?
|
4551
|
+
XMLHelper.add_extension(water_heating, 'WaterFixturesMonthlyScheduleMultipliers', @water_fixtures_monthly_multipliers, :string, @water_fixtures_monthly_multipliers_isdefaulted) unless @water_fixtures_monthly_multipliers.nil?
|
4075
4552
|
end
|
4076
4553
|
|
4077
4554
|
def from_oga(hpxml)
|
@@ -4081,6 +4558,9 @@ class HPXML < Object
|
|
4081
4558
|
return if water_heating.nil?
|
4082
4559
|
|
4083
4560
|
@water_fixtures_usage_multiplier = XMLHelper.get_value(water_heating, 'extension/WaterFixturesUsageMultiplier', :float)
|
4561
|
+
@water_fixtures_weekday_fractions = XMLHelper.get_value(water_heating, 'extension/WaterFixturesWeekdayScheduleFractions', :string)
|
4562
|
+
@water_fixtures_weekend_fractions = XMLHelper.get_value(water_heating, 'extension/WaterFixturesWeekendScheduleFractions', :string)
|
4563
|
+
@water_fixtures_monthly_multipliers = XMLHelper.get_value(water_heating, 'extension/WaterFixturesMonthlyScheduleMultipliers', :string)
|
4084
4564
|
end
|
4085
4565
|
end
|
4086
4566
|
|
@@ -4099,7 +4579,7 @@ class HPXML < Object
|
|
4099
4579
|
end
|
4100
4580
|
|
4101
4581
|
class SolarThermalSystem < BaseElement
|
4102
|
-
ATTRS = [:id, :system_type, :collector_area, :collector_loop_type, :collector_azimuth,
|
4582
|
+
ATTRS = [:id, :system_type, :collector_area, :collector_loop_type, :collector_orientation, :collector_azimuth,
|
4103
4583
|
:collector_type, :collector_tilt, :collector_frta, :collector_frul, :storage_volume,
|
4104
4584
|
:water_heating_system_idref, :solar_fraction]
|
4105
4585
|
attr_accessor(*ATTRS)
|
@@ -4136,7 +4616,8 @@ class HPXML < Object
|
|
4136
4616
|
XMLHelper.add_element(solar_thermal_system, 'CollectorArea', @collector_area, :float) unless @collector_area.nil?
|
4137
4617
|
XMLHelper.add_element(solar_thermal_system, 'CollectorLoopType', @collector_loop_type, :string) unless @collector_loop_type.nil?
|
4138
4618
|
XMLHelper.add_element(solar_thermal_system, 'CollectorType', @collector_type, :string) unless @collector_type.nil?
|
4139
|
-
XMLHelper.add_element(solar_thermal_system, '
|
4619
|
+
XMLHelper.add_element(solar_thermal_system, 'CollectorOrientation', @collector_orientation, :string, @collector_orientation_isdefaulted) unless @collector_orientation.nil?
|
4620
|
+
XMLHelper.add_element(solar_thermal_system, 'CollectorAzimuth', @collector_azimuth, :integer, @collector_azimuth_isdefaulted) unless @collector_azimuth.nil?
|
4140
4621
|
XMLHelper.add_element(solar_thermal_system, 'CollectorTilt', @collector_tilt, :float) unless @collector_tilt.nil?
|
4141
4622
|
XMLHelper.add_element(solar_thermal_system, 'CollectorRatedOpticalEfficiency', @collector_frta, :float) unless @collector_frta.nil?
|
4142
4623
|
XMLHelper.add_element(solar_thermal_system, 'CollectorRatedThermalLosses', @collector_frul, :float) unless @collector_frul.nil?
|
@@ -4156,6 +4637,7 @@ class HPXML < Object
|
|
4156
4637
|
@collector_area = XMLHelper.get_value(solar_thermal_system, 'CollectorArea', :float)
|
4157
4638
|
@collector_loop_type = XMLHelper.get_value(solar_thermal_system, 'CollectorLoopType', :string)
|
4158
4639
|
@collector_type = XMLHelper.get_value(solar_thermal_system, 'CollectorType', :string)
|
4640
|
+
@collector_orientation = XMLHelper.get_value(solar_thermal_system, 'CollectorOrientation', :string)
|
4159
4641
|
@collector_azimuth = XMLHelper.get_value(solar_thermal_system, 'CollectorAzimuth', :integer)
|
4160
4642
|
@collector_tilt = XMLHelper.get_value(solar_thermal_system, 'CollectorTilt', :float)
|
4161
4643
|
@collector_frta = XMLHelper.get_value(solar_thermal_system, 'CollectorRatedOpticalEfficiency', :float)
|
@@ -4206,8 +4688,8 @@ class HPXML < Object
|
|
4206
4688
|
XMLHelper.add_element(pv_system, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
|
4207
4689
|
XMLHelper.add_element(pv_system, 'ModuleType', @module_type, :string, @module_type_isdefaulted) unless @module_type.nil?
|
4208
4690
|
XMLHelper.add_element(pv_system, 'Tracking', @tracking, :string, @tracking_isdefaulted) unless @tracking.nil?
|
4209
|
-
XMLHelper.add_element(pv_system, 'ArrayOrientation', @array_orientation, :string) unless @array_orientation.nil?
|
4210
|
-
XMLHelper.add_element(pv_system, 'ArrayAzimuth', @array_azimuth, :integer) unless @array_azimuth.nil?
|
4691
|
+
XMLHelper.add_element(pv_system, 'ArrayOrientation', @array_orientation, :string, @array_orientation_isdefaulted) unless @array_orientation.nil?
|
4692
|
+
XMLHelper.add_element(pv_system, 'ArrayAzimuth', @array_azimuth, :integer, @array_azimuth_isdefaulted) unless @array_azimuth.nil?
|
4211
4693
|
XMLHelper.add_element(pv_system, 'ArrayTilt', @array_tilt, :float) unless @array_tilt.nil?
|
4212
4694
|
XMLHelper.add_element(pv_system, 'MaxPowerOutput', @max_power_output, :float) unless @max_power_output.nil?
|
4213
4695
|
XMLHelper.add_element(pv_system, 'NumberOfPanels', @number_of_panels, :integer) unless @number_of_panels.nil?
|
@@ -4290,6 +4772,72 @@ class HPXML < Object
|
|
4290
4772
|
end
|
4291
4773
|
end
|
4292
4774
|
|
4775
|
+
class Batteries < BaseArrayElement
|
4776
|
+
def add(**kwargs)
|
4777
|
+
self << Battery.new(@hpxml_object, **kwargs)
|
4778
|
+
end
|
4779
|
+
|
4780
|
+
def from_oga(hpxml)
|
4781
|
+
return if hpxml.nil?
|
4782
|
+
|
4783
|
+
XMLHelper.get_elements(hpxml, 'Building/BuildingDetails/Systems/Batteries/Battery').each do |battery|
|
4784
|
+
self << Battery.new(@hpxml_object, battery)
|
4785
|
+
end
|
4786
|
+
end
|
4787
|
+
end
|
4788
|
+
|
4789
|
+
class Battery < BaseElement
|
4790
|
+
ATTRS = [:id, :type, :location, :lifetime_model, :rated_power_output,
|
4791
|
+
:nominal_capacity_kwh, :nominal_capacity_ah, :nominal_voltage]
|
4792
|
+
attr_accessor(*ATTRS)
|
4793
|
+
|
4794
|
+
def delete
|
4795
|
+
@hpxml_object.batteries.delete(self)
|
4796
|
+
end
|
4797
|
+
|
4798
|
+
def check_for_errors
|
4799
|
+
errors = []
|
4800
|
+
return errors
|
4801
|
+
end
|
4802
|
+
|
4803
|
+
def to_oga(doc)
|
4804
|
+
return if nil?
|
4805
|
+
|
4806
|
+
batteries = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Systems', 'Batteries'])
|
4807
|
+
battery = XMLHelper.add_element(batteries, 'Battery')
|
4808
|
+
sys_id = XMLHelper.add_element(battery, 'SystemIdentifier')
|
4809
|
+
XMLHelper.add_attribute(sys_id, 'id', @id)
|
4810
|
+
XMLHelper.add_element(battery, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
|
4811
|
+
XMLHelper.add_element(battery, 'BatteryType', @type, :string) unless @type.nil?
|
4812
|
+
if not @nominal_capacity_kwh.nil?
|
4813
|
+
nominal_capacity = XMLHelper.add_element(battery, 'NominalCapacity')
|
4814
|
+
XMLHelper.add_element(nominal_capacity, 'Units', UnitsKwh, :string)
|
4815
|
+
XMLHelper.add_element(nominal_capacity, 'Value', @nominal_capacity_kwh, :float, @nominal_capacity_kwh_isdefaulted)
|
4816
|
+
end
|
4817
|
+
if not @nominal_capacity_ah.nil?
|
4818
|
+
nominal_capacity = XMLHelper.add_element(battery, 'NominalCapacity')
|
4819
|
+
XMLHelper.add_element(nominal_capacity, 'Units', UnitsAh, :string)
|
4820
|
+
XMLHelper.add_element(nominal_capacity, 'Value', @nominal_capacity_ah, :float, @nominal_capacity_ah_isdefaulted)
|
4821
|
+
end
|
4822
|
+
XMLHelper.add_element(battery, 'RatedPowerOutput', @rated_power_output, :float, @rated_power_output_isdefaulted) unless @rated_power_output.nil?
|
4823
|
+
XMLHelper.add_element(battery, 'NominalVoltage', @nominal_voltage, :float, @nominal_voltage_isdefaulted) unless @nominal_voltage.nil?
|
4824
|
+
XMLHelper.add_extension(battery, 'LifetimeModel', @lifetime_model, :string, @lifetime_model_isdefaulted) unless @lifetime_model.nil?
|
4825
|
+
end
|
4826
|
+
|
4827
|
+
def from_oga(battery)
|
4828
|
+
return if battery.nil?
|
4829
|
+
|
4830
|
+
@id = HPXML::get_id(battery)
|
4831
|
+
@location = XMLHelper.get_value(battery, 'Location', :string)
|
4832
|
+
@type = XMLHelper.get_value(battery, 'BatteryType', :string)
|
4833
|
+
@nominal_capacity_kwh = XMLHelper.get_value(battery, "NominalCapacity[Units='#{UnitsKwh}']/Value", :float)
|
4834
|
+
@nominal_capacity_ah = XMLHelper.get_value(battery, "NominalCapacity[Units='#{UnitsAh}']/Value", :float)
|
4835
|
+
@rated_power_output = XMLHelper.get_value(battery, 'RatedPowerOutput', :float)
|
4836
|
+
@nominal_voltage = XMLHelper.get_value(battery, 'NominalVoltage', :float)
|
4837
|
+
@lifetime_model = XMLHelper.get_value(battery, 'extension/LifetimeModel', :string)
|
4838
|
+
end
|
4839
|
+
end
|
4840
|
+
|
4293
4841
|
class ClothesWashers < BaseArrayElement
|
4294
4842
|
def add(**kwargs)
|
4295
4843
|
self << ClothesWasher.new(@hpxml_object, **kwargs)
|
@@ -4307,8 +4855,10 @@ class HPXML < Object
|
|
4307
4855
|
class ClothesWasher < BaseElement
|
4308
4856
|
ATTRS = [:id, :location, :modified_energy_factor, :integrated_modified_energy_factor,
|
4309
4857
|
:rated_annual_kwh, :label_electric_rate, :label_gas_rate, :label_annual_gas_cost,
|
4310
|
-
:capacity, :label_usage, :usage_multiplier, :is_shared_appliance,
|
4311
|
-
:
|
4858
|
+
:capacity, :label_usage, :usage_multiplier, :is_shared_appliance, :number_of_units,
|
4859
|
+
:number_of_units_served, :water_heating_system_idref, :weekday_fractions,
|
4860
|
+
:weekend_fractions, :monthly_multipliers]
|
4861
|
+
|
4312
4862
|
attr_accessor(*ATTRS)
|
4313
4863
|
|
4314
4864
|
def water_heating_system
|
@@ -4356,6 +4906,9 @@ class HPXML < Object
|
|
4356
4906
|
XMLHelper.add_element(clothes_washer, 'LabelUsage', @label_usage, :float, @label_usage_isdefaulted) unless @label_usage.nil?
|
4357
4907
|
XMLHelper.add_element(clothes_washer, 'Capacity', @capacity, :float, @capacity_isdefaulted) unless @capacity.nil?
|
4358
4908
|
XMLHelper.add_extension(clothes_washer, 'UsageMultiplier', @usage_multiplier, :float, @usage_multiplier_isdefaulted) unless @usage_multiplier.nil?
|
4909
|
+
XMLHelper.add_extension(clothes_washer, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
4910
|
+
XMLHelper.add_extension(clothes_washer, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
4911
|
+
XMLHelper.add_extension(clothes_washer, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
|
4359
4912
|
end
|
4360
4913
|
|
4361
4914
|
def from_oga(clothes_washer)
|
@@ -4376,6 +4929,9 @@ class HPXML < Object
|
|
4376
4929
|
@label_usage = XMLHelper.get_value(clothes_washer, 'LabelUsage', :float)
|
4377
4930
|
@capacity = XMLHelper.get_value(clothes_washer, 'Capacity', :float)
|
4378
4931
|
@usage_multiplier = XMLHelper.get_value(clothes_washer, 'extension/UsageMultiplier', :float)
|
4932
|
+
@weekday_fractions = XMLHelper.get_value(clothes_washer, 'extension/WeekdayScheduleFractions', :string)
|
4933
|
+
@weekend_fractions = XMLHelper.get_value(clothes_washer, 'extension/WeekendScheduleFractions', :string)
|
4934
|
+
@monthly_multipliers = XMLHelper.get_value(clothes_washer, 'extension/MonthlyScheduleMultipliers', :string)
|
4379
4935
|
end
|
4380
4936
|
end
|
4381
4937
|
|
@@ -4396,7 +4952,8 @@ class HPXML < Object
|
|
4396
4952
|
class ClothesDryer < BaseElement
|
4397
4953
|
ATTRS = [:id, :location, :fuel_type, :energy_factor, :combined_energy_factor, :control_type,
|
4398
4954
|
:usage_multiplier, :is_shared_appliance, :number_of_units, :number_of_units_served,
|
4399
|
-
:is_vented, :vented_flow_rate
|
4955
|
+
:is_vented, :vented_flow_rate, :weekday_fractions, :weekend_fractions,
|
4956
|
+
:monthly_multipliers]
|
4400
4957
|
attr_accessor(*ATTRS)
|
4401
4958
|
|
4402
4959
|
def delete
|
@@ -4423,9 +4980,12 @@ class HPXML < Object
|
|
4423
4980
|
XMLHelper.add_element(clothes_dryer, 'EnergyFactor', @energy_factor, :float) unless @energy_factor.nil?
|
4424
4981
|
XMLHelper.add_element(clothes_dryer, 'CombinedEnergyFactor', @combined_energy_factor, :float, @combined_energy_factor_isdefaulted) unless @combined_energy_factor.nil?
|
4425
4982
|
XMLHelper.add_element(clothes_dryer, 'ControlType', @control_type, :string, @control_type_isdefaulted) unless @control_type.nil?
|
4983
|
+
XMLHelper.add_element(clothes_dryer, 'Vented', @is_vented, :boolean, @is_vented_isdefaulted) unless @is_vented.nil?
|
4984
|
+
XMLHelper.add_element(clothes_dryer, 'VentedFlowRate', @vented_flow_rate, :float, @vented_flow_rate_isdefaulted) unless @vented_flow_rate.nil?
|
4426
4985
|
XMLHelper.add_extension(clothes_dryer, 'UsageMultiplier', @usage_multiplier, :float, @usage_multiplier_isdefaulted) unless @usage_multiplier.nil?
|
4427
|
-
XMLHelper.add_extension(clothes_dryer, '
|
4428
|
-
XMLHelper.add_extension(clothes_dryer, '
|
4986
|
+
XMLHelper.add_extension(clothes_dryer, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
4987
|
+
XMLHelper.add_extension(clothes_dryer, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
4988
|
+
XMLHelper.add_extension(clothes_dryer, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
|
4429
4989
|
end
|
4430
4990
|
|
4431
4991
|
def from_oga(clothes_dryer)
|
@@ -4440,9 +5000,12 @@ class HPXML < Object
|
|
4440
5000
|
@energy_factor = XMLHelper.get_value(clothes_dryer, 'EnergyFactor', :float)
|
4441
5001
|
@combined_energy_factor = XMLHelper.get_value(clothes_dryer, 'CombinedEnergyFactor', :float)
|
4442
5002
|
@control_type = XMLHelper.get_value(clothes_dryer, 'ControlType', :string)
|
5003
|
+
@is_vented = XMLHelper.get_value(clothes_dryer, 'Vented', :boolean)
|
5004
|
+
@vented_flow_rate = XMLHelper.get_value(clothes_dryer, 'VentedFlowRate', :float)
|
4443
5005
|
@usage_multiplier = XMLHelper.get_value(clothes_dryer, 'extension/UsageMultiplier', :float)
|
4444
|
-
@
|
4445
|
-
@
|
5006
|
+
@weekday_fractions = XMLHelper.get_value(clothes_dryer, 'extension/WeekdayScheduleFractions', :string)
|
5007
|
+
@weekend_fractions = XMLHelper.get_value(clothes_dryer, 'extension/WeekendScheduleFractions', :string)
|
5008
|
+
@monthly_multipliers = XMLHelper.get_value(clothes_dryer, 'extension/MonthlyScheduleMultipliers', :string)
|
4446
5009
|
end
|
4447
5010
|
end
|
4448
5011
|
|
@@ -4463,7 +5026,8 @@ class HPXML < Object
|
|
4463
5026
|
class Dishwasher < BaseElement
|
4464
5027
|
ATTRS = [:id, :location, :energy_factor, :rated_annual_kwh, :place_setting_capacity,
|
4465
5028
|
:label_electric_rate, :label_gas_rate, :label_annual_gas_cost,
|
4466
|
-
:label_usage, :usage_multiplier, :is_shared_appliance, :water_heating_system_idref
|
5029
|
+
:label_usage, :usage_multiplier, :is_shared_appliance, :water_heating_system_idref,
|
5030
|
+
:weekday_fractions, :weekend_fractions, :monthly_multipliers]
|
4467
5031
|
attr_accessor(*ATTRS)
|
4468
5032
|
|
4469
5033
|
def water_heating_system
|
@@ -4508,6 +5072,9 @@ class HPXML < Object
|
|
4508
5072
|
XMLHelper.add_element(dishwasher, 'LabelAnnualGasCost', @label_annual_gas_cost, :float, @label_annual_gas_cost_isdefaulted) unless @label_annual_gas_cost.nil?
|
4509
5073
|
XMLHelper.add_element(dishwasher, 'LabelUsage', @label_usage, :float, @label_usage_isdefaulted) unless @label_usage.nil?
|
4510
5074
|
XMLHelper.add_extension(dishwasher, 'UsageMultiplier', @usage_multiplier, :float, @usage_multiplier_isdefaulted) unless @usage_multiplier.nil?
|
5075
|
+
XMLHelper.add_extension(dishwasher, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
5076
|
+
XMLHelper.add_extension(dishwasher, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
5077
|
+
XMLHelper.add_extension(dishwasher, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
|
4511
5078
|
end
|
4512
5079
|
|
4513
5080
|
def from_oga(dishwasher)
|
@@ -4525,6 +5092,9 @@ class HPXML < Object
|
|
4525
5092
|
@label_annual_gas_cost = XMLHelper.get_value(dishwasher, 'LabelAnnualGasCost', :float)
|
4526
5093
|
@label_usage = XMLHelper.get_value(dishwasher, 'LabelUsage', :float)
|
4527
5094
|
@usage_multiplier = XMLHelper.get_value(dishwasher, 'extension/UsageMultiplier', :float)
|
5095
|
+
@weekday_fractions = XMLHelper.get_value(dishwasher, 'extension/WeekdayScheduleFractions', :string)
|
5096
|
+
@weekend_fractions = XMLHelper.get_value(dishwasher, 'extension/WeekendScheduleFractions', :string)
|
5097
|
+
@monthly_multipliers = XMLHelper.get_value(dishwasher, 'extension/MonthlyScheduleMultipliers', :string)
|
4528
5098
|
end
|
4529
5099
|
end
|
4530
5100
|
|
@@ -4543,7 +5113,7 @@ class HPXML < Object
|
|
4543
5113
|
end
|
4544
5114
|
|
4545
5115
|
class Refrigerator < BaseElement
|
4546
|
-
ATTRS = [:id, :location, :rated_annual_kwh, :
|
5116
|
+
ATTRS = [:id, :location, :rated_annual_kwh, :usage_multiplier, :primary_indicator,
|
4547
5117
|
:weekday_fractions, :weekend_fractions, :monthly_multipliers]
|
4548
5118
|
attr_accessor(*ATTRS)
|
4549
5119
|
|
@@ -4566,7 +5136,6 @@ class HPXML < Object
|
|
4566
5136
|
XMLHelper.add_element(refrigerator, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
|
4567
5137
|
XMLHelper.add_element(refrigerator, 'RatedAnnualkWh', @rated_annual_kwh, :float, @rated_annual_kwh_isdefaulted) unless @rated_annual_kwh.nil?
|
4568
5138
|
XMLHelper.add_element(refrigerator, 'PrimaryIndicator', @primary_indicator, :boolean, @primary_indicator_isdefaulted) unless @primary_indicator.nil?
|
4569
|
-
XMLHelper.add_extension(refrigerator, 'AdjustedAnnualkWh', @adjusted_annual_kwh, :float) unless @adjusted_annual_kwh.nil?
|
4570
5139
|
XMLHelper.add_extension(refrigerator, 'UsageMultiplier', @usage_multiplier, :float, @usage_multiplier_isdefaulted) unless @usage_multiplier.nil?
|
4571
5140
|
XMLHelper.add_extension(refrigerator, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
4572
5141
|
XMLHelper.add_extension(refrigerator, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
@@ -4580,7 +5149,6 @@ class HPXML < Object
|
|
4580
5149
|
@location = XMLHelper.get_value(refrigerator, 'Location', :string)
|
4581
5150
|
@rated_annual_kwh = XMLHelper.get_value(refrigerator, 'RatedAnnualkWh', :float)
|
4582
5151
|
@primary_indicator = XMLHelper.get_value(refrigerator, 'PrimaryIndicator', :boolean)
|
4583
|
-
@adjusted_annual_kwh = XMLHelper.get_value(refrigerator, 'extension/AdjustedAnnualkWh', :float)
|
4584
5152
|
@usage_multiplier = XMLHelper.get_value(refrigerator, 'extension/UsageMultiplier', :float)
|
4585
5153
|
@weekday_fractions = XMLHelper.get_value(refrigerator, 'extension/WeekdayScheduleFractions', :string)
|
4586
5154
|
@weekend_fractions = XMLHelper.get_value(refrigerator, 'extension/WeekendScheduleFractions', :string)
|
@@ -4603,7 +5171,7 @@ class HPXML < Object
|
|
4603
5171
|
end
|
4604
5172
|
|
4605
5173
|
class Freezer < BaseElement
|
4606
|
-
ATTRS = [:id, :location, :rated_annual_kwh, :
|
5174
|
+
ATTRS = [:id, :location, :rated_annual_kwh, :usage_multiplier,
|
4607
5175
|
:weekday_fractions, :weekend_fractions, :monthly_multipliers]
|
4608
5176
|
attr_accessor(*ATTRS)
|
4609
5177
|
|
@@ -4625,7 +5193,6 @@ class HPXML < Object
|
|
4625
5193
|
XMLHelper.add_attribute(sys_id, 'id', @id)
|
4626
5194
|
XMLHelper.add_element(freezer, 'Location', @location, :string, @location_isdefaulted) unless @location.nil?
|
4627
5195
|
XMLHelper.add_element(freezer, 'RatedAnnualkWh', @rated_annual_kwh, :float, @rated_annual_kwh_isdefaulted) unless @rated_annual_kwh.nil?
|
4628
|
-
XMLHelper.add_extension(freezer, 'AdjustedAnnualkWh', @adjusted_annual_kwh, :float) unless @adjusted_annual_kwh.nil?
|
4629
5196
|
XMLHelper.add_extension(freezer, 'UsageMultiplier', @usage_multiplier, :float, @usage_multiplier_isdefaulted) unless @usage_multiplier.nil?
|
4630
5197
|
XMLHelper.add_extension(freezer, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
4631
5198
|
XMLHelper.add_extension(freezer, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
@@ -4638,7 +5205,6 @@ class HPXML < Object
|
|
4638
5205
|
@id = HPXML::get_id(freezer)
|
4639
5206
|
@location = XMLHelper.get_value(freezer, 'Location', :string)
|
4640
5207
|
@rated_annual_kwh = XMLHelper.get_value(freezer, 'RatedAnnualkWh', :float)
|
4641
|
-
@adjusted_annual_kwh = XMLHelper.get_value(freezer, 'extension/AdjustedAnnualkWh', :float)
|
4642
5208
|
@usage_multiplier = XMLHelper.get_value(freezer, 'extension/UsageMultiplier', :float)
|
4643
5209
|
@weekday_fractions = XMLHelper.get_value(freezer, 'extension/WeekdayScheduleFractions', :string)
|
4644
5210
|
@weekend_fractions = XMLHelper.get_value(freezer, 'extension/WeekendScheduleFractions', :string)
|
@@ -4893,7 +5459,7 @@ class HPXML < Object
|
|
4893
5459
|
exterior_holiday_lighting = XMLHelper.create_elements_as_needed(doc, ['HPXML', 'Building', 'BuildingDetails', 'Lighting', 'extension', 'ExteriorHolidayLighting'])
|
4894
5460
|
if not @holiday_kwh_per_day.nil?
|
4895
5461
|
holiday_lighting_load = XMLHelper.add_element(exterior_holiday_lighting, 'Load')
|
4896
|
-
XMLHelper.add_element(holiday_lighting_load, 'Units',
|
5462
|
+
XMLHelper.add_element(holiday_lighting_load, 'Units', UnitsKwhPerDay, :string)
|
4897
5463
|
XMLHelper.add_element(holiday_lighting_load, 'Value', @holiday_kwh_per_day, :float, @holiday_kwh_per_day_isdefaulted)
|
4898
5464
|
end
|
4899
5465
|
XMLHelper.add_element(exterior_holiday_lighting, 'PeriodBeginMonth', @holiday_period_begin_month, :integer, @holiday_period_begin_month_isdefaulted) unless @holiday_period_begin_month.nil?
|
@@ -4925,7 +5491,7 @@ class HPXML < Object
|
|
4925
5491
|
@exterior_monthly_multipliers = XMLHelper.get_value(lighting, 'extension/ExteriorMonthlyScheduleMultipliers', :string)
|
4926
5492
|
if not XMLHelper.get_element(hpxml, 'Building/BuildingDetails/Lighting/extension/ExteriorHolidayLighting').nil?
|
4927
5493
|
@holiday_exists = true
|
4928
|
-
@holiday_kwh_per_day = XMLHelper.get_value(lighting,
|
5494
|
+
@holiday_kwh_per_day = XMLHelper.get_value(lighting, "extension/ExteriorHolidayLighting/Load[Units='#{UnitsKwhPerDay}']/Value", :float)
|
4929
5495
|
@holiday_period_begin_month = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodBeginMonth', :integer)
|
4930
5496
|
@holiday_period_begin_day = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodBeginDayOfMonth', :integer)
|
4931
5497
|
@holiday_period_end_month = XMLHelper.get_value(lighting, 'extension/ExteriorHolidayLighting/PeriodEndMonth', :integer)
|
@@ -4953,7 +5519,7 @@ class HPXML < Object
|
|
4953
5519
|
end
|
4954
5520
|
|
4955
5521
|
class CeilingFan < BaseElement
|
4956
|
-
ATTRS = [:id, :efficiency, :quantity]
|
5522
|
+
ATTRS = [:id, :efficiency, :quantity, :weekday_fractions, :weekend_fractions, :monthly_multipliers]
|
4957
5523
|
attr_accessor(*ATTRS)
|
4958
5524
|
|
4959
5525
|
def delete
|
@@ -4978,12 +5544,18 @@ class HPXML < Object
|
|
4978
5544
|
XMLHelper.add_element(airflow, 'Efficiency', @efficiency, :float, @efficiency_isdefaulted)
|
4979
5545
|
end
|
4980
5546
|
XMLHelper.add_element(ceiling_fan, 'Quantity', @quantity, :integer, @quantity_isdefaulted) unless @quantity.nil?
|
5547
|
+
XMLHelper.add_extension(ceiling_fan, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
|
5548
|
+
XMLHelper.add_extension(ceiling_fan, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
|
5549
|
+
XMLHelper.add_extension(ceiling_fan, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
|
4981
5550
|
end
|
4982
5551
|
|
4983
5552
|
def from_oga(ceiling_fan)
|
4984
5553
|
@id = HPXML::get_id(ceiling_fan)
|
4985
5554
|
@efficiency = XMLHelper.get_value(ceiling_fan, "Airflow[FanSpeed='medium']/Efficiency", :float)
|
4986
5555
|
@quantity = XMLHelper.get_value(ceiling_fan, 'Quantity', :integer)
|
5556
|
+
@weekday_fractions = XMLHelper.get_value(ceiling_fan, 'extension/WeekdayScheduleFractions', :string)
|
5557
|
+
@weekend_fractions = XMLHelper.get_value(ceiling_fan, 'extension/WeekendScheduleFractions', :string)
|
5558
|
+
@monthly_multipliers = XMLHelper.get_value(ceiling_fan, 'extension/MonthlyScheduleMultipliers', :string)
|
4987
5559
|
end
|
4988
5560
|
end
|
4989
5561
|
|
@@ -5335,11 +5907,11 @@ class HPXML < Object
|
|
5335
5907
|
XMLHelper.add_attribute(hpxml, 'xmlns', 'http://hpxmlonline.com/2019/10')
|
5336
5908
|
XMLHelper.add_attribute(hpxml, 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
|
5337
5909
|
XMLHelper.add_attribute(hpxml, 'xsi:schemaLocation', 'http://hpxmlonline.com/2019/10')
|
5338
|
-
XMLHelper.add_attribute(hpxml, 'schemaVersion',
|
5910
|
+
XMLHelper.add_attribute(hpxml, 'schemaVersion', Version::HPXML_Version)
|
5339
5911
|
return doc
|
5340
5912
|
end
|
5341
5913
|
|
5342
|
-
def collapse_enclosure_surfaces()
|
5914
|
+
def collapse_enclosure_surfaces(surf_types_of_interest = nil)
|
5343
5915
|
# Collapses like surfaces into a single surface with, e.g., aggregate surface area.
|
5344
5916
|
# This can significantly speed up performance for HPXML files with lots of individual
|
5345
5917
|
# surfaces (e.g., windows).
|
@@ -5359,10 +5931,13 @@ class HPXML < Object
|
|
5359
5931
|
:perimeter_insulation_id,
|
5360
5932
|
:under_slab_insulation_id,
|
5361
5933
|
:area,
|
5934
|
+
:length,
|
5362
5935
|
:exposed_perimeter]
|
5363
5936
|
|
5364
5937
|
# Look for pairs of surfaces that can be collapsed
|
5365
5938
|
surf_types.each do |surf_type, surfaces|
|
5939
|
+
next unless surf_types_of_interest.nil? || surf_types_of_interest.include?(surf_type)
|
5940
|
+
|
5366
5941
|
for i in 0..surfaces.size - 1
|
5367
5942
|
surf = surfaces[i]
|
5368
5943
|
next if surf.nil?
|
@@ -5390,6 +5965,9 @@ class HPXML < Object
|
|
5390
5965
|
if (surf_type == :slabs) && (not surf.exposed_perimeter.nil?) && (not surf2.exposed_perimeter.nil?)
|
5391
5966
|
surf.exposed_perimeter += surf2.exposed_perimeter
|
5392
5967
|
end
|
5968
|
+
if (surf_type == :foundation_walls) && (not surf.length.nil?) && (not surf2.length.nil?)
|
5969
|
+
surf.length += surf2.length
|
5970
|
+
end
|
5393
5971
|
|
5394
5972
|
# Update subsurface idrefs as appropriate
|
5395
5973
|
(@windows + @doors).each do |subsurf|
|
@@ -5472,6 +6050,8 @@ class HPXML < Object
|
|
5472
6050
|
# Check for errors across objects #
|
5473
6051
|
# ------------------------------- #
|
5474
6052
|
|
6053
|
+
# FUTURE: Move these to EPvalidator.xml where possible
|
6054
|
+
|
5475
6055
|
# Check for globally unique SystemIdentifier IDs and empty IDs
|
5476
6056
|
sys_ids = {}
|
5477
6057
|
self.class::HPXML_ATTRS.each do |attribute|
|
@@ -5491,42 +6071,6 @@ class HPXML < Object
|
|
5491
6071
|
errors << "Duplicate SystemIdentifier IDs detected for '#{sys_id}'." if cnt > 1
|
5492
6072
|
end
|
5493
6073
|
|
5494
|
-
# Check sum of HVAC FractionCoolLoadServeds <= 1
|
5495
|
-
if total_fraction_cool_load_served > 1.01 # Use 1.01 in case of rounding
|
5496
|
-
errors << "Expected FractionCoolLoadServed to sum to <= 1, but calculated sum is #{total_fraction_cool_load_served.round(2)}."
|
5497
|
-
end
|
5498
|
-
|
5499
|
-
# Check sum of HVAC FractionHeatLoadServeds <= 1
|
5500
|
-
if total_fraction_heat_load_served > 1.01 # Use 1.01 in case of rounding
|
5501
|
-
errors << "Expected FractionHeatLoadServed to sum to <= 1, but calculated sum is #{total_fraction_heat_load_served.round(2)}."
|
5502
|
-
end
|
5503
|
-
|
5504
|
-
# Check sum of dehumidifier FractionDehumidificationLoadServed <= 1
|
5505
|
-
total_fraction_dehum_load_served = @dehumidifiers.map { |d| d.fraction_served }.sum(0.0)
|
5506
|
-
if total_fraction_dehum_load_served > 1.01 # Use 1.01 in case of rounding
|
5507
|
-
errors << "Expected FractionDehumidificationLoadServed to sum to <= 1, but calculated sum is #{total_fraction_dehum_load_served.round(2)}."
|
5508
|
-
end
|
5509
|
-
|
5510
|
-
# Check sum of HVAC FractionDHWLoadServed == 1
|
5511
|
-
frac_dhw_load = @water_heating_systems.map { |dhw| dhw.fraction_dhw_load_served.to_f }.sum(0.0)
|
5512
|
-
if (frac_dhw_load > 0) && ((frac_dhw_load < 0.99) || (frac_dhw_load > 1.01)) # Use 0.99/1.01 in case of rounding
|
5513
|
-
errors << "Expected FractionDHWLoadServed to sum to 1, but calculated sum is #{frac_dhw_load.round(2)}."
|
5514
|
-
end
|
5515
|
-
|
5516
|
-
# Check sum of lighting fractions in a location <= 1
|
5517
|
-
ltg_fracs = {}
|
5518
|
-
@lighting_groups.each do |lighting_group|
|
5519
|
-
next if lighting_group.location.nil? || lighting_group.fraction_of_units_in_location.nil?
|
5520
|
-
|
5521
|
-
ltg_fracs[lighting_group.location] = 0 if ltg_fracs[lighting_group.location].nil?
|
5522
|
-
ltg_fracs[lighting_group.location] += lighting_group.fraction_of_units_in_location
|
5523
|
-
end
|
5524
|
-
ltg_fracs.each do |location, sum|
|
5525
|
-
next if sum <= 1.01 # Use 1.01 in case of rounding
|
5526
|
-
|
5527
|
-
errors << "Sum of fractions of #{location} lighting (#{sum}) is greater than 1."
|
5528
|
-
end
|
5529
|
-
|
5530
6074
|
# Check for HVAC systems referenced by multiple water heating systems
|
5531
6075
|
hvac_systems.each do |hvac_system|
|
5532
6076
|
num_attached = 0
|
@@ -5601,6 +6145,20 @@ class HPXML < Object
|
|
5601
6145
|
end
|
5602
6146
|
end
|
5603
6147
|
|
6148
|
+
# Check for correct PrimaryHeatingSystem values across all HVAC systems
|
6149
|
+
n_primary_heating = @heating_systems.select { |h| h.primary_system }.size +
|
6150
|
+
@heat_pumps.select { |h| h.primary_heating_system }.size
|
6151
|
+
if n_primary_heating > 1
|
6152
|
+
errors << 'More than one heating system designated as the primary.'
|
6153
|
+
end
|
6154
|
+
|
6155
|
+
# Check for correct PrimaryCoolingSystem values across all HVAC systems
|
6156
|
+
n_primary_cooling = @cooling_systems.select { |c| c.primary_system }.size +
|
6157
|
+
@heat_pumps.select { |c| c.primary_cooling_system }.size
|
6158
|
+
if n_primary_cooling > 1
|
6159
|
+
errors << 'More than one cooling system designated as the primary.'
|
6160
|
+
end
|
6161
|
+
|
5604
6162
|
# Check for at most 1 shared heating system and 1 shared cooling system
|
5605
6163
|
num_htg_shared = 0
|
5606
6164
|
num_clg_shared = 0
|
@@ -5629,9 +6187,30 @@ class HPXML < Object
|
|
5629
6187
|
def self.conditioned_locations
|
5630
6188
|
return [HPXML::LocationLivingSpace,
|
5631
6189
|
HPXML::LocationBasementConditioned,
|
6190
|
+
HPXML::LocationCrawlspaceConditioned,
|
5632
6191
|
HPXML::LocationOtherHousingUnit]
|
5633
6192
|
end
|
5634
6193
|
|
6194
|
+
def self.conditioned_locations_this_unit
|
6195
|
+
return [HPXML::LocationLivingSpace,
|
6196
|
+
HPXML::LocationBasementConditioned,
|
6197
|
+
HPXML::LocationCrawlspaceConditioned]
|
6198
|
+
end
|
6199
|
+
|
6200
|
+
def self.conditioned_finished_locations
|
6201
|
+
return [HPXML::LocationLivingSpace,
|
6202
|
+
HPXML::LocationBasementConditioned]
|
6203
|
+
end
|
6204
|
+
|
6205
|
+
def self.conditioned_below_grade_locations
|
6206
|
+
return [HPXML::LocationBasementConditioned,
|
6207
|
+
HPXML::LocationCrawlspaceConditioned]
|
6208
|
+
end
|
6209
|
+
|
6210
|
+
def self.is_conditioned(surface)
|
6211
|
+
return conditioned_locations.include?(surface.interior_adjacent_to)
|
6212
|
+
end
|
6213
|
+
|
5635
6214
|
def self.is_adiabatic(surface)
|
5636
6215
|
if surface.exterior_adjacent_to == surface.interior_adjacent_to
|
5637
6216
|
# E.g., wall between unit crawlspace and neighboring unit crawlspace
|
@@ -5662,4 +6241,40 @@ class HPXML < Object
|
|
5662
6241
|
def self.get_idref(element)
|
5663
6242
|
return XMLHelper.get_attribute_value(element, 'idref')
|
5664
6243
|
end
|
6244
|
+
|
6245
|
+
def self.check_dates(str, begin_month, begin_day, end_month, end_day)
|
6246
|
+
errors = []
|
6247
|
+
|
6248
|
+
# Check for valid months
|
6249
|
+
valid_months = (1..12).to_a
|
6250
|
+
|
6251
|
+
if not begin_month.nil?
|
6252
|
+
if not valid_months.include? begin_month
|
6253
|
+
errors << "#{str} Begin Month (#{begin_month}) must be one of: #{valid_months.join(', ')}."
|
6254
|
+
end
|
6255
|
+
end
|
6256
|
+
|
6257
|
+
if not end_month.nil?
|
6258
|
+
if not valid_months.include? end_month
|
6259
|
+
errors << "#{str} End Month (#{end_month}) must be one of: #{valid_months.join(', ')}."
|
6260
|
+
end
|
6261
|
+
end
|
6262
|
+
|
6263
|
+
# Check for valid days
|
6264
|
+
months_days = { [1, 3, 5, 7, 8, 10, 12] => (1..31).to_a, [4, 6, 9, 11] => (1..30).to_a, [2] => (1..28).to_a }
|
6265
|
+
months_days.each do |months, valid_days|
|
6266
|
+
if (not begin_day.nil?) && (months.include? begin_month)
|
6267
|
+
if not valid_days.include? begin_day
|
6268
|
+
errors << "#{str} Begin Day of Month (#{begin_day}) must be one of: #{valid_days.join(', ')}."
|
6269
|
+
end
|
6270
|
+
end
|
6271
|
+
next unless (not end_day.nil?) && (months.include? end_month)
|
6272
|
+
|
6273
|
+
if not valid_days.include? end_day
|
6274
|
+
errors << "#{str} End Day of Month (#{end_day}) must be one of: #{valid_days.join(', ')}."
|
6275
|
+
end
|
6276
|
+
end
|
6277
|
+
|
6278
|
+
return errors
|
6279
|
+
end
|
5665
6280
|
end
|