!-------------------------------------- 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 VKUOCON6
*
#include "phy_macros_f.h"
SUBROUTINE VKUOCON6 ( D, DSIZ, F, FSIZ, V, VSIZ, 1,72
$ G, GSIZ, GZM, SE,
$ DT, NI, N, NK,
$ KOUNT, J, ITASK )
*
use my_smom_mod
, only: mysmom_main
use my_dmom_mod
, only: mydmom_main
use my_tmom_mod
, only: mytmom_main
#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 scheme
* to radiation scheme
* 028 A. Methot (May 1999) - Rename MICROCND to MIXPHASE; pass GZ to MIXPHASE instead of DZ
* 029 A. Methot (Sep 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 (Jun 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)
* 047 L. Spacek (Aug 2004) - cloud clean-up ccs, fn, cck change to fxp, fbl, fdc
* respectively elimination of ISTCOND=2,6,7,8 ICONVEC=4
* new in busvol tqcx=zsqce qtde=zcqce*cdt1
* 048 B. Dugas (Dec 2005) - Save V(IWP) with SERXST/MZONXST for ICTS
* 049 L. Spacek (Jun 2006) - renaming qccond,qrcond,qgcond,qicond to
* "qcphytd,qrphytd,qgphytd,qiphytd"
* 050 J. Milbrandt (Dec 2006) - Added interface for optimized single-moment and double-moment versions
* of the Milbrandt-Yau microphysics scheme
* 051 J. Zhang (Feb 2006) - Either FXP=1. or FXP=0. for istcond 10 to 13 (bug correction)
* 052 B. Bilodeau (Feb 2007) - Output conv. and strat. tendencies
* 053 J. Milbrandt (Oct 2007) - Added interface for triple-moment and optimized experimental
* versions of M-Y scheme
* 054 J. Milbrandt (Nov 2007) - Added seperate sfc precip. rates for various precipitation types from M-Y
* 055 Yanjun Jiao (March 2008) - Interface for Bechtold-Kain-Fritsch scheme
* 056 J. Milbrandt (Apr 2008) - Added single/double-moment namelist switches for my_main_exp1 version of M-Y
* 057 J. Milbrandt, R.McTaggart-Cowan (May 2008) - Added use of modules for versions of M-Y scheme
* 058 A-M. Leduc (Jul 2008) - Move fneige from volatile to permanent
* 059 J. Milbrandt (Sep 2008) - removed division by 1000. (density of water) of sedimentation raters from M-Y
* scheme (this is now done directly in cloud scheme, which now passes the volume
* fluxs of melted precipitation [m3 m-2 s-1] for each category at the surface
* - removed rain, graupel, and hail (QR,QGP,QHP) from consideration of cloud fraction
* for M-Y scheme
* 060 A-M. Leduc (May 2009) - add arguments dlat, mg and ml to call kfcp4 which becomes kfcp5.
* 061 J. Milbrandt (Sep 2008) - my_full_mod becomes my_tmom_mod
*
*Object
* Interface to calls for all condensation processes, both implicit (convective)
* and explicit (grid-scale). Liquid and solid precipitation rates and liquid/solid
* water paths are also calculated.
*
*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 FCPARA2,INIFCP,KFCP4,BKFCALL
EXTERNAL INTWAT3
EXTERNAL SECAJUS,MIXPHASE6,EMICROG
EXTERNAL MY_MAIN_SM,MY_MAIN_DM,MY_MAIN_EXP1,MY_MAIN_EXP2,MY_MAIN_TMOM
*
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
real vis_lowest(n)
*
*
* 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 qntend(n,nk),qnm(n,nk),qnp(n,nk)
real qhtend(n,nk),qhm(n,nk),qhp(n,nk)
real nctend(n,nk),ncm(n,nk),ncp(n,nk)
real nrtend(n,nk),nrm(n,nk),nrp(n,nk)
real nitend(n,nk),nim(n,nk),nip(n,nk)
real ngtend(n,nk),ngm(n,nk),ngp(n,nk)
real nntend(n,nk),nnm(n,nk),nnp(n,nk)
real nhtend(n,nk),nhm(n,nk),nhp(n,nk)
real zrtend(n,nk),zrm(n,nk),zrp(n,nk)
real zitend(n,nk),zim(n,nk),zip(n,nk)
real zgtend(n,nk),zgm(n,nk),zgp(n,nk)
real zntend(n,nk),znm(n,nk),znp(n,nk)
real zhtend(n,nk),zhm(n,nk),zhp(n,nk)
real omegap2(n,nk),s(n,nk),dxdy2(ni)
real fice2(n,nk), fcpmask(ni)
real fcpoids(ni), sras(n,nk)
real a_tls_rn1(n), a_tls_rn2(n), a_tls_fr1(n)
real a_tls_fr2(n), a_tss_sn1(n), a_tss_sn2(n)
real a_tss_sn3(n), a_tss_pe1(n), a_tss_pe2(n)
real a_tss_pe2l(n), a_gzmoins6(n,nk), a_tss_snd(n)
real a_tls(n) , a_tss(n)
real a_dm_c(n,nk), a_dm_r(n,nk),a_dm_i(n,nk), a_dm_s(n,nk), a_dm_g(n,nk)
real a_dm_h(n,nk), a_zet(n,nk), a_zec(n) , a_slw(n,nk), a_vis(n,nk)
real a_vis1(n,nk), a_vis2(n,nk), a_vis3(n,nk), a_h_cb(n), a_h_ml(n), a_h_m2(n), a_h_sn(n)
real a_ss01(n,nk),a_ss02(n,nk),a_ss03(n,nk),a_ss04(n,nk),a_ss05(n,nk),a_ss06(n,nk)
real a_ss07(n,nk),a_ss08(n,nk),a_ss09(n,nk),a_ss10(n,nk),a_ss11(n,nk),a_ss12(n,nk)
real a_ss13(n,nk),a_ss14(n,nk),a_ss15(n,nk),a_ss16(n,nk),a_ss17(n,nk),a_ss18(n,nk)
real a_ss19(n,nk),a_ss20(n,nk)
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 ),
$ (iqntend , qntend ), (iqnm , qnm ), (iqnp , qnp ),
$ (iqhtend , qhtend ), (iqhm , qhm ), (iqhp , qhp ),
$ (inctend , nctend ), (incm , ncm ), (incp , ncp ),
$ (inrtend , nrtend ), (inrm , nrm ), (inrp , nrp ),
$ (initend , nitend ), (inim , nim ), (inip , nip ),
$ (inntend , nntend ), (innm , nnm ), (innp , nnp ),
$ (ingtend , ngtend ), (ingm , ngm ), (ingp , ngp ),
$ (inhtend , nhtend ), (inhm , nhm ), (inhp , nhp ),
$ (izrtend , zrtend ), (izrm , zrm ), (izrp , zrp ),
$ (izitend , zitend ), (izim , zim ), (izip , zip ),
$ (izntend , zntend ), (iznm , znm ), (iznp , znp ),
$ (izgtend , zgtend ), (izgm , zgm ), (izgp , zgp ),
$ (izhtend , zhtend ), (izhm , zhm ), (izhp , zhp ),
$ (ifice2 , fice2 ), (iomegap2, omegap2 ),
$ (is , s ), (idxdy2 , dxdy2 ),
$ (isras , sras ), (ifcpmask, fcpmask ),
$ (ifcpoids,fcpoids ),
$ (itls_rn1,a_tls_rn1 ), (itls_rn2,a_tls_rn2 ), (itls_fr1,a_tls_fr1 ),
$ (itls_fr2,a_tls_fr2 ), (itss_sn1,a_tss_sn1 ), (itss_sn2,a_tss_sn2 ),
$ (itss_sn3,a_tss_sn3 ), (itss_pe1,a_tss_pe1 ), (itss_pe2,a_tss_pe2 ),
$ (itls ,a_tls ), (itss ,a_tss ), (itss_snd,a_tss_snd ),
$ (itss_pe2l,a_tss_pe2l), (igzmoins6, a_gzmoins6 ),
$ (idm_c ,a_dm_c ), (idm_r,a_dm_r), (idm_i,a_dm_i),
$ (idm_s ,a_dm_s ), (idm_g,a_dm_g), (idm_h,a_dm_h),
$ (izet ,a_zet ), (izec ,a_zec ), (islw ,a_slw ),
$ (ivis ,a_vis ), (ivis1,a_vis1), (ivis2,a_vis2), (ivis3,a_vis3),
$ (ih_cb ,a_h_cb ), (ih_ml ,a_h_ml), (ih_m2, a_h_m2), (ih_sn ,a_h_sn),
$ (iss01, a_ss01), (iss02, a_ss02), (iss03, a_ss03), (iss04, a_ss04), (iss05, a_ss05),
$ (iss06, a_ss06), (iss07, a_ss07), (iss08, a_ss08), (iss09, a_ss09), (iss10, a_ss10),
$ (iss11, a_ss11), (iss12, a_ss12), (iss13, a_ss13), (iss14, a_ss14), (iss15, a_ss15),
$ (iss16, a_ss16), (iss17, a_ss17), (iss18, a_ss18), (iss19, a_ss19), (iss20, a_ss20)
*
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"
*
************************************************************************
* 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 ( QN0 , REAL , (NI,NK))
AUTOMATIC ( QH0 , REAL , (NI,NK))
AUTOMATIC ( NC0 , REAL , (NI,NK))
AUTOMATIC ( NR0 , REAL , (NI,NK))
AUTOMATIC ( NI0 , REAL , (NI,NK))
AUTOMATIC ( NN0 , REAL , (NI,NK))
AUTOMATIC ( NG0 , REAL , (NI,NK))
AUTOMATIC ( NH0 , REAL , (NI,NK))
AUTOMATIC ( ZR0 , REAL , (NI,NK))
AUTOMATIC ( ZI0 , REAL , (NI,NK))
AUTOMATIC ( ZS0 , REAL , (NI,NK))
AUTOMATIC ( ZG0 , REAL , (NI,NK))
AUTOMATIC ( ZH0 , 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(qcphytd))
iqcm = loc (d(qcmoins))
iqc = loc (d( qcplus))
iqrtend = loc (v(qrphytd))
iqrm = loc (d(qrmoins))
iqr = loc (d( qrplus))
iqitend = loc (v(qiphytd))
iqim = loc (d(qimoins))
iqi = loc (d( qiplus))
iqgtend = loc (v(qgphytd))
iqgm = loc (d(qgmoins))
iqgp = loc (d( qgplus))
iqntend = loc (v(qnphytd))
iqnm = loc (d(qnmoins))
iqnp = loc (d( qnplus))
iqhtend = loc (v(qhphytd))
iqhm = loc (d(qhmoins))
iqhp = loc (d( qhplus))
inctend = loc (v(ncphytd))
incm = loc (d(ncmoins))
incp = loc (d( ncplus))
inrtend = loc (v(nrphytd))
inrm = loc (d(nrmoins))
inrp = loc (d( nrplus))
initend = loc (v(niphytd))
inim = loc (d(nimoins))
inip = loc (d( niplus))
inntend = loc (v(nnphytd))
innm = loc (d(nnmoins))
innp = loc (d( nnplus))
ingtend = loc (v(ngphytd))
ingm = loc (d(ngmoins))
ingp = loc (d( ngplus))
inhtend = loc (v(nhphytd))
inhm = loc (d(nhmoins))
inhp = loc (d( nhplus))
izrtend = loc (v(zrphytd))
izrm = loc (d(zrmoins))
izrp = loc (d( zrplus))
izitend = loc (v(ziphytd))
izim = loc (d(zimoins))
izip = loc (d( ziplus))
izntend = loc (v(znphytd))
iznm = loc (d(znmoins))
iznp = loc (d( znplus))
izgtend = loc (v(zgphytd))
izgm = loc (d(zgmoins))
izgp = loc (d( zgplus))
izhtend = loc (v(zhphytd))
izhm = loc (d(zhmoins))
izhp = loc (d( zhplus))
ifice2 = loc (f( fice))
iomegap2= loc (d( omegap))
is = loc (d( sigw))
isras = loc (d( sigm))
idxdy2 = loc (d( dxdy))
ifcpmask= loc (d( fcpmsk))
ifcpoids= loc (d( fcpoid))
itls_rn1= loc (f(tls_rn1))
itls_rn2= loc (f(tls_rn2))
itls_fr1= loc (f(tls_fr1))
itls_fr2= loc (f(tls_fr2))
itss_sn1= loc (f(tss_sn1))
itss_sn2= loc (f(tss_sn2))
itss_sn3= loc (f(tss_sn3))
itss_pe1= loc (f(tss_pe1))
itss_pe2= loc (f(tss_pe2))
itss_pe2l= loc (f(tss_pe2l))
itss_snd = loc (f(tss_snd))
igzmoins6= loc (d(gzmoins6))
itls = loc (f(tls))
itss = loc (f(tss))
idm_c = loc (v(dm_c))
idm_r = loc (v(dm_r))
idm_i = loc (v(dm_i))
idm_s = loc (v(dm_s))
idm_g = loc (v(dm_g))
idm_h = loc (v(dm_h))
izet = loc (v(zet ))
izec = loc (v(zec ))
islw = loc (v(slw ))
ivis = loc (v(vis ))
ivis1 = loc (v(vis1))
ivis2 = loc (v(vis2))
ivis3 = loc (v(vis3))
ih_cb = loc (v(h_cb))
ih_ml = loc (v(h_ml))
ih_m2 = loc (v(h_m2))
ih_sn = loc (v(h_sn))
iss01 = loc (v(ss01))
iss02 = loc (v(ss02))
iss03 = loc (v(ss03))
iss04 = loc (v(ss04))
iss05 = loc (v(ss05))
iss06 = loc (v(ss06))
iss07 = loc (v(ss07))
iss08 = loc (v(ss08))
iss09 = loc (v(ss09))
iss10 = loc (v(ss10))
iss11 = loc (v(ss11))
iss12 = loc (v(ss12))
iss13 = loc (v(ss13))
iss14 = loc (v(ss14))
iss15 = loc (v(ss15))
iss16 = loc (v(ss16))
iss17 = loc (v(ss17))
iss18 = loc (v(ss18))
iss19 = loc (v(ss19))
iss20 = loc (v(ss20))
*
*
* 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
QN0 (I,1) = 0.0
QH0 (I,1) = 0.0
NC0 (I,1) = 0.0
NR0 (I,1) = 0.0
NI0 (I,1) = 0.0
NG0 (I,1) = 0.0
NN0 (I,1) = 0.0
NH0 (I,1) = 0.0
ZR0 (I,1) = 0.0
ZI0 (I,1) = 0.0
ZG0 (I,1) = 0.0
ZS0 (I,1) = 0.0
ZH0 (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. 3 ) 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.9 .AND. ISTCOND.LE.14) THEN !Kong-Yau (9); Milbrandt-Yau (10-14)
* CALCUL DE LA VITESSE VERTICALE "SIGMA DOT":
SIGD(I,K) = OMEGAP2(I,K) / PS(I)
QR0 (I,K) = QR(I,K)
QI0 (I,K) = QI(I,K)
QG0 (I,K) = QGP(I,K)
ENDIF
IF ( ISTCOND.GE.10 .AND. ISTCOND.LE.14) THEN !M-Y (all)
QN0 (I,K) = QNP(I,K)
QH0 (I,K) = QHP(I,K)
ENDIF
*
IF ( ISTCOND.GE.11 .AND. ISTCOND.LE.14) THEN !M-Y (dm+)
NC0 (I,K) = NCP(I,K)
NR0 (I,K) = NRP(I,K)
NI0 (I,K) = NIP(I,K)
NN0 (I,K) = NNP(I,K)
NG0 (I,K) = NGP(I,K)
NH0 (I,K) = NHP(I,K)
ENDIF
*
IF ( ISTCOND.EQ.14) THEN !M-Y (tmom)
ZR0 (I,K) = ZRP(I,K)
ZI0 (I,K) = ZIP(I,K)
ZS0 (I,K) = ZNP(I,K)
ZG0 (I,K) = ZGP(I,K)
ZH0 (I,K) = ZHP(I,K)
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.OR.ICONVEC.EQ.13) 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(FDC),OMEGAP2,zfm,
$ T,TTM,Q,TQM,
$ GZM,PS,PSM,V(KCL),
$ S, CDT1, NI, NI, NK,
$ DBGKUO, SATUCO)
*
*
IF(ISTCOND.GE.3) 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(fbl +ik) = F(FDC+IK)
else
* nuages de convection restreinte
F(FDC+ik) = f(FBL+ik)*0.5
endif
end do
end do
*
*
ELSE IF (ICONVEC.EQ.6 .or. ICONVEC.EQ.12) THEN
*
* KAIN-FRITSCH
* ------------
*
CALL KFCP5
( 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(AREAUP),CCFCP,F(DMFKFC),
+ F(PEFFKFC),F(UMFKFC),F(ZBASEKFC),
+ F(ZTOPKFC),F(WUMAXKFC),
+ F(QLDI),F(QSDI),
+ F(RLIQ_INT),F(RICE_INT),
+ F(KFCRF),F(KFCSF),
+ FCPMASK,KOUNT,F(DLAT),F(MG),F(ML) )
*
*
ELSE IF ((ICONVEC == 13) .or. (ISHLCVT(2) == 3)) THEN
*
* BECHTOLD-KAIN-FRITSCH
* ---------------------
*
CALL BKFCALL
(NI,NK,CDT1,KOUNT,(ICONVEC == 13),
+ (ISHLCVT(2) == 3),F(FCPFLG),
+ PSB,T,Q,UU,VV,SCR3,
+ F(TFCP),F(HUFCP),KFCMOM,F(UFCP),
+ F(VFCP),F(QCKFC),F(QRKFC),
+ AVERT,DXDY2,F(RCKFC),d(gzmoins6),
+ F(CAPEKFC),F(AREAUP),CCFCP,
+ F(DMFKFC),F(PEFFKFC),F(UMFKFC),
+ F(ZBASEKFC), F(ZTOPKFC),
+ F(WUMAXKFC),F(QLDI),F(QSDI),
+ F(RLIQ_INT),F(RICE_INT),
+ F(KFCRF),F(KFCSF),
+ V(WSTAR),
+ V(TSHAL),V(HUSHAL),V(QLSC),V(QSSC),F(FSC))
+
*
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(FDC),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(fdc+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(fdc+(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(fdc+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(fdc+(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(FDC), 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=FBL+(kctp-1)*ni
cckr=FDC+(kctp-1)*ni
*
IF(D(SIGT)<0)THEN
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))
ELSE
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,sras(1,kctp),
+ cdt1,j,cpd,grav,chlc,cappa,
+ nkr,ni,ni*(nkr+1))
ENDIF
*
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(AREAUP),
$ 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 (FDC+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.OR.ICONVEC.EQ.13) THEN
IF(ISTCOND.GE.3) 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 (FDC+IK)= (1. - FCPOIDS(I)) * F (FDC+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.OR.ICONVEC.EQ.13) 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
*
IF (KFCMOM) THEN
DO K=1,NK
*VDIR NODEP
DO I=1,N
UU(I,K) = UU(I,K) + CDT1 * f(ufcp + (k-1)*n+i-1 )
VV(I,K) = VV(I,K) + CDT1 * f(vfcp + (k-1)*n+i-1 )
END DO
END DO
ENDIF
*
*******************************************************************
* GRID-SCALE CONDENSATION *
* ----------------------- *
*******************************************************************
*
IF(ISTCOND.EQ.1) THEN
*
* SCHEME SIMPLIFIE
* ----------------
*
DO K=1,NK
*VDIR NODEP
DO I=1,N
IK = (K-1)*NI+I-1
F(FDC+IK) = F(FBL+IK)
END DO
END DO
*
CALL CONDS
(ZSTE,ZSQE,F(TLS),F(TSS),
+ F(FBL),T,Q,PS,V(KCL),
+ S, CDT1, NI, NI, NK,
+ DBGCOND, SATUCO)
*
*
ENDIF
*
*
IF (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), F(FXP), F(FDC), 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), F(FXP),
$ ZCTER, ZCQER, ZCQCER, TLCR , TSCR , F(FDC),
$ 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 (FDC+IK) = (1. - FCPOIDS(I)) * F(FDC+IK) +
$ FCPOIDS(I) * CCFCP(I,K)
*
END DO
*
END DO
*
ELSE IF (ICONVEC.EQ.5.OR.ICONVEC.EQ.6.OR.ICONVEC.EQ.13) THEN
*
DO K=1,NK
*VDIR NODEP
DO I=1,NI
IK = (K-1)*NI+I-1
F (FDC+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
IF(IPCPTYPE.LE.1)THEN
CALL MIXPHASE6
(T,Q,QC,S,PS,FICE2,F(TLS),F(TSS),V(FNEIGE),
$ V(FIP),ZSTE,ZSQE,ZSQCE,d(gzmoins6),F(FXP),
$ V(FLAGMXP),F(SELIMW),F(SELIMI),
$ F(VLMAX),F(VSMAX),COMPLIM,KOUNT,
$ CDT1,NI,NK)
ELSEIF(IPCPTYPE.EQ.2)THEN
CALL MIXPHASE6
(T,Q,QC,S,PS,FICE2,F(TLS),F(TSS),F(FNEIGE),
$ F(FIP),ZSTE,ZSQE,ZSQCE,d(gzmoins6),F(FXP),
$ V(FLAGMXP),F(SELIMW),F(SELIMI),
$ F(VLMAX),F(VSMAX),COMPLIM,KOUNT,
$ CDT1,NI,NK)
ENDIF
*
* ------------------------------------------------------
ELSE IF(istcond.eq.9) THEN
* EXPLICIT SCHEME (2) FOR MIXED-PHASE (Kong and Yau, 1997)
* (mixing ratios for four hydrometeor categories explicity predicted)
! official library version:
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)
! v_3.2.7 version:
! CALL EMICROG(OMEGAP2,T,Q,QC,QR,QI,QGP,PS,TTM,TQM,QCM,QRM,QIM,
! $ QGM,PSM,SATUCO,S,F(TLS),F(TSS),V(ZET),V(ZEC),ZSTE,ZSQE,ZSQCE,
! $ ZSQRE,QITEND,QGTEND,CDT1,NI,N,NK,J,KOUNT)
*
* ------------------------------------------------------
ELSE IF(ISTCOND.eq.10) THEN
* Single-moment version of Milbrandt-Yau (2005) multimoment scheme
* (mixing ratios for six hydrometeor categories explicity predicted)
call mysmom_main
(OMEGAP2,T,Q,QC,QR,QI,QNP,QGP,QHP,PS,TTM,TQM,QCM,QRM,QIM,
+ QNM,QGM,QHM,PSM,S,a_tls_rn1,a_tls_rn2,a_tls_fr1,a_tls_fr2,
+ a_tss_sn1,a_tss_sn2,a_tss_sn3,a_tss_pe1,a_tss_pe2,a_tss_pe2l,a_tss_snd,
+ a_gzmoins6,ZSTE,ZSQE,ZSQCE,ZSQRE,QITEND,QNTEND,QGTEND,QHTEND,
+ CDT1,NI,N,NK,J,KOUNT,my_ccntype,my_dzsedi,a_dm_c,a_dm_r,a_dm_i,
+ a_dm_s,a_dm_g,a_dm_h,a_zet,a_zec,a_slw,a_vis,a_vis1,a_vis2,a_vis3,
+ a_h_cb,a_h_ml,a_h_m2,a_h_sn)
*
* ------------------------------------------------------
ELSE IF(ISTCOND.eq.12) THEN
* Experimental version 1 of M-Y scheme (w/ switches for single/double-moment for each category)
call mydmom_main
(OMEGAP2,T,Q,QC,QR,QI,QNP,QGP,QHP,NCP,NRP,NIP,NNP,NGP,NHP,
+ PS,TTM,TQM,QCM,QRM,QIM,QNM,QGM,QHM,NCM,NRM,NIM,NNM,NGM,NHM,PSM,S,
+ a_tls_rn1,a_tls_rn2,a_tls_fr1,a_tls_fr2,a_tss_sn1,a_tss_sn2,a_tss_sn3,a_tss_pe1,
+ a_tss_pe2,a_tss_pe2l,a_tss_snd,a_gzmoins6,ZSTE,ZSQE,ZSQCE,ZSQRE,QITEND,QNTEND,QGTEND,
+ QHTEND,NCTEND,NRTEND,NITEND,NNTEND,NGTEND,NHTEND,CDT1,NI,N,NK,J,KOUNT,my_ccntype,
+ my_diagON,my_sediON,my_warmON,my_rainON,my_iceON,my_snowON,my_initN,my_dblMom_c,
+ my_dblMom_r,my_dblMom_i,my_dblMom_s,my_dblMom_g,my_dblMom_h,a_dm_c,a_dm_r,a_dm_i,a_dm_s,
+ a_dm_g,a_dm_h,a_zet,a_zec,a_slw,a_vis,a_vis1,a_vis2,a_vis3,a_h_cb,a_h_ml,a_h_m2,a_h_sn,
+ a_ss01,a_ss02,a_ss03,a_ss04,a_ss05,a_ss06,a_ss07,a_ss08,a_ss09,a_ss10,
+ a_ss11,a_ss12,a_ss13,a_ss14,a_ss15,a_ss16,a_ss17,a_ss18,a_ss19,a_ss20)
*
* ------------------------------------------------------
ELSE IF(ISTCOND.EQ.14) THEN
* Full version of M-Y scheme (includes options for single-moment,
* double-moment-fixed-dispersion, double-moment diagnostic-
* dispersion,and triple-moment [specified by 'my_full_version']
call mytmom_main
(OMEGAP2,T,Q,QC,QR,QI,QNP,QGP,QHP,
+ NCP,NRP,NIP,NNP,NGP,NHP,ZRP,ZIP,ZNP,ZGP,ZHP,PS,TTM,TQM,
+ QCM,QRM,QIM,QNM,QGM,QHM,NCM,NRM,NIM,NNM,NGM,NHM,
+ ZRM,ZIM,ZNM,ZGM,ZHM,PSM,S,a_tls,a_tss,
+ a_gzmoins6,ZSTE,ZSQE,ZSQCE,ZSQRE,QITEND,QNTEND,
+ QGTEND,QHTEND,NCTEND,NRTEND,NITEND,NNTEND,
+ NGTEND,NHTEND,ZRTEND,ZITEND,ZNTEND,ZGTEND,
+ ZHTEND,CDT1,NI,N,NK,J,KOUNT,my_full_version,
+ a_ss01,a_ss02,a_ss03,a_ss04,a_ss05,a_ss06,a_ss07,a_ss08,a_ss09,a_ss10,
+ a_ss11,a_ss12,a_ss13,a_ss14,a_ss15,a_ss16,a_ss17,a_ss18,a_ss19,a_ss20)
* ------------------------------------------------------
ENDIF
*VDIR NODEP
DO I=1,NI
*
* Convert to liquid-equivalent precipitation rates:
* (divide by density of water [1000 kg m-3])
*
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.9 .and. istcond.le.14) THEN
do K=1,NK
do I=1,N
QR(I,K) = QR(I,K) + CDT1 * ZSQRE(I,K)
QI(I,K) = QI(I,K) + CDT1 * QITEND(I,K)
QGP(I,K) = QGP(I,K) + CDT1 * QGTEND(I,K)
enddo
enddo
ENDIF
*
IF (istcond.eq.10 .and. istcond.le.14) THEN
do K=1,NK
do I=1,N
QNP(I,K) = QNP(I,K) + CDT1 * QNTEND(I,K)
QHP(I,K) = QHP(I,K) + CDT1 * QHTEND(I,K)
enddo
enddo
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.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
F(FXP+IK)= 1.
ELSE
F(FXP+IK)= 0.
ENDIF
liquid(i,k) = QC(I,K)+QR(I,K)
solid(i,k) = QI(I,K)+QGP(I,K)
*
END DO
END DO
ELSE IF (ISTCOND.GE.10 .AND.ISTCOND.LE.14) 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)+QI(I,K)+QNP(I,K)) .GT. airdenm1*1.E-5) THEN
F(FXP+IK)= 1.
ELSE
F(FXP+IK)= 0.
ENDIF
!Arrays 'liquid' and 'solid' are passed to s/r INTWAT3 (below) and used
!for diagnostic calculations only.
!Computaion of LWC and IWC used by radiation code is done in s/r PREP_CW.
liquid(i,k) = QC(i,k)
solid(i,k) = QI(i,k)+QNP(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
*
DO K=1,NK
*VDIR NODEP
DO I=1,NI
IK = (K-1)*NI+I-1
V(TQCX+IK)=ZSQCE(I,K)
V(QTDE+IK)=ZCQCE(I,K)*CDT1
ENDDO
ENDDO
*
*******************************************************************
* 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)
*
* SORTIE DES TENDANCES
IK = (K-1)*NI+I-1
V(CTE+IK) = ZCTE(I,K)
V(CQE+IK) = ZCQE(I,K)
V(STE+IK) = ZSTE(I,K)
V(SQE+IK) = ZSQE(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
(F(FXP) ,'NS', J, NI, 0., 1., -1 )
CALL MZONXST(F(FXP) ,'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)
CALL SERXST
(V(IWP), 'II', J, NI, 0., 1., -1 )
CALL MZONXST(V(IWP), 'II', 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(FBL) ,'NC', J, NI, 0.0 , 1., -1 )
CALL MZONXST (F(FBL) ,'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 ((ISTCOND.GE.10).AND.(ISTCOND.LE.12)) THEN
CALL SERXST
(F(TLS_RN1), 'RRN1', J, NI, 0., 1., -1 )
CALL MZONXST(F(TLS_RN1), 'RRN1', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TLS_RN2), 'RRN2', J, NI, 0., 1., -1 )
CALL MZONXST(F(TLS_RN2), 'RRN2', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TLS_FR1), 'RFR1', J, NI, 0., 1., -1 )
CALL MZONXST(F(TLS_FR1), 'RFR1', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TLS_FR2), 'RFR2', J, NI, 0., 1., -1 )
CALL MZONXST(F(TLS_FR2), 'RFR2', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_SN1), 'RSN1', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_SN1), 'RSN1', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_SN2), 'RSN2', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_SN2), 'RSN2', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_SN3), 'RSN3', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_SN3), 'RSN3', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_PE1), 'RPE1', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_PE1), 'RPE1', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_PE2), 'RPE2', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_PE2), 'RPE2', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_PE2L), 'RPEL', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_PE2L), 'RPEL', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSS_SND), 'RSND', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSS_SND), 'RSND', J, NI, HEURSER, 1., -1, ICPU)
! L'appel des series temporelles pour RS2L se fait dans calcdiag.ftn
CALL SERXST
(F(TLS_RN1), 'RRN1', J, NI, 0., 1., -1 )
CALL MZONXST(F(TLS_RN1), 'RRN1', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TLS_RN2), 'RRN2', J, NI, 0., 1., -1 )
CALL MZONXST(F(TLS_RN2), 'RRN2', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(TSRAD), 'TG', J, NI, 0., 1., -1 )
CALL MZONXST(F(TSRAD), 'TG', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(V(H_CB), 'H_CB', J, NI, 0., 1., -1 )
CALL MZONXST(V(H_CB), 'H_CB', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(V(H_ML), 'H_ML', J, NI, 0., 1., -1 )
CALL MZONXST(V(H_ML), 'H_ML', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(V(H_M2), 'H_M2', J, NI, 0., 1., -1 )
CALL MZONXST(V(H_M2), 'H_M2', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(V(H_SN), 'H_SN', J, NI, 0., 1., -1 )
CALL MZONXST(V(H_SN), 'H_SN', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(SNODEN), 'DN', J, NI, 0., 1., -1 )
CALL MZONXST(F(SNODEN), 'DN', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(SNODP), 'SD', J, NI, 0., 1., -1 )
CALL MZONXST(F(SNODP), 'SD', J, NI, HEURSER, 1., -1, ICPU)
CALL SERXST
(F(SNOAL), 'I6', J, NI, 0., 1., -1 )
CALL MZONXST(F(SNOAL), 'I6', J, NI, HEURSER, 1., -1, ICPU)
* Prepare only lowest-level component visibilities for series and zonal avg
do i=1,n
vis_lowest(i) = v(vis+(nk-1)*ni+i-1)
enddo
CALL SERXST
(vis_lowest, 'VIS' , J, NI, 0., 1., -1 )
CALL MZONXST(vis_lowest, 'VIS' , J, NI, HEURSER, 1., -1, ICPU)
do i=1,n
vis_lowest(i) = v(vis1+(nk-1)*ni+i-1)
enddo
CALL SERXST
(vis_lowest, 'VIS1', J, NI, 0., 1., -1 )
CALL MZONXST(vis_lowest, 'VIS1', J, NI, HEURSER, 1., -1, ICPU)
do i=1,n
vis_lowest(i) = v(vis2+(nk-1)*ni+i-1)
enddo
CALL SERXST
(vis_lowest, 'VIS2', J, NI, 0., 1., -1 )
CALL MZONXST(vis_lowest, 'VIS2', J, NI, HEURSER, 1., -1, ICPU)
do i=1,n
vis_lowest(i) = v(vis3+(nk-1)*ni+i-1)
enddo
CALL SERXST
(vis_lowest, 'VIS3', J, NI, 0., 1., -1 )
CALL MZONXST(vis_lowest, 'VIS3', J, NI, HEURSER, 1., -1, ICPU)
*
ENDIF
************************************************************************
************************************************************************
*
! Note - precipitation rates are not zeroed at step 0 for M-Y scheme
IF (KOUNT.EQ.0 .and. ISTCOND.LE.9) 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