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

Diff of /trunk/Sources/phylmd/coefkz.f

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

trunk/libf/phylmd/coefkz.f90 revision 40 by guez, Tue Feb 22 13:49:36 2011 UTC trunk/Sources/phylmd/coefkz.f revision 221 by guez, Thu Apr 20 14:44:47 2017 UTC
# Line 1  Line 1 
1  SUBROUTINE coefkz(nsrf, knon, paprs, pplay, ksta, ksta_ter, ts, rugos, u, v, &  module coefkz_m
      t, q, qsurf, pcfm, pcfh)  
   
   ! Auteur(s) F. Hourdin, M. Forichon, Z.X. Li (LMD/CNRS) date: 1993/09/22  
   !           (une version strictement identique a l'ancien modele)  
   ! Objet: calculer le coefficient du frottement du sol (Cdrag) et les  
   !        coefficients d'echange turbulent dans l'atmosphere.  
   
   USE indicesol, ONLY : is_oce  
   USE dimphy, ONLY : klev, klon, max  
   USE iniprint, ONLY : prt_level  
   USE suphec_m, ONLY : rcpd, rd, retv, rg, rkappa, rlstt, rlvtt, rtt  
   USE yoethf_m, ONLY : r2es, r5ies, r5les, rvtmp2  
   USE fcttre, ONLY : dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep  
   USE conf_phys_m, ONLY : iflag_pbl  
2    
3    IMPLICIT none    IMPLICIT none
4    
5    ! Arguments:  contains
6    ! nsrf-----input-I- indicateur de la nature du sol  
7    ! knon-----input-I- nombre de points a traiter    SUBROUTINE coefkz(nsrf, paprs, pplay, ksta, ksta_ter, ts, rugos, u, v, t, &
8    ! paprs----input-R- pression a chaque intercouche (en Pa)         q, qsurf, coefm, coefh)
9    ! pplay----input-R- pression au milieu de chaque couche (en Pa)  
10    ! ts-------input-R- temperature du sol (en Kelvin)      ! Authors: F. Hourdin, M. Forichon, Z. X. Li (LMD/CNRS)
11    ! rugos----input-R- longeur de rugosite (en m)      ! Date: September 22nd, 1993
12    ! u--------input-R- vitesse u      ! Objet : calculer le coefficient de frottement du sol ("Cdrag") et les
13    ! v--------input-R- vitesse v      ! coefficients d'échange turbulent dans l'atmosphère.
14    ! q--------input-R- vapeur d'eau (kg/kg)  
15        use clcdrag_m, only: clcdrag
16    ! itop-----output-I- numero de couche du sommet de la couche limite      USE conf_phys_m, ONLY: iflag_pbl
17    ! pcfm-----output-R- coefficients a calculer (vitesse)      USE dimphy, ONLY: klev, klon
18    ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)      USE fcttre, ONLY: foede, foeew
19        USE indicesol, ONLY: is_oce
20    INTEGER knon, nsrf      USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rlstt, rlvtt, rtt
21    REAL ts(klon)      USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2
22    REAL paprs(klon, klev+1), pplay(klon, klev)  
23    REAL u(klon, klev), v(klon, klev), q(klon, klev)      integer, intent(in):: nsrf ! indicateur de la nature du sol
24    REAL, intent(in):: t(klon, klev) ! temperature (K)  
25    REAL rugos(klon)      REAL, intent(in):: paprs(:, :) ! (klon, klev+1)
26        ! pression a chaque intercouche (en Pa)
27    REAL pcfm(klon, klev), pcfh(klon, klev)  
28    INTEGER itop(klon)      real, intent(in):: pplay(:, :) ! (klon, klev)
29        ! pression au milieu de chaque couche (en Pa)
30    ! Quelques constantes et options:  
31        REAL, intent(in):: ksta, ksta_ter
32    REAL cepdu2, ckap, cb, cc, cd, clam      REAL, intent(in):: ts(:) ! (knon) temperature du sol (en Kelvin)
33    PARAMETER (cepdu2 =(0.1)**2)      REAL, intent(in):: rugos(:) ! (klon) longeur de rugosite (en m)
34    PARAMETER (CKAP=0.4)      REAL, intent(in):: u(:, :), v(:, :) ! (klon, klev) wind
35    PARAMETER (cb=5.0)      REAL, intent(in):: t(:, :) ! (klon, klev) temperature (K)
36    PARAMETER (cc=5.0)      real, intent(in):: q(:, :) ! (klon, klev) vapeur d'eau (kg/kg)
37    PARAMETER (cd=5.0)      real, intent(in):: qsurf(:) ! (knon)
38    PARAMETER (clam=160.0)      REAL, intent(out):: coefm(:, :) ! (knon, klev) coefficient, vitesse
39    REAL ratqs ! largeur de distribution de vapeur d'eau  
40    PARAMETER (ratqs=0.05)      real, intent(out):: coefh(:, :) ! (knon, klev)
41    LOGICAL richum ! utilise le nombre de Richardson humide      ! coefficient, chaleur et humidité
42    PARAMETER (richum=.TRUE.)  
43    REAL ric ! nombre de Richardson critique      ! Local:
44    PARAMETER(ric=0.4)  
45    REAL prandtl      INTEGER knon ! nombre de points a traiter
46    PARAMETER (prandtl=0.4)  
47    REAL kstable ! diffusion minimale (situation stable)      INTEGER itop(size(coefm, 1))
48    ! GKtest      ! (knon) numero de couche du sommet de la couche limite
49    ! PARAMETER (kstable=1.0e-10)  
50    REAL ksta, ksta_ter      ! Quelques constantes et options:
51    !IM: 261103     REAL kstable_ter, kstable_sinon  
52    !IM: 211003 cf GK   PARAMETER (kstable_ter = 1.0e-6)      REAL, PARAMETER:: cepdu2 =0.1**2
53    !IM: 261103     PARAMETER (kstable_ter = 1.0e-8)      REAL, PARAMETER:: CKAP = 0.4
54    !IM: 261103   PARAMETER (kstable_ter = 1.0e-10)      REAL, PARAMETER:: cb = 5.
55    !IM: 261103   PARAMETER (kstable_sinon = 1.0e-10)      REAL, PARAMETER:: cc = 5.
56    ! fin GKtest      REAL, PARAMETER:: cd = 5.
57    REAL mixlen ! constante controlant longueur de melange      REAL, PARAMETER:: clam = 160.
58    PARAMETER (mixlen=35.0)      REAL, PARAMETER:: ratqs = 0.05 ! largeur de distribution de vapeur d'eau
59    INTEGER isommet ! le sommet de la couche limite  
60    PARAMETER (isommet=klev)      LOGICAL, PARAMETER:: richum = .TRUE.
61    LOGICAL tvirtu ! calculer Ri d'une maniere plus performante      ! utilise le nombre de Richardson humide
62    PARAMETER (tvirtu=.TRUE.)  
63    LOGICAL opt_ec ! formule du Centre Europeen dans l'atmosphere      REAL, PARAMETER:: ric = 0.4 ! nombre de Richardson critique
64    PARAMETER (opt_ec=.FALSE.)      REAL, PARAMETER:: prandtl = 0.4
65    
66    ! Variables locales:      REAL kstable ! diffusion minimale (situation stable)
67        REAL, PARAMETER:: mixlen = 35. ! constante contrôlant longueur de mélange
68    INTEGER i, k, kk !IM 120704      INTEGER, PARAMETER:: isommet = klev ! sommet de la couche limite
69    REAL zgeop(klon, klev)  
70    REAL zmgeom(klon)      LOGICAL, PARAMETER:: tvirtu = .TRUE.
71    REAL zri(klon)      ! calculer Ri d'une maniere plus performante
72    REAL zl2(klon)  
73        LOGICAL, PARAMETER:: opt_ec = .FALSE.
74    REAL u1(klon), v1(klon), t1(klon), q1(klon), z1(klon)      ! formule du Centre Europeen dans l'atmosphere
75    REAL pcfm1(klon), pcfh1(klon)  
76        INTEGER i, k
77    REAL zdphi, zdu2, ztvd, ztvu, zcdn      REAL zgeop(klon, klev)
78    REAL zscf      REAL zmgeom(klon)
79    REAL zt, zq, zdelta, zcvm5, zcor, zqs, zfr, zdqs      REAL ri(klon)
80    REAL z2geomf, zalh2, zalm2, zscfh, zscfm      REAL l2(klon)
81    REAL t_coup  
82    PARAMETER (t_coup=273.15)      REAL u1(klon), v1(klon), t1(klon), q1(klon), z1(klon)
83    !IM  
84    LOGICAL check      REAL zdphi, zdu2, ztvd, ztvu, cdn
85    PARAMETER (check=.false.)      REAL scf
86        REAL zt, zq, zcvm5, zcor, zqs, zfr, zdqs
87    ! contre-gradient pour la chaleur sensible: Kelvin/metre      logical zdelta
88    REAL gamt(2:klev)      REAL z2geomf, zalh2, alm2, zscfh, scfm
89    real qsurf(klon)      REAL gamt(2:klev) ! contre-gradient pour la chaleur sensible: Kelvin/metre
90    
91    LOGICAL appel1er      !--------------------------------------------------------------------
92    SAVE appel1er  
93        knon = size(coefm, 1)
94    ! Fonctions thermodynamiques et fonctions d'instabilite  
95    REAL fsta, fins, x      ! Prescrire la valeur de contre-gradient
96    LOGICAL zxli ! utiliser un jeu de fonctions simples      if (iflag_pbl.eq.1) then
97    PARAMETER (zxli=.FALSE.)         DO k = 3, klev
98              gamt(k) = -1.0E-03
99    fsta(x) = 1.0 / (1.0+10.0*x*(1+8.0*x))         ENDDO
100    fins(x) = SQRT(1.0-18.0*x)         gamt(2) = -2.5E-03
101        else
102    DATA appel1er /.TRUE./         DO k = 2, klev
103              gamt(k) = 0.0
104    !--------------------------------------------------------------------         ENDDO
105        ENDIF
106    IF (appel1er) THEN  
107       if (prt_level > 9) THEN      IF ( nsrf .NE. is_oce ) THEN
108          print *, 'coefkz, opt_ec:', opt_ec         kstable = ksta_ter
109          print *, 'coefkz, richum:', richum      ELSE
110          IF (richum) print *, 'coefkz, ratqs:', ratqs         kstable = ksta
111          print *, 'coefkz, isommet:', isommet      ENDIF
112          print *, 'coefkz, tvirtu:', tvirtu  
113          appel1er = .FALSE.      ! Calculer les géopotentiels de chaque couche
114       endif      DO i = 1, knon
115    ENDIF         zgeop(i, 1) = RD * t(i, 1) / (0.5 * (paprs(i, 1) + pplay(i, 1))) &
116                * (paprs(i, 1) - pplay(i, 1))
117    ! Initialiser les sorties      ENDDO
118        DO k = 2, klev
119    DO k = 1, klev         DO i = 1, knon
120       DO i = 1, knon            zgeop(i, k) = zgeop(i, k-1) &
121          pcfm(i, k) = 0.0                 + RD * 0.5*(t(i, k-1)+t(i, k)) / paprs(i, k) &
122          pcfh(i, k) = 0.0                 * (pplay(i, k-1)-pplay(i, k))
123       ENDDO         ENDDO
124    ENDDO      ENDDO
125    DO i = 1, knon  
126       itop(i) = 0      ! Calculer le frottement au sol (Cdrag)
127    ENDDO  
128        DO i = 1, knon
129    ! Prescrire la valeur de contre-gradient         u1(i) = u(i, 1)
130           v1(i) = v(i, 1)
131    if (iflag_pbl.eq.1) then         t1(i) = t(i, 1)
132       DO k = 3, klev         q1(i) = q(i, 1)
133          gamt(k) = -1.0E-03         z1(i) = zgeop(i, 1)
134       ENDDO      ENDDO
135       gamt(2) = -2.5E-03  
136    else      CALL clcdrag(nsrf, u1, v1, t1, q1, z1, ts, qsurf, rugos, coefm(:, 1), &
137       DO k = 2, klev           coefh(:, 1))
138          gamt(k) = 0.0  
139       ENDDO      ! Calculer les coefficients turbulents dans l'atmosphere
140    ENDIF  
141        itop = isommet
142    IF ( nsrf .NE. is_oce ) THEN  
143       kstable = ksta_ter      loop_vertical: DO k = 2, isommet
144    ELSE         loop_horiz: DO i = 1, knon
145       kstable = ksta            zdu2 = MAX(cepdu2, (u(i, k)-u(i, k-1))**2 &
146    ENDIF                 +(v(i, k)-v(i, k-1))**2)
147              zmgeom(i) = zgeop(i, k)-zgeop(i, k-1)
148    ! Calculer les géopotentiels de chaque couche            zdphi =zmgeom(i) / 2.0
149              zt = (t(i, k)+t(i, k-1)) * 0.5
150    DO i = 1, knon            zq = (q(i, k)+q(i, k-1)) * 0.5
151       zgeop(i, 1) = RD * t(i, 1) / (0.5 * (paprs(i, 1) + pplay(i, 1))) &  
152            * (paprs(i, 1) - pplay(i, 1))            ! calculer Qs et dQs/dT:
153    ENDDO  
154    DO k = 2, klev            zdelta = RTT >=zt
155       DO i = 1, knon            zcvm5 = merge(R5IES * RLSTT, R5LES * RLVTT, zdelta) / RCPD &
156          zgeop(i, k) = zgeop(i, k-1) &                 / (1. + RVTMP2*zq)
157               + RD * 0.5*(t(i, k-1)+t(i, k)) / paprs(i, k) &            zqs = R2ES * FOEEW(zt, zdelta) / pplay(i, k)
158               * (pplay(i, k-1)-pplay(i, k))            zqs = MIN(0.5, zqs)
159       ENDDO            zcor = 1./(1.-RETV*zqs)
160    ENDDO            zqs = zqs*zcor
161              zdqs = FOEDE(zt, zdelta, zcvm5, zqs, zcor)
162    ! Calculer le frottement au sol (Cdrag)  
163              ! calculer la fraction nuageuse (processus humide):
164    DO i = 1, knon  
165       u1(i) = u(i, 1)            zfr = (zq+ratqs*zq-zqs) / (2.0*ratqs*zq)
166       v1(i) = v(i, 1)            zfr = MAX(0.0, MIN(1.0, zfr))
167       t1(i) = t(i, 1)            IF (.NOT.richum) zfr = 0.0
168       q1(i) = q(i, 1)  
169       z1(i) = zgeop(i, 1)            !  calculer le nombre de Richardson:
170    ENDDO  
171              IF (tvirtu) THEN
172    CALL clcdrag(klon, knon, nsrf, zxli,  &               ztvd =( t(i, k) &
173         u1, v1, t1, q1, z1, &                    + zdphi/RCPD/(1.+RVTMP2*zq) &
174         ts, qsurf, rugos, &                    *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &
175         pcfm1, pcfh1)                    )*(1.+RETV*q(i, k))
176    !IM  $             ts, qsurf, rugos,               ztvu =( t(i, k-1) &
177                      - zdphi/RCPD/(1.+RVTMP2*zq) &
178    DO i = 1, knon                    *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &
179       pcfm(i, 1)=pcfm1(i)                    )*(1.+RETV*q(i, k-1))
180       pcfh(i, 1)=pcfh1(i)               ri(i) =zmgeom(i)*(ztvd-ztvu)/(zdu2*0.5*(ztvd+ztvu))
181    ENDDO               ri(i) = ri(i) &
182                      + zmgeom(i)*zmgeom(i)/RG*gamt(k) &
183    ! Calculer les coefficients turbulents dans l'atmosphere                    *(paprs(i, k)/101325.0)**RKAPPA &
184                      /(zdu2*0.5*(ztvd+ztvu))
185    DO i = 1, knon            ELSE
186       itop(i) = isommet               ! calcul de Ridchardson compatible LMD5
187    ENDDO               ri(i) =(RCPD*(t(i, k)-t(i, k-1)) &
188                      -RD*0.5*(t(i, k)+t(i, k-1))/paprs(i, k) &
189    DO k = 2, isommet                    *(pplay(i, k)-pplay(i, k-1)) &
190       DO i = 1, knon                    )*zmgeom(i)/(zdu2*0.5*RCPD*(t(i, k-1)+t(i, k)))
191          zdu2=MAX(cepdu2, (u(i, k)-u(i, k-1))**2 &               ri(i) = ri(i) + &
192               +(v(i, k)-v(i, k-1))**2)                    zmgeom(i)*zmgeom(i)*gamt(k)/RG &
193          zmgeom(i)=zgeop(i, k)-zgeop(i, k-1)                    *(paprs(i, k)/101325.0)**RKAPPA &
194          zdphi =zmgeom(i) / 2.0                    /(zdu2*0.5*(t(i, k-1)+t(i, k)))
195          zt = (t(i, k)+t(i, k-1)) * 0.5            ENDIF
196          zq = (q(i, k)+q(i, k-1)) * 0.5  
197              ! finalement, les coefficients d'echange sont obtenus:
198          !           calculer Qs et dQs/dT:  
199              cdn = SQRT(zdu2) / zmgeom(i) * RG
200          IF (thermcep) THEN  
201             zdelta = MAX(0., SIGN(1., RTT-zt))            IF (opt_ec) THEN
202             zcvm5 = R5LES*RLVTT/RCPD/(1.0+RVTMP2*zq)*(1.-zdelta)  &               z2geomf = zgeop(i, k-1)+zgeop(i, k)
203                  + R5IES*RLSTT/RCPD/(1.0+RVTMP2*zq)*zdelta               alm2 = (0.5*ckap/RG*z2geomf &
204             zqs = R2ES * FOEEW(zt, zdelta) / pplay(i, k)                    /(1.+0.5*ckap/rg/clam*z2geomf))**2
205             zqs = MIN(0.5, zqs)               zalh2 = (0.5*ckap/rg*z2geomf &
206             zcor = 1./(1.-RETV*zqs)                    /(1.+0.5*ckap/RG/(clam*SQRT(1.5*cd))*z2geomf))**2
207             zqs = zqs*zcor               IF (ri(i) < 0.) THEN
208             zdqs = FOEDE(zt, zdelta, zcvm5, zqs, zcor)                  ! situation instable
209          ELSE                  scf = ((zgeop(i, k)/zgeop(i, k-1))**(1./3.)-1.)**3 &
210             IF (zt .LT. t_coup) THEN                       / (zmgeom(i)/RG)**3 / (zgeop(i, k-1)/RG)
211                zqs = qsats(zt) / pplay(i, k)                  scf = SQRT(-ri(i)*scf)
212                zdqs = dqsats(zt, zqs)                  scfm = 1.0 / (1.0+3.0*cb*cc*alm2*scf)
213             ELSE                  zscfh = 1.0 / (1.0+3.0*cb*cc*zalh2*scf)
214                zqs = qsatl(zt) / pplay(i, k)                  coefm(i, k) = cdn * alm2 * (1. - 2. * cb * ri(i) * scfm)
215                zdqs = dqsatl(zt, zqs)                  coefh(i, k) = cdn*zalh2*(1.-3.0*cb*ri(i)*zscfh)
216             ENDIF               ELSE
217          ENDIF                  ! situation stable
218                    scf = SQRT(1.+cd*ri(i))
219          !           calculer la fraction nuageuse (processus humide):                  coefm(i, k) = cdn * alm2 / (1. + 2. * cb * ri(i) / scf)
220                    coefh(i, k) = cdn*zalh2/(1.+3.0*cb*ri(i)*scf)
221          zfr = (zq+ratqs*zq-zqs) / (2.0*ratqs*zq)               ENDIF
222          zfr = MAX(0.0, MIN(1.0, zfr))            ELSE
223          IF (.NOT.richum) zfr = 0.0               l2(i) = (mixlen*MAX(0.0, (paprs(i, k)-paprs(i, itop(i)+1)) &
224                      /(paprs(i, 2)-paprs(i, itop(i)+1)) ))**2
225          !           calculer le nombre de Richardson:               coefm(i, k) = sqrt(max(cdn**2 * (ric - ri(i)) / ric, kstable))
226                 coefm(i, k)= l2(i) * coefm(i, k)
227          IF (tvirtu) THEN               coefh(i, k) = coefm(i, k) / prandtl ! h et m different
228             ztvd =( t(i, k) &            ENDIF
229                  + zdphi/RCPD/(1.+RVTMP2*zq) &         ENDDO loop_horiz
230                  *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &      ENDDO loop_vertical
231                  )*(1.+RETV*q(i, k))  
232             ztvu =( t(i, k-1) &      ! Au-delà du sommet, pas de diffusion turbulente :
233                  - zdphi/RCPD/(1.+RVTMP2*zq) &      forall (i = 1: knon)
234                  *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &         coefh(i, itop(i) + 1:) = 0.
235                  )*(1.+RETV*q(i, k-1))         coefm(i, itop(i) + 1:) = 0.
236             zri(i) =zmgeom(i)*(ztvd-ztvu)/(zdu2*0.5*(ztvd+ztvu))      END forall
237             zri(i) = zri(i) &  
238                  + zmgeom(i)*zmgeom(i)/RG*gamt(k) &    END SUBROUTINE coefkz
                 *(paprs(i, k)/101325.0)**RKAPPA &  
                 /(zdu2*0.5*(ztvd+ztvu))  
   
         ELSE ! calcul de Ridchardson compatible LMD5  
   
            zri(i) =(RCPD*(t(i, k)-t(i, k-1)) &  
                 -RD*0.5*(t(i, k)+t(i, k-1))/paprs(i, k) &  
                 *(pplay(i, k)-pplay(i, k-1)) &  
                 )*zmgeom(i)/(zdu2*0.5*RCPD*(t(i, k-1)+t(i, k)))  
            zri(i) = zri(i) + &  
                 zmgeom(i)*zmgeom(i)*gamt(k)/RG &  
                 *(paprs(i, k)/101325.0)**RKAPPA &  
                 /(zdu2*0.5*(t(i, k-1)+t(i, k)))  
         ENDIF  
   
         !           finalement, les coefficients d'echange sont obtenus:  
   
         zcdn=SQRT(zdu2) / zmgeom(i) * RG  
   
         IF (opt_ec) THEN  
            z2geomf=zgeop(i, k-1)+zgeop(i, k)  
            zalm2=(0.5*ckap/RG*z2geomf &  
                 /(1.+0.5*ckap/rg/clam*z2geomf))**2  
            zalh2=(0.5*ckap/rg*z2geomf &  
                 /(1.+0.5*ckap/RG/(clam*SQRT(1.5*cd))*z2geomf))**2  
            IF (zri(i).LT.0.0) THEN  ! situation instable  
               zscf = ((zgeop(i, k)/zgeop(i, k-1))**(1./3.)-1.)**3 &  
                    / (zmgeom(i)/RG)**3 / (zgeop(i, k-1)/RG)  
               zscf = SQRT(-zri(i)*zscf)  
               zscfm = 1.0 / (1.0+3.0*cb*cc*zalm2*zscf)  
               zscfh = 1.0 / (1.0+3.0*cb*cc*zalh2*zscf)  
               pcfm(i, k)=zcdn*zalm2*(1.-2.0*cb*zri(i)*zscfm)  
               pcfh(i, k)=zcdn*zalh2*(1.-3.0*cb*zri(i)*zscfh)  
            ELSE ! situation stable  
               zscf=SQRT(1.+cd*zri(i))  
               pcfm(i, k)=zcdn*zalm2/(1.+2.0*cb*zri(i)/zscf)  
               pcfh(i, k)=zcdn*zalh2/(1.+3.0*cb*zri(i)*zscf)  
            ENDIF  
         ELSE  
            zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, itop(i)+1)) &  
                 /(paprs(i, 2)-paprs(i, itop(i)+1)) ))**2  
            pcfm(i, k)=sqrt(max(zcdn*zcdn*(ric-zri(i))/ric, kstable))  
            pcfm(i, k)= zl2(i)* pcfm(i, k)  
            pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different  
         ENDIF  
      ENDDO  
   ENDDO  
   
   ! Au-dela du sommet, pas de diffusion turbulente:  
   
   DO i = 1, knon  
      IF (itop(i)+1 .LE. klev) THEN  
         DO k = itop(i)+1, klev  
            pcfh(i, k) = 0.0  
            pcfm(i, k) = 0.0  
         ENDDO  
      ENDIF  
   ENDDO  
239    
240  END SUBROUTINE coefkz  end module coefkz_m

Legend:
Removed from v.40  
changed lines
  Added in v.221

  ViewVC Help
Powered by ViewVC 1.1.21