My Project
Main Page
Data Types List
Files
File List
File Members
All
Classes
Files
Functions
Variables
Macros
nflxtr.F90
Go to the documentation of this file.
1
!
2
! $Id $
3
!
4
SUBROUTINE
nflxtr
(pdtime,pmfu,pmfd,pen_u,pde_u,pen_d,pde_d,pplay,paprs,x,dx)
5
USE
dimphy
6
IMPLICIT NONE
7
!=====================================================================
8
! Objet : Melange convectif de traceurs a partir des flux de masse
9
! Date : 13/12/1996 -- 13/01/97
10
! Auteur: O. Boucher (LOA) sur inspiration de Z. X. Li (LMD),
11
! Brinkop et Sausen (1996) et Boucher et al. (1996).
12
! ATTENTION : meme si cette routine se veut la plus generale possible,
13
! elle a herite de certaines notations et conventions du
14
! schema de Tiedtke (1993).
15
! 1. En particulier, les couches sont numerotees de haut en bas !!!
16
! Ceci est valable pour les flux
17
! mais pas pour les entrees x, pplay, paprs !!!!
18
! 2. pmfu est positif, pmfd est negatif
19
! 3. Tous les flux d'entrainements et de detrainements sont positifs
20
! contrairement au schema de Tiedtke d'ou les changements de signe!!!!
21
!=====================================================================
22
!
23
include
"YOMCST.h"
24
include
"YOECUMF.h"
25
26
REAL
,
INTENT(IN)
:: pdtime
! pdtphys
27
!
28
! les flux sont definis au 1/2 niveaux
29
! => pmfu(klev+1) et pmfd(klev+1) sont implicitement nuls
30
!
31
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
:: pmfu
! flux de masse dans le panache montant
32
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
:: pmfd
! flux de masse dans le panache descendant
33
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
:: pen_u
! flux entraine dans le panache montant
34
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
:: pde_u
! flux detraine dans le panache montant
35
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
:: pen_d
! flux entraine dans le panache descendant
36
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
:: pde_d
! flux detraine dans le panache descendant
37
38
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
::
pplay
! pression aux couches (bas en haut)
39
REAL
,
DIMENSION(klon,klev+1)
,
INTENT(IN)
:: paprs
! pression aux 1/2 couches (bas en haut)
40
REAL
,
DIMENSION(klon,klev)
,
INTENT(IN)
::
x
! q de traceur (bas en haut)
41
REAL
,
DIMENSION(klon,klev)
,
INTENT(INOUT)
:: dx
! tendance de traceur (bas en haut)
42
43
! flux convectifs mais en variables locales
44
REAL
,
DIMENSION(klon,klev+1)
:: zmfu
! copie de pmfu avec klev+1 = 0
45
REAL
,
DIMENSION(klon,klev+1)
:: zmfd
! copie de pmfd avec klev+1 = 0
46
REAL
,
DIMENSION(klon,klev)
:: zen_u
47
REAL
,
DIMENSION(klon,klev)
:: zde_u
48
REAL
,
DIMENSION(klon,klev)
:: zen_d
49
REAL
,
DIMENSION(klon,klev)
:: zde_d
50
REAL
:: zmfe
51
52
! variables locales
53
! les flux de x sont definis aux 1/2 niveaux
54
! xu et xd sont definis aux niveaux complets
55
REAL
,
DIMENSION(klon,klev)
:: xu
! q de traceurs dans le panache montant
56
REAL
,
DIMENSION(klon,klev)
:: xd
! q de traceurs dans le panache descendant
57
REAL
,
DIMENSION(klon,klev+1)
:: zmfux
! flux de x dans le panache montant
58
REAL
,
DIMENSION(klon,klev+1)
:: zmfdx
! flux de x dans le panache descendant
59
REAL
,
DIMENSION(klon,klev+1)
:: zmfex
! flux de x dans l'environnement
60
INTEGER
::
i
,
k
61
REAL
,
PARAMETER
:: zmfmin=1.e-10
62
63
! ==============================================
64
! Extension des flux UP et DN sur klev+1 niveaux
65
! ==============================================
66
DO
k
=1,
klev
67
DO
i
=1,klon
68
zmfu(
i
,
k
)=pmfu(
i
,
k
)
69
zmfd(
i
,
k
)=pmfd(
i
,
k
)
70
ENDDO
71
ENDDO
72
DO
i
=1,klon
73
zmfu(
i
,
klev
+1)=0.
74
zmfd(
i
,
klev
+1)=0.
75
ENDDO
76
! ==========================================
77
! modif pour diagnostiquer les detrainements
78
! ==========================================
79
! on privilegie l'ajustement de l'entrainement dans l'ascendance.
80
81
DO
k
=1,
klev
82
DO
i
=1, klon
83
zen_d(
i
,
k
)=pen_d(
i
,
k
)
84
zde_u(
i
,
k
)=pde_u(
i
,
k
)
85
zde_d(
i
,
k
) =-zmfd(
i
,
k
+1)+zmfd(
i
,
k
)+zen_d(
i
,
k
)
86
zen_u(
i
,
k
) = zmfu(
i
,
k
+1)-zmfu(
i
,
k
)+zde_u(
i
,
k
)
87
ENDDO
88
ENDDO
89
! =========================================
90
! calcul des flux dans le panache montant
91
! =========================================
92
!
93
! Dans la premiere couche, on prend q comme valeur de qu
94
95
DO
i
=1, klon
96
zmfux(
i
,1)=0.0
97
ENDDO
98
99
! Autres couches
100
DO
k
=1,
klev
101
DO
i
=1, klon
102
IF
((zmfu(
i
,
k
+1)+zde_u(
i
,
k
)).lt.zmfmin)
THEN
103
xu(
i
,
k
)=
x
(
i
,
k
)
104
ELSE
105
xu(
i
,
k
)=(zmfux(
i
,
k
)+zen_u(
i
,
k
)*
x
(
i
,
k
))/(zmfu(
i
,
k
+1)+zde_u(
i
,
k
))
106
ENDIF
107
zmfux(
i
,
k
+1)=zmfu(
i
,
k
+1)*xu(
i
,
k
)
108
ENDDO
109
ENDDO
110
! ==========================================
111
! calcul des flux dans le panache descendant
112
! ==========================================
113
114
DO
i
=1, klon
115
zmfdx(
i
,
klev
+1)=0.0
116
ENDDO
117
118
DO
k
=
klev
,1,-1
119
DO
i
=1, klon
120
IF
((zde_d(
i
,
k
)-zmfd(
i
,
k
)).lt.zmfmin)
THEN
121
xd(
i
,
k
)=
x
(
i
,
k
)
122
ELSE
123
xd(
i
,
k
)=(zmfdx(
i
,
k
+1)-zen_d(
i
,
k
)*
x
(
i
,
k
))/(zmfd(
i
,
k
)-zde_d(
i
,
k
))
124
ENDIF
125
zmfdx(
i
,
k
)=zmfd(
i
,
k
)*xd(
i
,
k
)
126
ENDDO
127
ENDDO
128
! ===================================================
129
! introduction du flux de retour dans l'environnement
130
! ===================================================
131
132
DO
k
=2,
klev
133
DO
i
=1, klon
134
zmfe=-zmfu(
i
,
k
)-zmfd(
i
,
k
)
135
IF
(zmfe.le.0.)
then
136
zmfex(
i
,
k
)= zmfe*
x
(
i
,
k
)
137
ELSE
138
zmfex(
i
,
k
)= zmfe*
x
(
i
,
k
-1)
139
ENDIF
140
ENDDO
141
ENDDO
142
143
DO
i
=1, klon
144
zmfex(
i
,1)=0.
145
zmfex(
i
,
klev
+1)=0.
146
ENDDO
147
! ==========================
148
! calcul final des tendances
149
! ==========================
150
DO
k
=1,
klev
151
DO
i
=1, klon
152
dx(
i
,
k
)=rg/(paprs(
i
,
k
)-paprs(
i
,
k
+1))*pdtime* &
153
( zmfux(
i
,
k
) - zmfux(
i
,
k
+1) + &
154
zmfdx(
i
,
k
) - zmfdx(
i
,
k
+1) + &
155
zmfex(
i
,
k
) - zmfex(
i
,
k
+1) )
156
ENDDO
157
ENDDO
158
159
END SUBROUTINE
nflxtr
libf
phylmd
nflxtr.F90
Generated on Fri Jun 28 2013 15:59:26 for My Project by
1.8.1.2