!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
*OPTION* -O noreorder
#include "phy_macros_f.h"

      SUBROUTINE SKOCON ( ZTE   , ZQE   , ZCWE   , ZCRR  , ZCSR  , ZSRR, 1,5
     &                    ZSSR  , ZSTCOV, ZCUCOV , TP    , TM    , QP  ,
     &                    QM    , TSS   , CWP    , CWM   , PSP  ,
     &                    PSM   , ILAB  , S      , NI    , NLEV ,
     &                    FACTDT, DT    , SATUCO, ICONVEC,ISTCOND,
     &                    prflx , swflx )
#include "impnone.cdk"
*
      Integer ni , nlev
      Integer ilab(ni,nlev)
      Real    ZTE(NI,nlev)    , ZQE(NI,nlev), ZCWE(NI,nlev) , ZCRR(NI),
     &        ZCSR(NI)        , ZSRR(NI)    , ZSSR(NI)  ,
     &        ZSTCOV(NI,nlev) , ZCUCOV(NI,nlev) ,
     &        TP(NI,nlev)   , TM(NI,nlev) , QP(NI,nlev) ,  QM(NI,nlev), 
     &        TSS(NI)       , CWP(NI,nlev), CWM(NI,nlev),
     &        PSP(NI)       , PSM(NI)     , S(ni,*)     ,
     &        PRFLX(ni,nlev+1), SWFLX(ni,nlev+1)
      Real    FACTDT, DT 
      Integer ICONVEC, ISTCOND, MODP
      Logical SATUCO

