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

Diff of /trunk/phylmd/pbl_surface.f

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

revision 244 by guez, Tue Nov 14 14:56:42 2017 UTC revision 249 by guez, Fri Jan 5 17:15:05 2018 UTC
# Line 21  contains Line 21  contains
21      ! ne tient pas compte de la diff\'erentiation des sous-fractions      ! ne tient pas compte de la diff\'erentiation des sous-fractions
22      ! de sol.      ! de sol.
23    
24        use clcdrag_m, only: clcdrag
25      use clqh_m, only: clqh      use clqh_m, only: clqh
26      use clvent_m, only: clvent      use clvent_m, only: clvent
27      use coefkz_m, only: coefkz      use coefkz_m, only: coefkz
# Line 150  contains Line 151  contains
151      real y_run_off_lic_0(klon)      real y_run_off_lic_0(klon)
152      REAL rugmer(klon)      REAL rugmer(klon)
153      REAL ytsoil(klon, nsoilmx)      REAL ytsoil(klon, nsoilmx)
154      REAL yts(klon), yrugos(klon), ypct(klon), yz0_new(klon)      REAL yts(klon), ypct(klon), yz0_new(klon)
155        real yrugos(klon) ! longeur de rugosite (en m)
156      REAL yalb(klon)      REAL yalb(klon)
157      REAL snow(klon), yqsurf(klon), yagesno(klon)      REAL snow(klon), yqsurf(klon), yagesno(klon)
158      real yqsol(klon) ! column-density of water in soil, in kg m-2      real yqsol(klon) ! column-density of water in soil, in kg m-2
# Line 171  contains Line 173  contains
173      REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)      REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
174      REAL ycoefm0(klon, 2:klev), ycoefh0(klon, 2:klev)      REAL ycoefm0(klon, 2:klev), ycoefh0(klon, 2:klev)
175      REAL yzlay(klon, klev), zlev(klon, klev + 1), yteta(klon, klev)      REAL yzlay(klon, klev), zlev(klon, klev + 1), yteta(klon, klev)
     REAL ykmm(klon, klev + 1), ykmn(klon, klev + 1)  
176      REAL yq2(klon, klev + 1)      REAL yq2(klon, klev + 1)
177      REAL delp(klon, klev)      REAL delp(klon, klev)
178      INTEGER i, k, nsrf      INTEGER i, k, nsrf
# Line 201  contains Line 202  contains
202    
203      REAL qairsol(klon), zgeo1(klon)      REAL qairsol(klon), zgeo1(klon)
204      REAL rugo1(klon)      REAL rugo1(klon)
205        REAL zgeop(klon, klev)
206    
207      !------------------------------------------------------------      !------------------------------------------------------------
208    
# Line 310  contains Line 312  contains
312               END DO               END DO
313            END DO            END DO
314    
315            CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts(:knon), &            ! Calculer les géopotentiels de chaque couche:
316                 yrugos, yu, yv, yt, yq, yqsurf(:knon), ycoefm(:knon, :), &  
317                 ycoefh(:knon, :), ycdragm(:knon), ycdragh(:knon))            zgeop(:knon, 1) = RD * yt(:knon, 1) / (0.5 * (ypaprs(:knon, 1) &
318                   + ypplay(:knon, 1))) * (ypaprs(:knon, 1) - ypplay(:knon, 1))
319    
320              DO k = 2, klev
321                 zgeop(:knon, k) = zgeop(:knon, k - 1) + RD * 0.5 &
322                      * (yt(:knon, k - 1) + yt(:knon, k)) / ypaprs(:knon, k) &
323                      * (ypplay(:knon, k - 1) - ypplay(:knon, k))
324              ENDDO
325    
326              CALL clcdrag(nsrf, yu(:knon, 1), yv(:knon, 1), yt(:knon, 1), &
327                   yq(:knon, 1), zgeop(:knon, 1), yts(:knon), yqsurf(:knon), &
328                   yrugos(:knon), ycdragm(:knon), ycdragh(:knon))
329    
330            IF (iflag_pbl == 1) THEN            IF (iflag_pbl == 1) THEN
              CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0(:knon, :), &  
                   ycoefh0(:knon, :))  
              ycoefm(:knon, :) = max(ycoefm(:knon, :), ycoefm0(:knon, :))  
              ycoefh(:knon, :) = max(ycoefh(:knon, :), ycoefh0(:knon, :))  
