SUBROUTINE GetEvapFluidCoolerInput
! SUBROUTINE INFORMATION:
! AUTHOR: Chandan Sharma
! DATE WRITTEN: May 2009
! MODIFIED Chandan Sharma, April 2010
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Obtains input data for evaporative fluid coolers and stores it in SimpleEvapFluidCooler data structure.
! METHODOLOGY EMPLOYED:
! Uses "Get" routines to read in the data.
! REFERENCES:
! Based on GetTowerInput subroutine from Don Shirey, Jan 2001 and Sept/Oct 2002
! B.A. Qureshi and S.M. Zubair , Prediction of evaporation losses in evaporative fluid coolers
! Applied thermal engineering 27 (2007) 520-527
! USE STATEMENTS:
USE DataSizing
USE DataLoopNode
! USE DataPlant, ONLY: PlantLoop
USE InputProcessor, ONLY: GetNumObjectsFound, GetObjectItem, VerifyName, SameString, MakeUPPERCase
USE DataIPShortCuts ! Data for field names, blank numerics
USE NodeInputManager, ONLY: GetOnlySingleNode
USE BranchNodeConnections, ONLY: TestCompSet
USE CurveManager, ONLY: GetCurveIndex
USE ScheduleManager, ONLY: GetScheduleIndex
USE WaterManager , ONLY: SetupTankDemandComponent
USE OutAirNodeManager, ONLY: CheckOutAirNodeNumber
USE General, ONLY: TrimSigDigits
USE FluidProperties, ONLY: CheckFluidPropertyName, FindGlycol, GetGlycolNameByIndex
USE DataEnvironment, ONLY: OutWetBulbTemp,OutDryBulbTemp,OutRelHumValue
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
CHARACTER(len=*), PARAMETER :: Blank = ' '
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: EvapFluidCoolerNum ! Evaporative fluid cooler number,
! reference counter for SimpleEvapFluidCooler data array
INTEGER :: NumSingleSpeedEvapFluidCoolers ! Total number of single-speed evaporative fluid coolers
INTEGER :: SingleSpeedEvapFluidCoolerNumber ! Specific single-speed evaporative fluid cooler of interest
INTEGER :: NumTwoSpeedEvapFluidCoolers ! Number of two-speed evaporative fluid coolers
INTEGER :: TwoSpeedEvapFluidCoolerNumber ! Specific two-speed evaporative fluid cooler of interest
INTEGER :: NumAlphas ! Number of elements in the alpha array
INTEGER :: NumNums ! Number of elements in the numeric array
INTEGER :: IOStat ! IO Status when calling get input subroutine
LOGICAL :: IsNotOK ! Flag to verify name
LOGICAL :: IsBlank ! Flag for blank name
LOGICAL, SAVE :: ErrorsFound=.false. ! Logical flag set .true. if errors found while getting input data
REAL(r64), DIMENSION(25) :: NumArray ! Numeric input data array
CHARACTER(len=MaxNameLength),DIMENSION(13) :: AlphArray ! Character string input data array
CHARACTER(len=MaxNameLength) :: FluidName
! Get number of all evaporative fluid coolers specified in the input data file (idf)
NumSingleSpeedEvapFluidCoolers = GetNumObjectsFound(cEvapFluidCooler_SingleSpeed)
NumTwoSpeedEvapFluidCoolers = GetNumObjectsFound(cEvapFluidCooler_TwoSpeed)
NumSimpleEvapFluidCoolers = NumSingleSpeedEvapFluidCoolers + NumTwoSpeedEvapFluidCoolers
IF (NumSimpleEvapFluidCoolers <=0 ) &
CALL ShowFatalError('No evaporative fluid cooler objects found in input, however, '// &
'a branch object has specified an evaporative fluid cooler. '//&
'Search the input for evaporative fluid cooler to determine the cause for this error.')
! See if load distribution manager has already gotten the input
IF (ALLOCATED(SimpleEvapFluidCooler))RETURN
! Allocate data structures to hold evaporative fluid cooler input data,
! report data and evaporative fluid cooler inlet conditions
ALLOCATE (SimpleEvapFluidCooler(NumSimpleEvapFluidCoolers))
ALLOCATE (SimpleEvapFluidCoolerReport(NumSimpleEvapFluidCoolers))
ALLOCATE (SimpleEvapFluidCoolerInlet(NumSimpleEvapFluidCoolers))
ALLOCATE (CheckEquipName(NumSimpleEvapFluidCoolers))
CheckEquipName=.true.
! Load data structures with evaporative fluid cooler input data
cCurrentModuleObject = cEvapFluidCooler_SingleSpeed
DO SingleSpeedEvapFluidCoolerNumber = 1 , NumSingleSpeedEvapFluidCoolers
EvapFluidCoolerNum = SingleSpeedEvapFluidCoolerNumber
CALL GetObjectItem(cCurrentModuleObject,SingleSpeedEvapFluidCoolerNumber,AlphArray,NumAlphas, &
NumArray,NumNums,IOSTAT, AlphaBlank=lAlphaFieldBlanks, AlphaFieldnames=cAlphaFieldNames, &
NumericFieldNames=cNumericFieldNames)
IsNotOK=.false.
IsBlank=.false.
CALL VerifyName(AlphArray(1),SimpleEvapFluidCooler%Name,EvapFluidCoolerNum-1,IsNotOK,IsBlank, &
TRIM(cCurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) AlphArray(1)='xxxxx'
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name = AlphArray(1)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapFluidCoolerType = TRIM(cCurrentModuleObject)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapFluidCoolerType_Num = EvapFluidCooler_SingleSpeed
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapFluidCoolerMassFlowRateMultiplier = 2.5d0
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterInletNodeNum = &
GetOnlySingleNode(AlphArray(2),ErrorsFound,TRIM(cCurrentModuleObject),AlphArray(1), &
NodeType_Water,NodeConnectionType_Inlet, 1, ObjectIsNotParent)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterOutletNodeNum = &
GetOnlySingleNode(AlphArray(3),ErrorsFound,TRIM(cCurrentModuleObject),AlphArray(1), &
NodeType_Water,NodeConnectionType_Outlet, 1, ObjectIsNotParent)
CALL TestCompSet(TRIM(cCurrentModuleObject),AlphArray(1),AlphArray(2),AlphArray(3),'Chilled Water Nodes')
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate = NumArray(1)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower = NumArray(2)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignSprayWaterFlowRate = NumArray(3)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HeatRejectCapNomCapSizingRatio = NumArray(4)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedStandardDesignCapacity = NumArray(5)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA = NumArray(6)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate = NumArray(7)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedUserSpecifiedDesignCapacity = NumArray(8)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringWaterTemp = NumArray(9)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirTemp = NumArray(10)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp = NumArray(11)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%FluidIndex = PlantLoop(CurLoopNum)%FluidIndex
FluidName = GetGlycolNameByIndex(SimpleEvapFluidCooler(EvapFluidCoolerNum)%FluidIndex)
IF (lAlphaFieldBlanks(4).or.AlphArray(4) == Blank) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//', "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'" Performance input method is not specified. ')
ErrorsFound=.true.
ENDIF
IF (SameString(AlphArray(4),'STANDARDDESIGNCAPACITY')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_StandardDesignCapacity
IF (FluidName.NE. 'WATER') THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". StandardDesignCapacity performance input method is only valid for fluid type = "Water".')
CALL ShowContinueError('Currently, Fluid Type = '//TRIM(FluidName)//' in CondenserLoop = '// &
TRIM(PlantLoop(CurLoopNum)%Name))
ErrorsFound=.true.
ENDIF
ENDIF
!outdoor air inlet node
IF (lAlphaFieldBlanks(5)) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%OutdoorAirInletNodeNum = 0
ELSE
SimpleEvapFluidCooler(EvapFluidCoolerNum)%OutdoorAirInletNodeNum = &
GetOnlySingleNode(AlphArray(5),ErrorsFound,TRIM(cCurrentModuleObject),SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
IF(.not. CheckOutAirNodeNumber(SimpleEvapFluidCooler(EvapFluidCoolerNum)%OutdoorAirInletNodeNum))THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//', "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'" Outdoor Air Inlet Node Name not valid Outdoor Air Node= '//TRIM(AlphArray(5)))
CALL ShowContinueError('...does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
ErrorsFound=.true.
END IF
ENDIF
! fluid bypass for single speed evaporative fluid cooler
IF (lAlphaFieldBlanks(6).or.AlphArray(6) == Blank) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%CapacityControl = 0 ! FanCycling
ELSE
SELECT CASE (MakeUPPERCase(AlphArray(6)))
CASE ('FANCYCLING')
SimpleEvapFluidCooler(EvapFluidCoolerNum)%CapacityControl = 0
CASE ('FLUIDBYPASS')
SimpleEvapFluidCooler(EvapFluidCoolerNum)%CapacityControl = 1
CASE DEFAULT
SimpleEvapFluidCooler(EvapFluidCoolerNum)%CapacityControl = 0
CALL ShowWarningError(TRIM(cCurrentModuleObject)//', "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'" The Capacity Control is not specified correctly. The default Fan Cycling is used.')
END SELECT
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SizFac = NumArray(12) ! N11 \field Sizing Factor
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%SizFac <= 0.0d0) SimpleEvapFluidCooler(EvapFluidCoolerNum)%SizFac = 1.0d0
! begin water use and systems get input
IF (SameString(AlphArray(7),'LossFactor')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapLossMode = EvapLossByUserFactor
ELSEIF (SameString(AlphArray(7), 'SaturatedExit')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapLossMode = EvapLossByMoistTheory
ELSEIF (AlphArray(7) == Blank) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapLossMode = EvapLossByMoistTheory
ELSE
CALL ShowSevereError('Invalid, '//TRIM(cAlphaFieldNames(7))//' = '//TRIM(AlphArray(7)))
CALL ShowContinueError('Entered in '//TRIM(cCurrentModuleObject)//' = '//TRIM(AlphArray(1)))
errorsfound = .true.
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor = NumArray(13) ! N13 , \field Evaporation Loss Factor
IF ((NumNums < 13) .and. (SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor == 0.0d0) ) Then
! assume Evaporation loss factor not entered and should be calculated
IF ((OutRelHumValue.GE.0.1d0).AND.(OutRelHumValue.LE.0.7d0)) THEN
!Use correlation by B.A. Qureshi and S.M. Zubair if within these limits
SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor = &
(113.0d0 - 8.417d0 * OutRelHumValue + 1.6147d0 * OutDryBulbTemp) * 1.0d-5
ELSE ! Inlet conditions are out of the limit of correlation; An approximate default value of loss factor is used
SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor = 0.2d0
ENDIF
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DriftLossFraction = NumArray(14)/100.0d0 ! N14, \field Drift Loss Percent
If ((NumNums < 13) .and. (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DriftLossFraction == 0.0d0) ) Then
! assume Drift loss not entered and should be defaulted
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DriftLossFraction = 0.008d0 /100.0d0
endif
SimpleEvapFluidCooler(EvapFluidCoolerNum)%ConcentrationRatio = NumArray(15) ! N15, \field Blowdown Concentration Ratio
If (SameString(AlphArray(8), 'ScheduledRate')) then
SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode = BlowdownBySchedule
ELSEIF (SameString(AlphArray(8), 'ConcentrationRatio')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode = BlowdownByConcentration
ELSEIF (AlphArray(8) == Blank) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode = BlowdownByConcentration
If ((NumNums < 15) .and.(SimpleEvapFluidCooler(EvapFluidCoolerNum)%ConcentrationRatio == 0.0d0) ) THEN
! assume Concetration ratio was omitted and should be defaulted
SimpleEvapFluidCooler(EvapFluidCoolerNum)%ConcentrationRatio = 3.0d0
endif
ELSE
CALL ShowSevereError('Invalid, '//TRIM(cAlphaFieldNames(8))//' = '//TRIM(AlphArray(8)))
CALL ShowContinueError('Entered in '//TRIM(cCurrentModuleObject)//' ='//TRIM(AlphArray(1)))
errorsfound = .true.
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SchedIDBlowdown = GetScheduleIndex(AlphArray(9))
IF ((SimpleEvapFluidCooler(EvapFluidCoolerNum)%SchedIDBlowdown == 0) .AND. &
(SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode == BlowdownBySchedule))Then
CALL ShowSevereError('Invalid, '//TRIM(cAlphaFieldNames(9))//' = '//TRIM(AlphArray(9)))
CALL ShowContinueError('Entered in '//TRIM(cCurrentModuleObject)//' ='//TRIM(AlphArray(1)))
errorsfound = .true.
ENDIF
IF (AlphArray(10) == Blank) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SuppliedByWaterSystem = .false.
ELSE ! water from storage tank
CALL SetupTankDemandComponent(AlphArray(1), TRIM(cCurrentModuleObject), AlphArray(10), ErrorsFound, &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterTankID, &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterTankDemandARRID)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SuppliedByWaterSystem = .TRUE.
ENDIF
! Check various inputs to ensure that all the required variables are specified.
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignSprayWaterFlowRate <= 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler input requires a design spray water flow rate greater than zero '// &
'for all performance input methods.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(1))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(2))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SameString(AlphArray(4),'UFACTORTIMESAREAANDDESIGNWATERFLOWRATE')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_UFactor
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(6))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(7))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
ELSEIF(SameString(AlphArray(4),'STANDARDDESIGNCAPACITY')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_StandardDesignCapacity
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedStandardDesignCapacity <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(5))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
ELSEIF(SameString(AlphArray(4),'USERSPECIFIEDDESIGNCAPACITY')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_UserSpecifiedDesignCapacity
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(7))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedUserSpecifiedDesignCapacity <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(8))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringWaterTemp <= 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", invalid data for "'// &
TRIM(cNumericFieldNames(9))//'", entered value <= 0.0, but must be >0 for '// &
TRIM(cAlphaFieldNames(4))//' = "'//TRIM(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirTemp <= 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", invalid data for "'// &
TRIM(cNumericFieldNames(10))//'", entered value <= 0.0, but must be >0 for '// &
TRIM(cAlphaFieldNames(4))//' = "'//TRIM(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp <= 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", invalid data for "'// &
TRIM(cNumericFieldNames(11))//'", entered value <= 0.0, but must be >0 for '// &
TRIM(cAlphaFieldNames(4))//' = "'//TRIM(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringWaterTemp <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", '// &
TRIM(cNumericFieldNames(9))//' must be greater than '// TRIM(cNumericFieldNames(11))//'.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirTemp <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", '// &
TRIM(cNumericFieldNames(10))//' must be greater than '// TRIM(cNumericFieldNames(11))//'.')
ErrorsFound=.true.
ENDIF
ELSE ! Evaporative fluid cooler performance input method is not specified as a valid "choice"
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler Performance Input Method must be "UFactorTimesAreaAndDesignWaterFlowRate" '// &
'or "StandardDesignCapacity" or "UserSpecifiedDesignCapacity".')
CALL ShowContinueError('Evaporative fluid cooler Performance Input Method currently specified as: '// &
TRIM(AlphArray(4)))
ErrorsFound=.true.
ENDIF
END DO ! End Single-Speed Evaporative Fluid Cooler Loop
cCurrentModuleObject = cEvapFluidCooler_TwoSpeed
DO TwoSpeedEvapFluidCoolerNumber = 1 , NumTwoSpeedEvapFluidCoolers
EvapFluidCoolerNum = NumSingleSpeedEvapFluidCoolers + TwoSpeedEvapFluidCoolerNumber
CALL GetObjectItem(cCurrentModuleObject,TwoSpeedEvapFluidCoolerNumber,AlphArray,NumAlphas, &
NumArray,NumNums,IOSTAT, AlphaBlank=lAlphaFieldBlanks, &
AlphaFieldnames=cAlphaFieldNames,NumericFieldNames=cNumericFieldNames)
IsNotOK=.false.
IsBlank=.false.
CALL VerifyName(AlphArray(1),SimpleEvapFluidCooler%Name,EvapFluidCoolerNum-1,IsNotOK,IsBlank, &
TRIM(cCurrentModuleObject)//' Name')
IF (IsNotOK) THEN
ErrorsFound=.true.
IF (IsBlank) AlphArray(1)='xxxxx'
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name = AlphArray(1)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapFluidCoolerType = TRIM(cCurrentModuleObject)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapFluidCoolerType_Num = EvapFluidCooler_TwoSpeed
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapFluidCoolerMassFlowRateMultiplier = 2.5d0
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterInletNodeNum = &
GetOnlySingleNode(AlphArray(2),ErrorsFound,TRIM(cCurrentModuleObject),AlphArray(1), &
NodeType_Water,NodeConnectionType_Inlet, 1, ObjectIsNotParent)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterOutletNodeNum = &
GetOnlySingleNode(AlphArray(3),ErrorsFound,TRIM(cCurrentModuleObject),AlphArray(1), &
NodeType_Water,NodeConnectionType_Outlet, 1, ObjectIsNotParent)
CALL TestCompSet(TRIM(cCurrentModuleObject),AlphArray(1),AlphArray(2),AlphArray(3),'Chilled Water Nodes')
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate = NumArray(1)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower = NumArray(2)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedAirFlowRate = NumArray(3)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedAirFlowRateSizingFactor = NumArray(4)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedFanPower = NumArray(5)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedFanPowerSizingFactor = NumArray(6)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignSprayWaterFlowRate = NumArray(7)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HeatRejectCapNomCapSizingRatio = NumArray(8)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedStandardDesignCapacity = NumArray(9)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedStandardDesignCapacity = NumArray(10)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedStandardDesignCapacitySizingFactor = NumArray(11)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA = NumArray(12)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUA = NumArray(13)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUASizingFactor = NumArray(14)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate = NumArray(15)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedUserSpecifiedDesignCapacity= NumArray(16)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedUserSpecifiedDesignCapacity = NumArray(17)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedUserSpecifiedDesignCapacitySizingFactor = NumArray(18)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringWaterTemp = NumArray(19)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirTemp = NumArray(20)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp = NumArray(21)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%FluidIndex= PlantLoop(CurLoopNum)%FluidIndex
FluidName = GetGlycolNameByIndex(SimpleEvapFluidCooler(EvapFluidCoolerNum)%FluidIndex)
IF (lAlphaFieldBlanks(4)) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//', "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'" Performance input method is not specified. ')
ErrorsFound=.true.
ENDIF
IF (SameString(AlphArray(4),'STANDARDDESIGNCAPACITY')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_StandardDesignCapacity
IF (FluidName.NE. 'WATER') THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". StandardDesignCapacity performance input method is only valid for fluid type = "Water".')
CALL ShowContinueError('Currently, Fluid Type = '//TRIM(FluidName)//' in CondenserLoop = '// &
TRIM(PlantLoop(CurLoopNum)%Name))
ErrorsFound=.true.
ENDIF
ENDIF
! outdoor air inlet node
IF (lAlphaFieldBlanks(5)) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%OutdoorAirInletNodeNum = 0
ELSE
SimpleEvapFluidCooler(EvapFluidCoolerNum)%OutdoorAirInletNodeNum = &
GetOnlySingleNode(AlphArray(5),ErrorsFound,TRIM(cCurrentModuleObject),SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
NodeType_Air,NodeConnectionType_OutsideAirReference,1,ObjectIsNotParent)
IF(.not. CheckOutAirNodeNumber(SimpleEvapFluidCooler(EvapFluidCoolerNum)%OutdoorAirInletNodeNum))THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//', "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'" Outdoor Air Inlet Node Name not valid Outdoor Air Node= '//TRIM(AlphArray(5)))
CALL ShowContinueError('...does not appear in an OutdoorAir:NodeList or as an OutdoorAir:Node.')
ErrorsFound=.true.
END IF
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SizFac = NumArray(22) ! N16 \field Sizing Factor
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%SizFac <= 0.0d0) SimpleEvapFluidCooler(EvapFluidCoolerNum)%SizFac = 1.0d0
! begin water use and systems get input
IF (SameString(AlphArray(6),'LossFactor')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapLossMode = EvapLossByUserFactor
ELSEIF (SameString(AlphArray(6), 'SaturatedExit')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapLossMode = EvapLossByMoistTheory
ELSEIF (lAlphaFieldBlanks(6)) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%EvapLossMode = EvapLossByMoistTheory
ELSE
CALL ShowSevereError('Invalid '//TRIM(cAlphaFieldNames(6))//' = '//TRIM(AlphArray(6)))
CALL ShowContinueError('Entered in '//TRIM(cCurrentModuleObject)//' = '//TRIM(AlphArray(1)))
errorsfound = .true.
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor = NumArray(23) ! N23 , \field Evaporation Loss Factor
If ((NumNums < 23) .and. (SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor == 0.0d0) ) Then
! assume Evaporation loss factor not entered and should be calculated
IF ((OutRelHumValue.GE.0.1d0).AND. (OutRelHumValue.LE.0.7d0)) THEN
!Use correlation by B.A. Qureshi and S.M. Zubair if within these limits
SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor = &
(113.0d0 - 8.417d0 * OutRelHumValue + 1.6147d0 * OutDryBulbTemp) * 1.0d-5
ELSE ! Inlet conditions are out of the limit of correlation; An approximate default value of loss factor is used
SimpleEvapFluidCooler(EvapFluidCoolerNum)%UserEvapLossFactor = 0.2d0
ENDIF
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DriftLossFraction = NumArray(24) / 100.0d0 ! N24, \field Drift Loss Percent
IF ((NumNums < 24) .and. (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DriftLossFraction == 0.0d0) ) Then
! assume Drift loss not entered and should be defaulted
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DriftLossFraction = 0.008d0 /100.0d0
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%ConcentrationRatio = NumArray(25) ! N25, \field Blowdown Concentration Ratio
If (SameString(AlphArray(7), 'ScheduledRate')) then
SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode = BlowdownBySchedule
ELSEIF (SameString(AlphArray(7), 'ConcentrationRatio')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode = BlowdownByConcentration
ELSEIF (lAlphaFieldBlanks(7)) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode = BlowdownByConcentration
If ((NumNums < 25) .and.(SimpleEvapFluidCooler(EvapFluidCoolerNum)%ConcentrationRatio == 0.0d0) ) THEN
! assume Concetration ratio was omitted and should be defaulted
SimpleEvapFluidCooler(EvapFluidCoolerNum)%ConcentrationRatio = 3.0d0
endif
ELSE
CALL ShowSevereError('Invalid '//TRIM(cAlphaFieldNames(7))//' = '//TRIM(AlphArray(7)))
CALL ShowContinueError('Entered in '//TRIM(cCurrentModuleObject)//' = '//TRIM(AlphArray(1)))
errorsfound = .true.
ENDIF
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SchedIDBlowdown = GetScheduleIndex(AlphArray(8))
IF ((SimpleEvapFluidCooler(EvapFluidCoolerNum)%SchedIDBlowdown == 0) .AND. &
(SimpleEvapFluidCooler(EvapFluidCoolerNum)%BlowdownMode == BlowdownBySchedule)) Then
CALL ShowSevereError('Invalid '//TRIM(cAlphaFieldNames(8))//' = '//TRIM(AlphArray(8)))
CALL ShowContinueError('Entered in '//TRIM(cCurrentModuleObject)//' = '//TRIM(AlphArray(1)))
errorsfound = .true.
ENDIF
IF (lAlphaFieldBlanks(9)) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SuppliedByWaterSystem = .false.
ELSE ! water from storage tank
!
Call SetupTankDemandComponent(AlphArray(1), TRIM(cCurrentModuleObject), AlphArray(9), ErrorsFound, &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterTankID, &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%WaterTankDemandARRID)
SimpleEvapFluidCooler(EvapFluidCoolerNum)%SuppliedByWaterSystem = .TRUE.
ENDIF
! Check various inputs to ensure that all the required variables are specified.
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignSprayWaterFlowRate <= 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler input requires a design spray water flow rate greater than zero '// &
'for all performance input methods.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//'= "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler input requires design air flow rate at high fan speed to be '// &
'greater than zero for all performance input methods.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedAirFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedAirFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//'= "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler input requires design air flow rate at low fan speed to be '// &
'greater than zero for all performance input methods.')
ErrorsFound=.true.
ENDIF
! High speed air flow rate must be greater than low speed air flow rate.
! Can't tell yet if autosized, check later in InitEvapFluidCooler.
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedAirFlowRate .and. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedAirFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler air flow rate at low fan speed must be less than the'//&
' air flow rate at high fan speed.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(2))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedFanPower <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedFanPower .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(5))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedFanPower .and. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedFanPower .NE. AutoSize) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler low speed fan power must be less than the'//&
' high speed fan power .')
ErrorsFound=.true.
ENDIF
IF (SameString(AlphArray(4),'UFACTORTIMESAREAANDDESIGNWATERFLOWRATE')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_UFactor
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(12))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUA <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUA .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(13))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUA .and. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA .NE. AutoSize) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler U-factor Times Area Value at Low Fan Speed must be less than the'//&
' U-factor Times Area Value at High Fan Speed.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(15))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
ELSEIF(SameString(AlphArray(4),'STANDARDDESIGNCAPACITY')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_StandardDesignCapacity
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedStandardDesignCapacity <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(9))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedStandardDesignCapacity <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(10))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedStandardDesignCapacity >= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedStandardDesignCapacity) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Low-Speed Standard Design Capacity must be less than the High-Speed Standard Design Capacity.')
ErrorsFound=.true.
END IF
ELSEIF(SameString(AlphArray(4),'USERSPECIFIEDDESIGNCAPACITY')) THEN
SimpleEvapFluidCooler(EvapFluidCoolerNum)%PerformanceInputMethod_Num = PIM_UserSpecifiedDesignCapacity
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate <= 0.0d0 .AND. &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignWaterFlowRate .NE. AutoSize) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(15))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedUserSpecifiedDesignCapacity <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(16))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedUserSpecifiedDesignCapacity <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(17))//'", entered value <= 0.0, but must be > 0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA .NE. 0.0d0) THEN
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedEvapFluidCoolerUA > 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". UserSpecifiedDesignCapacity performance input method and evaporative fluid cooler UA '// &
'at high fan speed have been specified.')
ELSE
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". UserSpecifiedDesignCapacity performance input method has been specified and '// &
'evaporative fluid cooler UA at high fan speed is being autosized.')
ENDIF
CALL ShowContinueError('Evaporative fluid cooler UA at high fan speed must be left blank when '// &
'UserSpecifiedDesignCapacity performance input method is used.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUA .NE. 0.0d0) THEN
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedEvapFluidCoolerUA > 0.0d0) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". UserSpecifiedDesignCapacity performance input method and evaporative fluid cooler UA at '// &
' low fan speed have been specified.')
ELSE
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". UserSpecifiedDesignCapacity performance input method has been specified and evaporative fluid cooler '// &
'UA at low fan speed is being autosized.')
ENDIF
CALL ShowContinueError('Evaporative fluid cooler UA at low fan speed must be left blank '// &
'when UserSpecifiedDesignCapacity performance input method is used.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%LowSpeedUserSpecifiedDesignCapacity >= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%HighSpeedUserSpecifiedDesignCapacity) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Low-Speed User Specified Design Capacity must be less than '// &
'the High-Speed User Specified Design Dapacity.')
ErrorsFound=.true.
END IF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringWaterTemp <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(19))//'", entered value <= 0.0, but must be >0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirTemp <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(20))//'", entered value <= 0.0, buy must be >0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp <= 0.0d0) THEN
CALL ShowSevereError(trim(cCurrentModuleObject)//' = "'//trim(AlphArray(1))//'", invalid data for "'// &
trim(cNumericFieldNames(21))//'", entered value <= 0.0, but must be >0 for '// &
trim(cAlphaFieldNames(4))//' = "'//trim(AlphArray(4))//'".')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringWaterTemp <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", '// &
TRIM(cNumericFieldNames(19))//' must be greater than '// TRIM(cNumericFieldNames(15))//'.')
ErrorsFound=.true.
ENDIF
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirTemp <= &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%DesignEnteringAirWetbulbTemp) THEN
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(AlphArray(1))//'", '// &
TRIM(cNumericFieldNames(20))//' must be greater than '// TRIM(cNumericFieldNames(15))//'.')
ErrorsFound=.true.
ENDIF
ELSE ! Evaporative fluid cooler performance input method is not specified as a valid "choice"
CALL ShowSevereError(TRIM(cCurrentModuleObject)//' = "'//TRIM(SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)//&
'". Evaporative fluid cooler Performance Input Method must be "UFactorTimesAreaAndDesignWaterFlowRate" '// &
'or "StandardDesignCapacity" or "UserSpecifiedDesignCapacity".')
CALL ShowContinueError('Evaporative fluid cooler Performanace Input Method currently specified as: '// &
TRIM(AlphArray(4)))
ErrorsFound=.true.
ENDIF
END DO ! End Two-Speed Evaporative Fluid Cooler Loop
IF (ErrorsFound) THEN
CALL ShowFatalError('Errors found in getting evaporative fluid cooler input.')
ENDIF
! Set up output variables
! CurrentModuleObject='EvaporativeFluidCooler:SingleSpeed'
DO EvapFluidCoolerNum = 1, NumSingleSpeedEvapFluidCoolers
CALL SetupOutputVariable('Cooling Tower Inlet Temperature [C]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%InletWaterTemp,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Outlet Temperature [C]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%OutletWaterTemp,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Mass Flow Rate [kg/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%WaterMassFlowRate,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Heat Transfer Rate [W]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%Qactual,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Fan Electric Power [W]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%FanPower,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Fan Electric Energy [J]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%FanEnergy,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HeatRejection',GroupKey='Plant')
! Added for fluid bypass
CALL SetupOutputVariable('Cooling Tower Bypass Fraction []', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%BypassFraction,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
END DO
! CurrentModuleObject='EvaporativeFluidCooler:TwoSpeed'
DO EvapFluidCoolerNum = NumSingleSpeedEvapFluidCoolers+1, NumSingleSpeedEvapFluidCoolers+NumTwoSpeedEvapFluidCoolers
CALL SetupOutputVariable('Cooling Tower Inlet Temperature [C]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%InletWaterTemp,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Outlet Temperature [C]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%OutletWaterTemp,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Mass Flow Rate [kg/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%WaterMassFlowRate,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Heat Transfer Rate [W]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%Qactual,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Fan Electric Power [W]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%FanPower,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Fan Electric Energy [J]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%FanEnergy,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='Electric',EndUseKey='HeatRejection',GroupKey='Plant')
END DO
! setup common water reporting for all types of evaporative fluid coolers.
! CurrentModuleObject='EvaporativeFluidCooler:*'
DO EvapFluidCoolerNum = 1 , NumSingleSpeedEvapFluidCoolers + NumTwoSpeedEvapFluidCoolers
IF (SimpleEvapFluidCooler(EvapFluidCoolerNum)%SuppliedByWaterSystem) THEN
CALL SetupOutputVariable('Cooling Tower Make Up Water Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%MakeUpVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Make Up Water Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%MakeUpVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Storage Tank Water Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%TankSupplyVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Storage Tank Water Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%TankSupplyVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='Water', EndUseKey='HeatRejection', GroupKey='Plant')
CALL SetupOutputVariable('Cooling Tower Starved Storage Tank Water Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%StarvedMakeUpVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Starved Storage Tank Water Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%StarvedMakeUpVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='Water', EndUseKey='HeatRejection', GroupKey='Plant')
CALL SetupOutputVariable('Cooling Tower Make Up Mains Water Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%StarvedMakeUpVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='MainsWater', EndUseKey='HeatRejection', GroupKey='Plant')
ELSE ! Evaporative fluid cooler water from mains and gets metered
CALL SetupOutputVariable('Cooling Tower Make Up Water Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%MakeUpVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Make Up Water Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%MakeUpVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='Water', EndUseKey='HeatRejection', GroupKey='Plant')
CALL SetupOutputVariable('Cooling Tower Make Up Mains Water Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%MakeUpVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name, &
ResourceTypeKey='MainsWater', EndUseKey='HeatRejection', GroupKey='Plant')
ENDIF
CALL SetupOutputVariable('Cooling Tower Water Evaporation Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%EvaporationVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Water Evaporation Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%EvaporationVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Water Drift Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%DriftVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Water Drift Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%DriftVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Water Blowdown Volume Flow Rate [m3/s]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%BlowdownVdot,'System','Average', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
CALL SetupOutputVariable('Cooling Tower Water Blowdown Volume [m3]', &
SimpleEvapFluidCoolerReport(EvapFluidCoolerNum)%BlowdownVol,'System','Sum', &
SimpleEvapFluidCooler(EvapFluidCoolerNum)%Name)
ENDDO ! loop all evaporative fluid coolers
RETURN
END SUBROUTINE GetEvapFluidCoolerInput