*Author
*         Ashu Dastoor (1991)
*
*Revision
* 001     Wei Yu (January 1994) - Code vectorization
* 002     Wei Yu (June 1994) - Adaptation to MC2, use local sigma
* 003     Bernard Bilodeau - New physics interface
* 004     G. Pellerin (June 95) - Different Evaporation Coefficient
*                                 for convection
*                               - Bugfix for stable and convective 
*                                 precipitation
* 005     R. Sarrazin (June 95) modified stratiform part
* 006     R. Sarrazin (Nov  95) put very small precip rates to 0 at the end
*                               to avoid excessive trace of precip
* 007     B. Bilodeau (Jan 01) - Automatic arrays
* 008     L. Spacek   (May 03) - IBM conversion
*             - eliminate NEWKUO code
*             - eliminate useless calculations
*             - calls to vsexp routine (from massvp4 library)
*             
*
*Object
*         parameterization of stratiform and convective condensation
*
*Arguments
*
* ZTE     tendency of temperature due to convection
* ZQE     tendency of specific humidity due to convection
* ZCWE    tendency of cloud water due to convection
* ZCRR    rate of liquid precipitation
* ZCSR    rate of solid precipitation due to convection
* ZSRR    rate of liquid precipitation due to stratiform condensation
* ZSSR    rate of solid precipitation due to stratiform condensation
* ZSTCOV  stratiform cloud cover
* ZCUCOV  cumulus cloud cover
* TP      temperature
* TM      environmental T at (T-DT)
* QP      specific humidity
* QM      environmental Q at (T-DT)
* TSS     surface temperature
* CWP     cloud water content at (T+DT)
* CWM     cloud water content at (T-DT)
* PSP     surface pressure at (T+DT)
* PSM     surface pressure at time (T-DT)
* ILAB    flag array from subroutine KUO
* S       sigma levels
* NI      1st horizontal dimension
* NLEV    number of model levels
* FACTDT  2 for 3-time level models
*         1 for 2-time level models
* DT      timestep
* SATUCO  parameter to indicate 
* ICONVEC convection switch
* ISTCOND stratiform condensation switch
* PRFLX   flux of liquid precipitation
* SWFLX   flux of solid precipitation
*
*
*Note
*
*  HDCWAD modified, DO NOT PASS to the main routine (1990)
*
*
*  This routine deals with parameterization of condensation along
*  a constant J - LINE
*  Points 1) - 8) Handle parameterization of convection by use of
*  a modified KUO scheme such that it includes prediction
*  of cloud water content and diagnostic setting of fractional
*  cloud cover.
*  Points 11) - 17) Handle parameterization of stratiform condensa-
*  tion including prediction of cloud water content and
*  diagnostic setting of fractional cloud cover.
*
*  1)   Find lifting condensation level, LCL, HPB of surface air
*       and corresponding temperature, TB and Humidity, QB. Calculate
*       THETAE of HPB
*  2)   Calculate TC(K) and QC(K) along THETAE = CONSTANT
*  3)   Calculate (TC-T) and (TC-T)-MAX and (QC-Q). Set lowest level
*       of convection, KB, and top level, KT, and level of (TC-T)-MAX,
*       KTMAX.  Calculate (HPB - P(KB)).
*  4)   Determine top of the convection. If the result is KT.GE.KB,
*       then further calculations are terminated
*  5)   Calculate accession of vapour, CQ, and basic proportionality
*       parameter, KSIO.  If CQ.LE.O  or KSIO.LE.O, KT is set = KB
*       and jump to POINT 5)
*  6)   Calculate KSI(K), heating and moistening functions and cloud
*       cover.
*  7)   Prediction of cloud water content, CW, by an implicit scheme,
*       requiring an iterative procedure.
*  8)   Calculate accumulated precipitation.
*-----------------------------------------------------------------------
*
* 11)   Modification of basic threshold relative humidity, HU00
* 12)   General requirement for condensation, REQCON = 1 or 0
* 13)   Setting of specific HU00 and REQCON and EVAP of cloud water
* 14)   Cloud cover and evaporation of precipitation
* 15)   Accession of vapour, and final setting of heating/cooling
* 16)   Prediction of cloud water content, CW, by an implicit scheme,
*       requiring an iterative procedure.
* 17)   Calculate accumulated precipitation.
*
**
C-----------------------------------------------------------------------
C  I)       NAMES OF PARAMETERS AND OTHER QUANTITIES
C           ------------------------------------------------------------
C
C       TABFBF      BERGERON-FINDEISEN EFFECT FROM (DEWI*TABICE)
C       CUMASK(K)   SET = 0 IF CONVECTION,   OTHERWISE = 1
C       DLNPDT(K)   = 1/HPK*DP/DT AT LEVEL K
C       DPK(K)      DELTA-P AROUND LEVEL K
C       FSCFLD(I,J) FIELD TO MODIFY SC COVER AT LEVEL KSCFLD
C                   DUE TO ENTRAINMENT
C       ZCUCOV(K)   CONTAINS CUMULUS CLOUD COVER
C       HDCWAD(K)   TENDENCY OF CLOUD WATER DUE TO OTHER EFFECTS
C                   BUT CONDENSATION
C       HDCWST(K)   TENDENCY OF CLOUD WATER DUE TO STRATIFORM 
C       HDQAD(K)    TENDENCY OF VAPOUR DUE TO EFFECTS OTHER THAN
C                   CONDENSATION
C       HDQST(K)    TENDENCY OF VAPOUR DUE TO STRATIFORM CONDENSATION 
C       HDTAD(K)    TENDENCY OF TEMPERATURE DUE TO EFFECTS OTHER THAN 
C                   CONDENSATION
C       HDTST(K)    TENDENCY OF TEMPERATURE DUE TO STRATIFORM 
C                   CONDENSATION
C       TABDE       DIFFERENCE IN SATURATION VAPOUR PRESSURE OVER 
C                   WATER AND ICE 
C       HEVAC(K)    EVAPORATION RATE OF CLOUD WATER 
C       HEVAPR(K)   EVAPORATION RATE OF PRECIPITATION 
C       HKSIZ(K)    KSI OF KUO SCHEME AS A FUNCTION OF HEIGHT 
C       FMROFT      TEMPERATURE FUNCTION TO MULTIPLY MR WITH
C                   FOR T<273 
C       HPK(K)      = P AT SIGMA(K) 
C       HPKAP(K)    = (HP0/HPK(JK)) ** KAPPA
C       HPLOGK(K)   = LOG(P)
C       HQC(K)      SATURATION MIXING RATIO ALONG THE MOIST ADIABAT 
C                   THROUGH THE LCL 
C       HQCMQ(K)    HQC MINUS ENVIRONMENTAL Q 
C       QM(K)       ENVIRONMENTAL Q AT (T-DT) 
C       HQP1(K)     ENVIRONMENTAL Q AT (T+DT) 
C       HQSAT(K)    SATURATION MIXING RATIO WITH RESECT TO
C                   ENVIRONMENTAL TEMPERATURE 
C       HSQ(K)      EPS*L**2*QSAT/(R*CP*T**2) 
C       ZSTCOV(K)   CONTAINS STRATIFORM CLOUD COVER 
C       HTC(K)      TEMPERATURE ALONG THE MOIST ADIABAT 
C                   THROUGH THE LCL 
C       HTCMT(K)    HTC MINUS ENVIRONMENTAL T 
C       TM(K)       ENVIRONMENTAL T AT (T-DT) 
C       HTP1(K)     ENVIRONMENTAL T AT (T+DT) 
C       HU(K)       RELATIVE HUMIDITY OF THE ENVIRONMENT
C       TABICE      PROBABILITY FOR ICE CRYSTALS AS A FUNCTION OF 
C                   TEMPERATURE 
C       PRCPCU(I,J) RATE OF CONVECTIVE PRECIPITATION AT LEVEL K, SUMMED 
C                   FROM KHT
C       PRCPST(I,J) RATE OF STRATIFORM PRECIPITATION AT LEVEL K, SUMMED 
C                   FROM KHT
C 
C       ACPRST      ACCUMULATED PRECIPITATION FROM STRATIFORM CLOUDS
C       ACPRCU      ACCUMULATED PRECIPITATION FROM CONVECTIVE CLOUDS
C       CFREEZ      INCREASES CONVERSION RATE BELOW TEMP CTFRZ1 
C       COALES      INCREASES CONVERSION RATE DUE TO PRECIPITATION
C                   COMING IN FROM ABOVE
C       CBFEFF      INCREASES CONVERSION RATE DUE TO DUE TO PRESENCE
C                   OF ICE IN PRECIPITATION COMING IN FROM ABOVE
C       CONAE       FACTOR TO TUNE TABLE LOOK-UP FOR TETA-AE
C       CTFRZ1      TEMP BELOW WHICH CONVERSION RATE IS INCREASED 
C       DT          TIME-STEP 
C       HCP         SPECIFIC HEAT OF DRY AIR AT CONSTANT PRESSURE 
C       HCCU        CONVERSION RATE OF CLOUD TO PRECIP DROPS IN 
C                   CONVECTIVE CLOUD
C       HCST        CONVERSION RATE OF CLOUD TO PRECIP DROPS IN 
C                   STRATIFORM CLOUD
C       HCUNRM      CLOUD COVER DEPENDS ON CLOUD DEPTH COMPARED TO
C                   HCUNRM
C       HDPB        = (HPB - HPK(KHB) + 0.5 * DPK(KHB)) 
C       HELDCP      = HEPS * HLDCP
C       HELDR       = HEPS * HLV/HRD
C       HEPS        MOL WEIGHT OF WATER/MOL WEIGHT OF AIR = 0.622 
C       HEPSE0      = HEPS * HE273
C       HE273       SATURATION VAPOUR PRESSURE AT T=273K
C       HG          GRAVITY 
C       HKAP        = HRD/HCP 
C       HKMELT      COEFFICIENT FOR MELTING OF ICE IN PRECIPITATION 
C       HKPI        = 1./HKAP 
C       HLDCP       = HLV/HCP 
C       HLV         LATENT HEAT OF VAPORIZATION 
C       HMRCU       CLOUD WATER MIXING RATIO AT WHICH CONVERSION BECOMES
C                   EFFICIENT IN CONVECTIVE CLOUD 
C       HMRST       CLOUD WATER MIXING RATIO AT WHICH CONVERSION BECOMES
C                   EFFICIENT IN STRATIFORM CLOUD 
C       HPB         P VALUE AT LCL
C       HPNORM      = HPS - HPT 
C       HPS         CURRENT SURFACE PRESSURE
C       HPSKAP      (HP0/HPS) ** KAPPA
C       HPT         TOP PRESSURE OF THE MODEL ATMOSPHERE (SIGMA-DOT=0)
C       HP0         REFERENCE PRESSURE (=100 KPA) 
C       HQB         MIXING RATIO AT LCL 
C       HRD         GAS CONSTANT OF DRY AIR 
C       HRTDEL      = HRD * HT273/(HEPS * HLV)
C       HTAUCU      CHARACTERISTIC TIME USED IN CONVECTIVE CLOUD COVER
C                   SCHEME
C       HTB         TEMPERATURE AT LCL
C       HTD         DEW POINT TEMPERATURE OF SURFACE AIR
C       HTETAE      THETAE THROUGH LCL
C       HT273       = 273 K 
C       HUZ00       MODIFIED HU00 
C       HU00        THRESHOLD RELATIVE HUMIDITY FOR STRATIFORM
C                   CONDENSATION
C       HVSNOW      TERMINAL VELOCITY OF ICE/SNOW PRECIPITATION 
C       HVTERM      TERMINAL VELOCITY OF PRECIPITATION
C       ICLDDT      OPTIONAL NUMBER OF STEPS BETWEEN CONDENSATION CALCU-
C                   LATIONS; 1 FOR EVERY AND 2 FOR EVERY SECOND STEP ETC
C                   THE VALUE IS SET IN ROUTINE STEP
C       KCBTOP      NORMALLY = 1, BUT IF THETAE IS SMALL, KCBTOP IS SET 
C                   TO .GT. 1, IMPLYING LOWER ALTITUDE IN ORDER TO AVOID
C                   TC .LT. TVBEG FOR THE VAPSAT TABLE
C       KHB         FIRST MODEL LEVEL ABOVE LCL 
C       KHT         TOP LEVEL OF CONVECTION, I.E.,GOING UPWARD IT IS
C                   THE LAST LEVEL WITH (TC-T).GT.0 
C       NLEV        NUMBER OF MODEL LEVELS. 
C       PCUACC      ACCUMULATED PRECIPITATION FROM CONVECTIVE CLOUDS
C       PSTACC      ACCUMULATED PRECIPITATION FROM STRATIFORM CLOUDS
C       REQCON      INDICATOR = 1 IF STRATIFORM CONDENSATION IS ALLOWED 
C                   TO TAKE PLACE,  ELSE REQCON = 0 
C       SEVAPR      ACCUMULATED  EVAPORATION FROM PRECIPITATION 
C       SEVAPC      ACCUMULATED EVAPORATION OF CLOUD WATER
C       SUPSAT      INDICATOR = 1 IF SUPERSATURATION IS AT HAND, I.E.,
C                   U.GT.1.02,  ELSE SUPSAT = 0 
C       STPEVP      COEFFICIENT EVAPORATION FOR STRATIFORM PRECIPITATION
C       CVPEVP      COEFFICIENT EVAPORATION FOR CONVECTION PRECIPITATION
C       TANVIL      IF T(KHT) .LE. TANVIL A STRATIFORM ANVIL CLOUD IS 
C                   CALCULATED IN THE TOP CONVECTIVE LAYER
C       TCMTMX      (TC-T) - MAX
C       FACTDT      2 FOR 3-TIME LEVEL MODELS
C                   1 FOR 2-TIME LEVEL M0DELS
C       DT          TIMESTEP
C       RTWODT      = 1. / (FACTDT*DT)
C       U00MAX      MAXIMUN ALLOWABLE VALUE OF MODIFIED HU00
C-----------------------------------------------------------------------
C-----------------------------------------------------------------------
C  II)      DECLARATIONS
C           ------------------------------------------------------------
C 
C 
      real    TWODT  , hfis   , xdpb   
      real    YMN    , XXP    , XHJ    , XF     , XFPRIM ,
     &        XCWP1  , XPRADD , DTMELT , XROV   , XRO    ,
     &        XMIND  , DMELT  , SQMELT , XMELT  , DSNOW  ,
     &        EVAPRI , XEVACU , XEVAP  , XPSQ   , xp
      real    XTP    , XSP    , DU238  , XCLEAR ,
     &        XCEVSC , QPREL  , QINCR  , tmp1   ,
     &        XSCDIF , ICLDDT
      integer KSCFLD , KSCTOP , IT0    , IT0P1
      real    FSCFLD , FSCFKZ , HCP    , HEPS   , HG     ,
     &        rHG    , HLV    , HDL    , HP0    , HRD    ,
     &        HT273  , HE273  , HEPSE0 , HKAP   , HKPI   ,
     &        HCPI   , HEDR   , HRTDE  , HLDCP  , HDLDCP ,
     &        HRTDEL , HELDR  , HELDCP , HEDLDR , HELDRI ,
     &        SHCUM  , CONAE  , AECON  , CFREEZ , COALES
      real    CBFEFF , CTFRZ1 , HCCU   , PMOIST , HCUNRM ,
     &        HMRCU  , HMRST  , HTAUCU , TANVIL , HCST   ,
     &        HVTERM , CVPEVP , STPEVP , HVSNOW , SQVSNO , HKMELT ,
     &        U00MAX , HU00   , RTWODT , 
     &        ICLDDT2dt       , ICLDDTdt , 
     &        rICLDDT2dt      , rICLDDTdt
      real    yp, yt, yq, s1, s2, xt, QGTO, xd, xc, yc, ye,
     &        XQMQS, DUOORL
      real    tabice, tabde, dpksf, tetae
      integer nlevm1, nlevp1

      integer khbmax , khtmin , liftst,
     &        kcbtopmin, ktmp ,
     &        khbmin
