/[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 309 - (hide annotations)
Thu Sep 27 14:58:10 2018 UTC (5 years, 9 months ago) by guez
File size: 3076 byte(s)
Remove variable pourc_* in histins.nc, redundant with fract_*.

In procedure physiq, change the meaning of variable "sens" to avoid
changing the sign several times needlessly. Also the meaning of
variable "sens" in physiq is now the same than the meaning of netCDF
variable "sens". Also the convention for "sens" is now the same than
for radsol, zxfluxlat, and flux_t.

1 guez 62 module clvent_m
2    
3     IMPLICIT none
4    
5     contains
6    
7 guez 298 SUBROUTINE clvent(u1lay, v1lay, coef, cdrag, t, ven, paprs, pplay, delp, &
8     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 309 ! Library:
15 guez 286 use nr_util, only: assert
16    
17 guez 298 use comconst, only: dtphys
18 guez 229 USE dimphy, ONLY: klev
19 guez 62 USE suphec_m, ONLY: rd, rg
20    
21 guez 225 REAL, intent(in):: u1lay(:), v1lay(:) ! (knon)
22 guez 247 ! vent de la premiere couche (m / s)
23 guez 70
24 guez 231 REAL, intent(in):: coef(:, 2:) ! (knon, 2:klev)
25 guez 247 ! Coefficient d'echange (m**2 / s) multiplié par le cisaillement du
26     ! vent (dV / dz)
27 guez 70
28 guez 231 REAL, intent(in):: cdrag(:) ! (knon) sans unité
29 guez 229 REAL, intent(in):: t(:, :) ! (knon, klev) ! temperature (K)
30 guez 247 REAL, intent(in):: ven(:, :) ! (knon, klev) vitesse horizontale (m / s)
31     REAL, intent(in):: paprs(:, :) ! (knon, klev + 1) pression a
32     ! inter-couche (Pa)
33 guez 229 real, intent(in):: pplay(:, :) ! (knon, klev) pression au milieu
34 guez 247 ! de couche (Pa)
35 guez 229 real, intent(in):: delp(:, :) ! (knon, klev) epaisseur de couche (Pa)
36     REAL, intent(out):: d_ven(:, :) ! (knon, klev) ! le changement de "ven"
37 guez 62
38 guez 206 REAL, intent(out):: flux_v(:) ! (knon)
39 guez 247 ! (diagnostic) flux du vent à la surface, en (kg m / s) / (m**2 s)
40 guez 206 ! flux_v est le flux de moment angulaire (positif vers bas)
41    
42 guez 70 ! Local:
43 guez 247 INTEGER k
44 guez 229 REAL zx_cv(size(u1lay), 2:klev) ! (knon, 2:klev)
45     REAL zx_dv(size(u1lay), 2:klev) ! (knon, 2:klev)
46     REAL zx_buf(size(u1lay)) ! (knon)
47     REAL zx_coef(size(u1lay), klev) ! (knon, klev)
48     REAL local_ven(size(u1lay), klev) ! (knon, klev)
49 guez 62
50     !------------------------------------------------------------------
51    
52 guez 247 call assert(size(u1lay) == [size(v1lay), size(coef, 1), size(t, 1), &
53 guez 229 size(ven, 1), size(paprs, 1), size(pplay, 1), size(delp, 1), &
54     size(d_ven, 1), size(flux_v)], "clvent knon")
55 guez 62
56 guez 247 zx_coef(:, 1) = cdrag * (1. + SQRT(u1lay**2 + v1lay**2)) * pplay(:, 1) &
57 guez 298 / (RD * t(:, 1)) * dtphys * RG
58 guez 62
59 guez 309 forall (k = 2:klev) zx_coef(:, k) = coef(:, k) * RG / (pplay(:, k - 1) &
60     - pplay(:, k)) * (paprs(:, k) * 2 / (t(:, k) + t(:, k - 1)) / RD)**2 &
61     * dtphys * RG
62 guez 62
63 guez 247 zx_buf = delp(:, 1) + zx_coef(:, 1) + zx_coef(:, 2)
64     zx_cv(:, 2) = ven(:, 1) * delp(:, 1) / zx_buf
65     zx_dv(:, 2) = zx_coef(:, 2) / zx_buf
66    
67 guez 62 DO k = 3, klev
68 guez 247 zx_buf = delp(:, k - 1) + zx_coef(:, k) &
69     + zx_coef(:, k - 1) * (1. - zx_dv(:, k - 1))
70     zx_cv(:, k) = (ven(:, k - 1) * delp(:, k - 1) &
71     + zx_coef(:, k - 1) * zx_cv(:, k - 1)) / zx_buf
72     zx_dv(:, k) = zx_coef(:, k) / zx_buf
73 guez 62 ENDDO
74    
75 guez 247 local_ven(:, klev) = (ven(:, klev) * delp(:, klev) &
76     + zx_coef(:, klev) * zx_cv(:, klev)) &
77     / (delp(:, klev) + zx_coef(:, klev) &
78     - zx_coef(:, klev) * zx_dv(:, klev))
79 guez 62
80 guez 247 DO k = klev - 1, 1, - 1
81     local_ven(:, k) = zx_cv(:, k + 1) + zx_dv(:, k + 1) * local_ven(:, k + 1)
82 guez 62 ENDDO
83    
84 guez 298 flux_v = zx_coef(:, 1) / (RG * dtphys) * local_ven(:, 1)
85 guez 247 d_ven = local_ven - ven
86    
87 guez 62 END SUBROUTINE clvent
88    
89     end module clvent_m

  ViewVC Help
Powered by ViewVC 1.1.21