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

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

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

revision 236 by guez, Thu Nov 9 12:47:25 2017 UTC revision 237 by guez, Thu Nov 9 13:26:00 2017 UTC
# Line 106  contains Line 106  contains
106      ! dflux_q derive du flux latent      ! dflux_q derive du flux latent
107      ! IM "slab" ocean      ! IM "slab" ocean
108    
109      REAL, intent(out):: ycoefh(klon, klev)      REAL, intent(out):: ycoefh(:, :) ! (klon, klev)
110      ! Pour pouvoir extraire les coefficients d'\'echange, le champ      ! Pour pouvoir extraire les coefficients d'\'echange, le champ
111      ! "ycoefh" a \'et\'e cr\'e\'e. Nous avons moyenn\'e les valeurs de      ! "ycoefh" a \'et\'e cr\'e\'e. Nous avons moyenn\'e les valeurs de
112      ! ce champ sur les quatre sous-surfaces du mod\`ele.      ! ce champ sur les quatre sous-surfaces du mod\`ele.
# Line 164  contains Line 164  contains
164      REAL y_flux_t(klon), y_flux_q(klon)      REAL y_flux_t(klon), y_flux_q(klon)
165      REAL y_flux_u(klon), y_flux_v(klon)      REAL y_flux_u(klon), y_flux_v(klon)
166      REAL y_dflux_t(klon), y_dflux_q(klon)      REAL y_dflux_t(klon), y_dflux_q(klon)
167      REAL coefh(klon, klev), coefm(klon, klev)      REAL coefh(klon, 2:klev), coefm(klon, 2:klev)
168        real ycdragh(klon), ycdragm(klon)
169      REAL yu(klon, klev), yv(klon, klev)      REAL yu(klon, klev), yv(klon, klev)
170      REAL yt(klon, klev), yq(klon, klev)      REAL yt(klon, klev), yq(klon, klev)
171      REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)      REAL ypaprs(klon, klev + 1), ypplay(klon, klev), ydelp(klon, klev)
# Line 312  contains Line 313  contains
313    
314            ! calculer Cdrag et les coefficients d'echange            ! calculer Cdrag et les coefficients d'echange
315            CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts(:knon), &            CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts(:knon), &
316                 yrugos, yu, yv, yt, yq, yqsurf(:knon), coefm(:knon, 2:), &                 yrugos, yu, yv, yt, yq, yqsurf(:knon), coefm(:knon, :), &
317                 coefh(:knon, 2:), coefm(:knon, 1), coefh(:knon, 1))                 coefh(:knon, :), ycdragm(:knon), ycdragh(:knon))
318    
319            IF (iflag_pbl == 1) THEN            IF (iflag_pbl == 1) THEN
320               CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0(:knon, 2:), &               CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0(:knon, 2:), &
321                    ycoefh0(:knon, 2:))                    ycoefh0(:knon, 2:))
322               ycoefm0(:knon, 1) = 0.               ycoefm0(:knon, 1) = 0.
323               ycoefh0(:knon, 1) = 0.               ycoefh0(:knon, 1) = 0.
324               coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :))               coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, 2:))
325               coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, :))               coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, 2:))
326                 ycdragm(:knon) = max(ycdragm(:knon), ycoefm0(:knon, 1))
327                 ycdragh(:knon) = max(ycdragh(:knon), ycoefh0(:knon, 1))
328            END IF            END IF
329    
330            ! on met un seuil pour coefm et coefh            ! on met un seuil pour ycdragm et ycdragh
331            IF (nsrf == is_oce) THEN            IF (nsrf == is_oce) THEN
332               coefm(:knon, 1) = min(coefm(:knon, 1), cdmmax)               ycdragm(:knon) = min(ycdragm(:knon), cdmmax)
333               coefh(:knon, 1) = min(coefh(:knon, 1), cdhmax)               ycdragh(:knon) = min(ycdragh(:knon), cdhmax)
334            END IF            END IF
335    
336            IF (ok_kzmin) THEN            IF (ok_kzmin) THEN
337               ! Calcul d'une diffusion minimale pour les conditions tres stables               ! Calcul d'une diffusion minimale pour les conditions tres stables
338               CALL coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, &               CALL coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, &
339                    coefm(:knon, 1), ycoefm0(:knon, 2:), ycoefh0(:knon, 2:))                    ycdragm(:knon), ycoefm0(:knon, 2:), ycoefh0(:knon, 2:))
340               coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :))               coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, 2:))
341               coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, :))               coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, 2:))
342                 ycdragm(:knon) = max(ycdragm(:knon), ycoefm0(:knon, 1))
343                 ycdragh(:knon) = max(ycdragh(:knon), ycoefh0(:knon, 1))
344            END IF            END IF
345    
346            IF (iflag_pbl >= 6) THEN            IF (iflag_pbl >= 6) THEN
# Line 372  contains Line 377  contains
377                  END DO                  END DO
378               END DO               END DO
379    
380               ustar(:knon) = ustarhb(yu(:knon, 1), yv(:knon, 1), coefm(:knon, 1))               ustar(:knon) = ustarhb(yu(:knon, 1), yv(:knon, 1), ycdragm(:knon))
381               CALL yamada4(dtime, rg, zlev(:knon, :), yzlay(:knon, :), &               CALL yamada4(dtime, rg, zlev(:knon, :), yzlay(:knon, :), &
382                    yu(:knon, :), yv(:knon, :), yteta(:knon, :), &                    yu(:knon, :), yv(:knon, :), yteta(:knon, :), &
383                    coefm(:knon, 1), yq2(:knon, :), ykmm(:knon, :), &                    ycdragm(:knon), yq2(:knon, :), ykmm(:knon, :), &
384                    ykmn(:knon, :), ykmq(:knon, :), ustar(:knon))                    ykmn(:knon, :), ykmq(:knon, :), ustar(:knon))
385               coefm(:knon, 2:) = ykmm(:knon, 2:klev)               coefm(:knon, 2:) = ykmm(:knon, 2:klev)
386               coefh(:knon, 2:) = ykmn(:knon, 2:klev)               coefh(:knon, 2:) = ykmn(:knon, 2:klev)
387            END IF            END IF
388    
389            CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), coefm(:knon, 2:), &            CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), coefm(:knon, :), &
390                 coefm(:knon, 1), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &                 ycdragm(:knon), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), &
391                 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &                 ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), &
392                 y_flux_u(:knon))                 y_flux_u(:knon))
393            CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), coefm(:knon, 2:), &            CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), coefm(:knon, :), &
394                 coefm(:knon, 1), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &                 ycdragm(:knon), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), &
395                 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &                 ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), &
396                 y_flux_v(:knon))                 y_flux_v(:knon))
397    
398            ! calculer la diffusion de "q" et de "h"            ! calculer la diffusion de "q" et de "h"
399            CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &            CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
400                 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos, yrugoro, &                 ytsoil(:knon, :), yqsol(:knon), mu0, yrugos, yrugoro, &
401                 yu(:knon, 1), yv(:knon, 1), coefh(:knon, 2:), coefh(:knon, 1), &                 yu(:knon, 1), yv(:knon, 1), coefh(:knon, :), ycdragh(:knon), &
402                 yt, yq, yts(:knon), ypaprs, ypplay, ydelp, yrads(:knon), &                 yt, yq, yts(:knon), ypaprs, ypplay, ydelp, yrads(:knon), &
403                 yalb(:knon), snow(:knon), yqsurf, yrain_f, ysnow_f, &                 yalb(:knon), snow(:knon), yqsurf, yrain_f, ysnow_f, &
404                 yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), y_d_t, y_d_q, &                 yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), y_d_t, y_d_q, &
# Line 405  contains Line 410  contains
410            yrugm = 0.            yrugm = 0.
411            IF (nsrf == is_oce) THEN            IF (nsrf == is_oce) THEN
412               DO j = 1, knon               DO j = 1, knon
413                  yrugm(j) = 0.018 * coefm(j, 1) * (yu(j, 1)**2 + yv(j, 1)**2) &                  yrugm(j) = 0.018 * ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2) &
414                       / rg + 0.11 * 14E-6 &                       / rg + 0.11 * 14E-6 &
415                       / sqrt(coefm(j, 1) * (yu(j, 1)**2 + yv(j, 1)**2))                       / sqrt(ycdragm(j) * (yu(j, 1)**2 + yv(j, 1)**2))
416                  yrugm(j) = max(1.5E-05, yrugm(j))                  yrugm(j) = max(1.5E-05, yrugm(j))
417               END DO               END DO
418            END IF            END IF
# Line 416  contains Line 421  contains
421               y_dflux_q(j) = y_dflux_q(j) * ypct(j)               y_dflux_q(j) = y_dflux_q(j) * ypct(j)
422            END DO            END DO
423    
424            DO k = 1, klev            DO k = 2, klev
425               DO j = 1, knon               DO j = 1, knon
426                  i = ni(j)                  i = ni(j)
427                  coefh(j, k) = coefh(j, k) * ypct(j)                  coefh(j, k) = coefh(j, k) * ypct(j)
428                  coefm(j, k) = coefm(j, k) * ypct(j)                  coefm(j, k) = coefm(j, k) * ypct(j)
429                 END DO
430              END DO
431              DO j = 1, knon
432                 i = ni(j)
433                 ycdragh(j) = ycdragh(j) * ypct(j)
434                 ycdragm(j) = ycdragm(j) * ypct(j)
435              END DO
436              DO k = 1, klev
437                 DO j = 1, knon
438                    i = ni(j)
439                  y_d_t(j, k) = y_d_t(j, k) * ypct(j)                  y_d_t(j, k) = y_d_t(j, k) * ypct(j)
440                  y_d_q(j, k) = y_d_q(j, k) * ypct(j)                  y_d_q(j, k) = y_d_q(j, k) * ypct(j)
441                  y_d_u(j, k) = y_d_u(j, k) * ypct(j)                  y_d_u(j, k) = y_d_u(j, k) * ypct(j)
# Line 454  contains Line 469  contains
469               agesno(i, nsrf) = yagesno(j)               agesno(i, nsrf) = yagesno(j)
470               fqcalving(i, nsrf) = y_fqcalving(j)               fqcalving(i, nsrf) = y_fqcalving(j)
471               ffonte(i, nsrf) = y_ffonte(j)               ffonte(i, nsrf) = y_ffonte(j)
472               cdragh(i) = cdragh(i) + coefh(j, 1)               cdragh(i) = cdragh(i) + ycdragh(j)
473               cdragm(i) = cdragm(i) + coefm(j, 1)               cdragm(i) = cdragm(i) + ycdragm(j)
474               dflux_t(i) = dflux_t(i) + y_dflux_t(j)               dflux_t(i) = dflux_t(i) + y_dflux_t(j)
475               dflux_q(i) = dflux_q(i) + y_dflux_q(j)               dflux_q(i) = dflux_q(i) + y_dflux_q(j)
476            END DO            END DO
# Line 478  contains Line 493  contains
493                  d_q(i, k) = d_q(i, k) + y_d_q(j, k)                  d_q(i, k) = d_q(i, k) + y_d_q(j, k)
494                  d_u(i, k) = d_u(i, k) + y_d_u(j, k)                  d_u(i, k) = d_u(i, k) + y_d_u(j, k)
495                  d_v(i, k) = d_v(i, k) + y_d_v(j, k)                  d_v(i, k) = d_v(i, k) + y_d_v(j, k)
496                 END DO
497              END DO
498              
499              DO j = 1, knon
500                 i = ni(j)
501                 DO k = 2, klev
502                  ycoefh(i, k) = ycoefh(i, k) + coefh(j, k)                  ycoefh(i, k) = ycoefh(i, k) + coefh(j, k)
503               END DO               END DO
504            END DO            END DO
505    
506              DO j = 1, knon
507                 i = ni(j)
508                 ycoefh(i, 1) = ycoefh(i, 1) + ycdragh(j)
509              END DO
510    
511            ! diagnostic t, q a 2m et u, v a 10m            ! diagnostic t, q a 2m et u, v a 10m
512    
513            DO j = 1, knon            DO j = 1, knon

Legend:
Removed from v.236  
changed lines
  Added in v.237

  ViewVC Help
Powered by ViewVC 1.1.21