| 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