!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
***S/P KTRSNT_MG
*
#include "phy_macros_f.h"
SUBROUTINE KTRSNT_MG ( CTT,CQT,ilab,CCF,QCKTL,QCKTI,DBDT, 1,22
+ TP,TM,QP,QM,GZM,TQDF,PSP,PSM,
+ SIGMA, TAU, KSHAL, NI, NK )
#include "impnone.cdk"
C
INTEGER NI,NK
REAL CTT(NI,NK),CQT(NI,NK)
INTEGER ilab(NI,NK)
REAL CCF(NI,NK),QCKTL(NI,NK),QCKTI(NI,NK),DBDT(NI),TQDF(NI,NK)
REAL TP
(NI,NK),TM(NI,NK),QP(NI,NK),QM(NI,NK),GZM(NI,NK)
REAL PSP(NI),PSM(NI),SIGMA(NI,NK)
REAL TAU
REAL KSHAL(NI)
*
*Authors
* Claude Girard and Gerard Pellerin 1995
*
*Revision
* 001 G.Pellerin (Nov 98) Added kuo65 option
* and change accession closure
* 002 C.Girard (Dec 98) Added detrainement
*
* 003 A-M.Leduc (March 2002) Automatic arrays
*
* 004 S.Belair, A-M. Leduc (nov 2002) added convective counter kshal
* as argument. ktrsnt--->ktrsnt2
* 005 G.Pellerin (Avril 2003) - CVMG... Replacements
* 006 G. Pellerin (Mai 03) - Conversion IBM
* - calls to vexp routine (from massvp4 library)
* - calls to optimized routine MFOQST
*
* 005 S.Belair (April 2003) Outputs for in-cloud water (QCKT)
*
* 006 S.Belair, A-M. Leduc (Mai 2003) calculation of ice fraction (ZFICE)
* and of saturation with respect to water and ice in
* temperature interval MAXFRZ and MINFRZ. Output
* QCKTL and QCKTI.
* 007 A-M.Leduc (Feb 2004) Add key KTICEFRAC. Key true by default.
* if set to false, zfice=0.0 and qcktl is total cloud water.
* 008 B. Bilodeau (Jul 2004) - Rename ktrsnt_mg
* 009 B. Bilodeau (May 2005) - QCKTL and QCKTI average values
* instead of in-cloud values
* 010 B. Bilodeau (May 2005) - New comdeck fintern
*
*Object
* To calculate the convective tendencies of T and Q
* using a scheme with a "Kuo65-type closure".
* Geleyn's method is used to obtain the cloud profiles.
*
*Arguments
*
* - Outputs -
* CTT convective temperature tendency
* CQT convective specific humidity tendency
* ilab flag array: an indication of convective activity
* CCF estimated cumulus cloud fraction
* QCKTL estimated cumulus cloud liquid water (average over grid)
* QCKTI estimated cumulus cloud solid water (average over grid)
* DBDT estimated averaged cloud fraction growth rate
* - Inputs -
* TP temperature at (t+dt)
* TM temperature at (t-dt)
* QP specific humidity at (t+dt)
* QM specific humidity at (t-dt)
* GZM geopotential
* TQDF tendance diffusive de couche limite (t+dt)
* PSP surface pressure at (t+dt)
* PSM surface pressure at (t-dt)
* SIGMA sigma levels
* TAU effective timestep (2*dt)
* NI horizontal dimension
* NK vertical dimension
*
*Notes
* The routine is divided into 5 parts:
* 1)allocation and position for work space
* 2)preliminary computations
* 3)cloud ascent and flagging
* 4)total moisture accession calculations
* 5)cloud heating and moistening (drying) calculations
*
**
LOGICAL LO
INTEGER IS,IKA,IKB,jk,jkm1,jl,MODP
REAL ZTVC,rgrav3,rcpd,rcpv
REAL ENTRM,TAUCU,DELTA2,DZETR,CHLS
REAL ZCOR,ZQSC,DETRN
REAL ZQCD,ZK,ZDH,temp1,temp2, temp3
REAL MAXFRZ, MINFRZ
*
**********************************************************
* AUTOMATIC ARRAYS
**********************************************************
*
AUTOMATIC ( ZPP , REAL , (NI,NK) )
AUTOMATIC ( ZDSG , REAL , (NI,NK) )
AUTOMATIC ( ZDP , REAL , (NI,NK) )
AUTOMATIC ( ZSDP , REAL , (NI,NK) )
AUTOMATIC ( ZQAC , REAL , (NI,NK) )
AUTOMATIC ( ZSQAC , REAL , (NI,NK) )
AUTOMATIC ( ZLDCP , REAL , (NI,NK) )
AUTOMATIC ( ZQSE , REAL , (NI,NK) )
AUTOMATIC ( ZTC , REAL , (NI,NK) )
AUTOMATIC ( ZQC , REAL , (NI,NK) )
AUTOMATIC ( ZTE , REAL , (NI,NK) )
AUTOMATIC ( ZQE , REAL , (NI,NK) )
AUTOMATIC ( ZTVE , REAL , (NI,NK) )
AUTOMATIC ( ZDQ , REAL , (NI,NK) )
AUTOMATIC ( ZSDQ , REAL , (NI,NK) )
AUTOMATIC ( ZDT , REAL , (NI,NK) )
AUTOMATIC ( ZSDH , REAL , (NI,NK) )
AUTOMATIC ( ZFICE , REAL , (NI,NK) )
AUTOMATIC ( DFMX , REAL , (NI,NK) )
AUTOMATIC ( ZCP , REAL , (NI ) )
AUTOMATIC ( ZLDCP0 , REAL , (NI ) )
AUTOMATIC ( CPR , REAL , (NI ) )
AUTOMATIC ( LO1 , LOGICAL , (NI ) )
*
*****************************************************
C
C* PHYSICAL CONSTANTS.
C -------- ----------
C
#include "consphy.cdk"
#include "dintern.cdk"
#include "fintern.cdk"
#include "options.cdk"
rcpd = 1./CPD
rgrav3 = 1./(GRAV*1.E3)
C typiquement entraine selon labda=1/GH (H=2km)
DZETR = 2.E+03
ENTRM = 1./(DZETR*GRAV)
TAUCU = 900.
DELTA2 = CPV/CPD - 1.
CHLS = CHLC + CHLF
C
C ------------------------------------------------------------------
C
C* 1. ALLOCATION AND POSITION FOR WORK SPACE.
C ---------- --- -------- --- ---- ------
C
C***
C
C METHOD.
C -------
C
C IN (3) A NEARLY ADIABATIC ASCENT IS ATTEMPTED FOR A CLOUD
C PARCEL STARTING FROM THE LOWEST MODEL LAYER. THIS CLOUD ASCENT
C IS COMPUTED IN TERMS OF TEMPERATURE AND SPECIFIC HUMIDITY.
C ENTRAINMENT IS SIMULATED VIA AN ENTRAINMENT PARAMETER.
C THE LAYERS ARE FLAGGED ACCORDING TO THE FOLLOWING CODE:
C 0 = STABLE OR INACTIVE LAYER,
C 1 = PART OF THE WELL MIXED BOUNDARY LAYER OR DRY UNSTABLE LAYER,
C 2 = MOIST UNSTABLE OR ACTIVE OR CLOUD LAYER.
C THE 1-FLAGS ARE RESET TO 0-FLAGS FOR THE NEXT SECTION.
C IN (4) THE INTEGRATED MOIST AND DRY ENTHALPY ACCESSIONS
C FOR EACH CLOUD LAYER ARE STORED INTO ALL THE CORRESPONDING
C LAYERS IF THE FIRST IS POSITIVE WHILE THE SECOND IS NEGATIVE,
C OTHERWISE, THE 2-FLAGS ARE ALSO RESET TO 0-FLAGS.
C IN (5) THE ACTUAL MODIFICATIONS OF TEMPERATURE AND SPECIFIC
C HUMIDITY ARE COMPUTED. A CLOUD-COVER VALUE IS ESTIMATED BY
C COMPARING THE TIME AT WHICH THE ENVIRONMENT WOULD REACH
C EQUILIBRIUM WITH THE CLOUD TO A PRESCRIBED CLOUD LIFE-TIME.
C
C ------------------------------------------------------------------
C
C* 2. PRELIMINARY COMPUTATIONS.
C ----------- -------------
*
*
* 2.0 FRACTION OF TOTAL CONDENSATE THAT IS SOLID (ZFICE)
*
* Calculation of ice fraction with linear
* variation between maxfrz and minfrz.
* DFMX is the value of the derivative w/r to T.
* Saturation is w/r to liquid for T > MAXFRZ and w/r
* to solid for T < MINFRZ and mixed phased in between.
*
MAXFRZ = 268.16
MINFRZ = 258.16
*
*
if(kticefrac)then
ZFICE(:,:) = ( MAXFRZ - TP
(:,:) ) / ( MAXFRZ - MINFRZ )
ZFICE(:,:) = MIN( MAX( ZFICE(:,:) , 0. ) , 1. )
*
WHERE( TP
(:,:) < MINFRZ .OR. TP
(:,:) > MAXFRZ )
DFMX(:,:) = 0.
ELSEWHERE
DFMX(:,:) = - 1. / ( MAXFRZ - MINFRZ )
END WHERE
else
ZFICE(:,:) = 0.0
endif
*
*
C
C* 2.1 ENVIRONMENTAL PROFILES AND PARAMETERS,
C* DRY AND MOIST ENTHALPY ACCESSIONS (divided by cp)
C* AND INITIALIZATIONS.
C
DO jl=1,NI
ZDSG(jl,1)=0.5*(SIGMA(jl,2)-SIGMA(jl,1))
ZDSG(jl,NK)=0.5*(1.-SIGMA(jl,NK-1))+0.5*(1.-SIGMA(jl,NK))
DBDT(jl) = 0.
if (kticefrac) then
ZLDCP0(jl) = ( CHLC + ZFICE(jl,NK)*CHLF ) * rCPD
else
LO = TP
(jl,NK).LT.TRPL
IF (LO)THEN
ZLDCP0(jl) = CHLS * rCPD
ELSE
ZLDCP0(jl) = CHLC * rCPD
ENDIF
endif
END DO
C
DO jk=2,NK-1
DO jl=1,NI
ZDSG(jl,jk)=0.5*(SIGMA(jl,jk+1)-SIGMA(jl,jk-1))
END DO
END DO
C
DO jk=1,NK
DO jl=1,NI
ZPP(jl,jk)=SIGMA(jl,jk)*PSP(jl)
ZDP(jl,jk)=ZDSG(jl,jk)*PSP(jl)
ZTE(jl,jk)=TP
(jl,jk)
if(kticefrac)then
ZQSE(jl,jk)=FQSMX
( ZTE(jl,jk), ZPP(jl,jk), ZFICE(jl,jk) )
else
ZQSE(jl,jk)=FOQST
( ZTE(jl,jk), ZPP(jl,jk) )
endif
ZQE(jl,jk)=amin1(ZQSE(jl,jk),QM(jl,jk))
ZTVE(jl,jk) = FOTVT
( ZTE(jl,jk), ZQE(jl,jk) )
if(kticefrac)then
ZLDCP(jl,jk) = ( CHLC + ZFICE(jl,jk)*CHLF )
+ / ( CPD*(1.+DELTA2*ZQE(jl,jk)) )
else
LO=ZTE(jl,jk).LT.TRPL
IF (LO) THEN
ZLDCP(jl,jk) = CHLS / ( CPD*(1.+DELTA2*ZQE(jl,jk)))
ELSE
ZLDCP(jl,jk) = CHLC / ( CPD*(1.+DELTA2*ZQE(jl,jk)) )
ENDIF
endif
C
ZQAC(jl,jk)=TQDF(jl,jk)*ZDP(jl,jk)
C
if ( ilab(jl,jk) .ge. 1 ) ZQAC(jl,jk)=-1.
ilab(jl,jk) = 0
CTT(jl,jk) = 0.0
CQT(jl,jk) = 0.0
CCF(jl,jk) = 0.0
END DO
END DO
C
C* 2.2 SPECIFY TC AND QC AT THE LOWEST LAYER TO START THE
C* CLOUD ASCENT. CHECK FOR POSITIVE ACCESSION
C* BETWEEN SURFACE AND CLOUD BASE.
C* ZQC=0 INDICATES STABLE CONDITIONS.
C
DO jl=1,NI
CPR(jl) = 0.
ZTC(jl,NK)=ZTE(jl,NK)
ZQC(jl,NK)=0.
LO=ZQAC(jl,NK).GT.0.
IF (LO) THEN
ZQC(jl,NK)=ZQE(jl,NK)
ilab(jl,NK) = 1
ENDIF
END DO
C
C ------------------------------------------------------------------
C
C* 3. CLOUD ASCENT AND FLAGGING.
C ----- ------ --- ---------
C
C* 3.1 CALCULATE TC AND QC AT UPPER LEVELS BY DRY ADIABATIC
C* LIFTING FOLLOWED BY LATENT HEAT RELEASE WHEN REQUIRED.
C* CONDENSATION CALCULATIONS ARE DONE WITH TWO ITERATIONS.
C***
DO jk=NK-1,1,-1
C***
DO jl=1,NI
ZCP(jl)=CPD*(1.+DELTA2*ZQC(jl,jk+1))
ZTC(jl,jk)=ZTC(jl,jk+1)+(GZM(jl,jk+1)-GZM(jl,jk))*
* (1./ZCP(jl)+ENTRM*MAX(0.,ZTC(jl,jk+1)-ZTE(jl,jk+1)))
ZQC(jl,jk)=ZQC(jl,jk+1)+(GZM(jl,jk+1)-GZM(jl,jk))*
* ( ENTRM*MAX(0.,ZQC(jl,jk+1)-ZQE(jl,jk+1)))
ZTVC = FOTVT
( ZTC(jl,jk), ZQC(jl,jk) )
LO= ZTVC.GT.ZTVE(jl,jk) .AND. ZQC(jl,jk).NE.0.
IF (LO) ilab(jl,jk) = 1
END DO
C
DO jl=1,NI
temp1 = ZTC(jl,jk)
temp2 = ZPP(jl,jk)
if(kticefrac)then
ZQSC=FQSMX
( temp1, temp2, ZFICE(jl,jk) )
temp3 = FDLESMX
( temp1, ZFICE(jl,jk), DFMX(jl,jk) )
ZCOR=ZLDCP(jl,jk)*FDQSMX
( ZQSC, temp3 )
else
ZQSC=FOQST
( temp1, temp2 )
ZCOR=ZLDCP(jl,jk)*FODQS
( ZQSC, temp1 )
endif
ZQCD=AMAX1(0.,(ZQC(jl,jk)-ZQSC)/(1.+ZCOR))
QCKTL(jl,jk) = ( 1.-ZFICE(jl,jk) ) * ZQCD
QCKTI(jl,jk) = ZFICE(jl,jk) * ZQCD
ZQC(jl,jk)=ZQC(jl,jk)-ZQCD
ZTC(jl,jk)=ZTC(jl,jk)+ZQCD*ZLDCP(jl,jk)
LO1(jl)=ZQCD.NE.0.
END DO
C
LO=.FALSE.
DO jl=1,NI
LO=LO.OR.LO1(jl)
END DO
C
IF (LO) THEN
DO jl=1,NI
temp1 = ZTC(jl,jk)
temp2 = ZPP(jl,jk)
if(kticefrac)then
ZQSC=FQSMX
( temp1, temp2, ZFICE(jl,jk) )
temp3 = FDLESMX
( temp1, ZFICE(jl,jk), DFMX(jl,jk) )
ZCOR=ZLDCP(jl,jk)*FDQSMX
( ZQSC, temp3 )
else
ZQSC=FOQST
( temp1, temp2 )
ZCOR=ZLDCP(jl,jk)*FODQS
( ZQSC, temp1 )
endif
ZQCD=(ZQC(jl,jk)-ZQSC)/(1.+ZCOR)
if (.not. LO1(jl)) ZQCD = 0.
QCKTL(jl,jk) = ( 1.-ZFICE(jl,jk) ) * ZQCD + QCKTL(jl,jk)
QCKTI(jl,jk) = ZFICE(jl,jk) * ZQCD + QCKTI(jl,jk)
ZQC(jl,jk)=ZQC(jl,jk)-ZQCD
ZTC(jl,jk)=ZTC(jl,jk)+ZQCD*ZLDCP(jl,jk)
END DO
ENDIF
C
DO jl=1,NI
temp1 = ZTC(jl,jk)
temp2 = ZQC(jl,jk)
ZTVC = FOTVT
( temp1, temp2 )
LO= ZTVC.GT.ZTVE(jl,jk) .AND. LO1(jl)
IF (LO) ilab(jl,jk) = 2
LO1(jl)=ilab(jl,jk).EQ.0
if (LO1(jl)) ZTC(jl,jk) = ZTE(jl,jk)
if (LO1(jl)) ZQC(jl,jk) = 0.
END DO
C
C* 3.2 IF NOT AT THE TOP CHECK FOR NEW LIFTING LEVEL, I.E.
C* MOISTURE ACCESSION IN A STABLE LAYER.
C***
IF (jk.NE.1) THEN
DO jl=1,NI
LO=LO1(jl).AND.(ZQAC(jl,jk).GT.0.)
if (LO) ZTC(jl,jk) = ZTE(jl,jk)
if (LO) ZQC(jl,jk) = ZQE(jl,jk)
END DO
ENDIF
C***
END DO
C***
C* 3.3 ilab=0 UNLESS ilab=2
C* IKA INDICATES THE HIGHEST TOP OF A CLOUD
C* (TO AVOID UNNECESSARY COMPUTATIONS LATER).
C
IKA=NK+1
C
DO jk=1,NK
C
DO jl=1,NI
LO=(ilab(jl,jk).EQ.1)
IF (LO) ilab(jl,jk) = 0
END DO
C
IF (IKA.EQ.NK+1) THEN
IS=0
DO jl=1,NI
IS=IS+ilab(jl,jk)
END DO
IF (IS.NE.0) IKA=jk
ENDIF
C
END DO
C***
IF (IKA.EQ.NK+1) GO TO 600
C***
C ------------------------------------------------------------------
C
C* 4. TOTAL MOISTURE ACCESSION
C ----- ------ ---------
C* TOTAL MOISTURE ACCESSION BE > 0
C* IKB IS AN UPDATE OF IKA.
C
DO jl=1,NI
ZSQAC(jl,NK) = 0.0
ZSDP(jl,NK) = 0.0
END DO
C
DO jk=NK-1,IKA,-1
DO jl=1,NI
LO=ilab(jl,jk).eq.2
if (LO) then
ZSQAC(jl,jk) = ZSQAC(jl,jk+1)+ZQAC(jl,jk)
ZSDP(jl,jk) = ZSDP(jl,jk+1)+ZDP(jl,jk)
else
ZSQAC(jl,jk) = 0.
ZSDP(jl,jk) = 0.
endif
END DO
END DO
C
IKB=NK+1
C
DO jk=IKA,NK-1
jkm1=max0(jk-1,1)
C
DO jl=1,NI
LO=(ilab(jl,jk).EQ.2).AND.(ilab(jl,jkm1).EQ.2)
if (LO) then
ZSQAC(jl,jk) = ZSQAC(jl,jkm1)
ZSDP(jl,jk) = ZSDP(jl,jkm1)
endif
LO = ZSQAC(jl,jk).gt.0. .and. ZSDP(jl,jk).gt.0.
IF (.not.LO) ilab(jl,jk) = 0
END DO
C
IF (IKB.EQ.NK+1) THEN
IS=0
DO jl=1,NI
IS=IS+ilab(jl,jk)
END DO
IF (IS.NE.0) IKB=jk
ENDIF
C
END DO
C***
IF (IKB.EQ.NK+1) GO TO 600
C***
C ------------------------------------------------------------------
C
C* 5. HEATING AND MOISTENING
C ----------------------
C
C* 5.1 COMPUTE THE TOTAL CLOUD-ENVIRONMENT ENTHALPY
C* DIFFERENCE IN CLOUD LAYERS.
C
DO jl=1,NI
ZSDH(jl,NK)=0.
ZSDQ(jl,NK)=0.
END DO
C
DO jk=NK-1,IKB,-1
DO jl=1,NI
temp1 = ZTC(jl,jk)
temp2 = ZQC(jl,jk)
ZTVC = FOTVT
( temp1, temp2 )
ZDQ(jl,jk) = (ZQSE(jl,jk)-ZQE(jl,jk))*ZDP(jl,jk)
ZDT(jl,jk) = (ZTVC-ZTVE(jl,jk))*ZDP(jl,jk)
ZDH = ZDT(jl,jk)+ZLDCP0(jl)*ZDQ(jl,jk)
LO=ilab(jl,jk).EQ.2
if (LO) then
ZSDH(jl,jk) = ZSDH(jl,jk+1)+ZDH
ZSDQ(jl,jk) = ZSDQ(jl,jk+1)+ZDQ(jl,jk)
else
ZSDH(jl,jk) = 0.
ZSDQ(jl,jk) = 0.
endif
END DO
END DO
C
DO jk=IKB+1,NK-1
DO jl=1,NI
LO=(ilab(jl,jk).EQ.2).AND.(ilab(jl,jk-1).EQ.2)
if (LO) then
ZSDH(jl,jk) = ZSDH(jl,jk-1)
ZSDQ(jl,jk) = ZSDQ(jl,jk-1)
endif
END DO
END DO
C
C* 5.2 COMPUTE CONVECTIVE HEATING AND MOISTENING.
C* ESTIMATE CONVECTIVE CLOUD FRACTION.
C
DO jk=IKB,NK-1
DO jl=1,NI
C
LO=ilab(jl,jk).eq.0
if (LO) then
ZQAC(jl,jk) = 0.
ZSQAC(jl,jk) = 0.
endif
LO=ZSDH(jl,jk).GT.0.
if (.not. LO) ZSDH(jl,jk) = -1.
LO=ZSDQ(jl,jk).GT.0.
if (.not. LO) ZSDQ(jl,jk) = -1.
C
ZK = ZLDCP0(jl)*ZSQAC(jl,jk)/ZSDH(jl,jk)
C
CQT(jl,jk) = (ZK*ZDQ(jl,jk)-ZQAC(jl,jk))/ZDP(jl,jk)
CTT(jl,jk) = (ZK*ZDT(jl,jk) )/ZDP(jl,jk)
C* ajouter du detrainement
DETRN=0.0
CQT(jl,jk) = CQT(jl,jk)+DETRN*CTT(jl,jk)/ZLDCP0(jl)
CTT(jl,jk) = CTT(jl,jk)-DETRN*CTT(jl,jk)
C
CPR(jl) = CPR(jl) + CTT(jl,jk)/ZLDCP0(jl)*ZDP(jl,jk)
C
DBDT(jl) = AMAX1(DBDT(jl),ZK)
C
END DO
END DO
C
DO jl=1,NI
CPR(jl) = max( 1.E-12, CPR(jl)*rGRAV3 )
END DO
call vslog (cpr,cpr,ni)
DO jl=1,NI
CPR(jl) = 2.5 + .125 * CPR(jl)
CPR(jl) = min( max( DBDT(jl) * TAUCU / ( 1. + DBDT(jl)*TAUCU ) ,
1 CPR(jl) ) , 0.8 )
END DO
C
DO jk=IKB,NK-1
DO jl=1,NI
LO=ilab(jl,jk).ne.2
if (LO) then
CCF(jl,jk) = 0.
else
CCF(jl,jk) = CPR(jl)
endif
!! CCF(jl,jk) = CCF(jl,jk)* min((SIGMA(jl,jk)/0.8)**2, 1.0 )
temp1=(SIGMA(jl,jk)*1.25)*(SIGMA(jl,jk)*1.25)
CCF(jl,jk) = CCF(jl,jk)* min(temp1, 1.0 )
END DO
END DO
*
*
* consistency check between the cloud fraction and cloud water
*
DO jk=1,NK
DO jl=1,NI
lo=CCF(jl,jk).GE.0.01
if ( .not. lo) QCKTL(jl,jk) = 0.
if ( .not. lo) QCKTI(jl,jk) = 0.
END DO
END DO
*
*
* tendency check
DO jk=1,NK
DO jl=1,NI
if (cqt(jl,jk).gt.1.E-10) KSHAL(jl)=1.
END DO
END DO
C***
C ------------------------------------------------------------------
C
C* 6. RETURN WORKSPACE.
C ------ ----------
600 CONTINUE
*
* conversion from in-cloud values to average grid value
DO jk=1,NK
DO jl=1,NI
QCKTL(jl,jk) = QCKTL(jl,jk) * CCF(jl,jk)
QCKTI(jl,jk) = QCKTI(jl,jk) * CCF(jl,jk)
END DO
END DO
*
C
*
RETURN
CONTAINS
#include "fintern90.cdk"
END