-
Notifications
You must be signed in to change notification settings - Fork 398
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
Better humidity control for chilled water coils and for AirloopHVAC:UnitarySystem #7215
Changes from all commits
cb6f108
3adf350
865c9f0
53543cb
7683df8
6c08857
119c5bc
9451557
d136c4c
56330bd
ee06f4e
0bd833d
3f5a7e2
4471a4e
c029acf
7fda469
7883673
040fa15
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10409,7 +10409,7 @@ namespace UnitarySystems { | |
// and if coolReheat, check hum rat as well | ||
if (((NoLoadTempOut - DesOutTemp) < Acc) && ((NoLoadHumRatOut - DesOutHumRat) < HumRatAcc)) { | ||
PartLoadFrac = 0.0; | ||
} else if (SensibleLoad) { // need to turn on compressor to see if load is met | ||
} else { // need to turn on compressor to see if load is met | ||
PartLoadFrac = 1.0; | ||
CompOn = 1; | ||
m_WSHPRuntimeFrac = 1.0; | ||
|
@@ -10574,7 +10574,9 @@ namespace UnitarySystems { | |
(this->m_TESOpMode == PackagedThermalStorageCoil::OffMode || | ||
this->m_TESOpMode == PackagedThermalStorageCoil::ChargeOnlyMode)) { | ||
PartLoadFrac = 0.0; | ||
} else { | ||
} else if (!SensibleLoad) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Highlights an issue with all coils types when no sensible load exists and a latent load does. Logic at top of function could skip sensible PLR calcs and go directly to latent calcs. Sensible calcs are inside of if(SensibleLoad || LatentLoad) block. |
||
PartLoadFrac = 0.0; | ||
} else if (SensibleLoad) { | ||
|
||
Par[9] = double(AirLoopNum); | ||
Par[10] = 0.0; | ||
|
@@ -10869,6 +10871,7 @@ namespace UnitarySystems { | |
FullOutput = DataLoopNode::Node(InletNode).MassFlowRate * | ||
(Psychrometrics::PsyHFnTdbW(DataLoopNode::Node(OutletNode).Temp, DataLoopNode::Node(OutletNode).HumRat) - | ||
Psychrometrics::PsyHFnTdbW(DataLoopNode::Node(InletNode).Temp, DataLoopNode::Node(OutletNode).HumRat)); | ||
FullLoadHumRatOut = DataLoopNode::Node(OutletNode).HumRat; | ||
|
||
// Check to see if the system can meet the load with the compressor off | ||
// If NoOutput is lower than (more cooling than required) or very near the ReqOutput, do not run the compressor | ||
|
@@ -10909,6 +10912,7 @@ namespace UnitarySystems { | |
FullOutput = DataLoopNode::Node(InletNode).MassFlowRate * | ||
(Psychrometrics::PsyHFnTdbW(DataLoopNode::Node(OutletNode).Temp, DataLoopNode::Node(InletNode).HumRat) - | ||
Psychrometrics::PsyHFnTdbW(DataLoopNode::Node(InletNode).Temp, DataLoopNode::Node(InletNode).HumRat)); | ||
FullLoadHumRatOut = DataLoopNode::Node(OutletNode).HumRat; | ||
|
||
// Since we are cooling, we expect FullOutput to be < 0 and FullOutput < NoCoolOutput | ||
// Check that this is the case; IF not set PartLoadFrac = 0.0 (off) and return | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -252,6 +252,9 @@ TEST_F(EnergyPlusFixture, DXCoils_Test1) | |
DXCoilPartLoadRatio.allocate(1); | ||
DXCoilFanOpMode.allocate(1); | ||
|
||
DataLoopNode::Node.allocate(1); | ||
DXCoil(CoilIndex).AirOutNode = 1; | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Wow, previously no Node calls inside the Calc routine, I wouldn't have guessed that but I guess Init sets up node data variables and uses them in Calc. Wonder what the node data variable shows in the Calc routine. Oh well, unit test passes what it's intended to do. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Other than the condenser inlet node, CalcDoe2DXCoil doesn't read or write to any nodes. It uses variables like |
||
Real64 SpeedRatio = 0.0; | ||
Real64 CycRatio = 1.0; | ||
int SpeedNum = 2; | ||
|
@@ -426,6 +429,8 @@ TEST_F(EnergyPlusFixture, TestMultiSpeedDefrostCOP) | |
Coil.DefrostStrategy = Resistive; | ||
Coil.Name = "DX Heating coil"; | ||
Coil.NumOfSpeeds = 2; | ||
DataLoopNode::Node.allocate(1); | ||
Coil.AirOutNode = 1; | ||
|
||
Coil.MSRatedTotCap.allocate(Coil.NumOfSpeeds); | ||
Coil.MSRatedSHR.allocate(Coil.NumOfSpeeds); | ||
|
@@ -796,6 +801,8 @@ TEST_F(EnergyPlusFixture, TestSingleSpeedDefrostCOP) | |
Coil.DXCoilType = "Coil:Heating:DX:SingleSpeed"; | ||
Coil.DXCoilType_Num = CoilDX_HeatingEmpirical; | ||
Coil.SchedPtr = DataGlobals::ScheduleAlwaysOn; | ||
DataLoopNode::Node.allocate(1); | ||
Coil.AirOutNode = 1; | ||
|
||
Coil.RatedSHR(1) = 1.0; | ||
Coil.RatedTotCap(1) = 11012.634487601337; | ||
|
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.
This must have fixed something?
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 neither should this be here.
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.
Oh- right - this fixed an array bounds problem. d136c4c
@rraustad Thanks for the review and merge.