-
Notifications
You must be signed in to change notification settings - Fork 461
Add exhaust fan for AirLoopHVAC:DedicatedOutdoorAirSystem #11395
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
Conversation
|
Thanks @rraustad - looks good. I transitioned the test file to 26.1 and tested. That is added it here. What are your thoughts on adding it to the test suite? Based on the issue description, I would bet we don't have any tests that cover this use case either in the test files or the unit tests. |
|
I can add this as an example file. |
| errorsFound = true; | ||
| } | ||
| thisDOAS.m_CompPointerAirLoopMixer = AirLoopMixer::factory(state, thisDOAS.m_AirLoopMixerIndex, thisDOAS.AirLoopMixerName); | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The DOAS mixer code (old line 763) was moved here to read in mixer data and identify the mixer outlet node number. The following code can then check the fan inlet node to see if it matches a mixer outlet node. If so, then the fan is an exhaust fan. This is also the reason the unit test node numbers changed.
| thisDOAS.FanName = CompName; | ||
| thisDOAS.m_FanTypeNum = SimAirServingZones::CompType::Fan_System_Object; | ||
| thisDOAS.m_FanIndex = fanNum; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The above variables are reserved for the DOAS supply fan. This new logic tries to isolate the first fan read in such that these variables are not overwritten by a second fan object.
| state.dataLoopNodes->NodeID(thisOutsideAirSys.InletNodeNum(CompNum)), | ||
| state.dataLoopNodes->NodeID(thisOutsideAirSys.OutletNodeNum(CompNum - 1)))); | ||
| errorsFound = true; | ||
| if (isFan && thisOutsideAirSys.InletNodeNum(CompNum) == thisDOAS.m_CompPointerAirLoopMixer->OutletNodeNum) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And this new logic tests for a 2nd fan and updates new exhaust fan variables for use elsewhere. If there is no exhaust fan then the mismatched node warning is issued as before (else at 763).
| state.dataLoopNodes->Node(this->m_exhaustFanInletNodeNum).MassFlowRateMaxAvail = this->SumMassFlowRate; | ||
| state.dataLoopNodes->Node(this->m_exhaustFanOutletNodeNum).MassFlowRateMaxAvail = this->SumMassFlowRate; | ||
| state.dataLoopNodes->Node(this->m_exhaustFanOutletNodeNum).MassFlowRateMax = this->SumMassFlowRate; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And then the rest of the changes are just accounting for a 2nd fan in the equipment list (i.e.,. this->m_exhaustFanUsed = true).
| if (this->m_FanIndex > 0 && (this->m_FanTypeNum == SimAirServingZones::CompType::Fan_System_Object || | ||
| this->m_FanTypeNum == SimAirServingZones::CompType::Fan_ComponentModel)) { | ||
| Real64 supplyFanVolFlow = state.dataFans->fans(this->m_FanIndex)->maxAirFlowRate; | ||
| if (supplyFanVolFlow != DataSizing::AutoSize) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Check if fan is autosized before stomping on flow rate inputs. If not autosized then provide warning but don't set fan flow. If autosized then jump to else at 1032 and set air flow.
| state.dataLoopNodes->Node(this->m_FanInletNodeNum).MassFlowRateMaxAvail = this->SizingMassFlow; | ||
| state.dataLoopNodes->Node(this->m_FanOutletNodeNum).MassFlowRateMaxAvail = this->SizingMassFlow; | ||
| state.dataLoopNodes->Node(this->m_FanOutletNodeNum).MassFlowRateMax = this->SizingMassFlow; | ||
| if (this->m_exhaustFanUsed) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And then use same sizing logic for the new exhaust fan.
mitchute
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @rraustad. I think this is ready.
|
Thanks @rraustad. Merging. |

Pull request overview
Description of the purpose of this PR
The AirLoopHVAC:DedicatedOutdoorAirSystem did not allow an exhaust fan connected to the outlet of the DOAS system's AirLoopHVAC:Mixer object. These changes also check if the fan(s) are autosized or if not, use a maximum air volumetric flow rate that differs by more than 1% from the sum of the connected systems. If the flow rates differ a warning is issued but the fan flow rate is not changed.
Pull Request Author
Reviewer