/[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 207 by guez, Thu Sep 1 10:30:53 2016 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, knon, paprs, pplay, ksta, ksta_ter, ts, rugos, u, v, &
8    ! paprs----input-R- pression a chaque intercouche (en Pa)         t, 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: 1993/09/22
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 indicesol, ONLY: is_oce
16    ! itop-----output-I- numero de couche du sommet de la couche limite      USE dimphy, ONLY: klev, klon
17    ! pcfm-----output-R- coefficients a calculer (vitesse)      USE suphec_m, ONLY: rcpd, rd, retv, rg, rkappa, rlstt, rlvtt, rtt
18    ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)      USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2
19        USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats
20    INTEGER knon, nsrf      USE conf_phys_m, ONLY: iflag_pbl
21    REAL ts(klon)      use clcdrag_m, only: clcdrag
22    REAL paprs(klon, klev+1), pplay(klon, klev)  
23    REAL u(klon, klev), v(klon, klev), q(klon, klev)      ! Arguments:
24    REAL, intent(in):: t(klon, klev) ! temperature (K)  
25    REAL rugos(klon)      integer, intent(in):: nsrf ! indicateur de la nature du sol
26        INTEGER, intent(in):: knon ! nombre de points a traiter
27    REAL pcfm(klon, klev), pcfh(klon, klev)  
28    INTEGER itop(klon)      REAL, intent(in):: paprs(klon, klev+1)
29        ! pression a chaque intercouche (en Pa)
30    ! Quelques constantes et options:  
31        real, intent(in):: pplay(klon, klev)
32    REAL cepdu2, ckap, cb, cc, cd, clam      ! pression au milieu de chaque couche (en Pa)
33    PARAMETER (cepdu2 =(0.1)**2)  
34    PARAMETER (CKAP=0.4)      REAL, intent(in):: ksta, ksta_ter
35    PARAMETER (cb=5.0)      REAL, intent(in):: ts(klon) ! temperature du sol (en Kelvin)
36    PARAMETER (cc=5.0)      REAL, intent(in):: rugos(klon) ! longeur de rugosite (en m)
37    PARAMETER (cd=5.0)      REAL, intent(in):: u(klon, klev), v(klon, klev) ! wind
38    PARAMETER (clam=160.0)      REAL, intent(in):: t(klon, klev) ! temperature (K)
39    REAL ratqs ! largeur de distribution de vapeur d'eau      real, intent(in):: q(klon, klev) ! vapeur d'eau (kg/kg)
40    PARAMETER (ratqs=0.05)      real, intent(in):: qsurf(klon)
41    LOGICAL richum ! utilise le nombre de Richardson humide      REAL, intent(out):: coefm(:, :) ! (knon, klev) coefficient, vitesse
42    PARAMETER (richum=.TRUE.)  
43    REAL ric ! nombre de Richardson critique      real, intent(out):: coefh(:, :) ! (knon, klev)
44    PARAMETER(ric=0.4)      ! coefficient, chaleur et humidité
45    REAL prandtl  
46    PARAMETER (prandtl=0.4)      ! Local:
47    REAL kstable ! diffusion minimale (situation stable)  
48    ! GKtest      INTEGER itop(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        ! Prescrire la valeur de contre-gradient
94    ! Fonctions thermodynamiques et fonctions d'instabilite      if (iflag_pbl.eq.1) then
95    REAL fsta, fins, x         DO k = 3, klev
96    LOGICAL zxli ! utiliser un jeu de fonctions simples            gamt(k) = -1.0E-03
97    PARAMETER (zxli=.FALSE.)         ENDDO
98           gamt(2) = -2.5E-03
99    fsta(x) = 1.0 / (1.0+10.0*x*(1+8.0*x))      else
100    fins(x) = SQRT(1.0-18.0*x)         DO k = 2, klev
101              gamt(k) = 0.0
102    DATA appel1er /.TRUE./         ENDDO
103        ENDIF
104    !--------------------------------------------------------------------  
105        IF ( nsrf .NE. is_oce ) THEN
106    IF (appel1er) THEN         kstable = ksta_ter
107       if (prt_level > 9) THEN      ELSE
108          print *, 'coefkz, opt_ec:', opt_ec         kstable = ksta
109          print *, 'coefkz, richum:', richum      ENDIF
110          IF (richum) print *, 'coefkz, ratqs:', ratqs  
111          print *, 'coefkz, isommet:', isommet      ! Calculer les géopotentiels de chaque couche
112          print *, 'coefkz, tvirtu:', tvirtu      DO i = 1, knon
113          appel1er = .FALSE.         zgeop(i, 1) = RD * t(i, 1) / (0.5 * (paprs(i, 1) + pplay(i, 1))) &
114       endif              * (paprs(i, 1) - pplay(i, 1))
115    ENDIF      ENDDO
116        DO k = 2, klev
117    ! Initialiser les sorties         DO i = 1, knon
118              zgeop(i, k) = zgeop(i, k-1) &
119    DO k = 1, klev                 + RD * 0.5*(t(i, k-1)+t(i, k)) / paprs(i, k) &
120       DO i = 1, knon                 * (pplay(i, k-1)-pplay(i, k))
121          pcfm(i, k) = 0.0         ENDDO
122          pcfh(i, k) = 0.0      ENDDO
123       ENDDO  
124    ENDDO      ! Calculer le frottement au sol (Cdrag)
125    DO i = 1, knon  
126       itop(i) = 0      DO i = 1, knon
127    ENDDO         u1(i) = u(i, 1)
128           v1(i) = v(i, 1)
129    ! Prescrire la valeur de contre-gradient         t1(i) = t(i, 1)
130           q1(i) = q(i, 1)
131    if (iflag_pbl.eq.1) then         z1(i) = zgeop(i, 1)
132       DO k = 3, klev      ENDDO
133          gamt(k) = -1.0E-03  
134       ENDDO      CALL clcdrag(klon, knon, nsrf, .false., u1, v1, t1, q1, z1, ts, qsurf, &
135       gamt(2) = -2.5E-03           rugos, coefm(:, 1), coefh(:, 1))
136    else  
137       DO k = 2, klev      ! Calculer les coefficients turbulents dans l'atmosphere
138          gamt(k) = 0.0  
139       ENDDO      itop = isommet
140    ENDIF  
141        loop_vertical: DO k = 2, isommet
142    IF ( nsrf .NE. is_oce ) THEN         loop_horiz: DO i = 1, knon
143       kstable = ksta_ter            zdu2 = MAX(cepdu2, (u(i, k)-u(i, k-1))**2 &
144    ELSE                 +(v(i, k)-v(i, k-1))**2)
145       kstable = ksta            zmgeom(i) = zgeop(i, k)-zgeop(i, k-1)
146    ENDIF            zdphi =zmgeom(i) / 2.0
147              zt = (t(i, k)+t(i, k-1)) * 0.5
148    ! Calculer les géopotentiels de chaque couche            zq = (q(i, k)+q(i, k-1)) * 0.5
149    
150    DO i = 1, knon            ! calculer Qs et dQs/dT:
151       zgeop(i, 1) = RD * t(i, 1) / (0.5 * (paprs(i, 1) + pplay(i, 1))) &  
152            * (paprs(i, 1) - pplay(i, 1))            zdelta = RTT >=zt
153    ENDDO            zcvm5 = merge(R5IES * RLSTT, R5LES * RLVTT, zdelta) / RCPD &
154    DO k = 2, klev                 / (1. + RVTMP2*zq)
155       DO i = 1, knon            zqs = R2ES * FOEEW(zt, zdelta) / pplay(i, k)
156          zgeop(i, k) = zgeop(i, k-1) &            zqs = MIN(0.5, zqs)
157               + RD * 0.5*(t(i, k-1)+t(i, k)) / paprs(i, k) &            zcor = 1./(1.-RETV*zqs)
158               * (pplay(i, k-1)-pplay(i, k))            zqs = zqs*zcor
159       ENDDO            zdqs = FOEDE(zt, zdelta, zcvm5, zqs, zcor)
160    ENDDO  
161              ! calculer la fraction nuageuse (processus humide):
162    ! Calculer le frottement au sol (Cdrag)  
163              zfr = (zq+ratqs*zq-zqs) / (2.0*ratqs*zq)
164    DO i = 1, knon            zfr = MAX(0.0, MIN(1.0, zfr))
165       u1(i) = u(i, 1)            IF (.NOT.richum) zfr = 0.0
166       v1(i) = v(i, 1)  
167       t1(i) = t(i, 1)            !  calculer le nombre de Richardson:
168       q1(i) = q(i, 1)  
169       z1(i) = zgeop(i, 1)            IF (tvirtu) THEN
170    ENDDO               ztvd =( t(i, k) &
171                      + zdphi/RCPD/(1.+RVTMP2*zq) &
172    CALL clcdrag(klon, knon, nsrf, zxli,  &                    *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &
173         u1, v1, t1, q1, z1, &                    )*(1.+RETV*q(i, k))
174         ts, qsurf, rugos, &               ztvu =( t(i, k-1) &
175         pcfm1, pcfh1)                    - zdphi/RCPD/(1.+RVTMP2*zq) &
176    !IM  $             ts, qsurf, rugos,                    *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &
177                      )*(1.+RETV*q(i, k-1))
178    DO i = 1, knon               ri(i) =zmgeom(i)*(ztvd-ztvu)/(zdu2*0.5*(ztvd+ztvu))
179       pcfm(i, 1)=pcfm1(i)               ri(i) = ri(i) &
180       pcfh(i, 1)=pcfh1(i)                    + zmgeom(i)*zmgeom(i)/RG*gamt(k) &
181    ENDDO                    *(paprs(i, k)/101325.0)**RKAPPA &
182                      /(zdu2*0.5*(ztvd+ztvu))
183    ! Calculer les coefficients turbulents dans l'atmosphere            ELSE
184                 ! calcul de Ridchardson compatible LMD5
185    DO i = 1, knon               ri(i) =(RCPD*(t(i, k)-t(i, k-1)) &
186       itop(i) = isommet                    -RD*0.5*(t(i, k)+t(i, k-1))/paprs(i, k) &
187    ENDDO                    *(pplay(i, k)-pplay(i, k-1)) &
188                      )*zmgeom(i)/(zdu2*0.5*RCPD*(t(i, k-1)+t(i, k)))
189    DO k = 2, isommet               ri(i) = ri(i) + &
190       DO i = 1, knon                    zmgeom(i)*zmgeom(i)*gamt(k)/RG &
191          zdu2=MAX(cepdu2, (u(i, k)-u(i, k-1))**2 &                    *(paprs(i, k)/101325.0)**RKAPPA &
192               +(v(i, k)-v(i, k-1))**2)                    /(zdu2*0.5*(t(i, k-1)+t(i, k)))
193          zmgeom(i)=zgeop(i, k)-zgeop(i, k-1)            ENDIF
194          zdphi =zmgeom(i) / 2.0  
195          zt = (t(i, k)+t(i, k-1)) * 0.5            ! finalement, les coefficients d'echange sont obtenus:
196          zq = (q(i, k)+q(i, k-1)) * 0.5  
197              cdn = SQRT(zdu2) / zmgeom(i) * RG
198          !           calculer Qs et dQs/dT:  
199              IF (opt_ec) THEN
200          IF (thermcep) THEN               z2geomf = zgeop(i, k-1)+zgeop(i, k)
201             zdelta = MAX(0., SIGN(1., RTT-zt))               alm2 = (0.5*ckap/RG*z2geomf &
202             zcvm5 = R5LES*RLVTT/RCPD/(1.0+RVTMP2*zq)*(1.-zdelta)  &                    /(1.+0.5*ckap/rg/clam*z2geomf))**2
203                  + R5IES*RLSTT/RCPD/(1.0+RVTMP2*zq)*zdelta               zalh2 = (0.5*ckap/rg*z2geomf &
204             zqs = R2ES * FOEEW(zt, zdelta) / pplay(i, k)                    /(1.+0.5*ckap/RG/(clam*SQRT(1.5*cd))*z2geomf))**2
205             zqs = MIN(0.5, zqs)               IF (ri(i) < 0.) THEN
206             zcor = 1./(1.-RETV*zqs)                  ! situation instable
207             zqs = zqs*zcor                  scf = ((zgeop(i, k)/zgeop(i, k-1))**(1./3.)-1.)**3 &
208             zdqs = FOEDE(zt, zdelta, zcvm5, zqs, zcor)                       / (zmgeom(i)/RG)**3 / (zgeop(i, k-1)/RG)
209          ELSE                  scf = SQRT(-ri(i)*scf)
210             IF (zt .LT. t_coup) THEN                  scfm = 1.0 / (1.0+3.0*cb*cc*alm2*scf)
211                zqs = qsats(zt) / pplay(i, k)                  zscfh = 1.0 / (1.0+3.0*cb*cc*zalh2*scf)
212                zdqs = dqsats(zt, zqs)                  coefm(i, k) = cdn * alm2 * (1. - 2. * cb * ri(i) * scfm)
213             ELSE                  coefh(i, k) = cdn*zalh2*(1.-3.0*cb*ri(i)*zscfh)
214                zqs = qsatl(zt) / pplay(i, k)               ELSE
215                zdqs = dqsatl(zt, zqs)                  ! situation stable
216             ENDIF                  scf = SQRT(1.+cd*ri(i))
217          ENDIF                  coefm(i, k) = cdn * alm2 / (1. + 2. * cb * ri(i) / scf)
218                    coefh(i, k) = cdn*zalh2/(1.+3.0*cb*ri(i)*scf)
219          !           calculer la fraction nuageuse (processus humide):               ENDIF
220              ELSE
221          zfr = (zq+ratqs*zq-zqs) / (2.0*ratqs*zq)               l2(i) = (mixlen*MAX(0.0, (paprs(i, k)-paprs(i, itop(i)+1)) &
222          zfr = MAX(0.0, MIN(1.0, zfr))                    /(paprs(i, 2)-paprs(i, itop(i)+1)) ))**2
223          IF (.NOT.richum) zfr = 0.0               coefm(i, k) = sqrt(max(cdn**2 * (ric - ri(i)) / ric, kstable))
224                 coefm(i, k)= l2(i) * coefm(i, k)
225          !           calculer le nombre de Richardson:               coefh(i, k) = coefm(i, k) / prandtl ! h et m different
226              ENDIF
227          IF (tvirtu) THEN         ENDDO loop_horiz
228             ztvd =( t(i, k) &      ENDDO loop_vertical
229                  + zdphi/RCPD/(1.+RVTMP2*zq) &  
230                  *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &      ! Au-delà du sommet, pas de diffusion turbulente :
231                  )*(1.+RETV*q(i, k))      forall (i = 1: knon)
232             ztvu =( t(i, k-1) &         coefh(i, itop(i) + 1:) = 0.
233                  - zdphi/RCPD/(1.+RVTMP2*zq) &         coefm(i, itop(i) + 1:) = 0.
234                  *( (1.-zfr) + zfr*(1.+RLVTT*zqs/RD/zt)/(1.+zdqs) ) &      END forall
235                  )*(1.+RETV*q(i, k-1))  
236             zri(i) =zmgeom(i)*(ztvd-ztvu)/(zdu2*0.5*(ztvd+ztvu))    END SUBROUTINE coefkz
            zri(i) = zri(i) &  
                 + zmgeom(i)*zmgeom(i)/RG*gamt(k) &  
                 *(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  
237    
238  END SUBROUTINE coefkz  end module coefkz_m

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

  ViewVC Help
Powered by ViewVC 1.1.21