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

      SUBROUTINE LIN_PRECIP1_AD ( D, DSIZ, F, FSIZ, V, VSIZ,  1,3
     $                            G, GSIZ, GZM5, GZM,
     $                            DT, NI, N, NK, 
     $                            KOUNT, J, ITASK )
*
#include "impnone.cdk"
      INTEGER :: FSIZ,NI,N,NK,KOUNT,J,ITASK,GSIZ,VSIZ,DSIZ
      REAL, DIMENSION (DSIZ) :: D   
      REAL, DIMENSION (FSIZ) :: F       
      REAL, DIMENSION (VSIZ) :: V       
      REAL, DIMENSION (GSIZ) :: G 
      REAL, DIMENSION (N,NK) :: GZM5, GZM
      REAL :: DT
*
*Author
*          J.-F. Mahfouf  RPN (September 2002)
*
*Revision
*
*Object
*          Simplified moist physics for TL/AD versions
*          to produce tendencies and precipitation from
*          deep convection and large scale condensation
*
*          ===============
*          Adjoint version
*          ===============
*
*Arguments
*
*          - Input/Output -
* F        field for permanent physics variables
* V        volatile bus
* D        dynamic bus
* G        work space
*
*          - Input -
* DSIZ     dimension of D
* FSIZ     dimension of F
* VSIZ     dimension of V
* GSIZ     dimension of G
*
*          - Input -
* GZM      height
*
*          - Input -
* DT	   timestep
* NI       1st horizontal dimension
* N        first dimension of T,Q,etc.
* NK       vertical dimension
* KOUNT    timestep number
* J        index of the row for which calculations are done
*          (used only for zonal diagnostics extraction)
* ITASK    task number
*
*
*IMPLICITES
#include "options.cdk"
#include "consphy.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
*
*MODULES
*
      REAL :: HEURSER,CDT1
      INTEGER :: IERGET, ICPU, IK, I, K
      LOGICAL :: L_CONV,L_COND
**
*     VARIABLES ALLOCATION DYNAMIQUE
*
      AUTOMATIC ( ILAB   , REAL , (NI,NK  ) )
      AUTOMATIC ( ZCTE   , REAL , (NI,NK  ) )
      AUTOMATIC ( ZCQE   , REAL , (NI,NK  ) )
      AUTOMATIC ( ZSTE   , REAL , (NI,NK  ) )
      AUTOMATIC ( ZSQE   , REAL , (NI,NK  ) )
*
      AUTOMATIC ( ZCTE5  , REAL , (NI,NK  ) )
      AUTOMATIC ( ZCQE5  , REAL , (NI,NK  ) )
      AUTOMATIC ( ZCCF5  , REAL , (NI,NK  ) )
      AUTOMATIC ( ZQPLUS5, REAL , (NI,NK  ) )
      AUTOMATIC ( ZTPLUS5, REAL , (NI,NK  ) )
      AUTOMATIC ( ZCRR5  , REAL , (NI     ) )
      AUTOMATIC ( ZCSR5  , REAL , (NI     ) )
      AUTOMATIC ( DBDT5  , REAL , (NI     ) )

*     FONCTION-FORMULE POUR L'ADRESSAGE
      IK(I,K) = (K-1)*NI + I - 1  
*
      CDT1 = FACTDT * DT
      ICPU = ITASK
*
*     POSSIBLE OPTIONS FOR MOIST PHYSICS
*
      IF (LIN_LSC .EQ. 100) THEN
        L_CONV = .FALSE.
        L_COND = .TRUE.
      ELSE IF (LIN_LSC .EQ. 200) THEN
        L_CONV = .TRUE.
        L_COND = .FALSE.
      ELSE IF (LIN_LSC .EQ. 300) THEN
        L_CONV = .TRUE.
        L_COND = .TRUE.
      ELSE
        L_CONV = .FALSE.
        L_COND = .FALSE.
      ENDIF
