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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (show annotations)
Thu Jan 6 17:52:19 2011 UTC (13 years, 4 months ago) by guez
File size: 4607 byte(s)
Extracted ASCII art from "inigeom" into a separate text file in the
documentation.

"test_disvert" now creates a separate file for layer thicknesses.

Moved variables from module "yomcst" to module "suphec_m" because this
is where those variables are defined. Kept in "yomcst" only parameters
of Earth orbit. Gave the attribute "parameter" to some variables of
module "suphec_m".

Variables of module "yoethf" were defined in procedure "suphec". Moved
these definitions to a new procedure "yoethf" in module "yoethf_m".

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 SUPHEC_M
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