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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (hide annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 2 months ago) by guez
Original Path: trunk/phylmd/cltrac.f
File size: 4262 byte(s)
Changed all ".f90" suffixes to ".f".
1 guez 3
2 guez 81 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cltrac.F,v 1.1.1.1 2004/05/19
3     ! 12:53:07 lmdzadmin Exp $
4    
5     SUBROUTINE cltrac(dtime, coef, t, tr, flux, paprs, pplay, delp, d_tr)
6     USE dimens_m
7     USE dimphy
8     USE suphec_m
9     IMPLICIT NONE
10     ! ======================================================================
11     ! Auteur(s): O. Boucher (LOA/LMD) date: 19961127
12     ! inspire de clvent
13     ! Objet: diffusion verticale de traceurs avec flux fixe a la surface
14     ! ou/et flux du type c-drag
15     ! ======================================================================
16     ! Arguments:
17     ! dtime----input-R- intervalle du temps (en second)
18     ! coef-----input-R- le coefficient d'echange (m**2/s) l>1
19     ! tr-------input-R- la q. de traceurs
20     ! flux-----input-R- le flux de traceurs a la surface
21     ! paprs----input-R- pression a inter-couche (Pa)
22     ! pplay----input-R- pression au milieu de couche (Pa)
23     ! delp-----input-R- epaisseur de couche (Pa)
24     ! cdrag----input-R- cdrag pour le flux de surface (non active)
25     ! tr0------input-R- traceurs a la surface ou dans l'ocean (non active)
26     ! d_tr-----output-R- le changement de tr
27     ! flux_tr--output-R- flux de tr
28     ! ======================================================================
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     ! REAL flux_tr(klon,klev)
39     ! ======================================================================
40     ! ======================================================================
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     ! ======================================================================
49     DO k = 1, klev
50     DO i = 1, klon
51     local_tr(i, k) = tr(i, k)
52     END DO
53     END DO
54    
55    
56     ! ======================================================================
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     ! --pour le moment le flux est prescrit
62     ! --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     END DO
67     ! ======================================================================
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     END DO
74     END DO
75     ! ======================================================================
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)+zx_coef(i,1)*tr0(i)-zx_flux(i))/ &
79     zx_buf(i)
80     zx_dtr(i, 2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1))/zx_buf(i)
81     END DO
82    
83     DO k = 3, klev
84     DO i = 1, klon
85     zx_buf(i) = delp(i, k-1) + zx_coef(i, k) + zx_coef(i, k-1)*(1.-zx_dtr(i &
86     ,k-1))
87     zx_ctr(i, k) = (local_tr(i,k-1)*delp(i,k-1)+zx_coef(i,k-1)*zx_ctr(i,k-1 &
88     ))/zx_buf(i)
89     zx_dtr(i, k) = zx_coef(i, k)/zx_buf(i)
90     END DO
91     END DO
92     DO i = 1, klon
93     local_tr(i, klev) = (local_tr(i,klev)*delp(i,klev)+zx_coef(i,klev)*zx_ctr &
94     (i,klev))/(delp(i,klev)+zx_coef(i,klev)-zx_coef(i,klev)*zx_dtr(i,klev))
95     END DO
96     DO k = klev - 1, 1, -1
97     DO i = 1, klon
98     local_tr(i, k) = zx_ctr(i, k+1) + zx_dtr(i, k+1)*local_tr(i, k+1)
99     END DO
100     END DO
101     ! ======================================================================
102     ! == flux_tr est le flux de traceur (positif vers bas)
103     ! DO i = 1, klon
104     ! flux_tr(i,1) = zx_coef(i,1)/(RG*dtime)
105     ! ENDDO
106     ! DO k = 2, klev
107     ! DO i = 1, klon
108     ! flux_tr(i,k) = zx_coef(i,k)/(RG*dtime)
109     ! . * (local_tr(i,k)-local_tr(i,k-1))
110     ! ENDDO
111     ! ENDDO
112     ! ======================================================================
113     DO k = 1, klev
114     DO i = 1, klon
115     d_tr(i, k) = local_tr(i, k) - tr(i, k)
116     END DO
117     END DO
118    
119     RETURN
120     END SUBROUTINE cltrac

  ViewVC Help
Powered by ViewVC 1.1.21