/[lmdze]/trunk/phylmd/concvl.f
ViewVC logotype

Contents of /trunk/phylmd/concvl.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 134 - (show annotations)
Wed Apr 29 15:47:56 2015 UTC (9 years ago) by guez
Original Path: trunk/Sources/phylmd/concvl.f
File size: 3777 byte(s)
Sources inside, compilation outside.
1 module concvl_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE concvl(dtime, paprs, play, t, q, u, v, sig1, w01, d_t, d_q, d_u, &
8 d_v, rain, snow, kbas, ktop, upwd, dnwd, dnwd0, ma, cape, iflag, &
9 qcondc, wd, pmflxr, pmflxs, da, phi, mp)
10
11 ! From phylmd/concvl.F, version 1.3 2005/04/15 12:36:17
12 ! Author: Z. X. Li (LMD/CNRS)
13 ! Date: 1993 August 18
14 ! Objet : schéma de convection d'Emanuel (1991), interface
15 ! (driver commun aux versions 3 et 4)
16
17 use clesphys2, only: iflag_con
18 use cv_driver_m, only: cv_driver
19 USE dimens_m, ONLY: nqmx
20 USE dimphy, ONLY: klev, klon
21 USE fcttre, ONLY: foeew
22 USE suphec_m, ONLY: retv, rtt
23 USE yoethf_m, ONLY: r2es
24
25 REAL, INTENT (IN):: dtime ! pas d'integration (s)
26 REAL, INTENT (IN):: paprs(klon, klev+1)
27 REAL, INTENT (IN):: play(klon, klev)
28 REAL, intent(in):: t(klon, klev)
29 real, intent(in):: q(klon, klev) ! vapeur d'eau (en kg/kg)
30 real, INTENT (IN):: u(klon, klev), v(klon, klev)
31 REAL, intent(inout):: sig1(klon, klev), w01(klon, klev)
32 REAL, intent(out):: d_t(klon, klev)
33 REAL, intent(out):: d_q(klon, klev) ! increment de la vapeur d'eau
34 REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
35 REAL, intent(out):: rain(klon) ! pluie (mm/s)
36 REAL, intent(out):: snow(klon) ! neige (mm/s)
37 INTEGER kbas(klon), ktop(klon)
38
39 REAL, intent(out):: upwd(klon, klev)
40 ! saturated updraft mass flux (kg/m**2/s)
41
42 real, intent(out):: dnwd(klon, klev)
43 ! saturated downdraft mass flux (kg/m**2/s)
44
45 real, intent(out):: dnwd0(klon, klev)
46 ! unsaturated downdraft mass flux (kg/m**2/s)
47
48 REAL ma(klon, klev), cape(klon)
49 ! Cape----output-R-CAPE (J/kg)
50
51 INTEGER iflag(klon)
52 REAL qcondc(klon, klev)
53 REAL wd(klon)
54 REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)
55 REAL, intent(inout):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
56
57 ! Local:
58
59 REAL em_ph(klon, klev+1), em_p(klon, klev)
60 REAL zx_t, zx_qs, zcor
61 INTEGER i, k
62 REAL qs(klon, klev)
63 REAL, save:: cbmf(klon)
64 INTEGER:: ifrst = 0
65
66 !-----------------------------------------------------------------
67
68 snow = 0
69
70 IF (ifrst==0) THEN
71 ifrst = 1
72 DO i = 1, klon
73 cbmf(i) = 0.
74 END DO
75 END IF
76
77 DO k = 1, klev + 1
78 DO i = 1, klon
79 em_ph(i, k) = paprs(i, k)/100.0
80 pmflxs(i, k) = 0.
81 END DO
82 END DO
83
84 DO k = 1, klev
85 DO i = 1, klon
86 em_p(i, k) = play(i, k)/100.0
87 END DO
88 END DO
89
90
91 IF (iflag_con==4) THEN
92 DO k = 1, klev
93 DO i = 1, klon
94 zx_t = t(i, k)
95 zx_qs = min(0.5, r2es*foeew(zx_t, rtt >= zx_t)/em_p(i, k)/100.0)
96 zcor = 1./(1.-retv*zx_qs)
97 qs(i, k) = zx_qs*zcor
98 END DO
99 END DO
100 ELSE
101 ! iflag_con=3 (modif de puristes qui fait la diffce pour la
102 ! convergence numerique)
103 DO k = 1, klev
104 DO i = 1, klon
105 zx_t = t(i, k)
106 zx_qs = r2es*foeew(zx_t, rtt >= zx_t)/em_p(i, k)/100.0
107 zx_qs = min(0.5, zx_qs)
108 zcor = 1./(1.-retv*zx_qs)
109 zx_qs = zx_qs*zcor
110 qs(i, k) = zx_qs
111 END DO
112 END DO
113 END IF
114
115 CALL cv_driver(t, q, qs, u, v, em_p, em_ph, iflag, d_t, d_q, &
116 d_u, d_v, rain, pmflxr, cbmf, sig1, w01, kbas, ktop, dtime, ma, &
117 upwd, dnwd, dnwd0, qcondc, wd, cape, da, phi, mp)
118
119 DO i = 1, klon
120 rain(i) = rain(i)/86400.
121 END DO
122
123 DO k = 1, klev
124 DO i = 1, klon
125 d_t(i, k) = dtime*d_t(i, k)
126 d_q(i, k) = dtime*d_q(i, k)
127 d_u(i, k) = dtime*d_u(i, k)
128 d_v(i, k) = dtime*d_v(i, k)
129 END DO
130 END DO
131
132 END SUBROUTINE concvl
133
134 end module concvl_m

  ViewVC Help
Powered by ViewVC 1.1.21