diff --git a/src/EnergyPlus/Autosizing/WaterHeatingCoilUASizing.cc b/src/EnergyPlus/Autosizing/WaterHeatingCoilUASizing.cc index a147dcbebad..8d05ae9e87c 100644 --- a/src/EnergyPlus/Autosizing/WaterHeatingCoilUASizing.cc +++ b/src/EnergyPlus/Autosizing/WaterHeatingCoilUASizing.cc @@ -82,7 +82,6 @@ Real64 WaterHeatingCoilUASizer::size(EnergyPlusData &state, Real64 _originalValu }; General::SolveRoot(state, Acc, MaxIte, SolFla, this->autoSizedValue, f, UA0, UA1); if (SolFla == -1) { - errorsFound = true; std::string msg = "Autosizing of heating coil UA failed for Coil:Heating:Water \"" + this->compName + "\""; this->addErrorMessage(msg); ShowSevereError(state, msg); @@ -141,10 +140,7 @@ Real64 WaterHeatingCoilUASizer::size(EnergyPlusData &state, Real64 _originalValu this->addErrorMessage(msg); ShowContinueError(state, msg); } - this->dataErrorsFound = true; } else if (SolFla == -2) { - this->errorType = AutoSizingResultType::ErrorType1; - errorsFound = true; std::string msg = "Autosizing of heating coil UA failed for Coil:Heating:Water \"" + this->compName + "\""; this->addErrorMessage(msg); ShowSevereError(state, msg); @@ -217,7 +213,7 @@ Real64 WaterHeatingCoilUASizer::size(EnergyPlusData &state, Real64 _originalValu this->addErrorMessage(msg); ShowContinueError(state, msg); } - this->dataErrorsFound = true; + this->autoSizedValue = UA1; } } else { this->autoSizedValue = 1.0; @@ -258,7 +254,6 @@ Real64 WaterHeatingCoilUASizer::size(EnergyPlusData &state, Real64 _originalValu }; General::SolveRoot(state, Acc, MaxIte, SolFla, this->autoSizedValue, f, UA0, UA1); if (SolFla == -1) { - errorsFound = true; std::string msg = "Autosizing of heating coil UA failed for Coil:Heating:Water \"" + this->compName + "\""; this->addErrorMessage(msg); ShowSevereError(state, msg); @@ -301,7 +296,6 @@ Real64 WaterHeatingCoilUASizer::size(EnergyPlusData &state, Real64 _originalValu this->addErrorMessage(msg); ShowContinueError(state, msg); } - this->dataErrorsFound = true; } else if (SolFla == -2) { this->errorType = AutoSizingResultType::ErrorType1; errorsFound = true; @@ -361,7 +355,7 @@ Real64 WaterHeatingCoilUASizer::size(EnergyPlusData &state, Real64 _originalValu this->addErrorMessage(msg); ShowContinueError(state, msg); } - this->dataErrorsFound = true; + this->autoSizedValue = UA1; } } else { this->autoSizedValue = 1.0; diff --git a/src/EnergyPlus/SingleDuct.cc b/src/EnergyPlus/SingleDuct.cc index 29ca2e3937d..e1c8f5bcbf6 100644 --- a/src/EnergyPlus/SingleDuct.cc +++ b/src/EnergyPlus/SingleDuct.cc @@ -3000,7 +3000,43 @@ void SingleDuctAirTerminal::SizeSys(EnergyPlusData &state) } } } - + if (state.dataSize->TermUnitFinalZoneSizing.size() > 0 && this->DamperHeatingAction == Action::ReverseWithLimits && + TermUnitSizing(state.dataSize->CurTermUnitSizingNum).AirVolFlow < + state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesHeatVolFlow) { + ShowMessage(state, format("SizeHVACSingleDuct: Potential issue with equipment sizing for {} = \"{}\".", this->sysType, this->SysName)); + ShowContinueError(state, + format("Terminal unit design air flow rate during Reheat of {:.5R} [m3/s]", + TermUnitSizing(state.dataSize->CurTermUnitSizingNum).AirVolFlow)); + ShowContinueError(state, + format("is less than the zone design heating air flow rate of {:.5R} [m3/s]", + state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesHeatVolFlow)); + ShowContinueError(state, + format("For reference the zone design cooling air flow rate is {:.5R} [m3/s]", + state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesCoolVolFlow)); + ShowContinueError(state, + format("For reference the zone design minimum cooling air flow rate is {:.5R} [m3/s]", + state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesCoolVolFlowMin)); + int zoneNum = state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).ZoneNum; + if (zoneNum > 0) { + int SizingInputNum = + Util::FindItemInList(state.dataHeatBal->Zone(zoneNum).Name, state.dataSize->ZoneSizingInput, &ZoneSizingInputData::ZoneName); + if (SizingInputNum == 0) { + SizingInputNum = 1; + } + if (state.dataSize->ZoneSizingInput.size() > 0 && state.dataSize->ZoneSizingInput(SizingInputNum).DesHeatMaxAirFlowFrac < 1.0) { + ShowContinueError(state, + format("Sizing:Zone Heating Maximum Air Flow Fraction = {:.5R}", + state.dataSize->ZoneSizingInput(SizingInputNum).DesHeatMaxAirFlowFrac)); + ShowContinueError(state, + format("Sizing:Zone Heating Maximum Air Flow per Zone Floor Area = {:.5R} [m3/s/m2]", + state.dataSize->ZoneSizingInput(SizingInputNum).DesHeatMaxAirFlowPerArea)); + ShowContinueError(state, + format("For reference the zone design maximum heating air flow rate is {:.5R} [m3/s]", + state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesHeatVolFlowMax)); + } + } + ShowContinueError(state, "Verify that the values entered are intended and are consistent with other components."); + } if (TermUnitSizing(state.dataSize->CurTermUnitSizingNum).AirVolFlow > SmallAirVolFlow) { if (this->DamperHeatingAction == Action::ReverseWithLimits) { TermUnitSizing(state.dataSize->CurTermUnitSizingNum).ReheatAirFlowMult = diff --git a/tst/EnergyPlus/unit/Autosizing/WaterHeatingCoilUASizing.unit.cc b/tst/EnergyPlus/unit/Autosizing/WaterHeatingCoilUASizing.unit.cc index 8c3c7b63206..4b76f1281e5 100644 --- a/tst/EnergyPlus/unit/Autosizing/WaterHeatingCoilUASizing.unit.cc +++ b/tst/EnergyPlus/unit/Autosizing/WaterHeatingCoilUASizing.unit.cc @@ -176,12 +176,12 @@ TEST_F(AutoSizingFixture, WaterHeatingCoilUASizingGauntlet) state->dataSize->ZoneSizingInput(1).ZoneNum = 1; sizer.initializeWithinEP(*this->state, HVAC::cAllCoilTypes(HVAC::Coil_HeatingWater), "MyWaterCoil", printFlag, routineName); sizedValue = sizer.size(*state, inputValue, errorsFound); - EXPECT_TRUE(errorsFound); - EXPECT_TRUE(state->dataSize->DataErrorsFound); - EXPECT_TRUE(sizer.dataErrorsFound); - EXPECT_ENUM_EQ(AutoSizingResultType::ErrorType1, sizer.errorType); + EXPECT_FALSE(errorsFound); + EXPECT_FALSE(state->dataSize->DataErrorsFound); + EXPECT_FALSE(sizer.dataErrorsFound); + EXPECT_ENUM_EQ(AutoSizingResultType::NoError, sizer.errorType); EXPECT_TRUE(sizer.wasAutoSized); - EXPECT_NEAR(3.0, sizedValue, 0.01); // 0.1% of 3000 W capacity + EXPECT_NEAR(3000.0, sizedValue, 0.01); // 100% of 3000 W capacity state->dataWaterCoils->WaterCoil(1).InletAirTemp = 21.0; state->dataSize->DataErrorsFound = false; sizer.dataErrorsFound = false; @@ -272,9 +272,9 @@ TEST_F(AutoSizingFixture, WaterHeatingCoilUASizingGauntlet) EXPECT_ENUM_EQ(AutoSizingResultType::ErrorType1, sizer.errorType); EXPECT_TRUE(sizer.wasAutoSized); EXPECT_TRUE(errorsFound); - EXPECT_TRUE(state->dataSize->DataErrorsFound); - EXPECT_TRUE(sizer.dataErrorsFound); - EXPECT_NEAR(3.0, sizedValue, 0.01); // 0.1% of 3000 W capacity + EXPECT_FALSE(state->dataSize->DataErrorsFound); + EXPECT_FALSE(sizer.dataErrorsFound); + EXPECT_NEAR(3000.0, sizedValue, 0.01); // 100% of 3000 W capacity state->dataWaterCoils->WaterCoil(1).InletAirTemp = 21.0; state->dataSize->DataErrorsFound = false; sizer.dataErrorsFound = false;