!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***S/P VKUOCON6
*
#include "phy_macros_f.h"

      SUBROUTINE VKUOCON6 ( D, DSIZ, F, FSIZ, V, VSIZ,  1,43
     $                      G, GSIZ, GZM, SE,
     $                      DT, NI, N, NK, 
     $                      KOUNT, J, ITASK )
*
#include "impnone.cdk"
      INTEGER FSIZ,NI,N,NK,KOUNT,J,ITASK,GSIZ,VSIZ,DSIZ
      REAL F(FSIZ), V(VSIZ), D(DSIZ), G(GSIZ)
      REAL GZM(N,NK), SE(N,NK)
      REAL DT
*
*Author
*          J. Mailhot RPN(July 1985)
*
*Revision
* 001      J. Mailhot RPN(Nov 1985) Use T instead of TV
* 002      J. Mailhot RPN(Nov 1985) Add outputs NEIGE,QCL,CU
* 003      G.Pellerin(Nov87) Adaptation to code revision
* 004      J. Mailhot RPN(Oct 1988) Rate of conv/stratiform precip.
* 005      G.Pellerin(August90) Adaptation to thermo functions
* 007      N. Brunet  (May91)
*          New version of thermodynamic functions and file of
*          constants
* 008      B. Bilodeau  (August 1991)- Adaptation to UNIX
* 009      C. Girard    (November 1992) - New parameterization
*          of cloud fraction
* 010      G. Pellerin and G. Lemay (Oct 93) - Dynamic memory allocation
*          with stkmemw and removal of the loops on the index NJ
* 011      G. Pellerin (Nov 93) NJ removed; routine fully 2-Dimensional
* 012      A. Methot (Dec 93) Add vertical motion in pressure (OMEGAP)
*             to KUO's call
* 013      B. Bilodeau (Feb 94) Cleanup - Change name from VKUOCON to VKUOCON2
* 014      B. Bilodeau (Aug 94) New physics interface
* 015      S. Belair (Summer 94) New schemes : FCP, EXMOIS, KFC
* 016      M. Desgagne (Oct 95) New interface
* 017      B. Bilodeau (Nov 96) - Replace common block pntclp by
*                                 common block convbus
* 018      G. Pellerin and C. Girard (Nov 95) New convection KUOSYM
*             revised kuo (KUOSTD) and revised Sundqvist (KUOSUN) and CONSUN.
* 019      G. Pellerin (Aug 1996) Added vertical integral of moiture fields
*             for output
* 020      G. Pellerin (Nov 1996) New convection option : RAS
* 021      F. Kong     (Dec 1996) New explicit microphysics schemes
*                          (Ref. Kong and Yau (1996), Atmosphere-Ocean)
* 022      B. Bilodeau (Aug 1997) New option FCPKUO
* 023      B. Bilodeau (Feb 1998) Interface between CONSUN and most 
*                                 convective schemes. FCPKUO uses
*                                 KUOSYM instead of OLDKUO.
* 024      B. Bilodeau (May 1998) Smooth transition between FCP and 
*             KUOSYM when CONVEC="FCPKUO" (using weight FCPOIDS)
* 025      B. Bilodeau (Nov 1998) Merge phyexe and param4
* 026      J. Mailhot  (Mar 1999) - Changes for new SURFACE interface
* 027      M. Desgagne and B. Bilodeau (Aug 1999)- Carry cloud fraction from
*                                 microphysics schemes to radiation scheme 
* 028      A. Methot (May 1999) - Rename MICROCND to MIXPHASE; pass GZ to 
*                                 MIXPHASE instead of DZ
* 029      A. Methot (Sept 2000) - Correct bug related to ZSQEM
* 030      B.Bilodeau (Nov 2000) - New comdeck phybus.cdk
* 031      A. Erfani and B. Bilodeau (Oct 2001) - Added the option KFCKUO2
* 032      A-M. Leduc (Nov 2001) - Call kfcp2 (modified arguments of kfcp1)
* 033      A. Plante (Feb 2002) - Correct TLIP bug in call to mixphase
* 034      D. Talbot (Feb 2002) - Correct calls to time series extraction
*               of diagnostics for mixphase
* 035      S.Belair, A-M. Leduc (Nov 2002) - add zsqcem and convective counter 
*                                            v(kkfcp)for kfcp2 ...>kfcp3
* 036      S. Menard and B. Bilodeau (Feb 2003) - add output to consun 
*               for AURAMS
* 037      B. Bilodeau, P. Vaillancourt and A. Glazer (Dec 2002) - Remove ctp
*               and ctp from call to intwat
* 038      B. Bilodeau (Mar 2003) - Comment useless redefinition of CCS for MIXPHAS
* 039      B. Dugas (Mar 2003) - Add mode STRATOS consideration
* 041      G. Pellerin (May 2003) - IBM Conversion
*                                 - calls to vsexp routine (from massvp4 library)
*                                 - Automatic arrays
* 042      A. Plante (June 2003) - add sedimentation limits and maximal velocity 
*                                  for mixphase5.
* 043      A-M.Leduc (Jul 2003) - Add zcqcer and d(gzmoins6)
* 044      A. PLante (Sep 2003) - Add call to bourge (precip. type).
* 045      A. PLante (Nov 2003) - Add 4 pcpn rates in order to validate with or without 
*                                 pcpn type routine.
* 046      A. PLante (Feb 2004) - Remove call to bourge, it is now in calcdiag.ftn
*                               - Call mixphase6 which now output snow fraction v(fneige)
*
*Object
*          to do the KUO(deep convection) scheme with either simple
*          large-scale condensation scheme or Sundqvist scheme.
*          Liquid and solid precipitation rates are calculated as
*          well
*
*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 -
* SE       staggered local sigma levels
* FCPMASK  switch to indicate which convection scheme is used for a
*          given point for CONVEC="FCP" or CONVEC="FCPKUO" options
*          =  2   FCP yes
*                 KUO no
*          =  1   FCP possible
*                 KUO no
*          =  0   FCP no
*                 KUO yes
*          = -1   FCP possible
*                 KUO yes
*          = -2   FCP yes
*                 KUO yes
* FCPOIDS  weight given to FCP (with respect to KUOSYM) 
*          when FCPKUO option is used
*
*          - 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
*
*
*MODULES
*
      EXTERNAL KUO2,CONDS,MRAS0,MKCLDTOP
      EXTERNAL SERXST
      EXTERNAL MZONXST,SERGET
      EXTERNAL KUOSUN,KUOSTD,KUOSYM,CONSUN1,LSCTROL
      EXTERNAL SKOCON
      EXTERNAL FALL,FCPARA2,INIFCP,KFCP4,VERTDIFF
      EXTERNAL INTWAT3
      EXTERNAL STFSLB3, SECAJUS,EMICROW,EMICROI,EMICROG
      EXTERNAL MIXPHASE6
*
      INTEGER IERGET, ICPU, IK
      INTEGER KCTP,NKR,FNR,CCKR
      INTEGER NIR
      REAL HEURSER, AIRDENM1, TCEL, FRAC
      REAL PRESTOP, CDT1, rCDT1
**
*     VARIABLES ALLOCATION DYNAMIQUE
      INTEGER NZPREC
*
*
*     pointeurs en equivalence avec les champs 
*     des bus dynamique et volatil
*
      real uu(n,nk),vv(n,nk),t(n,nk),q(n,nk),ps(n)
      real ttm(n,nk),tqm(n,nk),psm(n)
      real qctend(n,nk),qcm(n,nk),qc(n,nk)
      real qrtend(n,nk),qrm(n,nk),qr(n,nk)
      real qitend(n,nk),qim(n,nk),qi(n,nk)
      real qgtend(n,nk),qgm(n,nk),qgp(n,nk)
      real omegap2(n,nk),s(n,nk),dxdy2(ni)
      real fice2(n,nk), fcpmask(ni)
      real fcpoids(ni)
