Changeset 1242 for trunk


Ignore:
Timestamp:
May 10, 2014, 10:03:34 AM (11 years ago)
Author:
aslmd
Message:

LMDZ.MARS. MESOSCALE. Corrected problems affecting LES runs with new physics (sensibFlux calculated in vdifc is just used as an input to thermals, it does not have the right sign and apparently is not W/m2). Further reduction or factorisation of mesoscale includes. Also made ustar and tstar available in turb_mod from the calculations in vdifc.

Location:
trunk/LMDZ.MARS
Files:
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/README

    r1240 r1242  
    20852085- Warnings in conf_phys modified accordingly.
    20862086
     2087== 10/05/2014 == AS
     2088- Further reduction (or 'factorisation') of mesoscale includes
     2089- ustar and tstar are calculated in vdifc. so no need to recalculate
     2090  those elsewhere. use turb_mod module to store it.
  • trunk/LMDZ.MARS/libf/phymars/physiq.F

    r1236 r1242  
    838838     &        zdqdif,zdqsdif,wstar,zcdv,zcdh,hfmax_th,sensibFlux)
    839839
    840 #ifdef MESOSCALE
    841 #include "meso_inc/meso_inc_les.F"
    842 #endif
    843840
    844841          DO ig=1,ngrid
     
    871868           ENDDO
    872869          end if ! of if (tracer)
     870         ELSE
     871           write (*,*) '******************************************'
     872           write (*,*) '** LES mode: the difv part is only used to'
     873           write (*,*) '**  - provide HFX and UST to the dynamics'
     874           write (*,*) '**  - update TSURF'
     875           write (*,*) '******************************************'
     876           !! Specific treatment for lifting in turbulent-resolving mode (AC)
     877           IF (lifting .and. doubleq) THEN
     878             !! lifted dust is injected in the first layer.
     879             !! Sedimentation must be called after turbulent mixing, i.e. on next step, after WRF.
     880             !! => lifted dust is not incremented before the sedimentation step.
     881             zdqdif(1:ngrid,1,1:nq)=0.
     882             zdqdif(1:ngrid,1,igcm_dust_number) =
     883     .                  -zdqsdif(1:ngrid,igcm_dust_number)
     884             zdqdif(1:ngrid,1,igcm_dust_mass) =
     885     .                  -zdqsdif(1:ngrid,igcm_dust_mass)
     886             zdqdif(1:ngrid,2:nlayermx,1:nq) = 0.
     887             DO iq=1, nq
     888              IF ((iq .ne. igcm_dust_mass)
     889     &        .and. (iq .ne. igcm_dust_number)) THEN
     890                zdqsdif(:,iq)=0.
     891              ENDIF
     892             ENDDO
     893           ELSE
     894             zdqdif(1:ngrid,1:nlayer,1:nq) = 0.
     895             zdqsdif(1:ngrid,1:nq) = 0.
     896           ENDIF
    873897         ENDIF
    874 
    875898      ELSE   
    876899         DO ig=1,ngrid
    877900            zdtsurf(ig)=zdtsurf(ig)+
    878      s      (fluxrad(ig)+fluxgrd(ig))/capcal(ig)
     901     s        (fluxrad(ig)+fluxgrd(ig))/capcal(ig)
    879902         ENDDO
    880903         IF (turb_resolved) THEN
     
    14831506     & g,zzlay,zzlev,zu,zv,wstar,hfmax_th,zmax_th,tsurf,zh,z_out,n_out,
    14841507     & T_out,u_out,ustar,tstar,L_mo,vhf,vvv)
     1508                   ! pourquoi ustar recalcule ici? fait dans vdifc.
    14851509
    14861510#ifndef MESOSCALE
     
    19091933      !state  real  RICE      ikj   misc  1  -  h  "RICE"      "ICE RADIUS"                      "m"
    19101934      comm_RICE(1:ngrid,1:nlayer) = rice(1:ngrid,1:nlayer)
     1935
     1936   
     1937      !! calculate sensible heat flux in W/m2 for outputs
     1938      !! -- the one computed in vdifc is not the real one
     1939      !! -- vdifc must have been called
     1940      if (.not.callrichsl) then
     1941        sensibFlux(1:ngrid) = zflubid(1:ngrid)
     1942     .         - capcal(1:ngrid)*zdtsdif(1:ngrid)
     1943      else
     1944        sensibFlux(1:ngrid) =
     1945     &   (pplay(1:ngrid,1)/(r*pt(1:ngrid,1)))*cpp
     1946     &   *sqrt(pu(1:ngrid,1)*pu(1:ngrid,1)+pv(1:ngrid,1)*pv(1:ngrid,1)
     1947     &         +(log(1.+0.7*wstar(1:ngrid) + 2.3*wstar(1:ngrid)**2))**2)
     1948     &   *zcdh(1:ngrid)*(tsurf(1:ngrid)-zh(1:ngrid,1))
     1949      endif
     1950         
    19111951#else
    19121952#ifndef MESOINI
  • trunk/LMDZ.MARS/libf/phymars/turb_mod.F90

    r1236 r1242  
    66  REAL,SAVE,ALLOCATABLE :: ustar(:)
    77  REAL,SAVE,ALLOCATABLE :: wstar(:)
     8  REAL,SAVE,ALLOCATABLE :: tstar(:)
    89  REAL,SAVE,ALLOCATABLE :: hfmax_th(:)
    910  REAL,SAVE,ALLOCATABLE :: zmax_th(:)
     
    2526    allocate(wstar(ngrid))
    2627    allocate(ustar(ngrid))
     28    allocate(tstar(ngrid))
    2729    allocate(hfmax_th(ngrid))
    2830    allocate(zmax_th(ngrid))
  • trunk/LMDZ.MARS/libf/phymars/vdifc.F

    r1240 r1242  
    1313      use surfdat_h, only: watercaptag, frost_albedo_threshold, dryness
    1414      USE comcstfi_h
    15       use turb_mod, only: turb_resolved
     15      use turb_mod, only: turb_resolved, ustar, tstar
    1616      IMPLICIT NONE
    1717
     
    8484
    8585      REAL :: pt(ngrid,nlay)
    86       REAL ust(ngrid),tst(ngrid)
    8786 
    8887      INTEGER ilev,ig,ilay,nlev
     
    335334     &     (log(1.+0.7*wstar(:) + 2.3*wstar(:)**2))**2)
    336335
    337            ust(:)=sqrt(zcdv_true(:))*sqrt(zu2(:)+
     336           ustar(:)=sqrt(zcdv_true(:))*sqrt(zu2(:)+
    338337     &     (log(1.+0.7*wstar(:) + 2.3*wstar(:)**2))**2)
    339338
    340            tst(:)=0.
     339           tstar(:)=0.
    341340           DO ig=1,ngrid
    342341              IF (zcdh_true(ig) .ne. 0.) THEN      ! When Cd=Ch=0, u*=t*=0
    343                  tst(ig)=(ph(ig,1)-ptsrf(ig))*zcdh(ig)/ust(ig)
     342                 tstar(ig)=(ph(ig,1)-ptsrf(ig))*zcdh(ig)/ustar(ig)
    344343              ENDIF
    345344           ENDDO
     
    348347           zcdv(:)=zcdv_true(:)*sqrt(zu2(:))     ! 1 / bulk aerodynamic momentum conductance
    349348           zcdh(:)=zcdh_true(:)*sqrt(zu2(:))     ! 1 / bulk aerodynamic heat conductance
    350            ust(:)=sqrt(zcdv_true(:))*sqrt(zu2(:))
    351            tst(:)=(ph(:,1)-ptsrf(:))*zcdh_true(:)/sqrt(zcdv_true(:))
     349           ustar(:)=sqrt(zcdv_true(:))*sqrt(zu2(:))
     350           tstar(:)=(ph(:,1)-ptsrf(:))*zcdh_true(:)/sqrt(zcdv_true(:))
    352351        ENDIF
    353352
     
    383382      pt(:,:)=ph(:,:)*ppopsk(:,:)
    384383      CALL yamada4(ngrid,nlay,nq,ptimestep,g,r,pplev,pt
    385      s   ,pzlev,pzlay,pu,pv,ph,pq,zcdv_true,pq2,zkv,zkh,zkq,ust
     384     s   ,pzlev,pzlay,pu,pv,ph,pq,zcdv_true,pq2,zkv,zkh,zkq,ustar
    386385     s   ,9)
    387386      ENDIF
Note: See TracChangeset for help on using the changeset viewer.