Ignore:
Timestamp:
Nov 27, 2014, 4:48:31 PM (9 years ago)
Author:
jyg
Message:

1/ Splitting of the boundary layer : the climbing down and up of Pbl_surface is
split between the off-wake and wake regions ; the thermal scheme is applied
only to the off-wake region.
2/ Elimination of wake_scal and calwake_scal.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2146 r2159  
    371371  REAL q_undi(klon,klev)               ! humidite moyenne dans la zone non perturbee
    372372  !
    373   !jyg
     373  !jyg<
    374374  !cc      REAL wake_pe(klon)              ! Wake potential energy - WAPE
     375  !>jyg
    375376
    376377  REAL wake_gfl(klon)             ! Gust Front Length
     
    392393  !$OMP THREADPRIVATE(alp_offset)
    393394
     395!!!
     396!=================================================================
     397!         PROVISOIRE : DECOUPLAGE PBL/WAKE
     398!         --------------------------------
     399      REAL wake_deltat_sav(klon,klev)
     400      REAL wake_deltaq_sav(klon,klev)
     401!=================================================================
     402
    394403  !
    395404  !RR:fin declarations poches froides
     
    409418  real w0(klon)                                          ! Vitesse des thermiques au LCL
    410419  real w_conv(klon)                                      ! Vitesse verticale de grande \'echelle au LCL
    411   real tke0(klon,klev+1)                                 ! TKE au début du pas de temps
     420  real tke0(klon,klev+1)                                 ! TKE au début du pas de temps
    412421  real therm_tke_max0(klon)                              ! TKE dans les thermiques au LCL
    413422  real env_tke_max0(klon)                                ! TKE dans l'environnement au LCL
     
    418427  !--------Statistical Boundary Layer Closure: ALP_BL--------
    419428  !---Profils de TKE dans et hors du thermique
    420   real pbl_tke_input(klon,klev+1,nbsrf)
    421429  real therm_tke_max(klon,klev)                          ! Profil de TKE dans les thermiques
    422430  real env_tke_max(klon,klev)                            ! Profil de TKE dans l'environnement
     
    12391247          iGCM,jGCM,lonGCM,latGCM, &
    12401248          jjmp1,nlevSTD,clevSTD,rlevSTD, dtime,ok_veget, &
    1241           type_ocean,iflag_pbl,ok_mensuel,ok_journe, &
     1249          type_ocean,iflag_pbl,iflag_pbl_split,ok_mensuel,ok_journe, &
    12421250          ok_hf,ok_instan,ok_LES,ok_ade,ok_aie,  &
    12431251          read_climoz, phys_out_filestations, &
     
    16511659        else
    16521660
    1653 !CR: on ré-évapore eau liquide et glace
     1661!CR: on ré-évapore eau liquide et glace
    16541662
    16551663!        zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
     
    16631671        q_seri(i,k) = q_seri(i,k) + zb
    16641672        ql_seri(i,k) = 0.0
    1665 !on évapore la glace
     1673!on évapore la glace
    16661674        qs_seri(i,k) = 0.0
    16671675        d_t_eva(i,k) = za
     
    17741782  if (iflag_pbl/=0) then
    17751783
     1784!jyg+nrlmd<
     1785      IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,2) .eq. 1) THEN
     1786        print *,'debut du splitting de la PBL'
     1787      ENDIF
     1788!!!
     1789!=================================================================
     1790!         PROVISOIRE : DECOUPLAGE PBL/WAKE
     1791!         --------------------------------
     1792!
     1793!!      wake_deltat_sav(:,:)=wake_deltat(:,:)
     1794!!      wake_deltaq_sav(:,:)=wake_deltaq(:,:)
     1795!!      wake_deltat(:,:)=0.
     1796!!      wake_deltaq(:,:)=0.
     1797!=================================================================
     1798!>jyg+nrlmd
     1799!
    17761800     CALL pbl_surface(  &
    17771801          dtime,     date0,     itap,    days_elapsed+1, &
     
    17811805          rain_fall, snow_fall, solsw,   sollw,     &
    17821806          t_seri,    q_seri,    u_seri,  v_seri,    &
     1807!nrlmd+jyg<
     1808          wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     1809!>nrlmd+jyg
    17831810          pplay,     paprs,     pctsrf,             &
    17841811          ftsol,falb1,falb2,ustar,u10m,v10m,wstar, &
     
    17881815          zxtsol,    zxfluxlat, zt2m,    qsat2m,  &
    17891816          d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     1817!nrlmd<
     1818  !jyg<
     1819          d_t_vdf_w, d_q_vdf_w, &
     1820          d_t_vdf_x, d_q_vdf_x, &
     1821          sens_x, zxfluxlat_x, sens_w, zxfluxlat_w, &
     1822  !>jyg
     1823          delta_tsurf,wake_dens, &
     1824          cdragh_x,cdragh_w,cdragm_x,cdragm_w, &
     1825          kh,kh_x,kh_w, &
     1826!>nrlmd
    17901827          coefh(1:klon,1:klev,1:nbsrf+1),     coefm(1:klon,1:klev,1:nbsrf+1), &
    17911828          slab_wfbils,                 &
    17921829          qsol,      zq2m,      s_pblh,  s_lcl, &
     1830!jyg<
     1831          s_pblh_x, s_lcl_x, s_pblh_w, s_lcl_w, &
     1832!>jyg
    17931833          s_capCL,   s_oliqCL,  s_cteiCL,s_pblT, &
    17941834          s_therm,   s_trmb1,   s_trmb2, s_trmb3, &
     
    17991839          wfbils,    wfbilo,    fluxt,   fluxu,  fluxv, &
    18001840          dsens,     devap,     zxsnow, &
    1801           zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke )
     1841          zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     1842!nrlmd+jyg<
     1843          wake_delta_pbl_TKE &
     1844!>nrlmd+jyg
     1845                      )
     1846!
     1847!=================================================================
     1848!         PROVISOIRE : DECOUPLAGE PBL/WAKE
     1849!         --------------------------------
     1850!
     1851!!      wake_deltat(:,:)=wake_deltat_sav(:,:)
     1852!!      wake_deltaq(:,:)=wake_deltaq_sav(:,:)
     1853!=================================================================
     1854!
     1855!  Add turbulent diffusion tendency to the wake difference variables
     1856    wake_deltat(:,:) = wake_deltat(:,:) + (d_t_vdf_w(:,:)-d_t_vdf_x(:,:))
     1857    wake_deltaq(:,:) = wake_deltaq(:,:) + (d_q_vdf_w(:,:)-d_q_vdf_x(:,:))
    18021858
    18031859
     
    22702326  !pour la couche limite diffuse pour l instant
    22712327  !
     2328  !
     2329  !!! nrlmd le 22/03/2011---Si on met les poches hors des thermiques il faut rajouter cette
     2330  !------------------------- tendance calculée hors des poches froides
     2331  !
    22722332  if (iflag_wake>=1) then
    22732333     DO k=1,klev
    22742334        DO i=1,klon
    22752335           dt_dwn(i,k)  = ftd(i,k)
    2276            wdt_PBL(i,k) = 0.
    22772336           dq_dwn(i,k)  = fqd(i,k)
    2278            wdq_PBL(i,k) = 0.
    22792337           M_dwn(i,k)   = dnwd0(i,k)
    22802338           M_up(i,k)    = upwd(i,k)
    22812339           dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k)
    2282            udt_PBL(i,k) = 0.
    22832340           dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
    2284            udq_PBL(i,k) = 0.
    22852341        ENDDO
    22862342     ENDDO
     2343!nrlmd+jyg<
     2344     DO k=1,klev
     2345        DO i=1,klon
     2346          wdt_PBL(i,k) =  0.
     2347          wdq_PBL(i,k) =  0.
     2348          udt_PBL(i,k) =  0.
     2349          udq_PBL(i,k) =  0.
     2350        ENDDO
     2351     ENDDO
     2352!
     2353     IF (mod(iflag_pbl_split,2) .EQ. 1) THEN
     2354       DO k=1,klev
     2355        DO i=1,klon
     2356       wdt_PBL(i,k) = wdt_PBL(i,k) + d_t_vdf_w(i,k)/dtime
     2357       wdq_PBL(i,k) = wdq_PBL(i,k) + d_q_vdf_w(i,k)/dtime
     2358       udt_PBL(i,k) = udt_PBL(i,k) + d_t_vdf_x(i,k)/dtime
     2359       udq_PBL(i,k) = udq_PBL(i,k) + d_q_vdf_x(i,k)/dtime
     2360!!        dt_dwn(i,k)  = dt_dwn(i,k) + d_t_vdf_w(i,k)/dtime
     2361!!        dq_dwn(i,k)  = dq_dwn(i,k) + d_q_vdf_w(i,k)/dtime
     2362!!        dt_a  (i,k)    = dt_a(i,k) + d_t_vdf_x(i,k)/dtime
     2363!!        dq_a  (i,k)    = dq_a(i,k) + d_q_vdf_x(i,k)/dtime
     2364        ENDDO
     2365       ENDDO
     2366      ENDIF
     2367      IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN
     2368       DO k=1,klev
     2369        DO i=1,klon
     2370!!        dt_dwn(i,k)  = dt_dwn(i,k) + 0.
     2371!!        dq_dwn(i,k)  = dq_dwn(i,k) + 0.
     2372!!        dt_a(i,k)   = dt_a(i,k)   + d_t_ajs(i,k)/dtime
     2373!!        dq_a(i,k)   = dq_a(i,k)   + d_q_ajs(i,k)/dtime
     2374        udt_PBL(i,k)   = udt_PBL(i,k)   + d_t_ajs(i,k)/dtime
     2375        udq_PBL(i,k)   = udq_PBL(i,k)   + d_q_ajs(i,k)/dtime
     2376        ENDDO
     2377       ENDDO
     2378      ENDIF
     2379!>nrlmd+jyg
    22872380
    22882381     IF (iflag_wake==2) THEN
     
    22992392           DO i=1,klon
    23002393              IF (rneb(i,k)==0.) THEN
    2301 ! On ne tient compte des tendances qu'en dehors des nuages (c'est |  dire
     2394! On ne tient compte des tendances qu'en dehors des nuages (c'est �|  dire
    23022395! a priri dans une region ou l'eau se reevapore).
    23032396                dt_dwn(i,k)= dt_dwn(i,k)+ &
     
    23392432     !------------------------------------------------------------------------
    23402433
    2341   endif
     2434  endif  ! (iflag_wake>=1)
    23422435  !
    23432436  !===================================================================
     
    24072500
    24082501     if (iflag_thermals>=1) then
     2502!jyg<
     2503         IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN
     2504!  Appel des thermiques avec les profils exterieurs aux poches
     2505          DO k=1,klev
     2506           DO i=1,klon
     2507            t_therm(i,k) = t_seri(i,k) - wake_s(i)*wake_deltat(i,k)
     2508            q_therm(i,k) = q_seri(i,k) - wake_s(i)*wake_deltaq(i,k)
     2509           ENDDO
     2510          ENDDO
     2511         ELSE
     2512!  Appel des thermiques avec les profils moyens
     2513          DO k=1,klev
     2514           DO i=1,klon
     2515            t_therm(i,k) = t_seri(i,k)
     2516            q_therm(i,k) = q_seri(i,k)
     2517           ENDDO
     2518          ENDDO
     2519         ENDIF
     2520!>jyg
    24092521        call calltherm(pdtphys &
    24102522             ,pplay,paprs,pphi,weak_inversion &
    2411              ,u_seri,v_seri,t_seri,q_seri,zqsat,debut &
     2523!!             ,u_seri,v_seri,t_seri,q_seri,zqsat,debut &  !jyg
     2524             ,u_seri,v_seri,t_therm,q_therm,zqsat,debut &  !jyg
    24122525             ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs &
    24132526             ,fm_therm,entr_therm,detr_therm &
     
    24262539             !cc fin nrlmd le 10/04/2012
    24272540             ,zqla,ztva )
     2541!
     2542!jyg<
     2543         IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN
     2544!  Si les thermiques ne sont presents que hors des poches, la tendance moyenne
     2545!  associée doit etre multipliee par la fraction surfacique qu'ils couvrent.
     2546          DO k=1,klev
     2547           DO i=1,klon
     2548!
     2549            wake_deltat(i,k) = wake_deltat(i,k) - d_t_ajs(i,k)
     2550            wake_deltaq(i,k) = wake_deltaq(i,k) - d_q_ajs(i,k)
     2551            t_seri(i,k) = t_therm(i,k) + wake_s(i)*wake_deltat(i,k)
     2552            q_seri(i,k) = q_therm(i,k) + wake_s(i)*wake_deltaq(i,k)
     2553!
     2554            d_u_ajs(i,k) = d_u_ajs(i,k)*(1.-wake_s(i))
     2555            d_v_ajs(i,k) = d_v_ajs(i,k)*(1.-wake_s(i))
     2556            d_t_ajs(i,k) = d_t_ajs(i,k)*(1.-wake_s(i))
     2557            d_q_ajs(i,k) = d_q_ajs(i,k)*(1.-wake_s(i))
     2558!
     2559           ENDDO
     2560          ENDDO
     2561         ELSE
     2562          DO k=1,klev
     2563           DO i=1,klon
     2564            t_seri(i,k) = t_therm(i,k)
     2565            q_seri(i,k) = q_therm(i,k)
     2566           ENDDO
     2567          ENDDO
     2568         ENDIF
     2569!>jyg
    24282570
    24292571        !cc nrlmd le 10/04/2012
     
    25452687        ! Couplage Thermiques/Emanuel seulement si T<0
    25462688        if (iflag_coupl==2) then
     2689         IF (prt_level .GE. 10) THEN
    25472690           print*,'Couplage Thermiques/Emanuel seulement si T<0'
     2691         ENDIF
    25482692           do i=1,klon
    25492693              if (t_seri(i,lmax_th(i))>273.) then
     
    26372781  !-------------------------------------------------------------------------
    26382782  IF (prt_level .GE.10) THEN
    2639      print *,' ->fisrtilp '
     2783     print *,'itap, ->fisrtilp ',itap
    26402784  ENDIF
    2641   !-------------------------------------------------------------------------
     2785  !
    26422786  CALL fisrtilp(dtime,paprs,pplay, &
    26432787       t_seri, q_seri,ptconv,ratqs, &
     
    26492793       zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon, &
    26502794       iflag_ice_thermo)
    2651 
     2795  !
    26522796  WHERE (rain_lsc < 0) rain_lsc = 0.
    26532797  WHERE (snow_lsc < 0) snow_lsc = 0.
     
    28082952     !--updates tausum_aero,tau_aero,piz_aero,cg_aero
    28092953     IF (flag_aerosol_strat) THEN
    2810         PRINT *,'appel a readaerosolstrat', mth_cur
     2954        IF (prt_level .GE.10) THEN
     2955         PRINT *,'appel a readaerosolstrat', mth_cur
     2956        ENDIF
    28112957        IF (iflag_rrtm.EQ.0) THEN
    28122958           CALL readaerosolstrato(debut)
     
    35293675     IF (itap.eq.1.or.MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN
    35303676
     3677      IF (prt_level .GE.10) THEN
    35313678        print*,'freq_cosp',freq_cosp
     3679      ENDIF
    35323680        mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse
    35333681        !       print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
Note: See TracChangeset for help on using the changeset viewer.