/[lmdze]/trunk/phylmd/Interface_surf/yamada4.f90
ViewVC logotype

Diff of /trunk/phylmd/Interface_surf/yamada4.f90

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

trunk/Sources/phylmd/yamada4.f revision 229 by guez, Mon Nov 6 17:20:45 2017 UTC trunk/phylmd/Interface_surf/yamada4.f revision 286 by guez, Tue Jul 24 15:22:48 2018 UTC
# Line 8  module yamada4_m Line 8  module yamada4_m
8    
9  contains  contains
10    
11    SUBROUTINE yamada4(dt, g, zlev, zlay, u, v, teta, cd, q2, km, kn, kq, ustar)    SUBROUTINE yamada4(dt, zlev, zlay, u, v, teta, q2, km, kn, ustar)
12    
13      ! From LMDZ4/libf/phylmd/yamada4.F, version 1.1 2004/06/22 11:45:36      ! From LMDZ4/libf/phylmd/yamada4.F, version 1.1 2004/06/22 11:45:36
14    
15      USE conf_phys_m, ONLY: iflag_pbl      USE conf_phys_m, ONLY: iflag_pbl
16      USE dimphy, ONLY: klev      USE dimphy, ONLY: klev
17      use nr_util, only: assert, assert_eq      use nr_util, only: assert, assert_eq
18        USE suphec_m, ONLY: rg
19    
20      REAL, intent(in):: dt ! pas de temps      REAL, intent(in):: dt ! pas de temps
     real, intent(in):: g  
