!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***S/P LIN_CONDS1_TL
*

      SUBROUTINE LIN_CONDS1_TL (TE,QE,SRR,SSR,TP1,QP1,PSP1,TP5,QP5,PSP5, 1
     %                          SIGMA,TAU,N,NK)
*
#include "impnone.cdk"
      INTEGER N, NK
      REAL TE(N,NK),QE(N,NK),SRR(N),SSR(N)
      REAL TP1(N,NK),QP1(N,NK),PSP1(N)
      REAL TP5(N,NK),QP5(N,NK),PSP5(N)
      REAL SIGMA(N,NK), TAU
*
*Author
*          S. Laroche (May 2001)
*
*Revisions
* 001   S. Laroche (Nov 2002)  - add effect of surface pressure perturbations
*
*
*Object
*          to calculate the TLM of T and Q tendencies due to large scale
*          precipitation
*
*Arguments
*
*          - Output -
* TE       temperature tendency due to stratiform processes
* QE       specific humidity tendency due to stratiform processes
* SRR      rate of liquid precipitation
* SSR      rate of solid precipitation
*
*          - Input -
* TP1      perturbation of temperature
* QP1      perturbation of specific humidity
* PSP1     perturbation of surface pressure
* TP5      trajectory   of temperature
* QP5      trajectory   of specific humidity
* PSP5     trajectory   of surface pressure
* SIGMA    sigma levels
* TAU      timestep
* N        dimension of some arrays
* NK       vertical dimension
**
*
#include "phy_macros_f.h"
#include "consphy.cdk"

      INTEGER i,k,iter,niter
      REAL A1,A3,A4,LC
      REAL CHLS,ZCONS2

      PARAMETER(niter=2)
      REAL QS(niter),DQSDT(niter),DELQ(niter)
      REAL TW(niter+1),QW(niter+1)

      REAL QS5(niter),DQSDT5(niter),DELQ5(niter)
      REAL TW5(niter+1),QW5(niter+1),ZRIT5

C
C*    POINTEURS POUR ALLOCATION DYNAMIQUE
C*    -----------------------------------
C
      AUTOMATIC ( ZDSG,  REAL , (N,NK) )
      AUTOMATIC ( ZPP1,  REAL , (N,NK) )
      AUTOMATIC ( ZDPP1, REAL , (N,NK) )
      AUTOMATIC ( ZRFLN, REAL , (N) )
      AUTOMATIC ( ZRFL , REAL , (N) )
      AUTOMATIC ( ZSFLN, REAL , (N) )
      AUTOMATIC ( ZSFL , REAL , (N) )
      AUTOMATIC ( ZFLN , REAL , (N) )

      AUTOMATIC ( ZPP5,   REAL , (N,NK) )
      AUTOMATIC ( ZDPP5,  REAL , (N,NK) )
      AUTOMATIC ( ZRFLN5, REAL , (N) )
      AUTOMATIC ( ZRFL5 , REAL , (N) )
      AUTOMATIC ( ZSFLN5, REAL , (N) )
      AUTOMATIC ( ZSFL5 , REAL , (N) )
      AUTOMATIC ( ZFLN5 , REAL , (N) )
C
C*    COMPUTATIONAL CONSTANTS
C*    -----------------------
C
      CHLS   = CHLC + CHLF
      ZCONS2 = 1./(TAU*GRAV)
      A1     = 610.78

      DO i=1,N
       ZDSG(i,1) = 0.5*(SIGMA(i,2)-SIGMA(i,1))
       DO k=2,NK-1
        ZDSG(i,k) = 0.5*(SIGMA(i,k+1)-SIGMA(i,k-1))
       ENDDO
       ZDSG(i,NK) = 0.5*(1.-SIGMA(i,NK-1))+0.5*(1.-SIGMA(i,NK))
      ENDDO

      DO k=1,NK
       DO i=1,N
        ZPP1(i,k)  = SIGMA(i,k)*PSP1(i)
        ZDPP1(i,k) = ZDSG(i,k) *PSP1(i)
        ZPP5(i,k)  = SIGMA(i,k)*PSP5(i)
        ZDPP5(i,k) = ZDSG(i,k) *PSP5(i)
       ENDDO
      ENDDO

      DO i=1,N
       ZRFL (i)  = 0.
       ZSFL (i)  = 0.
       ZFLN (i)  = 0.
       ZRFL5(i)  = 0.
       ZSFL5(i)  = 0.
       ZFLN5(i)  = 0.
      ENDDO
C
C*    CALCULATE TW AND QW IN SUPERSATURATED LAYERS
C*    --------------------------------------------
C
      DO k=1,NK
       DO i=1,N
