source: LMDZ5/branches/IPSLCM5A2.1_ISO/libf/phyiso/conemav.F90 @ 3946

Last change on this file since 3946 was 3331, checked in by acozic, 7 years ago

Add modification for isotopes

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