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

Annotation of /trunk/phylmd/nflxtr.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (hide annotations)
Thu Jul 26 14:37:37 2012 UTC (11 years, 10 months ago) by guez
Original Path: trunk/libf/phylmd/nflxtr.f
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 guez 3 !
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 guez 10 . paprs,x,dx)
6 guez 3 use dimens_m
7     use dimphy
8 guez 38 use SUPHEC_M
9 guez 10 use yoecumf
10 guez 3 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 guez 10 c mais pas pour les entrees x, paprs !!!!
22 guez 3 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 guez 7 REAL, intent(in):: pdtime
29 guez 3 c--les flux sont definis au 1/2 niveaux
30     c--pmfu(klev+1) et pmfd(klev+1) sont implicitement nuls
31 guez 62
32     REAL, intent(in):: pmfu(klon,klev)
33     ! flux de masse dans le panache montant
34    
35 guez 3 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