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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (hide annotations)
Mon Mar 31 12:24:17 2008 UTC (16 years, 2 months ago) by guez
Original Path: trunk/libf/phylmd/nflxtr.f
File size: 5445 byte(s)
This revision is not in working order. Pending some moving of files.

Important changes. In the program "etat0_lim": ozone coefficients from
Mobidic are regridded in time instead of pressure ; consequences in
"etat0". In the program "gcm", ozone coefficients from Mobidic are
read once per day only for the current day and regridded in pressure ;
consequences in "o3_chem_m", "regr_pr_coefoz", "phytrac" and
"regr_pr_comb_coefoz_m".

NetCDF95 is a library and does not export NetCDF.

New variables "nag_gl_options", "nag_fcalls_options" and
"nag_cross_options" in "nag_tools.mk".

"check_coefoz.jnl" rewritten entirely for new version of
"coefoz_LMDZ.nc".

Target "obj_etat0_lim" moved from "GNUmakefile" to "nag_rules.mk".

Added some "intent" attributes in "calfis", "clmain", "clqh",
"cltrac", "cltracrn", "cvltr", "ini_undefSTD", "moy_undefSTD",
"nflxtr", "phystokenc", "phytrac", "readsulfate", "readsulfate_preind"
and "undefSTD".

In "dynetat0", "dynredem0" and "gcm", "phis" has rank 2 instead of
1. "phis" has assumed shape in "dynredem0".

Added module containing "dynredem0". Changed some calls with NetCDF
Fortran 77 interface to calls with NetCDF95 interface.

Replaced calls to "ssum" by calls to "sum" in "inigeom".

In "make.sh", new option "-c" to change compiler.

In "aaam_bud", argument "rjour" deleted.

In "physiq": renamed some variables; deleted variable "xjour".

In "phytrac": renamed some variables; new argument "lmt_pas".

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

  ViewVC Help
Powered by ViewVC 1.1.21