Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | EvapCoolNum |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE CalcDirectResearchSpecialEvapCooler(EvapCoolNum)
! SUBROUTINE INFORMATION:
! AUTHOR B. Griffith
! DATE WRITTEN March 2009
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! calculate model for direct evaporative cooler that is simple and controllable
! METHODOLOGY EMPLOYED:
! <description>
! REFERENCES:
! na
! USE STATEMENTS:
! na
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: EvapCoolNum
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: SatEff ! Saturation Efficiency of the CelDek Pad
REAL(r64) :: TEDB ! Entering Dry Bulb Temperature
REAL(r64) :: TEWB ! Entering Wet Bulb Temperature
REAL(r64) :: RhoWater
REAL(r64) :: PartLoad
REAL(r64) :: BlowDownVdot =0.0d0
REAL(r64) :: DriftVdot =0.0d0
REAL(r64) :: EvapVdot =0.0d0
! If the Evaporative Cooler is operating there should be some mass flow rate
! Also the evap cooler has to be scheduled to be available
IF((EvapCond(EvapCoolNum)%InletMassFlowRate .GT. 0.0d0) .and. &
(GetCurrentScheduleValue(EvapCond(EvapCoolNum)%SchedPtr) .gt. 0.0d0)) THEN
!***************************************************************************
! TEMP LEAVING DRY BULB IS CALCULATED FROM SATURATION EFFICIENCY AS THE
! DRY BULB TEMP APPROACHES THE WET BULB TEMP. WET BULB TEMP IS CONSTANT
! ACROSS A DIRECT EVAPORATION COOLER.
TEWB = EvapCond(EvapCoolNum)%InletWetBulbTemp
TEDB = EvapCond(EvapCoolNum)%InletTemp
SatEff = EvapCond(EvapCoolNum)%DirectEffectiveness
PartLoad = EvapCond(EvapCoolNum)%PartLoadFract
IF (PartLoad .EQ. 1.0d0) THEN
EvapCond(EvapCoolNum)%OutletTemp = TEDB-((TEDB-TEWB)*SatEff)
EvapCond(EvapCoolNum)%OuletWetBulbTemp = TEWB
EvapCond(EvapCoolNum)%OutletHumRat = PsyWFnTdbTwbPb(EvapCond(EvapCoolNum)%OutletTemp,TEWB,OutBaroPress)
EvapCond(EvapCoolNum)%OutletEnthalpy = PsyHFnTdbW(EvapCond(EvapCoolNum)%OutletTemp, &
EvapCond(EvapCoolNum)%OutletHumRat)
ELSEIF ((partLoad .LT. 1.0D0) .AND. (partLoad .GT. 0.0D0)) THEN
! assume perfect control Use PLF for energy consumption
IF (EvapCond(EvapCoolNum)%DesiredOutletTemp .LT. TEDB ) THEN
EvapCond(EvapCoolNum)%OutletTemp = EvapCond(EvapCoolNum)%DesiredOutletTemp
EvapCond(EvapCoolNum)%OuletWetBulbTemp = TEWB
EvapCond(EvapCoolNum)%OutletHumRat = PsyWFnTdbTwbPb(EvapCond(EvapCoolNum)%OutletTemp,TEWB,OutBaroPress)
EvapCond(EvapCoolNum)%OutletEnthalpy = PsyHFnTdbW(EvapCond(EvapCoolNum)%OutletTemp, &
EvapCond(EvapCoolNum)%OutletHumRat)
ELSE !do no cooling
EvapCond(EvapCoolNum)%OutletTemp = TEDB
EvapCond(EvapCoolNum)%OuletWetBulbTemp = TEWB
EvapCond(EvapCoolNum)%OutletHumRat = PsyWFnTdbTwbPb(EvapCond(EvapCoolNum)%OutletTemp,TEWB,OutBaroPress)
EvapCond(EvapCoolNum)%OutletEnthalpy = PsyHFnTdbW(EvapCond(EvapCoolNum)%OutletTemp, &
EvapCond(EvapCoolNum)%OutletHumRat)
ENDIF
ELSE
!part load set to zero so no cooling
EvapCond(EvapCoolNum)%OutletTemp = TEDB
EvapCond(EvapCoolNum)%OuletWetBulbTemp = TEWB
EvapCond(EvapCoolNum)%OutletHumRat = PsyWFnTdbTwbPb(EvapCond(EvapCoolNum)%OutletTemp,TEWB,OutBaroPress)
EvapCond(EvapCoolNum)%OutletEnthalpy = PsyHFnTdbW(EvapCond(EvapCoolNum)%OutletTemp, &
EvapCond(EvapCoolNum)%OutletHumRat)
ENDIF
!***************************************************************************
! ENERGY CONSUMED BY THE RECIRCULATING PUMP
!Add the pump energy to the total Evap Cooler energy comsumption
EvapCond(EvapCoolNum)%EvapCoolerPower = EvapCond(EvapCoolNum)%RecircPumpPower * PartLoad
!******************
! WATER CONSUMPTION IN m3 OF WATER FOR DIRECT
! H2O [m3/sec] = Delta W[KgH2O/Kg air]*Mass Flow Air[Kg air]
! /RhoWater [kg H2O/m3 H2O]
!******************
RhoWater = RhoH2O(EvapCond(EvapCoolNum)%OutletTemp)
EvapVdot = (EvapCond(EvapCoolNum)%OutletHumRat - EvapCond(EvapCoolNum)%InletHumRat) * &
EvapCond(EvapCoolNum)%InletMassFlowRate/Rhowater
DriftVdot = EvapVdot * EvapCond(EvapCoolNum)%DriftFraction
IF (EvapCond(EvapCoolNum)%BlowDownRatio > 0.0D0) THEN
BlowDownVdot = EvapVdot / (EvapCond(EvapCoolNum)%BlowDownRatio - 1.0D0) - DriftVdot
IF ( BlowDownVdot < 0.0D0 ) BlowDownVdot = 0.0D0
ELSE
BlowDownVdot = 0.0D0
ENDIF
EvapCond(EvapCoolNum)%EvapWaterConsumpRate = EvapVdot + DriftVdot + BlowDownVdot
! A numerical check to keep from having very tiny negative water consumption values being reported
If(EvapCond(EvapCoolNum)%EvapWaterConsumpRate < 0.0d0) EvapCond(EvapCoolNum)%EvapWaterConsumpRate = 0.0d0
Else
! The evap cooler is not running and does not change conditions from inlet to outlet
EvapCond(EvapCoolNum)%OutletTemp = EvapCond(EvapCoolNum)%InletTemp
EvapCond(EvapCoolNum)%OuletWetBulbTemp = EvapCond(EvapCoolNum)%InletWetBulbTemp
EvapCond(EvapCoolNum)%OutletHumRat = EvapCond(EvapCoolNum)%InletHumRat
EvapCond(EvapCoolNum)%OutletEnthalpy = EvapCond(EvapCoolNum)%InletEnthalpy
EvapCond(EvapCoolNum)%EvapCoolerPower = 0.0D0
EvapCond(EvapCoolNum)%EvapCoolerEnergy = 0.0D0
EvapCond(EvapCoolNum)%EvapWaterConsumpRate = 0.0D0
End IF
! all of the mass flowrates are not changed across the evap cooler
EvapCond(EvapCoolNum)%OutletMassFlowRate = EvapCond(EvapCoolNum)%InletMassFlowRate
EvapCond(EvapCoolNum)%OutletMassFlowRateMaxAvail = EvapCond(EvapCoolNum)%InletMassFlowRateMaxAvail
EvapCond(EvapCoolNum)%OutletMassFlowRateMinAvail = EvapCond(EvapCoolNum)%InletMassFlowRateMinAvail
! the pressure is not changed across the evap cooler
EvapCond(EvapCoolNum)%OutletPressure = EvapCond(EvapCoolNum)%InletPressure
RETURN
END SUBROUTINE CalcDirectResearchSpecialEvapCooler