Ignore:
Timestamp:
Jan 11, 2021, 11:24:08 PM (3 years ago)
Author:
lguez
Message:

Sync latest trunk changes to Ocean_skin

Location:
LMDZ6/branches/Ocean_skin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Ocean_skin

  • LMDZ6/branches/Ocean_skin/libf/phylmd/yamada4.F90

    r3605 r3798  
    66  USE dimphy
    77  USE ioipsl_getin_p_mod, ONLY : getin_p
    8 
     8  USE phys_local_var_mod, only: tke_dissip
     9 
    910  IMPLICIT NONE
    1011  include "iniprint.h"
     
    5657  !             iflag_pbl=11 -> the model starts with NP from start files created by ce0l
    5758  !                          -> the model can run with longer time-steps.
    58   !             2016/11/30 (EV etienne.vignon@univ-grenoble-alpes.fr)
     59  !             2016/11/30 (EV etienne.vignon@lmd.ipsl.fr)
    5960  !               On met tke (=q2/2) en entr??e plut??t que q2
    6061  !               On corrige l'update de la tke
    61   !
     62  !             2020/10/01 (EV)
     63  !               On ajoute la dissipation de la TKE en diagnostique de sortie
     64  !                 
    6265  ! Inpout/Output :
    6366  !==============
     
    121124  REAL,SAVE :: viscom,viscoh
    122125  !$OMP THREADPRIVATE( hboville,viscom,viscoh)
    123   INTEGER ig, k
     126  INTEGER ig, jg, k
    124127  REAL ri, zrif, zalpha, zsm, zsn
    125128  REAL rif(klon, klev+1), sm(klon, klev+1), alpha(klon, klev)
     
    186189       viscom=1.46E-5
    187190       viscoh=2.06E-5
     191       !lmixmin=1.0E-3
    188192       lmixmin=0.
    189193       yamada4_num=5
     
    416420  ELSE IF (iflag_pbl>=10) THEN
    417421
     422    shear(:,:)=0.
     423    buoy(:,:)=0.
     424    dissip(:,:)=0.
     425    km(:,:)=0.
     426       
    418427    IF (yamada4_num>=1) THEN
    419428 
     
    424433      shear(ig,k)=km(ig, k)*m2(ig, k)
    425434      buoy(ig,k)=km(ig, k)*m2(ig, k)*(-1.*rif(ig,k))
    426       dissip(ig,k)=((sqrt(q2(ig,k)))**3)/(b1*l(ig,k))
     435!      dissip(ig,k)=min(max(((sqrt(q2(ig,k)))**3)/(b1*l(ig,k)),1.E-12),1.E4)
     436      dissip(ig,k)=((sqrt(q2(ig,k)))**3)/(b1*l(ig,k))
    427437     ENDDO
    428438    ENDDO
    429 
     439   
    430440    IF (yamada4_num==1) THEN ! Schema du MAR tel quel
    431441       DO k = 2, klev - 1
     
    478488        ENDDO
    479489       ENDDO
     490       
     491      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     492      !! Attention, yamada4_num=5 est inexacte car néglige les termes de flottabilité
     493      !! en conditions instables
     494      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    480495    ELSE IF (yamada4_num==5) THEN ! version modifiee avec integration exacte pour la dissipation
    481496       DO k = 2, klev - 1
     
    507522       DO k = 2, klev - 1
    508523         DO ig=1,ngrid
     524         !tkeprov=q2(ig,k)/ydeux
     525         !tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k),0.)*dt
     526         !disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k))
     527         !tkeexp=exp(-dt*disseff/tkeprov)
     528         !tkeprov= tkeprov*tkeexp
     529         !q2(ig,k)=tkeprov*ydeux
     530         ! En cas stable, on traite la flotabilite comme la
     531         ! dissipation, en supposant que dissipeff/TKE est constant.
     532         ! Puis on prend la solution exacte
     533         !
     534         ! With drag and dissipation from high vegetation (EV & FC, 05/10/2020)
     535         winds(ig,k)=sqrt(u(ig,k)**2+v(ig,k)**2)
    509536         tkeprov=q2(ig,k)/ydeux
    510          tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k),0.)*dt
    511          disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k))
     537         tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k)+drgpro(ig,k)*(winds(ig,k))**3,0.)*dt
     538         disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k)+drgpro(ig,k)*(winds(ig,k))**3) + drgpro(ig,k)*tkeprov
    512539         tkeexp=exp(-dt*disseff/tkeprov)
    513540         tkeprov= tkeprov*tkeexp
    514541         q2(ig,k)=tkeprov*ydeux
    515          ! En cas stable, on traite la flotabilite comme la
    516          ! dissipation, en supposant que buoy/q2^3 est constant.
    517          ! Puis on prend la solution exacte
     542         
    518543        ENDDO
    519544       ENDDO
     
    725750
    726751!============================================================================
     752! Diagnostique de la dissipation
     753!============================================================================
     754
     755! Diagnostics
     756 tke_dissip(1:ngrid,:,nsrf)=0.
     757! DO k=2,klev
     758!    DO ig=1,ngrid
     759!       jg=ni(ig)
     760!       tke_dissip(jg,k,nsrf)=dissip(ig,k)
     761!    ENDDO
     762! ENDDO
     763 
     764!=============================================================================
    727765
    728766  RETURN
     
    10171055!=====================================================================
    10181056
    1019 
     1057  l1(1:ngrid,:)=0.
    10201058  IF (iflag_pbl==8 .OR. iflag_pbl==10) THEN
    10211059
     
    11351173
    11361174
    1137  DO k=2,klev
     1175 DO k=1,klev+1
    11381176    DO ig=1,ngrid
    11391177       lmix(ig,k)=MAX(MAX(l1(ig,k), l2(ig,k)),lmixmin)
Note: See TracChangeset for help on using the changeset viewer.