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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 309 - (show annotations)
Thu Sep 27 14:58:10 2018 UTC (5 years, 8 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 module clvent_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE clvent(u1lay, v1lay, coef, cdrag, t, ven, paprs, pplay, delp, &
8 d_ven, flux_v)
9
10 ! Author: Z. X. Li (LMD/CNRS)
11 ! Date: 1993/08/18
12 ! Objet : diffusion verticale de la vitesse
13
14 ! Library:
15 use nr_util, only: assert
16
17 use comconst, only: dtphys
18 USE dimphy, ONLY: klev
19 USE suphec_m, ONLY: rd, rg
20
21 REAL, intent(in):: u1lay(:), v1lay(:) ! (knon)
22 ! vent de la premiere couche (m / s)
23
24 REAL, intent(in):: coef(:, 2:) ! (knon, 2:klev)
25 ! Coefficient d'echange (m**2 / s) multiplié par le cisaillement du
26 ! vent (dV / dz)
27
28 REAL, intent(in):: cdrag(:) ! (knon) sans unité
29 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
32 ! inter-couche (Pa)
33 real, intent(in):: pplay(:, :) ! (knon, klev) pression au milieu
34 ! de couche (Pa)
35 real, intent(in):: delp(:, :) ! (knon, klev) epaisseur de couche (Pa)
36 REAL, intent(out):: d_ven(:, :) ! (knon, klev) ! le changement de "ven"
37
38 REAL, intent(out):: flux_v(:) ! (knon)
39 ! (diagnostic) flux du vent à la surface, en (kg m / s) / (m**2 s)
40 ! flux_v est le flux de moment angulaire (positif vers bas)
41
42 ! Local:
43 INTEGER k
44 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
50 !------------------------------------------------------------------
51
52 call assert(size(u1lay) == [size(v1lay), size(coef, 1), size(t, 1), &
53 size(ven, 1), size(paprs, 1), size(pplay, 1), size(delp, 1), &
54 size(d_ven, 1), size(flux_v)], "clvent knon")
55
56 zx_coef(:, 1) = cdrag * (1. + SQRT(u1lay**2 + v1lay**2)) * pplay(:, 1) &
57 / (RD * t(:, 1)) * dtphys * RG
58
59 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
63 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 DO k = 3, klev
68 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 ENDDO
74
75 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
80 DO k = klev - 1, 1, - 1
81 local_ven(:, k) = zx_cv(:, k + 1) + zx_dv(:, k + 1) * local_ven(:, k + 1)
82 ENDDO
83
84 flux_v = zx_coef(:, 1) / (RG * dtphys) * local_ven(:, 1)
85 d_ven = local_ven - ven
86
87 END SUBROUTINE clvent
88
89 end module clvent_m

  ViewVC Help
Powered by ViewVC 1.1.21