!WRF:MODEL_MP:PHYSICS
!

MODULE module_mp_eta 1

CONTAINS
!
!---------------------------------------------------------------------
!---------------------------------------------------------------------

   SUBROUTINE ETAMP    (itimestep,DT,XLAND,pi3d,p8w,P_PHY,TH,QV,QL,  & 1,2
                        RAINNC,PREC,T0ETA,Q0ETA,P0ETA,               &
                        IDS,IDE,JDS,JDE,KDS,KDE,                     &
                        IMS,IME,JMS,JME,KMS,KME,                     &
                        ITS,ITE,JTS,JTE,KTS,KTE                      )
!---------------------------------------------------------------------
      IMPLICIT NONE
!---------------------------------------------------------------------
      INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE                  &
                           ,IMS,IME,JMS,JME,KMS,KME                  &
                           ,ITS,ITE,JTS,JTE,KTS,KTE                  &
                           ,itimestep

      REAL, INTENT(IN), DIMENSION(ims:ime, kms:kme, jms:jme)::p8w,p_phy,pi3d
      REAL, INTENT(IN), DIMENSION(ims:ime, jms:jme):: XLAND
      REAL, INTENT(INOUT), DIMENSION(ims:ime, kms:kme, jms:jme):: P0ETA
      REAL, INTENT(INOUT), DIMENSION(ims:ime, kms:kme, jms:jme):: &
                                                    QV,QL,Q0ETA,T0ETA,TH
      REAL, INTENT(INOUT), DIMENSION(ims:ime, jms:jme):: PREC,RAINNC

      REAL, INTENT(IN)                     :: DT
      REAL, DIMENSION(its:ite, kts:kte, jts:jte)::TFLIP,QFLIP,QLFLIP,PFLIP,T
      REAL, DIMENSION(its:ite, kts:kte+1, jts:jte)::P8WFLIP
      REAL, DIMENSION(its:ite, kts:kte, jts:jte)::T0FLIP,Q0FLIP,P0FLIP

      INTEGER :: I,J,K,KFLIP

!!! for itimestep = 1, T0ETA,Q0ETA,P0ETA are approximation only

      DO J = jts,jte
      DO K = KTS,KTE
      DO I = its,ite
         T(I,K,J) = TH(i,k,j)*pi3d(i,k,j)
      ENDDO
      ENDDO
      ENDDO

      if (itimestep .eq. 1)  then
      DO J = jts,jte
      DO K = KTS,KTE
      DO I = its,ite
         T0ETA(I,K,J) = T(I,K,J)
         Q0ETA(I,K,J) = MAX(0., QV(I,K,J))
         P0ETA(I,K,J) = P_PHY(I,K,J)
      ENDDO
      ENDDO
      ENDDO

      endif


      DO K = KTS,KTE
         KFLIP=KTE+1-K
         DO J = jts,jte
         DO I = its,ite
            TFLIP (I,K,J) = T(I,KFLIP,J)
            QFLIP (I,K,J) = MAX(0.,QV(I,KFLIP,J)/(1.+QV(I,KFLIP,J)))
            QLFLIP(I,K,J) = QL(I,KFLIP,J)
            PFLIP (I,K,J) = P_PHY(I,KFLIP,J)
            T0FLIP(I,K,J) = T0ETA(I,KFLIP,J)
            Q0FLIP(I,K,J) = MAX(0.,Q0ETA(I,KFLIP,J)/(1.+Q0ETA(I,KFLIP,J)))
            P0FLIP(I,K,J) = P0ETA(I,KFLIP,J)
         ENDDO
         ENDDO
      ENDDO

      DO K = KMS,KME
         KFLIP=KME+1-K
         DO J = jts,jte
         DO I = its,ite
            P8WFLIP(I,K,J) = P8W(I,KFLIP,J)
         ENDDO
         ENDDO
      ENDDO

      CALL GSCOND (DT,1,XLAND,PFLIP,P0FLIP,                           &
                   TFLIP,QFLIP,QLFLIP,T0FLIP,Q0FLIP,                  &
                   ids,ide, jds,jde, kds,kde,                         &
                   ims,ime, jms,jme, kms,kme,                         &
                   its,ite, jts,jte, kts,kte                          )

      CALL PRECPD (DT,1,QFLIP,QLFLIP,Q0FLIP,T0FLIP,TFLIP,XLAND,PFLIP, &
                   P8WFLIP,PREC,RAINNC,                               &
                   ids,ide, jds,jde, kds,kde,                         &
                   ims,ime, jms,jme, kms,kme,                         &
                   its,ite, jts,jte, kts,kte                          )
   
      DO J = jts,jte
      DO K = KTS,KTE
         KFLIP=KTE+1-K
         DO I = its,ite
            T(I,KFLIP,J)     = TFLIP (I,K,J) 
            QV(I,KFLIP,J)    = MAX(0., QFLIP(I,K,J)/(1. - QFLIP(I,K,J)))
            QL(I,KFLIP,J)    = QLFLIP(I,K,J) 
            T0ETA(I,KFLIP,J) = T0FLIP(I,K,J) 
            Q0ETA(I,KFLIP,J) = MAX(0., Q0FLIP(I,K,J)/(1. - Q0FLIP(I,K,J)))
            P0ETA(I,K,J)     = P_PHY(I,K,J)
         ENDDO
      ENDDO
      ENDDO

      DO K = KTS,KTE
      DO J = jts,jte
      DO I = its,ite
         TH(I,K,J) = T(i,k,j)/pi3d(i,k,j)
      ENDDO
      ENDDO
      ENDDO

 
   END SUBROUTINE ETAMP 

!----------------------------------------------------------------------

 SUBROUTINE GSCOND(DT,NPHS,XLAND,PFLIP,P0FLIP,                        & 1,8
                   T,Q,CWM,T0,Q0,                                     &
                   ids,ide, jds,jde, kds,kde,                         &
                   ims,ime, jms,jme, kms,kme,                         &
                   its,ite, jts,jte, kts,kte                          )
!----------------------------------------------------------------------
 IMPLICIT NONE
!----------------------------------------------------------------------
       REAL, PARAMETER :: A2=17.2693882,A3=273.16,A4=35.86,           &
                          PQ0=379.90516, CP=1004.6,ELWV=2.50E6,       &
                          ELIV=2.834E6,EPSQ=2.E-12,R=287.04,CPR=CP*R
       REAL, PARAMETER :: RCP=1./CP
