Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create Rule_11-10.md #1373

Open
wants to merge 25 commits into
base: develop
Choose a base branch
from
Open

Create Rule_11-10.md #1373

wants to merge 25 commits into from

Conversation

KarenWGard
Copy link
Collaborator

No description provided.

docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
docs/section11/Rule_11-10.md Outdated Show resolved Hide resolved
Copy link
Collaborator

@weilixu weilixu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@KarenWGard
A few clarification questions. I am good with implementation.


- if the water heater is electric resistance storage and the capacity is <= 12kW (40945 btu/hr), look at Appendix F: `if swh_type in ["ELECTRIC_RESISTANCE_STORAGE"] and input_capacity <= 40945.7:`
- check that the capacity_per_volume is < 4000 btu/hr/gallon: `if capacity_per_volume < 4000:`
- check the size of the storage tank. If it's less than 2 gallons, provide a note, and continue to rule assertion: `if storage_volume < 2: rule_note += " The storage tank volume is less than 2 gallons and based on the size categories in ASHRAE 90.1 Table 7.8 and Appendix F it would not be classified as an electric storage water heater. Consequently, this rule was not assessed for this service water heater."; rule_status = FAIL; GO TO RULE ASSERTION`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am confused by the message here. If a rule is not assessed, shouldn't this be UNDETERMINED? Should the message just be ended at not be classified as an electric storage water heater?

- if the water heater is electric resistance storage and the capacity is <= 12kW (40945 btu/hr), look at Appendix F: `if swh_type in ["ELECTRIC_RESISTANCE_STORAGE"] and input_capacity <= 40945.7:`
- check that the capacity_per_volume is < 4000 btu/hr/gallon: `if capacity_per_volume < 4000:`
- check the size of the storage tank. If it's less than 2 gallons, provide a note, and continue to rule assertion: `if storage_volume < 2: rule_note += " The storage tank volume is less than 2 gallons and based on the size categories in ASHRAE 90.1 Table 7.8 and Appendix F it would not be classified as an electric storage water heater. Consequently, this rule was not assessed for this service water heater."; rule_status = FAIL; GO TO RULE ASSERTION`
- else, if the storage tank is is between 20 and 55 gallons, this is considered an electric storage water heater in Appendix F: `elif storage_volume >= 20 and storage_volume <= 55:`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about electric water heaters with storage volumes between 2 gallon to 20 gallons?

Copy link
Collaborator Author

@KarenWGard KarenWGard Dec 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is addressed on line 70


- if the water heater is electric resistance storage and the capacity is <= 12kW (40945 btu/hr), look at Appendix F: `if swh_type in ["ELECTRIC_RESISTANCE_STORAGE"] and input_capacity <= 40945.7:`
- check that the capacity_per_volume is < 4000 btu/hr/gallon: `if capacity_per_volume < 4000:`
- check the size of the storage tank. If it's less than 2 gallons, provide a note, and continue to rule assertion: `if storage_volume < 2: rule_note += " The storage tank volume is less than 2 gallons and based on the size categories in ASHRAE 90.1 Table 7.8 and in 10 CFR 430, it would not be classified as an electric storage water heater. Consequently, this rule was not assessed for this service water heater. Note that the specific requirements of 10 CFR 430 can be found in ASHRAE 90.1 Appendix F Table F-2."; rule_status = UNDETERMINED; GO TO RULE ASSERTION`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be smaller than 20 gallon?

- indicate with the note that the capacity per volume exceeds the limit: `rule_note += " Capacity per volume exceeds the limit of 4000 btu/hr/gallon given for Electric Storage Water Heaters in ASHRAE 90.1 Table 7.8."`
- set the rule status to FAIL and continue to rule assertion: `rule_status = "FAIL"; CONTINUE TO RULE ASSERTION`

- else if the storage volume is between 2 and 20 gallons, in which case there is no rating in APPENDIX F. set rule status to UNDETERMINED: `elif storage_volume < 20:`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bit confused by this logic - should this be nested inside the capacity per volume?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you are correct - it should've been inside the capacity per volume check

- check electric storage water heaters with capacity greater than 12 kW: `if swh_type == "ELECTRIC_RESISTANCE_STORAGE" and input_capacity > 40945.7 (btu/hr):`
- check that the capacity_per_volume is < 4000 btu/hr/gallon: `if capacity_per_volume < 4000:`
- calculate the standby loss target: `standby_loss_target = 0.3 + (27/swh_eq.distribution_system.tank.storage_volume)`
- check whether the standby loss fraction is given, if it's not given, provide a note, and a rule result of UNDETERMINED: `if swh_eq.standby_loss_fraction == NULL: rule_note += " Electric resistance water heaters with input capacity > 12kW have a required standby loss given by ASHRAE 90.1 Table 7.8. No standby loss was given for this water heater, thus the rule was not able to be evaluated."`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rule_status = "UNDETERMINED"?