*
*        ==================
*        1. TRAJECTORY PART
*        ================== 
*
*******************************************************************
*        CONVECTION                                               *
*        ----------                                               *
*******************************************************************
*
        IF (L_CONV) THEN
          CALL LIN_KUOSYM (ZCTE5, ZCQE5, ILAB, ZCCF5, DBDT5, 
     $                     ZCRR5, ZCSR5,
     $                     D(TTRAJP), D(TTRAJM), D(HUTRAJP), D(HUTRAJM),
     $                     GZM5, D(PTRAJP), 
     $                     D(SIGM), CDT1, NI, NK )
        ELSE
          ZCQE5(:,:) = 0.0
          ZCTE5(:,:) = 0.0  
        ENDIF
*
*
*******************************************************************
*        APPLICATION DES TENDANCES CONVECTIVES                    *
*        -------------------------------------                    *
*******************************************************************
*
        DO K=1,NK
*VDIR NODEP
           DO I=1,NI
              ZQPLUS5(I,K)  = D(HUTRAJP + IK(I,K)) +
     $                        CDT1 * ZCQE5(I,K)
              ZTPLUS5(I,K)  = D(TTRAJP  + IK(I,K)) +
     $                        CDT1 * ZCTE5(I,K)
           END DO
        END DO
*
*
*     ===============
*     2. ADJOINT PART 
*     =============== 
*
*
*     INITIALISATION TABLEAUX LOCAUX
*
      ZCTE(:,:) = 0.0
      ZCQE(:,:) = 0.0
      ZSTE(:,:) = 0.0
      ZSQE(:,:) = 0.0
*
*
*******************************************************************
*     TENDANCES TOTALES POUR LES PROCESSUS HUMIDES                *
*     --------------------------------------------                *
*******************************************************************
*
       DO K=1,NK
*VDIR NODEP
          DO I=1,NI
             ZCQE(I,K) = ZCQE(I,K) + V(HUCOND + IK(I,K))
             ZSQE(I,K) = ZSQE(I,K) + V(HUCOND + IK(I,K))
             V(HUCOND + IK(I,K))  = 0.0
             ZCTE(I,K) = ZCTE(I,K) + V(TCOND  + IK(I,K))
             ZSTE(I,K) = ZSTE(I,K) + V(TCOND  + IK(I,K))
             V(TCOND  + IK(I,K))  = 0.0
          END DO
       END DO
*
*******************************************************************
*        CONDENSATION STRATIFORME                                 *
*        ------------------------                                 *
*******************************************************************
*
       IF (L_COND) THEN
         CALL LIN_CONDS1_AD (ZSTE, ZSQE, F(TLS), F(TSS),
     $                       D(TPLUS), D(HUPLUS), D(PPLUS),
     $                       ZTPLUS5,ZQPLUS5,D(PTRAJP),
     $                       D(SIGM) , CDT1, NI, NK )
       ENDIF

*
*******************************************************************
*        APPLICATION DES TENDANCES CONVECTIVES                    *
*        -------------------------------------                    *
*******************************************************************
*
        DO K=1,NK
*VDIR NODEP
           DO I=1,NI
              ZCQE(I,K) = ZCQE(I,K) + CDT1*D(HUPLUS  + IK(I,K))
              ZCTE(I,K) = ZCTE(I,K) + CDT1*D(TPLUS   + IK(I,K))
           END DO
        END DO
*
*******************************************************************
*        CONVECTION                                               *
*        ----------                                               *
*******************************************************************
*
      IF (L_CONV) THEN
        CALL LIN_KUOSYM_AD (ZCTE5, ZCQE5, ILAB, ZCCF5, DBDT5, 
     $                      ZCRR5, ZCSR5, 
     $                      ZCTE , ZCQE, F(TLC), F(TSC),  
     $                      D(TTRAJP), D(TTRAJM), D(HUTRAJP), D(HUTRAJM),
     $                      GZM5, D(PTRAJP), 
     $                      D(TPLUS), D(TMOINS), D(HUPLUS), D(HUMOINS),
     $                      GZM,  D(PPLUS), 
     $                      D(SIGM), CDT1, NI, NK )
      ENDIF
*
      RETURN
      END SUBROUTINE LIN_PRECIP1_AD