/[lmdze]/trunk/phylmd/Conflx/conflx.f
ViewVC logotype

Annotation of /trunk/phylmd/Conflx/conflx.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide annotations)
Wed Feb 5 17:51:07 2014 UTC (10 years, 3 months ago) by guez
Original Path: trunk/phylmd/Conflx/conflx.f90
File size: 5709 byte(s)
Moved procedure inigeom into module comgeom.

In disvert, renamed s_sampling to vert_sampling, following
LMDZ. Removed choice strato1. In case read, read ap and bp instead of
s (following LMDZ).

Added argument phis to start_init_orog and start_init_dyn, and removed
variable phis of module start_init_orog_m. In etat0 and
start_init_orog, renamed relief to zmea_2d. In start_init_dyn, renamed
psol to ps.

In start_init_orog, renamed relief_hi to relief. No need to set
phis(iim + 1, :) = phis(1, :), already done in grid_noro.

Documentation for massbar out of SVN, in massbar.txt. Documentation
was duplicated in massdair, but not relevant in massdair.

In conflx, no need to initialize pen_[ud] and pde_[ud]. In flxasc,
used intermediary variable fact (following LMDZ).

In grid_noro, added local variable zmea0 for zmea not smoothed and
computed zphi from zmea instead of zmea0 (following LMDZ). This
changes the results of ce0l.

Removed arguments pen_u and pde_d of phytrac and nflxtr, which were
not used.

