SUBROUTINE LFMFLD(RH3310,RH6610,RH3366,PW3310)
!$$$  SUBPROGRAM DOCUMENTATION BLOCK
!                .      .    .     
! SUBPROGRAM:    LFMFLD      COMPUTES LAYER MEAN LFM FIELDS
!   PRGRMMR: TREADON         ORG: W/NP2      DATE: 92-12-22
!     
! ABSTRACT:
!     THIS ROUTINE COMPUTES THREE LAYER MEAN RELATIVE HUMIDITIES
!     AND A PRECIPITABLE WATER FIELD FROM ETA LEVEL DATA.  THE
!     COMPUTED FIELDS ARE INTENDED TO MIMIC SIMILAR FIELDS COM-
!     PUTED BY THE LFM.  THE ALGORITHM USED HERE IS FAIRLY PRI-
!     MATIVE.  IN EACH COLUMN ABOVE A MASS POINT ON THE ETA GRID
!     WE SET THE FOLLOWING TARGET PRESSURES:
!         SIGMA LAYER 1.00 PRESSURE:  SURFACE PRESSURE
!         SIGMA LAYER 0.66 PRESSURE:  0.50 * SURFACE PRESSURE
!         SIGMA LAYER 0.33 PRESSURE:  0.4356 * SURFACE PRESSURE
!     GIVEN THESE PRESSURES A SURFACE UP SUMMATION IS MADE OF 
!     RELATIVE HUMIDITY AND/OR PRECIPITABLE WATER BETWEEN THESE
!     TARGET PRESSURES.  EACH TERM IN THE SUMMATION IS WEIGHTED
!     BY THE THICKNESS OF THE ETA LAYER.  THE FINAL LAYER MEAN
!     IS THIS SUM NORMALIZED BY THE TOTAL DEPTH OF THE LAYER.  
!     THERE IS, OBVIOUSLY, NO NORMALIZATION FOR PRECIPITABLE WATER.
!
!     
! PROGRAM HISTORY LOG:
!   92-12-22  RUSS TREADON
!   93-07-27  RUSS TREADON - MODIFIED SUMMATION LIMITS FROM
!                            0.66*PSFC TO 0.75*PSFC AND 0.33*PSFC 
!                            TO 0.50*PSFC, WHERE PSFC IS THE
!                            SURFACES PRESSURE.  THE REASON FOR
!                            THIS CHANGE WAS RECOGNITION THAT IN 
!                            THE LFM 0.33 AND 0.66 WERE MEASURED
!                            FROM THE SURFACE TO THE TROPOPAUSE,
!                            NOT THE TOP OF THE MODEL.
!   93-09-13  RUSS TREADON - RH CALCULATIONS WERE MADE INTERNAL
!                            TO THE ROUTINE.
!   96-03-04  MIKE BALDWIN - CHANGE PW CALC TO INCLUDE CLD WTR 
!   98-06-16  T BLACK      - CONVERSION FROM 1-D TO 2-D
!   98-08-17  MIKE BALDWIN - COMPUTE RH OVER ICE
!   98-12-22  MIKE BALDWIN - BACK OUT RH OVER ICE
!   00-01-04  JIM TUCCILLO - MPI VERSION
!   02-04-24  MIKE BALDWIN - WRF VERSION
!     
!     
! USAGE:    CALL LFMFLD(RH3310,RH6610,RH3366,PW3310)
!   INPUT ARGUMENT LIST:
!     NONE
!
!   OUTPUT ARGUMENT LIST: 
!     RH3310   - SIGMA LAYER 0.33-1.00 MEAN RELATIVE HUMIDITY.
!     RH6610   - SIGMA LAYER 0.66-1.00 MEAN RELATIVE HUMIDITY.
!     RH3366   - SIGMA LAYER 0.33-0.66 MEAN RELATIVE HUMIDITY.
!     PW3310   - SIGMA LAYER 0.33-1.00 PRECIPITABLE WATER.
!     
!   OUTPUT FILES:
!     NONE
!     
!   LIBRARY:
!     COMMON   - 
!                MAPOT
!                LOOPS
!                OPTIONS
!
!   ATTRIBUTES:
!     LANGUAGE: FORTRAN
!     MACHINE : CRAY C-90
!$$$  
!     
!
      use vrbls3d, only: pint, alpint, zint, t, q, cwm
      use masks, only: lmh
      use params_mod, only: d00, d50, pq0, a2, a3, a4, h1, d01, gi
      use ctlblk_mod, only: jsta, jend, modelname, spval, im
      use physcons, only: con_rd, con_rv, con_eps, con_epsm1

      implicit none

      real,external::FPVSNEW
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!
      real,PARAMETER :: RHOWAT=1.E3
