ZoneBaseboard:OutdoorTemperatureControlled autosizing is missing#11579
ZoneBaseboard:OutdoorTemperatureControlled autosizing is missing#11579joseph-robertson wants to merge 7 commits into
Conversation
|
|
|
Does it seem like |
| if (state.dataEnvrn->CurEnvirNum != ScannedEnvirNum) { | ||
| ScannedEnvirNum = state.dataEnvrn->CurEnvirNum; | ||
| DesDayOutDryBulbTemp(ScannedEnvirNum) = state.dataEnvrn->OutDryBulbTemp; | ||
| if (state.dataEnvrn->CurEnvirNum <= state.dataEnvrn->TotDesDays) { // FIXME: this was == in the original code |
There was a problem hiding this comment.
What original code? I don't see any code that was deleted. I think == was used to determine when all design days have simulated (i.e., components don't usually size until zone sizing is complete). But each design day has multiple time steps so just looking at the CurEnvirNum isn't enough to know that sizing has completed. Most sizing routines are not called until !state.dataGlobal->SysSizingCalc. This does seem weird in that state.dataEnvrn->OutDryBulbTemp is set by the weather manager each time step, so this code is capturing the last time step's OAT in each specific design day. Not what I would expect. Also, at line 6926 below it's looking for max OAT not the min (i.e., if (MinDesOutTemp > DesDayOutDryBulbTemp(Loop))). Too much to discuss in a comment.
There was a problem hiding this comment.
Sorry, I was just referring to the original code in #4236.
I tried introducing !state.dataGlobal->ZoneSizingCalc in d994859. It brings the InitInternalHeatGains call down from "Initializing Internal Heat Gains" to "Initializing Simulation", which I think aligns with the other baseboard type.
From what I can tell the code is permitting input of a design zone heating setpoint (high temperature), but then looking to design day (days?) for a low temperature? But as you point out, looking at state.dataEnvrn->OutDryBulbTemp which would be the design day's last timestep's OAT; is there a precendence for this kind of weather info gathering, or why couldn't low temperature just be defaulted/input like high temperature?
I'll dig around and see how infiltration and ventilation MCPI and MCPV are used in other places.
There was a problem hiding this comment.
What would typically happen in a sizing routine is the component would look to FinalZoneSizing data for information needed for sizing (which means you don't need to gather data as done here with DesDayOutDryBulbTemp(ScannedEnvirNum)). In this case it would be FinalZoneSizing(zn).OutTempAtHeatPeak but using that data would need to be tested to make sure the size of the baseboard was sufficient to meet the peak baseboard load. For example, what is the total infiltration and ventilation load at the peak heating timestep? Is there a time where infiltration and ventilation would be larger and therefore the baseboard would not have sufficient capacity to meet the load? There is also an array of this same data using the min of CalcFinalZoneSizing(zn).HeatOutTempSeq(ts) which would give the minimum OAT for the peak heating design day. There are always questions of this nature regarding which sizing data is appropriate for component sizing (e.g., the peak heating load may not correspond to the peak infiltration or ventilation load).
The BaseBoards do have a size function, but this object is managed in InternalHeatGains, for whatever reason. Sizing is typically called from the init function with proper protection to ensure it is called after sizing completes. So this does seem OK since it's called from void InitBaseboard() So this new code does call a sizing function, it's called from init in the code that manages the object, and the sizing call should be protected to only call the new size function after sizing is complete. Using |
Pull request overview
Description of the purpose of this PR
Pull Request Author
Reviewer