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

Annotation of /trunk/phylmd/cltrac.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21