!---------------------------------------------------------------------- 
       INTEGER, INTENT(IN)        :: ids,ide, jds,jde, kds,kde ,      &
                                     ims,ime, jms,jme, kms,kme ,      &
                                     its,ite, jts,jte, kts,kte

       REAL, INTENT(INOUT), DIMENSION(its:ite, kts:kte, jts:jte):: &
                                                        Q,CWM,Q0,T0,T
       REAL, INTENT(IN), DIMENSION(its:ite, kts:kte, jts:jte)::PFLIP,P0FLIP
       REAL, INTENT(IN), DIMENSION(ims:ime, jms:jme)::XLAND

       INTEGER, INTENT(IN)                     :: NPHS
       REAL,    INTENT(IN)                     :: DT

       INTEGER, DIMENSION(its:ite, jts:jte):: LMH
       REAL,    DIMENSION(its:ite, jts:jte):: U00
       REAL,    DIMENSION(2*kte)   :: UL

!      INTEGER, DIMENSION(ims:ime, kms;kme, jms:jme):: HTM
!----------------------------------------------------------------------
       INTEGER:: IW(kts:kte)
       REAL,DIMENSION(kts:kte, its:ite, jts:jte):: T_T,T0_T,Q_T,Q0_T, &
                                                   CWM_T
!                                                  ,HTM_T
!      REAL,DIMENSION(its:ite,jts:jte)          :: PDSL
!      REAL,DIMENSION(its:ite,jts:jte)          :: RES
!---------------------------------------------------------------------- 
       INTEGER :: LM,J,I,L
       INTEGER :: LMHIJ,LML,IWKL
       REAL    :: MR,KE,DTPH,RDTPH,TWODT,RTWODT,C0,C1,C2,US,EPS,CCLIMIT
       REAL    :: CLIMIT,UTIM,U00IJ,P0IJ,RESIJ,QKL,E0,COND,CWMKL
       REAL    :: PDSLIJ,TKL,TMT0,TMT15,AI,BIQW,QI,QINT,U00KL,FITHH,PP
       REAL    :: PP0,AT,AQ,AP,FIW,EC,CCRKL,RQKLL,CCR,RQKL,QC,ELV,BI,QW,FI
       REAL    :: THH,US00,CCRKL1,AA,AB,AC,AD,AE,AF,AG
       REAL    :: CONDK,QTEMP,RQTMP,CONE0
!-------------------------------------------------------------
!-----------------------------------------------------------------------
!--------------PREPARATORY CALCULATIONS---------------------------------

      LM = kte
      DTPH =float(NPHS)*DT
      RDTPH=1./DTPH
      TWODT=DTPH
      RTWODT=1./TWODT                                                   
      C0=1.5E-4                                                         
      C1=300.                                                          
      C2=0.5                                                            
      MR=3.0E-4                                                         
      KE=2.0E-5                                                         
      US=1.
      EPS=0.622
      CCLIMIT=1.0E-3                                                    
      CLIMIT =1.0E-20                                                   

      do j = jts,jte
      do i = its,ite
         LMH(i,j) = kme-1
!        RES(i,j) = 1.
      enddo
      enddo

!     do j = jts,jte
!     do i = its,ite
!     do k = kms,kme
!        HTM(i,k,j) = 1.
!     enddo
!     enddo
!     enddo

      do j = jts,jte
      do i = its,ite
         U00(I,J)=(2.-XLAND(i,j))*0.75+(XLAND(i,j) -1.)*0.80
      enddo
      enddo

      DO L=1,2*LM
      IF(L.GE.LM-10.AND.L.LE.LM)THEN
        UL(L)=0.1*FLOAT(L-LM+10)
      ELSE
        UL(L)=0.
      ENDIF
      ENDDO


!-----------------------------------------------------------------------
!------------------PADDING SPECIFIC HUMIDITY & CWM IF TOO SMALL---------
!-----------------------------------------------------------------------
      DO J=jts,jte
      DO L=1,LM                              
      DO I=its,ite
        IF(Q(I,L,J).LT.EPSQ)Q(I,L,J)=EPSQ  ! *HTM(I,L,J)                       
        IF(CWM(I,L,J).LT.CLIMIT)CWM(I,L,J)=CLIMIT  ! *HTM(I,L,J)                   
      ENDDO
      ENDDO
      ENDDO
!
!     DO J=jts,jte 
!     DO I=its,ite
!       PDSL(I,J)=RES(I,J)*PD(I,J)                                              
!     ENDDO
!     ENDDO
!
      IW(1)=0
      UTIM=1.