*
*       ************************* TRAJECTORY  ***********************
*
        TW5(1)  = TP5(i,k)
        QW5(1)  = QP5(i,k)
        IF(TP5(i,k).ge.TGL) THEN
          A3 = 17.269
          A4 = 35.860
          LC = CHLC
        ELSE
          A3 = 21.875
          A4 =  7.660
          LC = CHLS
        ENDIF

        QS5(1) = EPS1*A1*exp(A3*(TW5(1) - TGL)/(TW5(1) - A4))/ZPP5(i,k)
        IF(QS5(1).lt.QP5(i,k)) THEN
          DO iter = 1,niter
              QS5(iter) = EPS1*A1*exp(A3*(TW5(iter) - TGL)/(TW5(iter) - A4))/ZPP5(i,k)
           DQSDT5(iter) = QS5(iter)*A3*(TGL - A4)/((TW5(iter) - A4)**2)
            DELQ5(iter) = (QW5(iter) - QS5(iter))/(1.0 + (LC/CPD)*DQSDT5(iter))
            TW5(iter+1) = TW5(iter) + (LC/CPD)*DELQ5(iter)
            QW5(iter+1) = QW5(iter) - DELQ5(iter)
          ENDDO
        ELSE
         QW5(niter+1) = QW5(1)
         TW5(niter+1) = TW5(1)
        ENDIF

        ZRFLN5(i) = ZRFL5(i)
        ZSFLN5(i) = ZSFL5(i)
        IF(QW5(niter+1).lt.QP5(i,k)) THEN
         IF(TP5(i,k).gt.TGL) THEN
           ZRFLN5(i) = ZRFLN5(i) + (QP5(i,k)-QW5(niter+1))*ZDPP5(i,k)*ZCONS2
         ELSE
           ZSFLN5(i) = ZSFLN5(i) + (QP5(i,k)-QW5(niter+1))*ZDPP5(i,k)*ZCONS2
         ENDIF
        ENDIF

        IF (k.GT.1) THEN
         ZFLN5(i) = ZRFLN5(i) + ZSFLN5(i)
         IF(TP5(i,k).lt.TGL) ZRIT5 = 1.
         IF(TP5(i,k).ge.TGL) ZRIT5 = 0.
         ZSFLN5(i) =     ZRIT5 *ZFLN5(i)
         ZRFLN5(i) = (1.-ZRIT5)*ZFLN5(i)
        ENDIF
*
*       **************************** TLM ****************************
*
        TW(1) = TP1(i,k)
        QW(1) = QP1(i,k)
        IF(QS5(1).lt.QP5(i,k)) THEN
          DO iter = 1,niter
              QS(iter) = TW(iter)*(QS5(iter)*A3/(TW5(iter) - A4))
     %                   *(1.0 - (TW5(iter) - TGL)/(TW5(iter) - A4))
     %                 - ZPP1(i,k)*QS5(iter)/ZPP5(i,k)
           DQSDT(iter) = DQSDT5(iter)*(QS(iter)/QS5(iter) - 2*TW(iter)/(TW5(iter) - A4))
            DELQ(iter) = (QW(iter) - QS(iter))/(1.0 + (LC/CPD)*DQSDT5(iter))
     %                 - DELQ5(iter)*(LC/CPD)*DQSDT(iter)/(1.0 + (LC/CPD)*DQSDT5(iter))
            TW(iter+1) = TW(iter) + (LC/CPD)*DELQ(iter)
            QW(iter+1) = QW(iter) - DELQ(iter)

          ENDDO
        ELSE
         QW(niter+1) = QW(1)
         TW(niter+1) = TW(1)
        ENDIF
C
C*      CALCULATE RAIN/SNOW FLUX IN SUPERSATURATED LAYERS
C*      -------------------------------------------------
C
        ZRFLN(i) = ZRFL(i)
        ZSFLN(i) = ZSFL(i)
        IF(QW5(niter+1).lt.QP5(i,k)) THEN
         IF(TP5(i,k).gt.TGL) THEN
          ZRFLN(i) = ZRFLN(i) + (QP1(i,k)-QW(niter+1))*ZDPP5(i,k)*ZCONS2
     %                        + (QP5(i,k)-QW5(niter+1))*ZDPP1(i,k)*ZCONS2
         ELSE
          ZSFLN(i) = ZSFLN(i) + (QP1(i,k)-QW(niter+1))*ZDPP5(i,k)*ZCONS2
     %                        + (QP5(i,k)-QW5(niter+1))*ZDPP1(i,k)*ZCONS2
         ENDIF
        ENDIF

        IF (k.GT.1) THEN
C
C        ===================================================================
C*       DOES NOT INCLUDE THE EVAPORATION OF PRECIPITATIONS YET.
C*       (SEE ROUTINE CONDS IN PHYSICS LIBRARY AND MAHFOUF99 FOR THE REASON)
C        ===================================================================
C
C
C*        MELTING/FREEZING OF PRECIPITATIONS
C*        ----------------------------------
C
          ZFLN(i)  = ZRFLN(i)  + ZSFLN(i)
          ZSFLN(i) =       ZRIT5 *ZFLN(i)
          ZRFLN(i) =   (1.-ZRIT5)*ZFLN(i)
        ENDIF
C
C*      TENDENCIES DUE TO CONDENSATION
C*      ------------------------------
C
        QE(i,k) = -((ZRFLN(i)-ZRFL(i)) +         (ZSFLN(i)-ZSFL(i)))
     %            *(GRAV/ZDPP5(i,k))
     %          +  ((ZRFLN5(i)-ZRFL5(i)) +       (ZSFLN5(i)-ZSFL5(i)))
     %            *(GRAV/(ZDPP5(i,k)**2))*ZDPP1(i,k)

        TE(i,k) = ((ZRFLN(i)-ZRFL(i))*CHLC/CPD + (ZSFLN(i)-ZSFL(i))*CHLS/CPD)
     %            *(GRAV/ZDPP5(i,k))
     %          - ((ZRFLN5(i)-ZRFL5(i))*CHLC/CPD + (ZSFLN5(i)-ZSFL5(i))*CHLS/CPD)
     %            *(GRAV/(ZDPP5(i,k)**2))*ZDPP1(i,k)

        ZRFL5(i) = ZRFLN5(i)
        ZSFL5(i) = ZSFLN5(i)

        ZRFL(i)  = ZRFLN(i)
        ZSFL(i)  = ZSFLN(i)

       ENDDO  !( DO ON i)
      ENDDO  !( DO ON k)

C
C*    PRECIPITATION RATE AT THE GROUND LEVEL
C*    --------------------------------------
C
      DO i=1,N
        SRR(i) = ZRFL(i)
        SSR(i) = ZSFL(i)
      ENDDO
*
      RETURN
      END