urbanopt-cli 0.6.1 → 0.7.0
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 +34 -0
- data/CMakeLists.txt +7 -7
- data/FindOpenStudioSDK.cmake +6 -6
- data/Gemfile +11 -5
- data/example_files/Gemfile +6 -3
- 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/example_project_with_streets.json +826 -0
- data/example_files/mappers/Baseline.rb +52 -31
- 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 +25 -17
- data/example_files/visualization/input_visualization_scenario.html +23 -12
- 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 +146 -28
- data/uo_cli.gemspec +6 -5
- metadata +232 -637
- 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
@@ -1,13 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Geometry
|
4
|
-
def self.get_abs_azimuth(
|
5
|
-
azimuth =
|
6
|
-
if azimuth_type == Constants.CoordRelative
|
7
|
-
azimuth = relative_azimuth + building_orientation + offset
|
8
|
-
elsif azimuth_type == Constants.CoordAbsolute
|
9
|
-
azimuth = relative_azimuth + offset
|
10
|
-
end
|
4
|
+
def self.get_abs_azimuth(relative_azimuth, building_orientation)
|
5
|
+
azimuth = relative_azimuth + building_orientation
|
11
6
|
|
12
7
|
# Ensure azimuth is >=0 and <=360
|
13
8
|
while azimuth < 0.0
|
@@ -21,6 +16,85 @@ class Geometry
|
|
21
16
|
return azimuth
|
22
17
|
end
|
23
18
|
|
19
|
+
def self.get_absolute_tilt(tilt_str, roof_pitch, epw_file)
|
20
|
+
tilt_str = tilt_str.downcase
|
21
|
+
if tilt_str.start_with? 'roofpitch'
|
22
|
+
roof_angle = Math.atan(roof_pitch / 12.0) * 180.0 / Math::PI
|
23
|
+
return Float(eval(tilt_str.gsub('roofpitch', roof_angle.to_s)))
|
24
|
+
elsif tilt_str.start_with? 'latitude'
|
25
|
+
return Float(eval(tilt_str.gsub('latitude', epw_file.latitude.to_s)))
|
26
|
+
else
|
27
|
+
return Float(tilt_str)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.get_surface_azimuth(surface:,
|
32
|
+
orientation:)
|
33
|
+
facade = get_facade_for_surface(surface)
|
34
|
+
return get_azimuth_from_facade(facade: facade, orientation: orientation)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.get_azimuth_from_facade(facade:,
|
38
|
+
orientation:)
|
39
|
+
if facade == Constants.FacadeFront
|
40
|
+
azimuth = get_abs_azimuth(0, orientation)
|
41
|
+
elsif facade == Constants.FacadeBack
|
42
|
+
azimuth = get_abs_azimuth(180, orientation)
|
43
|
+
elsif facade == Constants.FacadeLeft
|
44
|
+
azimuth = get_abs_azimuth(90, orientation)
|
45
|
+
elsif facade == Constants.FacadeRight
|
46
|
+
azimuth = get_abs_azimuth(270, orientation)
|
47
|
+
else
|
48
|
+
fail 'Unexpected facade.'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.get_unexposed_garage_perimeter(geometry_garage_protrusion:,
|
53
|
+
geometry_garage_width:,
|
54
|
+
geometry_garage_depth:,
|
55
|
+
**remainder)
|
56
|
+
protrusion = geometry_garage_protrusion
|
57
|
+
width = geometry_garage_width
|
58
|
+
depth = geometry_garage_depth
|
59
|
+
# this is perimeter adjacent to a 100% protruding garage that is not exposed
|
60
|
+
# we need this because it's difficult to set this surface to Adiabatic using our geometry methods
|
61
|
+
if (protrusion == 1.0) && (width * depth > 0)
|
62
|
+
return width
|
63
|
+
end
|
64
|
+
|
65
|
+
return 0
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.get_adiabatic_adjacent_surface(model:,
|
69
|
+
surface:)
|
70
|
+
return if surface.outsideBoundaryCondition != 'Adiabatic'
|
71
|
+
|
72
|
+
adjacentSurfaceType = 'Wall'
|
73
|
+
if surface.surfaceType == 'RoofCeiling'
|
74
|
+
adjacentSurfaceType = 'Floor'
|
75
|
+
elsif surface.surfaceType == 'Floor'
|
76
|
+
adjacentSurfaceType = 'RoofCeiling'
|
77
|
+
end
|
78
|
+
|
79
|
+
model.getSurfaces.sort.each do |adjacent_surface|
|
80
|
+
next if surface == adjacent_surface
|
81
|
+
next if adjacent_surface.surfaceType != adjacentSurfaceType
|
82
|
+
next if adjacent_surface.outsideBoundaryCondition != 'Adiabatic'
|
83
|
+
next unless Geometry.has_same_vertices(surface, adjacent_surface)
|
84
|
+
|
85
|
+
return adjacent_surface
|
86
|
+
end
|
87
|
+
return
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.get_adjacent_to(surface:)
|
91
|
+
space = surface.space.get
|
92
|
+
st = space.spaceType.get
|
93
|
+
space_type = st.standardsSpaceType.get
|
94
|
+
|
95
|
+
return space_type
|
96
|
+
end
|
97
|
+
|
24
98
|
def self.add_rim_joist(model, polygon, space, rim_joist_height, z)
|
25
99
|
if rim_joist_height > 0
|
26
100
|
# make polygons
|
@@ -56,10 +130,10 @@ class Geometry
|
|
56
130
|
|
57
131
|
def self.create_single_family_detached(runner:,
|
58
132
|
model:,
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
133
|
+
geometry_unit_cfa:,
|
134
|
+
geometry_average_ceiling_height:,
|
135
|
+
geometry_unit_num_floors_above_grade:,
|
136
|
+
geometry_unit_aspect_ratio:,
|
63
137
|
geometry_garage_width:,
|
64
138
|
geometry_garage_depth:,
|
65
139
|
geometry_garage_protrusion:,
|
@@ -71,10 +145,10 @@ class Geometry
|
|
71
145
|
geometry_roof_type:,
|
72
146
|
geometry_roof_pitch:,
|
73
147
|
**remainder)
|
74
|
-
cfa =
|
75
|
-
|
76
|
-
num_floors =
|
77
|
-
aspect_ratio =
|
148
|
+
cfa = geometry_unit_cfa
|
149
|
+
average_ceiling_height = geometry_average_ceiling_height
|
150
|
+
num_floors = geometry_unit_num_floors_above_grade
|
151
|
+
aspect_ratio = geometry_unit_aspect_ratio
|
78
152
|
garage_width = geometry_garage_width
|
79
153
|
garage_depth = geometry_garage_depth
|
80
154
|
garage_protrusion = geometry_garage_protrusion
|
@@ -83,6 +157,9 @@ class Geometry
|
|
83
157
|
foundation_height = geometry_foundation_height
|
84
158
|
rim_joist_height = geometry_rim_joist_height
|
85
159
|
attic_type = geometry_attic_type
|
160
|
+
if attic_type == HPXML::AtticTypeConditioned
|
161
|
+
num_floors -= 1
|
162
|
+
end
|
86
163
|
roof_type = geometry_roof_type
|
87
164
|
roof_pitch = geometry_roof_pitch
|
88
165
|
|
@@ -110,7 +187,7 @@ class Geometry
|
|
110
187
|
|
111
188
|
# Convert to SI
|
112
189
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
113
|
-
|
190
|
+
average_ceiling_height = UnitConversions.convert(average_ceiling_height, 'ft', 'm')
|
114
191
|
garage_width = UnitConversions.convert(garage_width, 'ft', 'm')
|
115
192
|
garage_depth = UnitConversions.convert(garage_depth, 'ft', 'm')
|
116
193
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
@@ -175,7 +252,7 @@ class Geometry
|
|
175
252
|
foundation_polygon_with_wrong_zs = nil
|
176
253
|
for floor in (0..num_floors - 1)
|
177
254
|
|
178
|
-
z =
|
255
|
+
z = average_ceiling_height * floor + foundation_offset + rim_joist_height
|
179
256
|
|
180
257
|
if has_garage && (z == foundation_offset + rim_joist_height) # first floor and has garage
|
181
258
|
|
@@ -200,7 +277,7 @@ class Geometry
|
|
200
277
|
end
|
201
278
|
|
202
279
|
# make space
|
203
|
-
garage_space = OpenStudio::Model::Space::fromFloorPrint(garage_polygon,
|
280
|
+
garage_space = OpenStudio::Model::Space::fromFloorPrint(garage_polygon, average_ceiling_height, model)
|
204
281
|
garage_space = garage_space.get
|
205
282
|
garage_space.setName(garage_space_name)
|
206
283
|
garage_space_type = OpenStudio::Model::SpaceType.new(model)
|
@@ -291,7 +368,7 @@ class Geometry
|
|
291
368
|
end
|
292
369
|
|
293
370
|
# make space
|
294
|
-
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon,
|
371
|
+
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon, average_ceiling_height, model)
|
295
372
|
living_space = living_space.get
|
296
373
|
if floor > 0
|
297
374
|
living_space_name = "#{HPXML::LocationLivingSpace}|story #{floor + 1}"
|
@@ -314,9 +391,9 @@ class Geometry
|
|
314
391
|
end
|
315
392
|
|
316
393
|
# Attic
|
317
|
-
if
|
394
|
+
if attic_type != HPXML::AtticTypeFlatRoof
|
318
395
|
|
319
|
-
z +=
|
396
|
+
z += average_ceiling_height
|
320
397
|
|
321
398
|
# calculate the dimensions of the attic
|
322
399
|
if length >= width
|
@@ -424,7 +501,12 @@ class Geometry
|
|
424
501
|
end
|
425
502
|
|
426
503
|
# Foundation
|
427
|
-
if [HPXML::FoundationTypeCrawlspaceVented,
|
504
|
+
if [HPXML::FoundationTypeCrawlspaceVented,
|
505
|
+
HPXML::FoundationTypeCrawlspaceUnvented,
|
506
|
+
HPXML::FoundationTypeCrawlspaceConditioned,
|
507
|
+
HPXML::FoundationTypeBasementUnconditioned,
|
508
|
+
HPXML::FoundationTypeBasementConditioned,
|
509
|
+
HPXML::FoundationTypeAmbient].include? foundation_type
|
428
510
|
|
429
511
|
z = -foundation_height + foundation_offset
|
430
512
|
|
@@ -445,6 +527,8 @@ class Geometry
|
|
445
527
|
foundation_space_name = HPXML::LocationCrawlspaceVented
|
446
528
|
elsif foundation_type == HPXML::FoundationTypeCrawlspaceUnvented
|
447
529
|
foundation_space_name = HPXML::LocationCrawlspaceUnvented
|
530
|
+
elsif foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
|
531
|
+
foundation_space_name = HPXML::LocationCrawlspaceConditioned
|
448
532
|
elsif foundation_type == HPXML::FoundationTypeBasementUnconditioned
|
449
533
|
foundation_space_name = HPXML::LocationBasementUnconditioned
|
450
534
|
elsif foundation_type == HPXML::FoundationTypeBasementConditioned
|
@@ -494,7 +578,7 @@ class Geometry
|
|
494
578
|
OpenStudio::Model.intersectSurfaces(spaces)
|
495
579
|
OpenStudio::Model.matchSurfaces(spaces)
|
496
580
|
|
497
|
-
if has_garage &&
|
581
|
+
if has_garage && attic_type != HPXML::AtticTypeFlatRoof
|
498
582
|
if num_floors > 1
|
499
583
|
space_with_roof_over_garage = living_space
|
500
584
|
else
|
@@ -557,15 +641,15 @@ class Geometry
|
|
557
641
|
|
558
642
|
if num_floors == 1
|
559
643
|
if not attic_type == HPXML::AtticTypeConditioned
|
560
|
-
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, living_space.zOrigin +
|
561
|
-
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, living_space.zOrigin +
|
644
|
+
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, living_space.zOrigin + average_ceiling_height + garage_attic_height)
|
645
|
+
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, living_space.zOrigin + average_ceiling_height + garage_attic_height)
|
562
646
|
else
|
563
|
-
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, garage_attic_height +
|
564
|
-
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, garage_attic_height +
|
647
|
+
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, garage_attic_height + average_ceiling_height)
|
648
|
+
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, garage_attic_height + average_ceiling_height)
|
565
649
|
end
|
566
650
|
else
|
567
|
-
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, num_floors *
|
568
|
-
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, num_floors *
|
651
|
+
roof_n_point = OpenStudio::Point3d.new((nw_point.x + ne_point.x) / 2, nw_point.y + garage_attic_height / roof_pitch, num_floors * average_ceiling_height + garage_attic_height + rim_joist_height)
|
652
|
+
roof_s_point = OpenStudio::Point3d.new((sw_point.x + se_point.x) / 2, sw_point.y, num_floors * average_ceiling_height + garage_attic_height + rim_joist_height)
|
569
653
|
end
|
570
654
|
|
571
655
|
polygon_w_roof = make_polygon(nw_point, sw_point, roof_s_point, roof_n_point)
|
@@ -709,11 +793,13 @@ class Geometry
|
|
709
793
|
end
|
710
794
|
|
711
795
|
def self.has_same_vertices(surface1, surface2)
|
712
|
-
if getSurfaceXValues([surface1]) == getSurfaceXValues([surface2]) &&
|
713
|
-
getSurfaceYValues([surface1]) == getSurfaceYValues([surface2]) &&
|
714
|
-
getSurfaceZValues([surface1]) == getSurfaceZValues([surface2])
|
796
|
+
if getSurfaceXValues([surface1]).sort == getSurfaceXValues([surface2]).sort &&
|
797
|
+
getSurfaceYValues([surface1]).sort == getSurfaceYValues([surface2]).sort &&
|
798
|
+
getSurfaceZValues([surface1]).sort == getSurfaceZValues([surface2]).sort &&
|
799
|
+
surface1.space.get.zOrigin.round(5) == surface2.space.get.zOrigin.round(5)
|
715
800
|
return true
|
716
801
|
end
|
802
|
+
|
717
803
|
return false
|
718
804
|
end
|
719
805
|
|
@@ -795,7 +881,7 @@ class Geometry
|
|
795
881
|
window_areas[Constants.FacadeBack] = window_area_back
|
796
882
|
window_areas[Constants.FacadeLeft] = window_area_left
|
797
883
|
window_areas[Constants.FacadeRight] = window_area_right
|
798
|
-
|
884
|
+
|
799
885
|
skylight_areas = {}
|
800
886
|
skylight_areas[Constants.FacadeFront] = skylight_area_front
|
801
887
|
skylight_areas[Constants.FacadeBack] = skylight_area_back
|
@@ -803,83 +889,38 @@ class Geometry
|
|
803
889
|
skylight_areas[Constants.FacadeRight] = skylight_area_right
|
804
890
|
skylight_areas['none'] = 0
|
805
891
|
|
806
|
-
#
|
892
|
+
# Store surfaces that should get windows by facade
|
807
893
|
wall_surfaces = { Constants.FacadeFront => [], Constants.FacadeBack => [],
|
808
894
|
Constants.FacadeLeft => [], Constants.FacadeRight => [] }
|
809
895
|
roof_surfaces = { Constants.FacadeFront => [], Constants.FacadeBack => [],
|
810
896
|
Constants.FacadeLeft => [], Constants.FacadeRight => [],
|
811
897
|
'none' => [] }
|
812
|
-
|
813
|
-
constructions = {}
|
814
|
-
window_warn_msg = nil
|
815
|
-
skylight_warn_msg = nil
|
898
|
+
|
816
899
|
get_conditioned_spaces(model.getSpaces).each do |space|
|
817
900
|
space.surfaces.each do |surface|
|
818
|
-
|
819
|
-
|
901
|
+
next unless (surface.surfaceType.downcase == 'wall') && (surface.outsideBoundaryCondition.downcase == 'outdoors')
|
902
|
+
next if (90 - surface.tilt * 180 / Math::PI).abs > 0.01 # Not a vertical wall
|
820
903
|
|
821
|
-
|
822
|
-
|
823
|
-
surface.subSurfaces.each do |sub_surface|
|
824
|
-
next if sub_surface.subSurfaceType.downcase != 'fixedwindow'
|
904
|
+
facade = get_facade_for_surface(surface)
|
905
|
+
next if facade.nil?
|
825
906
|
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
sub_surface.remove
|
833
|
-
win_removed = true
|
834
|
-
end
|
835
|
-
if win_removed
|
836
|
-
runner.registerInfo("Removed fixed window(s) from #{surface.name}.")
|
837
|
-
end
|
838
|
-
facade = get_facade_for_surface(surface)
|
839
|
-
next if facade.nil?
|
907
|
+
wall_surfaces[facade] << surface
|
908
|
+
end
|
909
|
+
end
|
910
|
+
model.getSpaces.each do |space|
|
911
|
+
space.surfaces.each do |surface|
|
912
|
+
next unless (surface.surfaceType.downcase == 'roofceiling') && (surface.outsideBoundaryCondition.downcase == 'outdoors')
|
840
913
|
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
elsif (surface.surfaceType.downcase == 'roofceiling') && (surface.outsideBoundaryCondition.downcase == 'outdoors')
|
846
|
-
sky_removed = false
|
847
|
-
construction = nil
|
848
|
-
surface.subSurfaces.each do |sub_surface|
|
849
|
-
next if sub_surface.subSurfaceType.downcase != 'skylight'
|
850
|
-
|
851
|
-
if sub_surface.construction.is_initialized
|
852
|
-
if (not construction.nil?) && (construction != sub_surface.construction.get)
|
853
|
-
skylight_warn_msg = 'Multiple constructions found. An arbitrary construction may be assigned to new skylight(s).'
|
854
|
-
end
|
855
|
-
construction = sub_surface.construction.get
|
856
|
-
end
|
857
|
-
sub_surface.remove
|
858
|
-
sky_removed = true
|
859
|
-
end
|
860
|
-
if sky_removed
|
861
|
-
runner.registerInfo("Removed fixed skylight(s) from #{surface.name}.")
|
862
|
-
end
|
863
|
-
facade = get_facade_for_surface(surface)
|
864
|
-
if facade.nil?
|
865
|
-
if surface.tilt == 0 # flat roof
|
866
|
-
roof_surfaces['none'] << surface
|
867
|
-
end
|
868
|
-
next
|
869
|
-
end
|
870
|
-
roof_surfaces[facade] << surface
|
871
|
-
if (not construction.nil?) && (not constructions.keys.include? facade)
|
872
|
-
constructions[facade] = construction
|
914
|
+
facade = get_facade_for_surface(surface)
|
915
|
+
if facade.nil?
|
916
|
+
if surface.tilt == 0 # flat roof
|
917
|
+
roof_surfaces['none'] << surface
|
873
918
|
end
|
919
|
+
next
|
874
920
|
end
|
921
|
+
roof_surfaces[facade] << surface
|
875
922
|
end
|
876
923
|
end
|
877
|
-
if not window_warn_msg.nil?
|
878
|
-
runner.registerWarning(window_warn_msg)
|
879
|
-
end
|
880
|
-
if not skylight_warn_msg.nil?
|
881
|
-
runner.registerWarning(skylight_warn_msg)
|
882
|
-
end
|
883
924
|
|
884
925
|
# error checking
|
885
926
|
facades.each do |facade|
|
@@ -904,20 +945,14 @@ class Geometry
|
|
904
945
|
|
905
946
|
# Split any surfaces that have doors so that we can ignore them when adding windows
|
906
947
|
facades.each do |facade|
|
907
|
-
surfaces_to_add = []
|
908
948
|
wall_surfaces[facade].each do |surface|
|
909
949
|
next if surface.subSurfaces.size == 0
|
910
950
|
|
911
951
|
new_surfaces = surface.splitSurfaceForSubSurfaces
|
912
952
|
new_surfaces.each do |new_surface|
|
913
|
-
|
914
|
-
|
915
|
-
surfaces_to_add << new_surface
|
953
|
+
wall_surfaces[facade] << new_surface
|
916
954
|
end
|
917
955
|
end
|
918
|
-
surfaces_to_add.each do |surface_to_add|
|
919
|
-
wall_surfaces[facade] << surface_to_add
|
920
|
-
end
|
921
956
|
end
|
922
957
|
|
923
958
|
# Windows
|
@@ -927,7 +962,7 @@ class Geometry
|
|
927
962
|
max_single_window_area = 12.0 # sqft
|
928
963
|
window_gap_y = 1.0 # ft; distance from top of wall
|
929
964
|
window_gap_x = 0.2 # ft; distance between windows in a two-window group
|
930
|
-
|
965
|
+
min_average_ceiling_height_for_window = Math.sqrt(max_single_window_area * window_aspect_ratio) + window_gap_y * 1.05 # allow some wall area above/below
|
931
966
|
min_window_width = Math.sqrt(min_single_window_area / window_aspect_ratio) * 1.05 # allow some wall area to the left/right
|
932
967
|
|
933
968
|
# Calculate available area for each wall, facade
|
@@ -939,9 +974,8 @@ class Geometry
|
|
939
974
|
if not surface_avail_area.include? surface
|
940
975
|
surface_avail_area[surface] = 0
|
941
976
|
end
|
942
|
-
next if surface.subSurfaces.size > 0
|
943
977
|
|
944
|
-
area = get_wall_area_for_windows(surface,
|
978
|
+
area = get_wall_area_for_windows(surface, min_average_ceiling_height_for_window, min_window_width, runner)
|
945
979
|
surface_avail_area[surface] += area
|
946
980
|
facade_avail_area[facade] += area
|
947
981
|
end
|
@@ -968,69 +1002,124 @@ class Geometry
|
|
968
1002
|
else
|
969
1003
|
target_facade_areas[facade] += window_areas[facade]
|
970
1004
|
end
|
1005
|
+
end
|
971
1006
|
|
972
|
-
|
973
|
-
|
974
|
-
if target_facade_areas[facade] < min_single_window_area
|
975
|
-
# If the total window area for the facade is less than the minimum window area,
|
976
|
-
# set all of the window area to the surface with the greatest available wall area on any facade
|
977
|
-
surface = surface_avail_area.max_by { |k, v| v }[0]
|
978
|
-
next if get_facade_for_surface(surface) == facade
|
979
|
-
next if surface_avail_area[surface] == facade_avail_area[facade]
|
980
|
-
|
981
|
-
surface_window_area[surface] += target_facade_areas[facade]
|
982
|
-
|
983
|
-
new_facade = get_facade_for_surface(surface)
|
984
|
-
area_moved = target_facade_areas[facade]
|
985
|
-
target_facade_areas[facade] = 0
|
986
|
-
target_facade_areas[new_facade] = surface_window_area[surface]
|
987
|
-
|
988
|
-
runner.registerWarning("The #{facade} facade window area (#{area_moved.round(2)} ft2) is less than the minimum window area allowed (#{min_single_window_area.round(2)} ft2), and has been added to the #{new_facade} facade.")
|
989
|
-
next
|
990
|
-
end
|
991
|
-
|
1007
|
+
facades.each do |facade|
|
992
1008
|
# Initial guess for wall of this facade
|
1009
|
+
next if facade_avail_area[facade] == 0
|
1010
|
+
|
993
1011
|
wall_surfaces[facade].each do |surface|
|
994
1012
|
surface_window_area[surface] += surface_avail_area[surface] / facade_avail_area[facade] * target_facade_areas[facade]
|
995
1013
|
end
|
996
1014
|
|
997
1015
|
# If window area for a surface is less than the minimum window area,
|
998
1016
|
# set the window area to zero and proportionally redistribute to the
|
999
|
-
# other surfaces.
|
1000
|
-
|
1001
|
-
|
1017
|
+
# other surfaces on that facade and unit.
|
1018
|
+
|
1019
|
+
# Check wall surface areas (by unit/space)
|
1020
|
+
model.getBuildingUnits.each do |unit|
|
1021
|
+
wall_surfaces[facade].each_with_index do |surface, surface_num|
|
1022
|
+
next if surface_window_area[surface] == 0
|
1023
|
+
next unless unit.spaces.include? surface.space.get # surface belongs to this unit
|
1024
|
+
next unless surface_window_area[surface] < min_single_window_area
|
1025
|
+
|
1026
|
+
# Future surfaces are those that have not yet been compared to min_single_window_area
|
1027
|
+
future_surfaces_area = 0
|
1028
|
+
wall_surfaces[facade].each_with_index do |future_surface, future_surface_num|
|
1029
|
+
next if future_surface_num <= surface_num
|
1030
|
+
next unless unit.spaces.include? future_surface.space.get
|
1031
|
+
|
1032
|
+
future_surfaces_area += surface_avail_area[future_surface]
|
1033
|
+
end
|
1034
|
+
next if future_surfaces_area == 0
|
1002
1035
|
|
1003
|
-
|
1004
|
-
|
1036
|
+
removed_window_area = surface_window_area[surface]
|
1037
|
+
surface_window_area[surface] = 0
|
1005
1038
|
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
next if future_surface_num <= surface_num
|
1039
|
+
wall_surfaces[facade].each_with_index do |future_surface, future_surface_num|
|
1040
|
+
next if future_surface_num <= surface_num
|
1041
|
+
next unless unit.spaces.include? future_surface.space.get
|
1010
1042
|
|
1011
|
-
|
1043
|
+
surface_window_area[future_surface] += removed_window_area * surface_avail_area[future_surface] / future_surfaces_area
|
1044
|
+
end
|
1012
1045
|
end
|
1013
|
-
|
1046
|
+
end
|
1047
|
+
end
|
1014
1048
|
|
1015
|
-
|
1016
|
-
|
1049
|
+
# Calculate facade areas for each unit
|
1050
|
+
unit_facade_areas = {}
|
1051
|
+
unit_wall_surfaces = {}
|
1052
|
+
model.getBuildingUnits.each do |unit|
|
1053
|
+
unit_facade_areas[unit] = {}
|
1054
|
+
unit_wall_surfaces[unit] = {}
|
1055
|
+
facades.each do |facade|
|
1056
|
+
unit_facade_areas[unit][facade] = 0
|
1057
|
+
unit_wall_surfaces[unit][facade] = []
|
1058
|
+
wall_surfaces[facade].each do |surface|
|
1059
|
+
next unless unit.spaces.include? surface.space.get
|
1017
1060
|
|
1018
|
-
|
1061
|
+
unit_facade_areas[unit][facade] += surface_window_area[surface]
|
1062
|
+
unit_wall_surfaces[unit][facade] << surface
|
1019
1063
|
end
|
1020
1064
|
end
|
1065
|
+
end
|
1021
1066
|
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1067
|
+
# if the sum of the window areas on the facade are < minimum, move to different facade
|
1068
|
+
facades.each do |facade|
|
1069
|
+
model.getBuildingUnits.each do |unit|
|
1070
|
+
next if unit_facade_areas[unit][facade] == 0
|
1071
|
+
next unless unit_facade_areas[unit][facade] < min_single_window_area
|
1072
|
+
|
1073
|
+
new_facade = unit_facade_areas[unit].max_by { |k, v| v }[0] # move to facade with largest window area
|
1074
|
+
next if new_facade == facade # can't move to same facade
|
1075
|
+
next if unit_facade_areas[unit][new_facade] <= unit_facade_areas[unit][facade] # only move to facade with >= window area
|
1076
|
+
|
1077
|
+
area_moved = unit_facade_areas[unit][facade]
|
1078
|
+
unit_facade_areas[unit][facade] = 0
|
1079
|
+
wall_surfaces[facade].each do |surface|
|
1080
|
+
next unless unit.spaces.include? surface.space.get # surface is in this unit
|
1081
|
+
|
1082
|
+
surface_window_area[surface] = 0
|
1083
|
+
end
|
1084
|
+
|
1085
|
+
unit_facade_areas[unit][new_facade] += area_moved
|
1086
|
+
sum_window_area = 0
|
1087
|
+
wall_surfaces[new_facade].each do |surface|
|
1088
|
+
next unless unit.spaces.include? surface.space.get # surface is in this unit
|
1089
|
+
|
1090
|
+
sum_window_area += UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2')
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
wall_surfaces[new_facade].each do |surface|
|
1094
|
+
next unless unit.spaces.include? surface.space.get # surface is in this unit
|
1095
|
+
|
1096
|
+
split_window_area = area_moved * UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2') / sum_window_area
|
1097
|
+
surface_window_area[surface] += split_window_area
|
1098
|
+
end
|
1099
|
+
|
1100
|
+
runner.registerWarning("The #{facade} facade window area (#{area_moved.round(2)} ft2) is less than the minimum window area allowed (#{min_single_window_area.round(2)} ft2), and has been added to the #{new_facade} facade.")
|
1028
1101
|
end
|
1029
|
-
|
1030
|
-
next if target_facade_areas[facade] < sum_window_area # for cases where window area was added from different facade
|
1102
|
+
end
|
1031
1103
|
|
1032
|
-
|
1033
|
-
|
1104
|
+
facades.each do |facade|
|
1105
|
+
model.getBuildingUnits.each do |unit|
|
1106
|
+
# Because the above process is calculated based on the order of surfaces, it's possible
|
1107
|
+
# that we have less area for this facade than we should. If so, redistribute proportionally
|
1108
|
+
# to all surfaces that have window area.
|
1109
|
+
sum_window_area = 0
|
1110
|
+
wall_surfaces[facade].each do |surface|
|
1111
|
+
next unless unit.spaces.include? surface.space.get
|
1112
|
+
|
1113
|
+
sum_window_area += surface_window_area[surface]
|
1114
|
+
end
|
1115
|
+
next if sum_window_area == 0
|
1116
|
+
next if unit_facade_areas[unit][facade] < sum_window_area # for cases where window area was added from different facade
|
1117
|
+
|
1118
|
+
wall_surfaces[facade].each do |surface|
|
1119
|
+
next unless unit.spaces.include? surface.space.get
|
1120
|
+
|
1121
|
+
surface_window_area[surface] += surface_window_area[surface] / sum_window_area * (unit_facade_areas[unit][facade] - sum_window_area)
|
1122
|
+
end
|
1034
1123
|
end
|
1035
1124
|
end
|
1036
1125
|
|
@@ -1039,7 +1128,7 @@ class Geometry
|
|
1039
1128
|
facade_win_area = 0
|
1040
1129
|
wall_surfaces[facade].each do |surface|
|
1041
1130
|
next if surface_window_area[surface] == 0
|
1042
|
-
if not add_windows_to_wall(surface, surface_window_area[surface], window_gap_y, window_gap_x, window_aspect_ratio, max_single_window_area, facade,
|
1131
|
+
if not add_windows_to_wall(surface, surface_window_area[surface], window_gap_y, window_gap_x, window_aspect_ratio, max_single_window_area, facade, model, runner)
|
1043
1132
|
return false
|
1044
1133
|
end
|
1045
1134
|
|
@@ -1115,10 +1204,6 @@ class Geometry
|
|
1115
1204
|
sub_surface.setName("#{surface.name} - Skylight")
|
1116
1205
|
sub_surface.setSurface(surface)
|
1117
1206
|
|
1118
|
-
if not constructions[facade].nil?
|
1119
|
-
sub_surface.setConstruction(constructions[facade])
|
1120
|
-
end
|
1121
|
-
|
1122
1207
|
tot_sky_area += skylight_area
|
1123
1208
|
end
|
1124
1209
|
end
|
@@ -1130,7 +1215,12 @@ class Geometry
|
|
1130
1215
|
return true
|
1131
1216
|
end
|
1132
1217
|
|
1133
|
-
def self.get_wall_area_for_windows(surface,
|
1218
|
+
def self.get_wall_area_for_windows(surface, min_average_ceiling_height_for_window, min_window_width, runner)
|
1219
|
+
# Skip surfaces with doors
|
1220
|
+
if surface.subSurfaces.size > 0
|
1221
|
+
return 0.0
|
1222
|
+
end
|
1223
|
+
|
1134
1224
|
# Only allow on gable and rectangular walls
|
1135
1225
|
if not (is_rectangular_wall(surface) || is_gable_wall(surface))
|
1136
1226
|
return 0.0
|
@@ -1142,22 +1232,22 @@ class Geometry
|
|
1142
1232
|
end
|
1143
1233
|
|
1144
1234
|
# Wall too short?
|
1145
|
-
if
|
1235
|
+
if min_average_ceiling_height_for_window > get_surface_height(surface)
|
1146
1236
|
return 0.0
|
1147
1237
|
end
|
1148
1238
|
|
1149
1239
|
# Gable too short?
|
1150
1240
|
# TODO: super crude safety factor of 1.5
|
1151
|
-
if is_gable_wall(surface) && (
|
1241
|
+
if is_gable_wall(surface) && (min_average_ceiling_height_for_window > get_surface_height(surface) / 1.5)
|
1152
1242
|
return 0.0
|
1153
1243
|
end
|
1154
1244
|
|
1155
1245
|
return UnitConversions.convert(surface.grossArea, 'm^2', 'ft^2')
|
1156
1246
|
end
|
1157
1247
|
|
1158
|
-
def self.add_windows_to_wall(surface, window_area, window_gap_y, window_gap_x, window_aspect_ratio, max_single_window_area, facade,
|
1248
|
+
def self.add_windows_to_wall(surface, window_area, window_gap_y, window_gap_x, window_aspect_ratio, max_single_window_area, facade, model, runner)
|
1159
1249
|
wall_width = get_surface_length(surface)
|
1160
|
-
|
1250
|
+
average_ceiling_height = get_surface_height(surface)
|
1161
1251
|
|
1162
1252
|
# Calculate number of windows needed
|
1163
1253
|
num_windows = (window_area / max_single_window_area).ceil
|
@@ -1175,7 +1265,7 @@ class Geometry
|
|
1175
1265
|
end
|
1176
1266
|
|
1177
1267
|
# Position window from top of surface
|
1178
|
-
win_top =
|
1268
|
+
win_top = average_ceiling_height - window_gap_y
|
1179
1269
|
if is_gable_wall(surface)
|
1180
1270
|
# For gable surfaces, position windows from bottom of surface so they fit
|
1181
1271
|
win_top = window_height + window_gap_y
|
@@ -1192,20 +1282,20 @@ class Geometry
|
|
1192
1282
|
if not ((i == num_window_groups) && (num_windows % 2 == 1))
|
1193
1283
|
# Two windows in group
|
1194
1284
|
win_num += 1
|
1195
|
-
add_window_to_wall(surface, window_width, window_height, group_cx - window_width / 2.0 - window_gap_x / 2.0, group_cy, win_num, facade,
|
1285
|
+
add_window_to_wall(surface, window_width, window_height, group_cx - window_width / 2.0 - window_gap_x / 2.0, group_cy, win_num, facade, model, runner)
|
1196
1286
|
win_num += 1
|
1197
|
-
add_window_to_wall(surface, window_width, window_height, group_cx + window_width / 2.0 + window_gap_x / 2.0, group_cy, win_num, facade,
|
1287
|
+
add_window_to_wall(surface, window_width, window_height, group_cx + window_width / 2.0 + window_gap_x / 2.0, group_cy, win_num, facade, model, runner)
|
1198
1288
|
else
|
1199
1289
|
# One window in group
|
1200
1290
|
win_num += 1
|
1201
|
-
add_window_to_wall(surface, window_width, window_height, group_cx, group_cy, win_num, facade,
|
1291
|
+
add_window_to_wall(surface, window_width, window_height, group_cx, group_cy, win_num, facade, model, runner)
|
1202
1292
|
end
|
1203
1293
|
end
|
1204
1294
|
|
1205
1295
|
return true
|
1206
1296
|
end
|
1207
1297
|
|
1208
|
-
def self.add_window_to_wall(surface, win_width, win_height, win_center_x, win_center_y, win_num, facade,
|
1298
|
+
def self.add_window_to_wall(surface, win_width, win_height, win_center_x, win_center_y, win_num, facade, model, runner)
|
1209
1299
|
# Create window vertices in relative coordinates, ft
|
1210
1300
|
upperleft = [win_center_x - win_width / 2.0, win_center_y + win_height / 2.0]
|
1211
1301
|
upperright = [win_center_x + win_width / 2.0, win_center_y + win_height / 2.0]
|
@@ -1246,9 +1336,6 @@ class Geometry
|
|
1246
1336
|
sub_surface.setName("#{surface.name} - Window #{win_num}")
|
1247
1337
|
sub_surface.setSurface(surface)
|
1248
1338
|
sub_surface.setSubSurfaceType('FixedWindow')
|
1249
|
-
if not constructions[facade].nil?
|
1250
|
-
sub_surface.setConstruction(constructions[facade])
|
1251
|
-
end
|
1252
1339
|
end
|
1253
1340
|
|
1254
1341
|
def self.get_conditioned_spaces(spaces)
|
@@ -1310,24 +1397,6 @@ class Geometry
|
|
1310
1397
|
model:,
|
1311
1398
|
door_area:,
|
1312
1399
|
**remainder)
|
1313
|
-
construction = nil
|
1314
|
-
warn_msg = nil
|
1315
|
-
model.getSubSurfaces.each do |sub_surface|
|
1316
|
-
next if sub_surface.subSurfaceType.downcase != 'door'
|
1317
|
-
|
1318
|
-
if sub_surface.construction.is_initialized
|
1319
|
-
if not construction.nil?
|
1320
|
-
warn_msg = 'Multiple constructions found. An arbitrary construction may be assigned to new door(s).'
|
1321
|
-
end
|
1322
|
-
construction = sub_surface.construction.get
|
1323
|
-
end
|
1324
|
-
runner.registerInfo("Removed door(s) from #{sub_surface.surface.get.name}.")
|
1325
|
-
sub_surface.remove
|
1326
|
-
end
|
1327
|
-
if not warn_msg.nil?
|
1328
|
-
runner.registerWarning(warn_msg)
|
1329
|
-
end
|
1330
|
-
|
1331
1400
|
# error checking
|
1332
1401
|
if door_area < 0
|
1333
1402
|
runner.registerError('Invalid door area.')
|
@@ -1349,8 +1418,8 @@ class Geometry
|
|
1349
1418
|
next if space_is_below_grade(space)
|
1350
1419
|
|
1351
1420
|
space.surfaces.each do |surface|
|
1352
|
-
next
|
1353
|
-
next
|
1421
|
+
next unless get_facade_for_surface(surface) == Constants.FacadeFront
|
1422
|
+
next unless (surface.outsideBoundaryCondition.downcase == 'outdoors') || (surface.outsideBoundaryCondition.downcase == 'adiabatic')
|
1354
1423
|
next if (90 - surface.tilt * 180 / Math::PI).abs > 0.01 # Not a vertical wall
|
1355
1424
|
|
1356
1425
|
avail_walls << surface
|
@@ -1374,45 +1443,6 @@ class Geometry
|
|
1374
1443
|
end
|
1375
1444
|
end
|
1376
1445
|
|
1377
|
-
# Get all corridor walls
|
1378
|
-
corridor_walls = []
|
1379
|
-
get_conditioned_spaces(model.getSpaces).each do |space|
|
1380
|
-
space.surfaces.each do |surface|
|
1381
|
-
next unless surface.surfaceType.downcase == 'wall'
|
1382
|
-
next unless surface.outsideBoundaryCondition.downcase == 'adiabatic'
|
1383
|
-
|
1384
|
-
model.getSpaces.each do |potential_corridor_space|
|
1385
|
-
next unless potential_corridor_space.spaceType.get.standardsSpaceType.get == HPXML::LocationOtherHousingUnit
|
1386
|
-
|
1387
|
-
potential_corridor_space.surfaces.each do |potential_corridor_surface|
|
1388
|
-
next unless surface.reverseEqualVertices(potential_corridor_surface)
|
1389
|
-
|
1390
|
-
corridor_walls << potential_corridor_surface
|
1391
|
-
end
|
1392
|
-
end
|
1393
|
-
end
|
1394
|
-
end
|
1395
|
-
|
1396
|
-
# Get subset of corridor walls on lowest story
|
1397
|
-
min_story_corridor_walls = []
|
1398
|
-
min_story_corridor_wall_minz = 99999
|
1399
|
-
corridor_walls.each do |corridor_wall|
|
1400
|
-
zvalues = getSurfaceZValues([corridor_wall])
|
1401
|
-
minz = zvalues.min + corridor_wall.space.get.zOrigin
|
1402
|
-
if minz < min_story_corridor_wall_minz
|
1403
|
-
min_story_corridor_walls.clear
|
1404
|
-
min_story_corridor_walls << corridor_wall
|
1405
|
-
min_story_corridor_wall_minz = minz
|
1406
|
-
elsif (minz - min_story_corridor_wall_minz).abs < 0.001
|
1407
|
-
min_story_corridor_walls << corridor_wall
|
1408
|
-
end
|
1409
|
-
end
|
1410
|
-
|
1411
|
-
# Prioritize corridor surfaces if available
|
1412
|
-
unless min_story_corridor_walls.size == 0
|
1413
|
-
min_story_avail_walls = min_story_corridor_walls
|
1414
|
-
end
|
1415
|
-
|
1416
1446
|
unit_has_door = true
|
1417
1447
|
if min_story_avail_walls.size == 0
|
1418
1448
|
runner.registerWarning('Could not find appropriate surface for the door. No door was added.')
|
@@ -1483,9 +1513,6 @@ class Geometry
|
|
1483
1513
|
door_sub_surface.setName("#{min_story_avail_wall.name} - Door")
|
1484
1514
|
door_sub_surface.setSurface(min_story_avail_wall)
|
1485
1515
|
door_sub_surface.setSubSurfaceType('Door')
|
1486
|
-
if not construction.nil?
|
1487
|
-
door_sub_surface.setConstruction(construction)
|
1488
|
-
end
|
1489
1516
|
|
1490
1517
|
break
|
1491
1518
|
end
|
@@ -1510,86 +1537,67 @@ class Geometry
|
|
1510
1537
|
|
1511
1538
|
def self.create_single_family_attached(runner:,
|
1512
1539
|
model:,
|
1513
|
-
|
1514
|
-
|
1540
|
+
geometry_unit_cfa:,
|
1541
|
+
geometry_average_ceiling_height:,
|
1515
1542
|
geometry_building_num_units:,
|
1516
|
-
|
1517
|
-
|
1518
|
-
geometry_horizontal_location:,
|
1519
|
-
geometry_corridor_position:,
|
1543
|
+
geometry_unit_num_floors_above_grade:,
|
1544
|
+
geometry_unit_aspect_ratio:,
|
1520
1545
|
geometry_foundation_type:,
|
1521
1546
|
geometry_foundation_height:,
|
1522
1547
|
geometry_rim_joist_height:,
|
1523
1548
|
geometry_attic_type:,
|
1524
1549
|
geometry_roof_type:,
|
1525
1550
|
geometry_roof_pitch:,
|
1551
|
+
geometry_unit_left_wall_is_adiabatic:,
|
1552
|
+
geometry_unit_right_wall_is_adiabatic:,
|
1553
|
+
geometry_unit_front_wall_is_adiabatic:,
|
1554
|
+
geometry_unit_back_wall_is_adiabatic:,
|
1526
1555
|
**remainder)
|
1527
1556
|
|
1528
|
-
cfa =
|
1529
|
-
|
1557
|
+
cfa = geometry_unit_cfa
|
1558
|
+
average_ceiling_height = geometry_average_ceiling_height
|
1530
1559
|
num_units = geometry_building_num_units.get
|
1531
|
-
num_floors =
|
1532
|
-
aspect_ratio =
|
1533
|
-
horizontal_location = geometry_horizontal_location.get
|
1534
|
-
corridor_position = geometry_corridor_position
|
1560
|
+
num_floors = geometry_unit_num_floors_above_grade
|
1561
|
+
aspect_ratio = geometry_unit_aspect_ratio
|
1535
1562
|
foundation_type = geometry_foundation_type
|
1536
1563
|
foundation_height = geometry_foundation_height
|
1537
1564
|
rim_joist_height = geometry_rim_joist_height
|
1538
1565
|
attic_type = geometry_attic_type
|
1566
|
+
if attic_type == HPXML::AtticTypeConditioned
|
1567
|
+
num_floors -= 1
|
1568
|
+
end
|
1539
1569
|
roof_type = geometry_roof_type
|
1540
1570
|
roof_pitch = geometry_roof_pitch
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
end
|
1546
|
-
offset = 0
|
1547
|
-
|
1548
|
-
num_units_actual = num_units
|
1549
|
-
num_floors_actual = num_floors
|
1550
|
-
if has_rear_units
|
1551
|
-
unit_width = num_units / 2
|
1552
|
-
else
|
1553
|
-
unit_width = num_units
|
1554
|
-
end
|
1571
|
+
adiabatic_left_wall = geometry_unit_left_wall_is_adiabatic
|
1572
|
+
adiabatic_right_wall = geometry_unit_right_wall_is_adiabatic
|
1573
|
+
adiabatic_front_wall = geometry_unit_front_wall_is_adiabatic
|
1574
|
+
adiabatic_back_wall = geometry_unit_back_wall_is_adiabatic
|
1555
1575
|
|
1556
1576
|
# error checking
|
1557
1577
|
if model.getSpaces.size > 0
|
1558
1578
|
runner.registerError('Starting model is not empty.')
|
1559
1579
|
return false
|
1560
1580
|
end
|
1561
|
-
if foundation_type.downcase.include?('crawlspace') && ((foundation_height < 1.5) || (foundation_height > 5.0))
|
1562
|
-
runner.registerError('The crawlspace height can be set between 1.5 and 5 ft.')
|
1563
|
-
return false
|
1564
|
-
end
|
1565
|
-
if (num_units == 1) && has_rear_units
|
1566
|
-
runner.registerError("Specified building as having rear units, but didn't specify enough units.")
|
1567
|
-
return false
|
1568
|
-
end
|
1569
1581
|
if aspect_ratio < 0
|
1570
1582
|
runner.registerError('Invalid aspect ratio entered.')
|
1571
1583
|
return false
|
1572
1584
|
end
|
1573
|
-
if
|
1574
|
-
runner.registerError('
|
1585
|
+
if adiabatic_left_wall && adiabatic_right_wall && adiabatic_front_wall && adiabatic_back_wall
|
1586
|
+
runner.registerError('At least one wall must be set to non-adiabatic')
|
1575
1587
|
return false
|
1576
1588
|
end
|
1577
|
-
if
|
1578
|
-
runner.registerError('
|
1589
|
+
if foundation_type == HPXML::FoundationTypeAboveApartment
|
1590
|
+
runner.registerError('Single-family attached buildings cannot be above another unit')
|
1579
1591
|
return false
|
1580
1592
|
end
|
1581
|
-
if
|
1582
|
-
runner.registerError('
|
1593
|
+
if attic_type == HPXML::AtticTypeBelowApartment
|
1594
|
+
runner.registerError('Single-family attached buildings cannot be below another unit')
|
1583
1595
|
return false
|
1584
1596
|
end
|
1585
|
-
if (unit_width == 1) && (horizontal_location != 'None')
|
1586
|
-
runner.registerWarning("No #{horizontal_location} location exists, setting horizontal_location to 'None'")
|
1587
|
-
horizontal_location = 'None'
|
1588
|
-
end
|
1589
1597
|
|
1590
1598
|
# Convert to SI
|
1591
1599
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
1592
|
-
|
1600
|
+
average_ceiling_height = UnitConversions.convert(average_ceiling_height, 'ft', 'm')
|
1593
1601
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
1594
1602
|
rim_joist_height = UnitConversions.convert(rim_joist_height, 'ft', 'm')
|
1595
1603
|
|
@@ -1626,7 +1634,7 @@ class Geometry
|
|
1626
1634
|
|
1627
1635
|
# first floor front
|
1628
1636
|
living_spaces_front = []
|
1629
|
-
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon,
|
1637
|
+
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon, average_ceiling_height, model)
|
1630
1638
|
living_space = living_space.get
|
1631
1639
|
living_space.setName(HPXML::LocationLivingSpace)
|
1632
1640
|
living_space_type = OpenStudio::Model::SpaceType.new(model)
|
@@ -1637,20 +1645,16 @@ class Geometry
|
|
1637
1645
|
living_spaces_front << living_space
|
1638
1646
|
|
1639
1647
|
# Adiabatic surfaces for walls
|
1640
|
-
|
1641
|
-
|
1642
|
-
adb_facade = horz_hash[horizontal_location]
|
1643
|
-
if (has_rear_units == true)
|
1644
|
-
adb_facade += ['back']
|
1645
|
-
end
|
1648
|
+
adb_facade_hash = { 'left' => adiabatic_left_wall, 'right' => adiabatic_right_wall, 'front' => adiabatic_front_wall, 'back' => adiabatic_back_wall }
|
1649
|
+
adb_facades = adb_facade_hash.select { |_, v| v == true }.keys
|
1646
1650
|
|
1647
|
-
adiabatic_surf = adb_facade
|
1648
1651
|
# Make surfaces adiabatic
|
1649
1652
|
model.getSpaces.each do |space|
|
1650
1653
|
space.surfaces.each do |surface|
|
1651
1654
|
os_facade = get_facade_for_surface(surface)
|
1652
1655
|
next unless surface.surfaceType == 'Wall'
|
1653
|
-
next unless
|
1656
|
+
next unless adb_facades.include? os_facade
|
1657
|
+
|
1654
1658
|
x_ft = UnitConversions.convert(x, 'm', 'ft')
|
1655
1659
|
max_x = getSurfaceXValues([surface]).max
|
1656
1660
|
min_x = getSurfaceXValues([surface]).min
|
@@ -1671,7 +1675,7 @@ class Geometry
|
|
1671
1675
|
new_living_space.setSpaceType(living_space_type)
|
1672
1676
|
|
1673
1677
|
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
1674
|
-
m[2, 3] =
|
1678
|
+
m[2, 3] = average_ceiling_height * (story - 1)
|
1675
1679
|
new_living_space.setTransformation(OpenStudio::Transformation.new(m))
|
1676
1680
|
new_living_space.setThermalZone(living_zone)
|
1677
1681
|
|
@@ -1679,8 +1683,8 @@ class Geometry
|
|
1679
1683
|
end
|
1680
1684
|
|
1681
1685
|
# attic
|
1682
|
-
if
|
1683
|
-
attic_space = get_attic_space(model, x, y,
|
1686
|
+
if attic_type != HPXML::AtticTypeFlatRoof
|
1687
|
+
attic_space = get_attic_space(model, x, y, average_ceiling_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height)
|
1684
1688
|
if attic_type == HPXML::AtticTypeConditioned
|
1685
1689
|
attic_space.setName("#{attic_type} space")
|
1686
1690
|
attic_space.setThermalZone(living_zone)
|
@@ -1707,13 +1711,19 @@ class Geometry
|
|
1707
1711
|
foundation_space.setYOrigin(0)
|
1708
1712
|
foundation_space.setZOrigin(0)
|
1709
1713
|
|
1710
|
-
if
|
1714
|
+
if [HPXML::FoundationTypeBasementConditioned,
|
1715
|
+
HPXML::FoundationTypeCrawlspaceConditioned].include? foundation_type
|
1716
|
+
if foundation_type == HPXML::FoundationTypeCrawlspaceConditioned
|
1717
|
+
foundation_space_name = HPXML::LocationCrawlspaceConditioned
|
1718
|
+
elsif foundation_type == HPXML::FoundationTypeBasementConditioned
|
1719
|
+
foundation_space_name = HPXML::LocationBasementConditioned
|
1720
|
+
end
|
1711
1721
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1712
|
-
foundation_space.setName(
|
1713
|
-
foundation_zone.setName(
|
1722
|
+
foundation_space.setName(foundation_type)
|
1723
|
+
foundation_zone.setName(foundation_type)
|
1714
1724
|
foundation_space.setThermalZone(foundation_zone)
|
1715
1725
|
foundation_space_type = OpenStudio::Model::SpaceType.new(model)
|
1716
|
-
foundation_space_type.setStandardsSpaceType(
|
1726
|
+
foundation_space_type.setStandardsSpaceType(foundation_space_name)
|
1717
1727
|
foundation_space.setSpaceType(foundation_space_type)
|
1718
1728
|
end
|
1719
1729
|
|
@@ -1733,7 +1743,9 @@ class Geometry
|
|
1733
1743
|
OpenStudio::Model.intersectSurfaces(spaces)
|
1734
1744
|
OpenStudio::Model.matchSurfaces(spaces)
|
1735
1745
|
|
1736
|
-
if [HPXML::FoundationTypeCrawlspaceVented,
|
1746
|
+
if [HPXML::FoundationTypeCrawlspaceVented,
|
1747
|
+
HPXML::FoundationTypeCrawlspaceUnvented,
|
1748
|
+
HPXML::FoundationTypeBasementUnconditioned].include? foundation_type
|
1737
1749
|
# create foundation zone
|
1738
1750
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
1739
1751
|
|
@@ -1759,12 +1771,13 @@ class Geometry
|
|
1759
1771
|
spaces = model.getSpaces
|
1760
1772
|
spaces.each do |space|
|
1761
1773
|
next unless get_space_floor_z(space) + UnitConversions.convert(space.zOrigin, 'm', 'ft') < 0
|
1774
|
+
|
1762
1775
|
surfaces = space.surfaces
|
1763
1776
|
surfaces.each do |surface|
|
1764
1777
|
next if surface.surfaceType.downcase != 'wall'
|
1765
1778
|
|
1766
1779
|
os_facade = get_facade_for_surface(surface)
|
1767
|
-
if
|
1780
|
+
if adb_facades.include? os_facade
|
1768
1781
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
1769
1782
|
elsif getSurfaceZValues([surface]).min < 0
|
1770
1783
|
surface.setOutsideBoundaryCondition('Foundation')
|
@@ -1786,15 +1799,11 @@ class Geometry
|
|
1786
1799
|
OpenStudio::Model.intersectSurfaces(spaces)
|
1787
1800
|
OpenStudio::Model.matchSurfaces(spaces)
|
1788
1801
|
|
1789
|
-
if [HPXML::AtticTypeVented, HPXML::AtticTypeUnvented].include?(attic_type)
|
1790
|
-
|
1791
|
-
|
1792
|
-
attic_space.remove
|
1793
|
-
end
|
1794
|
-
attic_space = get_attic_space(model, x, y, wall_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height, has_rear_units)
|
1795
|
-
else
|
1796
|
-
attic_space = make_one_space_from_multiple_spaces(model, attic_spaces)
|
1802
|
+
if [HPXML::AtticTypeVented, HPXML::AtticTypeUnvented].include?(attic_type)
|
1803
|
+
attic_spaces.each do |attic_space|
|
1804
|
+
attic_space.remove
|
1797
1805
|
end
|
1806
|
+
attic_space = get_attic_space(model, x, y, average_ceiling_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height)
|
1798
1807
|
|
1799
1808
|
# set these to the attic zone
|
1800
1809
|
if (attic_type == HPXML::AtticTypeVented) || (attic_type == HPXML::AtticTypeUnvented)
|
@@ -1820,7 +1829,8 @@ class Geometry
|
|
1820
1829
|
attic_space.surfaces.each do |surface|
|
1821
1830
|
os_facade = get_facade_for_surface(surface)
|
1822
1831
|
next unless surface.surfaceType == 'Wall'
|
1823
|
-
next unless
|
1832
|
+
next unless adb_facades.include? os_facade
|
1833
|
+
|
1824
1834
|
x_ft = UnitConversions.convert(x, 'm', 'ft')
|
1825
1835
|
max_x = getSurfaceXValues([surface]).max
|
1826
1836
|
min_x = getSurfaceXValues([surface]).min
|
@@ -1850,24 +1860,24 @@ class Geometry
|
|
1850
1860
|
return true
|
1851
1861
|
end
|
1852
1862
|
|
1853
|
-
def self.get_attic_space(model, x, y,
|
1863
|
+
def self.get_attic_space(model, x, y, average_ceiling_height, num_floors, num_units, roof_pitch, roof_type, rim_joist_height)
|
1854
1864
|
y_rear = 0
|
1855
1865
|
y_peak = -y / 2
|
1856
1866
|
y_tot = y
|
1857
1867
|
x_tot = x * num_units
|
1858
1868
|
|
1859
|
-
nw_point = OpenStudio::Point3d.new(0, 0,
|
1860
|
-
ne_point = OpenStudio::Point3d.new(x, 0,
|
1861
|
-
sw_point = OpenStudio::Point3d.new(0, -y,
|
1862
|
-
se_point = OpenStudio::Point3d.new(x, -y,
|
1869
|
+
nw_point = OpenStudio::Point3d.new(0, 0, average_ceiling_height * num_floors + rim_joist_height)
|
1870
|
+
ne_point = OpenStudio::Point3d.new(x, 0, average_ceiling_height * num_floors + rim_joist_height)
|
1871
|
+
sw_point = OpenStudio::Point3d.new(0, -y, average_ceiling_height * num_floors + rim_joist_height)
|
1872
|
+
se_point = OpenStudio::Point3d.new(x, -y, average_ceiling_height * num_floors + rim_joist_height)
|
1863
1873
|
attic_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
1864
1874
|
|
1865
1875
|
attic_height = (y_tot / 2.0) * roof_pitch + rim_joist_height # Roof always has same orientation
|
1866
1876
|
|
1867
1877
|
side_type = nil
|
1868
1878
|
if roof_type == 'gable'
|
1869
|
-
roof_w_point = OpenStudio::Point3d.new(0, y_peak,
|
1870
|
-
roof_e_point = OpenStudio::Point3d.new(x, y_peak,
|
1879
|
+
roof_w_point = OpenStudio::Point3d.new(0, y_peak, average_ceiling_height * num_floors + attic_height)
|
1880
|
+
roof_e_point = OpenStudio::Point3d.new(x, y_peak, average_ceiling_height * num_floors + attic_height)
|
1871
1881
|
polygon_w_roof = make_polygon(roof_w_point, roof_e_point, ne_point, nw_point)
|
1872
1882
|
polygon_e_roof = make_polygon(roof_e_point, roof_w_point, sw_point, se_point)
|
1873
1883
|
polygon_s_wall = make_polygon(roof_w_point, nw_point, sw_point)
|
@@ -1876,15 +1886,15 @@ class Geometry
|
|
1876
1886
|
elsif roof_type == 'hip'
|
1877
1887
|
if y > 0
|
1878
1888
|
if x <= (y + y_rear)
|
1879
|
-
roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear - x / 2.0,
|
1880
|
-
roof_s_point = OpenStudio::Point3d.new(x / 2.0, -y + x / 2.0,
|
1889
|
+
roof_n_point = OpenStudio::Point3d.new(x / 2.0, y_rear - x / 2.0, average_ceiling_height * num_floors + attic_height)
|
1890
|
+
roof_s_point = OpenStudio::Point3d.new(x / 2.0, -y + x / 2.0, average_ceiling_height * num_floors + attic_height)
|
1881
1891
|
polygon_w_roof = make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1882
1892
|
polygon_e_roof = make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1883
1893
|
polygon_s_wall = make_polygon(roof_s_point, sw_point, se_point)
|
1884
1894
|
polygon_n_wall = make_polygon(roof_n_point, ne_point, nw_point)
|
1885
1895
|
else
|
1886
|
-
roof_w_point = OpenStudio::Point3d.new((y + y_rear) / 2.0, (y_rear - y) / 2.0,
|
1887
|
-
roof_e_point = OpenStudio::Point3d.new(x - (y + y_rear) / 2.0, (y_rear - y) / 2.0,
|
1896
|
+
roof_w_point = OpenStudio::Point3d.new((y + y_rear) / 2.0, (y_rear - y) / 2.0, average_ceiling_height * num_floors + attic_height)
|
1897
|
+
roof_e_point = OpenStudio::Point3d.new(x - (y + y_rear) / 2.0, (y_rear - y) / 2.0, average_ceiling_height * num_floors + attic_height)
|
1888
1898
|
polygon_w_roof = make_polygon(roof_w_point, sw_point, se_point, roof_e_point)
|
1889
1899
|
polygon_e_roof = make_polygon(roof_e_point, ne_point, nw_point, roof_w_point)
|
1890
1900
|
polygon_s_wall = make_polygon(roof_e_point, se_point, ne_point)
|
@@ -1892,15 +1902,15 @@ class Geometry
|
|
1892
1902
|
end
|
1893
1903
|
else
|
1894
1904
|
if x <= y.abs
|
1895
|
-
roof_n_point = OpenStudio::Point3d.new(x / 2.0, -y - x / 2.0,
|
1896
|
-
roof_s_point = OpenStudio::Point3d.new(x / 2.0, x / 2.0,
|
1905
|
+
roof_n_point = OpenStudio::Point3d.new(x / 2.0, -y - x / 2.0, average_ceiling_height * num_floors + attic_height)
|
1906
|
+
roof_s_point = OpenStudio::Point3d.new(x / 2.0, x / 2.0, average_ceiling_height * num_floors + attic_height)
|
1897
1907
|
polygon_w_roof = make_polygon(roof_n_point, nw_point, sw_point, roof_s_point)
|
1898
1908
|
polygon_e_roof = make_polygon(roof_s_point, se_point, ne_point, roof_n_point)
|
1899
1909
|
polygon_s_wall = make_polygon(roof_s_point, sw_point, se_point)
|
1900
1910
|
polygon_n_wall = make_polygon(roof_n_point, ne_point, nw_point)
|
1901
1911
|
else
|
1902
|
-
roof_w_point = OpenStudio::Point3d.new(-y / 2.0, -y / 2.0,
|
1903
|
-
roof_e_point = OpenStudio::Point3d.new(x + y / 2.0, -y / 2.0,
|
1912
|
+
roof_w_point = OpenStudio::Point3d.new(-y / 2.0, -y / 2.0, average_ceiling_height * num_floors + attic_height)
|
1913
|
+
roof_e_point = OpenStudio::Point3d.new(x + y / 2.0, -y / 2.0, average_ceiling_height * num_floors + attic_height)
|
1904
1914
|
polygon_w_roof = make_polygon(roof_w_point, sw_point, se_point, roof_e_point)
|
1905
1915
|
polygon_e_roof = make_polygon(roof_e_point, ne_point, nw_point, roof_w_point)
|
1906
1916
|
polygon_s_wall = make_polygon(roof_e_point, se_point, ne_point)
|
@@ -1939,15 +1949,11 @@ class Geometry
|
|
1939
1949
|
|
1940
1950
|
def self.create_multifamily(runner:,
|
1941
1951
|
model:,
|
1942
|
-
|
1943
|
-
|
1952
|
+
geometry_unit_cfa:,
|
1953
|
+
geometry_average_ceiling_height:,
|
1944
1954
|
geometry_building_num_units:,
|
1945
|
-
|
1946
|
-
|
1947
|
-
geometry_level:,
|
1948
|
-
geometry_horizontal_location:,
|
1949
|
-
geometry_corridor_position:,
|
1950
|
-
geometry_corridor_width:,
|
1955
|
+
geometry_unit_num_floors_above_grade:,
|
1956
|
+
geometry_unit_aspect_ratio:,
|
1951
1957
|
geometry_inset_width:,
|
1952
1958
|
geometry_inset_depth:,
|
1953
1959
|
geometry_inset_position:,
|
@@ -1955,17 +1961,17 @@ class Geometry
|
|
1955
1961
|
geometry_foundation_type:,
|
1956
1962
|
geometry_foundation_height:,
|
1957
1963
|
geometry_rim_joist_height:,
|
1964
|
+
geometry_attic_type:,
|
1965
|
+
geometry_unit_left_wall_is_adiabatic:,
|
1966
|
+
geometry_unit_right_wall_is_adiabatic:,
|
1967
|
+
geometry_unit_front_wall_is_adiabatic:,
|
1968
|
+
geometry_unit_back_wall_is_adiabatic:,
|
1958
1969
|
**remainder)
|
1959
1970
|
|
1960
|
-
cfa =
|
1961
|
-
|
1971
|
+
cfa = geometry_unit_cfa
|
1972
|
+
average_ceiling_height = geometry_average_ceiling_height
|
1962
1973
|
num_units = geometry_building_num_units.get
|
1963
|
-
|
1964
|
-
aspect_ratio = geometry_aspect_ratio
|
1965
|
-
level = geometry_level.get
|
1966
|
-
horz_location = geometry_horizontal_location.get
|
1967
|
-
corridor_position = geometry_corridor_position
|
1968
|
-
corridor_width = geometry_corridor_width
|
1974
|
+
aspect_ratio = geometry_unit_aspect_ratio
|
1969
1975
|
inset_width = geometry_inset_width
|
1970
1976
|
inset_depth = geometry_inset_depth
|
1971
1977
|
inset_position = geometry_inset_position
|
@@ -1973,89 +1979,43 @@ class Geometry
|
|
1973
1979
|
foundation_type = geometry_foundation_type
|
1974
1980
|
foundation_height = geometry_foundation_height
|
1975
1981
|
rim_joist_height = geometry_rim_joist_height
|
1982
|
+
attic_type = geometry_attic_type
|
1983
|
+
adiabatic_left_wall = geometry_unit_left_wall_is_adiabatic
|
1984
|
+
adiabatic_right_wall = geometry_unit_right_wall_is_adiabatic
|
1985
|
+
adiabatic_front_wall = geometry_unit_front_wall_is_adiabatic
|
1986
|
+
adiabatic_back_wall = geometry_unit_back_wall_is_adiabatic
|
1976
1987
|
|
1977
|
-
if
|
1988
|
+
if foundation_type == HPXML::FoundationTypeAboveApartment
|
1978
1989
|
foundation_type = HPXML::LocationOtherHousingUnit
|
1979
1990
|
foundation_height = 0.0
|
1980
1991
|
rim_joist_height = 0.0
|
1981
1992
|
end
|
1982
|
-
|
1983
|
-
|
1984
|
-
num_units_per_floor_actual = num_units_per_floor
|
1985
|
-
above_ground_floors = num_floors
|
1986
|
-
|
1987
|
-
if (num_floors > 1) && (level != 'Bottom') && (foundation_height != 0.0)
|
1988
|
-
runner.registerWarning('Unit is not on the bottom floor, setting foundation height to 0.')
|
1989
|
-
foundation_height = 0.0
|
1990
|
-
end
|
1991
|
-
|
1992
|
-
if num_floors == 1
|
1993
|
-
level = 'Bottom'
|
1994
|
-
end
|
1995
|
-
|
1996
|
-
if (num_units_per_floor % 2 == 0) && ((corridor_position == 'Double-Loaded Interior') || (corridor_position == 'Double Exterior'))
|
1997
|
-
unit_depth = 2
|
1998
|
-
unit_width = num_units_per_floor / 2
|
1999
|
-
has_rear_units = true
|
2000
|
-
else
|
2001
|
-
unit_depth = 1
|
2002
|
-
unit_width = num_units_per_floor
|
2003
|
-
has_rear_units = false
|
1993
|
+
if attic_type == HPXML::AtticTypeBelowApartment
|
1994
|
+
attic_type = HPXML::LocationOtherHousingUnit
|
2004
1995
|
end
|
2005
1996
|
|
2006
|
-
#
|
1997
|
+
# Error checking
|
2007
1998
|
if model.getSpaces.size > 0
|
2008
1999
|
runner.registerError('Starting model is not empty.')
|
2009
2000
|
return false
|
2010
2001
|
end
|
2011
|
-
if foundation_type.downcase.include?('crawlspace') && ((foundation_height < 1.5) || (foundation_height > 5.0))
|
2012
|
-
runner.registerError('The crawlspace height can be set between 1.5 and 5 ft.')
|
2013
|
-
return false
|
2014
|
-
end
|
2015
|
-
if num_units % num_floors != 0
|
2016
|
-
runner.registerError("The number of units (#{num_units}) must be divisible by the number of floors (#{num_floors}).")
|
2017
|
-
return false
|
2018
|
-
end
|
2019
|
-
if !has_rear_units && ((corridor_position == 'Double-Loaded Interior') || (corridor_position == 'Double Exterior'))
|
2020
|
-
runner.registerWarning("Specified incompatible corridor; setting corridor position to 'Single Exterior (Front)'.")
|
2021
|
-
corridor_position = 'Single Exterior (Front)'
|
2022
|
-
end
|
2023
2002
|
if aspect_ratio < 0
|
2024
2003
|
runner.registerError('Invalid aspect ratio entered.')
|
2025
2004
|
return false
|
2026
2005
|
end
|
2027
|
-
if (corridor_width == 0) && (corridor_position != 'None')
|
2028
|
-
corridor_position = 'None'
|
2029
|
-
end
|
2030
|
-
if corridor_position == 'None'
|
2031
|
-
corridor_width = 0
|
2032
|
-
end
|
2033
|
-
if corridor_width < 0
|
2034
|
-
runner.registerError('Invalid corridor width entered.')
|
2035
|
-
return false
|
2036
|
-
end
|
2037
2006
|
if (balcony_depth > 0) && (inset_width * inset_depth == 0)
|
2038
2007
|
runner.registerWarning('Specified a balcony, but there is no inset.')
|
2039
2008
|
balcony_depth = 0
|
2040
2009
|
end
|
2041
|
-
if
|
2042
|
-
runner.
|
2043
|
-
horz_location = 'None'
|
2044
|
-
end
|
2045
|
-
if (unit_width > 1) && (horz_location == 'None')
|
2046
|
-
runner.registerError('Specified incompatible horizontal location for the corridor and unit configuration.')
|
2047
|
-
return false
|
2048
|
-
end
|
2049
|
-
if (unit_width < 3) && (horz_location == 'Middle')
|
2050
|
-
runner.registerError('No middle horizontal location exists.')
|
2010
|
+
if adiabatic_left_wall && adiabatic_right_wall && adiabatic_front_wall && adiabatic_back_wall
|
2011
|
+
runner.registerError('At least one wall must be set to non-adiabatic')
|
2051
2012
|
return false
|
2052
2013
|
end
|
2053
2014
|
|
2054
2015
|
# Convert to SI
|
2055
2016
|
cfa = UnitConversions.convert(cfa, 'ft^2', 'm^2')
|
2056
|
-
|
2017
|
+
average_ceiling_height = UnitConversions.convert(average_ceiling_height, 'ft', 'm')
|
2057
2018
|
foundation_height = UnitConversions.convert(foundation_height, 'ft', 'm')
|
2058
|
-
corridor_width = UnitConversions.convert(corridor_width, 'ft', 'm')
|
2059
2019
|
inset_width = UnitConversions.convert(inset_width, 'ft', 'm')
|
2060
2020
|
inset_depth = UnitConversions.convert(inset_depth, 'ft', 'm')
|
2061
2021
|
balcony_depth = UnitConversions.convert(balcony_depth, 'ft', 'm')
|
@@ -2066,10 +2026,6 @@ class Geometry
|
|
2066
2026
|
x = Math.sqrt(footprint / aspect_ratio)
|
2067
2027
|
y = footprint / x
|
2068
2028
|
|
2069
|
-
story_hash = { 'Bottom' => 0, 'Middle' => 1, 'Top' => num_floors - 1 }
|
2070
|
-
z = wall_height * story_hash[level]
|
2071
|
-
|
2072
|
-
foundation_corr_polygon = nil
|
2073
2029
|
foundation_front_polygon = nil
|
2074
2030
|
foundation_back_polygon = nil
|
2075
2031
|
|
@@ -2088,10 +2044,10 @@ class Geometry
|
|
2088
2044
|
living_polygon = make_polygon(sw_point, nw_point, ne_point, side_point, inset_point, front_point)
|
2089
2045
|
# unit balcony
|
2090
2046
|
if balcony_depth > 0
|
2091
|
-
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y,
|
2092
|
-
side_point = OpenStudio::Point3d.new(x, inset_depth - y,
|
2093
|
-
se_point = OpenStudio::Point3d.new(x, inset_depth - y - balcony_depth,
|
2094
|
-
front_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y - balcony_depth,
|
2047
|
+
inset_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y, average_ceiling_height + rim_joist_height)
|
2048
|
+
side_point = OpenStudio::Point3d.new(x, inset_depth - y, average_ceiling_height + rim_joist_height)
|
2049
|
+
se_point = OpenStudio::Point3d.new(x, inset_depth - y - balcony_depth, average_ceiling_height + rim_joist_height)
|
2050
|
+
front_point = OpenStudio::Point3d.new(x - inset_width, inset_depth - y - balcony_depth, average_ceiling_height + rim_joist_height)
|
2095
2051
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([front_point, se_point, side_point, inset_point]), model)
|
2096
2052
|
end
|
2097
2053
|
else
|
@@ -2102,10 +2058,10 @@ class Geometry
|
|
2102
2058
|
living_polygon = make_polygon(side_point, nw_point, ne_point, se_point, front_point, inset_point)
|
2103
2059
|
# unit balcony
|
2104
2060
|
if balcony_depth > 0
|
2105
|
-
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y,
|
2106
|
-
side_point = OpenStudio::Point3d.new(0, inset_depth - y,
|
2107
|
-
sw_point = OpenStudio::Point3d.new(0, inset_depth - y - balcony_depth,
|
2108
|
-
front_point = OpenStudio::Point3d.new(inset_width, inset_depth - y - balcony_depth,
|
2061
|
+
inset_point = OpenStudio::Point3d.new(inset_width, inset_depth - y, average_ceiling_height + rim_joist_height)
|
2062
|
+
side_point = OpenStudio::Point3d.new(0, inset_depth - y, average_ceiling_height + rim_joist_height)
|
2063
|
+
sw_point = OpenStudio::Point3d.new(0, inset_depth - y - balcony_depth, average_ceiling_height + rim_joist_height)
|
2064
|
+
front_point = OpenStudio::Point3d.new(inset_width, inset_depth - y - balcony_depth, average_ceiling_height + rim_joist_height)
|
2109
2065
|
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([front_point, sw_point, side_point, inset_point]), model)
|
2110
2066
|
end
|
2111
2067
|
end
|
@@ -2124,7 +2080,7 @@ class Geometry
|
|
2124
2080
|
|
2125
2081
|
# first floor front
|
2126
2082
|
living_spaces_front = []
|
2127
|
-
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon,
|
2083
|
+
living_space = OpenStudio::Model::Space::fromFloorPrint(living_polygon, average_ceiling_height, model)
|
2128
2084
|
living_space = living_space.get
|
2129
2085
|
living_space.setName(HPXML::LocationLivingSpace)
|
2130
2086
|
living_space_type = OpenStudio::Model::SpaceType.new(model)
|
@@ -2140,27 +2096,25 @@ class Geometry
|
|
2140
2096
|
end
|
2141
2097
|
living_spaces_front << living_space
|
2142
2098
|
|
2143
|
-
# Map
|
2144
|
-
|
2145
|
-
|
2146
|
-
adb_facade = horz_hash[horz_location]
|
2147
|
-
adb_level = level_hash[level]
|
2099
|
+
# Map surface facades to adiabatic walls
|
2100
|
+
adb_facade_hash = { 'left' => adiabatic_left_wall, 'right' => adiabatic_right_wall, 'front' => adiabatic_front_wall, 'back' => adiabatic_back_wall }
|
2101
|
+
adb_facades = adb_facade_hash.select { |_, v| v == true }.keys
|
2148
2102
|
|
2149
|
-
#
|
2150
|
-
|
2151
|
-
|
2103
|
+
# Adiabatic floor/ceiling
|
2104
|
+
adb_levels = []
|
2105
|
+
if attic_type == HPXML::LocationOtherHousingUnit
|
2106
|
+
adb_levels += ['RoofCeiling']
|
2152
2107
|
end
|
2153
|
-
if
|
2154
|
-
|
2108
|
+
if foundation_type == HPXML::LocationOtherHousingUnit
|
2109
|
+
adb_levels += ['Floor']
|
2155
2110
|
end
|
2156
2111
|
|
2157
|
-
adiabatic_surf = adb_facade + adb_level
|
2158
2112
|
# Make living space surfaces adiabatic
|
2159
2113
|
model.getSpaces.each do |space|
|
2160
2114
|
space.surfaces.each do |surface|
|
2161
2115
|
os_facade = get_facade_for_surface(surface)
|
2162
2116
|
if surface.surfaceType == 'Wall'
|
2163
|
-
if
|
2117
|
+
if adb_facades.include? os_facade
|
2164
2118
|
x_ft = UnitConversions.convert(x, 'm', 'ft')
|
2165
2119
|
max_x = getSurfaceXValues([surface]).max
|
2166
2120
|
min_x = getSurfaceXValues([surface]).min
|
@@ -2169,7 +2123,7 @@ class Geometry
|
|
2169
2123
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
2170
2124
|
end
|
2171
2125
|
else
|
2172
|
-
if (
|
2126
|
+
if (adb_levels.include? surface.surfaceType)
|
2173
2127
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
2174
2128
|
end
|
2175
2129
|
|
@@ -2177,69 +2131,10 @@ class Geometry
|
|
2177
2131
|
end
|
2178
2132
|
end
|
2179
2133
|
|
2180
|
-
if (corridor_position == 'Double-Loaded Interior')
|
2181
|
-
interior_corridor_width = corridor_width / 2 # Only half the corridor is attached to a unit
|
2182
|
-
# corridors
|
2183
|
-
if corridor_width > 0
|
2184
|
-
# create the prototype corridor
|
2185
|
-
nw_point = OpenStudio::Point3d.new(0, interior_corridor_width, rim_joist_height)
|
2186
|
-
ne_point = OpenStudio::Point3d.new(x, interior_corridor_width, rim_joist_height)
|
2187
|
-
sw_point = OpenStudio::Point3d.new(0, 0, rim_joist_height)
|
2188
|
-
se_point = OpenStudio::Point3d.new(x, 0, rim_joist_height)
|
2189
|
-
corr_polygon = make_polygon(sw_point, nw_point, ne_point, se_point)
|
2190
|
-
|
2191
|
-
if (foundation_height > 0) && foundation_corr_polygon.nil?
|
2192
|
-
foundation_corr_polygon = corr_polygon
|
2193
|
-
end
|
2194
|
-
|
2195
|
-
# create corridor zone
|
2196
|
-
corridor_zone = OpenStudio::Model::ThermalZone.new(model)
|
2197
|
-
corridor_zone.setName(HPXML::LocationOtherHousingUnit)
|
2198
|
-
corridor_space = OpenStudio::Model::Space::fromFloorPrint(corr_polygon, wall_height, model)
|
2199
|
-
corridor_space = corridor_space.get
|
2200
|
-
corridor_space.setName(HPXML::LocationOtherHousingUnit)
|
2201
|
-
corridor_space_type = OpenStudio::Model::SpaceType.new(model)
|
2202
|
-
corridor_space_type.setStandardsSpaceType(HPXML::LocationOtherHousingUnit)
|
2203
|
-
|
2204
|
-
corridor_space.setSpaceType(corridor_space_type)
|
2205
|
-
corridor_space.setThermalZone(corridor_zone)
|
2206
|
-
end
|
2207
|
-
|
2208
|
-
elsif (corridor_position == 'Double Exterior') || (corridor_position == 'Single Exterior (Front)')
|
2209
|
-
interior_corridor_width = 0
|
2210
|
-
# front access
|
2211
|
-
nw_point = OpenStudio::Point3d.new(0, -y, wall_height + rim_joist_height)
|
2212
|
-
sw_point = OpenStudio::Point3d.new(0, -y - corridor_width, wall_height + rim_joist_height)
|
2213
|
-
ne_point = OpenStudio::Point3d.new(x, -y, wall_height + rim_joist_height)
|
2214
|
-
se_point = OpenStudio::Point3d.new(x, -y - corridor_width, wall_height + rim_joist_height)
|
2215
|
-
|
2216
|
-
shading_surface = OpenStudio::Model::ShadingSurface.new(OpenStudio::Point3dVector.new([sw_point, se_point, ne_point, nw_point]), model)
|
2217
|
-
shading_surface_group = OpenStudio::Model::ShadingSurfaceGroup.new(model)
|
2218
|
-
shading_surface.setShadingSurfaceGroup(shading_surface_group)
|
2219
|
-
shading_surface.setName('Corridor shading')
|
2220
|
-
end
|
2221
|
-
|
2222
2134
|
# foundation
|
2223
2135
|
if foundation_height > 0
|
2224
2136
|
foundation_spaces = []
|
2225
2137
|
|
2226
|
-
# foundation corridor
|
2227
|
-
foundation_corridor_space = nil
|
2228
|
-
if (corridor_width > 0) && (corridor_position == 'Double-Loaded Interior')
|
2229
|
-
foundation_corridor_space = OpenStudio::Model::Space::fromFloorPrint(foundation_corr_polygon, foundation_height, model)
|
2230
|
-
foundation_corridor_space = foundation_corridor_space.get
|
2231
|
-
m = initialize_transformation_matrix(OpenStudio::Matrix.new(4, 4, 0))
|
2232
|
-
m[2, 3] = foundation_height + rim_joist_height
|
2233
|
-
foundation_corridor_space.changeTransformation(OpenStudio::Transformation.new(m))
|
2234
|
-
foundation_corridor_space.setXOrigin(0)
|
2235
|
-
foundation_corridor_space.setYOrigin(0)
|
2236
|
-
foundation_corridor_space.setZOrigin(0)
|
2237
|
-
foundation_spaces << foundation_corridor_space
|
2238
|
-
|
2239
|
-
# Rim Joist
|
2240
|
-
add_rim_joist(model, foundation_corr_polygon, foundation_corridor_space, rim_joist_height, 0)
|
2241
|
-
end
|
2242
|
-
|
2243
2138
|
# foundation front
|
2244
2139
|
foundation_space_front = []
|
2245
2140
|
foundation_space = OpenStudio::Model::Space::fromFloorPrint(foundation_front_polygon, foundation_height, model)
|
@@ -2254,8 +2149,11 @@ class Geometry
|
|
2254
2149
|
foundation_space_front << foundation_space
|
2255
2150
|
foundation_spaces << foundation_space
|
2256
2151
|
|
2257
|
-
foundation_spaces.each do |foundation_space|
|
2258
|
-
next unless [HPXML::FoundationTypeCrawlspaceVented,
|
2152
|
+
foundation_spaces.each do |foundation_space|
|
2153
|
+
next unless [HPXML::FoundationTypeCrawlspaceVented,
|
2154
|
+
HPXML::FoundationTypeCrawlspaceUnvented,
|
2155
|
+
HPXML::FoundationTypeBasementUnconditioned].include?(foundation_type)
|
2156
|
+
|
2259
2157
|
# create foundation zone
|
2260
2158
|
foundation_zone = OpenStudio::Model::ThermalZone.new(model)
|
2261
2159
|
|
@@ -2292,14 +2190,13 @@ class Geometry
|
|
2292
2190
|
# Foundation space boundary conditions
|
2293
2191
|
model.getSpaces.each do |space|
|
2294
2192
|
next unless get_space_floor_z(space) + UnitConversions.convert(space.zOrigin, 'm', 'ft') < 0 # Foundation
|
2295
|
-
next if space.name.get.include? 'corridor'
|
2296
2193
|
|
2297
2194
|
surfaces = space.surfaces
|
2298
2195
|
surfaces.each do |surface|
|
2299
2196
|
next unless surface.surfaceType.downcase == 'wall'
|
2300
2197
|
|
2301
2198
|
os_facade = get_facade_for_surface(surface)
|
2302
|
-
if
|
2199
|
+
if adb_facades.include?(os_facade) && (os_facade != 'RoofCeiling') && (os_facade != 'Floor')
|
2303
2200
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
2304
2201
|
elsif getSurfaceZValues([surface]).min < 0
|
2305
2202
|
surface.setOutsideBoundaryCondition('Foundation')
|
@@ -2308,37 +2205,6 @@ class Geometry
|
|
2308
2205
|
end
|
2309
2206
|
end
|
2310
2207
|
end
|
2311
|
-
|
2312
|
-
# Foundation corridor space boundary conditions
|
2313
|
-
foundation_corr_obcs = []
|
2314
|
-
if not foundation_corridor_space.nil?
|
2315
|
-
foundation_corridor_space.surfaces.each do |surface|
|
2316
|
-
next unless surface.surfaceType.downcase == 'wall'
|
2317
|
-
|
2318
|
-
os_facade = get_facade_for_surface(surface)
|
2319
|
-
if adb_facade.include? os_facade
|
2320
|
-
surface.setOutsideBoundaryCondition('Adiabatic')
|
2321
|
-
else
|
2322
|
-
surface.setOutsideBoundaryCondition('Foundation')
|
2323
|
-
end
|
2324
|
-
end
|
2325
|
-
end
|
2326
|
-
end
|
2327
|
-
|
2328
|
-
# Corridor space boundary conditions
|
2329
|
-
model.getSpaces.each do |space|
|
2330
|
-
next unless is_corridor(space)
|
2331
|
-
|
2332
|
-
space.surfaces.each do |surface|
|
2333
|
-
os_facade = get_facade_for_surface(surface)
|
2334
|
-
if adb_facade.include? os_facade
|
2335
|
-
surface.setOutsideBoundaryCondition('Adiabatic')
|
2336
|
-
end
|
2337
|
-
|
2338
|
-
if (adb_level.include? surface.surfaceType)
|
2339
|
-
surface.setOutsideBoundaryCondition('Adiabatic')
|
2340
|
-
end
|
2341
|
-
end
|
2342
2208
|
end
|
2343
2209
|
|
2344
2210
|
# put all of the spaces in the model into a vector
|
@@ -2351,29 +2217,6 @@ class Geometry
|
|
2351
2217
|
OpenStudio::Model.intersectSurfaces(spaces)
|
2352
2218
|
OpenStudio::Model.matchSurfaces(spaces)
|
2353
2219
|
|
2354
|
-
# make corridor floors adiabatic if no exterior walls to avoid exposed perimeter error
|
2355
|
-
exterior_obcs = ['Foundation', 'Ground', 'Outdoors']
|
2356
|
-
obcs_hash = {}
|
2357
|
-
model.getSpaces.each do |space|
|
2358
|
-
next unless space.name.get.include? 'corridor' # corridor and foundation corridor spaces
|
2359
|
-
|
2360
|
-
space_name = space.name
|
2361
|
-
obcs_hash[space_name] = []
|
2362
|
-
space.surfaces.each do |surface|
|
2363
|
-
next unless surface.surfaceType.downcase == 'wall'
|
2364
|
-
|
2365
|
-
obcs_hash[space_name] << surface.outsideBoundaryCondition
|
2366
|
-
end
|
2367
|
-
|
2368
|
-
next if (obcs_hash[space_name] & exterior_obcs).any?
|
2369
|
-
|
2370
|
-
space.surfaces.each do |surface|
|
2371
|
-
next unless surface.surfaceType.downcase == 'floor'
|
2372
|
-
|
2373
|
-
surface.setOutsideBoundaryCondition('Adiabatic')
|
2374
|
-
end
|
2375
|
-
end
|
2376
|
-
|
2377
2220
|
# set foundation outside boundary condition to Kiva "foundation"
|
2378
2221
|
model.getSurfaces.each do |surface|
|
2379
2222
|
next if surface.outsideBoundaryCondition.downcase != 'ground'
|
@@ -2381,25 +2224,9 @@ class Geometry
|
|
2381
2224
|
surface.setOutsideBoundaryCondition('Foundation')
|
2382
2225
|
end
|
2383
2226
|
|
2384
|
-
# set adjacent corridor walls to adiabatic
|
2385
|
-
model.getSpaces.each do |space|
|
2386
|
-
next unless is_corridor(space)
|
2387
|
-
|
2388
|
-
space.surfaces.each do |surface|
|
2389
|
-
if surface.adjacentSurface.is_initialized && (surface.surfaceType.downcase == 'wall')
|
2390
|
-
surface.adjacentSurface.get.setOutsideBoundaryCondition('Adiabatic')
|
2391
|
-
surface.setOutsideBoundaryCondition('Adiabatic')
|
2392
|
-
end
|
2393
|
-
end
|
2394
|
-
end
|
2395
|
-
|
2396
2227
|
return true
|
2397
2228
|
end
|
2398
2229
|
|
2399
|
-
def self.is_corridor(space_or_zone)
|
2400
|
-
return space_or_zone_is_of_type(space_or_zone, HPXML::LocationOtherHousingUnit)
|
2401
|
-
end
|
2402
|
-
|
2403
2230
|
# Returns true if space is either fully or partially below grade
|
2404
2231
|
def self.space_is_below_grade(space)
|
2405
2232
|
space.surfaces.each do |surface|
|
@@ -2450,7 +2277,12 @@ class Geometry
|
|
2450
2277
|
floor_vertices.each_with_index do |fv1, fidx|
|
2451
2278
|
fv2 = floor_vertices[fidx - 1]
|
2452
2279
|
# Wall within floor edge?
|
2453
|
-
next unless is_point_between([wv1.x, wv1.y, wv1.z + wall_surface.space.get.zOrigin],
|
2280
|
+
next unless (is_point_between([wv1.x, wv1.y, wv1.z + wall_surface.space.get.zOrigin],
|
2281
|
+
[fv1.x, fv1.y, fv1.z + floor_surface.space.get.zOrigin],
|
2282
|
+
[fv2.x, fv2.y, fv2.z + floor_surface.space.get.zOrigin]) \
|
2283
|
+
&& is_point_between([wv2.x, wv2.y, wv2.z + wall_surface.space.get.zOrigin],
|
2284
|
+
[fv1.x, fv1.y, fv1.z + floor_surface.space.get.zOrigin],
|
2285
|
+
[fv2.x, fv2.y, fv2.z + floor_surface.space.get.zOrigin]))
|
2454
2286
|
|
2455
2287
|
if not adjacent_wall_surfaces.include? wall_surface
|
2456
2288
|
adjacent_wall_surfaces << wall_surface
|
@@ -2609,7 +2441,7 @@ class Geometry
|
|
2609
2441
|
xValueArray = []
|
2610
2442
|
surfaceArray.each do |surface|
|
2611
2443
|
surface.vertices.each do |vertex|
|
2612
|
-
xValueArray << UnitConversions.convert(vertex.x, 'm', 'ft')
|
2444
|
+
xValueArray << UnitConversions.convert(vertex.x, 'm', 'ft').round(5)
|
2613
2445
|
end
|
2614
2446
|
end
|
2615
2447
|
return xValueArray
|
@@ -2620,7 +2452,7 @@ class Geometry
|
|
2620
2452
|
yValueArray = []
|
2621
2453
|
surfaceArray.each do |surface|
|
2622
2454
|
surface.vertices.each do |vertex|
|
2623
|
-
yValueArray << UnitConversions.convert(vertex.y, 'm', 'ft')
|
2455
|
+
yValueArray << UnitConversions.convert(vertex.y, 'm', 'ft').round(5)
|
2624
2456
|
end
|
2625
2457
|
end
|
2626
2458
|
return yValueArray
|
@@ -2672,6 +2504,7 @@ class Geometry
|
|
2672
2504
|
def self.surface_is_rim_joist(surface, height)
|
2673
2505
|
return false unless (height - Geometry.get_surface_height(surface)).abs < 0.00001
|
2674
2506
|
return false unless Geometry.getSurfaceZValues([surface]).max > 0
|
2507
|
+
|
2675
2508
|
return true
|
2676
2509
|
end
|
2677
2510
|
end
|