diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 43bfccd2692..4d94a8e06ae 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -13965,10 +13965,27 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, ShowContinueErrorTimeStamp(state, ""); ShowContinueError(state, format(" Iteration limit [{}] exceeded in calculating OU evaporating temperature", MaxIter)); } else if (SolFla == -2) { + this->LowLoadTeError++; + if (LowLoadTeError < 5) { + ShowWarningMessage(state, + format("{}: no Te solution was found for {} f({})={} and f({})={} are the same sign", + RoutineName, + this->Name, + MinOutdoorUnitTe, + f(MinOutdoorUnitTe), + T_suction, + f(T_suction))); + ShowContinueErrorTimeStamp(state, ""); + } + ShowRecurringWarningErrorAtEnd(state, + "Low load calculation Te solution not found as end points have the same sign", + this->LowLoadTeErrorIndex, + SolFla, + SolFla); if (f(T_suction) < 0) { // demand < capacity at both endpoints of the Te range, assuming f(x) is roughly monotonic than this is the low load case // TeTol is added to prevent the final updated Te to go out of bounds - SmallLoadTe = 6 + TeTol; // MinOutdoorUnitTe; //SmallLoadTe( Te'_new ) is constant during iterations + SmallLoadTe = MinOutdoorUnitTe + TeTol; // MinOutdoorUnitTe; //SmallLoadTe( Te'_new ) is constant during iterations } else { // demand > capacity at both endpoints of the Te range, take the end point x where f(x) is closer to zero if (f(MinOutdoorUnitTe) > f(T_suction)) { // f(T_suction > 0, not equal as SolFla will not be -2 diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index cb8cff12ab0..70f85927ad8 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -315,6 +315,8 @@ namespace HVACVariableRefrigerantFlow { int CoolCapFTErrorIndex = 0; // warning message index int HeatEIRFPLRErrorIndex = 0; // warning message index int CoolEIRFPLRErrorIndex = 0; // warning message index + int LowLoadTeError = 0; + int LowLoadTeErrorIndex = 0; // warning message index // The following are for the Algorithm Type: VRF model based on physics, applicable for Fluid Temperature Control int AlgorithmIUCtrl; // VRF indoor unit contrl algorithm, 1-High sensible, 2-Te/Tc constant Array1D CompressorSpeed; // compressor speed array [rps] diff --git a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc index c7f04533770..ae8d782e0c5 100644 --- a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc +++ b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc @@ -13363,7 +13363,7 @@ TEST_F(EnergyPlusFixture, VRF_FluidTCtrl_ReportOutputVerificationTest) EXPECT_NEAR(5645.5696, thisVRFTU.TotalCoolingRate, 0.0001); EXPECT_NEAR(84.8359, thisFan->totalPower, 0.0001); EXPECT_NEAR(thisDXCoolingCoil.TotalCoolingEnergyRate, (thisVRFTU.TotalCoolingRate + thisFan->totalPower), 0.0001); - EXPECT_NEAR(0.4619, state->dataHVACVarRefFlow->VRF(1).VRFCondCyclingRatio, 0.0001); + EXPECT_NEAR(0.4772, state->dataHVACVarRefFlow->VRF(1).VRFCondCyclingRatio, 0.0001); EXPECT_NEAR(state->dataHVACVarRefFlow->VRF(1).OUFanPower, state->dataHVACVarRefFlow->VRF(1).RatedOUFanPower * state->dataHVACVarRefFlow->VRF(1).VRFCondCyclingRatio, 0.0001);