*
      pointer (iuu     , uu      ), (ivv     , vv      ),
     $        (it      , t       ), (iq      , q       ),
     $        (ips     , ps      ), (ittm    , ttm     ),
     $        (itqm    , tqm     ), (ipsm    , psm     ),
     $        (iqctend , qctend  ), (iqcm    , qcm     ),
     $        (iqc     , qc      ), (iqrtend , qrtend  ),
     $        (iqrm    , qrm     ), (iqr     , qr      ),
     $        (iqitend , qitend  ), (iqim    , qim     ),
     $        (iqi     , qi      ), (iqgtend , qgtend  ),
     $        (iqgm    , qgm     ), (iqgp    , qgp     ),
     $        (ifice2  , fice2   ), (iomegap2, omegap2 ),
     $        (is      , s       ), (idxdy2  , dxdy2   ),
     $                              (ifcpmask, fcpmask ),
     $        (ifcpoids,fcpoids  )
*
      REAL HUM, PRESS, KEEP, rGRAV
*
      INTEGER I,K,NITER
      LOGICAL DBGKUO, DBGCOND, DBGSUN, SYMSUN, COMPLIM
      SAVE    DBGKUO, DBGCOND, DBGSUN, SYMSUN
      DATA DBGKUO , DBGCOND, DBGSUN, SYMSUN / 4* .FALSE. /
*
#include "mountains.cdk"
#include "nocld.cdk"
#include "options.cdk"
#include "consphy.cdk"
#include "phybus.cdk"
#include "stk.cdk"
#include "dintern.cdk"
#include "fintern.cdk"
*
************************************************************************
*     AUTOMATIC ARRAYS
************************************************************************
*
      AUTOMATIC (  ILAB    , INTEGER  , (NI,NK))
      AUTOMATIC (  ZCTE    , REAL     , (NI,NK))
      AUTOMATIC (  ZCQE    , REAL     , (NI,NK))
      AUTOMATIC (  ZCQCE   , REAL     , (NI,NK))
      AUTOMATIC (  ZCQRE   , REAL     , (NI,NK))
      AUTOMATIC (  ZSTE    , REAL     , (NI,NK))
      AUTOMATIC (  ZSQE    , REAL     , (NI,NK))
      AUTOMATIC (  ZSQCE   , REAL     , (NI,NK))
      AUTOMATIC (  ZSQRE   , REAL     , (NI,NK))
      AUTOMATIC (  T0      , REAL     , (NI,NK))
      AUTOMATIC (  Q0      , REAL     , (NI,NK))
      AUTOMATIC (  QC0     , REAL     , (NI,NK))
      AUTOMATIC (  QR0     , REAL     , (NI,NK))
      AUTOMATIC (  QI0     , REAL     , (NI,NK))
      AUTOMATIC (  QG0     , REAL     , (NI,NK))
      AUTOMATIC (  QRFALL  , REAL     , (NI,NK))
      AUTOMATIC (  ZFM     , REAL     , (NI,NK))
      AUTOMATIC (  ZFM1    , REAL     , (NI,NK))
      AUTOMATIC (  ZBUF    , REAL     , (NI,NK))
      AUTOMATIC (  SCR3    , REAL     , (NI,NK))
      AUTOMATIC (  SIGD    , REAL     , (NI,NK))
      AUTOMATIC (  WORK5   , REAL     , (NI,NK))
      AUTOMATIC (  AVERT   , REAL     , (NI,NK))
      AUTOMATIC (  CCFCP   , REAL     , (NI,NK))
      AUTOMATIC (  LIQUID  , REAL     , (NI,NK))
      AUTOMATIC (  SOLID   , REAL     , (NI,NK))
      AUTOMATIC (  SIGMA   , REAL     , (NI,NK+1))
*
      AUTOMATIC (  NCA     , INTEGER  , (NI   ))
      AUTOMATIC (  INDEX   , INTEGER  , (NI   ))

      AUTOMATIC (  BETA    , REAL     , (NI   ))
      AUTOMATIC (  PSB     , REAL     , (NI   ))
      AUTOMATIC (  RAINCV  , REAL     , (NI   ))
      AUTOMATIC (  TEMP1   , REAL     , (NI   ))
      AUTOMATIC (  TEMP2   , REAL     , (NI   ))
*
*
      AUTOMATIC (  ILABR   , INTEGER  , (NI,NK))
*
      AUTOMATIC (  BETAR   , REAL     , (NI   ))
      AUTOMATIC (  CUCOV   , REAL     , (NI,NK))
      AUTOMATIC (  KCLR    , REAL     , (NI   ))
      AUTOMATIC (  GZMR    , REAL     , (NI,NK))
      AUTOMATIC (  OMEGAR  , REAL     , (NI,NK))
      AUTOMATIC (  PSR     , REAL     , (NI   ))
      AUTOMATIC (  PSMR    , REAL     , (NI   ))
      AUTOMATIC (  QQR     , REAL     , (NI,NK))
      AUTOMATIC (  SR      , REAL     , (NI,NK))
      AUTOMATIC (  TLCR    , REAL     , (NI   ))
      AUTOMATIC (  TQMR    , REAL     , (NI,NK))
      AUTOMATIC (  TR      , REAL     , (NI,NK))
      AUTOMATIC (  TSCR    , REAL     , (NI   ))
      AUTOMATIC (  TTMR    , REAL     , (NI,NK))
      AUTOMATIC (  ZCQER   , REAL     , (NI,NK))
      AUTOMATIC (  ZCQCER  , REAL     , (NI,NK))
      AUTOMATIC (  ZCTER   , REAL     , (NI,NK))
      AUTOMATIC (  ZFMR    , REAL     , (NI,NK))
*
************************************************************************
*
*
      CDT1 = FACTDT * DT
      rCDT1 = 1./CDT1 
      rGRAV = 1./GRAV
*
      ICPU = ITASK
      CALL SERGET ( 'HEURE' , HEURSER , 1 , IERGET  )
*
*
***
*
*     pointeurs en equivalence avec les bus dynamique et volatil
*     ----------------------------------------------------------
*
      iuu     = loc (d(  uplus))
      ivv     = loc (d(  vplus))
      it      = loc (d(  tplus))
      iq      = loc (d( huplus))
      ips     = loc (d(  pplus)) 
      ittm    = loc (v(  tcond))
      itqm    = loc (v( hucond))
      ipsm    = loc (d( pmoins))
      iqctend = loc (v( qccond))
      iqcm    = loc (d(qcmoins))
      iqc     = loc (d( qcplus))
      iqrtend = loc (v( qrcond))
      iqrm    = loc (d(qrmoins))
      iqr     = loc (d( qrplus))
      iqitend = loc (v( qicond))
      iqim    = loc (d(qimoins))
      iqi     = loc (d( qiplus))
      iqgtend = loc (v( qgcond))
      iqgm    = loc (d(qgmoins))
      iqgp    = loc (d( qgplus))
      ifice2  = loc (f(   fice))
      iomegap2= loc (d( omegap))
      is      = loc (d(   sigm)) 
      idxdy2  = loc (d(   dxdy)) 
      ifcpmask= loc (d( fcpmsk))
      ifcpoids= loc (d( fcpoid))
