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

Contents of /trunk/phylmd/concvl.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 99 - (show annotations)
Wed Jul 2 18:39:15 2014 UTC (9 years, 10 months ago) by guez
File size: 3859 byte(s)
Created procedure test_disvert (following LMDZ). Added procedures
hybrid and funcd in module disvert_m. Upgraded compute_ab from
internal procedure of disvert to module procedure. Added variables y,
ya in module disvert_m. Upgraded s from local variable of procedure
disvert to module variable.

Renamed allowed value of variable vert_sampling in procedure disvert
from "read" to "read_hybrid". Added possibility to read pressure
values, value "read_pressure". Replaced vertical distribution for
value "param" by the distribution "strato_correct" from LMDZ (but kept
the value "param"). In case "tropo", replaced 1 by dsigmin (following
LMDZ). In case "strato", replaced 0.3 by dsigmin (following LMDZ).

Changed computation of bp in procedure compute_ab.

Removed debugindex case in clmain. Removed useless argument rlon of
procedure clmain. Removed useless variables ytaux, ytauy of procedure
clmain.

Removed intermediary variables tsol, qsol, tsolsrf, tslab in procedure
etat0.

Removed variable ok_veget:. coupling with the model Orchid is not
possible. Removed variable ocean: modeling an ocean slab is not
possible.

Removed useless variables tmp_rriv and tmp_rcoa from module
interface_surf.

Moved initialization of variables da, mp, phi in procedure physiq to
to inside the test iflag_con >= 3.

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/08/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 q(klon, klev) ! input 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
33 REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, &
34 klev)
35 ! d_q-----output-R-increment de la vapeur d'eau
36
37 REAL rain(klon), snow(klon)
38 ! rain----output-R-la pluie (mm/s)
39 ! snow----output-R-la neige (mm/s)
40
41 INTEGER kbas(klon), ktop(klon)
42
43 REAL, intent(out):: upwd(klon, klev)
44 ! saturated updraft mass flux (kg/m**2/s)
45
46 real, intent(out):: dnwd(klon, klev)
47 ! saturated downdraft mass flux (kg/m**2/s)
48
49 real, intent(out):: dnwd0(klon, klev)
50 ! unsaturated downdraft mass flux (kg/m**2/s)
51
52 REAL ma(klon, klev), cape(klon)
53 ! Cape----output-R-CAPE (J/kg)
54
55 INTEGER iflag(klon)
56 REAL qcondc(klon, klev)
57 REAL wd(klon)
58 REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)
59 REAL, intent(inout):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
60
61 ! Local:
62
63 REAL em_ph(klon, klev+1), em_p(klon, klev)
64 REAL zx_t, zdelta, zx_qs, zcor
65 INTEGER i, k
66 REAL qs(klon, klev)
67 REAL, save:: cbmf(klon)
68 INTEGER:: ifrst = 0
69
70 !-----------------------------------------------------------------
71
72 snow = 0
73
74 IF (ifrst==0) THEN
75 ifrst = 1
76 DO i = 1, klon
77 cbmf(i) = 0.
78 END DO
79 END IF
80
81 DO k = 1, klev + 1
82 DO i = 1, klon
83 em_ph(i, k) = paprs(i, k)/100.0
84 pmflxs(i, k) = 0.
85 END DO
86 END DO
87
88 DO k = 1, klev
89 DO i = 1, klon
90 em_p(i, k) = play(i, k)/100.0
91 END DO
92 END DO
93
94
95 IF (iflag_con==4) THEN
96 DO k = 1, klev
97 DO i = 1, klon
98 zx_t = t(i, k)
99 zdelta = max(0., sign(1., rtt-zx_t))
100 zx_qs = min(0.5, r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0)
101 zcor = 1./(1.-retv*zx_qs)
102 qs(i, k) = zx_qs*zcor
103 END DO
104 END DO
105 ELSE
106 ! iflag_con=3 (modif de puristes qui fait la diffce pour la
107 ! convergence numerique)
108 DO k = 1, klev
109 DO i = 1, klon
110 zx_t = t(i, k)
111 zdelta = max(0., sign(1., rtt-zx_t))
112 zx_qs = r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0
113 zx_qs = min(0.5, zx_qs)
114 zcor = 1./(1.-retv*zx_qs)
115 zx_qs = zx_qs*zcor
116 qs(i, k) = zx_qs
117 END DO
118 END DO
119 END IF
120
121 CALL cv_driver(klon, klev, t, q, qs, u, v, em_p, em_ph, iflag, d_t, d_q, &
122 d_u, d_v, rain, pmflxr, cbmf, sig1, w01, kbas, ktop, dtime, ma, &
123 upwd, dnwd, dnwd0, qcondc, wd, cape, da, phi, mp)
124
125 DO i = 1, klon
126 rain(i) = rain(i)/86400.
127 END DO
128
129 DO k = 1, klev
130 DO i = 1, klon
131 d_t(i, k) = dtime*d_t(i, k)
132 d_q(i, k) = dtime*d_q(i, k)
133 d_u(i, k) = dtime*d_u(i, k)
134 d_v(i, k) = dtime*d_v(i, k)
135 END DO
136 END DO
137
138 END SUBROUTINE concvl
139
140 end module concvl_m

  ViewVC Help
Powered by ViewVC 1.1.21