1 guez 62 module conflx_m
2 guez 3
3 guez 62 IMPLICIT none
4 guez 3
5 guez 62 contains
6 guez 3
7 guez 70 SUBROUTINE conflx (dtime, pres_h, pres_f, t, q, con_t, con_q, qhfl, w, &
8 guez 71 d_t, d_q, rain, snow, mfu, mfd, pen_u, pde_u, pen_d, pde_d, kcbot, &
9 guez 62 kctop, kdtop, pmflxr, pmflxs)
10 guez 3
11 guez 62 ! From LMDZ4/libf/phylmd/conflx.F, version 1.1.1.1 2004/05/19 12:53:08
12 guez 3
13 guez 62 ! Author: Z. X. Li (LMD/CNRS)
14 guez 70 ! Date: 1994/10/14
15 guez 52
16 guez 70 ! Objet: schéma en flux de masse pour la convection (schéma de
17 guez 62 ! Tiedtke avec quelques modifications mineures)
18 guez 52
19 guez 62 ! Décembre 1997 : prise en compte des modifications introduites
20 guez 70 ! par Olivier Boucher et Alexandre Armengaud pour le mélange et le
21 guez 62 ! lessivage des traceurs passifs.
22    
23     use flxmain_m, only: flxmain
24     USE dimphy, ONLY: klev, klon
25     USE suphec_m, ONLY: rd, retv, rtt
26     USE yoethf_m, ONLY: r2es
27     USE fcttre, ONLY: foeew
28    
29 guez 70 REAL, intent(in):: dtime ! pas d'integration (s)
30 guez 78 REAL, intent(in):: pres_h(:, :) ! (klon, klev + 1) pression half-level (Pa)
31 guez 70 REAL, intent(in):: pres_f(:, :) ! (klon, klev) pression full-level (Pa)
32     REAL, intent(in):: t(:, :) ! (klon, klev) temperature (K)
33 guez 71 REAL, intent(in):: q(:, :) ! (klon, klev) humidité spécifique (no dimension)
34 guez 62
35 guez 70 REAL, intent(in):: con_t(:, :)
36     ! (klon, klev) convergence de temperature (K/s)
37 guez 62
38 guez 70 REAL, intent(in):: con_q(:, :)
39     ! (klon, klev) convergence de l'eau vapeur (g/g/s)
40    
41     REAL, intent(in):: qhfl(:) ! (klon) evaporation (negative vers haut) mm/s
42     REAL, intent(in):: w(:, :) ! (klon, klev) vitesse verticale (Pa/s)
43    
44     REAL, intent(out):: d_t(:, :) ! (klon, klev) incrementation de temperature
45     REAL, intent(out):: d_q(:, :) ! (klon, klev) incrementation d'humidite
46     REAL, intent(out):: rain(:) ! (klon) pluie (mm/s)
47     REAL, intent(out):: snow(:) ! (klon) neige (mm/s)
48    
49 guez 71 REAL, intent(out):: mfu(:, :) ! (klon, klev)
50     ! flux de masse (kg/m2/s) panache ascendant
51 guez 70
52 guez 71 REAL, intent(out):: mfd(:, :) ! (klon, klev)
53     ! flux de masse (kg/m2/s) panache descendant
54 guez 62
55 guez 70 REAL, intent(out):: pen_u(:, :) ! (klon, klev)
56     REAL, intent(out):: pde_u(:, :) ! (klon, klev)
57     REAL, intent(out):: pen_d(:, :) ! (klon, klev)
58     REAL, intent(out):: pde_d(:, :) ! (klon, klev)
59     INTEGER, intent(out):: kcbot(:) ! (klon) niveau du bas de la convection
60     INTEGER, intent(out):: kctop(:) ! (klon) niveau du haut de la convection
61     INTEGER, intent(out):: kdtop(:) ! (klon) niveau du haut des downdrafts
62 guez 78 REAL, intent(out):: pmflxr(:, :) ! (klon, klev + 1)
63     REAL, intent(out):: pmflxs(:, :) ! (klon, klev + 1)
64 guez 62
65     ! Local:
66    
67 guez 71 REAL qsen(klon, klev)
68 guez 62 REAL pvervel(klon, klev)
69     LOGICAL land(klon)
70    
71     REAL d_t_bis(klon, klev)
72     REAL d_q_bis(klon, klev)
73 guez 78 REAL paprs(klon, klev + 1)
74 guez 62 REAL paprsf(klon, klev)
75     REAL zgeom(klon, klev)
76     REAL zcvgq(klon, klev)
77     REAL zcvgt(klon, klev)
78    
79     REAL zen_u(klon, klev)
80     REAL zen_d(klon, klev)
81     REAL zde_u(klon, klev)
82     REAL zde_d(klon, klev)
83 guez 78 REAL zmflxr(klon, klev + 1)
84     REAL zmflxs(klon, klev + 1)
85 guez 62
86     INTEGER i, k
87 guez 70 REAL zqsat
88 guez 62
89     !--------------------------------------------------------------------
90    
91 guez 78 ! Initialiser les variables de sortie (pour securité):
92     rain = 0.
93     snow = 0.
94     kcbot = 0
95     kctop = 0
96     kdtop = 0
97     d_t = 0.
98     d_q = 0.
99 guez 62
100 guez 78 zen_u = 0.
101     zde_u = 0.
102     zen_d = 0.
103     zde_d = 0.
104     zmflxr = 0.
105     zmflxs = 0.
106 guez 62
107 guez 78 ! Calculer la nature du sol (pour l'instant, océan partout):
108     land = .FALSE.
109    
110     ! Préparer les variables d'entrée (attention: l'indice des niveaux
111     ! verticaux augmente du haut vers le bas) :
112 guez 62 DO k = 1, klev
113     DO i = 1, klon
114 guez 78 paprsf(i, k) = pres_f(i, klev-k + 1)
115     paprs(i, k) = pres_h(i, klev + 1-k + 1)
116     pvervel(i, k) = w(i, klev + 1-k)
117     zcvgt(i, k) = con_t(i, klev-k + 1)
118     zcvgq(i, k) = con_q(i, klev-k + 1)
119 guez 62
120 guez 70 zqsat = MIN(0.5, R2ES * FOEEW(t(i, k), &
121     merge(0., 1., rtt < t(i, k))) / paprsf(i, k))
122 guez 71 qsen(i, k) = zqsat / (1. - RETV * zqsat)
123 guez 62 ENDDO
124     ENDDO
125     DO i = 1, klon
126 guez 78 paprs(i, klev + 1) = pres_h(i, 1)
127 guez 70 zgeom(i, klev) = RD * t(i, klev) &
128 guez 78 / (0.5*(paprs(i, klev + 1) + paprsf(i, klev))) &
129     * (paprs(i, klev + 1)-paprsf(i, klev))
130 guez 62 ENDDO
131     DO k = klev-1, 1, -1
132     DO i = 1, klon
133 guez 78 zgeom(i, k) = zgeom(i, k + 1) &
134     + RD * 0.5*(t(i, k + 1) + t(i, k)) / paprs(i, k + 1) &
135     * (paprsf(i, k + 1)-paprsf(i, k))
136 guez 62 ENDDO
137     ENDDO
138    
139 guez 70 ! Appeler la routine principale :
140 guez 71 CALL flxmain(dtime, t, q, qsen, qhfl, paprsf, paprs, zgeom, land, &
141     zcvgt, zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, mfu, mfd, &
142 guez 62 zen_u, zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs)
143    
144     ! De la même façon que l'on effectue le réindiçage pour la
145     ! température t et le champ q, on réindice les flux nécessaires à
146     ! la convection des traceurs.
147     DO k = 1, klev
148     DO i = 1, klon
149 guez 78 d_q(i, klev + 1-k) = dtime*d_q_bis(i, k)
150     d_t(i, klev + 1-k) = dtime*d_t_bis(i, k)
151 guez 62 ENDDO
152     ENDDO
153    
154 guez 71 mfu = eoshift(mfu, shift=1, dim=2)
155     mfd = eoshift(mfd, shift=1, dim=2)
156     pen_d(:, 1)= 0.
157     pde_d(:, 1)= 0.
158 guez 62
159     DO k = 1, klev
160     DO i = 1, klon
161 guez 78 pen_u(i, klev + 1-k)= zen_u(i, k)
162     pde_u(i, klev + 1-k)= zde_u(i, k)
163 guez 62 ENDDO
164     ENDDO
165    
166     DO k = 1, klev-1
167     DO i = 1, klon
168 guez 78 pen_d(i, klev + 1-k)= -zen_d(i, k + 1)
169     pde_d(i, klev + 1-k)= -zde_d(i, k + 1)
170 guez 62 ENDDO
171     ENDDO
172    
173 guez 78 DO k = 1, klev + 1
174 guez 62 DO i = 1, klon
175 guez 78 pmflxr(i, klev + 2-k)= zmflxr(i, k)
176     pmflxs(i, klev + 2-k)= zmflxs(i, k)
177 guez 62 ENDDO
178     ENDDO
179    
180     END SUBROUTINE conflx
181    
182     end module conflx_m

  ViewVC Help
Powered by ViewVC 1.1.21