*
*
*     CALCULS PRELIMINAIRES
*     ---------------------
*
*     MISES A ZERO
      DO I=1,NI*NK
        ILAB  (I,1) = 0
        ZCTE  (I,1) = 0.0
        ZCQE  (I,1) = 0.0
        ZCQCE (I,1) = 0.0
        ZCQRE (I,1) = 0.0
        ZSTE  (I,1) = 0.0
        ZSQE  (I,1) = 0.0
        ZSQCE (I,1) = 0.0
        ZSQRE (I,1) = 0.0
        T0    (I,1) = 0.0
        Q0    (I,1) = 0.0
        QC0   (I,1) = 0.0
        QR0   (I,1) = 0.0
        QI0   (I,1) = 0.0
        QG0   (I,1) = 0.0
        ZFM   (I,1) = 0.0
        ZFM1  (I,1) = 0.0
        ZBUF  (I,1) = 0.0
        SCR3  (I,1) = 0.0
        SIGD  (I,1) = 0.0
        WORK5 (I,1) = 0.0
        AVERT (I,1) = 0.0
        CCFCP (I,1) = 0.0
        LIQUID(I,1) = 0.0
        SOLID (I,1) = 0.0
      END DO
*
      DO I=1,NI
        BETA  (I) = 0.0
        RAINCV(I) = 0.0
        PSB   (I) = 0.0
        NCA   (I) = 0
        INDEX (I) = 0
      END DO
*
*
      DO K=1,NK
*VDIR NODEP
         DO I=1,NI
            IK = (K-1)*NI+I-1
            T0    (I,K) =  T(I,K)
            Q0    (I,K) =  Q(I,K)
            Q     (I,K) = MAX( Q  (I,K) , 0.0 )
            TQM   (I,K) = MAX( TQM(I,K) , 0.0 )
*
            IF ( ISTCOND .GE. 2 )   THEN
               QC0(I,K) = QC(I,K)
               QC (I,K) = MAX ( QC (I,K) , 0.0 )
               QCM(I,K) = MAX ( QCM(I,K) , 0.0 )
            ENDIF
*
            IF ( ISTCOND .GE. 6 ) THEN
*
               QR0 (I,K) = QR(I,K)
               QR  (I,K) = MAX ( QR (I,K) , 0.0 )
               QRM (I,K) = MAX ( QRM(I,K) , 0.0 )
*
*              CALCUL DE LA VITESSE VERTICALE "SIGMA DOT"
               SIGD(I,K) = OMEGAP2(I,K) / PS(I)
*
            ENDIF
*
            IF ( ISTCOND .GE. 7 ) THEN
               QI0 (I,K) = QI(I,K)
               QI  (I,K) = MAX ( QI (I,K) , 0.0 )
               QIM (I,K) = MAX ( QIM(I,K) , 0.0 )
            ENDIF
*
            IF ( ISTCOND .GE. 8 ) THEN
               QG0 (I,K) = QGP(I,K)
               QGP (I,K) = MAX ( QGP(I,K) , 0.0 )
               QGM (I,K) = MAX ( QGM(I,K) , 0.0 )
            ENDIF
*
         END DO
*
      END DO
*
*     INITIALISATION DU CHAMP "INDEX"
      NIR = 0
      DO I = 1,NI
         IF ( NINT( FCPMASK(I) ) .LE. 0  ) THEN
            NIR = NIR + 1
            INDEX(NIR) = I
         ENDIF
      END DO
*
*
      IF (ICONVEC.EQ.5.OR.ICONVEC.EQ.6.OR.ICONVEC.EQ.11 .or.
     +      ICONVEC.EQ.12) THEN
*
        CALL INIFCP (PSB,PS,PSM,RAINCV,F(RCKFC),
     +               F(FCPFLG),NCA,SCR3,OMEGAP2,
     +               AVERT,SIGMA,S,
     +               PRESTOP,NI,NK,DT)
*
      ENDIF
*
*     extraction des hauteurs (en DAM)
      DO I=1,NI*NK
         WORK5(I,1) = 0.1 * rGRAV * GZM(I,1)
      END DO
      CALL SERXST (WORK5,'GZ',J, NI, 0.,     1.,  -1      )
*
*
*******************************************************************
*        CONVECTION                                               *
*        ----------                                               *
*******************************************************************
*
      IF (ICONVEC.EQ.1) THEN
*
*        AJUSTEMENT CONVECTIF SEC
*        ------------------------
*
         CALL SECAJUS(ZCTE, T, S, PS, NITER, 0.1, CDT1, NI, NK)
*
*        APPLICATION DES TENDANCES CONVECTIVES DE TEMPERATURE
         DO K=1,NK
*VDIR NODEP
            DO I=1,N
               T(I,K) =  T(I,K) + CDT1 *  ZCTE (I,K)
            END DO
         END DO
*
      ENDIF
*
*
      IF(WET) THEN
*
*
         IF (ICONVEC.EQ.3) THEN
*
*           KUO (PREMIERE VERSION)
*           ----------------------
*
            DO 333 K=1,NK
               DO 333 I=1,NI
                  ZFM  (I,K) = MAX (0., QC (I,K) )
 333        CONTINUE
*
            CALL KUO2 (ZCTE,ZCQE,F(TLC),F(TSC),
     $                 ILAB,F(CCK),OMEGAP2,zfm,
     $                 T,TTM,Q,TQM,
     $                 GZM,PS,PSM,V(KCL),
     $                 S, CDT1, NI, NI, NK,
     $                 DBGKUO, SATUCO)
*
*
            IF(ISTCOND.GE.2) THEN
*              CALCUL DE LA TENDANCE CONVECTIVE DE QC
               DO 334 K=1,NK
                  DO 334 I=1,NI
                     ZCQCE(I,K)=(ZFM (I,K)+MIN(0.,QC(I,K))-QC(I,K))*rCDT1
 334           CONTINUE
            ENDIF
*
            do k=1,nk
*VDIR NODEP
               do i=1,ni
                  ik = (k-1)*ni+i-1
                  if(ILAB(i,k).eq.2) then
*                    nuages de convection profonde (Kuo)
                     f(FN +ik) = F(CCK+IK)
                  else 
*                    nuages de convection restreinte
                     F(CCK+ik) = f(fn+ik)*0.5
                  endif
               end do
            end do
*
*
         ELSE IF (ICONVEC.EQ.4) THEN
*
*           SECTION CONVECTIVE DE SKOCON (VOIR PLUS LOIN)
*           ----------------------------
*
         ELSE IF (ICONVEC.EQ.6 .or. ICONVEC.EQ.12) THEN
*
*           KAIN-FRITSCH
*           ------------
*
            CALL KFCP4 ( NI,NK,F(FCPFLG),V(KKFC),PSB,T,Q,
     +                   UU,VV,SCR3,
     +                   F(TFCP),F(HUFCP),F(UFCP),F(VFCP),
     +                   F(QCKFC),F(QRKFC),
     +                   AVERT,DXDY2,F(RCKFC),d(gzmoins6),
     +                   KFCRAD,KFCDEPTH,KFCDLEV,
     +                   KFCDET,KFCTIMEC,KFCTIMEA,
     +                   F(CAPEKFC),F(AU),CCFCP,F(DMFKFC),
     +                   F(PEFFKFC),F(UMFKFC),F(ZBASEKFC),
     +                   F(ZTOPKFC),F(WUMAXKFC),
     +                   F(RLIQKFC),F(RICEKFC),
     +                   V(RLIQ_INT),V(RICE_INT),
     +                   F(KFCRF),F(KFCSF),
     +                   FCPMASK,KOUNT                    )
*
*
         ELSE IF (ICONVEC.EQ.7) THEN
