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

Update Rule22-17.md #1388

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions docs/section22/Rule22-17.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# CHW&CW - Rule 22-17

**Schema Version:** 0.0.25
**Schema Version:** 0.0.37
**Mandatory Rule:** FALSE
**Rule ID:** 22-17
**Rule Description:** The baseline heat rejection device shall have an efficiency of 38.2 gpm/hp
Expand Down Expand Up @@ -31,35 +31,36 @@

## Rule Logic:

- set has_fan_shaft_power flag equal to false: `has_fan_shaft_power = false`
- set has_fan_motor_nameplate_power flag equal to false: `has_fan_motor_nameplate_power = false`

- create a variable additional_note_for_no_shaft_power. If the heat_rejection has the fan_shaft_power data element, this note variable will be a blank string, however if there is no fan_shaft_power, the note will be a string that describes how fan_shaft_power is calculated: `set additional_note_for_no_shaft_power = ""`
- create a variable additional_note_for_motor_nameplate_power. If the heat_rejection has the fan_motor_nameplate_power data element, this note variable will be a blank string, however if there is no fan_motor_nameplate_power, the note will be a string that describes how fan_shaft_power is calculated: `set additional_note_for_motor_nameplate_power = ""`

- check if the heat rejection has fan_shaft_power (not sure the exact python command for this): `if heat_rejection.fan_shaft_power:
- check if the heat rejection has fan_motor_nameplate_power (not sure the exact python command for this): `if heat_rejection.fan_motor_nameplate_power:
Copy link
Collaborator

Choose a reason for hiding this comment

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

missing `


- set fan_shaft_power equal to heat_rejection.fan_shaft_power: `fan_shaft_power = heat_rejection.fan_shaft_power`
- set fan_motor_nameplate_power equal to heat_rejection.fan_motor_nameplate_power: `fan_motor_nameplate_power = heat_rejection.fan_motor_nameplate_power`

- set has_fan_shaft_power flag equal to true: `has_fan_shaft_power = true`
- set has_fan_motor_nameplate_power flag equal to true: `has_fan_motor_nameplate_power = true`

- otherwise, we need to calculate shaft power based on the motor nameplate power: `else:`
- otherwise, we need to calculate shaft power based on the motor nameplate power if fan_shaft_power is defined: `elif heat_rejection.fan_shaft_power:`

- set fan_shaft_power equal to the heat_rejection.fan_motor_nameplate_power * 0.9 (0.9 is a rule of thumb suggested by Michael Rosenberg in April 2023): `fan_shaft_power = heat_rejection.fan_motor_nameplate_power * 0.9 * heat_rejection.fan_motor_efficiency`
- set fan_motor_nameplate_power equal to the heat_rejection.fan_shaft_power * 0.9 (0.9 is a rule of thumb suggested by Michael Rosenberg in April 2023): `fan_motor_nameplate_power = heat_rejection.fan_shaft_power * 0.9 * heat_rejection.fan_motor_efficiency`
Copy link
Collaborator

@claperle claperle Nov 25, 2024

Choose a reason for hiding this comment

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

I was finding this confusing because at first when I reviewed this I assumed this meant fan motor nameplate hp but when I got to the end realized it means fan motor nameplate power in kW. I suppose that makes sense but I think hp is much more commonly reported on motor nameplates than kW although the baseline is a virtual motor any way so maybe what is commonly reported on motors does not matter then.

To go from fan_shaft_power to motor nameplate power I think this should be *(1/0.9)

Copy link
Collaborator

@claperle claperle Nov 25, 2024

Choose a reason for hiding this comment

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

Also, in the schema the note on the right says nameplate hp.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

ok, updated the calculation for fan_BHP to be different depending on whether fan_motor_nameplate_power exists. If fan_motor_nameplate_power exists, then fan_BHP = fan_motor_nameplate_power

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 not following this, why would fan_BHP equal fan_motor_nameplate_power?

Copy link
Collaborator

@claperle claperle Dec 4, 2024

Choose a reason for hiding this comment

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

@KarenWGard I recommend that we discuss these comments before edits are made to avoid multiple iterations resulting from miscommunications.


- if the shaft power is not directly entered, we also need to create an additional note to return with the result, describing how the calculation was completed: `addtitional_note_for_no_shaft_power = " *Note: The fan shaft power for " + heat_rejection + " was not given. For this evaluation, the fan shaft power was cacluated using a rule of thumb where fan_shaft_power = fan_motor_nameplate_power * 0.9 * fan_motor_efficiency."

