source: LMDZ4/branches/pre_V3/libf/phylmd/concvl.F @ 5086

Last change on this file since 5086 was 619, checked in by lmdzadmin, 20 years ago

Rajout convection Kerry Emanuel pour traceurs- MAF+JYG

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE concvl (iflag_con,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     .             qcondc,wd,
10     .             pmflxr,pmflxs,
11     .             da,phi,mp)
12 
13c
14      IMPLICIT none
15c======================================================================
16c Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
17c Objet: schema de convection de Emanuel (1991) interface
18c======================================================================
19c Arguments:
20c dtime--input-R-pas d'integration (s)
21c s-------input-R-la valeur "s" pour chaque couche
22c sigs----input-R-la valeur "sigma" de chaque couche
23c sig-----input-R-la valeur de "sigma" pour chaque niveau
24c psolpa--input-R-la pression au sol (en Pa)
25C pskapa--input-R-exponentiel kappa de psolpa
26c h-------input-R-enthalpie potentielle (Cp*T/P**kappa)
27c q-------input-R-vapeur d'eau (en kg/kg)
28c
29c work*: input et output: deux variables de travail,
30c                            on peut les mettre a 0 au debut
31c ALE-----input-R-energie disponible pour soulevement
32c
33C d_h-----output-R-increment de l'enthalpie potentielle (h)
34c d_q-----output-R-increment de la vapeur d'eau
35c rain----output-R-la pluie (mm/s)
36c snow----output-R-la neige (mm/s)
37c upwd----output-R-saturated updraft mass flux (kg/m**2/s)
38c dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)
39c dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)
40c Cape----output-R-CAPE (J/kg)
41c Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee
42c                  adiabatiquement a partir du niveau 1 (K)
43c deltapb-output-R-distance entre LCL et base de la colonne (<0 ; Pa)
44c Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de la glace
45c======================================================================
46c
47#include "dimensions.h"
48#include "dimphy.h"
49c
50      integer NTRAC
51      PARAMETER (NTRAC=nqmx-2)
52c
53       INTEGER iflag_con
54c
55       REAL dtime, paprs(klon,klev+1),pplay(klon,klev)
56       REAL t(klon,klev),q(klon,klev),u(klon,klev),v(klon,klev)
57       REAL tra(klon,klev,ntrac)
58       INTEGER ntra
59       REAL work1(klon,klev),work2(klon,klev)
60       REAL pmflxr(klon,klev+1),pmflxs(klon,klev+1)
61c
62       REAL d_t(klon,klev),d_q(klon,klev),d_u(klon,klev),d_v(klon,klev)
63       REAL d_tra(klon,klev,ntrac)
64       REAL rain(klon),snow(klon)
65c
66       INTEGER kbas(klon),ktop(klon)
67       REAL em_ph(klon,klev+1),em_p(klon,klev)
68       REAL upwd(klon,klev),dnwd(klon,klev),dnwdbis(klon,klev)
69       REAL Ma(klon,klev),cape(klon),tvp(klon,klev)
70       real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
71       INTEGER iflag(klon)
72       REAL rflag(klon)
73       REAL pbase(klon),bbase(klon)
74       REAL dtvpdt1(klon,klev),dtvpdq1(klon,klev)
75       REAL dplcldt(klon),dplcldr(klon)
76       REAL qcondc(klon,klev)
77       REAL wd(klon)
78c
79       REAL zx_t,zdelta,zx_qs,zcor
80c
81       INTEGER noff, minorig
82       INTEGER i,k,itra
83       REAL qs(klon,klev)
84       REAL cbmf(klon)
85       SAVE cbmf
86       INTEGER ifrst
87       SAVE ifrst
88       DATA ifrst /0/
89#include "YOMCST.h"
90#include "YOETHF.h"
91#include "FCTTRE.h"
92c
93c
94cym
95      snow(:)=0
96     
97      IF (ifrst .EQ. 0) THEN
98         ifrst = 1
99         DO i = 1, klon
100          cbmf(i) = 0.
101         ENDDO
102      ENDIF
103
104      DO k = 1, klev+1
105         DO i=1,klon
106         em_ph(i,k) = paprs(i,k) / 100.0
107         pmflxs(i,k)=0.
108      ENDDO
109      ENDDO
110c
111      DO k = 1, klev
112         DO i=1,klon
113         em_p(i,k) = pplay(i,k) / 100.0
114      ENDDO
115      ENDDO
116
117c
118      if (iflag_con .eq. 4) then
119      DO k = 1, klev
120        DO i = 1, klon
121         zx_t = t(i,k)
122         zdelta=MAX(0.,SIGN(1.,rtt-zx_t))
123         zx_qs= MIN(0.5 , r2es * FOEEW(zx_t,zdelta)/em_p(i,k)/100.0)
124         zcor=1./(1.-retv*zx_qs)
125         qs(i,k)=zx_qs*zcor
126        ENDDO
127      ENDDO
128      else ! iflag_con=3 (modif de puristes qui fait la diffce pour la convergence numerique)
129      DO k = 1, klev
130        DO i = 1, klon
131         zx_t = t(i,k)
132         zdelta=MAX(0.,SIGN(1.,rtt-zx_t))
133         zx_qs= r2es * FOEEW(zx_t,zdelta)/em_p(i,k)/100.0
134         zx_qs= MIN(0.5,zx_qs)
135         zcor=1./(1.-retv*zx_qs)
136         zx_qs=zx_qs*zcor
137         qs(i,k)=zx_qs
138        ENDDO
139      ENDDO
140      endif ! iflag_con
141c
142C------------------------------------------------------------------
143
144C Main driver for convection:
145C               iflag_con = 3  -> equivalent to convect3
146C               iflag_con = 4  -> equivalent to convect1/2
147
148      CALL cv_driver(klon,klev,klev+1,ntra,iflag_con,
149     :              t,q,qs,u,v,tra,
150     $              em_p,em_ph,iflag,
151     $              d_t,d_q,d_u,d_v,d_tra,rain,
152     $              pmflxr,cbmf,work1,work2,
153     $              kbas,ktop,
154     $              dtime,Ma,upwd,dnwd,dnwdbis,qcondc,wd,cape,
155     $              da,phi,mp)
156
157C------------------------------------------------------------------
158
159      DO i = 1,klon
160        rain(i) = rain(i)/86400.
161        rflag(i)=iflag(i)
162      ENDDO
163
164      DO k = 1, klev
165        DO i = 1, klon
166           d_t(i,k) = dtime*d_t(i,k)
167           d_q(i,k) = dtime*d_q(i,k)
168           d_u(i,k) = dtime*d_u(i,k)
169           d_v(i,k) = dtime*d_v(i,k)
170        ENDDO
171      ENDDO
172       DO itra = 1,ntra
173        DO k = 1, klev
174         DO i = 1, klon
175            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
176         ENDDO
177        ENDDO
178       ENDDO
179c les traceurs ne sont pas mis dans cette version de convect4:
180      if (iflag_con.eq.4) then
181       DO itra = 1,ntra
182        DO k = 1, klev
183         DO i = 1, klon
184            d_tra(i,k,itra) = 0.
185         ENDDO
186        ENDDO
187       ENDDO
188      endif
189 
190      RETURN
191      END
192 
Note: See TracBrowser for help on using the repository browser.