From 806a03265c80f26a64217f2e375c054afa94a087 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Tue, 8 Sep 2015 13:54:58 -0400 Subject: [PATCH 1/5] =?UTF-8?q?This=20issue=20is=20a=20continuous=20fix=20?= =?UTF-8?q?of=20#4536=20(Coil:Cooling:DX:Mul=E2=80=8BtiSpeed=20requires=20?= =?UTF-8?q?Waste=20Heat=20Function=20of=20Temperature=20Curve=20Name=20whe?= =?UTF-8?q?n=20it=20should=20not)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../01d-InputOutputReference.md | 10 +- src/EnergyPlus/DXCoils.cc | 219 ++++++++++++----- src/EnergyPlus/DXCoils.hh | 7 + src/EnergyPlus/HVACMultiSpeedHeatPump.cc | 5 + tst/EnergyPlus/unit/DXCoils.unit.cc | 228 +++++++++++++++++- 5 files changed, 401 insertions(+), 68 deletions(-) diff --git a/doc/src/docs/InputOutputReference/01d-InputOutputReference.md b/doc/src/docs/InputOutputReference/01d-InputOutputReference.md index daa87e955e6..5b10986d321 100644 --- a/doc/src/docs/InputOutputReference/01d-InputOutputReference.md +++ b/doc/src/docs/InputOutputReference/01d-InputOutputReference.md @@ -5367,7 +5367,7 @@ Coil:Cooling:DX:TwoStageWithHumidityControlMode, CoilPerformance:DX:Cooling, !- Normal Mode Stage 1 Coil Performance Object Type DOAS Standard Perf 1, !- Normal Mode Stage 1 Coil Performance Name CoilPerformance:DX:Cooling, !- Normal Mode Stage 1+2 Coil Performance Object Type - DOAS Standard Perf 1+2, !- Normal Mode Stage 1+2 Coil Performance Name + DOAS Standard Perf 1+2, When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issues and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. !- Normal Mode Stage 1+2 Coil Performance Name CoilPerformance:DX:Cooling, !- Dehumidification Mode 1 Stage 1 Coil Performance Object Type DOAS Dehumid Perf 1, !- Dehumidification Mode 1 Stage 1 Coil Performance Name CoilPerformance:DX:Cooling, !- Dehumidification Mode 1 Stage 1+2 Coil Performance Object Type @@ -5406,7 +5406,7 @@ This optional alpha field specifies the outdoor air node name used to define the #### Field: Condenser Type -#### The type of condenser used by the multispeed DX cooling coil. Valid choices for this input field areAirCooled orEvaporativelyCooled. The default for this field isAirCooled. +The type of condenser used by the multispeed DX cooling coil. Valid choices for this input field areAirCooled orEvaporativelyCooled. The default for this field isAirCooled. #### Field: Supply Water Storage Tank Name @@ -5534,7 +5534,7 @@ The fraction of energy input to the cooling coil that is available as recoverabl #### Field: Speed <x> Waste Heat Function of Temperature Curve Name -The name of a biquadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature at Speed <x>. The output of this curve is multiplied by the rated waste heat fraction at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, this field can remain blank since it is ignored by the program in this instance. +The name of a biquadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature at Speed <x>. The output of this curve is multiplied by the rated waste heat fraction at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, this field can remain blank since it is ignored by the program in this instance. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issues and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. #### Field: Speed <x> Evaporative Condenser Effectiveness @@ -6822,8 +6822,6 @@ This is the runtime fraction of the DX heating coil compressor and outdoor fan(s ### Coil:Heating:DX:MultiSpeed -### Coil:Heating:DX:MultiSpeed - This component models a DX heating unit with multiple discrete levels of heating capacity. Currently, this heating coil can only be referenced by a AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed compound object. The multispeed DX heating coil can have from two to four operating speeds. When the coil operates at Speed 1 (the lowest speed), its performance is very similar to the Coil:Heating:DX:SingleSpeed object where the impacts of part-load ratio can be included. When the coil operates at higher speeds (above Speed 1), the linear approximation methodology is applied. The coil outputs at two consecutive speeds are linearly interpolated to meet the required heating capacity during an HVAC system timestep. When the coil performs above the lowest speed, the user can choose if they want to include part-load ratio impacts at the higher speeds. The multispeed unit is described by specifying the performance at different operating speeds. Each speed has its own set of input specifications: full load capacity, COP and air flow rate at rated conditions, along with modifier curves to determine performance when actual operating conditions are different from the rated conditions. @@ -6972,7 +6970,7 @@ The fraction of heat input to heating that is available as recoverable waste hea #### Field: Speed <x> Waste Heat Function of Temperature Curve Name -The name of a bi-quadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature for Speed <x>. The output of this curve is multiplied by the rated recoverable waste heat at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, the field is either left blank or ignored by the program. +The name of a bi-quadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature for Speed <x>. The output of this curve is multiplied by the rated recoverable waste heat at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, the field is either left blank or ignored by the program. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issues and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. #### Field: Zone Name for Evaporator Placement diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index 9da9dd65d0b..9319c92a1ee 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -4076,33 +4076,35 @@ namespace DXCoils { // Read waste heat modifier curve name DXCoil( DXCoilNum ).MSWasteHeat( I ) = GetCurveIndex( Alphas( 18 + ( I - 1 ) * 6 ) ); // convert curve name to number - if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) == 0 ) { - if ( lAlphaBlanks( 18 + ( I - 1 ) * 6 ) ) { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", missing" ); - ShowContinueError( "...required " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " is blank." ); + if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) == 0 ) { + if ( lAlphaBlanks( 18 + ( I - 1 ) * 6 ) ) { + ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", missing" ); + ShowContinueError( "... " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " is blank." ); + } else { + ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); + ShowContinueError( "...not found " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 18 + ( I - 1 ) * 6 ) + "\"." ); + } +// ErrorsFound = true; } else { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); - ShowContinueError( "...not found " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 18 + ( I - 1 ) * 6 ) + "\"." ); - } - ErrorsFound = true; - } else { - // Verify Curve Object, only legal types are BiQuadratic - { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); + // Verify Curve Object, only legal types are BiQuadratic + { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); - if ( SELECT_CASE_var == "BIQUADRATIC" ) { - CurveVal = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( I ), RatedOutdoorAirTemp, RatedInletAirTemp ); - if ( CurveVal > 1.10 || CurveVal < 0.90 ) { - ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", curve values" ); - ShowContinueError( "..." + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " output is not equal to 1.0 (+ or - 10%) at rated conditions." ); - ShowContinueError( "...Curve output at rated conditions = " + TrimSigDigits( CurveVal, 3 ) ); - } + if ( SELECT_CASE_var == "BIQUADRATIC" ) { + CurveVal = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( I ), RatedOutdoorAirTemp, RatedInletAirTemp ); + if ( CurveVal > 1.10 || CurveVal < 0.90 ) { + ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", curve values" ); + ShowContinueError( "..." + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " output is not equal to 1.0 (+ or - 10%) at rated conditions." ); + ShowContinueError( "...Curve output at rated conditions = " + TrimSigDigits( CurveVal, 3 ) ); + } - } else { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); - ShowContinueError( "...illegal " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " type for this object = " + GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); - ShowContinueError( "Curve type must be BiQuadratic." ); - ErrorsFound = true; - }} + } else { + ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); + ShowContinueError( "...illegal " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " type for this object = " + GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); + ShowContinueError( "Curve type must be BiQuadratic." ); + ErrorsFound = true; + }} + } } DXCoil( DXCoilNum ).MSEvapCondEffect( I ) = Numbers( 16 + ( I - 1 ) * 13 ); @@ -4549,7 +4551,7 @@ namespace DXCoils { ErrorsFound = true; }} - if ( ! ErrorsFound ) { + if ( !ErrorsFound ) { // Test PLF curve minimum and maximum. Cap if less than 0.7 or greater than 1.0. MinCurveVal = 999.0; MaxCurveVal = -999.0; @@ -4589,35 +4591,37 @@ namespace DXCoils { // Read waste heat modifier curve name DXCoil( DXCoilNum ).MSWasteHeat( I ) = GetCurveIndex( Alphas( 15 + ( I - 1 ) * 6 ) ); // convert curve name to number - if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) == 0 ) { - if ( lAlphaBlanks( 11 ) ) { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", missing" ); - ShowContinueError( "...required " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " is blank." ); + if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) == 0 ) { + if ( lAlphaBlanks( 11 ) ) { + ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", missing" ); + ShowContinueError( "... " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " is blank." ); + } else { + ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); + ShowContinueError( "...not found " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 15 + ( I - 1 ) * 6 ) + "\"." ); + } + ErrorsFound = true; } else { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); - ShowContinueError( "...not found " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 15 + ( I - 1 ) * 6 ) + "\"." ); - } - ErrorsFound = true; - } else { - // Verify Curve Object, only legal types are BiQuadratic - { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); + // Verify Curve Object, only legal types are BiQuadratic + { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); - if ( SELECT_CASE_var == "BIQUADRATIC" ) { - CurveVal = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( I ), RatedOutdoorAirTempHeat, RatedInletAirTempHeat ); - if ( CurveVal > 1.10 || CurveVal < 0.90 ) { - ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", curve values" ); - ShowContinueError( "..." + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " output is not equal to 1.0 (+ or - 10%) at rated conditions." ); - ShowContinueError( "...Curve output at rated conditions = " + TrimSigDigits( CurveVal, 3 ) ); - } + if ( SELECT_CASE_var == "BIQUADRATIC" ) { + CurveVal = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( I ), RatedOutdoorAirTempHeat, RatedInletAirTempHeat ); + if ( CurveVal > 1.10 || CurveVal < 0.90 ) { + ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", curve values" ); + ShowContinueError( "..." + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " output is not equal to 1.0 (+ or - 10%) at rated conditions." ); + ShowContinueError( "...Curve output at rated conditions = " + TrimSigDigits( CurveVal, 3 ) ); + } - } else { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); - ShowContinueError( "...illegal " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " type for this object = " + GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); - ShowContinueError( "Curve type must be BiQuadratic." ); - ErrorsFound = true; - }} - } + } else { + ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); + ShowContinueError( "...illegal " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " type for this object = " + GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); + ShowContinueError( "Curve type must be BiQuadratic." ); + ErrorsFound = true; + }} + } + } } //A34; \field Zone Name for Condenser Placement if ( !lAlphaBlanks( 34 ) && NumAlphas > 33 ) { @@ -5185,6 +5189,7 @@ namespace DXCoils { int DXCoilNumTemp; // Counter for crankcase heater report variable DO loop int AirInletNode; // Air inlet node number int SecZoneAirNodeNum; // secondary DX coil inlet node number ( secondary zone air node) + int SpeedNum; // Speed number for multispeed coils if ( MyOneTimeFlag ) { // initialize the environment and sizing flags @@ -5228,6 +5233,28 @@ namespace DXCoils { MyEnvrnFlag( DXCoilNum ) = false; } + if ( ( DXCoil( DXCoilNum ).DXCoilType_Num == CoilDX_MultiSpeedCooling || DXCoil( DXCoilNum ).DXCoilType_Num == CoilDX_MultiSpeedHeating ) && MyEnvrnFlag( DXCoilNum ) ) { + if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { + if (DXCoil( DXCoilNum ).MSHPHeatRecActive ) { + for ( SpeedNum = 1; SpeedNum <= DXCoil( DXCoilNum ).NumOfSpeeds; ++SpeedNum ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNum ) == 0 ) { + ShowWarningError( "GetDXCoils:" + DXCoil( DXCoilNum ).Name + ". The value of Waste Heat Function of Temperature Curve is assumed to be 1. Simulation continues. " ); + break; + } + } + } else { + for ( SpeedNum = 1; SpeedNum <= DXCoil( DXCoilNum ).NumOfSpeeds; ++SpeedNum ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNum ) == 0 ) { + ShowWarningError( "GetDXCoils:" + DXCoil( DXCoilNum ).Name + ". Since the parent object does not require waste heat, the input of Waste Heat Function of Temperature Curve value is not required." ); + break; + } + } + + } + } + MyEnvrnFlag( DXCoilNum ) = false; + } + // Find the companion upstream coil (DX cooling coil) that is used with DX heating coils (HP AC units only) if ( DXCoil( DXCoilNum ).FindCompanionUpStreamCoil ) { if ( DXCoil( DXCoilNum ).DXCoilType_Num == CoilDX_HeatingEmpirical || DXCoil( DXCoilNum ).DXCoilType_Num == CoilDX_MultiSpeedHeating ) { @@ -10459,9 +10486,19 @@ Label50: ; HeatReclaimDXCoil( DXCoilNum ).AvailCapacity = DXCoil( DXCoilNum ).TotalCoolingEnergyRate + DXCoil( DXCoilNum ).ElecCoolingPower; // Waste heat calculation - WasteHeatLS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ); - WasteHeatHS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumHS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumHS ); - MSHPWasteHeat = ( SpeedRatio * WasteHeatHS + ( 1.0 - SpeedRatio ) * WasteHeatLS ) * DXCoil( DXCoilNum ).ElecCoolingPower; + if ( DXCoil( DXCoilNum ).MSHPHeatRecActive ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ) == 0 ) { + WasteHeatLS = DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ); + } else { + WasteHeatLS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ); + } + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumHS ) == 0 ) { + WasteHeatHS = DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumHS ); + } else { + WasteHeatHS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumHS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumHS ); + } + MSHPWasteHeat = ( SpeedRatio * WasteHeatHS + ( 1.0 - SpeedRatio ) * WasteHeatLS ) * DXCoil( DXCoilNum ).ElecCoolingPower; + } // Energy use for other fuel types if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { @@ -10639,8 +10676,13 @@ Label50: ; EvapCondPumpElecPower = DXCoil( DXCoilNum ).MSEvapCondPumpElecNomPower( SpeedNumLS ) * DXCoil( DXCoilNum ).CoolingCoilRuntimeFraction; // Waste heat - MSHPWasteHeat = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ) * DXCoil( DXCoilNum ).ElecCoolingPower; - + if ( DXCoil( DXCoilNum ).MSHPHeatRecActive ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ) == 0 ) { + MSHPWasteHeat = DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ) * DXCoil( DXCoilNum ).ElecCoolingPower; + } else { + MSHPWasteHeat = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ) * DXCoil( DXCoilNum ).ElecCoolingPower; + } + } // Energy use for other fuel types if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { DXCoil( DXCoilNum ).FuelUsed = DXCoil( DXCoilNum ).ElecCoolingPower; @@ -11096,9 +11138,19 @@ Label50: ; } // Waste heat calculation - WasteHeatLS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ); - WasteHeatHS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumHS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumHS ); - MSHPWasteHeat = ( SpeedRatio * WasteHeatHS + ( 1.0 - SpeedRatio ) * WasteHeatLS ) * DXCoil( DXCoilNum ).ElecHeatingPower; + if ( DXCoil( DXCoilNum ).MSHPHeatRecActive ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ) == 0 ) { + WasteHeatLS = DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ); + } else { + WasteHeatLS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ); + } + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumHS ) == 0 ) { + WasteHeatHS = DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumHS ); + } else { + WasteHeatHS = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumHS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumHS ); + } + MSHPWasteHeat = ( SpeedRatio * WasteHeatHS + ( 1.0 - SpeedRatio ) * WasteHeatLS ) * DXCoil( DXCoilNum ).ElecHeatingPower; + } if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { DXCoil( DXCoilNum ).FuelUsed = DXCoil( DXCoilNum ).ElecHeatingPower; DXCoil( DXCoilNum ).ElecHeatingPower = 0.0; @@ -11285,8 +11337,13 @@ Label50: ; OutletAirEnthalpy = InletAirEnthalpy + DXCoil( DXCoilNum ).TotalHeatingEnergyRate / DXCoil( DXCoilNum ).InletAirMassFlowRate; OutletAirTemp = PsyTdbFnHW( OutletAirEnthalpy, OutletAirHumRat ); } - MSHPWasteHeat = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ) * DXCoil( DXCoilNum ).ElecHeatingPower; - + if ( DXCoil( DXCoilNum ).MSHPHeatRecActive ) { + if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ) == 0 ) { + MSHPWasteHeat = DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ) * DXCoil( DXCoilNum ).ElecHeatingPower; + } else { + MSHPWasteHeat = CurveValue( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNumLS ), OutdoorDryBulb, InletAirDryBulbTemp ) * DXCoil( DXCoilNum ).MSWasteHeatFrac( SpeedNumLS ) * DXCoil( DXCoilNum ).ElecHeatingPower; + } + } if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { DXCoil( DXCoilNum ).FuelUsed = DXCoil( DXCoilNum ).ElecHeatingPower; DXCoil( DXCoilNum ).ElecHeatingPower = 0.0; @@ -14005,6 +14062,48 @@ Label50: ; return SHR; } + void + SetMSHPDXCoilHeatRecoveryFlag( int const DXCoilNum ) // + { + + // SUBROUTINE INFORMATION: + // AUTHOR L. Gu + // DATE WRITTEN Sep. 2015 + // MODIFIED na + // RE-ENGINEERED na + + // PURPOSE OF THIS SUBROUTINE: + // Set the heat recovery flag true when the parent object requests heat recovery. + + // METHODOLOGY EMPLOYED: + // + + // REFERENCES: + // na + + // Using/Aliasing + // na + + // Locals + // SUBROUTINE ARGUMENT DEFINITIONS: + + // SUBROUTINE PARAMETER DEFINITIONS: + // na + + // INTERFACE BLOCK SPECIFICATIONS: + // na + + // DERIVED TYPE DEFINITIONS: + // na + + // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + + if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { + DXCoil( DXCoilNum ).MSHPHeatRecActive = true; + } + + } + // Clears the global data in DXCoils. // Needed for unit tests, should not be normally called. void diff --git a/src/EnergyPlus/DXCoils.hh b/src/EnergyPlus/DXCoils.hh index f327f5a459d..472bd2b1266 100644 --- a/src/EnergyPlus/DXCoils.hh +++ b/src/EnergyPlus/DXCoils.hh @@ -398,6 +398,7 @@ namespace DXCoils { Array1D< Real64 > MSFanPowerPerEvapAirFlowRate; Real64 FuelUsed; // Energy used, in addition to electricity [W] Real64 FuelConsumed; // Energy consumed, in addition to electricity [J] + bool MSHPHeatRecActive; // True when entered Heat Rec Vol Flow Rate > 0 // End of multispeed DX coil input // VRF system variables used for sizing bool CoolingCoilPresent; // FALSE if coil not present @@ -626,6 +627,7 @@ namespace DXCoils { NumOfSpeeds( 0 ), PLRImpact( false ), LatentImpact( false ), + MSHPHeatRecActive( false ), CoolingCoilPresent( true ), HeatingCoilPresent( true ), ISHundredPercentDOASDXCoil( false ), @@ -889,6 +891,7 @@ namespace DXCoils { Array1< Real64 > const & MSFanPowerPerEvapAirFlowRate, Real64 const FuelUsed, // Energy used, in addition to electricity [W] Real64 const FuelConsumed, // Energy consumed, in addition to electricity [J] + bool const MSHPHeatRecActive, // True when entered Heat Rec Vol Flow Rate > 0 bool const CoolingCoilPresent, // FALSE if coil not present bool const HeatingCoilPresent, // FALSE if coil not present bool const ISHundredPercentDOASDXCoil, // FALSE if coil is regular dx coil @@ -1147,6 +1150,7 @@ namespace DXCoils { MSFanPowerPerEvapAirFlowRate( MSFanPowerPerEvapAirFlowRate ), FuelUsed( FuelUsed ), FuelConsumed( FuelConsumed ), + MSHPHeatRecActive( MSHPHeatRecActive ), CoolingCoilPresent( CoolingCoilPresent ), HeatingCoilPresent( HeatingCoilPresent ), ISHundredPercentDOASDXCoil( ISHundredPercentDOASDXCoil ), @@ -1595,6 +1599,9 @@ namespace DXCoils { int const SecCoilSHRFF ); + void + SetMSHPDXCoilHeatRecoveryFlag( int const DXCoilNum ); // must match coil names for the coil type + // Clears the global data in DXCoils. // Needed for unit tests, should not be normally called. void diff --git a/src/EnergyPlus/HVACMultiSpeedHeatPump.cc b/src/EnergyPlus/HVACMultiSpeedHeatPump.cc index 3cf36fa75f5..a4b0cfb2a1b 100644 --- a/src/EnergyPlus/HVACMultiSpeedHeatPump.cc +++ b/src/EnergyPlus/HVACMultiSpeedHeatPump.cc @@ -525,6 +525,7 @@ namespace HVACMultiSpeedHeatPump { using FluidProperties::GetSatDensityRefrig; using ZoneTempPredictorCorrector::NumStageCtrZone; using DataZoneControls::StageControlledZone; + using DXCoils::SetMSHPDXCoilHeatRecoveryFlag; // Locals // PARAMETERS @@ -1217,6 +1218,10 @@ namespace HVACMultiSpeedHeatPump { ErrorsFound = true; } TestCompSet( CurrentModuleObject, Alphas( 1 ), Alphas( 16 ), Alphas( 17 ), "MSHP Heat receovery Nodes" ); + SetMSHPDXCoilHeatRecoveryFlag( MSHeatPump( MSHPNum ).DXCoolCoilIndex ); + if ( MSHeatPump( MSHPNum ).DXHeatCoilIndex > 0 ) { + SetMSHPDXCoilHeatRecoveryFlag( MSHeatPump( MSHPNum ).DXHeatCoilIndex ); + } } else { MSHeatPump( MSHPNum ).HeatRecActive = false; MSHeatPump( MSHPNum ).DesignHeatRecMassFlowRate = 0.0; diff --git a/tst/EnergyPlus/unit/DXCoils.unit.cc b/tst/EnergyPlus/unit/DXCoils.unit.cc index 97bbd1bf79e..45a5a844a4b 100644 --- a/tst/EnergyPlus/unit/DXCoils.unit.cc +++ b/tst/EnergyPlus/unit/DXCoils.unit.cc @@ -25,6 +25,7 @@ using namespace DataSizing; using namespace CurveManager; using namespace OutputReportPredefined; using namespace ScheduleManager; +using namespace DataEnvironment; namespace EnergyPlus { @@ -607,7 +608,7 @@ namespace EnergyPlus { } TEST_F( HVACFixture, TestSingleSpeedDefrostCOP ) { - // Test that the COP calculation is correct when the defrost is on. #4973 + // Test that the COP calculation is correct when the defrost is on. #4973 using CurveManager::Quadratic; using CurveManager::BiQuadratic; @@ -892,4 +893,227 @@ namespace EnergyPlus { // clear DXCoil.deallocate(); } -} \ No newline at end of file + + TEST_F( HVACFixture, TestMultiSpeedWasteHeat ) + { + // Test the waste heat function #4536 + + using Psychrometrics::PsyTwbFnTdbWPb; + using Psychrometrics::PsyHFnTdbW; + + std::string const idf_objects = delimited_string( { + "Version,8.3;", + " Schedule:Compact,", + " FanAndCoilAvailSched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 1.0; !- Field 3", + " OutdoorAir:Node,", + " Outdoor Condenser Air Node, !- Name", + " 1.0; !- Height Above Ground{ m }", + " Coil:Cooling:DX:MultiSpeed,", + " Heat Pump ACDXCoil 1, !- Name", + " FanAndCoilAvailSched, !- Availability Schedule Name", + " DX Cooling Coil Air Inlet Node, !- Air Inlet Node Name", + " Heating Coil Air Inlet Node, !- Air Outlet Node Name", + " Outdoor Condenser Air Node, !- Condenser Air Inlet Node Name", + " AirCooled, !- Condenser Type", + " , !- Supply Water Storage Tank Name", + " , !- Condensate Collection Water Storage Tank Name", + " No, !- Apply Part Load Fraction to Speeds Greater than 1", + " No, !- Apply Latent Degradation to Speeds Greater than 1", + " 200.0, !- Crankcase Heater Capacity{ W }", + " 10.0, !- Maximum Outdoor Dry - Bulb Temperature for Crankcase Heater Operation{ C }", + " , !- Basin Heater Capacity{ W / K }", + " , !- Basin Heater Setpoint Temperature{ C }", + " , !- Basin Heater Operating Schedule Name", + " Electricity, !- Fuel Type", + " 4, !- Number of Speeds", + " 7500, !- Speed 1 Gross Rated Total Cooling Capacity{ W }", + " 0.75, !- Speed 1 Gross Rated Sensible Heat Ratio", + " 3.0, !- Speed 1 Gross Rated Cooling COP{ W / W }", + " 0.40, !- Speed 1 Rated Air Flow Rate{ m3 / s }", + " 453.3, !- Rated Evaporator Fan Power Per Volume Flow Rate{ W / ( m3 / s ) }", + " HPACCoolCapFT Speed, !- Speed 1 Total Cooling Capacity Function of Temperature Curve Name", + " HPACCoolCapFF Speed, !- Speed 1 Total Cooling Capacity Function of Flow Fraction Curve Name", + " HPACCOOLEIRFT Speed, !- Speed 1 Energy Input Ratio Function of Temperature Curve Name", + " HPACCOOLEIRFF Speed, !- Speed 1 Energy Input Ratio Function of Flow Fraction Curve Name", + " HPACCOOLPLFFPLR Speed, !- Speed 1 Part Load Fraction Correlation Curve Name", + " 1000.0, !- Speed 1 Nominal Time for Condensate Removal to Begin{ s }", + " 1.5, !- Speed 1 Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity{ dimensionless }", + " 3.0, !- Speed 1 Maximum Cycling Rate{ cycles / hr }", + " 45.0, !- Speed 1 Latent Capacity Time Constant{ s }", + " 0.2, !- Speed 1 Rated Waste Heat Fraction of Power Input{ dimensionless }", + " , !- Speed 1 Waste Heat Function of Temperature Curve Name", + " 0.9, !- Speed 1 Evaporative Condenser Effectiveness{ dimensionless }", + " 0.05, !- Speed 1 Evaporative Condenser Air Flow Rate{ m3 / s }", + " 50, !- Speed 1 Rated Evaporative Condenser Pump Power Consumption{ W }", + " 17500, !- Speed 2 Gross Rated Total Cooling Capacity{ W }", + " 0.75, !- Speed 2 Gross Rated Sensible Heat Ratio", + " 3.0, !- Speed 2 Gross Rated Cooling COP{ W / W }", + " 0.85, !- Speed 2 Rated Air Flow Rate{ m3 / s }", + " 523.3, !- Rated Evaporator Fan Power Per Volume Flow Rate{ W / ( m3 / s ) }", + " HPACCoolCapFT Speed, !- Speed 2 Total Cooling Capacity Function of Temperature Curve Name", + " HPACCoolCapFF Speed, !- Speed 2 Total Cooling Capacity Function of Flow Fraction Curve Name", + " HPACCOOLEIRFT Speed, !- Speed 2 Energy Input Ratio Function of Temperature Curve Name", + " HPACCOOLEIRFF Speed, !- Speed 2 Energy Input Ratio Function of Flow Fraction Curve Name", + " HPACCOOLPLFFPLR Speed, !- Speed 2 Part Load Fraction Correlation Curve Name", + " 1000.0, !- Speed 2 Nominal Time for Condensate Removal to Begin{ s }", + " 1.5, !- Speed 2 Ratio of Initial Moisture Evaporation Rate and steady state Latent Capacity{ dimensionless }", + " 3.0, !- Speed 2 Maximum Cycling Rate{ cycles / hr }", + " 45.0, !- Speed 2 Latent Capacity Time Constant{ s }", + " 0.2, !- Speed 2 Rated Waste Heat Fraction of Power Input{ dimensionless }", + " , !- Speed 2 Waste Heat Function of Temperature Curve Name", + " 0.9, !- Speed 2 Evaporative Condenser Effectiveness{ dimensionless }", + " 0.1, !- Speed 2 Evaporative Condenser Air Flow Rate{ m3 / s }", + " 60, !- Speed 2 Rated Evaporative Condenser Pump Power Consumption{ W }", + " 25500, !- Speed 3 Gross Rated Total Cooling Capacity{ W }", + " 0.75, !- Speed 3 Gross Rated Sensible Heat Ratio", + " 3.0, !- Speed 3 Gross Rated Cooling COP{ W / W }", + " 1.25, !- Speed 3 Rated Air Flow Rate{ m3 / s }", + " 573.3, !- Rated Evaporator Fan Power Per Volume Flow Rate{ W / ( m3 / s ) }", + " HPACCoolCapFT Speed, !- Speed 3 Total Cooling Capacity Function of Temperature Curve Name", + " HPACCoolCapFF Speed, !- Speed 3 Total Cooling Capacity Function of Flow Fraction Curve Name", + " HPACCOOLEIRFT Speed, !- Speed 3 Energy Input Ratio Function of Temperature Curve Name", + " HPACCOOLEIRFF Speed, !- Speed 3 Energy Input Ratio Function of Flow Fraction Curve Name", + " HPACCOOLPLFFPLR Speed, !- Speed 3 Part Load Fraction Correlation Curve Name", + " 1000.0, !- Speed 3 Nominal Time for Condensate Removal to Begin{ s }", + " 1.5, !- Speed 3 Ratio of Initial Moisture Evaporation Rate and steady state Latent Capacity{ dimensionless }", + " 3.0, !- Speed 3 Maximum Cycling Rate{ cycles / hr }", + " 45.0, !- Speed 3 Latent Capacity Time Constant{ s }", + " 0.2, !- Speed 3 Rated Waste Heat Fraction of Power Input{ dimensionless }", + " , !- Speed 3 Waste Heat Function of Temperature Curve Name", + " 0.9, !- Speed 3 Evaporative Condenser Effectiveness{ dimensionless }", + " 0.2, !- Speed 3 Evaporative Condenser Air Flow Rate{ m3 / s }", + " 80, !- Speed 3 Rated Evaporative Condenser Pump Power Consumption{ W }", + " 35500, !- Speed 4 Gross Rated Total Cooling Capacity{ W }", + " 0.75, !- Speed 4 Gross Rated Sensible Heat Ratio", + " 3.0, !- Speed 4 Gross Rated Cooling COP{ W / W }", + " 1.75, !- Speed 4 Rated Air Flow Rate{ m3 / s }", + " 673.3, !- Rated Evaporator Fan Power Per Volume Flow Rate{ W / ( m3 / s ) }", + " HPACCoolCapFT Speed, !- Speed 4 Total Cooling Capacity Function of Temperature Curve Name", + " HPACCoolCapFF Speed, !- Speed 4 Total Cooling Capacity Function of Flow Fraction Curve Name", + " HPACCOOLEIRFT Speed, !- Speed 4 Energy Input Ratio Function of Temperature Curve Name", + " HPACCOOLEIRFF Speed, !- Speed 4 Energy Input Ratio Function of Flow Fraction Curve Name", + " HPACCOOLPLFFPLR Speed, !- Speed 4 Part Load Fraction Correlation Curve Name", + " 1000.0, !- Speed 4 Nominal Time for Condensate Removal to Begin{ s }", + " 1.5, !- Speed 4 Ratio of Initial Moisture Evaporation Rate and steady state Latent Capacity{ dimensionless }", + " 3.0, !- Speed 4 Maximum Cycling Rate{ cycles / hr }", + " 45.0, !- Speed 4 Latent Capacity Time Constant{ s }", + " 0.2, !- Speed 4 Rated Waste Heat Fraction of Power Input{ dimensionless }", + " , !- Speed 4 Waste Heat Function of Temperature Curve Name", + " 0.9, !- Speed 4 Evaporative Condenser Effectiveness{ dimensionless }", + " 0.3, !- Speed 4 Evaporative Condenser Air Flow Rate{ m3 / s }", + " 100; !- Speed 4 Rated Evaporative Condenser Pump Power Consumption{ W }", + " Curve:Biquadratic,", + " HPACCoolCapFT Speed, !- Name", + " 1.0, !- Coefficient1 Constant", + " 0.0, !- Coefficient2 x", + " 0.0, !- Coefficient3 x**2", + " 0.0, !- Coefficient4 y", + " 0.0, !- Coefficient5 y**2", + " 0.0, !- Coefficient6 x*y", + " 12.77778, !- Minimum Value of x", + " 23.88889, !- Maximum Value of x", + " 23.88889, !- Minimum Value of y", + " 46.11111, !- Maximum Value of y", + " , !- Minimum Curve Output", + " , !- Maximum Curve Output", + " Temperature, !- Input Unit Type for X", + " Temperature, !- Input Unit Type for Y", + " Dimensionless; !- Output Unit Type", + " Curve:Cubic,", + " HPACCoolCapFF Speed, !- Name", + " .47278589, !- Coefficient1 Constant", + " 1.2433415, !- Coefficient2 x", + " -1.0387055, !- Coefficient3 x**2", + " .32257813, !- Coefficient4 x**3", + " 0.5, !- Minimum Value of x", + " 1.5; !- Maximum Value of x", + " Curve:Biquadratic,", + " HPACCOOLEIRFT Speed, !- Name", + " 0.632475E+00, !- Coefficient1 Constant", + " -0.121321E-01, !- Coefficient2 x", + " 0.507773E-03, !- Coefficient3 x**2", + " 0.155377E-01, !- Coefficient4 y", + " 0.272840E-03, !- Coefficient5 y**2", + " -0.679201E-03, !- Coefficient6 x*y", + " 12.77778, !- Minimum Value of x", + " 23.88889, !- Maximum Value of x", + " 23.88889, !- Minimum Value of y", + " 46.11111, !- Maximum Value of y", + " , !- Minimum Curve Output", + " , !- Maximum Curve Output", + " Temperature, !- Input Unit Type for X", + " Temperature, !- Input Unit Type for Y", + " Dimensionless; !- Output Unit Type", + "Curve:Cubic,", + " HPACCOOLEIRFF Speed, !- Name", + " .47278589, !- Coefficient1 Constant", + " 1.2433415, !- Coefficient2 x", + " -1.0387055, !- Coefficient3 x**2", + " .32257813, !- Coefficient4 x**3", + " 0.5, !- Minimum Value of x", + " 1.5; !- Maximum Value of x", + "Curve:Quadratic,", + " HPACCOOLPLFFPLR Speed, !- Name", + " 0.85, !- Coefficient1 Constant", + " 0.15, !- Coefficient2 x", + " 0.0, !- Coefficient3 x**2", + " 0.0, !- Minimum Value of x", + " 1.0; !- Maximum Value of x", + } ); + + ASSERT_FALSE( process_idf( idf_objects ) ); + + // Case 1 test + GetDXCoils( ); + + EXPECT_EQ( FuelTypeElectricity, DXCoil( 1 ).FuelType ); + EXPECT_EQ( 0, DXCoil( 1 ).MSWasteHeat( 2 ) ); + + // Test calculations of the waste heat function #5162 + + // Case 2 test waste heat is zero when the parent has not heat recovery inputs + DXCoil( 1 ).FuelType = FuelTypeNaturalGas; + DXCoil( 1 ).MSHPHeatRecActive = false; + + OutDryBulbTemp = 35; + OutHumRat = 0.0128; + OutBaroPress = 101325; + OutWetBulbTemp = PsyTwbFnTdbWPb( OutDryBulbTemp, OutHumRat, OutBaroPress); + + DXCoil( 1 ).MSRatedAirMassFlowRate( 1 ) = DXCoil( 1 ).MSRatedAirVolFlowRate( 1 ) * 1.2; + DXCoil( 1 ).MSRatedAirMassFlowRate( 2 ) = DXCoil( 1 ).MSRatedAirVolFlowRate( 2 ) * 1.2; + DXCoil( 1 ).InletAirMassFlowRate = DXCoil( 1 ).MSRatedAirMassFlowRate( 2 ); + MSHPMassFlowRateLow = DXCoil( 1 ).MSRatedAirMassFlowRate( 1 ); + MSHPMassFlowRateHigh = DXCoil( 1 ).MSRatedAirMassFlowRate( 2 ); + + DXCoil( 1 ).InletAirTemp = 25.0; + DXCoil( 1 ).InletAirHumRat = 0.005; + DXCoil( 1 ).InletAirEnthalpy = PsyHFnTdbW( 25.0, 0.005 ); + + DXCoil( 1 ).SchedPtr = 1; + Schedule( DXCoil( 1 ).SchedPtr ).CurrentValue = 1.0; // enable the VRF condenser + DXCoil( 1 ).MSRatedCBF( 1 ) = 0.1262; + DXCoil( 1 ).MSRatedCBF( 2 ) = 0.0408; + + CalcMultiSpeedDXCoilCooling( 1, 1, 1, 2, 1, 1 ); + + EXPECT_EQ( 0, MSHPWasteHeat ); + + // Case 3 heat recovery is true and no waste heat function cuvre + DXCoil( 1 ).MSWasteHeat( 1 ) = 0; + DXCoil( 1 ).MSWasteHeat( 2 ) = 0; + DXCoil( 1 ).MSHPHeatRecActive = true; + + CalcMultiSpeedDXCoilCooling( 1, 1, 1, 2, 1, 1 ); + + EXPECT_NEAR( 1303.4304, MSHPWasteHeat, 0.001 ); + + // clear + DXCoil.deallocate( ); + + } +} \ No newline at end of file From 0226a4b80057813ec787990a3041afc0f88a3a3d Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Mon, 14 Sep 2015 11:04:10 -0400 Subject: [PATCH 2/5] Removed the \required-field tags in the fields of Speed 1 Waste Heat Function of Temperature Curve Name and Speed 2 Waste Heat Function of Temperature Curve Name in the Coil:Heating:DX:MultiSpeed --- idd/Energy+.idd.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index 568365ec7d9..c0839e55679 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -44421,7 +44421,6 @@ Coil:Heating:DX:MultiSpeed, \maximum 1.0 \note recoverable waste heat at full load and rated conditions A15, \field Speed 1 Waste Heat Function of Temperature Curve Name - \required-field \type object-list \object-list BiquadraticCurves \object-list BiVariateTables @@ -44521,7 +44520,6 @@ Coil:Heating:DX:MultiSpeed, \maximum 1.0 \note recoverable waste heat at full load and rated conditions A21, \field Speed 2 Waste Heat Function of Temperature Curve Name - \required-field \type object-list \object-list BiquadraticCurves \object-list BiVariateTables From 4742ab56f42c005e13d263befb13d777b8fda0ed Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Mon, 14 Sep 2015 15:58:50 -0400 Subject: [PATCH 3/5] Clean up after solving conflicts --- src/EnergyPlus/DXCoils.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index ba92e42a78b..faedca9a4d4 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -4101,11 +4101,6 @@ namespace DXCoils { ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); ShowContinueError( "...not found " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 18 + ( I - 1 ) * 6 ) + "\"." ); } -<<<<<<< .mine -// ErrorsFound = true; -======= - ErrorsFound = true; ->>>>>>> .theirs } else { // Verify Curve Object, only legal types are BiQuadratic { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); From 2e01a54fdb04a94e06b3b3527d34bdb65a2b913e Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 16 Sep 2015 14:58:46 -0400 Subject: [PATCH 4/5] Revised code to remove extra warnings and cleaned up the doc --- .../01d-InputOutputReference.md | 2 +- idd/Energy+.idd.in | 12 +++++--- src/EnergyPlus/DXCoils.cc | 29 ++----------------- tst/EnergyPlus/unit/DXCoils.unit.cc | 2 +- 4 files changed, 12 insertions(+), 33 deletions(-) diff --git a/doc/src/docs/InputOutputReference/01d-InputOutputReference.md b/doc/src/docs/InputOutputReference/01d-InputOutputReference.md index 66fd6994d8f..eb520273203 100644 --- a/doc/src/docs/InputOutputReference/01d-InputOutputReference.md +++ b/doc/src/docs/InputOutputReference/01d-InputOutputReference.md @@ -5600,7 +5600,7 @@ Coil:Cooling:DX:TwoStageWithHumidityControlMode, CoilPerformance:DX:Cooling, !- Normal Mode Stage 1 Coil Performance Object Type DOAS Standard Perf 1, !- Normal Mode Stage 1 Coil Performance Name CoilPerformance:DX:Cooling, !- Normal Mode Stage 1+2 Coil Performance Object Type - DOAS Standard Perf 1+2, When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issues and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. !- Normal Mode Stage 1+2 Coil Performance Name + DOAS Standard Perf 1+2, !- Normal Mode Stage 1+2 Coil Performance Name CoilPerformance:DX:Cooling, !- Dehumidification Mode 1 Stage 1 Coil Performance Object Type DOAS Dehumid Perf 1, !- Dehumidification Mode 1 Stage 1 Coil Performance Name CoilPerformance:DX:Cooling, !- Dehumidification Mode 1 Stage 1+2 Coil Performance Object Type diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index d95965682d3..ccfb4831ff1 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -42013,11 +42013,11 @@ Coil:Cooling:DX:MultiSpeed, \note startup. Suggested value is 45; zero value means latent degradation \note model is disabled. N15, \field Speed 1 Rated Waste Heat Fraction of Power Input - \required-field \type real \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note Recoverable waste heat at full load and rated conditions A18, \field Speed 1 Waste Heat Function of Temperature Curve Name \type object-list @@ -42169,11 +42169,11 @@ Coil:Cooling:DX:MultiSpeed, \note startup. Suggested value is 45; zero value means latent degradation \note model is disabled. N28, \field Speed 2 Rated Waste Heat Fraction of Power Input - \required-field \type real \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note Recoverable waste heat at full load and rated conditions A24, \field Speed 2 Waste Heat Function of Temperature Curve Name \type object-list @@ -42321,6 +42321,7 @@ Coil:Cooling:DX:MultiSpeed, \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note Recoverable waste heat at full load and rated conditions A30, \field Speed 3 Waste Heat Function of Temperature Curve Name \type object-list @@ -42468,6 +42469,7 @@ Coil:Cooling:DX:MultiSpeed, \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note Recoverable waste heat at full load and rated conditions A36, \field Speed 4 Waste Heat Function of Temperature Curve Name \type object-list @@ -44568,11 +44570,11 @@ Coil:Heating:DX:MultiSpeed, \note cubic curve = a + b*PLR + c*PLR**2 + d*PLR**3 \note PLR = part load ratio (sensible heating load/steady state heating capacity) N14, \field Speed 1 Rated Waste Heat Fraction of Power Input - \required-field \type real \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note recoverable waste heat at full load and rated conditions A15, \field Speed 1 Waste Heat Function of Temperature Curve Name \type object-list @@ -44667,11 +44669,11 @@ Coil:Heating:DX:MultiSpeed, \note cubic curve = a + b*PLR + c*PLR**2 + d*PLR**3 \note PLR = part load ratio (sensible heating load/steady state heating capacity) N19, \field Speed 2 Rated Waste Heat Fraction of Power Input - \required-field \type real \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note recoverable waste heat at full load and rated conditions A21, \field Speed 2 Waste Heat Function of Temperature Curve Name \type object-list @@ -44762,6 +44764,7 @@ Coil:Heating:DX:MultiSpeed, \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note recoverable waste heat at full load and rated conditions A27, \field Speed 3 Waste Heat Function of Temperature Curve Name \type object-list @@ -44852,6 +44855,7 @@ Coil:Heating:DX:MultiSpeed, \units dimensionless \minimum> 0.0 \maximum 1.0 + \default 0.2 \note recoverable waste heat at full load and rated conditions A33, \field Speed 4 Waste Heat Function of Temperature Curve Name \type object-list diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index faedca9a4d4..9e56d046445 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -4093,15 +4093,7 @@ namespace DXCoils { // Read waste heat modifier curve name DXCoil( DXCoilNum ).MSWasteHeat( I ) = GetCurveIndex( Alphas( 18 + ( I - 1 ) * 6 ) ); // convert curve name to number if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { - if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) == 0 ) { - if ( lAlphaBlanks( 18 + ( I - 1 ) * 6 ) ) { - ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", missing" ); - ShowContinueError( "... " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + " is blank." ); - } else { - ShowWarningError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); - ShowContinueError( "...not found " + cAlphaFields( 18 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 18 + ( I - 1 ) * 6 ) + "\"." ); - } - } else { + if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) > 0 ) { // Verify Curve Object, only legal types are BiQuadratic { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); @@ -4607,16 +4599,7 @@ namespace DXCoils { // Read waste heat modifier curve name DXCoil( DXCoilNum ).MSWasteHeat( I ) = GetCurveIndex( Alphas( 15 + ( I - 1 ) * 6 ) ); // convert curve name to number if ( DXCoil( DXCoilNum ).FuelType != FuelTypeElectricity ) { - if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) == 0 ) { - if ( lAlphaBlanks( 11 ) ) { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", missing" ); - ShowContinueError( "... " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + " is blank." ); - } else { - ShowSevereError( RoutineName + CurrentModuleObject + "=\"" + DXCoil( DXCoilNum ).Name + "\", invalid" ); - ShowContinueError( "...not found " + cAlphaFields( 15 + ( I - 1 ) * 6 ) + "=\"" + Alphas( 15 + ( I - 1 ) * 6 ) + "\"." ); - } - - } else { + if ( DXCoil( DXCoilNum ).MSWasteHeat( I ) > 0 ) { // Verify Curve Object, only legal types are BiQuadratic { auto const SELECT_CASE_var( GetCurveType( DXCoil( DXCoilNum ).MSWasteHeat( I ) ) ); @@ -5466,14 +5449,6 @@ namespace DXCoils { break; } } - } else { - for ( SpeedNum = 1; SpeedNum <= DXCoil( DXCoilNum ).NumOfSpeeds; ++SpeedNum ) { - if ( DXCoil( DXCoilNum ).MSWasteHeat( SpeedNum ) == 0 ) { - ShowWarningError( "GetDXCoils:" + DXCoil( DXCoilNum ).Name + ". Since the parent object does not require waste heat, the input of Waste Heat Function of Temperature Curve value is not required." ); - break; - } - } - } } MyEnvrnFlag( DXCoilNum ) = false; diff --git a/tst/EnergyPlus/unit/DXCoils.unit.cc b/tst/EnergyPlus/unit/DXCoils.unit.cc index 6a1a3a5c0b4..90976420901 100644 --- a/tst/EnergyPlus/unit/DXCoils.unit.cc +++ b/tst/EnergyPlus/unit/DXCoils.unit.cc @@ -1139,4 +1139,4 @@ namespace EnergyPlus { DXCoil.deallocate( ); } -} \ No newline at end of file +} From ad1e1efd1526f33d1dafa77d841a8a8636e4e0fb Mon Sep 17 00:00:00 2001 From: mjwitte Date: Wed, 16 Sep 2015 14:53:24 -0500 Subject: [PATCH 5/5] DX multispeed doc cleanup --- .../01d-InputOutputReference.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/doc/src/docs/InputOutputReference/01d-InputOutputReference.md b/doc/src/docs/InputOutputReference/01d-InputOutputReference.md index eb520273203..bd371ed6053 100644 --- a/doc/src/docs/InputOutputReference/01d-InputOutputReference.md +++ b/doc/src/docs/InputOutputReference/01d-InputOutputReference.md @@ -5589,22 +5589,22 @@ Following is an example IDF use of the object: ```idf Coil:Cooling:DX:TwoStageWithHumidityControlMode, - DOAS Cooling Coil, !- Name - HVACTemplate-Always 1, !- Availability Schedule Name - DOAS Supply Fan Outlet, !- Air Inlet Node Name - DOAS Cooling Coil Outlet, !- Air Outlet Node Name - , !- Crankcase Heater Capacity - , !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater - 2, !- Number of Capacity Stages - 1, !- Number of Enhanced Dehumidification Modes + DOAS Cooling Coil, !- Name + HVACTemplate-Always 1, !- Availability Schedule Name + DOAS Supply Fan Outlet, !- Air Inlet Node Name + DOAS Cooling Coil Outlet, !- Air Outlet Node Name + , !- Crankcase Heater Capacity + , !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater + 2, !- Number of Capacity Stages + 1, !- Number of Enhanced Dehumidification Modes CoilPerformance:DX:Cooling, !- Normal Mode Stage 1 Coil Performance Object Type - DOAS Standard Perf 1, !- Normal Mode Stage 1 Coil Performance Name + DOAS Standard Perf 1, !- Normal Mode Stage 1 Coil Performance Name CoilPerformance:DX:Cooling, !- Normal Mode Stage 1+2 Coil Performance Object Type - DOAS Standard Perf 1+2, !- Normal Mode Stage 1+2 Coil Performance Name + DOAS Standard Perf 1+2, !- Normal Mode Stage 1+2 Coil Performance Name CoilPerformance:DX:Cooling, !- Dehumidification Mode 1 Stage 1 Coil Performance Object Type - DOAS Dehumid Perf 1, !- Dehumidification Mode 1 Stage 1 Coil Performance Name + DOAS Dehumid Perf 1, !- Dehumidification Mode 1 Stage 1 Coil Performance Name CoilPerformance:DX:Cooling, !- Dehumidification Mode 1 Stage 1+2 Coil Performance Object Type - DOAS Dehumid Perf 1+2; !- Dehumidification Mode 1 Stage 1+2 Coil Performance Name + DOAS Dehumid Perf 1+2; !- Dehumidification Mode 1 Stage 1+2 Coil Performance Name ``` ### Coil:Cooling:DX:MultiSpeed @@ -5639,7 +5639,7 @@ This optional alpha field specifies the outdoor air node name used to define the #### Field: Condenser Type -The type of condenser used by the multispeed DX cooling coil. Valid choices for this input field areAirCooled orEvaporativelyCooled. The default for this field isAirCooled. +The type of condenser used by the multispeed DX cooling coil. Valid choices for this input field are AirCooled or EvaporativelyCooled. The default for this field is AirCooled. #### Field: Supply Water Storage Tank Name @@ -5767,7 +5767,7 @@ The fraction of energy input to the cooling coil that is available as recoverabl #### Field: Speed <x> Waste Heat Function of Temperature Curve Name -The name of a biquadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature at Speed <x>. The output of this curve is multiplied by the rated waste heat fraction at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, this field can remain blank since it is ignored by the program in this instance. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issues and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. +The name of a biquadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature at Speed <x>. The output of this curve is multiplied by the rated waste heat fraction at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, this field can remain blank since it is ignored by the program in this instance. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issued and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. #### Field: Speed <x> Evaporative Condenser Effectiveness @@ -7203,7 +7203,7 @@ The fraction of heat input to heating that is available as recoverable waste hea #### Field: Speed <x> Waste Heat Function of Temperature Curve Name -The name of a bi-quadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature for Speed <x>. The output of this curve is multiplied by the rated recoverable waste heat at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, the field is either left blank or ignored by the program. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issues and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. +The name of a bi-quadratic performance curve (ref: Performance Curves) that parameterizes the variation of the waste heat recovery as a function of outdoor dry-bulb temperature and the entering coil dry-bulb temperature for Speed <x>. The output of this curve is multiplied by the rated recoverable waste heat at specific temperature operating conditions (i.e., at temperatures different from the rating point). The curve is normalized to a value of 1.0 at the rating point. When the fuel type is electricity, the field is either left blank or ignored by the program. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed does not require waste heat calculations, this field is ignored. If the field is blank, a warning will be issued and simulation continues. When the fuel type is not electricity and the parent object AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed requires waste heat calculations, if this field is left blank, the program assumes a constant value of 1 to make simulation continue and a warning will be issued. #### Field: Zone Name for Evaporator Placement