source: LMDZ4/branches/LMDZ4_par_0/libf/phylmd/concvl.F @ 5456

Last change on this file since 5456 was 634, checked in by Laurent Fairhead, 20 years ago

Modifications faites à la physique pour la rendre parallele YM
Une branche de travail LMDZ4_par_0 a été créée provisoirement afin de tester
les modifs pleinement avant leurs inclusions dans le tronc principal
LF

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