- check whether the uniform_energy_factor is valid: `if uniform_energy_factor != NULL
- check if the actual uniform_energy_factor equal to the expected: `if uniform_energy_factor == expected_UEF and !has_faults:`
- set rule_status to "PASS": `rule_status = "PASS"; CONTINUE TO RULE ASSERTION`
- otherwise, set rule status to UNDETERMINED and provide a note: `else: rule_status = "UNDETERMINED"; rule_note += " Uniform Energy Factor is required but not provided"; CONTINUE TO RULE ASSERTION`
Copy link
Collaborator

@weilixu weilixu Dec 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yunjoonjung-PNNL or @JacksonJ-KC Actual implementation may set rule_note type to a list and then join the strings with enter as the separator.

@JacksonJ-KC
Copy link
Collaborator

@KarenWGard What is has_faults? I don't see it ever being defined but it is referenced in if statements

- calculate the expected efficiency for MEDIUM draw pattern: `if draw_pattern == "MEDIUM": expected_UEF = 0.6002 – (0.0011 * volume)`
- calculate the expected efficiency for HIGH draw pattern: `if draw_pattern == "HIGH": expected_UEF = 0.6597 – (0.0009 * volume)`
- check whether the uniform_energy_factor is valid: `if uniform_energy_factor != NULL
- check if the actual uniform_energy_factor equal to the expected: `if uniform_energy_factor == expected_UEF and !has_faults:`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

has_faults?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated from ruby to python syntax

- make sure that the thermal efficiency is not NULL: `if thermal_efficiency != NULL:`
- make sure that the standy loss is not NULL: `if swh_eq.standby_loss_fraction != NULL:`
- get the standby loss (see note 1 for calculation source): `standby_loss = swh_eq.standby_loss_fraction * 8.25 * volume * 70`
- check if the actual thermal efficiency is == to the expected: `if shw_eq.thermal_efficiency == expected_thermal_efficiency and standby_loss <= max_standby_loss and !has_faults:`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

has_faults?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry. Ruby syntax. Should be not has_faults

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, the issue is has_faults is not defined anywhere

- otherwise draw pattern is HIGH: `else: draw_pattern = "HIGH"`
- get the capacity of the SHW system (make sure to convert to btu/hr): `input_capacity = swh_eq.input_power`
- get the volume of the tank (make sure to convert to gallons): `storage_volume = swh_eq.distribution_system.tank.storage_capacity`
- calculate the capacity_per_volume based on the input_capacity and the storage_volume: `capacity_per_volume = shw_eq.rated_capacity / storage_volume`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

english says input_capacity, python says rated_capacity. I think it should be input capacity but I am not positive

- otherwise if the first_hour_rating is less than 75 gallons, draw pattern is MEDIUM: `elif first_hour_rating < 75: draw_pattern = "MEDIUM"`
- otherwise draw pattern is HIGH: `else: draw_pattern = "HIGH"`
- get the capacity of the SHW system (make sure to convert to btu/hr): `input_capacity = swh_eq.input_power`
- get the volume of the tank (make sure to convert to gallons): `storage_volume = swh_eq.distribution_system.tank.storage_capacity`
Copy link
Collaborator

@JacksonJ-KC JacksonJ-KC Dec 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

swh_eq .distribution_system .tank.storage_capacity

- otherwise, this is an electric resistance water heater with input > 12 kW, continue with logic per Table 7.8: `else:`
- check electric storage water heaters with capacity greater than 12 kW: `if swh_type == "ELECTRIC_RESISTANCE_STORAGE" and input_capacity > 40945.7 (btu/hr):`
- check that the capacity_per_volume is < 4000 btu/hr/gallon: `if capacity_per_volume < 4000:`
- calculate the standby loss target: `standby_loss_target = 0.3 + (27/swh_eq.distribution_system.tank.storage_volume)`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

swh_eq .distribution_system .tank.storage_volume


- otherwise, the capacity per volume is not < 4000 btu/ gallon: `else:`
- indicate with the note that the capacity per volume exceeds the limit: `rule_note += " Capacity per volume exceeds the limit of 4000 btu/hr/gallon given for Electric Storage Water Heaters in ASHRAE 90.1 Table 7.8."`
- set the rule status to FAIL and continue to rule assertion: `rule_status = "FAIL"; CONTINUE TO RULE ASSERTION`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here we FAIL when capacity_per_volume > 4000

- otherwise: `else:`
- set the note to indicate that the standby_loss is higher than the maximum allowed: `rule_note += " Standby Loss is higher than required by Table 7.8"; rule_status = FAIL; GO TO RULE ASSERTION`
- otherwise: `else:`
- set the note to indicate that the capacity per volume exceeds the limit: `rule_note += " Capacity per volume exceeds the limit of 4000 btu/hr/gallon given for Electric Storage Water Heaters in ASHRAE 90.1 Table 7.8."; rule_status = FAIL; GO TO RULE ASSERTION`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here we FAIL when capacity_per_volume > 4000

