/[lmdze]/trunk/libf/phylmd/nflxtr.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/nflxtr.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 63 - (show annotations)
Wed Aug 1 14:13:57 2012 UTC (11 years, 9 months ago) by guez
File size: 5003 byte(s)
Superficial changes
1 SUBROUTINE nflxtr(pdtime,pmfu,pmfd,pen_u,pde_u,pen_d,pde_d, &
2 paprs,x,dx)
3
4 ! From LMDZ4/libf/phylmd/nflxtr.F,v 1.1.1.1 2004/05/19 12:53:08
5
6 USE dimphy, ONLY: klev, klon
7 USE suphec_m, ONLY: rg
8
9 IMPLICIT NONE
10 !=====================================================================
11 ! Objet : Melange convectif de traceurs a partir des flux de masse
12 ! Date : 13/12/1996 -- 13/01/97
13 ! Auteur: O. Boucher (LOA) sur inspiration de Z. X. Li (LMD),
14 ! Brinkop et Sausen (1996) et Boucher et al. (1996).
15 ! ATTENTION : meme si cette routine se veut la plus generale possible,
16 ! elle a herite de certaines notations et conventions du
17 ! schema de Tiedtke (1993).
18 ! --En particulier, les couches sont numerotees de haut en bas !!!
19 ! Ceci est valable pour les flux
20 ! mais pas pour les entrees x, paprs !!!!
21 ! --pmfu est positif, pmfd est negatif
22 ! --Tous les flux d'entrainements et de detrainements sont positifs
23 ! contrairement au schema de Tiedtke d'ou les changements de signe!!!!
24 !=====================================================================
25 !
26 !
27 REAL, intent(in):: pdtime
28 !--les flux sont definis au 1/2 niveaux
29 !--pmfu(klev+1) et pmfd(klev+1) sont implicitement nuls
30
31 REAL, intent(in):: pmfu(klon,klev)
32 ! flux de masse dans le panache montant
33
34 REAL pmfd(klon,klev) ! flux de masse dans le panache descendant
35 REAL pen_u(klon,klev) ! flux entraine dans le panache montant
36 REAL pde_u(klon,klev) ! flux detraine dans le panache montant
37 REAL pen_d(klon,klev) ! flux entraine dans le panache descendant
38 REAL pde_d(klon,klev) ! flux detraine dans le panache descendant
39
40 REAL, intent(in):: paprs(klon,klev+1) ! pression aux 1/2 couches (bas en haut)
41 REAL, intent(in):: x(klon,klev) ! q de traceur (bas en haut)
42 REAL dx(klon,klev) ! tendance de traceur (bas en haut)
43 !
44 !--flux convectifs mais en variables locales
45 REAL zmfu(klon,klev+1)
46 REAL zmfd(klon,klev+1)
47 REAL zen_u(klon,klev)
48 REAL zde_u(klon,klev)
49 REAL zen_d(klon,klev)
50 REAL zde_d(klon,klev)
51 real zmfe
52 !
53 !--variables locales
54 !--les flux de x sont definis aux 1/2 niveaux
55 !--xu et xd sont definis aux niveaux complets
56 REAL xu(klon,klev) ! q de traceurs dans le panache montant
57 REAL xd(klon,klev) ! q de traceurs dans le panache descendant
58 REAL zmfux(klon,klev+1) ! flux de x dans le panache montant
59 REAL zmfdx(klon,klev+1) ! flux de x dans le panache descendant
60 REAL zmfex(klon,klev+1) ! flux de x dans l'environnement
61 INTEGER i, k
62 REAL zmfmin
63 PARAMETER (zmfmin=1.E-10)
64
65 ! =========================================
66 !
67 !
68 ! Extension des flux UP et DN sur klev+1 niveaux
69 ! =========================================
70 do k=1,klev
71 do i=1,klon
72 zmfu(i,k)=pmfu(i,k)
73 zmfd(i,k)=pmfd(i,k)
74 enddo
75 enddo
76 do i=1,klon
77 zmfu(i,klev+1)=0.
78 zmfd(i,klev+1)=0.
79 enddo
80
81 !--modif pour diagnostiquer les detrainements
82 ! =========================================
83 ! on privilegie l'ajustement de l'entrainement dans l'ascendance.
84
85 do k=1, klev
86 do i=1, klon
87 zen_d(i,k)=pen_d(i,k)
88 zde_u(i,k)=pde_u(i,k)
89 zde_d(i,k) =-zmfd(i,k+1)+zmfd(i,k)+zen_d(i,k)
90 zen_u(i,k) = zmfu(i,k+1)-zmfu(i,k)+zde_u(i,k)
91 enddo
92 enddo
93 !
94 !--calcul des flux dans le panache montant
95 ! =========================================
96 !
97 ! Dans la premiere couche, on prend q comme valeur de qu
98 !
99 do i=1, klon
100 zmfux(i,1)=0.0
101 enddo
102 !
103 ! Autres couches
104 do k=1,klev
105 do i=1, klon
106 if ((zmfu(i,k+1)+zde_u(i,k)).lt.zmfmin) THEN
107 xu(i,k)=x(i,k)
108 else
109 xu(i,k)=(zmfux(i,k)+zen_u(i,k)*x(i,k)) &
110 /(zmfu(i,k+1)+zde_u(i,k))
111 endif
112 zmfux(i,k+1)=zmfu(i,k+1)*xu(i,k)
113 enddo
114 enddo
115 !
116 !--calcul des flux dans le panache descendant
117 ! =========================================
118 !
119 do i=1, klon
120 zmfdx(i,klev+1)=0.0
121 enddo
122 !
123 do k=klev,1,-1
124 do i=1, klon
125 if ((zde_d(i,k)-zmfd(i,k)).lt.zmfmin) THEN
126 xd(i,k)=x(i,k)
127 else
128 xd(i,k)=(zmfdx(i,k+1)-zen_d(i,k)*x(i,k)) / &
129 (zmfd(i,k)-zde_d(i,k))
130 endif
131 zmfdx(i,k)=zmfd(i,k)*xd(i,k)
132 enddo
133 enddo
134 !
135 !--introduction du flux de retour dans l'environnement
136 ! =========================================
137 !
138 do k=2, klev
139 do i=1, klon
140 zmfe=-zmfu(i,k)-zmfd(i,k)
141 if (zmfe.le.0.) then
142 zmfex(i,k)= zmfe*x(i,k)
143 else
144 zmfex(i,k)= zmfe*x(i,k-1)
145 endif
146 enddo
147 enddo
148
149 do i=1, klon
150 zmfex(i,1)=0.
151 zmfex(i,klev+1)=0.
152 enddo
153 !
154 !--calcul final des tendances
155 !
156 do k=1, klev
157 do i=1, klon
158 dx(i,k)=RG/(paprs(i,k)-paprs(i,k+1))*pdtime* &
159 ( zmfux(i,k) - zmfux(i,k+1) + &
160 zmfdx(i,k) - zmfdx(i,k+1) + &
161 zmfex(i,k) - zmfex(i,k+1) )
162 enddo
163 enddo
164
165 end SUBROUTINE nflxtr

  ViewVC Help
Powered by ViewVC 1.1.21