C
C 
      integer il, jk, icount,
     &        JNR
      integer lqonof, KHBP1
      real    temp1         , temp2
c***
#include "dintern.cdk"
#include "consphy.cdk"
c****
C 
      REAL    TVBEG  , REDUES , TVIRTC
      REAL    T0I    , TCI    , TSCALE , APRI  ,
     &        TOPEQ0 , TODPMX
C
      LOGICAL logic  , logic3
C
      INTEGER IVBEG
*
      REAL     XDU    , UKSIZ  , EVCWMX , XACCAD , XACCES ,
     &         XN     , XNPM   , XBNPM  , TPREL  ,
     &         QSPREL , XDQ    , XDE    , XPRB   , BFMOD  ,
     &         XK     , HFCOX  , XFT    , HFREZX , XHMRCU ,
     &         ANVCOV , X      , Y      , HTD    , TEMPA2 ,
     &         TEMPAD1
*
* 
************************************************************************
*     AUTOMATIC ARRAYS
************************************************************************
*
      AUTOMATIC ( LOGIC1  , LOGICAL , (NI     ) )
      AUTOMATIC ( LOGIC2  , LOGICAL , (NI     ) )
      AUTOMATIC ( SAVEL   , LOGICAL , (NI     ) )
*
      AUTOMATIC ( INDCON  , INTEGER , (NI     ) )
      AUTOMATIC ( IPRTCO  , INTEGER , (NI,NLEV) )
      AUTOMATIC ( KTCMTX  , INTEGER , (NI     ) )
      AUTOMATIC ( KHFREE  , INTEGER , (NI     ) )
      AUTOMATIC ( KHB     , INTEGER , (NI     ) )
      AUTOMATIC ( KCBTOP  , INTEGER , (NI     ) )
      AUTOMATIC ( KHT     , INTEGER , (NI     ) )
      AUTOMATIC ( KHTX    , INTEGER , (NI     ) )
      AUTOMATIC ( ILKHB   , INTEGER , (NI     ) )
      AUTOMATIC ( ILKHT   , INTEGER , (NI     ) )
      AUTOMATIC ( INDCU   , INTEGER , (NI     ) )
      AUTOMATIC ( INDLIFT , INTEGER , (NI     ) )
      AUTOMATIC ( INDFLO  , INTEGER , (NI     ) )
      AUTOMATIC ( LIFTLV  , INTEGER , (NI     ) )
      AUTOMATIC ( LQCONV  , INTEGER , (NI     ) )
*
      AUTOMATIC ( ACCK    , REAL    , (NI,NLEV) )
CLS      AUTOMATIC ( HPLOGK  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HPKAP   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HTCMT   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HTCMTB  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HQCMQ   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HQCMQB  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDCWST  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HEVAC   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HEVAPR  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDTST   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDQST   , REAL    , (NI,NLEV) )
      AUTOMATIC ( STHEAT  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HFOORL  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HQSAT   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HSQ     , REAL    , (NI,NLEV) )
      AUTOMATIC ( HU      , REAL    , (NI,NLEV) )
      AUTOMATIC ( MOISTN  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDTCU1  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HTC     , REAL    , (NI,NLEV) )
      AUTOMATIC ( HQC     , REAL    , (NI,NLEV) )
      AUTOMATIC ( HFDTMX  , REAL    , (NI,NLEV) )
      AUTOMATIC ( CUMASK  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDCWAD  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HKSIZ   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HKSI    , REAL    , (NI     ) )
      AUTOMATIC ( HTP1    , REAL    , (NI,NLEV) )
      AUTOMATIC ( HQP1    , REAL    , (NI,NLEV) )
      AUTOMATIC ( DPK     , REAL    , (NI,NLEV) )
      AUTOMATIC ( XDP     , REAL    , (NI     ) )
      AUTOMATIC ( DLNPDT  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDTAD   , REAL    , (NI,NLEV) )
      AUTOMATIC ( ELOFT   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HUQSM1  , REAL    , (NI,NLEV) )
      AUTOMATIC ( HDQAD   , REAL    , (NI,NLEV) )
      AUTOMATIC ( HPK     , REAL    , (NI,NLEV) )
      AUTOMATIC ( HPS     , REAL    , (NI     ) )
      AUTOMATIC ( COVVAP  , REAL    , (NI     ) )
      AUTOMATIC ( COVBAR  , REAL    , (NI     ) )
      AUTOMATIC ( DONESC  , REAL    , (NI     ) )
      AUTOMATIC ( XSCEV   , REAL    , (NI     ) )
      AUTOMATIC ( XKCOVB  , REAL    , (NI     ) )
      AUTOMATIC ( DUSTAB  , REAL    , (NI     ) )
      AUTOMATIC ( XDIFSC  , REAL    , (NI     ) )
      AUTOMATIC ( SUPSAT  , REAL    , (NI     ) )
      AUTOMATIC ( XFRCOA  , REAL    , (NI     ) )
      AUTOMATIC ( XQNET   , REAL    , (NI     ) )
      AUTOMATIC ( XFIX    , REAL    , (NI     ) )
      AUTOMATIC ( XCST    , REAL    , (NI     ) )
      AUTOMATIC ( XCCU    , REAL    , (NI     ) )
      AUTOMATIC ( YM      , REAL    , (NI     ) )
      AUTOMATIC ( YMMIN   , REAL    , (NI     ) )
      AUTOMATIC ( PRCPCU  , REAL    , (NI     ) )
      AUTOMATIC ( HFMRX   , REAL    , (NI     ) )
      AUTOMATIC ( PRCPST  , REAL    , (NI     ) )
      AUTOMATIC ( CUSNOW  , REAL    , (NI     ) )
      AUTOMATIC ( STSNOW  , REAL    , (NI     ) )
      AUTOMATIC ( HEVACU  , REAL    , (NI     ) )
      AUTOMATIC ( HEVRST  , REAL    , (NI     ) )
      AUTOMATIC ( HEVCST  , REAL    , (NI     ) )
      AUTOMATIC ( TEMPAR  , REAL    , (NI     ) )
      AUTOMATIC ( TEMPAD  , REAL    , (NI     ) )
      AUTOMATIC ( REQCON  , REAL    , (NI     ) )
      AUTOMATIC ( HTB     , REAL    , (NI     ) )
      AUTOMATIC ( HUZ00   , REAL    , (NI     ) )
      AUTOMATIC ( HPB     , REAL    , (NI     ) )
      AUTOMATIC ( HDPB    , REAL    , (NI     ) )
      AUTOMATIC ( ILHDPB  , REAL    , (NI     ) )
      AUTOMATIC ( HQB     , REAL    , (NI     ) )
      AUTOMATIC ( HTETAE  , REAL    , (NI     ) )
      AUTOMATIC ( TCMTMX  , REAL    , (NI     ) )
      AUTOMATIC ( XQSUPS  , REAL    , (NI     ) )
      AUTOMATIC ( DPSUM   , REAL    , (NI     ) )
      AUTOMATIC ( PRBMOD  , REAL    , (NI     ) )
      AUTOMATIC ( XCU     , REAL    , (NI     ) )
      AUTOMATIC ( XQ      , REAL    , (NI     ) )
      AUTOMATIC ( SUPKSI  , REAL    , (NI     ) )
      AUTOMATIC ( CQI     , REAL    , (NI     ) )
      AUTOMATIC ( XSUMT   , REAL    , (NI     ) )
      AUTOMATIC ( XSUMQ   , REAL    , (NI     ) )
      AUTOMATIC ( XSUM    , REAL    , (NI     ) )
      AUTOMATIC ( WORK    , REAL    , (NI,NLEV) )