331               ycdragm(:knon) = max(ycdragm(:knon), 0.)               ycdragm(:knon) = max(ycdragm(:knon), 0.)
332               ycdragh(:knon) = max(ycdragh(:knon), 0.)               ycdragh(:knon) = max(ycdragh(:knon), 0.)
333            END IF            end IF
334              
335            ! on met un seuil pour ycdragm et ycdragh            ! on met un seuil pour ycdragm et ycdragh
336            IF (nsrf == is_oce) THEN            IF (nsrf == is_oce) THEN
337               ycdragm(:knon) = min(ycdragm(:knon), cdmmax)               ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
338               ycdragh(:knon) = min(ycdragh(:knon), cdhmax)               ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
339            END IF            END IF
340    
341              CALL coefkz(nsrf, ypaprs(:knon, :), ypplay(:knon, :), ksta, &
342                   ksta_ter, yts(:knon), yu(:knon, :), yv(:knon, :), yt(:knon, :), &
343                   yq(:knon, :), zgeop(:knon, :), ycoefm(:knon, :), &
344                   ycoefh(:knon, :))
345    
346              IF (iflag_pbl == 1) THEN
347                 CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0(:knon, :), &
348                      ycoefh0(:knon, :))
349                 ycoefm(:knon, :) = max(ycoefm(:knon, :), ycoefm0(:knon, :))
350                 ycoefh(:knon, :) = max(ycoefh(:knon, :), ycoefh0(:knon, :))
351              END IF
352    
353            IF (ok_kzmin) THEN            IF (ok_kzmin) THEN
354               ! Calcul d'une diffusion minimale pour les conditions tres stables               ! Calcul d'une diffusion minimale pour les conditions tres stables
355               CALL coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, &               CALL coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, &
# Line 375  contains Line 396  contains
396               ustar(:knon) = ustarhb(yu(:knon, 1), yv(:knon, 1), ycdragm(:knon))               ustar(:knon) = ustarhb(yu(:knon, 1), yv(:knon, 1), ycdragm(:knon))
397               CALL yamada4(dtime, rg, zlev(:knon, :), yzlay(:knon, :), &               CALL yamada4(dtime, rg, zlev(:knon, :), yzlay(:knon, :), &
398                    yu(:knon, :), yv(:knon, :), yteta(:knon, :), yq2(:knon, :), &                    yu(:knon, :), yv(:knon, :), yteta(:knon, :), yq2(:knon, :), &
399                    ykmm(:knon, :), ykmn(:knon, :), ustar(:knon))                    ycoefm(:knon, :), ycoefh(:knon, :), ustar(:knon))
              ycoefm(:knon, :) = ykmm(:knon, 2:klev)  
              ycoefh(:knon, :) = ykmn(:knon, 2:klev)  
400            END IF            END IF
401    
402            CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &            CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), ycoefm(:knon, :), &
# Line 504  contains Line 523  contains
523    
524            CALL stdlevvar(klon, knon, nsrf, u1(:knon), v1(:knon), tair1(:knon), &            CALL stdlevvar(klon, knon, nsrf, u1(:knon), v1(:knon), tair1(:knon), &
525                 qair1, zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, &                 qair1, zgeo1, tairsol, qairsol, rugo1, psfce, patm, yt2m, &
526                 yq2m, yt10m, yq10m, wind10m(:knon), ustar)                 yq2m, yt10m, yq10m, wind10m(:knon), ustar(:knon))
527    
528            DO j = 1, knon            DO j = 1, knon
529               i = ni(j)               i = ni(j)

Legend:
Removed from v.244  
changed lines
  Added in v.249

  ViewVC Help
Powered by ViewVC 1.1.21