SUBROUTINE NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510)
!$$$  SUBPROGRAM DOCUMENTATION BLOCK
!                .      .    .     
! SUBPROGRAM:    NGMFLD      COMPUTES LAYER MEAN NGM FIELDS
!   PRGRMMR: TREADON         ORG: W/NP2      DATE: 92-12-22
!     
! ABSTRACT:
!     THIS ROUTINE COMPUTES A HANDFUL OF NGM LAYER MEAN 
!     FIELDS.  THIS IS DONE TO PROVIDE A FULLY COMPLETE 
!     ETA NGM LOOK-ALIKE OUTPUT FILE.  THE SIGMA (LAYER)
!     FIELDS COMPUTED BY THIS ROUTINE ARE TABULATED BELOW.
!     
!           SIGMA (LAYER)         FIELD(S)
!          ---------------     --------------
!          0.47191-1.00000          RH
!          0.47171-0.96470          RH
!          0.18019-0.47191          RH
!          0.84368-0.98230          RH
!          0.85000-1.00000         MCONV
!     WHERE 
!          RH    = RELATIVE HUMIDITY
!          MCONV = MOISTURE CONVERGENCE
!
!     LAYER MEANS ARE A SUMMATION OVER ETA LAYERS MAPPING INTO
!     THE PRESSURE RANGE CORRESPONDING TO THE SIGMA RANGE ABOVE.
!     THE CALCULATION OF THESE BOUNDING PRESSURES IS DONE AT 
!     EACH HORIZONTAL GRID POINT BASED ON THE SURFACE PRESSURE.
!     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.

!
!     
! 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.
!   98-06-16  T BLACK      - CONVERSION FROM 1-D TO 2-D
!   98-08-18  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 NGMFLD(RH4710,RH4796,RH1847,RH8498,QM8510)
!   INPUT ARGUMENT LIST:
!     NONE
!
!   OUTPUT ARGUMENT LIST: 
!     RH4710   - SIGMA LAYER 0.47-1.00 MEAN RELATIVE HUMIDITY.
!     RH4796   - SIGMA LAYER 0.47-0.96 MEAN RELATIVE HUMIDITY.
!     RH1847   - SIGMA LAYER 0.18-0.47 MEAN RELATIVE HUMIDITY.
!     RH8498   - SIGMA LAYER 0.84-0.98 MEAN RELATIVE HUMIDITY.
!     QM8510   - SIGMA LAYER 0.85-1.00 MEAN MOISTURE CONVERGENCE.
!     
!   OUTPUT FILES:
!     NONE
!     
!   LIBRARY:
!     COMMON   - 
!                MASKS
!                OPTIONS
!                LOOPS
!                MAPOT
!                DYNAMD
!                INDX
!
!   ATTRIBUTES:
!     LANGUAGE: FORTRAN
!     MACHINE : CRAY C-90
!$$$  
!     
!     
!     INCLUDE PARAMETERS
      use vrbls3d, only: q, uh, vh, pint, alpint, zint, t
      use masks, only: lmh
      use params_mod, only: d00, d50, h1m12, pq0, a2, a3, a4, h1, d01, small
      use ctlblk_mod, only: jsta, jend, lm, jsta_2l, jend_2u, jsta_m2, jend_m2,&
              spval, im, jm
!
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       implicit none
!
      real,PARAMETER :: SIG100=1.00000, SIG98=0.98230, SIG96=0.96470
      real,PARAMETER :: SIG89 =0.89671, SIG85=0.85000, SIG84=0.84368
      real,PARAMETER :: SIG78 =0.78483, SIG47=0.47191, SIG18=0.18018
!     
!     DECLARE VARIABLES.
      LOGICAL GOT8510,GOT4710,GOT4796,GOT1847,GOT8498
      REAL,dimension(IM,JM),intent(out) ::  QM8510,RH4710,RH8498, &
           RH4796,RH1847
      REAL Z8510(IM,JM),Z4710(IM,JM),Z8498(IM,JM)
      REAL Z4796(IM,JM),Z1847(IM,JM)
      REAL Q1D(IM,JM),U1D(IM,JM),V1D(IM,JM),QCNVG(IM,JM)
!
      integer I,J,L
      real P100,P85,P98,P96,P84,P47,P18,ALPM,DE,PM,TM,QM,     &
           QMCVG,QS,RH,DZ
!********************************************************************
!     START NGMFLD HERE.
!     
!     INITIALIZE ARRAYS.
!$omp  parallel do
      DO J=JSTA,JEND
      DO I=1,IM
         QM8510(I,J) = D00
         RH4710(I,J) = D00
         RH8498(I,J) = D00
         RH4796(I,J) = D00
         RH1847(I,J) = D00
         Z8510(I,J)  = D00
         Z8498(I,J)  = D00
         Z4710(I,J)  = D00
         Z4796(I,J)  = D00
         Z1847(I,J)  = D00
      ENDDO
      ENDDO