*              
************************************************************************
C 
* 

C  III)     STATEMENT FUNCTIONS 
C           ----------------------------------------------------------- 
*
      REAL Z1, Z2, Z3, Z4, Z5
* 
#include "fintern.cdk"
C 
C           FORMULA FOR THETHAE FROM A SERIES EXPANSION 
C 
C           TAE = PI*T*EXP(L*Q/(CP*T)) = EXP(CONAE)*PI*T*(1+(X*(1+.5*X))
C           WHERE X = L*Q/(CP*T)-CONAE  AND CONAE IS A CONST APPR = 0.15
C 
      TETAE(YP,YT,YQ) = AECON * YP * YT * ( 1. + ( HLDCP * YQ / YT 
     &                  - CONAE ) * ( 1. + 0.5 * ( HLDCP * YQ / YT 
     &                  - CONAE ) ) )
C 
C           FORMULA FOR DPK/P 
C 
      DPKSF(S1,S2) = 2. * (S1-S2) / (S1+S2) 
C 
C           DIFFERENCE OF SATURATION PRESSURE BETWEEN WATER AND ICE 
C           PROBABILITY FOR EXISTENCE OF ICE AND THE PRODUCT OF THOSE 
C 
      TABDE(XT)  = MIN((( HE273/XT * EXP(HELDR*(T0I - 1./XT)) *
     +             (1. - EXP(HEDLDR*(T0I - 1./XT))) ) *9.248487), 1.0)
*
*     TABDE(XT)  = HDEWI( IT0P1-INT(XT) ) * ( XT-INT(XT) ) +
*    &             HDEWI( IT0P1-INT(XT)+1 ) * ( 1.-XT+INT(XT) ) 
C 
      TABICE(XT) = MAX(APRI*(EXP(-(((MAX(XT,TCI)-TCI)/TSCALE)**2))
     +                   -1.)+1. , 0.0)
*
*     TABICE(XT) = PRBICE( IT0P1-INT(XT) ) * ( XT-INT(XT) ) + 
*    &             PRBICE( IT0P1-INT(XT)+1 ) * (1.-XT+INT(XT) )
C 
C      TABFBF(XT) = TABICE(XT) * (1.-TABICE(XT)) * TABDE(XT)
C
C      TABFBF(XT) = BFEFF(IT0P1-INT(XT))*(XT-INT(XT)) +
C     1             BFEFF(IT0P1-INT(XT)+1)*(1.-XT+INT(XT)) 
C 
C           TEMPERATURE FUNCTION TO MULTIPLY HMRCU AND HMRST FOT T<273
C 
      Z1(XT) = MIN(1.33*EXP(-((XT-HT273)*.066)**2) , 1.0)
*
      Z2(XT) = ABS (XT - 232.) / 18.
*
      Z3(XT) = Z2(XT) * (1. + Z2(XT) * (1. + 1.333 * Z2(XT))) 
*
      Z4(XT) = Z3(XT) / (1. + Z3(XT)) * SIGN(1.0,XT-232.)
*
      Z5(XT) = 0.5*0.15*(1.07+Z4(XT))
*
*      FMROFT(XT) = CVMGT( Z1(XT), Z5(XT), XT.GT.250. )
*
*     FMROFT(XT) = HMROFT( IT0P1-INT(XT) ) * (XT-INT(XT) ) + 
*    &             HMROFT( 1+IT0P1-INT(XT) ) * (1.-XT+INT(XT) )
C 
C-----------------------------------------------------------------------
C         
*
c
*
C  IV)      VALUES OF CONSTANTS - IN SI UNITS - INCLUDING DERIVED ONES
C           ----------------------------------------------------------- 
C 
      TVBEG  = 100.
      REDUES = 0.983
      TVIRTC = 0.61
      IVBEG  = INT(TVBEG) - 1
*
      HT273  = 273.
      HE273  = 611.
      T0I    = 1./HT273
      TCI    = 232.
      TOPEQ0 = 268. 
      TODPMX = 256. 
      TSCALE = (TODPMX - TCI)*SQRT(2.)
*
      APRI = 1./(1.-EXP(-((TOPEQ0-TCI)/TSCALE)**2))
*
C 
      ICLDDT = 1. 
      KSCFLD = 0
      FSCFLD = 0. 
      FSCFKZ = 0. 
      KSCTOP = NLEV + 3 
      HCP    = CPD
      HEPS   = EPS1
      HG     = GRAV
      rHG    = 1. / hg
      HLV    = CHLC
C     HDL   =  CHLF
      HDL   = 0.
      HP0    = 1.E5 
      HRD    = RGASD
      HEPSE0 = HEPS * HE273 
      HKAP   = HRD/HCP
      IT0 = INT(HT273)
      IT0P1 = IT0 + 1 
      HKPI   = 1./HKAP
      HCPI = 1./HCP 
      HEDR = HEPS/HRD 
      HRTDE = HRD*HT273/HEPS
      HLDCP = HLV*HCPI
      HDLDCP = HDL*HCPI 
      HRTDEL = HRTDE/HLV
      HELDR = HEDR*HLV
      HELDCP = HEPS * HLDCP 
      HEDLDR = HEPS*HDL/HRD 
      HELDRI = 1./HELDR 
      SHCUM = 0.
C 
C-----------------------------------------------------------------------
C 
C  V)       PARAMATER VALUES IN SI UNITS
C           ------------------------------------------------------------
C 
      CONAE  = 0.15 
      AECON  = EXP(CONAE) 
      CFREEZ = 0.12 
      COALES = 300. 
      CBFEFF = 7.0
      CTFRZ1 = 263. 
      HCCU   = 5.E-4
      LQONOF = 0
      PMOIST = 3. 
      HCUNRM = 0.3
      HMRCU  = 5.E-4
      HMRST  = 2.E-4
      HTAUCU = 3600.
      TANVIL = 253. 
      HCST   = 1.8E-4
      HVTERM = 5. 
      STPEVP = 1.6E-4
      CVPEVP = 0.6E-4
      HVSNOW = 2. 
      SQVSNO = SQRT(HVSNOW) 
      HKMELT = 3.E-5
      U00MAX = 0.99
      HU00 = 0.85
      twodt = factdt * dt
      RTWODT = 1. / TWODT        !AJOUT (WEI YU, 1994)
      ICLDDT2dt = ICLDDT * TWODT
      rICLDDT2dt = 1. / ICLDDT2dt
      ICLDDTdt = ICLDDT * DT
      rICLDDTdt = 1. / ICLDDTdt
