/[lmdze]/trunk/Sources/phylmd/cvltr.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/cvltr.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 212 - (hide annotations)
Thu Jan 12 12:31:31 2017 UTC (7 years, 4 months ago) by guez
File size: 3362 byte(s)
Moved variables from module com_io_dyn to module inithist_m, where
they are defined.

Split grid_atob.f into grille_m.f and dist_sphe.f. Extracted ASCCI art
to documentation. In grille_m, use automatic arrays instead of maximum
size. In grille_m, instead of printing data for every problematic
point, print a single diagnostic message.

Removed variables top_height, overlap, lev_histhf, lev_histday,
lev_histmth, type_run, ok_isccp, ok_regdyn, lonmin_ins, lonmax_ins,
latmin_ins, latmax_ins of module clesphys, not used.

Removed variable itap of module histwrite_phy_m, not used. There is a
variable itap in module time_phylmdz.

Added output of tro3.

In physiq, no need to compute wo at every time-step, since we only use
it in radlwsw.

1 guez 120 module cvltr_m
2 guez 63
3 guez 212 IMPLICIT NONE
4 guez 63
5 guez 120 contains
6 guez 63
7 guez 212 SUBROUTINE cvltr(pdtime, da, phi, mp, paprs, x, upd, dnd, dx)
8 guez 3
9 guez 212 ! From LMDZ4/libf/phylmd/cvltr.F, version 1.1 2005/04/15 12:36:17
10 guez 63
11 guez 120 USE dimphy, ONLY: klev, klon
12     USE suphec_m, ONLY: rg
13    
14 guez 212 ! Objet : convection des traceurs / Kerry Emanuel
15     ! Authors: M.-A. Filiberti and J.-Y. Grandpeix
16    
17 guez 120 REAL, intent(in):: pdtime
18 guez 212 real, intent(in):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
19     REAL, intent(in):: paprs(klon, klev + 1) ! pression aux 1/2 couches
20     REAL, intent(in):: x(klon, klev) ! q de traceur (bas en haut)
21     REAL, intent(in):: upd(klon, klev) ! saturated updraft mass flux
22     REAL, intent(in):: dnd(klon, klev) ! saturated downdraft mass flux
23     REAL, intent(out):: dx(klon, klev) ! tendance de traceur (bas en haut)
24    
25     ! Local:
26     real zed(klon, klev), zmd(klon, klev, klev)
27     real za(klon, klev, klev)
28     real zmfd(klon, klev), zmfa(klon, klev)
29     real zmfp(klon, klev), zmfu(klon, klev)
30     integer i, k, j
31    
32     !------------------------------------------------------------
33    
34 guez 120 ! calcul des tendances liees au downdraft
35 guez 212
36     zed = 0.
37     zmfd = 0.
38     zmfa = 0.
39     zmfu = 0.
40     zmfp = 0.
41     zmd = 0.
42     za = 0.
43 guez 120 ! entrainement
44 guez 212 do k = 1, klev - 1
45     do i = 1, klon
46     zed(i, k) = max(0., mp(i, k) - mp(i, k + 1))
47 guez 120 end do
48     end do
49 guez 212
50 guez 120 ! calcul de la matrice d echange
51     ! matrice de distribution de la masse entrainee en k
52 guez 212
53     do k = 1, klev
54     do i = 1, klon
55     zmd(i, k, k) = zed(i, k)
56 guez 120 end do
57     end do
58 guez 212 do k = 2, klev
59     do j = k - 1, 1, - 1
60     do i = 1, klon
61     if(mp(i, j + 1) /= 0) then
62     zmd(i, j, k) = zmd(i, j + 1, k) * min(1., mp(i, j)/mp(i, j + 1))
63 guez 120 endif
64     end do
65     end do
66     end do
67 guez 212 do k = 1, klev
68     do j = 1, klev - 1
69     do i = 1, klon
70     za(i, j, k) = max(0., zmd(i, j + 1, k) - zmd(i, j, k))
71 guez 120 end do
72     end do
73     end do
74 guez 212
75     ! rajout du terme lie a l'ascendance induite
76    
77     do j = 2, klev
78     do i = 1, klon
79     za(i, j, j - 1) = za(i, j, j - 1) + mp(i, j)
80 guez 120 end do
81     end do
82 guez 212
83 guez 120 ! tendances
84 guez 212
85     do k = 1, klev
86     do j = 1, klev
87     do i = 1, klon
88     zmfd(i, j) = zmfd(i, j) + za(i, j, k) * (x(i, k) - x(i, j))
89 guez 120 end do
90     end do
91     end do
92 guez 212
93 guez 120 ! calcul des tendances liees aux flux satures
94 guez 212
95     do j = 1, klev
96     do i = 1, klon
97     zmfa(i, j) = da(i, j) * (x(i, 1) - x(i, j))
98 guez 120 end do
99     end do
100 guez 212 do k = 1, klev
101     do j = 1, klev
102     do i = 1, klon
103     zmfp(i, j) = zmfp(i, j) + phi(i, j, k) * (x(i, k) - x(i, j))
104 guez 120 end do
105     end do
106     end do
107 guez 212 do j = 1, klev - 1
108     do i = 1, klon
109     zmfu(i, j) = max(0., upd(i, j + 1) + dnd(i, j + 1)) &
110     * (x(i, j + 1) - x(i, j))
111 guez 120 end do
112     end do
113 guez 212 do j = 2, klev
114     do i = 1, klon
115     zmfu(i, j) = zmfu(i, j) &
116     + min(0., upd(i, j) + dnd(i, j)) * (x(i, j) - x(i, j - 1))
117 guez 120 end do
118     end do
119    
120 guez 212 ! calcul final des tendances
121    
122     do k = 1, klev
123     do i = 1, klon
124     dx(i, k) = (zmfd(i, k) + zmfu(i, k) &
125     + zmfa(i, k) + zmfp(i, k)) * pdtime &
126     * RG/(paprs(i, k) - paprs(i, k + 1))
127 guez 120 enddo
128     enddo
129    
130     end SUBROUTINE cvltr
131    
132     end module cvltr_m

  ViewVC Help
Powered by ViewVC 1.1.21