-
Notifications
You must be signed in to change notification settings - Fork 392
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
Fix documentation of VRF Heat Pump Total Heating Rate, should equal the sum of coil heating rate, not air terminal heating rate #10627
base: develop
Are you sure you want to change the base?
Changes from 3 commits
f5c5103
03d9070
098e584
a75d23a
6379fdc
f306890
94e3c1f
ac4911c
c9fb07f
94fbca7
3ba669a
303a572
0ca1aa3
fbcb90c
bc5d7c9
6161f8d
e1db7ed
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -617,9 +617,9 @@ | |
|
||
This output field is the operating total cooling capacity of the variable refrigerant flow heat pump in Watts. This value is calculated for each HVAC system time step being simulated, and the results are averaged for the time step being reported. This value should match the sum of the individual zone terminal unit output variables for Zone VRF Air Terminal Total Cooling Rate. | ||
|
||
\paragraph{VRF Heat Pump Total Heating Rate {[}W{]}}\label{vrf-heat-pump-total-heating-rate-w} | ||
|
||
This output field is the operating total heating capacity of the variable refrigerant flow heat pump in Watts. The capacity includes any degradation due to defrost mode. This value is calculated for each HVAC system time step being simulated, and the results are averaged for the time step being reported. This value should match the sum of the individual zone terminal unit output variables for Zone VRF Air Terminal Total Heating Rate. | ||
This output field is the operating total heating capacity of the variable refrigerant flow heat pump in Watts. The capacity includes any degradation due to defrost mode. This value is calculated for each HVAC system time step being simulated, and the results are averaged for the time step being reported. This value should match the sum of the individual zone terminal unit heating coil output variables for Heating Coil Heating Rate. | ||
|
||
\paragraph{VRF Heat Pump Cooling Electricity Rate {[}W{]}}\label{vrf-heat-pump-cooling-electric-power-w} | ||
|
||
|
@@ -1153,6 +1153,10 @@ | |
|
||
Note: refer to the rdd file after a simulation for exact output variable names | ||
|
||
\paragraph{VRF Heat Pump Total Heating Rate {[}W{]}}\label{vrf-heat-pump-total-heating-rate-w} | ||
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. This needs a unique label (there are duplicate label warnings when file changes are viewed in github). 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. Good catch. I'll add a suffix to it |
||
|
||
This output field is the operating total heating capacity of the variable refrigerant flow heat pump in Watts. The capacity includes any degradation due to defrost mode. This value is calculated for each HVAC system time step being simulated, and the results are averaged for the time step being reported. This value should match the sum of the individual zone terminal unit heating coil output variables for Heating Coil Heating Rate. | ||
|
||
\paragraph{VRF Heat Pump Compressor Rotating Speed {[}rev/min{]}}\label{vrf-heat-pump-compressor-rotating-speed-revmin} | ||
|
||
This output only applies for the VRF-FluidTCtrl model. This is the rotating speed of the compressor, which indicates the loading index. | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17346,7 +17346,7 @@ void ControlVRFIUCoil(EnergyPlusData &state, | |
MaxSC = 20; | ||
Garate = state.dataDXCoils->DXCoil(CoilIndex).RatedAirMassFlowRate(1); | ||
// why always limit the minimum fan speed ratio to 0.65? | ||
FanSpdRatioMin = min(max(OAMassFlow / Garate, 0.65), 1.0); // ensure that coil flow rate is higher than OA flow rate | ||
FanSpdRatioMin = min(max(OAMassFlow / Garate, 0.0), 1.0); // ensure that coil flow rate is higher than OA flow rate | ||
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. This seems like a big change, unrelated to the heating rate outputs. Does this branch include some changes from another branch? 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. I might have left it in by accident. Just reverted it. |
||
|
||
if (QCoil == 0) { | ||
// No Heating or Cooling | ||
|
@@ -17481,12 +17481,20 @@ void ControlVRFIUCoil(EnergyPlusData &state, | |
if (QCoilSenHeatingLoad > QinSenMin1) { | ||
// Modulate fan speed to meet room sensible load; SC is not updated | ||
FanSpdRatioMax = 1.0; | ||
auto f = [QCoilSenHeatingLoad, Ts_1, Tin, Garate, BF](Real64 FanSpdRto) { | ||
return FanSpdResidualHeat(FanSpdRto, QCoilSenHeatingLoad, Ts_1, Tin, Garate, BF); | ||
Tout = Tin + (Ts_1 - Tin) * (1 - BF); | ||
Real64 RatedAirMassFlowRate = state.dataDXCoils->DXCoil(CoilIndex).RatedAirMassFlowRate[0]; | ||
auto f = [QCoilSenHeatingLoad, RatedAirMassFlowRate, Tout, Tin, Win](Real64 FanSpdRto) { | ||
return FanSpdResidualHeatUsingH(FanSpdRto, QCoilSenHeatingLoad, RatedAirMassFlowRate, Tout, Tin, Win); | ||
}; | ||
General::SolveRoot(state, 1.0e-3, MaxIter, SolFla, Ratio1, f, FanSpdRatioMin, FanSpdRatioMax); | ||
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. I am not saying to change this but it just seems odd to me when meeting a load to modulate the fan based on suction temperature (which meets the load using air flow) instead of modulating the compressor at some known fan speed. I guess this is an artifact of using VS fan. I would hope in the case of a VS fan that the refrigerant suction T is relatively constant. 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. It seems that modulating the compressor is at the next step after the calculation of the TU's are finished. In this function, I don't think refrigerant suction temperature changes |
||
// this will likely cause problems eventually, -1 and -2 mean different things | ||
if (SolFla < 0) Ratio1 = FanSpdRatioMax; // over capacity | ||
if (SolFla < 0) { | ||
if (f(FanSpdRatioMin) <= 0) { // capacity <= demand | ||
Ratio1 = FanSpdRatioMax; // over capacity | ||
} else { // capacity > demand even for the minimum fan speed | ||
Ratio1 = FanSpdRatioMin; | ||
} | ||
} | ||
FanSpdRatio = Ratio1; | ||
CoilOnOffRatio = 1.0; | ||
|
||
|
@@ -17767,6 +17775,27 @@ Real64 FanSpdResidualHeat(Real64 FanSpdRto, Real64 QCoilSenHeatingLoad, Real64 T | |
return (TotCap - ZnSenLoad) / ZnSenLoad; | ||
} | ||
|
||
Real64 FanSpdResidualHeatUsingH(Real64 FanSpdRto, Real64 QCoilSenHeatingLoad, Real64 RatedAirMassFlowRate, Real64 Tout, Real64 Tin, Real64 Win) | ||
{ | ||
|
||
// FUNCTION INFORMATION: | ||
// AUTHOR Yujie Xu (yujiex) | ||
// DATE WRITTEN Jul 2024 | ||
// | ||
// PURPOSE OF THIS FUNCTION: | ||
// Calculates residual function (desired zone heating load - actual heating coil capacity) | ||
// This is used to modify the fan speed to adjust the coil heating capacity to match | ||
// the zone heating load. This one uses Hin and Hout difference rather than Tin and Tout difference | ||
// like in FanSpdResidualHeat | ||
// | ||
Real64 ZnSenLoad = QCoilSenHeatingLoad; | ||
// +-100 W minimum zone load? | ||
if (std::abs(ZnSenLoad) < 100.0) ZnSenLoad = sign(100.0, ZnSenLoad); | ||
Real64 Wout = Win; | ||
Real64 TotCap = FanSpdRto * RatedAirMassFlowRate * (PsyHFnTdbW(Tout, Wout) - PsyHFnTdbW(Tin, Win)); | ||
return (TotCap - ZnSenLoad) / ZnSenLoad; | ||
} | ||
|
||
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. Do you really need to iterate on this? There's only 1 unknown.., FanSpdRto. 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. I guess not. I will change it to directly calculate FanSpdRto |
||
void SetMSHPDXCoilHeatRecoveryFlag(EnergyPlusData &state, int const DXCoilNum) | ||
{ | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11740,12 +11740,14 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) | |
this->VRFCondCyclingRatio = CyclingRatio; | ||
|
||
Tsuction = this->EvaporatingTemp; // Outdoor unit evaporating temperature | ||
this->HeatingCapacityPrev = this->HeatingCapacity; | ||
this->HeatingCapacity = | ||
this->CoffEvapCap * this->RatedEvapCapacity * CurveValue(state, this->OUCoolingCAPFT(NumOfCompSpdInput), Tdischarge, Tsuction) + | ||
this->RatedCompPower * CurveValue(state, | ||
this->OUCoolingPWRFT(NumOfCompSpdInput), | ||
Tdischarge, | ||
Tsuction); // Include the piping loss, at the highest compressor speed | ||
this->PipingCorrectionHeatingPrev = this->PipingCorrectionHeating; | ||
this->PipingCorrectionHeating = TU_HeatingLoad / (TU_HeatingLoad + Pipe_Q_h); | ||
state.dataHVACVarRefFlow->MaxHeatingCapacity(VRFCond) = | ||
this->HeatingCapacity; // for report, maximum condensing capacity the system can provide | ||
|
@@ -12235,7 +12237,14 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) | |
} | ||
|
||
this->TotalCoolingCapacity = TotalCondCoolingCapacity * CoolingPLR; | ||
this->TotalHeatingCapacity = TotalCondHeatingCapacity * HeatingPLR; | ||
// adjustment for matching HP heating rate and coil heating rate | ||
this->TotalHeatingCapacity = TotalCondHeatingCapacity * HeatingPLR * (this->RatedEvapCapacity / (this->RatedEvapCapacity + Pipe_Q_h)); | ||
if (this->VRFCondPLR < 1.0) { | ||
this->TotalHeatingCapacity = TotalCondHeatingCapacity * HeatingPLR * this->PipingCorrectionHeating; | ||
} | ||
if (this->TUHeatingLoad / this->PipingCorrectionHeating > TotalCondHeatingCapacity) { | ||
this->TotalHeatingCapacity = this->HeatingCapacityPrev * HeatingPLR * this->PipingCorrectionHeatingPrev; | ||
} | ||
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. TotalHeatingCapacity should match the sum of the TU capacity + piping losses. So isn't it just that? TotalHeatingCapacity = Q_h_TU_PL = TU_HeatingLoad + Pipe_Q_h? 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. yes, it is matching this. |
||
|
||
if (this->MinPLR > 0.0) { | ||
bool const plrTooLow = this->VRFCondPLR < this->MinPLR; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -477,8 +477,8 @@ | |
0, !- No Cooling Supply Air Flow Rate {m3/s} | ||
0.595, !- Heating Supply Air Flow Rate {m3/s} | ||
0, !- No Heating Supply Air Flow Rate {m3/s} | ||
autosize, !- Cooling Outdoor Air Flow Rate {m3/s} | ||
autosize, !- Heating Outdoor Air Flow Rate {m3/s} | ||
0, !- Cooling Outdoor Air Flow Rate {m3/s} | ||
0, !- Heating Outdoor Air Flow Rate {m3/s} | ||
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. Does including OA flow cause a difference between the sum of TU heating capacity + piping losses and condenser total heating capacity? 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. it does cause some more difference 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. @rraustad Here is the output file when the heating cooling air flow rate is autosize The following is a snapshot sorted with column O in descending order 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. If L x M = 9083.83288 * 0.98793126 = 8974.2, which closely matches column K at 8973.19993, then why is the TU heating coil "allowed" to provide more than that "max" heating rate? Is the TU heating coil capacity getting limited by the MaxHeatingCapacity variable? I recall discussing that function LimitTUCapacity should include piping losses. 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. Coil capacity should have been limited. Maybe there's some lingering issues there. I will check on that. 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. @rraustad I've changed to just using eplusout_0 heating cooling air flow.csv The coil capacity is indeed limited. I set the OU evaporative capacity to 5000W (coil capacity is 10023W). Coil heating rate is less than OU capacity at max speed. |
||
0, !- No Load Outdoor Air Flow Rate {m3/s} | ||
VRFFanModeSchedule, !- Supply Air Fan Operating Mode Schedule Name | ||
drawthrough, !- Supply Air Fan Placement | ||
|
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.
It thought this should say "sum of the individual zone terminal unit heating coil output variables for Heating Coil Heating Rate less any piping loss."
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.
It might just be the total of heating coil heating rate rather than total coil heating rate - piping loss.
in
CalcVRFCondenser
,vrf.TotalHeatingCapacity
(VRF Heat Pump Total Heating Rate output variable) is computed like thisAnd in
HeatingPLR
is like thisFor normal cases where
TotalCondHeatingCapacity > 0.0
,vrf.TotalHeatingCapacity
would just beTUHeatingLoad / vrf.PipingCorrectionHeating
would be coil heating rate plus the piping loss.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.
Right, I meant coil heating rates plus piping loss is the output from the outdoor unit.
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.
I see. Sorry I misunderstood earlier. I will modify the description.