!
!-----------------------------------------------------------------------
!*************BEGINNING OF GRID-SCALE CONDENSATION/EVAP. LOOP***********
!-----------------------------------------------------------------------
!***
!***  TRANSPOSE ARRAYS
!***
!     CALL SGETMO(T,LDA,LDA,LM,T_T,LM)
!     CALL SGETMO(Q,LDA,LDA,LM,Q_T,LM)
!     CALL SGETMO(HTM,LDA,LDA,LM,HTM_T,LM)
!     CALL SGETMO(CWM,LDA,LDA,LM,CWM_T,LM)
!     CALL SGETMO(T0,LDA,LDA,LM,T0_T,LM)
!     CALL SGETMO(Q0,LDA,LDA,LM,Q0_T,LM)

      CALL SGETMO(T,T_T,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
      CALL SGETMO(Q,Q_T,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
!     CALL SGETMO(HTM,HTM_T,               &
!                 ids,ide,jds,jde,kds,kde, &
!                 ims,ime,jms,jme,kms,kme, &
!                 its,ite,jts,jte,kts,kte  )
      CALL SGETMO(CWM,CWM_T,               &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )

      CALL SGETMO(T0,T0_T,                 &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
      CALL SGETMO(Q0,Q0_T,                 &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
!
!-----------------------------------------------------------------------
!------------------QW, QI AND QINT--------------------------------------
!-----------------------------------------------------------------------
      DO 100 J=jts,jte
      DO 100 I=its,ite
!-----------------------------------------------------------------------
!
      LMHIJ=LMH(I,J)
!     HBM2IJ=HBM2(I,J)
      U00IJ=U00(I,J)
!     P0IJ=P0(I,J)
!     RESIJ=RES(I,J)
!     PDSLIJ=PDSL(I,J)
!
      DO 90 L=2,LM
!
      TKL=T_T(L,I,J)
      QKL=Q_T(L,I,J)
      CWMKL=CWM_T(L,I,J)
!
      COND=0.
      E0=0.
      LML=LM-LMHIJ
!     HH=HTM_T(L,I,J)*HBM2IJ
!     HH=HBM2IJ
      TMT0=(TKL-273.16) ! *HH                                                
      TMT15=AMIN1(TMT0,-15.) ! *HH                                            
      AI=0.008855
      BI=1.
!
      IF(TMT0.LT.-20.)THEN
        AI=0.007225
        BI=0.9674
      ENDIF
!
!     QW=HH*PQ0/(PDSLIJ*AETA(L)+PT(i,j))*EXP(HH*A2*(T(I,L,J)-A3)/(T(I,L,J)-A4))                  
      QW=PQ0/PFLIP(I,L,J)*EXP(A2*(T(I,L,J)-A3)/(T(I,L,J)-A4))                  
      QI=QW*(BI+AI*AMIN1(TMT0,0.))                               
      QINT=QW*(1.-0.00032*TMT15*(TMT15+15.))                        
      IF(TMT0.LE.-40.)QINT=QI                                    
!-----------------------------------------------------------------------
!-------------------ICE-WATER ID NUMBER IW------------------------------
!-----------------------------------------------------------------------
      IF(TMT0.LT.-15.)THEN
        U00KL=U00IJ+UL(L+LML)*(0.95-U00IJ)*UTIM
        FI=Q(I,L,J)-U00KL*QI
        IF(FI.GT.0..OR.CWMKL.GT.CLIMIT)THEN                    
          IW(L)=1                                                   
        ELSE                                                           
          IW(L)=0                                                   
        ENDIF                                                         
      ENDIF
!
      IF(TMT0.GE.0.)THEN
        IW(L)=0                                                      
      ENDIF
!
      IF(TMT0.LT.0.0.AND.TMT0.GE.-15.)THEN
        IW(L)=0
        IF(IW(L-1).EQ.1.AND.CWMKL.GT.CLIMIT)IW(L)=1 
      ENDIF
!-----------------------------------------------------------------------
!--------------CONDENSATION AND EVAPORATION OF CLOUD--------------------
!------------------------AT, AQ AND DP/DT-------------------------------
!-----------------------------------------------------------------------
      THH=TWODT ! *HH                                                      
      PP=PFLIP(I,L,J)
!     PP0=P0IJ*RESIJ*AETA(L)+PT(i,j)
      PP0=P0FLIP(I,L,J)
      AT=(TKL-T0_T(L,I,J))*RTWODT                                        
      AQ=(QKL-Q0_T(L,I,J))*RTWODT                                        
      AP=(PP-PP0)*RTWODT         
      IWKL=IW(L)                                                      
      U00KL=U00IJ+UL(L+LML)*(0.95-U00IJ)*UTIM
!-----------------------------------------------------------------------
!----------------THE SATUATION SPECIFIC HUMIDITY------------------------
!-----------------------------------------------------------------------
      FIW=FLOAT(IWKL)                                                   
      ELV=(1.-FIW)*ELWV+FIW*ELIV                                     
      QC =(1.-FIW)*QINT+FIW*QI
!-----------------------------------------------------------------------
!----------------THE RELATIVE HUMIDITY----------------------------------
!-----------------------------------------------------------------------
      IF(QC.LE.0.)THEN                                                
        RQKL=0.
      ELSE                                                             
        RQKL=QKL/QC                                                 
      ENDIF                                                             
!-----------------------------------------------------------------------
!----------------CLOUD COVER RATIO CCR----------------------------------
!-----------------------------------------------------------------------
      IF(RQKL.LE.U00KL)THEN                                      
        CCR=0.
      ELSE                                                            
        RQKLL=AMIN1(US,RQKL)                                         
        CCR=1.-SQRT((US-RQKLL)/(US-U00KL))                     
      ENDIF                                                             
!-----------------------------------------------------------------------
!-----------CORRECT CCR IF IT IS TOO SMALL IN LARGE CWM REGIONS--------
!-----------------------------------------------------------------------
      IF(CCR.GE.0.01.AND.CCR.LE.0.2.AND.CWMKL.GE.0.2E-3)THEN
        CCR=AMIN1(1.,CWMKL*1.E3)
      ENDIF
!
      CCRKL=CCR
!-----------------------------------------------------------------------
!-------GIVE UP THIS POINT  IF NO CLOUD NOR CONDENSATION EXIST--------- 
!-----------------------------------------------------------------------
      IF(CCRKL.LE.CCLIMIT.AND.CWMKL.LE.CLIMIT)GO TO 90
!-----------------------------------------------------------------------
!----------------EVAPORATION OF CLOUD WATER-----------------------------
!-----------------------------------------------------------------------
        EC=0.
        IF(CCRKL.LE.CCLIMIT.AND.CWMKL.GT.CLIMIT)THEN 
          EC=QC*(U00KL-RQKL)*RTWODT                           
          E0=AMAX1(EC,0.0)                                             
          E0=AMIN1(CWMKL*RTWODT,E0) ! *HH                           
          E0=AMAX1(0.,E0)                                          
        ENDIF
!-----------------------------------------------------------------------
!----------------CONDENSATION OF CLOUD----------------------------------
!-----------------------------------------------------------------------
      IF(CCRKL.LE.0.20.OR.QC.LE.EPSQ)THEN                        
!     IF(CCRKL.LE.CCLIMIT.OR.QC.LE.EPSQ)THEN                        
        COND=0.                                                    
        GO TO 80                                                      
      ENDIF                                                            
!-----------------------------------------------------------------------
!-----------THE EQS. FOR COND. HAS BEEN REORGANIZED TO REDUCE CPU------
!-----------------------------------------------------------------------
      US00=US-U00KL 
      CCRKL1=1.-CCRKL
      AA=EPS*ELV*PP*QKL
      AB=CCRKL*CCRKL1*QC*US00
      AC=AB+0.5*CWMKL
      AD=AB*CCRKL1
      AE=CPR*TKL*TKL
      AF=AE*PP
      AG=AA*ELV
      AI=CP*AA
      COND=(AC-AD)*(AF*AQ-AI*AT+AE*QKL*AP)/(AC*(AF+AG))
!-----------------------------------------------------------------------
!-----------CHECK & CORRECT IF OVER CONDENSATION OCCURS-----------------
!-----------------------------------------------------------------------
      CONDK=(QKL-U00KL*QC*0.1)*RTWODT                             
!     CONDK=(QKL-U00KL*QC*0.6)*RTWODT                             
      IF(COND.GT.CONDK)THEN
        COND=CONDK                           
      ENDIF
!-----------------------------------------------------------------------
!----------CHECK & CORRECT IF SUPERSATUATION IS TOO HIGH----------------
!-----------------------------------------------------------------------
      QTEMP=QKL-AMAX1(0.,(COND-E0))*THH
      RQTMP=QTEMP/QC
      IF(RQTMP.GE.1.10)THEN
        COND=(QKL-1.10*QC)*RTWODT
      ENDIF
!-----------------------------------------------------------------------
      IF(COND.LT.0.)THEN                                           
        COND=0.
      ENDIF                                                             
!-----------------------------------------------------------------------
!-------------------UPDATE OF T, Q AND CWM------------------------------
!-----------------------------------------------------------------------
   80 CONTINUE                                                          
      CONE0=COND-E0
      CWM_T(L,I,J)=CONE0*THH+CWMKL                                          
!     
!-----------------------------------------------------------------------
!     ACCUMULATE LATENT HEATING DUE TO GRID-SCALE PRECIP/EVAP.
!     SCALE BY THE RECIPROCAL OF THE PERIOD AT WHICH THIS ROUTINE
!     IS CALLED.  THIS PERIOD IS THE PHYSICS TIMESTEP.
!-----------------------------------------------------------------------
!
      T_T(L,I,J)=ELV*RCP*CONE0*THH+TKL                                      
      Q_T(L,I,J)=-CONE0*THH+QKL                                             
      IF(CWM_T(L,I,J).LE.0.)CWM_T(L,I,J)=0.                            
!
   90 CONTINUE
!
  100 CONTINUE                                     
!-----------------------------------------------------------------------
!-------------------SAVE T, Q AND P FOR THIS STEP-----------------------
!-----------------------------------------------------------------------
!***
!***  TRANSPOSE BACK THE NEEDED ARRAYS
!***
!     CALL SGETMO(T_T,LM,LM,LDA,T,LDA)
!     CALL SGETMO(Q_T,LM,LM,LDA,Q,LDA)
!     CALL SGETMO(CWM_T,LM,LM,LDA,CWM,LDA)

      CALL SGETMO_T(T_T,T,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
      CALL SGETMO_T(Q_T,Q,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )


      CALL SGETMO_T(CWM_T,CWM,               &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
!
      DO J=jts,jte
      DO L=1,LM
      DO I=its,ite
        Q0(I,L,J)=Q(I,L,J)                                                   
        T0(I,L,J)=T(I,L,J)                                                   
      ENDDO
      ENDDO
      ENDDO
!
!     DO J=jts,jte
!     DO I=its,ite
!       P0(I,J)=PD(I,J)
!     ENDDO
!     ENDDO
!-----------------------------------------------------------------------
 END SUBROUTINE GSCOND                          

!=======================================================================

 SUBROUTINE SGETMO(A,ACOL_T, ids,ide, jds,jde, kds,kde,                & 8
                             ims,ime, jms,jme, kms,kme,                &
                             its,ite, jts,jte, kts,kte                 )
!-----------------------------------------------------------------------
 IMPLICIT NONE
!-----------------------------------------------------------------------
      INTEGER,INTENT(IN) ::  ids,ide, jds,jde, kds,kde,                &
                             ims,ime, jms,jme, kms,kme,                &
                             its,ite, jts,jte, kts,kte

      REAL, INTENT(IN) ,DIMENSION(its:ite,kts:kte,jts:jte) :: A
      REAL, INTENT(OUT),DIMENSION(kts:kte,its:ite,jts:jte) :: ACOL_T
      INTEGER::i,j,k 
!------------------------------------------------------
      DO j=jts,jte
      DO k=kts,kte
      DO i=its,ite
        ACOL_T(K,I,J)=A(I,K,J)
      ENDDO
      ENDDO
      ENDDO
!
 END SUBROUTINE SGETMO


!=======================================================================

 SUBROUTINE SGETMO_T(ACOL_T, A, ids,ide, jds,jde, kds,kde,             & 6
                             ims,ime, jms,jme, kms,kme,                &
                             its,ite, jts,jte, kts,kte                 )
!-----------------------------------------------------------------------
 IMPLICIT NONE
!-----------------------------------------------------------------------
      INTEGER,INTENT(IN) ::  ids,ide, jds,jde, kds,kde,                &
                             ims,ime, jms,jme, kms,kme,                &
                             its,ite, jts,jte, kts,kte

      REAL, INTENT(OUT), DIMENSION(its:ite,kts:kte,jts:jte) :: A
      REAL, INTENT(IN ), DIMENSION(kts:kte,its:ite,jts:jte) :: ACOL_T
      INTEGER::i,j,k
!------------------------------------------------------
      DO j=jts,jte
      DO k=kts,kte
      DO i=its,ite
        A(I,K,J)=ACOL_T(K,I,J)
      ENDDO
      ENDDO
      ENDDO
!
 END SUBROUTINE SGETMO_T

!----------------------------------------------------------------------

 SUBROUTINE PRECPD (DT,NPHS,Q,CWM,Q0,T0,T,XLAND,PFLIP,                & 1,6
                   P8WFLIP,PREC,ACPREC,                               &
                   ids,ide, jds,jde, kds,kde,                         &
                   ims,ime, jms,jme, kms,kme,                         &
                   its,ite, jts,jte, kts,kte                          )
!----------------------------------------------------------------------
 IMPLICIT NONE
!----------------------------------------------------------------------
       REAL,PARAMETER :: A2=17.2693882,A3=273.16,A4=35.86,  &
                         PQ0=379.90516,R=287.04,C0=0.15,    &
                         CP=1004.6,ELWV=2.50E6,ELIV=2.834E6,ROW=1.E3, &
                         G=9.8,EPSQ=2.E-12,ELIW=ELIV-ELWV         
!
       REAL,PARAMETER :: RCP=1./CP,RROW=1./ROW
!---------------------------------------------------------------------- 
       INTEGER, INTENT(IN)        :: ids,ide, jds,jde, kds,kde ,      &
                                     ims,ime, jms,jme, kms,kme ,      &
                                     its,ite, jts,jte, kts,kte
!----------------------------------------------------------------------
      INTEGER, INTENT(IN)                     :: NPHS
      REAL,    INTENT(IN)                     :: DT
      REAL, INTENT(IN), DIMENSION(ims:ime, jms:jme):: XLAND
      REAL, INTENT(INOUT), DIMENSION(ims:ime, jms:jme):: PREC,ACPREC

! ACPREC : Accumulation precipitation from time 0 for grid scale only
! PREC   : Accumulation precipitation within one time step for grid scale only

      REAL, INTENT(INOUT), DIMENSION(its:ite, kts:kte, jts:jte)::CWM, &
                                                             Q,Q0,T0,T
!     REAL, INTENT(IN), DIMENSION(its:ite, jts:jte):: PD

      REAL, DIMENSION((ite-its+1)*(jte-jts+1))   :: PRECSL1,PRECRL1
      INTEGER,DIMENSION((ite-its+1)*(jte-jts+1)) :: IWL1
      INTEGER,DIMENSION((ite-its+1)*(jte-jts+1)) :: IPREC,JPREC
      REAL,DIMENSION(kts:kte, its:ite, jts:jte):: T_T,T0_T,Q_T,Q0_T, &
                                                  CWM_T

      REAL, INTENT(IN), DIMENSION(its:ite, kts:kte, jts:jte)::PFLIP
      REAL, INTENT(IN), DIMENSION(its:ite, kts:kte+1, jts:jte)::P8WFLIP
      INTEGER, DIMENSION(its:ite, jts:jte):: LMH,SR
      REAL,    DIMENSION(its:ite, jts:jte):: U00
      REAL,    DIMENSION(2*kte)   :: UL

      INTEGER :: LM,I,J,L,MYJS,MYJE,MYIS,MYIE,N,IMJM_LOC
      INTEGER :: MYJS2,MYJE2,NPRE,LML,IWL,IWK
      REAL    :: DTPH,RDTPH,TWODT,RTWODT,KE,US,EPS,CCLIMIT,CLIMIT,CWS, &
                 CSM1,CRS1,CRS2,CR,MI0,AA2,AVRAIN,ARATIM,UTIM,TTEMP,   &
                 WFIX,WMIN
      REAL    :: PDSL,CONST,U00IJ,ULL,PRECRL,PRECSL,PRAUT,PSAUT, &
                 PRACW,CONDE,RCONDE,TT,QQ,WW,U00KL,WMINK,PRECRK,PRECSK
      REAL    :: ERS,ERR,PSACI,PSM,PSM1,PSM2,PPR,PPS,CPDR,PID,TK,QK,  &
                 TMT0,TMT15,AI,BI,QW,QI,QINT,FI,FIW,QC,RQ,CCR,RQKLL,CWMK
      REAL    :: EXPF,AA1,AMAXCM,CS,TMT0K,U00KLT,AMAXRQ,HHT,QTEMP,TMT0T,&
                 TMT15T,QWT,QIT,QINTT,QCT,RQT,RQTT,ERK,RPRS,ERRT,ERST, &
                 AMAXPS,PRECRS,PRECSS,APREC,TOTPPT
!-----------------------------------------------------------------------
!***********************************************************************
!--------------PREPARATORY CALCULATIONS---------------------------------

     
      MYJS=jts
      MYJE=jte
      LM = kte
      MYIS=its
      MYIE=ite
      MYJS2=jts
      MYJE2=jte
      IMJM_LOC = (ite-its+1)*(jte-jts+1)

      DTPH  = float(NPHS) * DT
      RDTPH = 1. / DTPH
      TWODT= DTPH
      RTWODT=1./TWODT                                                   
      KE=2.0E-5                                                         
      US=1.
      EPS=0.622E0                                                       
      CCLIMIT=1.0E-3                                                    
      CLIMIT=1.0E-20                                                    
      CWS=0.025                                                         
      CSM1=5.0000E-8                                                    
      CRS1=5.00000E-6                                                   
      CRS2=6.66600E-10                                                  
      CR=5.0E-4                                                         
      MI0=5.0E-4                                                        
      AA2=1.25E-3                                                       
!     AVRAIN=AVRAIN+1.
!     ARATIM=ARATIM+1

      do j = jts,jte
      do i = its,ite
         LMH(i,j) = kme-1
      enddo
      enddo

      do j = jts,jte
      do i = its,ite
         U00(I,J)=(2.-XLAND(i,j))*0.75+(XLAND(i,j) -1.)*0.80
      enddo
      enddo

      DO L=1,2*LM
      IF(L.GE.LM-10.AND.L.LE.LM)THEN
        UL(L)=0.1*FLOAT(L-LM+10)
      ELSE
        UL(L)=0.
      ENDIF
      ENDDO

!-------------------PADDING CLOUD MIXING RATIO IF TOO SMALL-------------
      DO 20 L=1,LM                                                      
      DO J=MYJS,MYJE
      DO I=MYIS,MYIE
!       CWM(I,L,J)=CWM(I,L,J)*HTM(I,L,J)*HBM2(I,J) 
!       CWM(I,L,J)=CWM(I,L,J) ! *HBM2(I,J)                              
        IF(CWM(I,L,J).LT.0.)CWM(I,L,J)=0.
!------------------PADDING SPECIFIC HUMIDITY IF TOO SMALL---------------
        IF(Q(I,L,J).LT.EPSQ)Q(I,L,J)=EPSQ ! *HTM(I,L,J)                       
      ENDDO
      ENDDO
   20 CONTINUE                                                          
!
      UTIM=1.
!-----------------------------------------------------------------------
      DO N=1,IMJM_LOC
        IWL1(N)=0
        PRECRL1(N)=0.
        PRECSL1(N)=0.
      ENDDO
!------------CHOOSE THE COLUMNS WHERE PREC CAN BE PRODUCED--------------
      NPRE=0
      DO 35 J=MYJS2,MYJE2
      DO 35 I=MYIS,MYIE
!
      DO L=2,LM
        TTEMP=0.025*(T(I,L,J)-273.16)
        WFIX=0.9814*EXP(0.01873*L)
        WMIN=0.1E-3*EXP(TTEMP)*WFIX
        IF(CWM(I,L,J).GT.WMIN)GO TO 33
      ENDDO
!
      GO TO 35
   33 NPRE=NPRE+1
      IPREC(NPRE)=I
      JPREC(NPRE)=J
   35 CONTINUE
!------------------------------------------------------------------------
!***
!***  TRANSPOSE ARRAYS
!***
      CALL SGETMO(T,T_T,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
      CALL SGETMO(Q,Q_T,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
      CALL SGETMO(CWM,CWM_T,               &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )

!     CALL SGETMO(T,LDA,LDA,LM,T_T,LM)
!     CALL SGETMO(Q,LDA,LDA,LM,Q_T,LM)
!     CALL SGETMO(CWM,LDA,LDA,LM,CWM_T,LM)
!     CALL SGETMO(HTM,LDA,LDA,LM,HTM_T,LM)
!     CALL SGETMO(TRAIN,LDA,LDA,LM,TRAIN_T,LM)
!-----------------------------------------------------------------------
!-----------------BEGINING OF PRECIPITATION CALCULATION-----------------
!-----------------------------------------------------------------------
!***
!***  LOOP OVER ALL POSSIBLE PRECIPITATION POINTS
!***
!!omp parallel do 
!!omp& private(aai,aetal,ai,amaxcm,amaxps,amaxrq,aprec,bi,ccr,conde,
!!omp&         const,cpdr,cs,cwmk,detal,erk,err,errt,ers,erst,expf,fi,
!!omp&         fiw,hbm2k,hh,htmk,i,iwl,j,lml,mi0,pdsl,pid,ppr,pps,
!!omp&         pracw,praut,precrk,precrl,precsk,precsl,precss,psaci,
!!omp&         psaut,psm,psm1,psm2,qc,qct,qi,qint,qintt,qit,qk,qq,
!!omp&         qtemp,qw,qwt,rconde,rprs,rq,rqkll,rqt,rqtt,tk,tmt0,
!!omp&         tmt0k,tmt0t,tmt15,tmt15t,totppt,tt,ttemp,u00ij,u00kl,
!!omp&         u00klt,ull,wfix,wmink,ww)
!
      DO 300 N=1,NPRE
!
      I=IPREC(N)
      J=JPREC(N)
!     HBM2K=HBM2(I,J)
!     PDSL=PD(I,J)                                              
!     CONST=PDSL/G*TWODT                                        
      LML=LM-LMH(I,J)
      U00IJ=U00(I,J)
!
      DO 180 L=2,LM  
!
!     DETAL=DETA(L)
      ULL=UL(L)
!     AETAL=AETA(L)
      WFIX=0.9814*EXP(0.01873*L)
!
      PRECRL=0.                                                      
      PRECSL=0.                                                      
      PRAUT=0.                                                      
      PSAUT=0.                                                      
      PRACW=0.                                                      
      PSACI=0.                                                      
      ERR  =0.                                                      
      ERS  =0.                                                      
      PSM  =0.                                                      
      PSM1 =0.                                                      
      PSM2 =0.                                                      
      PPR  =0.
      PPS  =0.
      CPDR =0.
!     HH   =0.
      PID  =0.
      IWL  =0.
      CONDE=0.
      RCONDE=0.
!-----------------------------------------------------------------------
      TT=T_T(L,I,J)
      QQ=Q_T(L,I,J)
      WW=CWM_T(L,I,J)
!     HTMK=HTM_T(L,I,J)
!-----------------------------------------------------------------------
      U00KL=U00IJ+UL(L+LML)*(0.95-U00IJ)*UTIM
      TTEMP=0.025*(TT-273.16)
      WMINK=0.1E-3*EXP(TTEMP)*WFIX
!-----------------------------------------------------------------------
!----------CHOOSE THE POINTS WHERE PRECIPITATION CAN BE PRODUCED--------
!-----------------------------------------------------------------------
      PRECRK=AMAX1(0.,PRECRL1(N))                                         
      PRECSK=AMAX1(0.,PRECSL1(N))                                         
!     HH=HTMK*HBM2K
      IF(WW.LT.WMINK.AND.(PRECRK+PRECSK).EQ.0.)THEN
        PID=0.
      ELSE
!       PID=HH
        PID=1
      ENDIF
!-----------------------------------------------------------------------
!-------------------QW, QI AND QINT-------------------------------------
!-----------------------------------------------------------------------
      IF(PID.EQ.1.)THEN
!       CONST=PDSL/G*TWODT                                        
!       CONDE=CONST*DETAL                                               
        CONDE=(P8WFLIP(I,L+1,J)-P8WFLIP(I,L,J))/G*TWODT
        RCONDE=1./CONDE                                                   
        TK=TT
        QK=QQ
        TMT0=(TK-273.16) ! *HH
        TMT15=AMIN1(TMT0,-15.) ! *HH
        AI=0.008855
        BI=1.
!
        IF(TMT0.LT.-20.)THEN
          AI=0.007225
          BI=0.9674
        ENDIF
!
!       QW=HH*PQ0/(PDSL*AETAL+PT)  &
!                    *EXP(HH*A2*(TK-A3)/(TK-A4))                  
        QW=PQ0/PFLIP(I,L,J)  &
                     *EXP(A2*(TK-A3)/(TK-A4))                  
        QI=QW*(BI+AI*AMIN1(TMT0,0.))                                 
        QINT=QW*(1.-0.00032*TMT15*(TMT15+15.))                          
        IF(TMT0.LE.-40.)QINT=QI
!-------------------ICE-WATER ID NUMBER IW------------------------------
        IF(TMT0.LT.-15.)THEN                                             
          FI=QK-U00KL*QI
          IF(FI.GT.0..OR.WW.GT.CLIMIT) THEN                    
            IWL=1                                                   
          ELSE                                                           
            IWL=0                                                   
          ENDIF                                                         
        ENDIF                                                            
!
        IF(TMT0.LT.0.0.AND.TMT0.GE.-15.0)THEN                            
          IWL=0                                                   
          IF(IWL1(N).EQ.1.AND.WW.GT.CLIMIT)IWL=1 
        ENDIF                                                            
!
        IF(TMT0.GE.0.)THEN                                               
          IWL=0                                                      
        ENDIF                                                            
!----------------THE SATUATION SPECIFIC HUMIDITY------------------------
        FIW=FLOAT(IWL)                                                
        QC=(1.-FIW)*QINT+FIW*QI
!----------------THE RELATIVE HUMIDITY----------------------------------
        IF(QC.LE.0.)THEN                                                
          RQ=1.E-10
        ELSE                                                             
          RQ=QK/QC
        ENDIF                                                             
!----------------CLOUD COVER RATIO CCR----------------------------------
        IF(RQ.LE.U00KL)THEN                                      
          CCR=0.
        ELSE                                                            
          RQKLL=AMIN1(US,RQ)                                         
          CCR=1.-SQRT((US-RQKLL)/(US-U00KL))                     
        ENDIF                                                             
!-----------CORRECT CCR IF IT IS TOO SMALL IN LARGE CWM REGIONS--------
        IF(CCR.GE.0.01.AND.CCR.LE.0.2.AND. WW.GE.0.2E-3)THEN
          CCR=AMIN1(1.,WW*1.0E3)
        ENDIF
      ENDIF
   60              CONTINUE
!-----------------------------------------------------------------------
!------------------PRECIPITATION PRODUCTION RATES-----------------------
!------------------AUTO-CONVERT RATES-----------------------------------
!-----------------------------------------------------------------------
      IF(PID.EQ.1.)THEN
        IWK=IWL
        CWMK=AMAX1(0.,WW-CLIMIT)                                 
        MI0=WMINK
!
        IF(IWK.EQ.1)THEN                                                 
          EXPF=EXP(0.025*TMT0)                                           
          AA1=1.E-3*EXPF                                                 
          PSAUT=AA1*AMAX1(0.,CWMK-MI0)                                
          CPDR=-PSAUT*TWODT                                           
          IF(-CPDR.GE.CWMK)THEN                                         
            CPDR=-CWMK                                                 
            PSAUT=-CPDR*RTWODT                                      
          ENDIF                                                         
        ELSE                                                              
          AMAXCM=AMAX1(0.,CWMK-MI0)                                      
          PRAUT=C0*AMAXCM*AMAXCM                                   
          CPDR=-PRAUT*TWODT                                           
          IF(-CPDR.GE.CWMK)THEN                                         
            CPDR=-CWMK                                                  
            PRAUT=-CPDR*RTWODT                                       
          ENDIF                                                         
        ENDIF                                                            
        PPR=PRAUT*CONDE
        PPS=PSAUT*CONDE
      ENDIF
!
      IF(PID.EQ.1.)THEN
!       WW=CPDR*HH+WW                                   
        WW=CPDR+WW                                   
        PRECRL=PRECRL1(N)+PPR ! *HH
        PRECSL=PRECSL1(N)+PPS ! *HH
      ENDIF
!-----------------------------------------------------------------------
!-----------------------ACCRETIONS--------------------------------------
!-----------------------------------------------------------------------
      IF(PID.EQ.1.)THEN
        IWK=IWL
        CWMK=WW
        PRECRK=AMAX1(0.,PRECRL1(N))                                         
        PRECSK=AMAX1(0.,PRECSL1(N))                                         
        IF(IWK.EQ.1)THEN                                                 
          EXPF=EXP(0.025*TMT0)                                           
          CS=AA2*EXPF                                                    
          PSACI=CS*AMAX1(0.,CWMK)*PRECSK                          
          CPDR=-PSACI*TWODT                                           
          IF(-CPDR.GE.CWMK)THEN                                         
            CPDR=-CWMK                                                 
            PSACI=-CPDR*RTWODT                                      
          ENDIF                                                         
        ELSE                                                              
          PRACW=CR*AMAX1(0.,CWMK)*(PRECRK+PRECSK)             
          CPDR=-PRACW*TWODT                                           
          IF(-CPDR.GE.CWMK)THEN                                         
            CPDR=-CWMK                                                  
            PRACW=-CPDR*RTWODT                                       
          ENDIF                                                         
        ENDIF                                                            
        PPR=PRACW*CONDE
        PPS=PSACI*CONDE
      ENDIF
!
      IF(PID.EQ.1.)THEN
!       WW=CPDR*HH+WW                                   
        WW=CPDR+WW                                   
        PRECRL=PRECRL+PPR ! *HH                                       
        PRECSL=PRECSL+PPS ! *HH                                       
      ENDIF
!-----------------------------------------------------------------------
!-----EVAPORATION/CONDENSATION OF PRECIPITATION-------------------------
!***** ERR & ERS POSITIVE--EVAPORATION                                  
!***** ERR & ERS NEGTIVE---CONDENSATION                                 
!-----------------------------------------------------------------------
      IF(PID.EQ.1.0)THEN
        QK=QQ
        TMT0K=TMT0
        IF(TMT0K.LT.-30.)TMT0K=-30.                                        
        PRECRK=AMAX1(0.,PRECRL)                                         
        PRECSK=AMAX1(0.,PRECSL)                                         
!---------------------------------------------------------------------- 
! INCREASE THE EVAPORATION/CONDENSATION FOR STRONG/LIGHT PREC           
!---------------------------------------------------------------------- 
        U00KLT=U00KL
        AMAXRQ=AMAX1(0.,U00KL-RQ)   
        ERR=KE*AMAXRQ*PRECRK**0.5                                      
!
        IF(TMT0.GE.0.)THEN                                               
          ERS=0.                                                         
        ELSE                                                              
          ERS=(CRS1+CRS2*TMT0K)*AMAXRQ*PRECSK/U00KLT                      
        ENDIF                                                            
!
        IF(ERR+ERS.LE.1.E-20) GO TO 125
!---------------CORRECT IF OVER-EVAPO./COND. OCCURS-------------------- 
!       HHT=HH*TWODT
        HHT=TWODT
        TTEMP=TT-RCP*(ELWV*ERR+ELIV*ERS)*HHT
        QTEMP=QQ+HHT*(ERR+ERS)
        TMT0T=(TTEMP-273.16)  ! *HH
        IF(TMT0T.LT.-30.)TMT0T=-30.                                        
        TMT15T=AMIN1(TMT0T,-15.)  ! *HH
        AI=0.008855
        BI=1.
!
        IF(TMT0T.LT.-20.)THEN
          AI=0.007225
          BI=0.9674
        ENDIF
!
!       QWT=HH*PQ0/(PDSL*AETAL+PT)*EXP(HH*A2*(TTEMP-A3)/(TTEMP-A4))                  
        QWT=PQ0/PFLIP(I,L,J)*EXP(A2*(TTEMP-A3)/(TTEMP-A4))                  
        QIT=QWT*(BI+AI*AMIN1(TMT0T,0.))                                 
        QINTT=QWT*(1.-0.00032*TMT15T*(TMT15T+15.))                          
        IF(TMT0T.LE.-40.)QINTT=QIT                                    
        FIW=FLOAT(IWL)
        QCT=(1.-FIW)*QINTT+FIW*QIT
!
        IF(QCT.LE.1.E-10) THEN
          RQT=1.E-10
          RQTT=1.E-10
        ELSE
          RQT=QTEMP/QCT
          RQTT=QQ/QCT
        ENDIF
!
        IF(RQT.LE.U00KL) GO TO 125
!
        ERK=(U00KL-RQTT)*QCT*RTWODT
        RPRS=ERK/(PRECRK+PRECSK)                                          
        ERRT=PRECRK*RPRS                                                
        ERST=PRECSK*RPRS                                                
        ERR=AMAX1(0.,0.5*(ERR+ERRT))
        ERS=AMAX1(0.,0.5*(ERS+ERST))
!         
 125    CONTINUE
!
        PPR=-ERR*CONDE                                                 
        PPS=-ERS*CONDE                                                 
!
        IF(-PPR.GE.PRECRK)THEN                                         
          PPR=-PRECRK                                                  
          ERR=-PPR*RCONDE
        ENDIF                                                            
!
        IF(-PPS.GE.PRECSK)THEN                                         
          PPS=-PRECSK                                                  
          ERS=-PPS*RCONDE
        ENDIF                                                            
!
      ENDIF                                                            
!
      IF(PID.EQ.1.)THEN
        PRECRL=PRECRL+PPR ! *HH
        PRECSL=PRECSL+PPS ! *HH
      ENDIF                                                            
!-----------------------------------------------------------------------
!--------------------MELTING OF THE SNOW--------------------------------
!-----------------------------------------------------------------------
      IF(PID.EQ.1.)THEN
        CWMK=WW                                                     
        AMAXPS=AMAX1(0.,PRECSL)                                      
!
        IF(TMT0.GT.0.)THEN                                               
          PSM1=CSM1*TMT0*TMT0*AMAXPS                                  
          PSM2=CWS*CR*CWMK*AMAXPS                                     
          PSM=PSM1+PSM2                                         
        ELSE                                                              
          PSM1=0.
          PSM2=0.
          PSM=0.
        ENDIF                                                            
!
        PPR=PSM*CONDE
        PPS=-PSM*CONDE
!
        IF(-PPS.GE.AMAXPS)THEN                                         
          PPS=-AMAXPS                                                  
          PPR=AMAXPS                                                   
          PSM1=-PPS*RCONDE                                            
          PSM2=0.
          PSM=PSM1
        ENDIF                                                            
!
      ENDIF                                                            
!
      IF(PID.EQ.1.)THEN
        PRECRL=PRECRL+PPR ! *HH                                       
        PRECSL=PRECSL+PPS ! *HH                                       
      ENDIF                                                            
!-----------------------------------------------------------------------
!---------------UPDATE T AND Q------------------------------------------
!-----------------------------------------------------------------------
      IF(PID.EQ.1.)THEN
!       HHT=HH*TWODT                                        
        HHT=TWODT                                        
        TT=-RCP*(ELWV*ERR+ELIV*ERS+ELIW*PSM1)*HHT+TT
        QQ=(ERR+ERS)*HHT+QQ
      ENDIF                                                            
!
!     IF(HH.EQ.1.)THEN
        IWL1(N)=IWL
        PRECRL1(N)=PRECRL
        PRECSL1(N)=PRECSL
!     ENDIF
!     
!     ACCUMULATE LATENT HEATING DUE TO GRID-SCALE PRECIP/EVAP.
!     SCALE BY THE RECIPROCAL OF THE PERIOD AT WHICH THIS ROUTINE
!     IS CALLED.  THIS PERIOD IS THE PHYSICS TIMESTEP.
!
!     TRAIN_T(L,I,J)=TRAIN_T(L,I,J)+(TT-T_T(L,I,J))*RDTPH
      T_T(L,I,J)=TT
      Q_T(L,I,J)=QQ
      CWM_T(L,I,J)=WW
  180                      CONTINUE
!-----------------------------------------------------------------------
!-------------------THE PRECIPITATION ON SFC----------------------------
!-----------------------------------------------------------------------
      PRECRS=PRECRL1(N)*RROW                                         
      PRECSS=PRECSL1(N)*RROW                                         
!
!     APREC=PRECRS+PRECSS

! from m to mm

      APREC=(PRECRS+PRECSS)*1000.
!     PREC(I,J)=PREC(I,J)+PRECRS+PRECSS                              
      PREC(I,J)=APREC
      ACPREC(I,J)=ACPREC(I,J)+APREC
!-----------------------------------------------------------------------
!---------------THE SNOW AND RAIN RATIO OF SFC PREC---------------------
!----SR IS THE RATIO OF SNOW TO THE TOTAL PRECIP------------------------
!----IF TOTAL PRECIP IS ZERO, SR IS ZERO--------------------------------
!-----------------------------------------------------------------------
      TOTPPT=PRECRS+PRECSS
      IF (TOTPPT.GT.1.E-8) THEN
       SR(I,J)=PRECSS/TOTPPT
      ELSE
       SR(I,J)=0.
      ENDIF
!-----------------------------------------------------------------------
  300 CONTINUE
!-----------------------------------------------------------------------
!***
!***  TRANSPOSE BACK
!***

      CALL SGETMO_T(T_T,T,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )
      CALL SGETMO_T(Q_T,Q,                   &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )


      CALL SGETMO_T(CWM_T,CWM,               &
                  ids,ide,jds,jde,kds,kde, &
                  ims,ime,jms,jme,kms,kme, &
                  its,ite,jts,jte,kts,kte  )

!     CALL SGETMO(T_T,LM,LM,LDA,T,LDA)
!     CALL SGETMO(Q_T,LM,LM,LDA,Q,LDA)
!     CALL SGETMO(CWM_T,LM,LM,LDA,CWM,LDA)
!     CALL SGETMO(TRAIN_T,LM,LM,LDA,TRAIN,LDA)
!-----------------------------------------------------------------------

 END SUBROUTINE PRECPD 

END MODULE module_mp_eta