My Project
 All Classes Files Functions Variables Macros
conemav.F
Go to the documentation of this file.
1 !
2 ! $Header$
3 !
4  SUBROUTINE conemav (dtime,paprs,pplay,t,q,u,v,tra,ntra,
5  . work1,work2,d_t,d_q,d_u,d_v,d_tra,
6  . rain, snow, kbas, ktop,
7  . upwd,dnwd,dnwdbis,ma,cape,tvp,iflag,
8  . pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr)
9 
10 c
11  USE dimphy
12  USE infotrac, ONLY : nbtr
13  IMPLICIT none
14 c======================================================================
15 c Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
16 c Objet: schema de convection de Emanuel (1991) interface
17 c======================================================================
18 c Arguments:
19 c dtime--input-R-pas d'integration (s)
20 c s-------input-R-la valeur "s" pour chaque couche
21 c sigs----input-R-la valeur "sigma" de chaque couche
22 c sig-----input-R-la valeur de "sigma" pour chaque niveau
23 c psolpa--input-R-la pression au sol (en Pa)
24 C pskapa--input-R-exponentiel kappa de psolpa
25 c h-------input-R-enthalpie potentielle (Cp*T/P**kappa)
26 c q-------input-R-vapeur d'eau (en kg/kg)
27 c
28 c work*: input et output: deux variables de travail,
29 c on peut les mettre a 0 au debut
30 c ALE-----input-R-energie disponible pour soulevement
31 c
32 C d_h-----output-R-increment de l'enthalpie potentielle (h)
33 c d_q-----output-R-increment de la vapeur d'eau
34 c rain----output-R-la pluie (mm/s)
35 c snow----output-R-la neige (mm/s)
36 c upwd----output-R-saturated updraft mass flux (kg/m**2/s)
37 c dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)
38 c dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)
39 c Cape----output-R-CAPE (J/kg)
40 c Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee
41 c adiabatiquement a partir du niveau 1 (K)
42 c deltapb-output-R-distance entre LCL et base de la colonne (<0 ; Pa)
43 c Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de la glace
44 c======================================================================
45 c
46 #include "dimensions.h"
47 c
48 c
49  REAL dtime, paprs(klon,klev+1),pplay(klon,klev)
50  REAL t(klon,klev),q(klon,klev),u(klon,klev),v(klon,klev)
51  REAL tra(klon,klev,nbtr)
52  INTEGER ntra
53  REAL work1(klon,klev),work2(klon,klev)
54 c
55  REAL d_t(klon,klev),d_q(klon,klev),d_u(klon,klev),d_v(klon,klev)
56  REAL d_tra(klon,klev,nbtr)
57  REAL rain(klon),snow(klon)
58 c
59  INTEGER kbas(klon),ktop(klon)
60  REAL em_ph(klon,klev+1),em_p(klon,klev)
61  REAL upwd(klon,klev),dnwd(klon,klev),dnwdbis(klon,klev)
62  REAL ma(klon,klev),cape(klon),tvp(klon,klev)
63  INTEGER iflag(klon)
64  REAL rflag(klon)
65  REAL pbase(klon),bbase(klon)
66  REAL dtvpdt1(klon,klev),dtvpdq1(klon,klev)
67  REAL dplcldt(klon),dplcldr(klon)
68 c
69  REAL zx_t,zdelta,zx_qs,zcor
70 c
71  INTEGER noff, minorig
72  INTEGER i,k,itra
73  REAL qs(klon,klev)
74  REAL,ALLOCATABLE,SAVE :: cbmf(:)
75 c$OMP THREADPRIVATE(cbmf)
76  INTEGER ifrst
77  SAVE ifrst
78  DATA ifrst /0/
79 c$OMP THREADPRIVATE(ifrst)
80 #include "YOMCST.h"
81 #include "YOETHF.h"
82 #include "FCTTRE.h"
83 c
84 c
85  IF (ifrst .EQ. 0) THEN
86  ifrst = 1
87  allocate(cbmf(klon))
88  DO i = 1, klon
89  cbmf(i) = 0.
90  ENDDO
91  ENDIF
92 
93  DO k = 1, klev+1
94  DO i=1,klon
95  em_ph(i,k) = paprs(i,k) / 100.0
96  ENDDO
97  ENDDO
98 c
99  DO k = 1, klev
100  DO i=1,klon
101  em_p(i,k) = pplay(i,k) / 100.0
102  ENDDO
103  ENDDO
104 
105 c
106  DO k = 1, klev
107  DO i = 1, klon
108  zx_t = t(i,k)
109  zdelta=max(0.,sign(1.,rtt-zx_t))
110  zx_qs= min(0.5 , r2es * foeew(zx_t,zdelta)/em_p(i,k)/100.0)
111  zcor=1./(1.-retv*zx_qs)
112  qs(i,k)=zx_qs*zcor
113  ENDDO
114  ENDDO
115 c
116  noff = 2
117  minorig = 2
118  CALL convect1(klon,klev,klev+1,noff,minorig,t,q,qs,u,v,
119  $ em_p,em_ph,iflag,
120  $ d_t,d_q,d_u,d_v,rain,cbmf,dtime,ma)
121 c
122  DO i = 1,klon
123  rain(i) = rain(i)/86400.
124  rflag(i)=iflag(i)
125  ENDDO
126 c call dump2d(iim,jjm-1,rflag(2:klon-1),'FLAG CONVECTION ')
127 c if (klon.eq.1) then
128 c print*,'IFLAG ',iflag
129 c else
130 c write(*,'(96i1)') (iflag(i),i=2,klon-1)
131 c endif
132  DO k = 1, klev
133  DO i = 1, klon
134  d_t(i,k) = dtime*d_t(i,k)
135  d_q(i,k) = dtime*d_q(i,k)
136  d_u(i,k) = dtime*d_u(i,k)
137  d_v(i,k) = dtime*d_v(i,k)
138  ENDDO
139  DO itra = 1,ntra
140  DO i = 1, klon
141  d_tra(i,k,itra) = 0.
142  ENDDO
143  ENDDO
144  ENDDO
145 
146 c
147 c
148 c
149  RETURN
150  END
151