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

Diff of /trunk/phylmd/clvent.f

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

trunk/libf/phylmd/clvent.f90 revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC trunk/Sources/phylmd/clvent.f revision 231 by guez, Mon Nov 6 18:00:54 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, cdrag, t, ven, paprs, pplay, &
8         delp, d_ven, flux_v)         delp, 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    
18      INTEGER knon      REAL, intent(in):: dtime ! intervalle de temps (en s)
     REAL, intent(in):: dtime  
     ! dtime----input-R- intervalle du temps (en second)  
   
     REAL u1lay(klon), v1lay(klon)  
     ! u1lay----input-R- vent u de la premiere couche (m/s)  
     ! v1lay----input-R- vent v de la premiere couche (m/s)  
19    
20      REAL, intent(in):: coef(:, :) ! (knon, klev)      REAL, intent(in):: u1lay(:), v1lay(:) ! (knon)
21        ! vent de la premiere couche (m/s)
22    
23        REAL, intent(in):: coef(:, 2:) ! (knon, 2:klev)
24      ! Coefficient d'echange (m**2/s) multiplié par le cisaillement du      ! Coefficient d'echange (m**2/s) multiplié par le cisaillement du
25      ! vent (dV/dz). La première valeur indique la valeur de Cdrag (sans      ! vent (dV/dz)
26      ! unité).  
27        REAL, intent(in):: cdrag(:) ! (knon) sans unité
28    
29      REAL t(klon, klev), ven(klon, klev)      REAL, intent(in):: t(:, :) ! (knon, klev) ! temperature (K)
30      ! t--------input-R- temperature (K)      REAL, intent(in):: ven(:, :) ! (knon, klev) vitesse horizontale (m/s)
31      ! ven------input-R- vitesse horizontale (m/s)      REAL, intent(in):: paprs(:, :) ! (knon, klev+1) pression a inter-couche (Pa)
32      REAL paprs(klon, klev+1), pplay(klon, klev), delp(klon, klev)      real, intent(in):: pplay(:, :) ! (knon, klev) pression au milieu
33      ! paprs----input-R- pression a inter-couche (Pa)                                     ! de couche (Pa)
34      ! pplay----input-R- pression au milieu de couche (Pa)      real, intent(in):: delp(:, :) ! (knon, klev) epaisseur de couche (Pa)
35      ! delp-----input-R- epaisseur de couche (Pa)      REAL, intent(out):: d_ven(:, :) ! (knon, klev) ! le changement de "ven"
36      REAL d_ven(klon, klev)  
37      ! d_ven----output-R- le changement de "ven"      REAL, intent(out):: flux_v(:) ! (knon)
38      REAL flux_v(klon, klev)      ! (diagnostic) flux du vent à la surface, en (kg m/s)/(m**2 s)
39      ! flux_v---output-R- (diagnostic) flux du vent: (kg m/s)/(m**2 s)      ! flux_v est le flux de moment angulaire (positif vers bas)
40    
41      ! Local:      ! Local:
42      INTEGER i, k      INTEGER knon, i, k
43      REAL zx_cv(klon, 2:klev)      REAL zx_cv(size(u1lay), 2:klev) ! (knon, 2:klev)
44      REAL zx_dv(klon, 2:klev)      REAL zx_dv(size(u1lay), 2:klev) ! (knon, 2:klev)
45      REAL zx_buf(klon)      REAL zx_buf(size(u1lay)) ! (knon)
46      REAL zx_coef(klon, klev)      REAL zx_coef(size(u1lay), klev) ! (knon, klev)
47      REAL local_ven(klon, klev)      REAL local_ven(size(u1lay), klev) ! (knon, klev)
     REAL zx_alf1(klon), zx_alf2(klon)  
48    
49      !------------------------------------------------------------------      !------------------------------------------------------------------
50    
51      DO k = 1, klev      knon = assert_eq([size(u1lay), size(v1lay), size(coef, 1), size(t, 1), &
52         DO i = 1, knon           size(ven, 1), size(paprs, 1), size(pplay, 1), size(delp, 1), &
53            local_ven(i, k) = ven(i, k)           size(d_ven, 1), size(flux_v)], "clvent knon")
54         ENDDO      local_ven = ven
     ENDDO  
55    
56      DO i = 1, knon      DO i = 1, knon
57         zx_alf1(i) = 1.0         zx_coef(i, 1) = cdrag(i) * (1. + SQRT(u1lay(i)**2 + v1lay(i)**2)) &
58         zx_alf2(i) = 1.0 - zx_alf1(i)              * pplay(i, 1) / (RD * t(i, 1)) * dtime * RG
        zx_coef(i, 1) = coef(i, 1) * (1. + SQRT(u1lay(i)**2 + v1lay(i)**2)) &  
             * pplay(i, 1) / (RD * t(i, 1))  
        zx_coef(i, 1) = zx_coef(i, 1) * dtime * RG  
59      ENDDO      ENDDO
60    
61      DO k = 2, klev      DO k = 2, klev
# Line 73  contains Line 67  contains
67      ENDDO      ENDDO
68    
69      DO i = 1, knon      DO i = 1, knon
70         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)
71         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)
72         zx_dv(i, 2) = (zx_coef(i, 2)-zx_alf2(i)*zx_coef(i, 1)) &         zx_dv(i, 2) = zx_coef(i, 2) &
73              /zx_buf(i)              /zx_buf(i)
74      ENDDO      ENDDO
75      DO k = 3, klev      DO k = 3, klev
# Line 99  contains Line 93  contains
93         ENDDO         ENDDO
94      ENDDO      ENDDO
95    
     ! flux_v est le flux de moment angulaire (positif vers bas) dont  
     ! l'unite est: (kg m/s)/(m**2 s)  
96      DO i = 1, knon      DO i = 1, knon
97         flux_v(i, 1) = zx_coef(i, 1)/(RG*dtime) &         flux_v(i) = zx_coef(i, 1)/(RG*dtime) &
98              *(local_ven(i, 1)*zx_alf1(i) &              *local_ven(i, 1)
             +local_ven(i, 2)*zx_alf2(i))  
     ENDDO  
     DO k = 2, klev  
        DO i = 1, knon  
           flux_v(i, k) = zx_coef(i, k)/(RG*dtime) &  
                * (local_ven(i, k)-local_ven(i, k-1))  
        ENDDO  
99      ENDDO      ENDDO
100    
101      DO k = 1, klev      DO k = 1, klev

Legend:
Removed from v.70  
changed lines
  Added in v.231

  ViewVC Help
Powered by ViewVC 1.1.21