From 23a947e6db9d95df4e8c692e85e76abb74bcca8c Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Thu, 19 May 2016 17:13:14 -0600 Subject: [PATCH 01/10] Fix PTHP air flow to use actual flow rate instead of rated flow rate. --- src/EnergyPlus/Fans.cc | 4 +++ src/EnergyPlus/PackagedTerminalHeatPump.cc | 38 +++++++++++----------- src/EnergyPlus/Pumps.cc | 1 + 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/EnergyPlus/Fans.cc b/src/EnergyPlus/Fans.cc index f04364c8751..227e69e610e 100644 --- a/src/EnergyPlus/Fans.cc +++ b/src/EnergyPlus/Fans.cc @@ -2504,6 +2504,10 @@ namespace Fans { Node( OutletNode ).GenContam = Node( InletNode ).GenContam; } + assert(Node( InletNode ).MassFlowRate == Fan( FanNum ).InletAirMassFlowRate); + assert(Node( OutletNode ).MassFlowRate == Fan( FanNum ).OutletAirMassFlowRate); + assert(Node( InletNode ).MassFlowRate == Node( OutletNode ).MassFlowRate); + } // End of Update subroutines for the Fan Module diff --git a/src/EnergyPlus/PackagedTerminalHeatPump.cc b/src/EnergyPlus/PackagedTerminalHeatPump.cc index 5fa2eb62166..566211c1182 100644 --- a/src/EnergyPlus/PackagedTerminalHeatPump.cc +++ b/src/EnergyPlus/PackagedTerminalHeatPump.cc @@ -6476,10 +6476,10 @@ namespace PackagedTerminalHeatPump { } if ( HeatingLoad && ( PTUnit( PTUnitNum ).UnitType_Num == PTACUnit ) ) { - CompOnMassFlow = PTUnit( PTUnitNum ).CoolMassFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); - CompOnFlowRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( PTUnit( PTUnitNum ).NumOfSpeedCooling ); - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).CoolMassFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).CoolMassFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); + CompOnFlowRatio = 1.0; + CompOnMassFlow = PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MaxCoolAirMassFlow; AverageUnitMassFlow = ( PartLoadRatio * CompOnMassFlow ) + ( ( 1 - PartLoadRatio ) * CompOffMassFlow ); if ( CompOffFlowRatio > 0.0 ) { FanSpeedRatio = ( PartLoadRatio * CompOnFlowRatio ) + ( ( 1 - PartLoadRatio ) * CompOffFlowRatio ); @@ -6490,27 +6490,27 @@ namespace PackagedTerminalHeatPump { if ( present( SpeedNum ) ) { if ( HeatingLoad ) { if ( SpeedNum == 1 ) { - CompOnMassFlow = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ); CompOnFlowRatio = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ); - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).HeatMassFlowRate( 1 ); - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).HeatMassFlowRate( 1 ); + CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; } else if ( SpeedNum > 1 ) { - CompOnMassFlow = SpeedRatio * PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum - 1 ); CompOnFlowRatio = SpeedRatio * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum - 1 ); - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum - 1 ); - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ); + CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum - 1 ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; } } else if ( PTUnit( PTUnitNum ).HeatCoolMode == CoolingMode ) { if ( SpeedNum == 1 ) { - CompOnMassFlow = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ); CompOnFlowRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ); - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ); - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ); + CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; } else if ( SpeedNum > 1 ) { - CompOnMassFlow = SpeedRatio * PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum - 1 ); CompOnFlowRatio = SpeedRatio * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum - 1 ); - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum - 1 ); - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ); + CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum - 1 ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; } } } @@ -6519,14 +6519,14 @@ namespace PackagedTerminalHeatPump { if ( PTUnit( PTUnitNum ).OpMode == ContFanCycCoil && present( SpeedNum ) ) { if ( PTUnit( PTUnitNum ).AirFlowControl == UseCompressorOnFlow && CompOnMassFlow > 0.0 ) { if ( SpeedNum == 1 ) { //LOWEST SPEED USE IDLE FLOW - CompOffMassFlow = PTUnit( PTUnitNum ).IdleMassFlowRate; CompOffFlowRatio = PTUnit( PTUnitNum ).IdleSpeedRatio; + CompOffMassFlow = PTUnit( PTUnitNum ).IdleMassFlowRate; } else if ( PTUnit( PTUnitNum ).LastMode == HeatingMode ) { - CompOffMassFlow = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ); CompOffFlowRatio = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ); + CompOffMassFlow = CompOffFlowRatio * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; } else { - CompOffMassFlow = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ); CompOffFlowRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ); + CompOffMassFlow = CompOffFlowRatio * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; } } } diff --git a/src/EnergyPlus/Pumps.cc b/src/EnergyPlus/Pumps.cc index 4b3065a664a..82f7ac057bd 100644 --- a/src/EnergyPlus/Pumps.cc +++ b/src/EnergyPlus/Pumps.cc @@ -1707,6 +1707,7 @@ namespace Pumps { Node( OutletNode ).Press = Node( InletNode ).Press; Node( OutletNode ).Quality = Node( InletNode ).Quality; + assert(Node( OutletNode ).MassFlowRate == Node( InletNode ).MassFlowRate); } //*************************************************************************! From 3eae46aefee42a0bb0526e3369fa465accec23cb Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Fri, 20 May 2016 16:31:27 -0600 Subject: [PATCH 02/10] Fix central fan mass conservation issue. --- src/EnergyPlus/SimAirServingZones.cc | 61 +++++++++++++++------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index 272444af211..2334b517330 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -1906,7 +1906,7 @@ namespace SimAirServingZones { FoundCentralHeatCoil = true; } } // end of component loop - } // end of Branch loop + } // end of Branch loop PrimaryAirSystem( AirLoopNum ).CentralHeatCoilExists = FoundCentralHeatCoil; } // end of AirLoop loop @@ -2077,7 +2077,12 @@ namespace SimAirServingZones { // [DC/LBNL] Save previous mass flow rate MassFlowSaved = Node( NodeNumIn ).MassFlowRate; - Node( NodeNumIn ).MassFlowRate = AirLoopFlow( AirLoopNum ).DesSupply; + if (TurnFansOn && !TurnFansOff) { + Node( NodeNumIn ).MassFlowRate = AirLoopFlow( AirLoopNum ).DesSupply; + } + else { + Node( NodeNumIn ).MassFlowRate = 0.0; + } // [DC/LBNL] Detect if air mass flow rate has changed since last air loop simulation if ( Node( NodeNumIn ).MassFlowRate != MassFlowSaved ) { @@ -6028,7 +6033,7 @@ namespace SimAirServingZones { // Specify the heating supply air Temp/HumRat for different system configurations for ( AirLoopNum = 1; AirLoopNum <= NumPrimaryAirSys; ++AirLoopNum ) { - + NumZonesHeated = AirToZoneNodeInfo( AirLoopNum ).NumZonesHeated; if ( NumZonesHeated > 0 ) { // IF there are centrally heated zones @@ -6361,7 +6366,7 @@ namespace SimAirServingZones { Real64 GetHeatingSATempForSizing( - int const IndexAirLoop // air loop index + int const IndexAirLoop // air loop index ) { @@ -6372,8 +6377,8 @@ namespace SimAirServingZones { // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: - // This subroutine get the proper reheat coil inlet temperature for sizing, depending on - // the system configurations: + // This subroutine get the proper reheat coil inlet temperature for sizing, depending on + // the system configurations: // (1) Central heating coils exist // (2) No central heating coils, but preheating coils or OA heat-exchangers exist // (3) No central heating coils; No preheating coils or OA heat-exchangers @@ -6397,7 +6402,7 @@ namespace SimAirServingZones { Real64 ReheatCoilInHumRatForSizing; // Humidity ratio of the reheat coil inlet air [kg/kg] Real64 ReheatCoilInEnthalpyForSizing; // Enthalpy of the reheat coil inlet air [J/kg] Real64 OutAirFrac; - + // SUBROUTINE ARGUMENT DEFINITIONS: // SUBROUTINE PARAMETER DEFINITIONS: @@ -6410,12 +6415,12 @@ namespace SimAirServingZones { // na // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - + if ( PrimaryAirSystem( IndexAirLoop ).CentralHeatCoilExists ){ //Case: Central heating coils exist - + ReheatCoilInTempForSizing = CalcSysSizing( IndexAirLoop ).HeatSupTemp; - + } else if ( ( PrimaryAirSystem( IndexAirLoop ).NumOAHeatCoils > 0 ) || ( PrimaryAirSystem( IndexAirLoop ).NumOAHXs ) ) { //Case: No central heating coils, but preheating coils or OA heat-exchangers exist @@ -6428,26 +6433,26 @@ namespace SimAirServingZones { // Mixed air humidity ratio and enthalpy ReheatCoilInHumRatForSizing = OutAirFrac * FinalSysSizing( IndexAirLoop ).PreheatHumRat + ( 1 - OutAirFrac ) * FinalSysSizing( IndexAirLoop ).HeatRetHumRat; - ReheatCoilInEnthalpyForSizing = OutAirFrac * PsyHFnTdbW( FinalSysSizing( IndexAirLoop ).PreheatTemp, FinalSysSizing( IndexAirLoop ).PreheatHumRat ) + ReheatCoilInEnthalpyForSizing = OutAirFrac * PsyHFnTdbW( FinalSysSizing( IndexAirLoop ).PreheatTemp, FinalSysSizing( IndexAirLoop ).PreheatHumRat ) + ( 1 - OutAirFrac ) * PsyHFnTdbW( FinalSysSizing( IndexAirLoop ).HeatRetTemp, FinalSysSizing( IndexAirLoop ).HeatRetHumRat ); // Mixed air dry bulb temperature ReheatCoilInTempForSizing = PsyTdbFnHW( ReheatCoilInEnthalpyForSizing, ReheatCoilInHumRatForSizing ); - + } else { //Case: No central heating coils; No preheating coils or OA heat-exchangers - + ReheatCoilInTempForSizing = FinalSysSizing( IndexAirLoop ).HeatMixTemp; - + } return ReheatCoilInTempForSizing; - + } Real64 GetHeatingSATempHumRatForSizing( - int const IndexAirLoop // air loop index + int const IndexAirLoop // air loop index ) { @@ -6458,8 +6463,8 @@ namespace SimAirServingZones { // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: - // This subroutine get the proper reheat coil inlet humidity ratio for sizing, depending on - // the system configurations: + // This subroutine get the proper reheat coil inlet humidity ratio for sizing, depending on + // the system configurations: // (1) Central heating coils exist // (2) No central heating coils, but preheating coils or OA heat-exchangers exist // (3) No central heating coils; No preheating coils or OA heat-exchangers @@ -6473,13 +6478,13 @@ namespace SimAirServingZones { // Using/Aliasing using namespace DataSizing; using DataAirSystems::PrimaryAirSystem; - + // USE ZoneAirLoopEquipmentManager, ONLY: GetZoneAirLoopEquipment // Locals Real64 ReheatCoilInHumRatForSizing; Real64 OutAirFrac; - + // SUBROUTINE ARGUMENT DEFINITIONS: // SUBROUTINE PARAMETER DEFINITIONS: @@ -6492,12 +6497,12 @@ namespace SimAirServingZones { // na // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - + if ( PrimaryAirSystem( IndexAirLoop ).CentralHeatCoilExists ) { //Case: Central heating coils exist - + ReheatCoilInHumRatForSizing = CalcSysSizing( IndexAirLoop ).HeatSupHumRat; - + } else if ( ( PrimaryAirSystem( IndexAirLoop ).NumOAHeatCoils > 0 ) || ( PrimaryAirSystem( IndexAirLoop ).NumOAHXs ) ) { //Case: No central heating coils, but preheating coils or OA heat-exchangers exist @@ -6509,18 +6514,18 @@ namespace SimAirServingZones { } ReheatCoilInHumRatForSizing = OutAirFrac * FinalSysSizing( IndexAirLoop ).PreheatHumRat + ( 1 - OutAirFrac ) * FinalSysSizing( IndexAirLoop ).HeatRetHumRat; - + } else { //Case: No central heating coils; No preheating coils or OA heat-exchangers - + ReheatCoilInHumRatForSizing = FinalSysSizing( IndexAirLoop ).HeatMixHumRat; - + } return ReheatCoilInHumRatForSizing; - + } - + // End Algorithm Section of the Module // ***************************************************************************** From 3d49396181277ccbf3c407f9a48526c7da34548b Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Wed, 25 May 2016 20:00:58 -0600 Subject: [PATCH 03/10] Move mass balance check. --- src/EnergyPlus/Fans.cc | 4 ---- src/EnergyPlus/HVACManager.cc | 26 +++++++++++++++++++++++++- src/EnergyPlus/HVACManager.hh | 3 +++ src/EnergyPlus/Pumps.cc | 1 - src/EnergyPlus/SimAirServingZones.cc | 7 +------ 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/EnergyPlus/Fans.cc b/src/EnergyPlus/Fans.cc index 227e69e610e..f04364c8751 100644 --- a/src/EnergyPlus/Fans.cc +++ b/src/EnergyPlus/Fans.cc @@ -2504,10 +2504,6 @@ namespace Fans { Node( OutletNode ).GenContam = Node( InletNode ).GenContam; } - assert(Node( InletNode ).MassFlowRate == Fan( FanNum ).InletAirMassFlowRate); - assert(Node( OutletNode ).MassFlowRate == Fan( FanNum ).OutletAirMassFlowRate); - assert(Node( InletNode ).MassFlowRate == Node( OutletNode ).MassFlowRate); - } // End of Update subroutines for the Fan Module diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index 8b521c29cc4..033c214ae72 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -92,6 +92,7 @@ #include //#include #include +#include #include #include #include @@ -106,6 +107,7 @@ #include #include #include +#include #include #include #include @@ -515,6 +517,8 @@ namespace HVACManager { ManageEMS( emsCallFromEndSystemTimestepBeforeHVACReporting, anyEMSRan ); // EMS calling point + CheckMassBalances(); + // This is where output processor data is updated for System Timestep reporting if ( ! WarmupFlag ) { if ( DoOutputReporting ) { @@ -855,7 +859,7 @@ namespace HVACManager { ++HVACManageIteration; // Increment the iteration counter if ( anyEMSRan && HVACManageIteration <= 2 ) { - // the calling point emsCallFromHVACIterationLoop is only effective for air loops if this while loop runs at least twice + // the calling point emsCallFromHVACIterationLoop is only effective for air loops if this while loop runs at least twice SimAirLoopsFlag = true; } @@ -2725,6 +2729,26 @@ namespace HVACManager { } + void + CheckMassBalances() + { + using namespace Fans; + using namespace Pumps; + + for (int FanNum = 1; FanNum <= NumFans; ++FanNum) { + assert(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate == Fan( FanNum ).InletAirMassFlowRate); + assert(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate == Fan( FanNum ).OutletAirMassFlowRate); + assert(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate == Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate); + } + + for (int PumpNum = 1; PumpNum <= NumPumps; ++PumpNum) { + assert(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate == Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate); + } + + + } + + } // HVACManager } // EnergyPlus diff --git a/src/EnergyPlus/HVACManager.hh b/src/EnergyPlus/HVACManager.hh index e2f8ecddbad..99ef7ad409b 100644 --- a/src/EnergyPlus/HVACManager.hh +++ b/src/EnergyPlus/HVACManager.hh @@ -91,6 +91,9 @@ namespace HVACManager { void SimHVAC(); + void + CheckMassBalances(); + void SimSelectedEquipment( bool & SimAirLoops, // True when the air loops need to be (re)simulated diff --git a/src/EnergyPlus/Pumps.cc b/src/EnergyPlus/Pumps.cc index 82f7ac057bd..4b3065a664a 100644 --- a/src/EnergyPlus/Pumps.cc +++ b/src/EnergyPlus/Pumps.cc @@ -1707,7 +1707,6 @@ namespace Pumps { Node( OutletNode ).Press = Node( InletNode ).Press; Node( OutletNode ).Quality = Node( InletNode ).Quality; - assert(Node( OutletNode ).MassFlowRate == Node( InletNode ).MassFlowRate); } //*************************************************************************! diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index 2334b517330..427592b99c5 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -2077,12 +2077,7 @@ namespace SimAirServingZones { // [DC/LBNL] Save previous mass flow rate MassFlowSaved = Node( NodeNumIn ).MassFlowRate; - if (TurnFansOn && !TurnFansOff) { - Node( NodeNumIn ).MassFlowRate = AirLoopFlow( AirLoopNum ).DesSupply; - } - else { - Node( NodeNumIn ).MassFlowRate = 0.0; - } + Node( NodeNumIn ).MassFlowRate = AirLoopFlow( AirLoopNum ).DesSupply; // [DC/LBNL] Detect if air mass flow rate has changed since last air loop simulation if ( Node( NodeNumIn ).MassFlowRate != MassFlowSaved ) { From 51bdf295147b0405d40b2b904cf4303880d1d639 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Fri, 10 Jun 2016 16:34:27 -0600 Subject: [PATCH 04/10] Move VS airflow fix to an earlier section of code so that intermediate variables are set correctly. Make assertions into real, informative errors. --- src/EnergyPlus/HVACManager.cc | 26 ++++++++-- src/EnergyPlus/PackagedTerminalHeatPump.cc | 55 +++++++++++----------- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index 033c214ae72..c9af849f004 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -72,6 +72,7 @@ //#include #include #include +#include #include #include #include @@ -2734,15 +2735,30 @@ namespace HVACManager { { using namespace Fans; using namespace Pumps; - + using General::RoundSigDigits; + using DataHVACGlobals::SmallMassFlow; // Air + using DataBranchAirLoopPlant::MassFlowTolerance; // Liquid + for (int FanNum = 1; FanNum <= NumFans; ++FanNum) { - assert(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate == Fan( FanNum ).InletAirMassFlowRate); - assert(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate == Fan( FanNum ).OutletAirMassFlowRate); - assert(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate == Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate); + + if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) > SmallMassFlow) { + ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).InletAirMassFlowRate, 4) + ") does not match inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); + } + + if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { + ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); + } + + if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate) > SmallMassFlow) { + ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); + } + } for (int PumpNum = 1; PumpNum <= NumPumps; ++PumpNum) { - assert(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate == Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate); + if (abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate) > MassFlowTolerance) { + ShowFatalError(cPumpTypes(PumpEquip( PumpNum ).PumpType) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9) + ")."); + } } diff --git a/src/EnergyPlus/PackagedTerminalHeatPump.cc b/src/EnergyPlus/PackagedTerminalHeatPump.cc index 566211c1182..84aac7b7cbb 100644 --- a/src/EnergyPlus/PackagedTerminalHeatPump.cc +++ b/src/EnergyPlus/PackagedTerminalHeatPump.cc @@ -2851,7 +2851,6 @@ namespace PackagedTerminalHeatPump { int i; // Loop index int Iter; // speed iteration count int PTObjectIndex; - Real64 MulSpeedFlowScale; // variable speed air flow scaling factor int CtrlZoneNum; // the controlled zone index (index of ZoneEquipConfig) InNode = PTUnit( PTUnitNum ).AirInNode; @@ -2980,16 +2979,19 @@ namespace PackagedTerminalHeatPump { MySizeFlag( PTUnitNum ) = false; } + RhoAir = StdRhoAir; + PTUnit( PTUnitNum ).MaxCoolAirMassFlow = RhoAir * PTUnit( PTUnitNum ).MaxCoolAirVolFlow; + PTUnit( PTUnitNum ).MaxHeatAirMassFlow = RhoAir * PTUnit( PTUnitNum ).MaxHeatAirVolFlow; + if ( PTUnit( PTUnitNum ).useVSCoilModel && PTUnit( PTUnitNum ).NumOfSpeedCooling == 0 && ! MySizeFlag( PTUnitNum ) ) { SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXCoolCoilIndexNum, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP PTUnit( PTUnitNum ).NumOfSpeedCooling = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).NumOfSpeeds; - MulSpeedFlowScale = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).RatedAirVolFlowRate / VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).NormSpedLevel ); for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedCooling; ++Iter ) { - PTUnit( PTUnitNum ).CoolVolumeFlowRate( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) * MulSpeedFlowScale; - PTUnit( PTUnitNum ).CoolMassFlowRate( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirMassFlowRate( Iter ) * MulSpeedFlowScale; PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); + PTUnit( PTUnitNum ).CoolVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxCoolAirVolFlow * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ); + PTUnit( PTUnitNum ).CoolMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxCoolAirMassFlow * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ); } if ( PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingWaterToAirHPVSEquationFit || PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingAirToAirVariableSpeed ) { @@ -2998,11 +3000,10 @@ namespace PackagedTerminalHeatPump { PTUnit( PTUnitNum ).NumOfSpeedHeating = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).NumOfSpeeds; - MulSpeedFlowScale = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).RatedAirVolFlowRate / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).NormSpedLevel ); for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedHeating; ++Iter ) { - PTUnit( PTUnitNum ).HeatVolumeFlowRate( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( Iter ) * MulSpeedFlowScale; - PTUnit( PTUnitNum ).HeatMassFlowRate( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirMassFlowRate( Iter ) * MulSpeedFlowScale; PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedHeating ); + PTUnit( PTUnitNum ).HeatVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirVolFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); + PTUnit( PTUnitNum ).HeatMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirMassFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); } } // intialize idle flow @@ -3120,7 +3121,6 @@ namespace PackagedTerminalHeatPump { ShowContinueError( " Occurs in " + CurrentModuleObject + " = " + PTUnit( PTUnitNum ).Name ); PTUnit( PTUnitNum ).IdleVolumeAirRate = PTUnit( PTUnitNum ).FanVolFlow; } - RhoAir = StdRhoAir; // set the mass flow rates from the reset volume flow rates for ( i = 1; i <= NumOfSpeedCooling; ++i ) { PTUnit( PTUnitNum ).CoolMassFlowRate( i ) = RhoAir * PTUnit( PTUnitNum ).CoolVolumeFlowRate( i ); @@ -6476,10 +6476,10 @@ namespace PackagedTerminalHeatPump { } if ( HeatingLoad && ( PTUnit( PTUnitNum ).UnitType_Num == PTACUnit ) ) { - CompOnFlowRatio = 1.0; - CompOnMassFlow = PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + CompOnMassFlow = PTUnit( PTUnitNum ).CoolMassFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); + CompOnFlowRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( PTUnit( PTUnitNum ).NumOfSpeedCooling ); + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).CoolMassFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).CoolMassFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); AverageUnitMassFlow = ( PartLoadRatio * CompOnMassFlow ) + ( ( 1 - PartLoadRatio ) * CompOffMassFlow ); if ( CompOffFlowRatio > 0.0 ) { FanSpeedRatio = ( PartLoadRatio * CompOnFlowRatio ) + ( ( 1 - PartLoadRatio ) * CompOffFlowRatio ); @@ -6490,28 +6490,27 @@ namespace PackagedTerminalHeatPump { if ( present( SpeedNum ) ) { if ( HeatingLoad ) { if ( SpeedNum == 1 ) { + CompOnMassFlow = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ); CompOnFlowRatio = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ); - CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).HeatMassFlowRate( 1 ); + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).HeatMassFlowRate( 1 ); } else if ( SpeedNum > 1 ) { + CompOnMassFlow = SpeedRatio * PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum - 1 ); CompOnFlowRatio = SpeedRatio * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum - 1 ); - CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum - 1 ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ) * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum - 1 ); + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ); } } else if ( PTUnit( PTUnitNum ).HeatCoolMode == CoolingMode ) { if ( SpeedNum == 1 ) { + CompOnMassFlow = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ); CompOnFlowRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ); - CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ); + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ); } else if ( SpeedNum > 1 ) { + CompOnMassFlow = SpeedRatio * PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum - 1 ); CompOnFlowRatio = SpeedRatio * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ) + ( 1.0 - SpeedRatio ) * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum - 1 ); - CompOnMassFlow = CompOnFlowRatio * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - MSHPMassFlowRateLow = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum - 1 ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ) * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; - } + MSHPMassFlowRateLow = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum - 1 ); + MSHPMassFlowRateHigh = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ); } } } @@ -6519,14 +6518,14 @@ namespace PackagedTerminalHeatPump { if ( PTUnit( PTUnitNum ).OpMode == ContFanCycCoil && present( SpeedNum ) ) { if ( PTUnit( PTUnitNum ).AirFlowControl == UseCompressorOnFlow && CompOnMassFlow > 0.0 ) { if ( SpeedNum == 1 ) { //LOWEST SPEED USE IDLE FLOW - CompOffFlowRatio = PTUnit( PTUnitNum ).IdleSpeedRatio; CompOffMassFlow = PTUnit( PTUnitNum ).IdleMassFlowRate; + CompOffFlowRatio = PTUnit( PTUnitNum ).IdleSpeedRatio; } else if ( PTUnit( PTUnitNum ).LastMode == HeatingMode ) { + CompOffMassFlow = PTUnit( PTUnitNum ).HeatMassFlowRate( SpeedNum ); CompOffFlowRatio = PTUnit( PTUnitNum ).MSHeatingSpeedRatio( SpeedNum ); - CompOffMassFlow = CompOffFlowRatio * PTUnit( PTUnitNum ).MaxHeatAirMassFlow; } else { + CompOffMassFlow = PTUnit( PTUnitNum ).CoolMassFlowRate( SpeedNum ); CompOffFlowRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( SpeedNum ); - CompOffMassFlow = CompOffFlowRatio * PTUnit( PTUnitNum ).MaxCoolAirMassFlow; } } } From 9df86cd15e3f2d407aca5adc525c1155a1eb8dc4 Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Fri, 10 Jun 2016 23:37:43 -0400 Subject: [PATCH 05/10] Moved VS coil air flow init inside sizing IF --- src/EnergyPlus/HVACManager.cc | 23 +++++--- src/EnergyPlus/PackagedTerminalHeatPump.cc | 68 +++++++++++----------- 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index c9af849f004..556c019a732 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -2741,23 +2741,28 @@ namespace HVACManager { for (int FanNum = 1; FanNum <= NumFans; ++FanNum) { - if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) > SmallMassFlow) { - ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).InletAirMassFlowRate, 4) + ") does not match inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); - } - - if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { - ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); - } +// if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) > SmallMassFlow) { +// ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).InletAirMassFlowRate, 4) + ") does not match inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); +// } +// +// if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { +// ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); +// } if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate) > SmallMassFlow) { - ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); +// ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); +// can we get a handle on why this is happening before we start crashing user files? + ShowSevereError( Fan( FanNum ).FanType + ", Name: " + Fan( FanNum ).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4 ) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4 ) + ")." ); + ShowContinueErrorTimeStamp( "" ); } } for (int PumpNum = 1; PumpNum <= NumPumps; ++PumpNum) { if (abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate) > MassFlowTolerance) { - ShowFatalError(cPumpTypes(PumpEquip( PumpNum ).PumpType) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9) + ")."); +// ShowFatalError(cPumpTypes(PumpEquip( PumpNum ).PumpType) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9) + ")."); + ShowSevereError( cPumpTypes( PumpEquip( PumpNum ).PumpType ) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9 ) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9 ) + ")." ); + ShowContinueErrorTimeStamp( "" ); } } diff --git a/src/EnergyPlus/PackagedTerminalHeatPump.cc b/src/EnergyPlus/PackagedTerminalHeatPump.cc index 84aac7b7cbb..037b4ee86f1 100644 --- a/src/EnergyPlus/PackagedTerminalHeatPump.cc +++ b/src/EnergyPlus/PackagedTerminalHeatPump.cc @@ -2977,51 +2977,51 @@ namespace PackagedTerminalHeatPump { if ( ! SysSizingCalc && MySizeFlag( PTUnitNum ) ) { SizePTUnit( PTUnitNum ); MySizeFlag( PTUnitNum ) = false; - } - RhoAir = StdRhoAir; - PTUnit( PTUnitNum ).MaxCoolAirMassFlow = RhoAir * PTUnit( PTUnitNum ).MaxCoolAirVolFlow; - PTUnit( PTUnitNum ).MaxHeatAirMassFlow = RhoAir * PTUnit( PTUnitNum ).MaxHeatAirVolFlow; + RhoAir = StdRhoAir; + PTUnit( PTUnitNum ).MaxCoolAirMassFlow = RhoAir * PTUnit( PTUnitNum ).MaxCoolAirVolFlow; + PTUnit( PTUnitNum ).MaxHeatAirMassFlow = RhoAir * PTUnit( PTUnitNum ).MaxHeatAirVolFlow; - if ( PTUnit( PTUnitNum ).useVSCoilModel && PTUnit( PTUnitNum ).NumOfSpeedCooling == 0 && ! MySizeFlag( PTUnitNum ) ) { + if ( PTUnit( PTUnitNum ).useVSCoilModel && PTUnit( PTUnitNum ).NumOfSpeedCooling == 0 ) { - SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXCoolCoilIndexNum, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP - PTUnit( PTUnitNum ).NumOfSpeedCooling = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).NumOfSpeeds; + SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXCoolCoilIndexNum, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP + PTUnit( PTUnitNum ).NumOfSpeedCooling = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).NumOfSpeeds; - for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedCooling; ++Iter ) { - PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); - PTUnit( PTUnitNum ).CoolVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxCoolAirVolFlow * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ); - PTUnit( PTUnitNum ).CoolMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxCoolAirMassFlow * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ); - } + for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedCooling; ++Iter ) { + PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXCoolCoilIndexNum ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedCooling ); + PTUnit( PTUnitNum ).CoolVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxCoolAirVolFlow * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ); + PTUnit( PTUnitNum ).CoolMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxCoolAirMassFlow * PTUnit( PTUnitNum ).MSCoolingSpeedRatio( Iter ); + } - if ( PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingWaterToAirHPVSEquationFit || PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingAirToAirVariableSpeed ) { + if ( PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingWaterToAirHPVSEquationFit || PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingAirToAirVariableSpeed ) { - SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXHeatCoilIndex, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP + SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXHeatCoilIndex, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP - PTUnit( PTUnitNum ).NumOfSpeedHeating = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).NumOfSpeeds; + PTUnit( PTUnitNum ).NumOfSpeedHeating = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).NumOfSpeeds; - for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedHeating; ++Iter ) { - PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedHeating ); - PTUnit( PTUnitNum ).HeatVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirVolFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); - PTUnit( PTUnitNum ).HeatMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirMassFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); + for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedHeating; ++Iter ) { + PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedHeating ); + PTUnit( PTUnitNum ).HeatVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirVolFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); + PTUnit( PTUnitNum ).HeatMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirMassFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); + } } - } - // intialize idle flow + // intialize idle flow - if ( PTUnit( PTUnitNum ).NumOfSpeedHeating > 0 ) { - PTUnit( PTUnitNum ).IdleMassFlowRate = min( PTUnit( PTUnitNum ).HeatMassFlowRate( 1 ), PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ) ); - PTUnit( PTUnitNum ).IdleSpeedRatio = min( PTUnit( PTUnitNum ).MSHeatingSpeedRatio( 1 ), PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ) ); - PTUnit( PTUnitNum ).IdleVolumeAirRate = min( PTUnit( PTUnitNum ).HeatVolumeFlowRate( 1 ), PTUnit( PTUnitNum ).CoolVolumeFlowRate( 1 ) ); - } else { - PTUnit( PTUnitNum ).IdleMassFlowRate = PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ); - PTUnit( PTUnitNum ).IdleSpeedRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ); - PTUnit( PTUnitNum ).IdleVolumeAirRate = PTUnit( PTUnitNum ).CoolVolumeFlowRate( 1 ); - } + if ( PTUnit( PTUnitNum ).NumOfSpeedHeating > 0 ) { + PTUnit( PTUnitNum ).IdleMassFlowRate = min( PTUnit( PTUnitNum ).HeatMassFlowRate( 1 ), PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ) ); + PTUnit( PTUnitNum ).IdleSpeedRatio = min( PTUnit( PTUnitNum ).MSHeatingSpeedRatio( 1 ), PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ) ); + PTUnit( PTUnitNum ).IdleVolumeAirRate = min( PTUnit( PTUnitNum ).HeatVolumeFlowRate( 1 ), PTUnit( PTUnitNum ).CoolVolumeFlowRate( 1 ) ); + } else { + PTUnit( PTUnitNum ).IdleMassFlowRate = PTUnit( PTUnitNum ).CoolMassFlowRate( 1 ); + PTUnit( PTUnitNum ).IdleSpeedRatio = PTUnit( PTUnitNum ).MSCoolingSpeedRatio( 1 ); + PTUnit( PTUnitNum ).IdleVolumeAirRate = PTUnit( PTUnitNum ).CoolVolumeFlowRate( 1 ); + } - if ( PTUnit( PTUnitNum ).OpMode == ContFanCycCoil ) { - PTUnit( PTUnitNum ).MaxNoCoolHeatAirVolFlow = PTUnit( PTUnitNum ).IdleVolumeAirRate; - PTUnit( PTUnitNum ).MaxNoCoolHeatAirMassFlow = PTUnit( PTUnitNum ).IdleMassFlowRate; - PTUnit( PTUnitNum ).NoHeatCoolSpeedRatio = PTUnit( PTUnitNum ).IdleSpeedRatio; + if ( PTUnit( PTUnitNum ).OpMode == ContFanCycCoil ) { + PTUnit( PTUnitNum ).MaxNoCoolHeatAirVolFlow = PTUnit( PTUnitNum ).IdleVolumeAirRate; + PTUnit( PTUnitNum ).MaxNoCoolHeatAirMassFlow = PTUnit( PTUnitNum ).IdleMassFlowRate; + PTUnit( PTUnitNum ).NoHeatCoolSpeedRatio = PTUnit( PTUnitNum ).IdleSpeedRatio; + } } } From 403c8d218faa539c0867cdbc3bd48055bdddef88 Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Fri, 8 Jul 2016 16:27:40 -0400 Subject: [PATCH 06/10] Convert conservation warnings to RecurringAtEnd. Also not sure if PTHP got merged correctly. --- src/EnergyPlus/Fans.hh | 6 +++ src/EnergyPlus/HVACManager.cc | 47 +++++++++++++++------- src/EnergyPlus/PackagedTerminalHeatPump.cc | 18 ++------- src/EnergyPlus/Pumps.hh | 6 ++- 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/EnergyPlus/Fans.hh b/src/EnergyPlus/Fans.hh index 09ea0e5be84..46e35e86119 100644 --- a/src/EnergyPlus/Fans.hh +++ b/src/EnergyPlus/Fans.hh @@ -221,6 +221,12 @@ namespace Fans { int BalancedFractSchedNum; // schedule index portion recirculated Real64 UnbalancedOutletMassFlowRate; Real64 BalancedOutletMassFlowRate; + int FanInletVsNodeFlowNotMatchingIter; // counter for node flow warning messages + int FanOutletVsNodeFlowNotMatchingIter; // counter for node flow warning messages + int FanInletVsFanOutletFlowNotMatchingIter; // counter for node flow warning messages + int FanInletVsNodeFlowNotMatchingIndex; // index for node flow warning messages + int FanOutletVsNodeFlowNotMatchingIndex; // index for node flow warning messages + int FanInletVsFanOutletFlowNotMatchingIndex; // index for node flow warning messages // Default Constructor FanEquipConditions() : diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index 556c019a732..788e798ff2a 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -2741,28 +2741,47 @@ namespace HVACManager { for (int FanNum = 1; FanNum <= NumFans; ++FanNum) { -// if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) > SmallMassFlow) { -// ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).InletAirMassFlowRate, 4) + ") does not match inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); -// } -// -// if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { -// ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); -// } + if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) > SmallMassFlow) { + ++Fan( FanNum ).FanInletVsNodeFlowNotMatchingIter; + if ( Fan( FanNum ).FanInletVsNodeFlowNotMatchingIter == 1 ) { + ShowSevereError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).InletAirMassFlowRate, 4) + ") does not match inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); + ShowContinueErrorTimeStamp( "" ); + } else { + ShowRecurringWarningErrorAtEnd( Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate does not match error continues...", Fan( FanNum ).FanInletVsNodeFlowNotMatchingIndex, abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate), abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) ); + } + } + + if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { + ++Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIter; + if ( Fan( FanNum ).FanInletVsNodeFlowNotMatchingIter == 1 ) { + ShowSevereError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); + ShowContinueErrorTimeStamp( "" ); + } else { + ShowRecurringWarningErrorAtEnd( Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate does not match error continues...", Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIndex, abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate), abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) ); + } + } if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate) > SmallMassFlow) { -// ShowFatalError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); -// can we get a handle on why this is happening before we start crashing user files? - ShowSevereError( Fan( FanNum ).FanType + ", Name: " + Fan( FanNum ).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4 ) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4 ) + ")." ); - ShowContinueErrorTimeStamp( "" ); + ++Fan( FanNum ).FanInletVsFanOutletFlowNotMatchingIter; + if ( Fan( FanNum ).FanInletVsFanOutletFlowNotMatchingIter == 1 ) { + ShowSevereError( Fan( FanNum ).FanType + ", Name: " + Fan( FanNum ).FanName + ": Fan outlet node mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4 ) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4 ) + ")." ); + ShowContinueErrorTimeStamp( "" ); + } else { + ShowRecurringWarningErrorAtEnd( Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet node mass flow rate does not match error continues...", Fan( FanNum ).FanInletVsFanOutletFlowNotMatchingIndex, abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate), abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate) ); + } } } for (int PumpNum = 1; PumpNum <= NumPumps; ++PumpNum) { if (abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate) > MassFlowTolerance) { -// ShowFatalError(cPumpTypes(PumpEquip( PumpNum ).PumpType) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits(Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9) + ")."); - ShowSevereError( cPumpTypes( PumpEquip( PumpNum ).PumpType ) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9 ) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9 ) + ")." ); - ShowContinueErrorTimeStamp( "" ); + ++PumpEquip( PumpNum ).PumpInVsPumpOutFlowNotMatchingIter; + if ( PumpEquip( PumpNum ).PumpInVsPumpOutFlowNotMatchingIter == 1 ) { + ShowSevereError( cPumpTypes( PumpEquip( PumpNum ).PumpType ) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9 ) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9 ) + ")." ); + ShowContinueErrorTimeStamp( "" ); + } else { + ShowRecurringWarningErrorAtEnd( cPumpTypes( PumpEquip( PumpNum ).PumpType ) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate does not match error continues...", PumpEquip( PumpNum ).PumpInVsPumpOutFlowNotMatchingIndex, abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate), abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate) ); + } } } diff --git a/src/EnergyPlus/PackagedTerminalHeatPump.cc b/src/EnergyPlus/PackagedTerminalHeatPump.cc index 7e3fbe3981c..550d1eb3fe8 100644 --- a/src/EnergyPlus/PackagedTerminalHeatPump.cc +++ b/src/EnergyPlus/PackagedTerminalHeatPump.cc @@ -3003,27 +3003,15 @@ namespace PackagedTerminalHeatPump { if ( PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingWaterToAirHPVSEquationFit || PTUnit( PTUnitNum ).DXHeatCoilType_Num == Coil_HeatingAirToAirVariableSpeed ) { -<<<<<<< HEAD - SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXHeatCoilIndex, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP + SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXHeatCoilIndexNum, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP - PTUnit( PTUnitNum ).NumOfSpeedHeating = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).NumOfSpeeds; + PTUnit( PTUnitNum ).NumOfSpeedHeating = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).NumOfSpeeds; for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedHeating; ++Iter ) { - PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndex ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedHeating ); + PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedHeating ); PTUnit( PTUnitNum ).HeatVolumeFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirVolFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); PTUnit( PTUnitNum ).HeatMassFlowRate( Iter ) = PTUnit( PTUnitNum ).MaxHeatAirMassFlow * PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ); } -======= - SimVariableSpeedCoils( "", PTUnit( PTUnitNum ).DXHeatCoilIndexNum, 0, PTUnit( PTUnitNum ).MaxONOFFCyclesperHour, PTUnit( PTUnitNum ).HPTimeConstant, PTUnit( PTUnitNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP - - PTUnit( PTUnitNum ).NumOfSpeedHeating = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).NumOfSpeeds; - - MulSpeedFlowScale = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).RatedAirVolFlowRate / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirVolFlowRate( VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).NormSpedLevel ); - for ( Iter = 1; Iter <= PTUnit( PTUnitNum ).NumOfSpeedHeating; ++Iter ) { - PTUnit( PTUnitNum ).HeatVolumeFlowRate( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) * MulSpeedFlowScale; - PTUnit( PTUnitNum ).HeatMassFlowRate( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirMassFlowRate( Iter ) * MulSpeedFlowScale; - PTUnit( PTUnitNum ).MSHeatingSpeedRatio( Iter ) = VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirVolFlowRate( Iter ) / VarSpeedCoil( PTUnit( PTUnitNum ).DXHeatCoilIndexNum ).MSRatedAirVolFlowRate( PTUnit( PTUnitNum ).NumOfSpeedHeating ); ->>>>>>> develop } // intialize idle flow diff --git a/src/EnergyPlus/Pumps.hh b/src/EnergyPlus/Pumps.hh index f3117442791..128dd528fd2 100644 --- a/src/EnergyPlus/Pumps.hh +++ b/src/EnergyPlus/Pumps.hh @@ -222,6 +222,8 @@ namespace Pumps { int ZoneNum; // index for zone surrounding pump Real64 SkinLossRadFraction; // radiative split for skin losses to zone bool LoopSolverOverwriteFlag; // loop solver overwrite for determining pump minimum flow rate + int PumpInVsPumpOutFlowNotMatchingIter; // counter for node flow warning messages + int PumpInVsPumpOutFlowNotMatchingIndex; // index for node flow warning messages // Default Constructor PumpSpecs() : @@ -281,7 +283,9 @@ namespace Pumps { HeatLossesToZone( false ), ZoneNum( 0 ), SkinLossRadFraction( 0.0 ), - LoopSolverOverwriteFlag( false ) + LoopSolverOverwriteFlag( false ), + PumpInVsPumpOutFlowNotMatchingIter( 0 ), + PumpInVsPumpOutFlowNotMatchingIndex( 0 ) {} }; From 370a6a80ffb816da15f66f6f3d2a37a98fcdbbe7 Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Fri, 8 Jul 2016 16:44:48 -0400 Subject: [PATCH 07/10] Correct cut-n-paste error with variable name --- src/EnergyPlus/HVACManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index 788e798ff2a..16dc5b6494a 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -2753,7 +2753,7 @@ namespace HVACManager { if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { ++Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIter; - if ( Fan( FanNum ).FanInletVsNodeFlowNotMatchingIter == 1 ) { + if ( Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIter == 1 ) { ShowSevereError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); ShowContinueErrorTimeStamp( "" ); } else { From cadebde5adbff5aa18030f36ed9dbf8a23bad2de Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Sat, 9 Jul 2016 13:52:54 -0400 Subject: [PATCH 08/10] Initialize warning counter variables --- src/EnergyPlus/Fans.hh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/Fans.hh b/src/EnergyPlus/Fans.hh index 46e35e86119..0a6375736b8 100644 --- a/src/EnergyPlus/Fans.hh +++ b/src/EnergyPlus/Fans.hh @@ -325,7 +325,13 @@ namespace Fans { MinTempLimitSchedNum( 0 ), BalancedFractSchedNum( 0 ), UnbalancedOutletMassFlowRate( 0.0 ), - BalancedOutletMassFlowRate( 0.0 ) + BalancedOutletMassFlowRate( 0.0 ), + FanInletVsNodeFlowNotMatchingIter( 0 ), + FanOutletVsNodeFlowNotMatchingIter( 0 ), + FanInletVsFanOutletFlowNotMatchingIter( 0 ), + FanInletVsNodeFlowNotMatchingIndex( 0 ), + FanOutletVsNodeFlowNotMatchingIndex( 0 ), + FanInletVsFanOutletFlowNotMatchingIndex( 0 ) {} }; From 9e0edee9c973d4ba01440b1a6938910adbc3c296 Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Mon, 11 Jul 2016 22:33:12 -0400 Subject: [PATCH 09/10] Delete mass conservation warnings --- src/EnergyPlus/Fans.hh | 14 +------- src/EnergyPlus/HVACManager.cc | 64 ----------------------------------- src/EnergyPlus/HVACManager.hh | 3 -- src/EnergyPlus/Pumps.hh | 6 +--- 4 files changed, 2 insertions(+), 85 deletions(-) diff --git a/src/EnergyPlus/Fans.hh b/src/EnergyPlus/Fans.hh index 0a6375736b8..09ea0e5be84 100644 --- a/src/EnergyPlus/Fans.hh +++ b/src/EnergyPlus/Fans.hh @@ -221,12 +221,6 @@ namespace Fans { int BalancedFractSchedNum; // schedule index portion recirculated Real64 UnbalancedOutletMassFlowRate; Real64 BalancedOutletMassFlowRate; - int FanInletVsNodeFlowNotMatchingIter; // counter for node flow warning messages - int FanOutletVsNodeFlowNotMatchingIter; // counter for node flow warning messages - int FanInletVsFanOutletFlowNotMatchingIter; // counter for node flow warning messages - int FanInletVsNodeFlowNotMatchingIndex; // index for node flow warning messages - int FanOutletVsNodeFlowNotMatchingIndex; // index for node flow warning messages - int FanInletVsFanOutletFlowNotMatchingIndex; // index for node flow warning messages // Default Constructor FanEquipConditions() : @@ -325,13 +319,7 @@ namespace Fans { MinTempLimitSchedNum( 0 ), BalancedFractSchedNum( 0 ), UnbalancedOutletMassFlowRate( 0.0 ), - BalancedOutletMassFlowRate( 0.0 ), - FanInletVsNodeFlowNotMatchingIter( 0 ), - FanOutletVsNodeFlowNotMatchingIter( 0 ), - FanInletVsFanOutletFlowNotMatchingIter( 0 ), - FanInletVsNodeFlowNotMatchingIndex( 0 ), - FanOutletVsNodeFlowNotMatchingIndex( 0 ), - FanInletVsFanOutletFlowNotMatchingIndex( 0 ) + BalancedOutletMassFlowRate( 0.0 ) {} }; diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index 16dc5b6494a..747bcd66f38 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -72,7 +72,6 @@ //#include #include #include -#include #include #include #include @@ -93,7 +92,6 @@ #include //#include #include -#include #include #include #include @@ -108,7 +106,6 @@ #include #include #include -#include #include #include #include @@ -518,8 +515,6 @@ namespace HVACManager { ManageEMS( emsCallFromEndSystemTimestepBeforeHVACReporting, anyEMSRan ); // EMS calling point - CheckMassBalances(); - // This is where output processor data is updated for System Timestep reporting if ( ! WarmupFlag ) { if ( DoOutputReporting ) { @@ -2730,65 +2725,6 @@ namespace HVACManager { } - void - CheckMassBalances() - { - using namespace Fans; - using namespace Pumps; - using General::RoundSigDigits; - using DataHVACGlobals::SmallMassFlow; // Air - using DataBranchAirLoopPlant::MassFlowTolerance; // Liquid - - for (int FanNum = 1; FanNum <= NumFans; ++FanNum) { - - if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) > SmallMassFlow) { - ++Fan( FanNum ).FanInletVsNodeFlowNotMatchingIter; - if ( Fan( FanNum ).FanInletVsNodeFlowNotMatchingIter == 1 ) { - ShowSevereError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).InletAirMassFlowRate, 4) + ") does not match inlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4) + ")."); - ShowContinueErrorTimeStamp( "" ); - } else { - ShowRecurringWarningErrorAtEnd( Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan inlet mass flow rate does not match error continues...", Fan( FanNum ).FanInletVsNodeFlowNotMatchingIndex, abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate), abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Fan( FanNum ).InletAirMassFlowRate) ); - } - } - - if (abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) > SmallMassFlow) { - ++Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIter; - if ( Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIter == 1 ) { - ShowSevereError(Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate (" + RoundSigDigits(Fan( FanNum ).OutletAirMassFlowRate, 4) + ") does not match outlet node mass flow rate (" + RoundSigDigits(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4) + ")."); - ShowContinueErrorTimeStamp( "" ); - } else { - ShowRecurringWarningErrorAtEnd( Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet mass flow rate does not match error continues...", Fan( FanNum ).FanOutletVsNodeFlowNotMatchingIndex, abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate), abs(Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate - Fan( FanNum ).OutletAirMassFlowRate) ); - } - } - - if (abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate) > SmallMassFlow) { - ++Fan( FanNum ).FanInletVsFanOutletFlowNotMatchingIter; - if ( Fan( FanNum ).FanInletVsFanOutletFlowNotMatchingIter == 1 ) { - ShowSevereError( Fan( FanNum ).FanType + ", Name: " + Fan( FanNum ).FanName + ": Fan outlet node mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate, 4 ) + ") does not match fan inlet node mass flow rate (" + RoundSigDigits( Node( Fan( FanNum ).InletNodeNum ).MassFlowRate, 4 ) + ")." ); - ShowContinueErrorTimeStamp( "" ); - } else { - ShowRecurringWarningErrorAtEnd( Fan(FanNum).FanType + ", Name: " + Fan(FanNum).FanName + ": Fan outlet node mass flow rate does not match error continues...", Fan( FanNum ).FanInletVsFanOutletFlowNotMatchingIndex, abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate), abs(Node( Fan( FanNum ).InletNodeNum ).MassFlowRate - Node( Fan( FanNum ).OutletNodeNum ).MassFlowRate) ); - } - } - - } - - for (int PumpNum = 1; PumpNum <= NumPumps; ++PumpNum) { - if (abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate) > MassFlowTolerance) { - ++PumpEquip( PumpNum ).PumpInVsPumpOutFlowNotMatchingIter; - if ( PumpEquip( PumpNum ).PumpInVsPumpOutFlowNotMatchingIter == 1 ) { - ShowSevereError( cPumpTypes( PumpEquip( PumpNum ).PumpType ) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate, 9 ) + ") does not match pump inlet node mass flow rate (" + RoundSigDigits( Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate, 9 ) + ")." ); - ShowContinueErrorTimeStamp( "" ); - } else { - ShowRecurringWarningErrorAtEnd( cPumpTypes( PumpEquip( PumpNum ).PumpType ) + ", Name: " + PumpEquip( PumpNum ).Name + ": Pump outlet mass flow rate does not match error continues...", PumpEquip( PumpNum ).PumpInVsPumpOutFlowNotMatchingIndex, abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate), abs(Node( PumpEquip( PumpNum ).OutletNodeNum ).MassFlowRate - Node( PumpEquip( PumpNum ).InletNodeNum ).MassFlowRate) ); - } - } - } - - - } - - } // HVACManager } // EnergyPlus diff --git a/src/EnergyPlus/HVACManager.hh b/src/EnergyPlus/HVACManager.hh index 99ef7ad409b..e2f8ecddbad 100644 --- a/src/EnergyPlus/HVACManager.hh +++ b/src/EnergyPlus/HVACManager.hh @@ -91,9 +91,6 @@ namespace HVACManager { void SimHVAC(); - void - CheckMassBalances(); - void SimSelectedEquipment( bool & SimAirLoops, // True when the air loops need to be (re)simulated diff --git a/src/EnergyPlus/Pumps.hh b/src/EnergyPlus/Pumps.hh index 128dd528fd2..f3117442791 100644 --- a/src/EnergyPlus/Pumps.hh +++ b/src/EnergyPlus/Pumps.hh @@ -222,8 +222,6 @@ namespace Pumps { int ZoneNum; // index for zone surrounding pump Real64 SkinLossRadFraction; // radiative split for skin losses to zone bool LoopSolverOverwriteFlag; // loop solver overwrite for determining pump minimum flow rate - int PumpInVsPumpOutFlowNotMatchingIter; // counter for node flow warning messages - int PumpInVsPumpOutFlowNotMatchingIndex; // index for node flow warning messages // Default Constructor PumpSpecs() : @@ -283,9 +281,7 @@ namespace Pumps { HeatLossesToZone( false ), ZoneNum( 0 ), SkinLossRadFraction( 0.0 ), - LoopSolverOverwriteFlag( false ), - PumpInVsPumpOutFlowNotMatchingIter( 0 ), - PumpInVsPumpOutFlowNotMatchingIndex( 0 ) + LoopSolverOverwriteFlag( false ) {} }; From 44599a81f3b6a1c54dd92c447678e00a062a860d Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Thu, 14 Jul 2016 16:03:06 -0400 Subject: [PATCH 10/10] Modified unit test to include air flow tests for VS coil --- .../unit/PackagedTerminalHeatPump.unit.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index 618b03a8158..f88b1c8ae16 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -504,5 +504,23 @@ namespace EnergyPlus { EXPECT_EQ( Fan( 1 ).MaxAirFlowRate, max( VariableSpeedCoils::VarSpeedCoil( 1 ).RatedAirVolFlowRate, VariableSpeedCoils::VarSpeedCoil( 2 ).RatedAirVolFlowRate ) ); EXPECT_EQ( Fan( 1 ).MaxAirFlowRate, max( PTUnit( 1 ).MaxCoolAirVolFlow, PTUnit( 1 ).MaxHeatAirVolFlow ) ); + // Initialize the packaged terminal heat pump + Real64 OnOffAirFlowRatio( 1.0 ); // ratio of compressor ON airflow to average airflow over timestep + Real64 ZoneLoad( 0.0 );// cooling or heating needed by zone [watts] + + InitPTUnit( 1, DataSizing::CurZoneEqNum, true, OnOffAirFlowRatio, ZoneLoad ); + + // check that an intermediate speed has the correct flow ratio + Real64 refAirflowRatio = 0.530468926 / 0.891980668; // speed 4 reference cooling data and full flow rate at speed 9 + Real64 expectedAirFlowRate = refAirflowRatio * PTUnit( 1 ).MaxCoolAirVolFlow; + EXPECT_NEAR( expectedAirFlowRate, PTUnit( 1 ).CoolVolumeFlowRate( 4 ), 0.00001 ); + EXPECT_NEAR( expectedAirFlowRate, 3.9343830134190632, 0.00001 ); + + refAirflowRatio = 0.530468926 / 0.891980668; // speed 4 reference heating data and full flow rate at speed 9 + expectedAirFlowRate = refAirflowRatio * PTUnit( 1 ).MaxHeatAirVolFlow; + EXPECT_NEAR( expectedAirFlowRate, PTUnit( 1 ).HeatVolumeFlowRate( 4 ), 0.00001 ); + EXPECT_NEAR( expectedAirFlowRate, 3.0302392264439715, 0.00001 ); + + } }