C 
C-----------------------------------------------------------------------
C 
C  VI)      PREPARATIONS
C
      DO 10 JK = 1 , nlev
      DO 10 IL = 1 , NI
         PRFLX(IL,JK) = 0.0
         SWFLX(IL,JK) = 0.0
10    CONTINUE
C 
      NLEVM1 = NLEV - 1 
      NLEVP1 = NLEV + 1 
C     ------------------------------------------------------------
      do 12 il = 1, ni
         HPS(il) = ( PSP(IL) + PSM(IL) ) * 0.5
         HUZ00(il) = HU00
12    continue

      do 13 jk = 1, nlev
      do 13 il = 1, ni
         HTP1(il,JK) = TP(IL,JK)
         HQP1(il,JK) = QP(IL,JK)
         HPK(il,JK) = S(il,JK) * HPS(il)   !Sigma local (wei YU)
13    continue

      do 14 il = 1, ni
         DPK(il,1) = 0.5 * ( HPK(il,2) - HPK(il,1) )
14    continue

      DO 15 JK  = 2, NLEVM1 
      DO 15 il  = 1, ni 
         DPK(il,JK) = 0.5 * ( HPK(il,JK+1) - HPK(il,JK-1) ) 
15    CONTINUE
 
      do 16 il = 1, ni
         DPK(il,NLEV) = 0.5 * ( HPK(il,NLEV) - HPK(il,NLEV-1) ) 
     &                 + S(il,nlev+1) * HPS(il) - HPK(il,NLEV) 
16    continue

      DO 17 JK = 1, NLEV 
*vdir noloopchg
      do 17 il = 1, ni
         DLNPDT(il,JK) = ( 1. / HPK(il,JK) ) * S(il,JK) !Sigma local
     &                  * ( PSP(IL) - PSM(IL) ) * rTWODT 
         HDTAD(il,JK) = ( HTP1(il,JK) - TM(il,JK) ) * rTWODT 
         HDQAD(il,JK) = ( HQP1(il,JK) - QM(il,JK) ) * rTWODT 
         HDCWAD(il,JK) = ( CWP(il,JK) - CWM(il,JK) ) * rTWODT
17    CONTINUE

      do 18 il = 1, ni
         KCBTOP(il) = 3
         COVVAP(il) = 0. 
         COVBAR(il) = 0. 
         PRCPCU(il) = 0. 
         PRCPST(il) = 0. 
         CUSNOW(il) = 0. 
         STSNOW(il) = 0. 
         HEVACU(il) = 0. 
         HEVRST(il) = 0. 
         HEVCST(il) = 0. 
         indcu(il) = 0
18    continue
c      KCBTOP = 3
      hfis = 0.
      ANVCOV = 0. 
      liftst = 3 + 2  !ne pas varier en fonction de maille
C
C     CALCULATE SATURATED PRESSURES
C
      MODP=3
          if ( SATUCO ) then
             CALL MFOQST(HQSAT, TM,S,HPK,MODP,NI,NLEV,NI)
          else
             CALL MFOQSA(HQSAT, TM,S,HPK,MODP,NI,NLEV,NI)
          endif
C
C
C
      DO jk = 1, nlev
         do il = 1, ni
c            temp1 = TM(il,jk)
            work(il,jk)=-(((max(TM(il,jk),tci)-tci)/tscale)**2)
         enddo
      enddo
C
         call vsexp(work,work,ni*nlev)
C
      if(hdl.ne.0.)then
         DO jk = 1, nlev
            do il = 1, ni
               if ( TM(il,jk) .le. ht273 ) then
                  temp1 = TM(il,jk)
                  eloft(il,jk) = hlv + hdl *
     1                 max(((apri*(work(il,jk)-1.0))+1.0),0.0)
               else
                  eloft(il,jk) = hlv
               endif
            enddo
         enddo
      else
         DO jk = 1, nlev
            do il = 1, ni
                  eloft(il,jk) = hlv
            enddo
         enddo
      endif

c
C 
C           UPDATE THE VERTICAL ARRAYS
C 
      DO 19 JK = 1, NLEV
      do 19 il = 1, ni
*
         ACCK(il,JK)  = 0. 
CLS         HTCMT(il,JK) = 0.
CLS         HTCMTb(il,JK) = 0.
CLS         HQCMQ(il,JK) = 0.
CLS         HQCMQb(il,JK) = 0.
CLS         HKSIZ(il,JK) = 0.
         CUMASK(il,JK) = 1. 
C 
         HDCWST(il,JK) = 0.
         HEVAC(il,JK) = 0.
         HEVAPR(il,JK) = 0.
         HDTST(il,JK) = 0.
         HDQST(il,JK) = 0.
         STHEAT(il,JK) = 0. 
         ZSTCOV(il,JK) = 0. 
         HFOORL(il,JK) = 1. 
CLS         HPLOGK(il,JK) = ALOG(HPK(il,JK))
CLS         HPKAP(il,JK) = (HP0/HPK(il,JK)) ** HKAP 
CLS         if ( TM(il,jk) .le. ht273 ) then
CLS            temp1 = TM(il,jk)
CLS            eloft(il,jk) = hlv + hdl * tabice( temp1 )
CLS         else
CLS            eloft(il,jk) = hlv
CLS         endif
c***
         IPRTCO(il,JK) = 0
C 
         HELDR = HEDR*ELOFT(il,JK)
         HLDCP = HCPI*ELOFT(il,JK)
C
          temp1 = TM(il,JK)
          temp2 = HPK(il,JK)
c***
CLS          if ( SATUCO ) then
CLS             HQSAT(il,jk) = FOQST( temp1 , temp2 )
CLS          else
CLS             HQSAT(il,jk) = FOQSA( temp1 , temp2 )
CLS          endif
c***
         HQSAT(il,JK) = HQSAT(il,JK) * ( 1. + TVIRTC * HQSAT(il,JK) ) 
         HSQ(il,JK) = HELDR * HLDCP * HQSAT(il,JK) / ( TM(il,JK) ** 2)
         HU(il,JK) = AMAX1( QM(il,JK) , HQP1(il,JK) ) / HQSAT(il,JK) 
         HU(il,JK) = AMIN1( HU(il,JK) , 1. ) 
         HU(il,JK) = AMAX1( HU(il,JK) , 0. ) 
CLS         HUQSM1(il,JK) = HU(il,JK) * HQSAT(il,JK) 
CLS         MOISTN(il,JK) = ( 1. - HU(il,JK) ) ** PMOIST 
CLS         HDTCU1(il,JK) = 0. 
19    CONTINUE

C-----------------------------------------------------------------------
C 
C
C-----------------------------------------------------------------------
C 
C           HERE BEGINS THE CALCULATION OF STRATIFORM CONDENSATION
C 
C-----------------------------------------------------------------------
      IF (ISTCOND.EQ.3) THEN
C
C
         IF (ICONVEC.EQ.3.OR.ICONVEC.EQ.11) THEN
C           TRANSVIDAGE DE ILAB DANS CUMASK
            DO JK=1,NLEV
               DO IL=1,NI
                  CUMASK (IL,JK)                     = 1
                  IF(ILAB(IL,JK).EQ.2) CUMASK(IL,JK) = 0
               END DO
            END DO
         ENDIF
C
C
C  11)      MODIFICATION OF BASIC THRESHOLD RELATIVE HUMIDITY, HU00 
C           ------------------------------------------------------------
C 
      DUOORL = 0. 
      IF (HFIS. GT.0.) DUOORL = 0.1 
