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

Diff of /trunk/phylmd/coefkz.f

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

trunk/Sources/phylmd/coefkz.f revision 248 by guez, Fri Jan 5 16:40:13 2018 UTC trunk/phylmd/coefkz.f revision 279 by guez, Fri Jul 20 14:30:23 2018 UTC
# Line 4  module coefkz_m Line 4  module coefkz_m
4    
5  contains  contains
6    
7    SUBROUTINE coefkz(nsrf, paprs, pplay, ksta, ksta_ter, ts, u, v, t, q, &    SUBROUTINE coefkz(nsrf, paprs, pplay, ts, u, v, t, q, zgeop, coefm, coefh)
        zgeop, coefm, coefh)  
8    
9      ! Authors: F. Hourdin, M. Forichon, Z. X. Li (LMD/CNRS)      ! Authors: F. Hourdin, M. Forichon, Z. X. Li (LMD/CNRS)
10      ! Date: September 22nd, 1993      ! Date: September 22nd, 1993
# Line 13  contains Line 12  contains
12      ! Objet : calculer les coefficients d'échange turbulent dans      ! Objet : calculer les coefficients d'échange turbulent dans
13      ! l'atmosphère.      ! l'atmosphère.
14    
15        USE clesphys, ONLY: ksta, ksta_ter
16      USE conf_phys_m, ONLY: iflag_pbl      USE conf_phys_m, ONLY: iflag_pbl
17      USE dimphy, ONLY: klev      USE dimphy, ONLY: klev
18      USE fcttre, ONLY: foede, foeew      USE fcttre, ONLY: foede, foeew
# Line 28  contains Line 28  contains
28      real, intent(in):: pplay(:, :) ! (knon, klev)      real, intent(in):: pplay(:, :) ! (knon, klev)
29      ! pression au milieu de chaque couche (en Pa)      ! pression au milieu de chaque couche (en Pa)
30    
     REAL, intent(in):: ksta, ksta_ter  
31      REAL, intent(in):: ts(:) ! (knon) temperature du sol (en Kelvin)      REAL, intent(in):: ts(:) ! (knon) temperature du sol (en Kelvin)
32      REAL, intent(in):: u(:, :), v(:, :) ! (knon, klev) wind      REAL, intent(in):: u(:, :), v(:, :) ! (knon, klev) wind
33      REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K)      REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K)
# Line 36  contains Line 35  contains
35      REAL, intent(in):: zgeop(:, :) ! (knon, klev)      REAL, intent(in):: zgeop(:, :) ! (knon, klev)
36      REAL, intent(out):: coefm(:, 2:) ! (knon, 2:klev) coefficient, vitesse      REAL, intent(out):: coefm(:, 2:) ! (knon, 2:klev) coefficient, vitesse
37    
38      real, intent(out):: coefh(:, 2:) ! (knon, 2:klev)      real, intent(out):: coefh(:, 2:) ! (knon, 2:klev)
39      ! coefficient, chaleur et humidité      ! coefficient, chaleur et humidité
40    
41      ! Local:      ! Local:
# Line 88  contains Line 87  contains
87      knon = size(ts)      knon = size(ts)
88    
89      ! Prescrire la valeur de contre-gradient      ! Prescrire la valeur de contre-gradient
90      if (iflag_pbl.eq.1) then      if (iflag_pbl == 1) then
91         DO k = 3, klev         DO k = 3, klev
92            gamt(k) = - 1E-3            gamt(k) = - 1E-3
93         ENDDO         ENDDO
# Line 99  contains Line 98  contains
98         ENDDO         ENDDO
99      ENDIF      ENDIF
100    
101      IF (nsrf .NE. is_oce ) THEN      IF (nsrf /= is_oce) THEN
102         kstable = ksta_ter         kstable = ksta_ter
103      ELSE      ELSE
104         kstable = ksta         kstable = ksta
# Line 135  contains Line 134  contains
134            zfr = MAX(0.0, MIN(1.0, zfr))            zfr = MAX(0.0, MIN(1.0, zfr))
135            IF (.NOT.richum) zfr = 0.0            IF (.NOT.richum) zfr = 0.0
136    
137            !  calculer le nombre de Richardson:            ! calculer le nombre de Richardson:
138    
139            IF (tvirtu) THEN            IF (tvirtu) THEN
140               ztvd = (t(i, k) &               ztvd = (t(i, k) &
141                    + zdphi/RCPD/(1. + RVTMP2 * zq) &                    + zdphi/RCPD/(1. + RVTMP2 * zq) &
142                    * ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs) ) &                    * ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs)) &
143                    ) * (1. + RETV * q(i, k))                    ) * (1. + RETV * q(i, k))
144               ztvu = (t(i, k - 1) &               ztvu = (t(i, k - 1) &
145                    - zdphi/RCPD/(1. + RVTMP2 * zq) &                    - zdphi/RCPD/(1. + RVTMP2 * zq) &
146                    * ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs) ) &                    * ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs)) &
147                    ) * (1. + RETV * q(i, k - 1))                    ) * (1. + RETV * q(i, k - 1))
148               ri(i) = zmgeom(i) * (ztvd - ztvu)/(zdu2 * 0.5 * (ztvd + ztvu))               ri(i) = zmgeom(i) * (ztvd - ztvu)/(zdu2 * 0.5 * (ztvd + ztvu))
149               ri(i) = ri(i) &               ri(i) = ri(i) &
# Line 190  contains Line 189  contains
189               ENDIF               ENDIF
190            ELSE            ELSE
191               l2(i) = (mixlen * MAX(0.0, (paprs(i, k) - paprs(i, itop(i) + 1)) &               l2(i) = (mixlen * MAX(0.0, (paprs(i, k) - paprs(i, itop(i) + 1)) &
192                    /(paprs(i, 2) - paprs(i, itop(i) + 1)) ))**2                    /(paprs(i, 2) - paprs(i, itop(i) + 1))))**2
193               coefm(i, k) = sqrt(max(cdn**2 * (ric - ri(i)) / ric, kstable))               coefm(i, k) = sqrt(max(cdn**2 * (ric - ri(i)) / ric, kstable))
194               coefm(i, k) = l2(i) * coefm(i, k)               coefm(i, k) = l2(i) * coefm(i, k)
195               coefh(i, k) = coefm(i, k) / prandtl ! h et m different               coefh(i, k) = coefm(i, k) / prandtl ! h et m different

Legend:
Removed from v.248  
changed lines
  Added in v.279

  ViewVC Help
Powered by ViewVC 1.1.21