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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (show annotations)
Mon Mar 31 12:24:17 2008 UTC (16 years, 1 month ago) by guez
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 !
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 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 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