C-----------------------------------------------------------------------
C           BEGIN OF MAIN VERTICAL LOOP 
C           ------------------------------------------------------------
      do 210 il = 1, ni
         DONESC(il) = -1.
         COVBAR(il) =  0.
         XKCOVB(il) = -1.
210   continue
C 
      DO 1670 JK = 1, NLEV
         do 230 il = 1, ni
C-----------------------------------------------------------------------
C 
C 
C 
            XDIFSC(il) = -1.
C 
C  12)      GENERAL REQUIREMENT FOR CONDENSATION, REQCON = 1 OR 0 
C           ------------------------------------------------------------
            REQCON(il) = CUMASK(il,JK) 
            DUSTAB(il) = 0. 
            SUPSAT(il) = 0. 
c!!!      SUPCU0 = 0. 
            HUZ00(il) = HU00 - DUOORL * HFOORL(il,JK)
230      continue
C-----------------------------------------------------------------------
C  13)      SETTING OF SPECIFIC HU00 AND REQCON 
C           SET REQCON = 0. IN WELL MIXED BOUNDARY LAYER OR INCREASE U0 
C           WITH STABILITY IN THE LOWEST LAYERS, I.E., (JK.GE.JMIXTK) 
C           ------------------------------------------------------------
C
        if( jk .ge. nlev-7 ) then
C
C           LET HU00 INCREASE LINEARLY WITH P FOR P/PS .GT. 0.85
C           ------------------------------------------------------------
      do 245 il = 1, ni
         if ( REQCON(il).EQ.1. .AND. HPK(il,JK)/HPS(il).GT.0.85 ) then
            HUZ00(il) = HUZ00(il) + ( U00MAX - HUZ00(il) )
     &       * ( 1. - 6.66 * ( 1. - HPK(il,JK) / HPk(il,nlev) ) )
         endif
245   continue
C
        endif
C 
c      IF ( JK .LT. KSCTOP ) GO TO 1310
cc
c      if ( KSCFLD .GT. 0 .AND. JK .GT. KSCFLD ) then
c         do 240 il = 1, ni
c            if ( SUPSAT(il) .EQ. 0. ) then
c               REQCON(il) = 0.
c            endif
c240      continue
c      endif
cc***
cC 
cC           LET HU00 INCREASE WITH STABILITY
cC           ------------------------------------------------------------
c      IF ( JK .LT. NLEVM1 ) GO TO 1310
cc
c      do 250 il = 1, ni
c         logic = REQCON(il) .ne. 0.
cc***
c         if ( logic .and. JK .EQ. NLEV ) then
c            xtp = TSS(il)
c            xsp = 1.
c         else
c            xtp = TM(il,jk+1)
cc***
cc   Cette ligne est remplacee le 27 Juin (Wei Yu)
cc            xsp = s(jk+1)
c            xsp = s(il,jk+1)     !sigma local
cc***
c         endif
c
c         if ( logic ) then
c            X = U00MAX - HUZ00(il)
c            DUSTAB(il) = X * (1.85-0.019*(TM(il,JK)-277.)-1.67E-2
cc***
cc   Cette ligne est remplacee le 27 Juin (wei Yu)
cc
cc     &                  *(XTP-TM(il,JK-1)) / (XSP-S(JK-1)))
c     &                  *(XTP-TM(il,JK-1)) / (XSP-S(il,JK-1)))
cc***
c            DUSTAB(il) = AMAX1( DUSTAB(il), 0. ) 
c         endif
c250   continue
c1310  CONTINUE
c
c      do 260 il = 1, ni
c         HUZ00(il) = AMIN1( (HUZ00(il) + DUSTAB(il)), U00MAX )
c260   continue
C 
C 
C           LET U00 INCREASE FOR T.LT.238K
C           ------------------------------------------------------------
      do 270 il = 1, ni
         if ( TM(il,JK) .lt. 238. ) then
            X = 1.+ 0.15 * ( 238. - TM(il,JK) )
            DU238 = ( U00MAX - HUZ00(il) ) * ( 1. - 1. / X )
            HUZ00(il) = AMIN1( (HUZ00(il)+DU238), U00MAX )
         endif
270   continue
C-----------------------------------------------------------------------
C           IF U.LT.U0,SET REQCON = 0 
C           ------------------------------------------------------------
      do 280 il = 1, ni
         if ( HU(il,JK).LE.HUZ00(il) .AND. SUPSAT(il).EQ.0. ) then
            REQCON(il) = 0.
         endif
280   continue
C 
C-----------------------------------------------------------------------
C           CONDENSATION CALCULATIONS 
C-----------------------------------------------------------------------
C  14)      CLOUD COVER AND EVAPORATION OF PRECIPITATION
C           ------------------------------------------------------------
      do 290 il = 1, ni
         ZSTCOV(il,JK) = ( 1. - SQRT( ( 1.-HU(il,JK) ) 
     &                    / ( 1.-HUZ00(il) ) ) ) * REQCON(il)
         ZSTCOV(il,JK) = AMAX1( ZSTCOV(il,JK), 0. ) 
290   continue
C 
c      IF ( KSCTOP .GT. NLEV .OR. JK .LT. KSCTOP ) GO TO 1412 
cc
c      do 300 il = 1, ni
cC 
cC           MODIFICATION OF SC COVER DUE TO ENTRAINMENT 
cC 
c         if ( DONESC(il) .le. 0. .and. FSCFLD .GT. 0. 
c     &         .AND. KSCFLD .EQ. JK .and. ZSTCOV(il,JK-1) .EQ. 0. ) then
cc***
c            ZSTCOV(il,JK) = ZSTCOV(il,JK) / ( 1.+ZSTCOV(il,JK)*FSCFLD )
c            XDIFSC(il) = 1.
c            DONESC(il) = 1.
c         endif
c300   continue
c1412  CONTINUE
C 
*vdir nodep
      do 310 il = 1, ni
C
         PRFLX(il,JK) =  PRFLX(il,JK)+PRCPST(il)-STSNOW(il)
         SWFLX(il,JK) =  SWFLX(il,JK)+STSNOW(il)
C
         logic = PRCPST(il) .ne. 0. .and. SUPSAT(il) .ne. 1.
c***
         COVVAP(il) = 0.
         if ( logic .and. jk .ne. 1 ) then
            COVVAP(il) = ( (JK-2.) * COVVAP(il) + (JK-1.)
     &                   * ZSTCOV(il,JK-1) ) / ( JK - 1. + 1.E-6 )
         endif
c***
C 
c         XCLEAR = 1. 
c***
         EVAPRI = 0.
         if ( logic ) then
c***
            XRO  = HPK(il,JK) / ( HRD * TM(il,JK) ) 
            XROV = XRO * HVTERM 
            XMIND = AMIN1( (DPK(il,JK) / (HG*XROV) ), ICLDDT2dt ) 
            XEVAP = 0.5*STPEVP * ( 1.-HUZ00(il)*REQCON(il)-HU(il,JK)
     &             *(1.-REQCON(il))) * XMIND * XROV
c***
            XCLEAR = ( 1. - ZSTCOV(il,JK) ) * COVVAP(il)
            XEVAP = XEVAP * XCLEAR
            XPSQ = SQRT( PRCPST(il) ) - XEVAP 
            XP = AMAX1( XPSQ, 0. )
            xp = xp * xp
c***
            EVAPRI = PRCPST(il) - XP
C     HEVAPR(JK) = EVAPRI/(ICLDDT*TWODT*XRO)
            HEVAPR(il,JK) = EVAPRI / ( XMIND * XROV )
         endif
c***
         PRCPST(il) = PRCPST(il) - EVAPRI
         STSNOW(il) = AMAX1( 0., (STSNOW(il)-EVAPRI) ) 