!     
!     DECLARE VARIABLES.
!     
      REAL ALPM, DZ, ES, PM, PWSUM, QM, QS, TM, DP, RH
      REAL,dimension(IM,jsta:jend),intent(inout) :: RH3310, RH6610, RH3366
      REAL,dimension(IM,jsta:jend),intent(inout) :: PW3310
      real Z3310,Z6610,Z3366,P10,P33,P66
      integer I,J,L,LLMH
!
!***********************************************************************
!     START LFMFLD HERE
!     
!
!     LOOP OVER HORIZONTAL GRID.
!     
      DO 30 J=JSTA,JEND
      DO 30 I=1,IM
!     
!        ZERO VARIABLES.
         RH3310(I,J) = D00
         PW3310(I,J) = D00
         RH6610(I,J) = D00
         RH3366(I,J) = D00
         Z3310     = D00
         Z6610     = D00
         Z3366     = D00
!     
!        SET BOUNDS FOR PRESSURES AND SURFACE L.
         P10  = PINT(I,J,NINT(LMH(I,J)))
         P66  = 0.75*P10
         P33  = 0.50*P10
         LLMH = NINT(LMH(I,J))
!     
!        ACCULMULATE RELATIVE HUMIDITIES AND PRECIPITABLE WATER.
!
         DO 10 L = LLMH,1,-1
!     
!           GET P, Z, T, AND Q AT MIDPOINT OF ETA LAYER.
            ALPM = D50*(ALPINT(I,J,L)+ALPINT(I,J,L+1))
            DZ   = ZINT(I,J,L)-ZINT(I,J,L+1)
            DP   = PINT(I,J,L+1)-PINT(I,J,L)
            PM   = EXP(ALPM)
            TM   = T(I,J,L)
            QM   = Q(I,J,L)
            QM   = AMAX1(QM,D00)
!
!            QS=PQ0/PM*EXP(A2*(TM-A3)/(TM-A4))
	    IF(MODELNAME == 'GFS')THEN
	      ES = min(FPVSNEW(TM),PM)
	      QS = CON_EPS*ES/(PM+CON_EPSM1*ES)
	    ELSE      
              QS=PQ0/PM*EXP(A2*(TM-A3)/(TM-A4))
	    END IF
            RH   = QM/QS
            IF (RH.GT.H1) THEN
               RH = H1
               QM = RH*QS
            ENDIF
            IF (RH.LT.D01) THEN
               RH = D01
               QM = RH*QS
            ENDIF
!
!           JUMP OUT OF THIS LOOP IF WE ARE ABOVE THE HIGHEST TARGET PRESSURE.
            IF (PM.LE.P33) GOTO 20
!     
!           0.66-1.00 RELATIVE HUMIDITY.
            IF ((PM.LE.P10).AND.(PM.GE.P66)) THEN
               Z6610     = Z6610 + DZ
               RH6610(I,J) = RH6610(I,J) + RH*DZ
            ENDIF
!     
!           0.33-1.00 RELATIVE HUMIDITY AND PRECIPITABLE WATER.
            IF ((PM.LE.P10).AND.(PM.GE.P33)) THEN
               Z3310      = Z3310 + DZ
               RH3310(I,J)= RH3310(I,J)+RH*DZ
               PW3310(I,J)= PW3310(I,J)+(Q(I,J,L)+CWM(I,J,L))*DP*GI
            ENDIF
!     
!           0.33-0.66 RELATIVE HUMIDITY.
            IF ((PM.LE.P66).AND.(PM.GE.P33)) THEN
               Z3366     = Z3366 + DZ
               RH3366(I,J) = RH3366(I,J) + RH*DZ
            ENDIF
!
 10      CONTINUE
 20      CONTINUE
!     
!        NORMALIZE TO GET MEAN RELATIVE HUMIDITIES.  AT
!        ONE TIME WE DIVIDED PRECIPITABLE WATER BY DENSITY
!        TO GET THE EQUIVALENT WATER DEPTH IN METERS.  NO MORE.
         IF (Z6610.GT.D00) THEN
            RH6610(I,J) = RH6610(I,J)/Z6610
         ELSE
            RH6610(I,J) = SPVAL
         ENDIF
!     
         IF (Z3310.GT.D00) THEN
            RH3310(I,J) = RH3310(I,J)/Z3310
         ELSE
            RH3310(I,J) = SPVAL
         ENDIF
!     
         IF (Z3366.GT.D00) THEN
            RH3366(I,J) = RH3366(I,J)/Z3366
         ELSE
            RH3366(I,J) = SPVAL
         ENDIF
 30   CONTINUE
!     
!     
!     END OF ROUTINE.
!     
      RETURN
      END