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

Annotation of /trunk/phylmd/cltrac.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 328 - (hide annotations)
Thu Jun 13 14:40:06 2019 UTC (4 years, 11 months ago) by guez
File size: 3250 byte(s)
Change all `.f` suffixes to `.f90`. (The opposite was done in revision
82.)  Because of change of philosopy in GNUmakefile: we already had a
rewritten rule for `.f`, so it does not make the makefile longer to
replace it by a rule for `.f90`. And it spares us options of
makedepf90 and of the compiler. Also we prepare the way for a simpler
`CMakeLists.txt`.

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 guez 270 ! From LMDZ4/libf/phylmd/cltrac.F, version 1.1.1.1 2004/05/19 12:53:07
10 guez 120
11 guez 270 USE dimphy, only: klon, klev
12     USE suphec_m, only: rd, rg
13    
14     ! Auteur : O. Boucher (LOA/LMD), date: 1996/11/27
15     ! inspir\'e de clvent
16    
17     ! Objet: diffusion verticale de traceurs avec flux fix\'e \`a la
18     ! surface ou flux du type c-drag
19    
20     REAL, INTENT(IN):: dtime ! intervalle du temps (en second)
21    
22     REAL, INTENT(IN):: coef(:, 2:) ! (klon, 2:klev)
23     ! coefficient d'echange (m**2/s) l>1
24    
25     REAL, INTENT(IN):: t(klon, klev) ! temperature (K)
26     REAL, INTENT(IN):: tr(klon, klev) ! la q. de traceurs
27     REAL, INTENT(IN):: flux(klon) ! le flux de traceurs a la surface
28     REAL, INTENT(IN):: paprs(klon, klev+1) ! pression a inter-couche (Pa)
29     REAL, INTENT(IN):: pplay(klon, klev) ! pression au milieu de couche (Pa)
30     REAL, INTENT(IN):: delp(klon, klev) ! epaisseur de couche (Pa)
31     REAL, INTENT(out):: d_tr(klon, klev) ! le changement de tr
32    
33     ! Local:
34    
35     real tr0(klon)
36     ! tr0 traceurs a la surface ou dans l'ocean (non active)
37    
38 guez 120 INTEGER i, k
39     REAL zx_ctr(klon, 2:klev)
40     REAL zx_dtr(klon, 2:klev)
41     REAL zx_buf(klon)
42     REAL zx_coef(klon, klev)
43     REAL local_tr(klon, klev)
44     REAL zx_alf1(klon), zx_alf2(klon), zx_flux(klon)
45 guez 270
46     !-----------------------------------------------------------------------
47    
48 guez 120 DO k = 1, klev
49     DO i = 1, klon
50     local_tr(i, k) = tr(i, k)
51     END DO
52 guez 81 END DO
53    
54     DO i = 1, klon
55 guez 270 zx_alf1(i) = (paprs(i, 1)-pplay(i, 2))/(pplay(i, 1)-pplay(i, 2))
56 guez 120 zx_alf2(i) = 1.0 - zx_alf1(i)
57     zx_flux(i) = -flux(i)*dtime*rg
58 guez 270 ! pour le moment le flux est prescrit
59     ! zx_coef(1) vaut 0
60 guez 120 tr0(i) = 0.0
61 guez 270 zx_coef(i, 1) = 0.
62 guez 81 END DO
63 guez 270
64 guez 120 DO k = 2, klev
65     DO i = 1, klon
66 guez 270 zx_coef(i, k) = coef(i, k)*rg/(pplay(i, k-1)-pplay(i, k))* &
67     (paprs(i, k)*2/(t(i, k)+t(i, k-1))/rd)**2
68 guez 120 zx_coef(i, k) = zx_coef(i, k)*dtime*rg
69     END DO
70     END DO
71 guez 270
72 guez 81 DO i = 1, klon
73 guez 120 zx_buf(i) = delp(i, 1) + zx_coef(i, 1)*zx_alf1(i) + zx_coef(i, 2)
74 guez 270 zx_ctr(i, 2) = (local_tr(i, 1)*delp(i, 1)+zx_coef(i, 1)*tr0(i)-zx_flux(i))/ &
75 guez 120 zx_buf(i)
76 guez 270 zx_dtr(i, 2) = (zx_coef(i, 2)-zx_alf2(i)*zx_coef(i, 1))/zx_buf(i)
77 guez 81 END DO
78 guez 120
79     DO k = 3, klev
80     DO i = 1, klon
81     zx_buf(i) = delp(i, k-1) + zx_coef(i, k) + zx_coef(i, k-1)*(1.-zx_dtr(i &
82 guez 270 , k-1))
83     zx_ctr(i, k) = (local_tr(i, k-1)*delp(i, k-1)+zx_coef(i, k-1)*zx_ctr(i, k-1 &
84 guez 120 ))/zx_buf(i)
85     zx_dtr(i, k) = zx_coef(i, k)/zx_buf(i)
86     END DO
87     END DO
88 guez 81 DO i = 1, klon
89 guez 270 local_tr(i, klev) = (local_tr(i, klev)*delp(i, klev)+zx_coef(i, klev)*zx_ctr &
90     (i, klev))/(delp(i, klev)+zx_coef(i, klev)-zx_coef(i, klev)*zx_dtr(i, klev))
91 guez 81 END DO
92 guez 120 DO k = klev - 1, 1, -1
93     DO i = 1, klon
94     local_tr(i, k) = zx_ctr(i, k+1) + zx_dtr(i, k+1)*local_tr(i, k+1)
95     END DO
96     END DO
97 guez 270
98 guez 120 DO k = 1, klev
99     DO i = 1, klon
100     d_tr(i, k) = local_tr(i, k) - tr(i, k)
101     END DO
102     END DO
103 guez 81
104 guez 120 RETURN
105     END SUBROUTINE cltrac
106    
107     end module cltrac_m

  ViewVC Help
Powered by ViewVC 1.1.21