310   continue
C 
c      IF ( KSCTOP .GT. NLEV .OR. JK .LT. KSCTOP ) GO TO 1430 
cc
c      do 320 il = 1, ni
cC 
cC           EVAPORATION OF CLOUDWATER COMING UP FROM INVERSION CLOUD
cC           DUE TO ENTRAINMENT
cC 
c         if ( DONESC(il) .le. 0. .and. FSCFLD .GT. 0. 
c     &         .AND. JK .EQ. KSCFLD-1 .AND. ZSTCOV(il,JK) .EQ. 0. ) then
c
c            XCEVSC = 0.5 * ICLDDT2dt * FSCFKZ * DPK(il,JK+1) 
c     &              / DPK(il,JK)
c            XSCEV(il) = ( CWM(il,JK+1) * (1.-XCEVSC) + ICLDDT2dt 
c     &                  * HDCWAD(il,JK+1) ) / (1.+XCEVSC)
c
c            XSCEV(il) = XCEVSC * ( XSCEV(il)+CWM(il,JK+1) ) 
c     &                 * rICLDDT2dt
cc      XSCEV1 = XSCEV
c            HEVAC(il,JK) = HEVAC(il,JK) + XSCEV(il)
c            XSCEV(il) = XSCEV(il) * DPK(il,JK) / DPK(il,JK+1)
c         endif
c
c320   continue
c1430  CONTINUE
C 
C-----------------------------------------------------------------------
C 
C  15)      ACCESSION OF VAPOUR, AND FINAL SETTING OF HEATING/COOLING 
C           ------------------------------------------------------------
C 
      do 330 il = 1, ni
         if ( REQCON(il) .ne. 0. ) then

            HLDCP = HCPI * ELOFT(il,JK)
            XACCES = HDQAD(il,JK) - HU(il,JK) * HSQ(il,JK) 
     &              * HDTAD(il,JK) / HLDCP + QM(il,JK) * DLNPDT(il,JK)
C-----------------------------------------------------------------------
C           CALCULATION OF HEATING RATE COMPOSED OF RELEASE OF LATENT 
C           HEAT AND COOLING DUE TO EVAPORATION OF PRECIPITATION
C           ------------------------------------------------------------
            XN = 2. * ( 1.-HUZ00(il) ) * ( 1.-ZSTCOV(il,JK)+1.E-3 )
            XNPM = XN + CWM(il,JK) / ( ZSTCOV(il,JK) * HQSAT(il,JK)
     &                                  + 1.E-6 )
            XBNPM = XNPM - XN + ZSTCOV(il,JK) * XN 
            STHEAT(il,JK) = (XBNPM * XACCES - XN *HEVAPR(il,JK)) / 
     &                           ((1. + HU(il,JK) * HSQ(il,JK)) * XNPM)
         endif
C 
         if ( SUPSAT(il) .EQ. 0. .and.
     &        (STHEAT(il,JK) + CWM(il,JK)*rICLDDT2dt+ HDCWAD(il,JK)) 
     &         .LT. 0. ) then
            REQCON(il) = 0.
         endif
330   continue
C-----------------------------------------------------------------------
C           FINAL SETTING OF HEATING/COOLING AND CLOUD COVER
C           ------------------------------------------------------------
      do 340 il = 1, ni
         STHEAT(il,JK) = STHEAT(il,JK) * REQCON(il) - 
     &               (1.-REQCON(il)) * (HEVAC(il,JK) + HEVAPR(il,JK))
         ZSTCOV(il,JK) = ZSTCOV(il,JK) * REQCON(il)
340   continue
C 
C 
C           CHECK IF SUPER SATURATION MAY RESULT AND IF SO, ADJUST
C 
*vdir nodep
      do 350 il = 1, ni
c***
         QPREL = 0.                               !pour la vectorisation
         QSPREL = 0.                              !pour la vectorisation
c***
         if ( CUMASK(il,JK) .EQ. 1. ) then
            HLDCP = HCPI * ELOFT(il,JK)
c
            QPREL = QM(il,JK) + TWODT * ( HDQAD(il,JK)-STHEAT(il,JK) )
            TPREL = TM(il,JK) + TWODT * ( HDTAD(il,JK) + STHEAT(il,JK)
     &                                                         * HLDCP )
            QSPREL = HQSAT(il,JK) + HSQ(il,JK) * ( TPREL - TM(il,JK) )
     &              / HLDCP - QM(il,JK) * DLNPDT(il,JK) * TWODT
            QSPREL = AMAX1( QSPREL, 0.0 )
         endif

c***
         QINCR = 0.                               !pour la vectorisation
c***
         if ( CUMASK(il,JK) .EQ. 1. .and. QPREL .GT. QSPREL ) then
            QINCR = ( QPREL - QSPREL ) / ( TWODT * ( 1. + HSQ(il,JK) ) )
            STHEAT(il,JK) = STHEAT(il,JK) + CUMASK(il,JK) * QINCR
         endif
C 
         if ( CUMASK(il,JK) .EQ. 1. .and. QPREL .GT. QSPREL 
     &        .and. STHEAT(il,JK) .GT. 0. ) then
            REQCON(il) = 1.
            CWM(il,JK) = AMAX1( CWM(il,JK) - QINCR, 0. )
            ZSTCOV(il,JK) = 1.
         endif
350   continue
C 
      do 360 il = 1, ni
         if ( REQCON(il) .EQ. 0. 
     &          .AND. CWP(il,JK) * CUMASK(il,JK) .GT. 0. ) then
c
            STHEAT(il,JK) = STHEAT(il,JK) - CWP(il,JK) * rTWODT
            HDCWST(il,JK) = - CWP(il,JK) * rTWODT 
         endif
360   continue
C-----------------------------------------------------------------------
C 
C  16)      PREDICTION OF CLOUD WATER CONTENT, CW, BY AN IMPLICIT SCHEME
C           REQUIRING AN ITERATIVE PROCEDURE. 
C           NEWTON - RAPHSON ITERATIVE METHOD IS USED 
C           ------------------------------------------------------------
      do 370 il = 1, ni
         logic3 = REQCON(il) .ne. 0.
C 
C           CALCULATE FACTORS FOR COALESCENCE HFCOX, FREEZING HFREZX, 
C           REDUCTION OF HMRST AT LOW TEMPS, HFMRX
C           ------------------------------------------------------------
         if ( logic3 ) then
            IPRTCO(il,JK) = 3
            XKCOVB(il) = XKCOVB(il) + 1.
            COVBAR(il) = ( XKCOVB(il) * COVBAR(il) + ZSTCOV(il,JK) ) 
     &         / ( XKCOVB(il) + 1. ) 
         endif
C 
c***
C 
C           MODIFIED PROBABILITY OF ICE RESULTING FROM ICE IN PRECIP
C           COMING FROM ABOVE 
C***
         if ( logic3 .and. TM(il,JK) .LE. HT273 ) then
            temp1 = TM(il,JK)
            XDE = TABDE(temp1)
            XPRB = TABICE(temp1)
c            XPRB = max(((apri*(work(il,jk)-1.0))+1.0),0.0)
            xft = FMROFT(temp1)
         else
            XDE = 0.
            XPRB = 0.
            xft = 1.
         endif
C 
         if ( logic3 ) then
            PRBMOD(il) = XPRB + (1.-XPRB) * STSNOW(il) 
     &                  / ( PRCPST(il)+1.E-7 ) 
            BFMOD = PRBMOD(il) * (1.-XPRB) * XDE
C 
            STSNOW(il) = AMAX1( 0., STSNOW(il) )
            HFCOX = 1. + COALES * SQRT( PRCPST(il) + ACCK(il,JK) 
     &                                 * rICLDDTdt )
C 
            XFT = AMAX1( XFT, 3.E-2 )

            HFREZX = 1. + CBFEFF * BFMOD
            HFREZX = HFREZX * ( 1. + CFREEZ * (1.-XFT) / XFT )