21    
22      REAL zlev(:, :) ! (knon, klev + 1)      REAL zlev(:, :) ! (knon, klev + 1)
23      ! altitude \`a chaque niveau (interface inf\'erieure de la couche de      ! altitude \`a chaque niveau (interface inf\'erieure de la couche de
# Line 34  contains Line 34  contains
34      ! temp\'erature potentielle au centre de chaque couche (en entr\'ee :      ! temp\'erature potentielle au centre de chaque couche (en entr\'ee :
35      ! la valeur au d\'ebut du pas de temps)      ! la valeur au d\'ebut du pas de temps)
36    
     REAL, intent(in):: cd(:) ! (knon) cdrag, valeur au d\'ebut du pas de temps  
   
37      REAL, intent(inout):: q2(:, :) ! (knon, klev + 1)      REAL, intent(inout):: q2(:, :) ! (knon, klev + 1)
38      ! $q^2$ au bas de chaque couche      ! $q^2$ au bas de chaque couche
39      ! En entr\'ee : la valeur au d\'ebut du pas de temps ; en sortie : la      ! En entr\'ee : la valeur au d\'ebut du pas de temps ; en sortie : la
40      ! valeur \`a la fin du pas de temps.      ! valeur \`a la fin du pas de temps.
41    
42      REAL km(:, :) ! (knon, klev + 1)      REAL, intent(out):: km(:, 2:) ! (knon, 2:klev)
43      ! diffusivit\'e turbulente de quantit\'e de mouvement (au bas de      ! diffusivit\'e turbulente de quantit\'e de mouvement (au bas de
44      ! chaque couche) (en sortie : la valeur \`a la fin du pas de temps)      ! chaque couche) (en sortie : la valeur \`a la fin du pas de temps)
45    
46      REAL kn(:, :) ! (knon, klev + 1)      REAL, intent(out):: kn(:, 2:) ! (knon, 2:klev)
47      ! diffusivit\'e turbulente des scalaires (au bas de chaque couche)      ! diffusivit\'e turbulente des scalaires (au bas de chaque couche)
48      ! (en sortie : la valeur \`a la fin du pas de temps)      ! (en sortie : la valeur \`a la fin du pas de temps)
49    
     REAL kq(:, :) ! (knon, klev + 1)  
50      real, intent(in):: ustar(:) ! (knon)      real, intent(in):: ustar(:) ! (knon)
51    
52      ! Local:      ! Local:
53      integer knon      integer knon
54      real kmin, qmin      real kmin, qmin
55      real pblhmin(size(cd)), coriol(size(cd)) ! (knon)      real pblhmin(size(ustar)), coriol(size(ustar)) ! (knon)
56      real qpre      real qpre
57      REAL unsdz(size(zlay, 1), size(zlay, 2)) ! (knon, klev)      REAL unsdz(size(zlay, 1), size(zlay, 2)) ! (knon, klev)
58      REAL unsdzdec(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)      REAL unsdzdec(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)
# Line 75  contains Line 72  contains
72      real zq      real zq
73      real dtetadz(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)      real dtetadz(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)
74      real l(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)      real l(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)
75      real l0(size(cd)) ! (knon)      real l0(size(ustar)) ! (knon)
76      real sq(size(cd)), sqz(size(cd)) ! (knon)      real sq(size(ustar)), sqz(size(ustar)) ! (knon)
77      real zz(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)      real zz(size(zlev, 1), size(zlev, 2)) ! (knon, klev + 1)
78      integer iter      integer iter
79      real:: ric = 0.195, rifc = 0.191, b1 = 16.6      real:: ric = 0.195, rifc = 0.191, b1 = 16.6
# Line 85  contains Line 82  contains
82    
83      call assert(any(iflag_pbl == [6, 8, 9]), "yamada4 iflag_pbl")      call assert(any(iflag_pbl == [6, 8, 9]), "yamada4 iflag_pbl")
84      knon = assert_eq([size(zlev, 1), size(zlay, 1), size(u, 1), size(v, 1), &      knon = assert_eq([size(zlev, 1), size(zlay, 1), size(u, 1), size(v, 1), &
85           size(teta, 1), size(cd), size(q2, 1), size(km, 1), size(kn, 1), &           size(teta, 1), size(ustar), size(q2, 1), size(km, 1), size(kn, 1)], &
86           size(kq, 1)], "yamada4 knon")           "yamada4 knon")
87      call assert(klev == [size(zlev, 2) - 1, size(zlay, 2), size(u, 2), &      call assert(klev == [size(zlev, 2) - 1, size(zlay, 2), size(u, 2), &
88           size(v, 2), size(teta, 2), size(q2, 2) - 1, size(km, 2) - 1, &           size(v, 2), size(teta, 2), size(q2, 2) - 1, size(km, 2) + 1, &
89           size(kn, 2) - 1, size(kq, 2) - 1], "yamada4 klev")           size(kn, 2) + 1], "yamada4 klev")
90    
91      ipas = ipas + 1      ipas = ipas + 1
92    
# Line 125  contains Line 122  contains
122            m2(ig, k) = ((u(ig, k)-u(ig, k-1))**2 + (v(ig, k)-v(ig, k-1))**2) &            m2(ig, k) = ((u(ig, k)-u(ig, k-1))**2 + (v(ig, k)-v(ig, k-1))**2) &
123                 /(dz(ig, k)*dz(ig, k))                 /(dz(ig, k)*dz(ig, k))
124            dtetadz(ig, k) = (teta(ig, k)-teta(ig, k-1))/dz(ig, k)            dtetadz(ig, k) = (teta(ig, k)-teta(ig, k-1))/dz(ig, k)
125            n2(ig, k) = g*2.*dtetadz(ig, k)/(teta(ig, k-1) + teta(ig, k))            n2(ig, k) = rg*2.*dtetadz(ig, k)/(teta(ig, k-1) + teta(ig, k))
126            ri = n2(ig, k)/max(m2(ig, k), 1.e-10)            ri = n2(ig, k)/max(m2(ig, k), 1.e-10)
127            if (ri.lt.ric) then            if (ri.lt.ric) then
128               rif(ig, k) = frif(ri)               rif(ig, k) = frif(ri)
# Line 251  contains Line 248  contains
248            zq = sqrt(q2(ig, k))            zq = sqrt(q2(ig, k))
249            km(ig, k) = l(ig, k)*zq*sm(ig, k)            km(ig, k) = l(ig, k)*zq*sm(ig, k)
250            kn(ig, k) = km(ig, k)*alpha(ig, k)            kn(ig, k) = km(ig, k)*alpha(ig, k)
           kq(ig, k) = l(ig, k)*zq*0.2  
251         enddo         enddo
252      enddo      enddo
253    
# Line 277  contains Line 273  contains
273            if (kn(ig, k).lt.kmin.or.km(ig, k).lt.kmin) then            if (kn(ig, k).lt.kmin.or.km(ig, k).lt.kmin) then
274               kn(ig, k) = kmin               kn(ig, k) = kmin
275               km(ig, k) = kmin               km(ig, k) = kmin
              kq(ig, k) = kmin  
276               ! la longueur de melange est suposee etre l = kap z               ! la longueur de melange est suposee etre l = kap z
277               ! K = l q Sm d'ou q2 = (K/l Sm)**2               ! K = l q Sm d'ou q2 = (K/l Sm)**2
278               q2(ig, k) = (qmin/sm(ig, k))**2               q2(ig, k) = (qmin/sm(ig, k))**2

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

  ViewVC Help
Powered by ViewVC 1.1.21