- calculate fan brake horsepower by multiplying the fan shaft power by 0.00134102 (the conversion from Watts to HP): `fan_BHP = fan_shaft_power * 0.00134102`
- if the motor nameplate power is not directly entered, we also need to create an additional note to return with the result, describing how the calculation was completed: `addtitional_note_for_no_motor_nameplate_power = " *Note: The fan motor nameplate power for " + heat_rejection + " was not given. For this evaluation, the fan motor nameplate power was cacluated using a rule of thumb where fan_motor_nameplate_power = fan_shaft_power * 0.9 * fan_motor_efficiency."
Copy link
Collaborator

@claperle claperle Nov 25, 2024

Choose a reason for hiding this comment

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

Missing `

Copy link
Collaborator

Choose a reason for hiding this comment

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

To go from fan_shaft_power to motor nameplate power I think this should be *(1/0.9)


- otherwise, if there is no fan motor nameplate power or no fan_shaft power, then we can't calculate at all, set a boolean: could_not_calculate to TRUE: `could_not_calculate = true`
Copy link
Collaborator

@claperle claperle Nov 25, 2024

Choose a reason for hiding this comment

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

Need
else:
could_not_calculate = True

- calculate fan brake horsepower by multiplying the fan shaft power by 0.00134102 (the conversion from Watts to HP): `fan_BHP = fan_motor_nameplate_power * 0.00134102`

- get the rated water flow rate (assumed to be gpm): `rated_water_flowrate = heat_rejection.rated_water_flowrate`

- calculate the efficiency in gpm/hp: `heat_rejection_efficiency = rated_water_flowrate / (fan_BHP)`

**Rule Assertion - HeatRejection:**

- Case 1: check if the efficiency is greater than the rated efficiency: `if ( ahj_flag AND ( heat_rejection_efficiency > 38.2 )): UNDETERMINED; note = "The project includes a cooling tower. We calculated the cooling tower efficiency to be " + heat_rejection_efficiency + ", which is greater than the required efficiency of 38.2 gpm / hp, resulting in a more stringent baseline. However, it was not possible to verify that the modeling inputs correspond to the rating conditions in Table 6.8.1-7." + addtitional_note_for_no_shaft_power`
- Case 1: the result couldn't be calcualted because fan_motor_nameplate_power and fan_shaft_power were not given: `if could_not_calculate: UNDETERMINED; note = "The project includes a cooling tower. However, we could not calculate the cooling tower efficiency because neither the fan_motor_nameplate_power nor fan_shaft_power were given"
Copy link
Collaborator

Choose a reason for hiding this comment

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

missing `

- Case 2: check if the efficiency is greater than the rated efficiency: `if ( ahj_flag AND ( heat_rejection_efficiency > 38.2 )): UNDETERMINED; note = "The project includes a cooling tower. We calculated the cooling tower efficiency to be " + heat_rejection_efficiency + ", which is greater than the required efficiency of 38.2 gpm / hp, resulting in a more stringent baseline. However, it was not possible to verify that the modeling inputs correspond to the rating conditions in Table 6.8.1-7." + additional_note_for_motor_nameplate_power`

- Case 2: elsif the heat_rejection_efficiency equals 38.2 gpm/hp, PASS, but include note: `if ( heat_rejection_efficiency == 38.2 ): UNDETERMINED; note = "The project includes a cooling tower. We calculated the cooling tower efficiency to be correct at 38.2 gpm / hp. However, it was not possible to verify that the modeling inputs correspond to the rating conditions in Table 6.8.1-7." + addtitional_note_for_no_shaft_power`
- Case 3: elsif the heat_rejection_efficiency equals 38.2 gpm/hp, PASS, but include note: `if ( heat_rejection_efficiency == 38.2 ): UNDETERMINED; note = "The project includes a cooling tower. We calculated the cooling tower efficiency to be correct at 38.2 gpm / hp. However, it was not possible to verify that the modeling inputs correspond to the rating conditions in Table 6.8.1-7." + additional_note_for_motor_nameplate_power`
Copy link
Collaborator

Choose a reason for hiding this comment

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

The description says PASS but the outcome is UNDETERMINED.


- Case 3: Else: `else: UNDETERMINED; note = "The project includes a cooling tower. We calculated the cooling tower efficiency to be " + heat_rejection_efficiency + ", which is less than the required efficiency of 38.2 gpm / hp. However, it was not possible to verify that the modeling inputs correspond to the rating conditions in Table 6.8.1-7. Please review the efficiency and ensure that it is correct at the rating conditions as specified in the Table 6.8.1-7." + addtitional_note_for_no_shaft_power`
- Case 4: Else: `else: UNDETERMINED; note = "The project includes a cooling tower. We calculated the cooling tower efficiency to be " + heat_rejection_efficiency + ", which is less than the required efficiency of 38.2 gpm / hp. However, it was not possible to verify that the modeling inputs correspond to the rating conditions in Table 6.8.1-7. Please review the efficiency and ensure that it is correct at the rating conditions as specified in the Table 6.8.1-7." + additional_note_for_motor_nameplate_power`


**Notes:**
Expand Down