C 
            XFRCOA(il) = HFCOX * HFREZX 
            HFMRX(il) = HMRST * XFT / HFCOX 
         endif
C 
C 
C-----------------------------------------------------------------------
C           SPECIAL TREATMENT FOR T.LT.236K 
C           ------------------------------- 
            if ( logic3 .and. TM(il,JK) .LT. 236. 
     &                                .AND. TM(il,JK) .GT. 232. ) then
               XFRCOA(il) = 0.25 * ( XFRCOA(il) * ( TM(il,JK) - 232. )
     &                              + 5. * ( 236. - TM(il,JK) ) )
            endif
c***
         if ( logic3 .and. TM(il,JK) .LE. 232. ) then
            XFRCOA(il) = 5.
         endif
C-----------------------------------------------------------------------
C           CALCULATE THE FIXED PART OF EQU AND NORMALIZE BY B * MR 
C           ------------------------------------------------------------
         if ( logic3 .and. XDIFSC(il).GT.0. ) then
            XSCDIF = XSCEV(il)
         else
            XSCDIF = 0.
         endif
C 
         if ( logic3 ) then
            XFIX(il) = ((cwp(il,jk)+CWM(il,JK)) +
     &                  ICLDDT2dt * ( HDCWAD(il,JK)
     &                             - XSCDIF + STHEAT(il,JK) ) )
     &                / ( 2. * ( ZSTCOV(il,JK)+1.E-2 ) * HFMRX(il) )
C 
C           THE CONVERSION RATE TIMES 2*DT
C 
            XCST(il) = 0.5 * HCST * XFRCOA(il) * ICLDDT2dt
C 
C           FIRST GUESS IS THE NORMALIZED M(T-DT) 
C 
            YM(il) = 0.5*(cwm(il,JK)+cwp(il,JK)) /
     &               ( ( ZSTCOV(il,JK)+1.E-2 ) * HFMRX(il) )
C 
C           TO MAKE M(T+DT)GE.0, THE FINAL SOLUTION 
C           OF YM HAS TO BE YM.GE.M(T-DT)/(2.*B*MR) 
C 
            YMMIN(il) = 0.5 * YM(il)
         endif
370   continue
C 
C           NEWTON - RAPHSON LOOP 
C           ------------------------------------------------------------
      DO 1630 JNR = 1,2 
      do 1630 il = 1, ni
         if ( REQCON(il) .ne. 0. ) then
            YMN = AMIN1( YM(il), 5. )
            XXP = EXP( -YMN * YMN ) 
            XHJ = 1.+ XCST(il) * ( 1. - XXP )
            XF = YM(il) * XHJ - XFIX(il)
            XFPRIM = XHJ + 2. * XCST(il) * YM(il) * YM(il) * XXP
            YM(il) = AMAX1( (YM(il)-XF/XFPRIM), YMMIN(il) )
         endif
c***
c                ca se converge au bout de 5 iterations
c      XERMAX = ABS(XF)
c      IF (XERMAX.LT.1.E-5) GO TO 1635 
c***
1630  CONTINUE
c1635 CONTINUE
c***
      do 380 il = 1, ni
         logic3 = REQCON(il) .ne. 0.
c
         if ( logic3 ) then
            XCWP1 = 2. * YM(il) * ( ZSTCOV(il,JK)+1.E-2 ) * HFMRX(il)
     &             - CWp(il,JK)
            XCWP1 = AMAX1( XCWP1, 0. ) 
            HDCWST(il,JK) = ( XCWP1 - CWM(il,JK) ) * rICLDDT2dt 
     &                                                   - HDCWAD(il,JK)
         endif
C 
         if ( logic3 .and. ABS( HDCWST(il,JK)) .LT. 1.E-16 ) then
            HDCWST(il,JK) = 0.
         endif
C 
C           RATE OF PRECIPITATION 
C           ------------------------------------------------------------
C 
         if ( logic3 ) then
C      
            XPRADD = DPK(il,JK) * rHG 
     &                 * AMAX1( (STHEAT(il,JK)-HDCWST(il,JK)), 0. )
            PRCPST(il) = PRCPST(il) + XPRADD 
            STSNOW(il) = AMIN1( (STSNOW(il) + PRBMOD(il) * XPRADD),
     &                          PRCPST(il) )
         endif
c***
         if ( logic3 .and. PRCPST(il) .EQ. 0. ) then
            COVBAR(il) = 0.
         endif
380   continue
C 
C           ADJUST THE HEATING FOR THE THETA EQU AND UPDATE 
C           THE MOISTURE TENDENCY 
C           ------------------------------------------------------------
 1660 CONTINUE
C 
      do 390 il = 1, ni
         HLDCP = HCPI * ELOFT(il,JK)
         HDTST(il,JK) = STHEAT(il,JK) * HLDCP
         HDQST(il,JK) = -STHEAT(il,JK) 
390   continue
C 
C           CALCULATE POSSIBLE MELTING
C 
c      DTMELT = 0. 
      do 400 il = 1, ni

         if ( TM(il,JK) .GT. HT273 .AND. STSNOW(il) .GT. 0. ) then
            XRO = HPK(il,JK) / ( HRD * TM(il,JK) )
            XROV = XRO * HVSNOW 
            XMIND = AMIN1( (DPK(il,JK) / (HG*XROV) ), ICLDDT2dt ) 
            DMELT = 0.5 * HKMELT * ( TM(il,JK)-HT273 ) * XMIND * XROV
            SQMELT = SQRT( STSNOW(il) ) - DMELT
            XMELT = AMAX1( SQMELT, 0. )
            xmelt = xmelt * xmelt
            DSNOW = STSNOW(il) - XMELT
            STSNOW(il) = XMELT
            DMELT = DSNOW / ( ICLDDT2dt * XRO )
            DTMELT = HDLDCP*DMELT
         else
            DTMELT = 0.
         endif

         HDTST(il,JK) = HDTST(il,JK) - DTMELT
400   continue
C 
C           ACCUMULATE EVAPORATED STRATIFORM PRECIPITATION AND
C           CLOUD WATER FOR TABLE OUTPUT
C           ------------------------------------------------------------
      do 410 il = 1, ni
         HEVRST(il) = HEVRST(il) + HEVAPR(il,JK) * DPK(il,JK) * rHG 
         HEVCST(il) = HEVCST(il) + HEVAC(il,JK) * DPK(il,JK) * rHG 
410   continue
C 
1670  CONTINUE
C 
C           END OF MAIN VERTICAL LOOP 
C-----------------------------------------------------------------------
C 
C  17)      ACCUMULATE STRATIFORM PRECIPITATION.
C           ------------------------------------------------------------
C           ------------------------------------------------------------
C 
C           RETURN CALCULATED TENDENCIES TO THE MAIN ARRAYS, INCLUDING
C           ADJUSTMENT OF THE HEATING FOR THE THETA EQU.
C           ------------------------------------------------------------
C 
C 
      do 420 il = 1, ni
*******************************
* small precip rates --> 0.0  *
*******************************
        if(prcpst(il) .lt. 1.0E-05) then
          zsrr(il) = 0.0
          zssr(il) = 0.0
        else
          ZSRR(IL) = PRCPST(il) - STSNOW(il)
          ZSSR(IL) = STSNOW(il)
        endif

420   continue

      DO 4000 JK = 1, NLEV
      do 4000 il = 1, ni
         TM    (il,JK) = HDTST (il,JK)
         QM    (il,JK) = HDQST (il,JK)
         CWM   (il,JK) = HDCWST(il,JK)
 4000 CONTINUE
C 
C-----------------------------------------------------------------------
C           END OF CONSTANT J-LINE LOOP 
C
      ENDIF
C
C
C           HERE ENDS THE CALCULATION OF STRATIFORM CONDENSATION
C***********************************************************************
C
      RETURN
      CONTAINS
#include "fmroft.cdk"
      END