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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10 - (show annotations)
Fri Apr 18 14:45:53 2008 UTC (16 years, 1 month ago) by guez
File size: 4605 byte(s)
Added NetCDF directory "/home/guez/include" in "g95.mk" and
"nag_tools.mk".

Added some "intent" attributes in "PVtheta", "advtrac", "caladvtrac",
"calfis", "diagedyn", "dissip", "vlspltqs", "aeropt", "ajsec",
"calltherm", "clmain", "cltrac", "cltracrn", "concvl", "conema3",
"conflx", "fisrtilp", "newmicro", "nuage", "diagcld1", "diagcld2",
"drag_noro", "lift_noro", "SUGWD", "physiq", "phytrac", "radlwsw", "thermcell".

Removed the case "ierr == 0" in "abort_gcm"; moved call to "histclo"
and messages for end of run from "abort_gcm" to "gcm"; replaced call
to "abort_gcm" in "leapfrog" by exit from outer loop.

In "calfis": removed argument "pp" and variable "unskap"; changed
"pksurcp" from scalar to rank 2; use "pressure_var"; rewrote
computation of "zplev", "zplay", "ztfi", "pcvgt" using "dyn_phy";
added computation of "pls".

Removed unused variable in "dynredem0".

In "exner_hyb": changed "dellta" from scalar to rank 1; replaced call
to "ssum" by call to "sum"; removed variables "xpn" and "xps";
replaced some loops by array expressions.

In "leapfrog": use "pressure_var"; deleted variables "p", "longcles".

Converted common blocks "YOECUMF", "YOEGWD" to modules.

Removed argument "pplay" in "cvltr", "diagetpq", "nflxtr".

Created module "raddimlw" from include file "raddimlw.h".

Corrected call to "new_unit" in "test_disvert".

1 !
2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cltrac.F,v 1.1.1.1 2004/05/19 12:53:07 lmdzadmin Exp $
3 !
4 SUBROUTINE cltrac(dtime,coef,t,tr,flux,paprs,pplay,delp,
5 s d_tr)
6 use dimens_m
7 use dimphy
8 use YOMCST
9 IMPLICIT none
10 c======================================================================
11 c Auteur(s): O. Boucher (LOA/LMD) date: 19961127
12 c inspire de clvent
13 c Objet: diffusion verticale de traceurs avec flux fixe a la surface
14 c ou/et flux du type c-drag
15 c======================================================================
16 c Arguments:
17 c dtime----input-R- intervalle du temps (en second)
18 c coef-----input-R- le coefficient d'echange (m**2/s) l>1
19 c tr-------input-R- la q. de traceurs
20 c flux-----input-R- le flux de traceurs a la surface
21 c paprs----input-R- pression a inter-couche (Pa)
22 c pplay----input-R- pression au milieu de couche (Pa)
23 c delp-----input-R- epaisseur de couche (Pa)
24 c cdrag----input-R- cdrag pour le flux de surface (non active)
25 c tr0------input-R- traceurs a la surface ou dans l'ocean (non active)
26 c d_tr-----output-R- le changement de tr
27 c flux_tr--output-R- flux de tr
28 c======================================================================
29 REAL, intent(in):: dtime
30 REAL coef(klon,klev)
31 REAL, intent(in):: t(klon,klev) ! temperature (K)
32 real tr(klon,klev)
33 REAL, intent(in):: paprs(klon,klev+1)
34 real, intent(in):: pplay(klon,klev)
35 real delp(klon,klev)
36 REAL d_tr(klon,klev)
37 REAL flux(klon), cdrag(klon), tr0(klon)
38 c REAL flux_tr(klon,klev)
39 c======================================================================
40 c======================================================================
41 INTEGER i, k
42 REAL zx_ctr(klon,2:klev)
43 REAL zx_dtr(klon,2:klev)
44 REAL zx_buf(klon)
45 REAL zx_coef(klon,klev)
46 REAL local_tr(klon,klev)
47 REAL zx_alf1(klon), zx_alf2(klon), zx_flux(klon)
48 c======================================================================
49 DO k = 1, klev
50 DO i = 1, klon
51 local_tr(i,k) = tr(i,k)
52 ENDDO
53 ENDDO
54 c
55
56 c======================================================================
57 DO i = 1, klon
58 zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
59 zx_alf2(i) = 1.0 - zx_alf1(i)
60 zx_flux(i) = -flux(i)*dtime*RG
61 c--pour le moment le flux est prescrit
62 c--cdrag et zx_coef(1) vaut 0
63 cdrag(i) = 0.0
64 tr0(i) = 0.0
65 zx_coef(i,1) = cdrag(i)*dtime*RG
66 ENDDO
67 c======================================================================
68 DO k = 2, klev
69 DO i = 1, klon
70 zx_coef(i,k) = coef(i,k)*RG/(pplay(i,k-1)-pplay(i,k))
71 . *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/RD)**2
72 zx_coef(i,k) = zx_coef(i,k)*dtime*RG
73 ENDDO
74 ENDDO
75 c======================================================================
76 DO i = 1, klon
77 zx_buf(i) = delp(i,1) + zx_coef(i,1)*zx_alf1(i) + zx_coef(i,2)
78 zx_ctr(i,2) = (local_tr(i,1)*delp(i,1)+
79 . zx_coef(i,1)*tr0(i)-zx_flux(i))/zx_buf(i)
80 zx_dtr(i,2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1)) /
81 . zx_buf(i)
82 ENDDO
83 c
84 DO k = 3, klev
85 DO i = 1, klon
86 zx_buf(i) = delp(i,k-1) + zx_coef(i,k)
87 . + zx_coef(i,k-1)*(1.-zx_dtr(i,k-1))
88 zx_ctr(i,k) = (local_tr(i,k-1)*delp(i,k-1)
89 . +zx_coef(i,k-1)*zx_ctr(i,k-1) )/zx_buf(i)
90 zx_dtr(i,k) = zx_coef(i,k)/zx_buf(i)
91 ENDDO
92 ENDDO
93 DO i = 1, klon
94 local_tr(i,klev) = ( local_tr(i,klev)*delp(i,klev)
95 . +zx_coef(i,klev)*zx_ctr(i,klev) )
96 . / ( delp(i,klev) + zx_coef(i,klev)
97 . -zx_coef(i,klev)*zx_dtr(i,klev) )
98 ENDDO
99 DO k = klev-1, 1, -1
100 DO i = 1, klon
101 local_tr(i,k) = zx_ctr(i,k+1) + zx_dtr(i,k+1)*local_tr(i,k+1)
102 ENDDO
103 ENDDO
104 c======================================================================
105 c== flux_tr est le flux de traceur (positif vers bas)
106 c DO i = 1, klon
107 c flux_tr(i,1) = zx_coef(i,1)/(RG*dtime)
108 c ENDDO
109 c DO k = 2, klev
110 c DO i = 1, klon
111 c flux_tr(i,k) = zx_coef(i,k)/(RG*dtime)
112 c . * (local_tr(i,k)-local_tr(i,k-1))
113 c ENDDO
114 c ENDDO
115 c======================================================================
116 DO k = 1, klev
117 DO i = 1, klon
118 d_tr(i,k) = local_tr(i,k) - tr(i,k)
119 ENDDO
120 ENDDO
121 c
122 RETURN
123 END

  ViewVC Help
Powered by ViewVC 1.1.21