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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (show annotations)
Thu Jul 26 14:37:37 2012 UTC (11 years, 9 months ago) by guez
File size: 5384 byte(s)
Changed handling of compiler in compilation system.

Removed the prefix letters "y", "p", "t" or "z" in some names of variables.

Replaced calls to NetCDF by calls to NetCDF95.

Extracted "ioget_calendar" procedures from "calendar.f90" into a
separate file.

Extracted to a separate file, "mathop2.f90", procedures that were not
part of the generic interface "mathop" in "mathop.f90".

Removed computation of "dq" in "bilan_dyn", which was not used.

In "iniadvtrac", removed schemes 20 Slopes and 30 Prather. Was not
compatible with declarations of array sizes.

In "clcdrag", "ustarhb", "vdif_kcay", "yamada4" and "coefkz", changed
the size of some arrays from "klon" to "knon".

Removed possible call to "conema3" in "physiq".

Removed unused argument "cd" in "yamada".

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

  ViewVC Help
Powered by ViewVC 1.1.21