From 4f79ab334f4ad91c995604c12adef518d19686a5 Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Tue, 16 Apr 2024 11:02:01 -0600 Subject: [PATCH 1/7] Adjust dry-bulb temperature of mixed air if the air state is unphysical. --- src/EnergyPlus/MixedAir.cc | 9 +++ tst/EnergyPlus/unit/MixedAir.unit.cc | 86 ++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index a3193ac1013..d066d6e20bf 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -4693,6 +4693,15 @@ void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) // Mixed air temperature is calculated from the mixed air enthalpy and humidity ratio. state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = Psychrometrics::PsyTdbFnHW(state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat); + + // Check for saturation temperature > dry-bulb temperature and modify temperature at constant enthalpy + auto T_sat = + Psychrometrics::PsyTsatFnHPb(state, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixPressure); + if (state.dataMixedAir->OAMixer(OAMixerNum).MixTemp < T_sat) { + state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = T_sat; + state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = + Psychrometrics::PsyWFnTdbH(state, T_sat, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy); + } } // End of Calculation/Simulation Section of the Module diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 77793bce9c7..0992973dc5d 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7666,4 +7666,90 @@ TEST_F(EnergyPlusFixture, OAController_LowExhaustMassFlowTest) EXPECT_TRUE(AirLoopCntrlInfo.HeatingActiveFlag); EXPECT_EQ(1, curOACntrl.HRHeatingCoilActive); } + +TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) +{ + std::string const idf_objects = delimited_string({ + " OutdoorAir:NodeList,", + " Outdoor Air Inlet; !-Node or NodeList Name 1", + + " Controller:OutdoorAir,", + " OA Controller 1, !- Name", + " Relief Air Outlet Node, !- Relief Air Outlet Node Name", + " Air Loop Inlet Node, !- Return Air Node Name", + " Mixed Air Node, !- Mixed Air Node Name", + " Outdoor Air Inlet, !- Actuator Node Name", + " autosize, !- Minimum Outdoor Air Flow Rate {m3/s}", + " autosize, !- Maximum Outdoor Air Flow Rate {m3/s}", + " DifferentialDryBulb, !- Economizer Control Type", // Economizer should open for this one, so OA flow should be > min OA + " ModulateFlow, !- Economizer Control Action Type", + " 20, !- Economizer Maximum Limit Dry-Bulb Temperature {C}", + " , !- Economizer Maximum Limit Enthalpy {J/kg}", + " , !- Economizer Maximum Limit Dewpoint Temperature {C}", + " , !- Electronic Enthalpy Limit Curve Name", + " , !- Economizer Minimum Limit Dry-Bulb Temperature {C}", + " NoLockout, !- Lockout Type", // No lockout + " FixedMinimum, !- Minimum Limit Type", + " , !- Minimum Outdoor Air Schedule Name", + " , !- Minimum Fraction of Outdoor Air Schedule Name", + " , !- Maximum Fraction of Outdoor Air Schedule Name", + " , !- Mechanical Ventilation Controller Name", + " , !- Time of Day Economizer Control Schedule Name", + " No, !- High Humidity Control", + " , !- Humidistat Control Zone Name", + " , !- High Humidity Outdoor Air Flow Ratio", + " No; !- Control High Indoor Humidity Based on Outdoor Humidity Ratio", + + " OutdoorAir:Mixer,", + " OA Mixer, !- Name", + " Mixed Air Node, !- Mixed Air Node Name", + " Outdoor Air Inlet, !- Outdoor Air Stream Node Name", + " Relief Air Outlet Node, !- Relief Air Stream Node Name", + " Air Loop Inlet Node; !- Return Air Stream Node Name", + + " AirLoopHVAC:ControllerList,", + " OA Sys 1 controller, !- Name", + " Controller:OutdoorAir, !- Controller 1 Object Type", + " OA Controller 1; !- Controller 1 Name", + + " AirLoopHVAC:OutdoorAirSystem:EquipmentList,", + " OA Sys 1 Equipment list, !- Name", + " OutdoorAir:Mixer, !- Component 2 Object Type", + " OA Mixer; !- Component 2 Name", + + " AirLoopHVAC:OutdoorAirSystem,", + " OA Sys 1, !- Name", + " OA Sys 1 controller, !- Controller List Name", + " OA Sys 1 Equipment list; !- Outdoor Air Equipment List Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + GetOAControllerInputs(*state); + + EXPECT_EQ(1, GetNumOAMixers(*state)); + + auto return_node = state->dataMixedAir->OAMixer(1).RetNode; + auto outdoor_air_node = state->dataMixedAir->OAMixer(1).InletNode; + + state->dataLoopNodes->Node(outdoor_air_node).Temp = -17.3; + state->dataLoopNodes->Node(outdoor_air_node).HumRat = 0.0008; + state->dataLoopNodes->Node(outdoor_air_node).Enthalpy = -15312; + state->dataLoopNodes->Node(outdoor_air_node).Press = 99063; + state->dataLoopNodes->Node(outdoor_air_node).MassFlowRate = 0.1223; + state->dataLoopNodes->Node(return_node).Temp = 20.0; + state->dataLoopNodes->Node(return_node).HumRat = 0.0146; + state->dataLoopNodes->Node(return_node).Enthalpy = 57154; + state->dataLoopNodes->Node(return_node).Press = 99063; + state->dataLoopNodes->Node(return_node).MassFlowRate = 0.2923; + + MixedAir::SimOAMixer( + *state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); + + auto T_sat = Psychrometrics::PsyTsatFnHPb( + *state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + + // T_db must be >= T_sat at the mixed-air node to remain physical + EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); +} + } // namespace EnergyPlus From ee3e6d96ef9342eb7193e4b02e191ef46c19d9c4 Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Fri, 21 Jun 2024 13:02:41 -0600 Subject: [PATCH 2/7] Change expected values for OA node in test. --- tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index 69f07912d4c..a8e0a3499d5 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -4009,8 +4009,8 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // EXPECT_NEAR(23.153277047505515, state->dataLoopNodes->Node(11).Temp, 0.001); // ATMixer primary air inlet node, or air loop SAT, T = OAT + fan heat - EXPECT_NEAR(31.1803, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); - EXPECT_NEAR(0.0015, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); + EXPECT_NEAR(34.2002, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); + EXPECT_NEAR(0.0003, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); EXPECT_NEAR(35169.5566, state->dataLoopNodes->Node(ATMixer1PriInNode).Enthalpy, 0.001); // *** this next test is different from develop, air loop is on, this pri/ret flow was 0 before @@ -4027,7 +4027,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // same temperature test as above commented out test (23.15327704750551), now shows 21.2 C // how do you mix 2 air streams with T1in=31.18 and T2in=23.15 and get Tout=21.23 ?? // must be a node enthalpy issue with this unit test? - EXPECT_NEAR(21.2316, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); + EXPECT_NEAR(21.5613, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); EXPECT_NEAR(0.324036, state->dataLoopNodes->Node(ATMixer1AirOutNode).MassFlowRate, 0.001); // mass balance zone 1 ATMixer outlet enthalpy based on pri and sec inlet stream enthalpy From 0c5ec52eb07eb5c02258fd13291fe91f6626b2d0 Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Fri, 21 Jun 2024 13:41:41 -0600 Subject: [PATCH 3/7] Fix formatting. --- tst/EnergyPlus/unit/MixedAir.unit.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 69a088c6788..77338b99c55 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7742,11 +7742,9 @@ TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) state->dataLoopNodes->Node(return_node).Press = 99063; state->dataLoopNodes->Node(return_node).MassFlowRate = 0.2923; - MixedAir::SimOAMixer( - *state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); + MixedAir::SimOAMixer(*state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); - auto T_sat = Psychrometrics::PsyTsatFnHPb( - *state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + auto T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); // T_db must be >= T_sat at the mixed-air node to remain physical EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); From 08348b5cd0248b0403dee70a5ada944fc7be7f5a Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Mon, 24 Jun 2024 16:20:04 -0600 Subject: [PATCH 4/7] Move dataEnvrn settings above any functions that call SetOANodeValues. --- src/EnergyPlus/MixedAir.cc | 2 +- .../unit/PackagedTerminalHeatPump.unit.cc | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index 57884130822..bc658eb3530 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -4683,7 +4683,7 @@ void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) Psychrometrics::PsyTdbFnHW(state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat); // Check for saturation temperature > dry-bulb temperature and modify temperature at constant enthalpy - auto T_sat = + Real64 T_sat = Psychrometrics::PsyTsatFnHPb(state, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixPressure); if (state.dataMixedAir->OAMixer(OAMixerNum).MixTemp < T_sat) { state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = T_sat; diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index a8e0a3499d5..023c2b73188 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -3881,6 +3881,14 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataZoneEnergyDemand->DeadBandOrSetback.allocate(state->dataGlobal->NumOfZones); state->dataZoneEnergyDemand->DeadBandOrSetback = 0.0; + state->dataEnvrn->OutDryBulbTemp = 30.0; + state->dataEnvrn->OutHumRat = 0.0015; + state->dataEnvrn->OutBaroPress = 101325.0; + state->dataEnvrn->OutEnthalpy = Psychrometrics::PsyHFnTdbW(30.0, 0.0015); + state->dataEnvrn->WindSpeed = 4.9; + state->dataEnvrn->WindDir = 270.0; + state->dataEnvrn->StdRhoAir = 1.2; + ZoneAirLoopEquipmentManager::GetZoneAirLoopEquipment(*state); SimAirServingZones::GetAirPathData(*state); state->dataSimAirServingZones->GetAirLoopInputFlag = false; @@ -3902,13 +3910,6 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataZoneEnergyDemand->ZoneSysEnergyDemand(i).RemainingOutputReqToCoolSP = -5000.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(i).RemainingOutputReqToHeatSP = -200.0; } - state->dataEnvrn->OutDryBulbTemp = 30.0; - state->dataEnvrn->OutHumRat = 0.0015; - state->dataEnvrn->OutBaroPress = 101325.0; - state->dataEnvrn->OutEnthalpy = Psychrometrics::PsyHFnTdbW(30.0, 0.0015); - state->dataEnvrn->WindSpeed = 4.9; - state->dataEnvrn->WindDir = 270.0; - state->dataEnvrn->StdRhoAir = 1.2; GetZoneAirSetPoints(*state); state->dataHeatBalFanSys->TempControlType.allocate(6); state->dataHeatBalFanSys->TempControlType = HVAC::ThermostatType::DualSetPointWithDeadBand; @@ -4009,8 +4010,8 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // EXPECT_NEAR(23.153277047505515, state->dataLoopNodes->Node(11).Temp, 0.001); // ATMixer primary air inlet node, or air loop SAT, T = OAT + fan heat - EXPECT_NEAR(34.2002, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); - EXPECT_NEAR(0.0003, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); + EXPECT_NEAR(31.1803, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); + EXPECT_NEAR(0.0015, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); EXPECT_NEAR(35169.5566, state->dataLoopNodes->Node(ATMixer1PriInNode).Enthalpy, 0.001); // *** this next test is different from develop, air loop is on, this pri/ret flow was 0 before @@ -4027,7 +4028,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // same temperature test as above commented out test (23.15327704750551), now shows 21.2 C // how do you mix 2 air streams with T1in=31.18 and T2in=23.15 and get Tout=21.23 ?? // must be a node enthalpy issue with this unit test? - EXPECT_NEAR(21.5613, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); + EXPECT_NEAR(21.2317, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); EXPECT_NEAR(0.324036, state->dataLoopNodes->Node(ATMixer1AirOutNode).MassFlowRate, 0.001); // mass balance zone 1 ATMixer outlet enthalpy based on pri and sec inlet stream enthalpy From a9572ac3fdacb0778e704e85592d152174e54c63 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 15 Jul 2024 12:01:02 -0500 Subject: [PATCH 5/7] Refactor some mixer code into methods --- src/EnergyPlus/MixedAir.cc | 142 +++++++++++++++++-------------------- src/EnergyPlus/MixedAir.hh | 133 ++++++++++++---------------------- 2 files changed, 113 insertions(+), 162 deletions(-) diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index 5d01eff5164..79d6c26c6df 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -758,11 +758,13 @@ void SimOAMixer(EnergyPlusData &state, std::string const &CompName, int &CompInd OAMixerNum = CompIndex; } - InitOAMixer(state, OAMixerNum); + auto &mixer = state.dataMixedAir->OAMixer(OAMixerNum); - CalcOAMixer(state, OAMixerNum); + mixer.InitOAMixer(state); - UpdateOAMixer(state, OAMixerNum); + mixer.CalcOAMixer(state); + + mixer.UpdateOAMixer(state); } void SimOAController(EnergyPlusData &state, std::string const &CtrlName, int &CtrlIndex, bool const FirstHVACIteration, int const AirLoopNum) @@ -3291,7 +3293,7 @@ void InitOAController(EnergyPlusData &state, int const OAControllerNum, bool con } } // namespace MixedAir -void InitOAMixer(EnergyPlusData &state, int const OAMixerNum) +void OAMixerProps::InitOAMixer(EnergyPlusData &state) { // SUBROUTINE INFORMATION: // AUTHOR Fred Buhl @@ -3300,24 +3302,24 @@ void InitOAMixer(EnergyPlusData &state, int const OAMixerNum) // PURPOSE OF THIS SUBROUTINE // Initialize the OAMixer data structure with input node data - int RetNode = state.dataMixedAir->OAMixer(OAMixerNum).RetNode; - int InletNode = state.dataMixedAir->OAMixer(OAMixerNum).InletNode; - int RelNode = state.dataMixedAir->OAMixer(OAMixerNum).RelNode; + int RetNode = this->RetNode; + int InletNode = this->InletNode; + int RelNode = this->RelNode; // Return air stream data - state.dataMixedAir->OAMixer(OAMixerNum).RetTemp = state.dataLoopNodes->Node(RetNode).Temp; - state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat = state.dataLoopNodes->Node(RetNode).HumRat; - state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy = state.dataLoopNodes->Node(RetNode).Enthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).RetPressure = state.dataLoopNodes->Node(RetNode).Press; - state.dataMixedAir->OAMixer(OAMixerNum).RetMassFlowRate = state.dataLoopNodes->Node(RetNode).MassFlowRate; + this->RetTemp = state.dataLoopNodes->Node(RetNode).Temp; + this->RetHumRat = state.dataLoopNodes->Node(RetNode).HumRat; + this->RetEnthalpy = state.dataLoopNodes->Node(RetNode).Enthalpy; + this->RetPressure = state.dataLoopNodes->Node(RetNode).Press; + this->RetMassFlowRate = state.dataLoopNodes->Node(RetNode).MassFlowRate; // Outside air stream data - state.dataMixedAir->OAMixer(OAMixerNum).OATemp = state.dataLoopNodes->Node(InletNode).Temp; - state.dataMixedAir->OAMixer(OAMixerNum).OAHumRat = state.dataLoopNodes->Node(InletNode).HumRat; - state.dataMixedAir->OAMixer(OAMixerNum).OAEnthalpy = state.dataLoopNodes->Node(InletNode).Enthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).OAPressure = state.dataLoopNodes->Node(InletNode).Press; - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate = state.dataLoopNodes->Node(InletNode).MassFlowRate; + this->OATemp = state.dataLoopNodes->Node(InletNode).Temp; + this->OAHumRat = state.dataLoopNodes->Node(InletNode).HumRat; + this->OAEnthalpy = state.dataLoopNodes->Node(InletNode).Enthalpy; + this->OAPressure = state.dataLoopNodes->Node(InletNode).Press; + this->OAMassFlowRate = state.dataLoopNodes->Node(InletNode).MassFlowRate; // Relief air data - state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate = state.dataLoopNodes->Node(RelNode).MassFlowRate; + this->RelMassFlowRate = state.dataLoopNodes->Node(RelNode).MassFlowRate; } void OAControllerProps::CalcOAController(EnergyPlusData &state, int const AirLoopNum, bool const FirstHVACIteration) @@ -4630,7 +4632,8 @@ void OAControllerProps::CalcOAEconomizer(EnergyPlusData &state, this->HighHumCtrlActive = false; } } -void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) + +void OAMixerProps::CalcOAMixer(EnergyPlusData &state) { // SUBROUTINE INFORMATION: @@ -4641,56 +4644,45 @@ void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) // Calculate the mixed air flow and conditions // Define a recirculation mass flow rate - Real64 RecircMassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).RetMassFlowRate - state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate; + Real64 RecircMassFlowRate = this->RetMassFlowRate - this->RelMassFlowRate; // In certain low flow conditions the return air mass flow rate can be below the outside air value established // by the user. This check will ensure that this condition does not result in unphysical air properties. if (RecircMassFlowRate < 0.0) { RecircMassFlowRate = 0.0; - state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).RetMassFlowRate; + this->RelMassFlowRate = this->RetMassFlowRate; } // Pass through the return air conditions to the relief air stream. The return air is "split" to // the relief air and the recirculation air. - state.dataMixedAir->OAMixer(OAMixerNum).RelTemp = state.dataMixedAir->OAMixer(OAMixerNum).RetTemp; - state.dataMixedAir->OAMixer(OAMixerNum).RelHumRat = state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat; - state.dataMixedAir->OAMixer(OAMixerNum).RelEnthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).RelPressure = state.dataMixedAir->OAMixer(OAMixerNum).RetPressure; - Real64 RecircPressure = state.dataMixedAir->OAMixer(OAMixerNum).RetPressure; - Real64 RecircEnthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy; - Real64 RecircHumRat = state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat; + this->RelTemp = this->RetTemp; + this->RelHumRat = this->RetHumRat; + this->RelEnthalpy = this->RetEnthalpy; + this->RelPressure = this->RetPressure; + Real64 RecircPressure = this->RetPressure; + Real64 RecircEnthalpy = this->RetEnthalpy; + Real64 RecircHumRat = this->RetHumRat; // The recirculation air and the outside air are mixed to form the mixed air stream - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate + RecircMassFlowRate; + this->MixMassFlowRate = this->OAMassFlowRate + RecircMassFlowRate; // Check for zero flow - if (state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate <= HVAC::VerySmallMassFlow) { - state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat; - state.dataMixedAir->OAMixer(OAMixerNum).MixPressure = state.dataMixedAir->OAMixer(OAMixerNum).RetPressure; - state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = state.dataMixedAir->OAMixer(OAMixerNum).RetTemp; + if (this->MixMassFlowRate <= HVAC::VerySmallMassFlow) { + this->MixEnthalpy = this->RetEnthalpy; + this->MixHumRat = this->RetHumRat; + this->MixPressure = this->RetPressure; + this->MixTemp = this->RetTemp; return; } - state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy = - (RecircMassFlowRate * RecircEnthalpy + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataMixedAir->OAMixer(OAMixerNum).OAEnthalpy) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; - state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = (RecircMassFlowRate * RecircHumRat + state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * - state.dataMixedAir->OAMixer(OAMixerNum).OAHumRat) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; - state.dataMixedAir->OAMixer(OAMixerNum).MixPressure = - (RecircMassFlowRate * RecircPressure + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataMixedAir->OAMixer(OAMixerNum).OAPressure) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + this->MixEnthalpy = (RecircMassFlowRate * RecircEnthalpy + this->OAMassFlowRate * this->OAEnthalpy) / this->MixMassFlowRate; + this->MixHumRat = (RecircMassFlowRate * RecircHumRat + this->OAMassFlowRate * this->OAHumRat) / this->MixMassFlowRate; + this->MixPressure = (RecircMassFlowRate * RecircPressure + this->OAMassFlowRate * this->OAPressure) / this->MixMassFlowRate; // Mixed air temperature is calculated from the mixed air enthalpy and humidity ratio. - state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = - Psychrometrics::PsyTdbFnHW(state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat); + this->MixTemp = Psychrometrics::PsyTdbFnHW(this->MixEnthalpy, this->MixHumRat); // Check for saturation temperature > dry-bulb temperature and modify temperature at constant enthalpy - Real64 T_sat = - Psychrometrics::PsyTsatFnHPb(state, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixPressure); - if (state.dataMixedAir->OAMixer(OAMixerNum).MixTemp < T_sat) { - state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = T_sat; - state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = - Psychrometrics::PsyWFnTdbH(state, T_sat, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy); + Real64 T_sat = Psychrometrics::PsyTsatFnHPb(state, this->MixEnthalpy, this->MixPressure); + if (this->MixTemp < T_sat) { + this->MixTemp = T_sat; + this->MixHumRat = Psychrometrics::PsyWFnTdbH(state, T_sat, this->MixEnthalpy); } } @@ -4880,7 +4872,7 @@ void OAControllerProps::UpdateOAController(EnergyPlusData &state) } } -void UpdateOAMixer(EnergyPlusData &state, int const OAMixerNum) +void OAMixerProps::UpdateOAMixer(EnergyPlusData &state) const { // SUBROUTINE INFORMATION: @@ -4891,47 +4883,47 @@ void UpdateOAMixer(EnergyPlusData &state, int const OAMixerNum) // Move the results of CalcOAMixer to the affected nodes // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int MixNode = state.dataMixedAir->OAMixer(OAMixerNum).MixNode; - int RelNode = state.dataMixedAir->OAMixer(OAMixerNum).RelNode; - int RetNode = state.dataMixedAir->OAMixer(OAMixerNum).RetNode; + int MixNode = this->MixNode; + int RelNode = this->RelNode; + int RetNode = this->RetNode; // Move mixed air data to the mixed air node - state.dataLoopNodes->Node(MixNode).MassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; - state.dataLoopNodes->Node(MixNode).Temp = state.dataMixedAir->OAMixer(OAMixerNum).MixTemp; - state.dataLoopNodes->Node(MixNode).HumRat = state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat; - state.dataLoopNodes->Node(MixNode).Enthalpy = state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy; - state.dataLoopNodes->Node(MixNode).Press = state.dataMixedAir->OAMixer(OAMixerNum).MixPressure; - state.dataLoopNodes->Node(MixNode).MassFlowRateMaxAvail = state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + state.dataLoopNodes->Node(MixNode).MassFlowRate = this->MixMassFlowRate; + state.dataLoopNodes->Node(MixNode).Temp = this->MixTemp; + state.dataLoopNodes->Node(MixNode).HumRat = this->MixHumRat; + state.dataLoopNodes->Node(MixNode).Enthalpy = this->MixEnthalpy; + state.dataLoopNodes->Node(MixNode).Press = this->MixPressure; + state.dataLoopNodes->Node(MixNode).MassFlowRateMaxAvail = this->MixMassFlowRate; // Move the relief air data to the relief air node - state.dataLoopNodes->Node(RelNode).MassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate; - state.dataLoopNodes->Node(RelNode).Temp = state.dataMixedAir->OAMixer(OAMixerNum).RelTemp; - state.dataLoopNodes->Node(RelNode).HumRat = state.dataMixedAir->OAMixer(OAMixerNum).RelHumRat; - state.dataLoopNodes->Node(RelNode).Enthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RelEnthalpy; - state.dataLoopNodes->Node(RelNode).Press = state.dataMixedAir->OAMixer(OAMixerNum).RelPressure; - state.dataLoopNodes->Node(RelNode).MassFlowRateMaxAvail = state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate; + state.dataLoopNodes->Node(RelNode).MassFlowRate = this->RelMassFlowRate; + state.dataLoopNodes->Node(RelNode).Temp = this->RelTemp; + state.dataLoopNodes->Node(RelNode).HumRat = this->RelHumRat; + state.dataLoopNodes->Node(RelNode).Enthalpy = this->RelEnthalpy; + state.dataLoopNodes->Node(RelNode).Press = this->RelPressure; + state.dataLoopNodes->Node(RelNode).MassFlowRateMaxAvail = this->RelMassFlowRate; if (state.dataContaminantBalance->Contaminant.CO2Simulation) { state.dataLoopNodes->Node(RelNode).CO2 = state.dataLoopNodes->Node(RetNode).CO2; - if (state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate <= HVAC::VerySmallMassFlow) { + if (this->MixMassFlowRate <= HVAC::VerySmallMassFlow) { state.dataLoopNodes->Node(MixNode).CO2 = state.dataLoopNodes->Node(RetNode).CO2; } else { state.dataLoopNodes->Node(MixNode).CO2 = ((state.dataLoopNodes->Node(RetNode).MassFlowRate - state.dataLoopNodes->Node(RelNode).MassFlowRate) * state.dataLoopNodes->Node(RetNode).CO2 + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataContaminantBalance->OutdoorCO2) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + this->OAMassFlowRate * state.dataContaminantBalance->OutdoorCO2) / + this->MixMassFlowRate; } } if (state.dataContaminantBalance->Contaminant.GenericContamSimulation) { state.dataLoopNodes->Node(RelNode).GenContam = state.dataLoopNodes->Node(RetNode).GenContam; - if (state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate <= HVAC::VerySmallMassFlow) { + if (this->MixMassFlowRate <= HVAC::VerySmallMassFlow) { state.dataLoopNodes->Node(MixNode).GenContam = state.dataLoopNodes->Node(RetNode).GenContam; } else { state.dataLoopNodes->Node(MixNode).GenContam = ((state.dataLoopNodes->Node(RetNode).MassFlowRate - state.dataLoopNodes->Node(RelNode).MassFlowRate) * state.dataLoopNodes->Node(RetNode).GenContam + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataContaminantBalance->OutdoorGC) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + this->OAMassFlowRate * state.dataContaminantBalance->OutdoorGC) / + this->MixMassFlowRate; } } } diff --git a/src/EnergyPlus/MixedAir.hh b/src/EnergyPlus/MixedAir.hh index 4fad3e8ac5c..026ca0c8f5a 100644 --- a/src/EnergyPlus/MixedAir.hh +++ b/src/EnergyPlus/MixedAir.hh @@ -57,7 +57,7 @@ // EnergyPlus Headers #include #include -#include +// #include #include #include #include @@ -246,21 +246,17 @@ namespace MixedAir { OALimitFactor OALimitingFactor = OALimitFactor::Invalid; // OA controller limiting factor int OALimitingFactorReport = 0; // OA controller limiting factor - integer for reporting - void CalcOAController(EnergyPlusData &state, int const AirLoopNum, bool const FirstHVACIteration); + void CalcOAController(EnergyPlusData &state, int AirLoopNum, bool FirstHVACIteration); - void CalcOAEconomizer(EnergyPlusData &state, - int const AirLoopNum, - Real64 const OutAirMinFrac, - Real64 &OASignal, - bool &HighHumidityOperationFlag, - bool const FirstHVACIteration); + void CalcOAEconomizer( + EnergyPlusData &state, int AirLoopNum, Real64 OutAirMinFrac, Real64 &OASignal, bool &HighHumidityOperationFlag, bool FirstHVACIteration); void SizeOAController(EnergyPlusData &state); void UpdateOAController(EnergyPlusData &state); void Checksetpoints(EnergyPlusData &state, - Real64 const OutAirMinFrac, // Local variable used to calculate min OA fraction + Real64 OutAirMinFrac, // Local variable used to calculate min OA fraction Real64 &OutAirSignal, // Used to set OA mass flow rate bool &EconomizerOperationFlag // logical used to show economizer status ); @@ -353,6 +349,12 @@ namespace MixedAir { Real64 RetEnthalpy = 0.0; Real64 RetPressure = 0.0; Real64 RetMassFlowRate = 0.0; + + void InitOAMixer(EnergyPlusData &state); + + void CalcOAMixer(EnergyPlusData &state); + + void UpdateOAMixer(EnergyPlusData &state) const; }; // Functions @@ -367,32 +369,28 @@ namespace MixedAir { int GetOAController(EnergyPlusData &state, std::string const &OAName); - void - ManageOutsideAirSystem(EnergyPlusData &state, std::string const &OASysName, bool const FirstHVACIteration, int const AirLoopNum, int &OASysNum); + void ManageOutsideAirSystem(EnergyPlusData &state, std::string const &OASysName, bool FirstHVACIteration, int AirLoopNum, int &OASysNum); - void SimOutsideAirSys(EnergyPlusData &state, int const OASysNum, bool const FirstHVACIteration, int const AirLoopNum); + void SimOutsideAirSys(EnergyPlusData &state, int OASysNum, bool FirstHVACIteration, int AirLoopNum); - void SimOASysComponents(EnergyPlusData &state, int const OASysNum, bool const FirstHVACIteration, int const AirLoopNum); + void SimOASysComponents(EnergyPlusData &state, int OASysNum, bool FirstHVACIteration, int AirLoopNum); void SimOAComponent(EnergyPlusData &state, - std::string const &CompType, // the component type - std::string const &CompName, // the component Name - SimAirServingZones::CompType const CompTypeNum, // Component Type -- Integerized for this module - bool const FirstHVACIteration, + std::string const &CompType, // the component type + std::string const &CompName, // the component Name + SimAirServingZones::CompType CompTypeNum, // Component Type -- Integerized for this module + bool FirstHVACIteration, int &CompIndex, - int const AirLoopNum, // air loop index for economizer lockout coordination - bool const Sim, // if TRUE, simulate component; if FALSE, just set the coil exisitence flags - int const OASysNum, // index to outside air system - bool &OAHeatingCoil, // TRUE indicates a heating coil has been found - bool &OACoolingCoil, // TRUE indicates a cooling coil has been found - bool &OAHX); // TRUE indicates a heat exchanger has been found + int AirLoopNum, // air loop index for economizer lockout coordination + bool Sim, // if TRUE, simulate component; if FALSE, just set the coil exisitence flags + int OASysNum, // index to outside air system + bool &OAHeatingCoil, // TRUE indicates a heating coil has been found + bool &OACoolingCoil, // TRUE indicates a cooling coil has been found + bool &OAHX); // TRUE indicates a heat exchanger has been found void SimOAMixer(EnergyPlusData &state, std::string const &CompName, int &CompIndex); - void SimOAController(EnergyPlusData &state, std::string const &CtrlName, int &CtrlIndex, bool const FirstHVACIteration, int const AirLoopNum); - - // Get Input Section of the Module - //****************************************************************************** + void SimOAController(EnergyPlusData &state, std::string const &CtrlName, int &CtrlIndex, bool FirstHVACIteration, int AirLoopNum); void GetOutsideAirSysInputs(EnergyPlusData &state); @@ -403,8 +401,8 @@ namespace MixedAir { void GetOAMixerInputs(EnergyPlusData &state); void ProcessOAControllerInputs(EnergyPlusData &state, - std::string_view const CurrentModuleObject, - int const OutAirNum, + std::string_view CurrentModuleObject, + int OutAirNum, Array1D_string const &AlphArray, int &NumAlphas, Array1D const &NumArray, @@ -416,45 +414,9 @@ namespace MixedAir { bool &ErrorsFound // If errors found in input ); - // End of Get Input subroutines for the Module - //****************************************************************************** - - // Beginning Initialization Section of the Module - //****************************************************************************** - - void InitOutsideAirSys(EnergyPlusData &state, int const OASysNum, int const AirLoopNum); - - void InitOAController(EnergyPlusData &state, int const OAControllerNum, bool const FirstHVACIteration, int const AirLoopNum); - - void InitOAMixer(EnergyPlusData &state, int const OAMixerNum); - - // End of Initialization Section of the Module - //****************************************************************************** + void InitOutsideAirSys(EnergyPlusData &state, int OASysNum, int AirLoopNum); - // Beginning Calculation Section of the Module - //****************************************************************************** - - void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum); - - // End of Calculation/Simulation Section of the Module - //****************************************************************************** - - // Beginning Sizing Section of the Module - //****************************************************************************** - - // End of Sizing Section of the Module - //****************************************************************************** - - // Beginning Update/Reporting Section of the Module - //****************************************************************************** - - void UpdateOAMixer(EnergyPlusData &state, int const OAMixerNum); - - // End of Sizing Section of the Module - //****************************************************************************** - - // Beginning Utility Section of the Module - //****************************************************************************** + void InitOAController(EnergyPlusData &state, int OAControllerNum, bool FirstHVACIteration, int AirLoopNum); Array1D_int GetOAMixerNodeNumbers(EnergyPlusData &state, std::string const &OAMixerName, // must match OA mixer names for the OA mixer type @@ -465,29 +427,29 @@ namespace MixedAir { int GetNumOAControllers(EnergyPlusData &state); - int GetOAMixerReliefNodeNumber(EnergyPlusData &state, int const OAMixerNum); // Which Mixer + int GetOAMixerReliefNodeNumber(EnergyPlusData &state, int OAMixerNum); // Which Mixer - int GetOASysControllerListIndex(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysControllerListIndex(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumSimpControllers(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumSimpControllers(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumHeatingCoils(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumHeatingCoils(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumHXs(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumHXs(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumCoolingCoils(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumCoolingCoils(EnergyPlusData &state, int OASysNumber); // OA Sys Number int GetOASystemNumber(EnergyPlusData &state, std::string const &OASysName); // OA Sys Name - int FindOAMixerMatchForOASystem(EnergyPlusData &state, int const OASysNumber); // Which OA System + int FindOAMixerMatchForOASystem(EnergyPlusData &state, int OASysNumber); // Which OA System int GetOAMixerIndex(EnergyPlusData &state, std::string const &OAMixerName); // Which Mixer - int GetOAMixerInletNodeNumber(EnergyPlusData &state, int const OAMixerNumber); // Which Mixer + int GetOAMixerInletNodeNumber(EnergyPlusData &state, int OAMixerNumber); // Which Mixer - int GetOAMixerReturnNodeNumber(EnergyPlusData &state, int const OAMixerNumber); // Which Mixer + int GetOAMixerReturnNodeNumber(EnergyPlusData &state, int OAMixerNumber); // Which Mixer - int GetOAMixerMixedNodeNumber(EnergyPlusData &state, int const OAMixerNumber); // Which Mixer + int GetOAMixerMixedNodeNumber(EnergyPlusData &state, int OAMixerNumber); // Which Mixer bool CheckForControllerWaterCoil(EnergyPlusData &state, DataAirLoop::ControllerKind ControllerType, // should be passed in as UPPERCASE @@ -501,28 +463,25 @@ namespace MixedAir { int GetNumOASystems(EnergyPlusData &state); - int GetOACompListNumber(EnergyPlusData &state, int const OASysNum); // OA Sys Number + int GetOACompListNumber(EnergyPlusData &state, int OASysNum); // OA Sys Number std::string GetOACompName(EnergyPlusData &state, - int const OASysNum, // OA Sys Number - int const InListNum // In-list Number + int OASysNum, // OA Sys Number + int InListNum // In-list Number ); std::string GetOACompType(EnergyPlusData &state, - int const OASysNum, // OA Sys Number - int const InListNum // In-list Number + int OASysNum, // OA Sys Number + int InListNum // In-list Number ); SimAirServingZones::CompType GetOACompTypeNum(EnergyPlusData &state, - int const OASysNum, // OA Sys Number - int const InListNum // In-list Number + int OASysNum, // OA Sys Number + int InListNum // In-list Number ); int GetOAMixerNumber(EnergyPlusData &state, std::string const &OAMixerName); // must match OA mixer names for the OA mixer type - // End of Utility Section of the Module - //****************************************************************************** - } // namespace MixedAir struct MixedAirData : BaseGlobalStruct From 472e3e9124979270bd4bdeaab8527a4d514951ad Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 15 Jul 2024 12:04:56 -0500 Subject: [PATCH 6/7] Loosen tolerance on temperature in unit test --- tst/EnergyPlus/unit/MixedAir.unit.cc | 2 +- tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 05da5624374..16ec825ebd1 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7745,7 +7745,7 @@ TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) MixedAir::SimOAMixer(*state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); - auto T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + Real64 const T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); // T_db must be >= T_sat at the mixed-air node to remain physical EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index 023c2b73188..feb753e7edc 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -4028,7 +4028,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // same temperature test as above commented out test (23.15327704750551), now shows 21.2 C // how do you mix 2 air streams with T1in=31.18 and T2in=23.15 and get Tout=21.23 ?? // must be a node enthalpy issue with this unit test? - EXPECT_NEAR(21.2317, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); + EXPECT_NEAR(21.2316, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.005); EXPECT_NEAR(0.324036, state->dataLoopNodes->Node(ATMixer1AirOutNode).MassFlowRate, 0.001); // mass balance zone 1 ATMixer outlet enthalpy based on pri and sec inlet stream enthalpy From abed1f003e7c6def9efec9d40184eb8f161b25f2 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 15 Jul 2024 12:10:48 -0500 Subject: [PATCH 7/7] Clang format --- tst/EnergyPlus/unit/MixedAir.unit.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 16ec825ebd1..47d9a53d472 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7745,7 +7745,8 @@ TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) MixedAir::SimOAMixer(*state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); - Real64 const T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + Real64 const T_sat = + Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); // T_db must be >= T_sat at the mixed-air node to remain physical EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat);