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

Diff of /trunk/phylmd/clvent.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 227 by guez, Thu Nov 2 15:47:03 2017 UTC revision 229 by guez, Mon Nov 6 17:20:45 2017 UTC
# Line 4  module clvent_m Line 4  module clvent_m
4    
5  contains  contains
6    
7    SUBROUTINE clvent(knon, dtime, u1lay, v1lay, coef, t, ven, paprs, pplay, &    SUBROUTINE clvent(dtime, u1lay, v1lay, coef, t, ven, paprs, pplay, delp, &
8         delp, d_ven, flux_v)         d_ven, flux_v)
9    
10      ! Author: Z. X. Li (LMD/CNRS)      ! Author: Z. X. Li (LMD/CNRS)
11      ! Date: 1993/08/18      ! Date: 1993/08/18
12      ! Objet : diffusion verticale de la vitesse      ! Objet : diffusion verticale de la vitesse
13    
14      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev
15        use nr_util, only: assert_eq
16      USE suphec_m, ONLY: rd, rg      USE suphec_m, ONLY: rd, rg
17    
     INTEGER knon  
18      REAL, intent(in):: dtime ! intervalle de temps (en s)      REAL, intent(in):: dtime ! intervalle de temps (en s)
19    
20      REAL, intent(in):: u1lay(:), v1lay(:) ! (knon)      REAL, intent(in):: u1lay(:), v1lay(:) ! (knon)
# Line 25  contains Line 25  contains
25      ! vent (dV/dz). La première valeur indique la valeur de Cdrag (sans      ! vent (dV/dz). La première valeur indique la valeur de Cdrag (sans
26      ! unité).      ! unité).
27    
28      REAL, intent(in):: t(klon, klev), ven(klon, klev)      REAL, intent(in):: t(:, :) ! (knon, klev) ! temperature (K)
29      ! t--------input-R- temperature (K)      REAL, intent(in):: ven(:, :) ! (knon, klev) vitesse horizontale (m/s)
30      ! ven------input-R- vitesse horizontale (m/s)      REAL, intent(in):: paprs(:, :) ! (knon, klev+1) pression a inter-couche (Pa)
31      REAL paprs(klon, klev+1), pplay(klon, klev), delp(klon, klev)      real, intent(in):: pplay(:, :) ! (knon, klev) pression au milieu
32      ! paprs----input-R- pression a inter-couche (Pa)                                     ! de couche (Pa)
33      ! pplay----input-R- pression au milieu de couche (Pa)      real, intent(in):: delp(:, :) ! (knon, klev) epaisseur de couche (Pa)
34      ! delp-----input-R- epaisseur de couche (Pa)      REAL, intent(out):: d_ven(:, :) ! (knon, klev) ! le changement de "ven"
     REAL d_ven(klon, klev)  
     ! d_ven----output-R- le changement de "ven"  
35    
36      REAL, intent(out):: flux_v(:) ! (knon)      REAL, intent(out):: flux_v(:) ! (knon)
37      ! (diagnostic) flux du vent à la surface, en (kg m/s)/(m**2 s)      ! (diagnostic) flux du vent à la surface, en (kg m/s)/(m**2 s)
38      ! flux_v est le flux de moment angulaire (positif vers bas)      ! flux_v est le flux de moment angulaire (positif vers bas)
39    
40      ! Local:      ! Local:
41      INTEGER i, k      INTEGER knon, i, k
42      REAL zx_cv(klon, 2:klev)      REAL zx_cv(size(u1lay), 2:klev) ! (knon, 2:klev)
43      REAL zx_dv(klon, 2:klev)      REAL zx_dv(size(u1lay), 2:klev) ! (knon, 2:klev)
44      REAL zx_buf(klon)      REAL zx_buf(size(u1lay)) ! (knon)
45      REAL zx_coef(klon, klev)      REAL zx_coef(size(u1lay), klev) ! (knon, klev)
46      REAL local_ven(klon, klev)      REAL local_ven(size(u1lay), klev) ! (knon, klev)
     REAL zx_alf1(klon), zx_alf2(klon)  
47    
48      !------------------------------------------------------------------      !------------------------------------------------------------------
49    
50      DO k = 1, klev      knon = assert_eq([size(u1lay), size(v1lay), size(coef, 1), size(t, 1), &
51         DO i = 1, knon           size(ven, 1), size(paprs, 1), size(pplay, 1), size(delp, 1), &
52            local_ven(i, k) = ven(i, k)           size(d_ven, 1), size(flux_v)], "clvent knon")
53         ENDDO      local_ven = ven
     ENDDO  
54    
55      DO i = 1, knon      DO i = 1, knon
        zx_alf1(i) = 1.0  
        zx_alf2(i) = 1.0 - zx_alf1(i)  
56         zx_coef(i, 1) = coef(i, 1) * (1. + SQRT(u1lay(i)**2 + v1lay(i)**2)) &         zx_coef(i, 1) = coef(i, 1) * (1. + SQRT(u1lay(i)**2 + v1lay(i)**2)) &
57              * pplay(i, 1) / (RD * t(i, 1))              * pplay(i, 1) / (RD * t(i, 1)) * dtime * RG
        zx_coef(i, 1) = zx_coef(i, 1) * dtime * RG  
58      ENDDO      ENDDO
59    
60      DO k = 2, klev      DO k = 2, klev
# Line 73  contains Line 66  contains
66      ENDDO      ENDDO
67    
68      DO i = 1, knon      DO i = 1, knon
69         zx_buf(i) = delp(i, 1) + zx_coef(i, 1)*zx_alf1(i)+zx_coef(i, 2)         zx_buf(i) = delp(i, 1) + zx_coef(i, 1)+zx_coef(i, 2)
70         zx_cv(i, 2) = local_ven(i, 1)*delp(i, 1) / zx_buf(i)         zx_cv(i, 2) = local_ven(i, 1)*delp(i, 1) / zx_buf(i)
71         zx_dv(i, 2) = (zx_coef(i, 2)-zx_alf2(i)*zx_coef(i, 1)) &         zx_dv(i, 2) = zx_coef(i, 2) &
72              /zx_buf(i)              /zx_buf(i)
73      ENDDO      ENDDO
74      DO k = 3, klev      DO k = 3, klev
# Line 101  contains Line 94  contains
94    
95      DO i = 1, knon      DO i = 1, knon
96         flux_v(i) = zx_coef(i, 1)/(RG*dtime) &         flux_v(i) = zx_coef(i, 1)/(RG*dtime) &
97              *(local_ven(i, 1)*zx_alf1(i) &              *local_ven(i, 1)
             +local_ven(i, 2)*zx_alf2(i))  
98      ENDDO      ENDDO
99    
100      DO k = 1, klev      DO k = 1, klev

Legend:
Removed from v.227  
changed lines
  Added in v.229

  ViewVC Help
Powered by ViewVC 1.1.21