Ignore:
Timestamp:
Oct 22, 2020, 2:50:18 PM (4 years ago)
Author:
evignon
Message:

Premiere comission Etienne: changements pour le 1D (forcage en Ts au dessus des continents) et inclusion drag arbres dans yamada4_num=6

File:
1 edited

Legend:

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

    r3531 r3780  
    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)
     
    416419  ELSE IF (iflag_pbl>=10) THEN
    417420
     421    shear(:,:)=0.
     422    buoy(:,:)=0.
     423    dissip(:,:)=0.
     424    km(:,:)=0.
     425       
    418426    IF (yamada4_num>=1) THEN
    419427 
     
    424432      shear(ig,k)=km(ig, k)*m2(ig, k)
    425433      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))
     434      dissip(ig,k)=min(max(((sqrt(q2(ig,k)))**3)/(b1*l(ig,k)),1.E-12),1.E4)
    427435     ENDDO
    428436    ENDDO
    429 
     437   
    430438    IF (yamada4_num==1) THEN ! Schema du MAR tel quel
    431439       DO k = 2, klev - 1
     
    478486        ENDDO
    479487       ENDDO
     488       
     489      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     490      !! Attention, yamada4_num=5 est inexacte car néglige les termes de flottabilité
     491      !! en conditions instables
     492      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    480493    ELSE IF (yamada4_num==5) THEN ! version modifiee avec integration exacte pour la dissipation
    481494       DO k = 2, klev - 1
     
    507520       DO k = 2, klev - 1
    508521         DO ig=1,ngrid
     522         !tkeprov=q2(ig,k)/ydeux
     523         !tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k),0.)*dt
     524         !disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k))
     525         !tkeexp=exp(-dt*disseff/tkeprov)
     526         !tkeprov= tkeprov*tkeexp
     527         !q2(ig,k)=tkeprov*ydeux
     528         ! En cas stable, on traite la flotabilite comme la
     529         ! dissipation, en supposant que dissipeff/TKE est constant.
     530         ! Puis on prend la solution exacte
     531         !
     532         ! With drag and dissipation from high vegetation (EV & FC, 05/10/2020)
     533         winds(ig,k)=sqrt(u(ig,k)**2+v(ig,k)**2)
    509534         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))
     535         tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k)+drgpro(ig,k)*(winds(ig,k))**3,0.)*dt
     536         disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k)+drgpro(ig,k)*(winds(ig,k))**3) + drgpro(ig,k)*tkeprov
    512537         tkeexp=exp(-dt*disseff/tkeprov)
    513538         tkeprov= tkeprov*tkeexp
    514          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
     539         q2(ig,k)=tkeprov*ydeux       
     540         
    518541        ENDDO
    519542       ENDDO
     
    533556!     q2(1:ngrid, k) = q2(1:ngrid, k) + dt*km(1:ngrid, k)*m2(1:ngrid, k)*(1.-rif(1:ngrid,k))
    534557      q2(1:ngrid, k) = min(max(q2(1:ngrid,k),1.E-10), 1.E4)
    535        q2(1:ngrid, k) = 1./(1./sqrt(q2(1:ngrid,k))+dt/(yun*l(1:ngrid,k)*b1))
     558      q2(1:ngrid, k) = 1./(1./sqrt(q2(1:ngrid,k))+dt/(yun*l(1:ngrid,k)*b1))
    536559!     q2(1:ngrid, k) = 1./(1./sqrt(q2(1:ngrid,k))+dt/(2*l(1:ngrid,k)*b1))
    537560      q2(1:ngrid, k) = q2(1:ngrid, k)*q2(1:ngrid, k)
     
    725748
    726749!============================================================================
     750! Diagnostique de la dissipation
     751!============================================================================
     752
     753! Diagnostics
     754 tke_dissip(1:ngrid,:,nsrf)=0.
     755 DO k=2,klev
     756    DO ig=1,ngrid
     757       jg=ni(ig)
     758       tke_dissip(jg,k,nsrf)=dissip(ig,k)
     759    ENDDO
     760 ENDDO
     761 
     762!=============================================================================
    727763
    728764  RETURN
     
    10171053!=====================================================================
    10181054
    1019 
     1055  l1(1:ngrid,:)=0.
    10201056  IF (iflag_pbl==8 .OR. iflag_pbl==10) THEN
    10211057
     
    10691105   l2(1:ngrid,:)=0.0
    10701106   l_mixmin(1:ngrid,:,nsrf)=0.
    1071    l_mix(1:ngrid,:,nsrf)=0.
     1107   l_mix(1:ngrid,:,nsrf)=1.E-5
    10721108
    10731109   IF (nsrf .EQ. 1) THEN
     
    11351171
    11361172
    1137  DO k=2,klev
     1173 DO k=1,klev+1
    11381174    DO ig=1,ngrid
    11391175       lmix(ig,k)=MAX(MAX(l1(ig,k), l2(ig,k)),lmixmin)
     1176       lmix(ig,k)=MAX(lmix(ig,k),1.E-5)
    11401177   ENDDO
    11411178 ENDDO
     
    11431180! Diagnostics
    11441181
    1145  DO k=2,klev
     1182 DO k=2,klev+1
    11461183    DO ig=1,ngrid
    11471184       jg=ni(ig)
Note: See TracChangeset for help on using the changeset viewer.