Changeset 4881


Ignore:
Timestamp:
Mar 28, 2024, 6:06:40 PM (5 weeks ago)
Author:
evignon
Message:

extraction plus propre de la dissipation de TKE

Location:
LMDZ6/trunk/libf
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/coef_diff_turb_mod.F90

    r4657 r4881  
    1414  SUBROUTINE coef_diff_turb(dtime, nsrf, knon, ni, &
    1515       ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, &
    16        ycoefm, ycoefh ,yq2, ydrgpro)
     16       ycoefm, ycoefh ,yq2, yeps, ydrgpro)
    1717 
    1818    USE dimphy
     
    4747! Output arguments
    4848!****************************************************************************************
     49    REAL, DIMENSION(klon,klev+1), INTENT(OUT)  :: yeps
    4950    REAL, DIMENSION(klon,klev), INTENT(OUT)    :: ycoefh
    5051    REAL, DIMENSION(klon,klev), INTENT(OUT)    :: ycoefm
     
    6970    ykmq = 0 !ym missing init
    7071   
    71    
     72    yeps(:,:) = 0.
     73
    7274!****************************************************************************************   
    7375! Calcul de coefficients de diffusion turbulent de l'atmosphere :
     
    182184          CALL yamada4(ni,nsrf,knon,dtime,RG,RD,ypaprs,yt, &
    183185               yzlev,yzlay,yu,yv,yteta, &
    184                ycdragm,yq2,ykmm,ykmn,ykmq,yustar, &
     186               ycdragm,yq2,yeps,ykmm,ykmn,ykmq,yustar, &
    185187               iflag_pbl,ydrgpro)
    186188!FC
  • LMDZ6/trunk/libf/phylmd/lmdz_atke_exchange_coeff.F90

    r4804 r4881  
    77subroutine atke_compute_km_kh(ngrid,nlay,dtime, &
    88                        wind_u,wind_v,temp,qvap,play,pinterf,cdrag_uv, &
    9                         tke,Km_out,Kh_out)
     9                        tke,eps,Km_out,Kh_out)
    1010
    1111!========================================================================
     
    7070REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: wind_u   ! zonal velocity (m/s)
    7171REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: wind_v   ! meridional velocity (m/s)
    72 REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: temp   ! temperature (K)
    73 REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: qvap   ! specific humidity (kg/kg)
    74 REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: play   ! pressure (Pa)
    75 REAL, DIMENSION(ngrid,nlay+1), INTENT(IN)     :: pinterf   ! pressure at interfaces(Pa)
    76 REAL, DIMENSION(ngrid), INTENT(IN)            :: cdrag_uv   ! surface drag coefficient for momentum
    77 
    78 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT)  :: tke  ! turbulent kinetic energy at interface between layers
    79 
    80 REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Km_out   ! output: Exchange coefficient for momentum at interface between layers
    81 REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Kh_out   ! output: Exchange coefficient for heat flux at interface between layers
     72REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: temp     ! temperature (K)
     73REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: qvap     ! specific humidity (kg/kg)
     74REAL, DIMENSION(ngrid,nlay), INTENT(IN)       :: play     ! pressure (Pa)
     75REAL, DIMENSION(ngrid,nlay+1), INTENT(IN)     :: pinterf  ! pressure at interfaces(Pa)
     76REAL, DIMENSION(ngrid), INTENT(IN)            :: cdrag_uv ! surface drag coefficient for momentum
     77
     78REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT)  :: tke      ! turbulent kinetic energy at interface between layers (m2/s2)
     79
     80REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT)    :: eps      ! output: TKE dissipation rate at interface between layers (m2/s3)
     81REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Km_out   ! output: Exchange coefficient for momentum at interface between layers (m2/s)
     82REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Kh_out   ! output: Exchange coefficient for heat flux at interface between layers (m2/s)
    8283
    8384! Local variables
     
    259260                tke(igrid,ilay) = cepsilon * l_exchange(igrid,ilay)**2 * Sm(igrid,ilay) * &
    260261                shear2(igrid,ilay) * (1. - Ri(igrid,ilay) / Prandtl(igrid,ilay))
     262                eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
    261263            ENDDO
    262264        ENDDO
     
    275277            qq=(-2.*sqrt(2.)*cepsilon*l_exchange(igrid,ilay)/dtime + sqrt(delta))/2.
    276278            qq=max(0.,qq)
    277             tke(igrid,ilay)=0.5*(qq**2)
     279            tke(igrid,ilay)=0.5*(qq**2)
     280            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
    278281            ENDDO
    279282        ENDDO
     
    292295                /(1.+qq*dtime/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.)))
    293296            tke(igrid,ilay)=0.5*(qq**2)
     297            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
    294298            ENDDO
    295299        ENDDO
     
    302306        DO ilay=2,nlay
    303307            DO igrid=1,ngrid
     308            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
    304309            qq=max(sqrt(2.*tke(igrid,ilay)),1.e-10)
    305310            IF (Ri(igrid,ilay) .LT. 0.) THEN
     
    327332            qq=max(0.,qq)
    328333            tke(igrid,ilay)=0.5*(qq**2)
     334            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
    329335            ENDDO
    330336        ENDDO
  • LMDZ6/trunk/libf/phylmd/lmdz_call_atke.F90

    r4745 r4881  
    1010subroutine call_atke(dtime,ngrid,nlay,cdrag_uv,cdrag_t,u_surf,v_surf,temp_surf, &
    1111                        wind_u,wind_v,temp,qvap,play,pinterf, &
    12                         tke,Km_out,Kh_out)
     12                        tke,eps,Km_out,Kh_out)
    1313
    1414
     
    4343
    4444
    45 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT)  :: tke  ! turbulent kinetic energy at interface between layers
     45REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT)  :: tke      ! turbulent kinetic energy at interface between layers
    4646
     47REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT)    :: eps      ! output: tke dissipation rate at interface between layers
    4748REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Km_out   ! output: Exchange coefficient for momentum at interface between layers
    4849REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Kh_out   ! output: Exchange coefficient for heat flux at interface between layers
     
    5657call atke_compute_km_kh(ngrid,nlay,dtime,&
    5758                        wind_u,wind_v,temp,qvap,play,pinterf,cdrag_uv,&
    58                         tke,Km_out,Kh_out)
     59                        tke,eps,Km_out,Kh_out)
    5960
    6061
     
    7576   call atke_compute_km_kh(ngrid,nlay,dtime,&
    7677                        wind_u_predict,wind_v_predict,temp,qvap,play,pinterf,cdrag_uv, &
    77                         tke,Km_out,Kh_out)
     78                        tke,eps,Km_out,Kh_out)
    7879
    7980end if
  • LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90

    r4747 r4881  
    231231!jyg<
    232232!!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    233        zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x, &
     233       zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x, eps_x, &
    234234!>jyg
    235235!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    408408! Output variables
    409409!****************************************************************************************
     410    REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(OUT)   :: eps_x      ! TKE dissipation rate
     411
    410412    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh     ! drag coefficient for T and Q
    411413    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm     ! drag coefficient for wind
     
    627629    REAL, DIMENSION(klon,klev)         :: delp
    628630    REAL, DIMENSION(klon,klev+1)       :: ypaprs
    629     REAL, DIMENSION(klon,klev+1)       :: ytke
     631    REAL, DIMENSION(klon,klev+1)       :: ytke, yeps
    630632    REAL, DIMENSION(klon,nsoilmx)      :: ytsoil
    631633!FC
     
    647649    REAL, DIMENSION(klon)              :: ywake_s, ywake_cstar, ywake_dens
    648650!!!
    649     REAL, DIMENSION(klon,klev+1)       :: ytke_x, ytke_w
     651    REAL, DIMENSION(klon,klev+1)       :: ytke_x, ytke_w, yeps_x, yeps_w
    650652    REAL, DIMENSION(klon,klev+1)       :: ywake_dltke
    651653    REAL, DIMENSION(klon,klev)         :: yu_x, yv_x, yu_w, yv_w
     
    10461048!!    tke(:,:,is_ave)=0.
    10471049    tke_x(:,:,is_ave)=0.
     1050    eps_x(:,:,is_ave)=0.
    10481051
    10491052    wake_dltke(:,:,is_ave)=0.
     
    10801083
    10811084    ytke=0.
     1085    yeps=0.
    10821086    yri0(:)=0.
    10831087!FC
     
    10931097!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    10941098    ytke_x=0.     ; ytke_w=0.        ; ywake_dltke=0.
     1099    yeps_x=0.     ; yeps_w=0.
    10951100    y_d_t_x=0.    ; y_d_t_w=0.       ; y_d_q_x=0.      ; y_d_q_w=0.
    10961101!!    d_t_w=0.      ; d_q_w=0.         
     
    17011706        CALL call_atke(dtime,knon,klev,ycdragm(1:knon), ycdragh(1:knon),yus0(1:knon),yvs0(1:knon),yts(1:knon), &
    17021707                  yu(1:knon,:),yv(1:knon,:),yt(1:knon,:),yq(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),       &
    1703                   ytke(1:knon,:),ycoefm(1:knon,:), ycoefh(1:knon,:))
     1708                  ytke(1:knon,:),yeps(1:knon,:), ycoefm(1:knon,:), ycoefh(1:knon,:))
    17041709
    17051710        ELSE
     
    17071712        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    17081713            ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, &
    1709             ycoefm, ycoefh, ytke, y_treedrg)
     1714            ycoefm, ycoefh, ytke, yeps, y_treedrg)
    17101715!            ycoefm, ycoefh, ytke)
    17111716!FC y_treedrg ajoute
     
    17461751        CALL call_atke(dtime,knon,klev,ycdragm_x(1:knon),ycdragh_x(1:knon),yus0(1:knon),yvs0(1:knon),yts_x(1:knon),    &
    17471752                       yu_x(1:knon,:),yv_x(1:knon,:),yt_x(1:knon,:),yq_x(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),  &
    1748                        ytke_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:))
     1753                       ytke_x(1:knon,:),yeps_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:))
    17491754
    17501755        ELSE
     
    17521757        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    17531758            ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf_x, ycdragm_x, &
    1754             ycoefm_x, ycoefh_x, ytke_x,y_treedrg)
     1759            ycoefm_x, ycoefh_x, ytke_x,yeps_x,y_treedrg)
    17551760!            ycoefm_x, ycoefh_x, ytke_x)
    17561761!FC doit on le mettre ( on ne l utilise pas si il y a du spliting)
     
    17861791        CALL call_atke(dtime,knon,klev,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), &
    17871792                yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),      &
    1788                 ytke_w(1:knon,:),ycoefm_w(1:knon,:), ycoefh_w(1:knon,:))
     1793                ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:))
    17891794
    17901795        ELSE
     
    17921797        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    17931798            ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf_w, ycdragm_w, &
    1794             ycoefm_w, ycoefh_w, ytke_w,y_treedrg)
     1799            ycoefm_w, ycoefh_w, ytke_w,yeps_w,y_treedrg)
    17951800!            ycoefm_w, ycoefh_w, ytke_w)
    17961801       IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN
     
    28552860!!              tke(i,k,is_ave) = tke(i,k,is_ave) + ytke(j,k)*ypct(j)
    28562861              tke_x(i,k,nsrf)    = ytke(j,k)
    2857               tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j)
    2858 
     2862              tke_x(i,k,is_ave)  = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j)
     2863              eps_x(i,k,nsrf)    = yeps(j,k)
     2864              eps_x(i,k,is_ave)  = eps_x(i,k,is_ave) + yeps(j,k)*ypct(j)
    28592865!>jyg
    28602866           ENDDO
     
    28702876!!            tke(i,k,is_ave) = tke(i,k,is_ave) + tke(i,k,nsrf)*ypct(j)
    28712877            tke_x(i,k,nsrf)   = ytke_x(j,k)
    2872             tke_x(i,k,is_ave)   = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j)       
     2878            tke_x(i,k,is_ave)   = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j)       
     2879            eps_x(i,k,nsrf)   = yeps_x(j,k)
     2880            eps_x(i,k,is_ave)   = eps_x(i,k,is_ave) + eps_x(i,k,nsrf)*ypct(j)
    28732881            wake_dltke(i,k,is_ave)   = wake_dltke(i,k,is_ave) + wake_dltke(i,k,nsrf)*ypct(j)
    28742882           
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r4843 r4881  
    2222      REAL, SAVE, ALLOCATABLE :: d_rneb_dyn(:,:)
    2323      !$OMP THREADPRIVATE(d_rneb_dyn)
    24       REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),tke_dissip(:,:,:),wprime(:,:,:)
    25       !$OMP THREADPRIVATE(l_mixmin, l_mix, tke_dissip,wprime)
     24      REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),wprime(:,:,:)
     25      !$OMP THREADPRIVATE(l_mixmin, l_mix, wprime)
     26      REAL, SAVE, ALLOCATABLE :: pbl_eps(:,:,:)
     27      !$OMP THREADPRIVATE(pbl_eps)
    2628      REAL, SAVE, ALLOCATABLE :: tr_seri(:,:,:)
    2729      !$OMP THREADPRIVATE(tr_seri)
     
    666668      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    667669      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    668       ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
    669       l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;tke_dissip(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis
    670 
     670      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     671      ALLOCATE(pbl_eps(klon,klev+1,nbsrf+1))
     672      l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis
    671673      ALLOCATE(rhcl(klon,klev))
    672674      ALLOCATE(tr_seri(klon,klev,nbtr))
     
    10191021      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    10201022      DEALLOCATE(u_seri,v_seri)
    1021       DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
    1022 
     1023      DEALLOCATE(l_mixmin,l_mix,wprime)
     1024      DEALLOCATE(pbl_eps)
    10231025      DEALLOCATE(rhcl)
    10241026      DEALLOCATE(tr_seri)
  • LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90

    r4843 r4881  
    311311         zn2mout, t2m_min_mon, t2m_max_mon, evap, &
    312312         snowerosion, zxustartlic, zxrhoslic, zxqsaltlic, &
    313          l_mixmin,l_mix, tke_dissip, &
     313         l_mixmin,l_mix, pbl_eps, &
    314314         zu10m, zv10m, zq2m, zustar, zxqsurf, &
    315315         rain_lsc, rain_num, snow_lsc, bils, sens, fder, &
     
    13021302                DO k=1,klev
    13031303                   zx_tmp_fi3d(:,k)=zx_tmp_fi3d(:,k) &
    1304                         +pctsrf(:,nsrf)*tke_dissip(:,k,nsrf)
     1304                        +pctsrf(:,nsrf)*pbl_eps(:,k,nsrf)
    13051305                ENDDO
    13061306             ENDDO
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4874 r4881  
    282282       zxfluxlat_x, zxfluxlat_w, &
    283283       !
    284        pbl_tke_input, tke_dissip, l_mix, wprime,&
     284       pbl_tke_input, pbl_eps, l_mix, wprime,&
    285285       t_therm, q_therm, u_therm, v_therm, &
    286286       cdragh_x, cdragh_w, &
     
    12571257    integer iostat
    12581258
    1259     REAL, dimension(klon,klev+1) :: tke_dissip_ave, l_mix_ave, wprime_ave
     1259    REAL, dimension(klon,klev+1) :: l_mix_ave, wprime_ave
    12601260    REAL zzz
    12611261    !albedo SB >>>
     
    29052905            fluxt,   fluxu,  fluxv, &
    29062906            dsens,     devap,     zxsnow, &
    2907             zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
     2907            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, pbl_eps,  &
    29082908                                !nrlmd+jyg<
    29092909            wake_delta_pbl_TKE, &
     
    38493849    ! water distribution
    38503850
    3851     tke_dissip_ave(:,:)=0.
    38523851    l_mix_ave(:,:)=0.
    38533852    wprime_ave(:,:)=0.
     
    38553854    DO nsrf = 1, nbsrf
    38563855       DO i = 1, klon
    3857           tke_dissip_ave(i,:) = tke_dissip_ave(i,:) + tke_dissip(i,:,nsrf)*pctsrf(i,nsrf)
    38583856          l_mix_ave(i,:) = l_mix_ave(i,:) + l_mix(i,:,nsrf)*pctsrf(i,nsrf)
    38593857          wprime_ave(i,:) = wprime_ave(i,:) + wprime(i,:,nsrf)*pctsrf(i,nsrf)
     
    38693867         paprs,pplay,t_seri,q_seri, &
    38703868         qtc_cv, sigt_cv,detrain_cv,fm_cv,fqd,fqcomp,sigd,zqsat, &
    3871          omega,pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave, &
     3869         omega,pbl_tke(:,:,is_ave),pbl_eps(:,:,is_ave),l_mix_ave,wprime_ave, &
    38723870         t2m,q2m,fm_therm,entr_therm,detr_therm,cell_area, &
    38733871         ratqs,ratqsc,ratqs_inter_)
  • LMDZ6/trunk/libf/phylmd/yamada4.F90

    r4825 r4881  
    22
    33SUBROUTINE yamada4(ni, nsrf, ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, &
    4     cd, tke, km, kn, kq, ustar, iflag_pbl, drgpro)
     4    cd, tke, eps, km, kn, kq, ustar, iflag_pbl, drgpro)
    55
    66  USE dimphy, only : klev,klon
    7   USE phys_local_var_mod, only: tke_dissip,wprime
     7  USE phys_local_var_mod, only: wprime
    88  USE yamada_ini_mod, only : new_yamada4,yamada4_num,hboville
    99  USE yamada_ini_mod, only : prt_level, lunout,pbl_lmixmin_alpha,b1,kap,viscom,viscoh
     
    6969  ! Outputs:
    7070  !==========
     71  ! eps: tke dissipation rate
    7172  ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque
    7273  ! couche)
     
    9596  REAL cd(klon)
    9697  REAL tke(klon, klev+1)
     98  REAL eps(klon,klev+1)
    9799  REAL unsdz(klon, klev)
    98100  REAL unsdzdec(klon, klev+1)
     
    686688
    687689! Diagnostics
    688  tke_dissip(1:ngrid,:,nsrf)=0.
     690 
     691 eps(:,:)=dissip(:,:)
    689692 wprime(1:ngrid,:,nsrf)=0.
    690693 DO k=2,klev
     
    692695       jg=ni(ig)
    693696       wprime(jg,k,nsrf)=sqrt(MAX(1./3*q2(ig,k),0.))
    694        tke_dissip(jg,k,nsrf)=dissip(ig,k)
    695697    ENDDO
    696698 ENDDO
     699
    697700 
    698701!=============================================================================
  • LMDZ6/trunk/libf/phylmdiso/pbl_surface_mod.F90

    r4745 r4881  
    2424  USE climb_wind_mod,      ONLY : climb_wind_down, climb_wind_up
    2525  USE coef_diff_turb_mod,  ONLY : coef_diff_turb
    26   USE lmdz_call_atke,      ONLY :  call_atke
     26  USE lmdz_call_atke,      ONLY : call_atke
    2727  USE ioipsl_getin_p_mod,  ONLY : getin_p
    2828  USE cdrag_mod
     
    308308!jyg<
    309309!!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    310        zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x, &
     310       zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x, eps_x, &
    311311!>jyg
    312312!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    506506! Output variables
    507507!****************************************************************************************
     508    REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(OUT)   :: eps_x      ! TKE dissipation rate
     509
    508510    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh     ! drag coefficient for T and Q
    509511    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm     ! drag coefficient for wind
     
    765767    REAL, DIMENSION(klon,klev)         :: delp
    766768    REAL, DIMENSION(klon,klev+1)       :: ypaprs
    767     REAL, DIMENSION(klon,klev+1)       :: ytke
     769    REAL, DIMENSION(klon,klev+1)       :: ytke, yeps
    768770    REAL, DIMENSION(klon,nsoilmx)      :: ytsoil
    769771!FC
     
    785787    REAL, DIMENSION(klon)              :: ywake_s, ywake_cstar, ywake_dens
    786788!!!
    787     REAL, DIMENSION(klon,klev+1)       :: ytke_x, ytke_w
     789    REAL, DIMENSION(klon,klev+1)       :: ytke_x, ytke_w, yeps_x, yeps_w
    788790    REAL, DIMENSION(klon,klev+1)       :: ywake_dltke
    789791    REAL, DIMENSION(klon,klev)         :: yu_x, yv_x, yu_w, yv_w
     
    12611263!!    tke(:,:,is_ave)=0.
    12621264    tke_x(:,:,is_ave)=0.
     1265    eps_x(:,:,is_ave)=0.
    12631266
    12641267    wake_dltke(:,:,is_ave)=0.
     
    12951298
    12961299    ytke=0.
     1300    yeps=0.
    12971301    yri0(:)=0.
    12981302!FC
     
    13081312!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    13091313    ytke_x=0.     ; ytke_w=0.        ; ywake_dltke=0.
     1314    yeps_x=0.     ; yeps_w=0.
    13101315    y_d_t_x=0.    ; y_d_t_w=0.       ; y_d_q_x=0.      ; y_d_q_w=0.
    13111316!!    d_t_w=0.      ; d_q_w=0.         
     
    19791984        CALL call_atke(dtime,knon,klev,ycdragm(1:knon), ycdragh(1:knon),yus0(1:knon),yvs0(1:knon),yts(1:knon), &
    19801985                  yu(1:knon,:),yv(1:knon,:),yt(1:knon,:),yq(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),       &
    1981                   ytke(1:knon,:),ycoefm(1:knon,:), ycoefh(1:knon,:))
     1986                  ytke(1:knon,:),yeps(1:knon,:), ycoefm(1:knon,:), ycoefh(1:knon,:))
    19821987
    19831988        ELSE
     
    19851990        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    19861991            ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, &
    1987             ycoefm, ycoefh, ytke, y_treedrg)
     1992            ycoefm, ycoefh, ytke, yeps, y_treedrg)
    19881993!            ycoefm, ycoefh, ytke)
    19891994!FC y_treedrg ajoute
     
    20232028        CALL call_atke(dtime,knon,klev,ycdragm_x(1:knon),ycdragh_x(1:knon),yus0(1:knon),yvs0(1:knon),yts_x(1:knon),    &
    20242029                       yu_x(1:knon,:),yv_x(1:knon,:),yt_x(1:knon,:),yq_x(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),  &
    2025                        ytke_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:))
     2030                       ytke_x(1:knon,:),yeps_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:))
    20262031
    20272032        ELSE
     
    20292034        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    20302035            ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf_x, ycdragm_x, &
    2031             ycoefm_x, ycoefh_x, ytke_x,y_treedrg)
     2036            ycoefm_x, ycoefh_x, ytke_x,yeps_x,y_treedrg)
    20322037!            ycoefm_x, ycoefh_x, ytke_x)
    20332038!FC doit on le mettre ( on ne l utilise pas si il y a du spliting)
     
    20632068        CALL call_atke(dtime,knon,klev,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), &
    20642069                yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),      &
    2065                 ytke_w(1:knon,:),ycoefm_w(1:knon,:), ycoefh_w(1:knon,:))
     2070                ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:))
    20662071
    20672072        ELSE
    2068 
    20692073
    20702074        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    20712075            ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf_w, ycdragm_w, &
    2072             ycoefm_w, ycoefh_w, ytke_w,y_treedrg)
     2076            ycoefm_w, ycoefh_w, ytke_w,yeps_w,y_treedrg)
    20732077!            ycoefm_w, ycoefh_w, ytke_w)
    20742078       IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN
     
    33323336!!              tke(i,k,is_ave) = tke(i,k,is_ave) + ytke(j,k)*ypct(j)
    33333337              tke_x(i,k,nsrf)    = ytke(j,k)
    3334               tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j)
    3335 
     3338              tke_x(i,k,is_ave)  = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j)
     3339              eps_x(i,k,nsrf)    = yeps(j,k)
     3340              eps_x(i,k,is_ave)  = eps_x(i,k,is_ave) + yeps(j,k)*ypct(j)
    33363341!>jyg
    33373342           ENDDO
     
    33473352!!            tke(i,k,is_ave) = tke(i,k,is_ave) + tke(i,k,nsrf)*ypct(j)
    33483353            tke_x(i,k,nsrf)   = ytke_x(j,k)
    3349             tke_x(i,k,is_ave)   = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j)       
     3354            tke_x(i,k,is_ave)   = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j)       
     3355            eps_x(i,k,nsrf)   = yeps_x(j,k)
     3356            eps_x(i,k,is_ave)   = eps_x(i,k,is_ave) + eps_x(i,k,nsrf)*ypct(j)
    33503357            wake_dltke(i,k,is_ave)   = wake_dltke(i,k,is_ave) + wake_dltke(i,k,nsrf)*ypct(j)
    33513358           
  • LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90

    r4844 r4881  
    2222      REAL, SAVE, ALLOCATABLE :: d_rneb_dyn(:,:)
    2323      !$OMP THREADPRIVATE(d_rneb_dyn)
    24       REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),tke_dissip(:,:,:),wprime(:,:,:)
    25       !$OMP THREADPRIVATE(l_mixmin, l_mix, tke_dissip,wprime)
     24      REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),wprime(:,:,:)
     25      !$OMP THREADPRIVATE(l_mixmin, l_mix, wprime)
     26      REAL, SAVE, ALLOCATABLE :: pbl_eps(:,:,:)
     27      !$OMP THREADPRIVATE(pbl_eps)
    2628      REAL, SAVE, ALLOCATABLE :: tr_seri(:,:,:)
    2729      !$OMP THREADPRIVATE(tr_seri)
     
    764766      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    765767      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    766       ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
    767       l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;tke_dissip(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis
    768 
     768      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     769      l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis
     770      ALLOCATE(pbl_eps(klon,klev+1,nbsrf))     
    769771      ALLOCATE(tr_seri(klon,klev,nbtr))
    770772      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
     
    11751177      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    11761178      DEALLOCATE(u_seri,v_seri)
    1177       DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     1179      DEALLOCATE(l_mixmin,l_mix,wprime)
     1180      DEALLOCATE(pbl_eps)
    11781181
    11791182      DEALLOCATE(tr_seri)
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r4844 r4881  
    294294       zxfluxlat_x, zxfluxlat_w, &
    295295       !
    296        pbl_tke_input, tke_dissip, l_mix, wprime,&
     296       pbl_tke_input, pbl_eps, l_mix, wprime,&
    297297       t_therm, q_therm, u_therm, v_therm, &
    298298       cdragh_x, cdragh_w, &
     
    13211321    integer iostat
    13221322
    1323     REAL, dimension(klon,klev+1) :: tke_dissip_ave, l_mix_ave, wprime_ave
     1323    REAL, dimension(klon,klev+1) :: l_mix_ave, wprime_ave
    13241324    REAL zzz
    13251325    !albedo SB >>>
     
    31923192            fluxt,   fluxu,  fluxv, &
    31933193            dsens,     devap,     zxsnow, &
    3194             zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
     3194            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, pbl_eps,  &
    31953195                                !nrlmd+jyg<
    31963196            wake_delta_pbl_TKE, &
     
    47564756    ! water distribution
    47574757
    4758     tke_dissip_ave(:,:)=0.
    47594758    l_mix_ave(:,:)=0.
    47604759    wprime_ave(:,:)=0.
     
    47624761    DO nsrf = 1, nbsrf
    47634762       DO i = 1, klon
    4764           tke_dissip_ave(i,:) = tke_dissip_ave(i,:) + tke_dissip(i,:,nsrf)*pctsrf(i,nsrf)
    47654763          l_mix_ave(i,:) = l_mix_ave(i,:) + l_mix(i,:,nsrf)*pctsrf(i,nsrf)
    47664764          wprime_ave(i,:) = wprime_ave(i,:) + wprime(i,:,nsrf)*pctsrf(i,nsrf)
     
    47764774         paprs,pplay,t_seri,q_seri, &
    47774775         qtc_cv, sigt_cv,detrain_cv,fm_cv,fqd,fqcomp,sigd,zqsat, &
    4778          omega,pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave, &
     4776         omega,pbl_tke(:,:,is_ave),pbl_eps(:,:,is_ave),l_mix_ave,wprime_ave, &
    47794777         t2m,q2m,fm_therm,entr_therm,detr_therm,cell_area, &
    47804778         ratqs,ratqsc,ratqs_inter_)
Note: See TracChangeset for help on using the changeset viewer.