/[lmdze]/trunk/phylmd/Interface_surf/clvent.f
ViewVC logotype

Annotation of /trunk/phylmd/Interface_surf/clvent.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 231 - (hide annotations)
Mon Nov 6 18:00:54 2017 UTC (6 years, 6 months ago) by guez
Original Path: trunk/Sources/phylmd/clvent.f
File size: 3567 byte(s)
Use separate variables for eddy diffusion and drag coefficient in
clvent (following LMDZ).

1 guez 62 module clvent_m
2    
3     IMPLICIT none
4    
5     contains
6    
7 guez 231 SUBROUTINE clvent(dtime, u1lay, v1lay, coef, cdrag, t, ven, paprs, pplay, &
8     delp, d_ven, flux_v)
9 guez 62
10 guez 70 ! Author: Z. X. Li (LMD/CNRS)
11     ! Date: 1993/08/18
12 guez 62 ! Objet : diffusion verticale de la vitesse
13    
14 guez 229 USE dimphy, ONLY: klev
15     use nr_util, only: assert_eq
16 guez 62 USE suphec_m, ONLY: rd, rg
17    
18 guez 202 REAL, intent(in):: dtime ! intervalle de temps (en s)
19 guez 70
20 guez 225 REAL, intent(in):: u1lay(:), v1lay(:) ! (knon)
21     ! vent de la premiere couche (m/s)
22 guez 70
23 guez 231 REAL, intent(in):: coef(:, 2:) ! (knon, 2:klev)
24 guez 70 ! Coefficient d'echange (m**2/s) multiplié par le cisaillement du
25 guez 231 ! vent (dV/dz)
26 guez 70
27 guez 231 REAL, intent(in):: cdrag(:) ! (knon) sans unité
28    
29 guez 229 REAL, intent(in):: t(:, :) ! (knon, klev) ! temperature (K)
30     REAL, intent(in):: ven(:, :) ! (knon, klev) vitesse horizontale (m/s)
31     REAL, intent(in):: paprs(:, :) ! (knon, klev+1) pression a inter-couche (Pa)
32     real, intent(in):: pplay(:, :) ! (knon, klev) pression au milieu
33     ! de couche (Pa)
34     real, intent(in):: delp(:, :) ! (knon, klev) epaisseur de couche (Pa)
35     REAL, intent(out):: d_ven(:, :) ! (knon, klev) ! le changement de "ven"
36 guez 62
37 guez 206 REAL, intent(out):: flux_v(:) ! (knon)
38     ! (diagnostic) flux du vent à la surface, en (kg m/s)/(m**2 s)
39     ! flux_v est le flux de moment angulaire (positif vers bas)
40    
41 guez 70 ! Local:
42 guez 229 INTEGER knon, i, k
43     REAL zx_cv(size(u1lay), 2:klev) ! (knon, 2:klev)
44     REAL zx_dv(size(u1lay), 2:klev) ! (knon, 2:klev)
45     REAL zx_buf(size(u1lay)) ! (knon)
46     REAL zx_coef(size(u1lay), klev) ! (knon, klev)
47     REAL local_ven(size(u1lay), klev) ! (knon, klev)
48 guez 62
49     !------------------------------------------------------------------
50    
51 guez 229 knon = assert_eq([size(u1lay), size(v1lay), size(coef, 1), size(t, 1), &
52     size(ven, 1), size(paprs, 1), size(pplay, 1), size(delp, 1), &
53     size(d_ven, 1), size(flux_v)], "clvent knon")
54     local_ven = ven
55 guez 62
56     DO i = 1, knon
57 guez 231 zx_coef(i, 1) = cdrag(i) * (1. + SQRT(u1lay(i)**2 + v1lay(i)**2)) &
58 guez 229 * pplay(i, 1) / (RD * t(i, 1)) * dtime * RG
59 guez 62 ENDDO
60    
61     DO k = 2, klev
62     DO i = 1, knon
63 guez 70 zx_coef(i, k) = coef(i, k) * RG / (pplay(i, k-1) - pplay(i, k)) &
64     * (paprs(i, k) * 2 / (t(i, k) + t(i, k - 1)) / RD)**2
65     zx_coef(i, k) = zx_coef(i, k) * dtime * RG
66 guez 62 ENDDO
67     ENDDO
68    
69     DO i = 1, knon
70 guez 229 zx_buf(i) = delp(i, 1) + zx_coef(i, 1)+zx_coef(i, 2)
71 guez 62 zx_cv(i, 2) = local_ven(i, 1)*delp(i, 1) / zx_buf(i)
72 guez 229 zx_dv(i, 2) = zx_coef(i, 2) &
73 guez 62 /zx_buf(i)
74     ENDDO
75     DO k = 3, klev
76     DO i = 1, knon
77     zx_buf(i) = delp(i, k-1) + zx_coef(i, k) &
78     + zx_coef(i, k-1)*(1.-zx_dv(i, k-1))
79     zx_cv(i, k) = (local_ven(i, k-1)*delp(i, k-1) &
80     +zx_coef(i, k-1)*zx_cv(i, k-1) )/zx_buf(i)
81     zx_dv(i, k) = zx_coef(i, k)/zx_buf(i)
82     ENDDO
83     ENDDO
84     DO i = 1, knon
85     local_ven(i, klev) = ( local_ven(i, klev)*delp(i, klev) &
86     +zx_coef(i, klev)*zx_cv(i, klev) ) &
87     / ( delp(i, klev) + zx_coef(i, klev) &
88     -zx_coef(i, klev)*zx_dv(i, klev) )
89     ENDDO
90     DO k = klev-1, 1, -1
91     DO i = 1, knon
92     local_ven(i, k) = zx_cv(i, k+1) + zx_dv(i, k+1)*local_ven(i, k+1)
93     ENDDO
94     ENDDO
95    
96     DO i = 1, knon
97 guez 206 flux_v(i) = zx_coef(i, 1)/(RG*dtime) &
98 guez 229 *local_ven(i, 1)
99 guez 62 ENDDO
100    
101     DO k = 1, klev
102     DO i = 1, knon
103     d_ven(i, k) = local_ven(i, k) - ven(i, k)
104     ENDDO
105     ENDDO
106    
107     END SUBROUTINE clvent
108    
109     end module clvent_m

  ViewVC Help
Powered by ViewVC 1.1.21