Ignore:
Timestamp:
Sep 20, 2024, 12:32:04 PM (33 hours ago)
Author:
Laurent Fairhead
Message:

Updating cirrus branch to trunk revision 5171

Location:
LMDZ6/branches/cirrus
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/cirrus

  • LMDZ6/branches/cirrus/libf/phylmd/lmdz_atke_exchange_coeff.F90

    r4884 r5202  
    77subroutine atke_compute_km_kh(ngrid,nlay,dtime, &
    88                        wind_u,wind_v,temp,qvap,play,pinterf,cdrag_uv, &
    9                         tke,eps,Km_out,Kh_out)
     9                        tke,eps,tke_shear,tke_buoy,tke_trans,Km_out,Kh_out)
    1010
    1111!========================================================================
     
    7979
    8080REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT)    :: eps      ! output: TKE dissipation rate at interface between layers (m2/s3)
     81REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT)    :: tke_shear! output: TKE shear production rate (m2/s3)
     82REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT)    :: tke_buoy ! output: TKE buoyancy production rate (m2/s3)
     83REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT)    :: tke_trans! output: TKE transport (diffusion) term (m2/s3)
    8184REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Km_out   ! output: Exchange coefficient for momentum at interface between layers (m2/s)
    8285REAL, DIMENSION(ngrid,nlay), INTENT(OUT)      :: Kh_out   ! output: Exchange coefficient for heat flux at interface between layers (m2/s)
     
    261264                shear2(igrid,ilay) * (1. - Ri(igrid,ilay) / Prandtl(igrid,ilay))
    262265                eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
     266                tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay)
     267                tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay) &
     268                                    *(Ri(igrid,ilay) / Prandtl(igrid,ilay))
    263269            ENDDO
    264270        ENDDO
     
    278284            qq=max(0.,qq)
    279285            tke(igrid,ilay)=0.5*(qq**2)
    280             eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
     286            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
     287            tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay)
     288            tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay) &
     289                                *(Ri(igrid,ilay) / Prandtl(igrid,ilay))
    281290            ENDDO
    282291        ENDDO
     
    293302            qq=(qq+l_exchange(igrid,ilay)*Sm(igrid,ilay)*dtime/sqrt(2.)      &
    294303                *shear2(igrid,ilay)*(1.-Ri(igrid,ilay)/Prandtl(igrid,ilay))) &
    295                 /(1.+qq*dtime/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.)))
     304                /(1.+qq*dtime/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.)))
     305            tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay)
     306            tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) &
     307                                *(Ri(igrid,ilay) / Prandtl(igrid,ilay))
    296308            tke(igrid,ilay)=0.5*(qq**2)
    297309            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
     
    308320            eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay))
    309321            qq=max(sqrt(2.*tke(igrid,ilay)),1.e-10)
     322            tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay)
     323            tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) &
     324                                *(Ri(igrid,ilay) / Prandtl(igrid,ilay))
    310325            IF (Ri(igrid,ilay) .LT. 0.) THEN
    311326                netloss=qq/(2.*sqrt(2.)*cepsilon*l_exchange(igrid,ilay))
     
    327342            DO igrid=1,ngrid
    328343            qq=max(sqrt(2.*tke(igrid,ilay)),1.e-10)
     344            tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay)
     345            tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) &
     346                                *(Ri(igrid,ilay) / Prandtl(igrid,ilay))
    329347            qq=(l_exchange(igrid,ilay)*Sm(igrid,ilay)/sqrt(2.)*shear2(igrid,ilay)*(1.-Ri(igrid,ilay)/Prandtl(igrid,ilay)) &
    330348                +qq*(1.+dtime*qq/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.)))) &
     
    349367    tke(igrid,nlay+1)=0.
    350368    eps(igrid,nlay+1)=0.
     369    tke_shear(igrid,nlay+1)=0.
     370    tke_buoy(igrid,nlay+1)=0.
    351371END DO
    352372
     
    359379    tke(igrid,1)=ctkes*(ustar**2)
    360380    eps(igrid,1)=0. ! arbitrary as TKE is not properly defined at the surface
     381    tke_shear(igrid,1)=0.
     382    tke_buoy(igrid,1)=0.
    361383END DO
    362384
     
    364386! vertical diffusion of TKE
    365387!==========================
     388tke_trans(:,:)=0.
    366389IF (atke_ok_vdiff) THEN
    367     CALL atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke)
     390    CALL atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke,tke_trans)
    368391ENDIF
    369392
     
    387410
    388411!===============================================================================================
    389 subroutine atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke)
     412subroutine atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke,tke_trans)
    390413
    391414! routine that computes the vertical diffusion of TKE by the turbulence
     
    408431
    409432REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT)  :: tke    ! turbulent kinetic energy at interface between layers
    410 
     433REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT)  :: tke_trans ! turbulent kinetic energy transport term (m2/s3)
    411434
    412435
     
    480503! update TKE
    481504tke(:,:)=tke(:,:)+dtke(:,:)
     505tke_trans(:,:)=dtke(:,:)/dtime
    482506
    483507
Note: See TracChangeset for help on using the changeset viewer.