*
*           KUOSTD (REECRITURE DE L'OPTION OLDKUO)
*           ------
*
            CALL LSCTROL ( ILAB, OMEGAP2, S, NI, NK )
*
            CALL KUOSTD (ZCTE,ZCQE,ILAB,F(CCK),BETA,
     +                   T,TTM,Q,TQM,GZM,PS,PSM,
     +                   S, CDT1, NI, NK )
****************************************************
         ENDIF
*****************************************************
         IF (ICONVEC.EQ.8.OR.ICONVEC.EQ.11.OR.
     +                            ICONVEC.EQ.12) THEN
*
*           KUO SYMETRIQUE  (ORIGINE : CODE DE L'OPTION OLDKUO
*           --------------             CONTENU DANS LE S/P KUO2)
*
*           ICONVEC=11 CORRESPOND A KUOSYM (EN PERIPHERIE) +
*           FRITSCH-CHAPPELL (AU COEUR DU DOMAINE)
*
            IF ((ICONVEC.EQ.11.OR.ICONVEC.EQ.12) 
     +      .AND.NIR.EQ.0) GO TO 100
*
*           initialiser a zero les champs alloues
*
            do i=1,ni
               psr  (i) = 0.0
               psmr (i) = 0.0
               betar(i) = 0.0
               tlcr (i) = 0.0
               tscr (i) = 0.0
               kclr (i) = 0.0
            end do
*
            do ik=1,ni*nk
               ilabr (ik,1) = 0
               gzmr  (ik,1) = 0.0
               qqr   (ik,1) = 0.0
               sr    (ik,1) = 0.0
               tqmr  (ik,1) = 0.0
               tr    (ik,1) = 0.0
               ttmr  (ik,1) = 0.0
               cucov (ik,1) = 0.0
               zcqer (ik,1) = 0.0
               zcter (ik,1) = 0.0
               omegar(ik,1) = 0.0
               zfmr  (ik,1) = 0.0
            end do
*
*
            if (nir.eq.ni) then
*
*              transvidage simple
*              ------------------
*
               do i=1,ni
                  psmr(i) = psm(i)
                  psr (i) = ps (i)
               end do
*
               do k=1,nk
                  do i=1,ni
                     ik = (k-1)*ni + i
                     gzmr  (ik,1) = gzm    (i,k)
                     qqr   (ik,1) = q      (i,k)
                     sr    (ik,1) = s      (i,k)
                     tqmr  (ik,1) = tqm    (i,k)
                     tr    (ik,1) = t      (i,k)
                     ttmr  (ik,1) = ttm    (i,k)
                     omegar(ik,1) = omegap2 (i,k)
                     zfmr  (ik,1) = max(0., qc (i,k) )
                  end do
               end do
*
            else
*
*              gather
*              ------
*
               do i=1,nir
                  psmr(i) = psm(index(i))
                  psr (i) = ps (index(i))
               end do
*
               do k=1,nk
                  do i=1,nir
                     ik = (k-1)*nir +i
                     omegar(ik,1) = omegap2(index(i),k)
                     zfmr  (ik,1) = max(0., qc (index(i),k) )
                     gzmr  (ik,1) = gzm    (index(i),k)
                     qqr   (ik,1) = q      (index(i),k)
                     sr    (ik,1) = s      (index(i),k)
                     tr    (ik,1) = t      (index(i),k)
                     tqmr  (ik,1) = tqm    (index(i),k)
                     ttmr  (ik,1) = ttm    (index(i),k)
                  end do
               end do
*
            endif
*
            IF (ICONVEC.EQ.12) THEN
*
              CALL KUO2 (zcter,zcqer,tlcr, tscr,
     $                 ilabr,cucov,omegar,zfmr,
     $                 tr,ttmr,qqr,tqmr,
     $                 gzmr,psr,psmr,kclr,
     $                 sr, CDT1, nir, nir, NK,
     $                 DBGKUO, SATUCO)
*
*
               if (nir.eq.ni) then
*
*              transvidage simple
*
*VDIR NODEP
                 do i=1,ni
                    F(tlc+i-1) = tlcr(i)
                    F(tsc+i-1) = tscr(i)
                 END DO
*
                 do k=1,nk
                   do i=1,ni
                     ik = (k-1)*ni + i
                     f(cck+ik-1) = cucov(ik,1)
                     ilab(i,k)   = ilabr (ik,1)
                     zcte(i,k)   = zcter (ik,1)
                     zcqe(i,k)   = zcqer (ik,1)
                     zfm (i,k)   = zfmr  (ik,1)
                   end do
                 end do
*
               else
*
*             scatter
*             ------- 
*
*VDIR NODEP
                 do i=1,nir
                   F(tlc+index(i)-1) = tlcr(i)
                   F(tsc+index(i)-1) = tscr(i)
                 end do
*
                 do k=1,nk
                   do i=1,nir
                     ik = (k-1)*nir +i
                     f(cck+(k-1)*ni+index(i)-1)    = cucov(ik,1)
                     ilab   (index(i),k)           = ilabr (ik,1)
                     zcqe   (index(i),k)           = zcqer (ik,1)
                     zcte   (index(i),k)           = zcter (ik,1)
                     zfm    (index(i),k)           = zfmr  (ik,1)
                   end do
                 end do
               endif 
*
            ELSE IF (ICONVEC.EQ.8.OR.ICONVEC.EQ.11) THEN
*
             CALL KUOSYM (ZCTER,ZCQER,ILABR,CUCOV,BETAR,
     $                   TR,TTMR,QQR,TQMR,GZMR,PSR,PSMR,
     $                   SR, CDT1, NIR, NK )
*
               if (nir.eq.ni) then
*
                 do i=1,ni
                   beta(i) = betar(i)
                 end do
*
                 do k=1,nk
                   do i=1,ni
                     ik = (k-1)*ni + i
                     f(cck+ik-1) = cucov(ik,1)
                     ilab(i,k)   = ilabr (ik,1)
                     zcte(i,k)   = zcter (ik,1)
                     zcqe(i,k)   = zcqer (ik,1)
                    end do
                 end do
*
               else
*
*              scatter
*              -------
*
*VDIR NODEP
                 do i=1,nir
                   beta(index(i))    = betar(i)
                 end do
*
                 do k=1,nk
                   do i=1,nir
                     ik = (k-1)*nir +i
                     f(cck+(k-1)*ni+index(i)-1)    = cucov(ik,1)
                     ilab   (index(i),k)           = ilabr (ik,1)
                     zcqe   (index(i),k)           = zcqer (ik,1)
                     zcte   (index(i),k)           = zcter (ik,1)
                   end do
                 end do
*
               endif
            endif
*
         ELSE IF (ICONVEC.EQ.9) THEN
*
*           KUOSUN  (REECRITURE DE L'OPTION NEWKUO CONTENU DANS
*           ------   LE SOUS-PROGRAMME SKOCON)
*
*           option Kuo symetrique possible si symsun = .true.
*
            CALL KUOSUN ( ZCTE, ZCQE, ILAB, F(CCK), BETA,
     +                    T, TTM, Q, TQM, QC,
     +                    PS, PSM, S, NI, NK,
     +                    CDT1, SATUCO, SYMSUN )
*
         ELSE IF (ICONVEC.EQ.10) THEN
*
            call mkcldtop (kctp,s,ni,nk)
            nkr=nk-(kctp-1)
            fnr=FN+(kctp-1)*ni
            cckr=CCK+(kctp-1)*ni
*
            call mras0(ZCTE(1,kctp),ZCQE(1,kctp),F(TLC),F(fnr),
     +                 f(cckr),ilab(1,kctp),beta,istcond.eq.4,
     +                 t(1,kctp),q(1,kctp),ps,se(1,kctp-1),
     +                 cdt1,j,cpd,grav,chlc,cappa,
     +                 nkr,ni,ni*(nkr+1))
*
         ENDIF
*
100      CONTINUE
*
         IF (ICONVEC.EQ.5.OR.ICONVEC.EQ.11) THEN
*
*           FRITSCH-CHAPPELL
*           ----------------
*
            CALL FCPARA2( NI,NK,PRESTOP,FACTDT,DELT,
     $                    NCA,PSB,T,Q,CCFCP,
     $                    UU,VV,SCR3,F(AU),
     $                    F(TFCP),F(HUFCP),RAINCV,
     $                    AVERT,SIGMA,DXDY2,
     $                    FCPMASK,ICONVEC,F(RCKFC))
*
*           TRANSVIDER LES TENDANCES DE T ET HU
*           AINSI QUE LA FRACTION NUAGEUSE
            IF (ICONVEC.EQ.5) THEN
*VDIR NODEP
               DO I=1,NI
                  F(TLC+I-1) = F(RCKFC+I-1)
               END DO
*
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     IK = (K-1)*NI+I-1
                     ZCTE (I,K) = F( TFCP + IK)
                     ZCQE (I,K) = F(HUFCP + IK)
                     IF(ISTCOND.NE.4) THEN
                        F (CCK+IK) = CCFCP(I,K)
                     ENDIF
                  END DO
               END DO
*
            ELSE IF (ICONVEC.EQ.11) THEN
*
*              TRANSVIDER LES TENDANCES DE T ET HU QUI
*              SERONT APPLIQUEES AVANT L'APPEL A CONSUN
*              
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     IF(NINT( FCPMASK(I) ).EQ.2 ) THEN
*                       FCPMASK = 2 LA OU FRITSCH-CHAPPELL EST UTILISE
                        IK = (K-1)*NI+I-1
                        ZCTE (I,K) = F( TFCP + IK)
                        ZCQE (I,K) = F(HUFCP + IK)
                     ENDIF
*
                  END DO
*
               END DO
*
            ENDIF
*
         ENDIF
*
*
         IF (ICONVEC.EQ.6.OR.ICONVEC.EQ.12) THEN
            IF(ISTCOND.GE.2) THEN
*              CALCUL DE LA TENDANCE CONVECTIVE DE QC
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     ZCQCE(I,K)=(ZFM (I,K)+MIN(0.,QC(I,K)) - QC(I,K) )*rCDT1
                  END DO
               END DO
            ENDIF
*
*VDIR NODEP
            DO I=1,NI
               F(TLC+I-1) =   (1. - FCPOIDS(I)) * F(TLC+I-1)         +
     $                        (FCPOIDS(I) * F(RCKFC+I-1))
            END DO
*
*           TRANSVIDER - AMALGAMMER  LES TENDANCES DE T ET HU
*
            DO K=1,NK
*VDIR NODEP
               DO I=1,NI
                  IK = (K-1)*NI+I-1
                  ZCTE (I,K) = (1. - FCPOIDS(I)) * ZCTE (I,K)     +
     $                                  FCPOIDS(I)  * F( TFCP + IK)
                  ZCQE (I,K) = (1. - FCPOIDS(I)) * ZCQE (I,K)     +
     $                                  FCPOIDS(I)  * F(HUFCP + IK)
                  F (CCK+IK) = (1. - FCPOIDS(I)) * F (CCK+IK)     +
     $                                  FCPOIDS(I)  * CCFCP(I,K)
                  ZCQCE(I,K) = (1. - FCPOIDS(I)) * ZCQCE(I,K)     +
     $                                  FCPOIDS(I)  * F(QCKFC + IK)
                  ZCQRE(I,K) = (1. - FCPOIDS(I)) * ZCQRE(I,K)     +
     $                                  FCPOIDS(I)  * F(QRKFC + IK)
               END DO
*
            END DO
         ENDIF
*
*
         IF (ICONVEC.EQ.5.OR.ICONVEC.EQ.11) THEN
            IF (KOUNT.GT.0) THEN
               DO I=1,NI
*                 RETURN REAL VALUES FOR THE CONVECTIVE COUNTER NCA
                  F(FCPFLG+I-1) = FLOAT( NCA(I) ) + 0.2
               END DO
            ENDIF
         ENDIF
*
*
*******************************************************************
*        APPLICATION DES TENDANCES CONVECTIVES                    *
*        -------------------------------------                    *
*******************************************************************
*
         DO K=1,NK
*VDIR NODEP
            DO I=1,N
*
               T(I,K) =  T(I,K) + CDT1 *  ZCTE (I,K)
               Q(I,K) =  Q(I,K) + CDT1 *  ZCQE (I,K)
              QC(I,K) = QC(I,K) + CDT1 *  ZCQCE(I,K)
*
            END DO
         END DO
*
         IF (ICONVEC.EQ.6.OR.ICONVEC.EQ.12) THEN
            DO K=1,NK
*VDIR NODEP
               DO I=1,N
                 QR(I,K) = QR(I,K) + CDT1 *  ZCQRE(I,K)
               END DO
            END DO
         ENDIF
*
*******************************************************************
*        CONDENSATION STRATIFORME                                 *
*        ------------------------                                 *
*******************************************************************
*
         IF(ISTCOND.EQ.1) THEN
*
*           SCHEME SIMPLIFIE
*           ----------------
*
            DO K=1,NK
*VDIR NODEP
               DO I=1,N
                  IK = (K-1)*NI+I-1
                  F(CCK+IK) =  F(FN+IK)
               END DO
            END DO
*
            CALL CONDS(ZSTE,ZSQE,F(TLS),F(TSS),
     +                 F(FN),T,Q,PS,V(KCL),
     +                 S, CDT1, NI, NI, NK,
     +                 DBGCOND, SATUCO)
*
*
         ELSE IF(ISTCOND.EQ.2) THEN
*
*           SUNDQVIST (PREMIERE VERSION)
*           ----------------------------
*
            DO K=1,NK
*
               DO I=1,NI
                  ZFM1 (I,K) = MAX (0., QCM(I,K) )
                  ZFM  (I,K) = MAX (0., QC (I,K) )
               END DO
*
            END DO
*
            CALL STFSLB3 (ZFM1,ZFM,ZBUF,
     +                    ZSTE,ZSQE,F(TLS),F(TSS),
     +                    ILAB, TTM,TQM,
     +                    T,Q,PS,PSM,J,
     +                    S,NI,NI,NK,
     +                    CDT1,DBGSUN,SATUCO)
*
            DO K=1,NK
*VDIR NODEP
               DO I=1,NI
                  IK = (K-1)*NI+I-1
*
*                 CALCUL DE LA TENDANCE DE QC. GARDER LES VALEURS NEG.
*                 POUR NE PAS INTRODUIRE UNE SOURCE FICTIVE D'HUMIDITE.
                  ZSQCE(I,K) = (ZFM(I,K)+MIN(0.,QC(I,K)) - QC(I,K))*rCDT1
*
                  V(CCS+IK) =  ZBUF(I,K)
*
               END DO
            END DO
*
*
         ELSE IF(ISTCOND.EQ.6) THEN
*
*           SCHEME EXPLICITE
*           ----------------
*
*           STORE THE INITIAL VALUES OF QC AND QR
            DO K=1,NK
*VDIR NODEP
               DO I=1,NI
                  QC0(I,K) = QC(I,K)
                  QR0(I,K) = QR(I,K)
               END DO
            END DO
*
*
            CALL EXMOIS ( T,Q,ZSTE,ZSQE,PS,S,CDT1,QRFALL,ZSQCE,ZSQRE,
     $                    F(TLS),F(TSS),QC,QR,SIGD,NI,NK)
*
*
*           CALCULATE THE QC+ AND QR+ VARIABLES
*           AFTER THE EXPLICIT TENDENCIES
*
            DO K=1,NK
*VDIR NODEP
               DO I=1,NI
*
                 QC(I,K) = QC(I,K) + CDT1 * ZSQCE(I,K)
                 QC(I,K) = AMAX1( QC(I,K) , 0.0 )
*
                 QR(I,K) = QR(I,K) + CDT1 * ZSQRE(I,K)
                 QR(I,K) = AMAX1( QR(I,K) , 0.0 )
*
               END DO
            END DO
*
*
*           MAKE THE RAIN WATER/SNOW (QR) FALL TO THE GROUND WITH A
*           TERMINAL VELOCITY QRFALL
*
            CALL FALL(QR,WORK5,PS,S,T,Q,QRFALL,
     +                CDT1,NI,NK)
*
*           APPLY A VERTICAL DIFFUSION ON THE CLOUD WATER/ICE (QC)
*           VARIABLE
*
            CALL VERTDIFF(QC,WORK5,NI,NK)
*
*           CALCULATE THE FINAL TENDENCIES DUE TO
*           STRATIFORM CONDENSATION FOR QC AND QR
*
            DO K=1,NK
*VDIR NODEP
               DO I=1,NI
                  ZSQCE(I,K) = ( QC(I,K) - QC0(I,K) ) * rCDT1
                  ZSQRE(I,K) = ( QR(I,K) - QR0(I,K) ) * rCDT1
               END DO
            END DO
*
         ENDIF
*
*
         IF (ICONVEC.EQ.4 .OR. ISTCOND.EQ.3) THEN
*
*              SUNDQVIST (DEUXIEME VERSION) :
*              ------------------------------
*              CONVECTION ET CONDENSATION COMBINEES
*              ------------------------------------
*
*              NOTE : TTM ET TQM SONT DETRUITS APRES L'APPEL A SKOCON
*
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     ZFM1 (I,K) = MAX (0., QCM(I,K) )
                     ZFM  (I,K) = MAX (0., QC (I,K) )
                  END DO
               END DO
*
               CALL SKOCON ( ZCTE, ZCQE, ZCQCE, F(TLC), F(TSC), F(TLS),
     +                       F(TSS), V(CCS), F(CCK), T, TTM, Q,
     +                       TQM, f(TSURF), ZFM, ZFM1, PS,
     +                       PSM, ILAB, S, NI, NK,
     +                       FACTDT, DT, SATUCO, ICONVEC, ISTCOND,
     +                       V(RNFLX), V(SNOFLX) )
*
*
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     IK = (K-1)*NI+I-1
*
*                    TRANSVIDER LES TENDANCES STRATIFORMES
                     ZSTE  (I,K) = TTM (I,K)
                     ZSQE  (I,K) = TQM (I,K)
                     ZSQCE (I,K) = ZFM1(I,K)
*
                  END DO
               END DO
*
          ELSE IF(ISTCOND.EQ.4) THEN
*
*           INITIALISATION DES CHAMPS ALLOUES
            DO I=1,NI
               TLCR(I) = 0.
               TSCR(I) = 0.
            END DO
*
            DO IK=1,NI*NK
               ZCTER(IK,1) = 0.
               ZCQER(IK,1) = 0.
               ZCQCER(IK,1)= 0.
            END DO
*
            IF (ICONVEC.GE.7.AND.ICONVEC.LE.11) THEN
*
*              TRANSVIDER LES TENDANCES CONVECTIVES
*              POUR KUOSTD, KUOSYM, KUOSUN ET RAS.
*              PAR CONTRE, ON NE VEUT PAS D'INTERACTION
*              ENTRE LES SCHEMAS FCP (OU KFC) ET CONSUN.
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     IK = (K-1)*NI + I
                     IF (NINT( FCPMASK(I) ).LE.0 ) THEN
                        ZCTER(IK,1) = ZCTE(I,K)
                        ZCQER(IK,1) = ZCQE(I,K)
                     ENDIF
                  END DO
               END DO
*
            ENDIF
*
*           ELIMINER LES VALEURS NEGATIVES D'EAU NUAGEUSE
            DO K=1,NK
*VDIR NODEP
               DO I=1,NI
                  ZFM1 (I,K) = MAX (0., QCM(I,K) )
                  ZFM  (I,K) = MAX (0., QC (I,K) )
               END DO
            END DO
*
*
            CALL CONSUN1(ZSTE , ZSQE , ZSQCE , F(TLS), F(TSS), V(CCS),
     $                   ZCTER, ZCQER, ZCQCER, TLCR  , TSCR  , F(CCK),
     $                   T  , TTM  , Q     , TQM   , ZFM   , ZFM1  ,
     $                   PS , PSM  , ILAB  , BETA  , S     , CDT1  ,
     $                   V(RNFLX), V(SNOFLX), V(F12) , V(FEVP)  ,
     $                   F(FICE), V(CLR), V(CLS), NI , NK  )

*
*
*           TRANSVIDER LES TENDANCES CONVECTIVES ET LES TAUX 
*           DES PRECIPITATIONS POUR KUOSTD, KUOSYM, KUOSUN, RAS
*           ET FCPKUO
            IF (ICONVEC.GE.7.AND.ICONVEC.LE.11) THEN
*
*VDIR NODEP
               DO I=1,NI
*                 FCP NE CALCULE PAS "TSC" (PRECIP. SOLIDES)
                  F(TSC+I-1) =   (1. - FCPOIDS(I)) * TSCR(I)
                  F(TLC+I-1) =   (1. - FCPOIDS(I)) * TLCR(I)            +
     $                           (FCPOIDS(I) * F(RCKFC+I-1))
               END DO
*
*              TRANSVIDER LES TENDANCES DE T ET HU AINSI QUE 
*              LA FRACTION NUAGEUSE.
*              AMALGAMER LES CHAMPS DE SORTIE DE KUOSYM ET DE FCP.
*
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     IK = (K-1)*NI+I-1
*                    FCP NE CALCULE PAS DE TENDANCE DE QC
                     ZCQCE(I,K) = (1. - FCPOIDS(I)) * ZCQCER(I,K)
                     ZCTE (I,K) = (1. - FCPOIDS(I)) * ZCTER(I,K)      + 
     $                             FCPOIDS(I) * F(TFCP+IK)
                     ZCQE (I,K) = (1. - FCPOIDS(I)) * ZCQER(I,K)      +
     $                             FCPOIDS(I) * F(HUFCP+IK)
                     F (CCK+IK) = (1. - FCPOIDS(I)) * F(CCK+IK)       +
     $                             FCPOIDS(I) * CCFCP(I,K)
*
                  END DO
*
               END DO
*
            ELSE IF (ICONVEC.EQ.5.OR.ICONVEC.EQ.6) THEN
*
               DO K=1,NK
*VDIR NODEP
                  DO I=1,NI
                     IK = (K-1)*NI+I-1
                     F (CCK+IK) = CCFCP(I,K)
                  END DO
               END DO
*
            ENDIF
*
         ELSE IF(ISTCOND.EQ.5) THEN
*
*           MIXED-PHASE MICROPHYSICS SCHEME
*           -------------------------------
*
            IF(KOUNT.EQ.0.OR.VARMTN.EQ.1)THEN
               COMPLIM=.TRUE.
            ELSE
               COMPLIM=.FALSE.
            ENDIF

            CALL MIXPHASE6(T,Q,QC,S,PS,FICE2,F(TLS),F(TSS),V(FNEIGE),
     $                     V(FIP),ZSTE,ZSQE,ZSQCE,d(gzmoins6),V(CCS),
     $                     V(FLAGMXP),F(SELIMW),F(SELIMI),
     $                     F(VLMAX),F(VSMAX),COMPLIM,KOUNT,
     $                     CDT1,NI,NK)
*
         ELSE IF(ISTCOND.EQ.7) THEN
*
*           EXPLICIT SCHEME FOR WARM RAIN (Kong & Yau, 1996)
*           ------------------------------------------------
*
            CALL EMICROW ( T,Q,QC,QR,PS,TTM,TQM,QCM,QRM,PSM,SATUCO,S,
     $                     F(TLS),ZSTE,ZSQE,ZSQCE,ZSQRE,CDT1,NI,N,NK,
     $                     J,KOUNT )
*
         ELSE IF(ISTCOND.EQ.8) THEN
*
*           EXPLICIT SCHEME (1) FOR MIXED-PHASE (Kong & Yau, 1996)
*           (in which only one single ice category QI is predicted)
*           ------------------------------------------------------
*
            CALL EMICROI(OMEGAP2, T,Q,QC,QR,QI,PS,TTM,TQM,QCM,QRM,QIM,
     $                   PSM,SATUCO,S, F(TLS),F(TSS),ZSTE,ZSQE,ZSQCE,
     $                   ZSQRE,QITEND,CDT1,NI,N,NK,J,KOUNT)
*
         ELSE IF(ISTCOND.EQ.9) THEN
*
*           EXPLICIT SCHEME (2) FOR MIXED-PHASE (Kong & Yau, 1996)
*           (two ice categories: QI & QGP are explicitly predicted)
*           ------------------------------------------------------
*
            CALL EMICROG(OMEGAP2,T,Q,QC,QR,QI,QGP,PS,TTM,TQM,QCM,QRM,QIM,
     $                   QGM,PSM,SATUCO,S,F(TLS),F(TSS),ZSTE,ZSQE,ZSQCE,
     $                   ZSQRE,QITEND,QGTEND,CDT1,NI,N,NK,J,KOUNT)
*
         ENDIF
*
*VDIR NODEP
         DO I=1,NI
*
*  TRANSFORMATION EN HAUTEUR D'EAU (M) - DIVISER PAR DENSITE EAU
*
            F(TSC   +I-1) = F(TSC+I-1)   * 1.E-03
            F(TSS   +I-1) = F(TSS+I-1)   * 1.E-03
            F(TLC   +I-1) = F(TLC+I-1)   * 1.E-03
            F(TLS   +I-1) = F(TLS+I-1)   * 1.E-03
            F(RCKFC +I-1) = F(RCKFC+I-1) * 1.E-03
*
         END DO
*
      ENDIF
*
*******************************************************************
*     APPLICATION DES TENDANCES CONVECTIVES DE QC (POUR CONSUN)   *
*     -------------------------------------------                 *
*******************************************************************
*
      IF (ISTCOND.EQ.4..AND. (ICONVEC.GE.7.AND.ICONVEC.LE.11)) THEN
*
         DO K=1,NK
*VDIR NODEP
            DO I=1,N
*
              QC(I,K) = QC(I,K) + CDT1 *  ZCQCE(I,K)
*
            END DO
         END DO
*
      ENDIF
*
*
*******************************************************************
*     APPLICATION DES TENDANCES STRATIFORMES                      *
*     --------------------------------------                      *
*******************************************************************
*
         DO K=1,NK
*VDIR NODEP
            DO I=1,N
*
               T(I,K) =  T(I,K) + CDT1 *  ZSTE (I,K)
               Q(I,K) =  Q(I,K) + CDT1 *  ZSQE (I,K)
              QC(I,K) = QC(I,K) + CDT1 *  ZSQCE(I,K)
*
            END DO
         END DO
*
         IF (ISTCOND.GE.6) THEN
            DO K=1,NK
*VDIR NODEP
               DO I=1,N
                 QR(I,K) = QR(I,K) + CDT1 *  ZSQRE(I,K)
               END DO
            END DO
         ENDIF
*
         IF(ISTCOND.ge.8) THEN
            DO K=1,NK
*VDIR NODEP
               DO I=1,N
                  QI(I,K) = QI(I,K) + CDT1 *  QITEND(I,K)
               END DO
            END DO
         endif
         IF(ISTCOND.ge.9) THEN
            DO K=1,NK
*VDIR NODEP
               DO I=1,N
                  QGP(I,K) = QGP(I,K) + CDT1 *  QGTEND(I,K)
               END DO
            END DO
         endif


*
*******************************************************************
*
* DEBUT DU BLOC D'INSTRUCTIONS PROVENANT DU CODE DE ANNA GLAZER
* PERMETTANT ENTRE AUTRE LE CALCUL DE CTP LORSQUE SCHEMA SUND
* EST UTILISE
*
* CALCUL DE LWC ET IWC(pour Sundqvist scheme comme dans CLDOPTX)
*
      IF (ISTCOND.EQ.3 .OR. ISTCOND.EQ.4) THEN
         DO K=1,NK
            DO I=1,NI
                  tcel = MIN(0.,T(i,k) - TCDK)
                  temp1(i) = -.003102 * tcel*tcel
            END DO
                  call vsexp(temp2,temp1,ni )
            DO I=1,NI
               IF (T(I,K) .GE. TCDK) THEN
                  liquid(i,k) =  QC(I,K)
                  solid(i,k)  =  0.
               ELSE
                  frac = .0059 + .9941 * temp2(i)
                  liquid(i,k) = frac*QC(I,K)
                  solid(i,k)  = (1.-frac)*QC(I,K)
               END IF
            END DO
         END DO
      END IF
*
      IF (ISTCOND.EQ.5) THEN
         DO K=1,NK
*VDIR NODEP
            DO I=1,NI
               IK = (K-1)*NI+I-1
*
*              TRANSVIDER LES NUAGES
               airdenm1 = rgasd *T(i,k)/(s(i,k)*ps(i))
*
               liquid(i,k) = QC(I,K)*(1.-FICE2(I,K))
               solid(i,k)  = QC(I,K)*FICE2(I,K)
*
            END DO
         END DO
      ELSE IF (ISTCOND.EQ.6 .OR. ISTCOND.EQ.7) THEN
         DO K=1,NK
*VDIR NODEP
            DO I=1,NI
               IK = (K-1)*NI+I-1
*              TRANSVIDER LES NUAGES
               airdenm1 = rgasd *T(i,k)/(s(i,k)*ps(i))
               IF ((QC(I,K)+QR(I,K)) .GT. airdenm1 * 1.E-5) THEN
                  V(CCS+IK) = 1.
               ENDIF
*
               IF (T(I,K) .GE. TCDK) THEN
                  liquid(i,k) = QC(I,K)+QR(I,K)
                  solid(i,k)  = 0.
               ELSE
                  liquid(i,k) = 0.
                  solid(i,k)  = QC(I,K)+QR(I,K)
               END IF
*
            END DO
         END DO
      ELSE IF (ISTCOND.EQ.8) THEN
         DO K=1,NK
*VDIR NODEP
            DO I=1,NI
               IK = (K-1)*NI+I-1
*
*              TRANSVIDER LES NUAGES
               airdenm1 = rgasd *T(i,k)/(s(i,k)*ps(i))
               IF ((QC(I,K)+QR(I,K)+QI(I,K)) .GT. airdenm1 * 1.E-5) THEN
                  V(CCS+IK) = 1.
               ENDIF
*
               liquid(i,k) = QC(I,K)+QR(I,K)
               solid(i,k)  = QI(I,K)
*
            END DO
         END DO
      ELSE IF (ISTCOND.EQ.9) THEN
         DO K=1,NK
*VDIR NODEP
            DO I=1,NI
               IK = (K-1)*NI+I-1
*
*              TRANSVIDER LES NUAGES
               airdenm1 = rgasd *T(i,k)/(s(i,k)*ps(i))
               IF((QC(I,K)+QR(I,K)+QI(I,K)+QGP(I,K)).GT.airdenm1*1.E-5)THEN
                  V(CCS+IK) = 1.
               ENDIF
*
               liquid(i,k) = QC(I,K)+QR(I,K)
               solid(i,k)  = QI(I,K)+QGP(I,K)
*
            END DO
         END DO
      ENDIF
*
*******************************************************************
*     CALCUL DE QUANTITES INTEGREES
*
      IF (ISTCOND.GE.3) THEN
*
         CALL INTWAT3(V(ICW),V(IWV),V(IWV700),V(IWP),V(LWP2),
     $               V(SLWP),V(SLWP2),V(SLWP3),V(SLWP4),
     $               T,Q,liquid,solid,S,PS,NI,NK)
      ENDIF
*
*
*******************************************************************
*     EN MODE CLIMAT OU STRATOS, IL N'Y A PAS DE PROCESSUS DE     *
*     CONVECTION/CONDENSATION AU-DESSUS DE TOPC OU BIEN SI        *
*     HUMOINS EST PLUS PETIT QUE MINQ                             *
*     --------------------------------------------------------    *
*******************************************************************
      if (CLIMAT .OR. STRATOS) then
*
         do k = 1,nk
*VDIR NODEP
            do i = 1,ni
               ik = (K-1)*NI+I-1
*
               hum        = d(humoins+ik)
               press      = d(sigm   +ik) * d(pmoins+i-1)
*
               keep = 1.
               if (press.lt.TOPC .or. hum.le.MINQ) keep = 0.
*
               ZCTE (I,K) = ZCTE (I,K) * keep
               ZSTE (I,K) = ZSTE (I,K) * keep
*
               ZCQE (I,K) = ZCQE (I,K) * keep
               ZSQE (I,K) = ZSQE (I,K) * keep
*
               ZCQCE(I,K) = ZCQCE(I,K) * keep
               ZSQCE(I,K) = ZSQCE(I,K) * keep
*
               ZCQRE(I,K) = ZCQRE(I,K) * keep
               ZSQRE(I,K) = ZSQRE(I,K) * keep
*
            enddo
         enddo
*
      endif
*
*******************************************************************
*     SOMMER LES TENDANCES CONVECTIVES ET STRATIFORMES            *
*     ------------------------------------------------            *
*******************************************************************
*
      DO K=1,NK
*VDIR NODEP
         DO I=1,NI
            TTM   (I,K) = ZCTE (I,K) + ZSTE(I,K)
            TQM   (I,K) = ZCQE (I,K) + ZSQE(I,K)
            QCTEND(I,K) = ZCQCE(I,K) + ZSQCE(I,K)
            QRTEND(I,K) = ZCQRE(I,K) + ZSQRE(I,K)
            T     (I,K) =  T0  (I,K)
            Q     (I,K) =  Q0  (I,K)
            QC    (I,K) = QC0  (I,K)
            QR    (I,K) = QR0  (I,K)
*
            GZM(I,K) = ILAB(I,K)
         END DO
      END DO
*
*     TENDANCES MOYENNEES
      IF ((MOYHR.GT.0).AND.(KOUNT.GT.0)) THEN
*VDIR NODEP
         DO I = 0, NI*NK-1
            F(ZCTEM  + i) = F(ZCTEM  + i) + ZCTE (I+1,1)
            F(ZSTEM  + i) = F(ZSTEM  + i) + ZSTE (I+1,1)
            F(ZCQEM  + i) = F(ZCQEM  + i) + ZCQE (I+1,1)
            F(ZSQEM  + i) = F(ZSQEM  + i) + ZSQE (I+1,1)
            F(ZCQCEM + i) = F(ZCQCEM + i) + ZCQCE(I+1,1)
            F(ZSQCEM + i) = F(ZSQCEM + i) + ZSQCE(I+1,1)
         END DO
      ENDIF
*
*******************************************************************
*     EXTRACTION DE DIAGNOSTICS                                   *
*     -------------------------                                   *
*******************************************************************
*
*     NUAGES STRATIFORMES
      CALL SERXST (V(FLAGMXP),'FG',J, NI, 0.,     1.,  -1      )
      CALL SERXST (V(CCS)  , 'NS', J, NI, 0.,     1.,  -1      )
      CALL MZONXST(V(CCS)  , 'NS', J, NI, HEURSER,1.,  -1, ICPU)
*
      IF (ICONVEC.GE.3) THEN
*
*        TENDANCES CONVECTIVES
         CALL SERXST  (ZCTE, 'TK' , J , NI, 0.0 ,    1.,      -1      )
         CALL MZONXST (ZCTE, 'TK' , J , NI, HEURSER, PS,      -2, ICPU)
         CALL SERXST  (ZCQE, 'QK' , J , NI, 0.0 ,    1.,      -1      )
         CALL MZONXST (ZCQE, 'QK' , J , NI, HEURSER, PS,      -2, ICPU)
*
      ENDIF
*
      IF (ISTCOND.EQ.3 .OR. ISTCOND.EQ.4) THEN
*
*        FLUX DES PRECIPITATIONS
         CALL SERXST (V(RNFLX),  'WF', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(RNFLX),  'WF', J, NI, HEURSER, 1.,   -1, ICPU)
*
         CALL SERXST (V(SNOFLX), 'SF', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(SNOFLX), 'SF', J, NI, HEURSER, 1.,   -1, ICPU)
*
*        EPAISSEUR ET CHEMIN OPTIQUE
         CALL SERXST (V(ICW),    'IE', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(ICW),    'IE', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(IWV),    'IH', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(IWV),    'IH', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(LWP2),   'IC', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(LWP2),   'IC', J, NI, HEURSER, 1.,   -1, ICPU)
*
      ELSE IF (ICONVEC.EQ.3) THEN
*
*         NUAGES DE CONVECTION RESTREINTE + NUAGES DE CONVECTION PROFONDE
*         POUR LE SCHEMA "OLDKUO" (SI NON UTILISE AVEC "NEWSUND")
          CALL SERXST  (F(FN) ,'NC', J, NI,  0.0    , 1.,      -1      )
          CALL MZONXST (F(FN) ,'NC', J, NI,  HEURSER, 1.,      -1, ICPU)
*
      ENDIF
*
************************************************************************
      IF (ISTCOND.EQ.5) THEN
*        LES INTEGRALES VERTICALES DU CONDENSE(ICW), DE LA VAPEUR (IWV),
*        DE PHASES LIQUIDE (LWP2) ET SOLIDE (IWP), SURFONDUE (SLWP)
*        ET SURFONDUE PAR COUCHES (SLWP2 DU s1 A s2, SLWP3 DE s2 A s3
*        ET SLWP4 DE s3 A s4, OU s1, s2, s3 ET s4 LES NIVEAUX SIGMA
*        DEFINIS EN INTWAT3).
         CALL SERXST (V(ICW),    'IE', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(ICW),    'IE', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(IWV),    'IH', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(IWV),    'IH', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(LWP2),   'IC', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(LWP2),   'IC', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(IWP),    'II', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(IWP),    'II', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(SLWP),   'IB', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(SLWP),   'IB', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(SLWP2),  'B2', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(SLWP2),  'B2', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(SLWP3),  'B3', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(SLWP3),  'B3', J, NI, HEURSER, 1.,   -1, ICPU)
         CALL SERXST (V(SLWP4),  'B4', J, NI, 0.,      1.,   -1      )
         CALL MZONXST(V(SLWP4),  'B4', J, NI, HEURSER, 1.,   -1, ICPU)
*
      ENDIF
************************************************************************
*
      IF (KOUNT.EQ.0) THEN
*        METTRE A ZERO LES TAUX DES PRECIPITATIONS
         DO I=0,NI-1
            F(TLC  +I) = 0.
            F(TLCS +I) = 0.
            F(TLS  +I) = 0.
            F(TSC  +I) = 0.
            F(TSCS +I) = 0.
            F(TSS  +I) = 0.
            F(RCKFC+I) = 0.
         END DO
      ENDIF
*
*
      RETURN
      END