Changeset 660


Ignore:
Timestamp:
May 18, 2012, 3:24:07 PM (13 years ago)
Author:
acolaitis
Message:

Thermals: updated computation of wstar to take into account vertical turbulent heat flux from diffusion. Without that, wstar is underestimated. We use the sensible heat flux and tendancies computed in vdifc to compute the vertical turbulent heat flux contribution from the diffusion, and then compute the maximum in the PBL. The resulting total heat flux profile and wstar correspond very well to LES results.

Location:
trunk/LMDZ.MARS/libf/phymars
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/calltherm_interface.F90

    r652 r660  
    66     & ptimestep,pu,pv,pt,pq,pdu,pdv,pdt,pdq,q2, &
    77     & pplay,pplev,pphi,zpopsk, &
    8      & pdu_th,pdv_th,pdt_th,pdq_th,lmax,zmaxth,pbl_dtke,hfmax,wstar)
     8     & pdu_th,pdv_th,pdt_th,pdq_th,lmax,zmaxth,pbl_dtke, &
     9     & pdhdif,hfmax,wstar,sensibFlux)
    910
    1011       USE ioipsl_getincom
     
    3435      REAL, INTENT(IN) :: q2(ngridmx,nlayermx+1)
    3536      REAL, INTENT(IN) :: zpopsk(ngridmx,nlayermx)
     37      REAL, INTENT(IN) :: pdhdif(ngridmx,nlayermx)
     38      REAL, INTENT(IN) :: sensibFlux(ngridmx)
    3639
    3740!--------------------------------------------------------
     
    6669      REAL masse(ngridmx,nlayermx)
    6770      LOGICAL qtransport_thermals,dtke_thermals
    68       INTEGER l,ig,iq,ii(1)
     71      INTEGER l,ig,iq,ii(1),k
    6972      CHARACTER (LEN=20) modname
    7073
     
    100103      REAL hfmax(ngridmx),wmax(ngridmx)
    101104      REAL pbl_teta(ngridmx),dteta(ngridmx,nlayermx)
     105      REAL rpdhd(ngridmx,nlayermx)
     106      REAL wtdif(ngridmx,nlayermx),rho(ngridmx,nlayermx)
     107      REAL wtth(ngridmx,nlayermx)
    102108
    103109!--------------------------------------------------------
     
    380386
    381387      DO ig=1,ngridmx
    382          hfmax(ig)=MAXVAL(heatFlux(ig,:)+heatFlux_down(ig,:))
    383388         wmax(ig)=MAXVAL(zw2(ig,:))
    384389      ENDDO
     
    454459      ENDDO
    455460
     461! we must add the heat flux from the diffusion scheme to hfmax
     462
     463! compute rho as it is after the diffusion
     464
     465      rho(:,:)=pplay(:,:)                                               &
     466     & /(r*(pt(:,:)+pdhdif(:,:)*zpopsk(:,:)*ptimestep))
     467
     468! integrate -rho*pdhdif
     469
     470      rpdhd(:,:)=0.
     471
     472      DO ig=1,ngridmx
     473       DO l=1,lmax(ig)
     474        rpdhd(ig,l)=0.
     475        DO k=1,l
     476         rpdhd(ig,l)=rpdhd(ig,l)-rho(ig,k)*pdhdif(ig,k)*                &
     477     & (zzlev(ig,k+1)-zzlev(ig,k))
     478        ENDDO
     479        rpdhd(ig,l)=rpdhd(ig,l)-sensibFlux(ig)/cpp
     480       ENDDO
     481      ENDDO
     482
     483! compute w'teta' from diffusion
     484
     485      wtdif(:,:)=rpdhd(:,:)/rho(:,:)
     486
     487! compute rho as it is after the thermals
     488
     489      rho(:,:)=pplay(:,:)/(r*(zt(:,:)))
     490! integrate -rho*pdhdif
     491
     492      DO ig=1,ngridmx
     493       DO l=1,lmax(ig)
     494        rpdhd(ig,l)=0.
     495        DO k=1,l
     496         rpdhd(ig,l)=rpdhd(ig,l)-rho(ig,k)*(pdt_th(ig,k)/zpopsk(ig,k))* &
     497     & (zzlev(ig,k+1)-zzlev(ig,k))
     498        ENDDO
     499        rpdhd(ig,l)=rpdhd(ig,l)+                                        &
     500     &    rho(ig,1)*(heatFlux(ig,1)+heatFlux_down(ig,1))
     501       ENDDO
     502      ENDDO
     503      rpdhd(:,nlayermx)=0.
     504
     505! compute w'teta' from thermals
     506
     507      wtth(:,:)=rpdhd(:,:)/rho(:,:)
     508
     509! We get the max heat flux from thermals and add the contribution from the diffusion
     510
     511      DO ig=1,ngridmx
     512        hfmax(ig)=MAXVAL(wtth(ig,:)+wtdif(ig,:))
     513      ENDDO
    456514! We follow Spiga et. al 2010 (QJRMS)
    457515! ------------
     
    499557        call WRITEDIAGFI(ngridmx,'d_u_th',  &
    500558     &         'tendance moment','m/s',1,pdu_th)
     559        call WRITEDIAGFI(ngridmx,'wtdif',  &
     560     &         'heat flux from diffusion','K.m/s',1,wtdif)
     561        call WRITEDIAGFI(ngridmx,'wtth',  &
     562     &         'heat flux from thermals','K.m/s',1,wtth)
     563        call WRITEDIAGFI(ngridmx,'wttot',  &
     564     &         'heat flux PBL','K.m/s',1,wtdif(:,:)+wtth(:,:))
     565
    501566      else
    502567
  • trunk/LMDZ.MARS/libf/phymars/physiq.F

    r657 r660  
    353353      REAL ustar(ngridmx),tstar(ngridmx)  ! friction velocity and friction potential temp
    354354      REAL L_mo(ngridmx),vhf(ngridmx),vvv(ngridmx)
    355       REAL zu2(ngridmx)
     355      REAL zu2(ngridmx),sensibFlux(ngridmx)
    356356c=======================================================================
    357357
     
    785785     $        zdum1,zdum2,zdh,pdq,zflubid,
    786786     $        zdudif,zdvdif,zdhdif,zdtsdif,q2,
    787      &        zdqdif,zdqsdif,wstar,zcdv,zcdh,hfmax_th
     787     &        zdqdif,zdqsdif,wstar,zcdv,zcdh,hfmax_th,sensibFlux
    788788#ifdef MESOSCALE
    789789     &        ,flag_LES
     
    850850     $ pplay,pplev,pphi,zpopsk,
    851851     $ pdu_th,pdv_th,pdt_th,pdq_th,lmax_th,zmax_th,
    852      $ dtke_th,hfmax_th,wstar)
     852     $ dtke_th,zdhdif,hfmax_th,wstar,sensibFlux)
    853853     
    854854         DO l=1,nlayer
  • trunk/LMDZ.MARS/libf/phymars/vdifc.F

    r652 r660  
    55     $                pdufi,pdvfi,pdhfi,pdqfi,pfluxsrf,
    66     $                pdudif,pdvdif,pdhdif,pdtsrf,pq2,
    7      $                pdqdif,pdqsdif,wstar,zcdv_true,zcdh_true,hfmax
     7     $                pdqdif,pdqsdif,wstar,zcdv_true,zcdh_true,
     8     $                hfmax,sensibFlux
    89#ifdef MESOSCALE
    910     &                ,flag_LES
     
    143144      REAL vmr_co2(ngridmx,nlayermx)
    144145      REAL qco2,mmean
     146
     147      REAL sensibFlux(ngridmx)
    145148
    146149#ifdef MESOSCALE
     
    649652      pdtsrf(:)=(ztsrf2(:)-ptsrf(:))/ptimestep
    650653
     654      DO ig=1,ngrid  ! computing sensible heat flux (atm => surface)
     655         sensibFlux(ig)=cpp*zb(ig,1)/ptimestep*(zhs(ig,1)-ztsrf2(ig))
     656      ENDDO
    651657
    652658c-----------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.