!     
!     LOOP OVER HORIZONTAL GRID.
!     
!$omp  parallel do
!$omp& private(dz,p100,p18,p47,p84,p85,
!$omp&         p96,p98,pm,qdiv,qk,qkhn,qkhs,qkm1,qm,qm8510,
!$omp&         qmcvg,qs,qudx,qvdy,r2dx,r2dy,rh,rh1847,rh4710,
!$omp&         rh4796,rh8498,tm,tmt0,tmt15,z1847,z4710,z4796,
!$omp&         z8498,z8510,q1d,u1d,v1d,qcnvg)
      DO L=1,LM
!          COMPUTE MOISTURE CONVERGENCE
       DO J=JSTA_2L,JEND_2U
       DO I=1,IM
        Q1D(I,J)=Q(I,J,L)
        U1D(I,J)=UH(I,J,L)
        V1D(I,J)=VH(I,J,L)
       ENDDO
       ENDDO
       CALL CALMCVG(Q1D,U1D,V1D,QCNVG)
!          COMPUTE MOISTURE CONVERGENCE
      DO J=JSTA_M2,JEND_M2
      DO I=2,IM-1
!
!        SET TARGET PRESSURES.
         
         P100  = PINT(I,J,NINT(LMH(I,J)))
         P98   = SIG98*P100
         P96   = SIG96*P100
         P85   = SIG85*P100
         P84   = SIG84*P100
         P47   = SIG47*P100
         P18   = SIG18*P100
!     
!     
!        COMPUTE LAYER MEAN FIELDS AT THE GIVEN K.
!
!          COMPUTE P, Z, T, AND Q AT THE MIDPOINT OF THE CURRENT ETA LAYER.
           ALPM = D50*(ALPINT(I,J,L)+ALPINT(I,J,L+1))
           DZ   = ZINT(I,J,L)-ZINT(I,J,L+1)
           PM   = EXP(ALPM)
           TM   = T(I,J,L)
           QM   = Q(I,J,L)
           QM   = AMAX1(QM,H1M12)
           QMCVG= QCNVG(I,J)
!
!     
!          COMPUTE RELATIVE HUMIDITY.
!
           QS=PQ0/PM*EXP(A2*(TM-A3)/(TM-A4))
!
           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
!     
!          SIGMA 0.85-1.00 MOISTURE CONVERGENCE.
           IF ((PM.LE.P100).AND.(PM.GE.P85)) THEN
              Z8510(I,J)  = Z8510(I,J) + DZ
              QM8510(I,J) = QM8510(I,J) + QMCVG*DZ
           ENDIF
!    
!          SIGMA 0.47-1.00 RELATIVE HUMIDITY.
           IF ((PM.LE.P100).AND.(PM.GE.P47)) THEN
              Z4710(I,J)  = Z4710(I,J) + DZ
              RH4710(I,J) = RH4710(I,J) + RH*DZ
           ENDIF
!
!          SIGMA 0.84-0.98 RELATIVE HUMIDITY.
           IF ((PM.LE.P98).AND.(PM.GE.P84)) THEN
              Z8498(I,J)  = Z8498(I,J) + DZ
              RH8498(I,J) = RH8498(I,J) + RH*DZ
           ENDIF
!     
!          SIGMA 0.47-0.96 RELATIVE HUMIDITY.
           IF ((PM.LE.P96).AND.(PM.GE.P47)) THEN
              Z4796(I,J)  = Z4796(I,J) + DZ
              RH4796(I,J) = RH4796(I,J) + RH*DZ
           ENDIF
!     
!          SIGMA 0.18-0.47 RELATIVE HUMIDITY.
           IF ((PM.LE.P47).AND.(PM.GE.P18)) THEN
              Z1847(I,J)  = Z1847(I,J) + DZ
              RH1847(I,J) = RH1847(I,J) + RH*DZ
           ENDIF
!
      ENDDO
      ENDDO
      ENDDO
!     
      DO J=JSTA_M2,JEND_M2
      DO I=2,IM-1
!        NORMALIZE TO GET LAYER MEAN VALUES.
         IF (Z8510(I,J).GT.0) THEN
            QM8510(I,J) = QM8510(I,J)/Z8510(I,J)
         ELSE
            QM8510(I,J) = SPVAL
         ENDIF
         IF (ABS(QM8510(I,J)-SPVAL).LT.SMALL)QM8510(I,J)=H1M12
!
         IF (Z4710(I,J).GT.0) THEN
            RH4710(I,J) = RH4710(I,J)/Z4710(I,J)
         ELSE
            RH4710(I,J) = SPVAL
         ENDIF
!
         IF (Z8498(I,J).GT.0) THEN
            RH8498(I,J) = RH8498(I,J)/Z8498(I,J)
         ELSE
            RH8498(I,J) = SPVAL
         ENDIF
!
         IF (Z4796(I,J).GT.0) THEN
            RH4796(I,J) = RH4796(I,J)/Z4796(I,J)
         ELSE
            RH4796(I,J) = SPVAL
         ENDIF
!
         IF (Z1847(I,J).GT.0) THEN
            RH1847(I,J) = RH1847(I,J)/Z1847(I,J)
         ELSE
            RH1847(I,J) = SPVAL
         ENDIF
      ENDDO
      ENDDO
!
!     
!     END OF ROUTINE.
!     
      RETURN
      END