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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 230 - (show annotations)
Mon Nov 6 17:47:03 2017 UTC (6 years, 6 months ago) by guez
File size: 4574 byte(s)
We use only coef(:, 2:) in cltrac.

1 module cltrac_m
2
3 IMPLICIT NONE
4
5 contains
6
7 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(:, 2:) ! (klon, 2: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 END DO
58
59
60 ! ======================================================================
61 DO i = 1, klon
62 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 END DO
71 ! ======================================================================
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 DO i = 1, klon
81 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 END DO
86
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 DO i = 1, klon
97 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 END DO
100 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
123 RETURN
124 END SUBROUTINE cltrac
125
126 end module cltrac_m

  ViewVC Help
Powered by ViewVC 1.1.21