From 8bf38189344914bb91c547e352358972b5ce9058 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 31 Mar 2023 12:06:05 -0500 Subject: [PATCH 1/3] Unit test attempt --- tst/EnergyPlus/unit/Furnaces.unit.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tst/EnergyPlus/unit/Furnaces.unit.cc b/tst/EnergyPlus/unit/Furnaces.unit.cc index 7a781ed3f7a..fa5d6d39d9b 100644 --- a/tst/EnergyPlus/unit/Furnaces.unit.cc +++ b/tst/EnergyPlus/unit/Furnaces.unit.cc @@ -1192,6 +1192,15 @@ TEST_F(EnergyPlusFixture, UnitaryHeatPumpAirToAir_MaxSuppAirTempTest) EXPECT_FALSE(state->dataFurnaces->CoolingLoad); // check if the air-to-air heat pump outlet temperature is capped at 45.0C EXPECT_NEAR(45.0, state->dataLoopNodes->Node(state->dataFurnaces->Furnace(1).FurnaceOutletNodeNum).Temp, 0.000001); + EXPECT_NEAR(0.3326, state->dataLoopNodes->Node(state->dataFurnaces->Furnace(1).FurnaceOutletNodeNum).MassFlowRate, 0.0001); + EXPECT_NEAR(121.06458, state->dataFurnaces->Furnace(1).SensibleLoadMet, 0.001); + + // Test airflow when fan is forced off + state->dataHVACGlobal->TurnFansOn = false; + state->dataHVACGlobal->TurnFansOff = true; + SimFurnace(*state, state->dataFurnaces->Furnace(1).Name, FirstHVACIteration, AirLoopNum, CompIndex); + EXPECT_NEAR(0.0, state->dataLoopNodes->Node(state->dataFurnaces->Furnace(1).FurnaceOutletNodeNum).MassFlowRate, 0.000001); + EXPECT_NEAR(0.0, state->dataFurnaces->Furnace(1).SensibleLoadMet, 0.001); } TEST_F(EnergyPlusFixture, Furnaces_SetMinOATCompressor) From d87db53f301748fe0965056a0f376539e72d186f Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 31 Mar 2023 12:15:16 -0500 Subject: [PATCH 2/3] Minimal fix for VS furnace airflow when airloop is off --- src/EnergyPlus/Furnaces.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/Furnaces.cc b/src/EnergyPlus/Furnaces.cc index e87ce54f4e6..654d7ca2e1c 100644 --- a/src/EnergyPlus/Furnaces.cc +++ b/src/EnergyPlus/Furnaces.cc @@ -12505,8 +12505,8 @@ namespace Furnaces { } } } - - if (GetCurrentScheduleValue(state, state.dataFurnaces->Furnace(FurnaceNum).SchedPtr) == 0.0) { + if ((GetCurrentScheduleValue(state, state.dataFurnaces->Furnace(FurnaceNum).SchedPtr) == 0.0) || state.dataHVACGlobal->TurnFansOff || + (GetCurrentScheduleValue(state, state.dataFurnaces->Furnace(FurnaceNum).FanAvailSchedPtr) == 0.0 && !state.dataHVACGlobal->TurnFansOn)) { state.dataLoopNodes->Node(InletNode).MassFlowRate = 0.0; OnOffAirFlowRatio = 0.0; } else { From 2d1ae5684269181fec1fd5a9c4a73e7b43909104 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 5 Apr 2023 14:01:28 -0500 Subject: [PATCH 3/3] Extend SetVSHPAirflow unit test --- src/EnergyPlus/Furnaces.cc | 1 + tst/EnergyPlus/unit/Furnaces.unit.cc | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/EnergyPlus/Furnaces.cc b/src/EnergyPlus/Furnaces.cc index 654d7ca2e1c..0e321df2ddd 100644 --- a/src/EnergyPlus/Furnaces.cc +++ b/src/EnergyPlus/Furnaces.cc @@ -12505,6 +12505,7 @@ namespace Furnaces { } } } + if ((GetCurrentScheduleValue(state, state.dataFurnaces->Furnace(FurnaceNum).SchedPtr) == 0.0) || state.dataHVACGlobal->TurnFansOff || (GetCurrentScheduleValue(state, state.dataFurnaces->Furnace(FurnaceNum).FanAvailSchedPtr) == 0.0 && !state.dataHVACGlobal->TurnFansOn)) { state.dataLoopNodes->Node(InletNode).MassFlowRate = 0.0; diff --git a/tst/EnergyPlus/unit/Furnaces.unit.cc b/tst/EnergyPlus/unit/Furnaces.unit.cc index 68f2eff7759..2b80859b3d7 100644 --- a/tst/EnergyPlus/unit/Furnaces.unit.cc +++ b/tst/EnergyPlus/unit/Furnaces.unit.cc @@ -188,6 +188,18 @@ TEST_F(EnergyPlusFixture, SetVSHPAirFlowTest_VSFurnaceFlowTest) EXPECT_DOUBLE_EQ(1.0, OnOffAirFlowRatio); EXPECT_DOUBLE_EQ(1.0, state->dataLoopNodes->Node(state->dataFurnaces->Furnace(FurnaceNum).FurnaceInletNodeNum).MassFlowRate); + // Test availability manager signal + state->dataHVACGlobal->TurnFansOff = true; + state->dataHVACGlobal->TurnFansOn = false; + SetVSHPAirFlow(*state, FurnaceNum, PartLoadRatio, OnOffAirFlowRatio); + EXPECT_DOUBLE_EQ(1.0, state->dataHVACGlobal->MSHPMassFlowRateLow); + EXPECT_DOUBLE_EQ(1.0, state->dataHVACGlobal->MSHPMassFlowRateHigh); + EXPECT_DOUBLE_EQ(0.0, state->dataFurnaces->CompOffMassFlow); + EXPECT_DOUBLE_EQ(1.0, state->dataFurnaces->CompOnMassFlow); + EXPECT_DOUBLE_EQ(0.0, OnOffAirFlowRatio); + EXPECT_DOUBLE_EQ(0.0, state->dataLoopNodes->Node(state->dataFurnaces->Furnace(FurnaceNum).FurnaceInletNodeNum).MassFlowRate); + state->dataHVACGlobal->TurnFansOff = false; + state->dataFurnaces->Furnace(FurnaceNum).NumOfSpeedHeating = 0; state->dataFurnaces->Furnace(FurnaceNum).NumOfSpeedCooling = 1; state->dataFurnaces->HeatingLoad = false;