- change rule_status to UNDETERMINED: `rule_status = "UNDETERMINED"; CONTINUE TO RULE ASSERTION`
- check if the capacity <= 105,000 btu/hr: `elif input_capacity <= 105000:`
- the capacity per volume should be < 4000 btu/hr/gallon: `if capacity_per_volume >= 4000:`
- add the to the rule note: `rule_note += "Based on the size categories for gas storage water heaters in ASHRAE 90.1 Table 7.8, gas storage water heaters with an input capacity between 75,000 and 105,000 btu/hr shall have a capacity per volume of 4,000 btu/hr/gallon. This water heater has a capacity per gallon of " + capacity_per_volume + " btu/hr/gallon. Consequently, this rule was not able to be assesed for this service water heater. "; rule_status = "UNDETERMINED"; CONTINUE TO RULE ASSERTION`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here we UNDETERMINED when capacity_per_volume > 4000

- otherwise, set rule status to UNDETERMINED and provide a note: `else: rule_status = "UNDETERMINED"; rule_note += " Uniform Energy Factor is required but not provided"; CONTINUE TO RULE ASSERTION`
- otherwise the capacity is > 105,000 btu/hr: `else:`
- the capacity per volume should be < 4000 btu/hr/gallon: `if capacity_per_volume >= 4000:`
- add to the rule note: `rule_note += "Based on the size categories for gas storage water heaters in ASHRAE 90.1 Table 7.8, gas storage water heaters with an input capacity greater than 105,000 btu/hr shall have a capacity per volume of 4,000 btu/hr/gallon. This water heater has a capacity per gallon of " + capacity_per_volume + " btu/hr/gallon. Consequently, this rule was not able to be assesed for this service water heater. "; rule_status = UNDETERMINED`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here we UNDETERMINED when capacity_per_volume > 4000

@JacksonJ-KC
Copy link
Collaborator

@KarenWGard Is inconsistent behavior when capacity_per_volume > 4000 intentional?

- calculate the expected_thermal_efficiency : `expected_thermal_efficiency = 0.8`
- calculate max_standby_loss (btu/hr): `max_standby_loss = (input_capacity/800 + 110 * sqrt(volume))`
- make sure that the thermal efficiency is not NULL: `if thermal_efficiency != NULL:`
- make sure that the standy loss is not NULL: `if swh_eq.standby_loss_fraction != NULL:`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

agree this should be STANDBY_LOSS_ENERGY? not fraction?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes


**Applicability Checks:**
- Each SHW Equipment is applicable
- use get_SHW_equipment_associated_with_each_SWH_bat to get the SHW BATs and SHW use in the building: `shw_bats_and_equip_dict = get_SWH_components_associated_with_each_SWH_bat(B_RMD)`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shw_bats_and_equip_dict is defined but never used. Is this needed for anything that we missed?

- set the note to indicate that the standby_loss is higher than the maximum allowed: `rule_note += " Standby Loss is higher than required by Table 7.8"; rule_status = FAIL; GO TO RULE ASSERTION`
- otherwise: `else:`
- set the note to indicate that the capacity per volume exceeds the limit: `rule_note += " Capacity per volume exceeds the limit of 4000 btu/hr/gallon given for Electric Storage Water Heaters in ASHRAE 90.1 Table 7.8."; rule_status = FAIL; GO TO RULE ASSERTION`
- check if the water heater is gas storage: `if swh_type == "GAS_STORAGE":`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this check is inside of the branch where: "this is an electric resistance water heater with input > 12 kW"
`

- set the swh_type based on tank_type and fuel type: `if fuel_type == "ELECTRICITY": swh_type = "ELECTRIC_RESISTANCE_STORAGE`
- `elif fuel_type == "NATURAL_GAS": swh_type = "GAS_STORAGE`
- if the fuel type is propane, this is treated as natural gas in Table 7.8: `elif fuel_type == "PROPANE": swh_type = "GAS_STORAGE"`
- if the fuel type is not Electricity, Natural Gas, or Propane, this is not a valid baseline SWH system. Create a rule note and go directly to the rule assertion: `else: rule_note += "Fuel type: " + fuel_type + " is not a valid fuel type for a service water heating baseline system. According to ASHRAE 90.1 Table G3.1.1-2 service water heating equipment shall be either electric resistance or natural gas. According to ASHRAE 90.1 Table G3.1 #11 h, in cases where natural gas is specified as the baseline system, but there is no natural gas available on site, a propane system may be modeled. "; rule_status = FAIL; GO TO RULE ASSERTION `
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this FAIL duplicating a FAIL received in rule 11-7 due to the fuel type not matching? if so, suggest UNDETERMINED

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants