Changeset 4916


Ignore:
Timestamp:
Apr 22, 2024, 9:06:52 PM (2 weeks ago)
Author:
evignon
Message:

correction formulation de l'erosion de la neige soufflee suite aux investigations de Nicolas Chiabrando,
prise en compte d'un temps d'erosion de la neige fraiche nouvellement accumulee

Location:
LMDZ6/trunk/libf/phylmd
Files:
3 edited

Legend:

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

    r4835 r4916  
    7474
    7575
    76 Ka=2.4e-2      ! thermal conductivity of the air, SI
    7776p0=101325.0    ! ref pressure
    7877
     
    229228              IF (zqv(i) .LT. qsi(i)) THEN
    230229                 rhoair=zpres(i)/ztemp(i)/RD
    231                  !diffusivity of water vapor
    232230                 Dv=0.0001*0.211*(p0/zpres(i))*((ztemp(i)/RTT)**1.94) ! water vapor diffusivity in air, SI
    233231                 Ka=(5.69+0.017*(ztemp(i)-RTT))*1.e-5*100.*4.184                ! thermal conductivity of the air, SI
     
    241239                 dqbsub=(-b_p+sqrt(delta_p))/(2.*a_p) - zqb(i)       
    242240                 dqbsub = MIN(0.0,MAX(dqbsub,-zqb(i)))
    243 
    244241                 ! Sublimation limit: we ensure that the whole mesh does not exceed saturation wrt ice
    245242                 maxdqbsub = MAX(0.0, qsi(i)-zqv(i))
  • LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90

    r4881 r4916  
    19151915! For blowing snow:
    19161916    IF (ok_bs) THEN
    1917      ! following Bintanja et al 2000, part II
     1917     ! following Bintanja et al 2000, part II and Vionnet V PhD thesis
    19181918     ! we assume that the eddy diffsivity coefficient for
    1919      ! suspended particles is larger than Km by a factor zeta_bs
    1920      ! which is equal to 3 by default
     1919     ! suspended particles is a fraction of Kh
    19211920     do k=1,klev
    19221921        do j=1,knon
    1923            ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs
     1922           ycoefqbs(j,k)=ycoefh(j,k)*zeta_bs
    19241923        enddo
    19251924     enddo
  • LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90

    r4835 r4916  
    142142    REAL                   :: esalt
    143143    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
    144     REAL                   :: tau_dens, maxerosion, fluxbs_2
     144    REAL                   :: tau_dens, maxerosion
    145145    REAL, DIMENSION(klon)  :: ws1, rhod, rhos, ustart0, ustart, qsalt, hsalt
     146    REAL, DIMENSION(klon)  :: fluxbs_1, fluxbs_2, bsweight_fresh
     147    LOGICAL, DIMENSION(klon) :: ok_remaining_freshsnow
    146148
    147149! End definition
     
    373375       ! 1st step: erosion of fresh snow accumulated during the time step
    374376       do j=1, knon
    375 
     377       if (precip_snow(j) .GT. 0.) then
    376378           rhos(j)=rhofresh_bs
    377379           ! blowing snow flux formula used in MAR
     
    392394           maxerosion=min(precip_snow(j),hsalt(j)*qsalt(j)*rhod(j)/tau_eqsalt_bs)
    393395
    394            fluxbs(j)=rhod(j)*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) &
    395                    / (1.-rhod(j)*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime)
    396            !fluxbs(j)= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j))
    397            fluxbs(j)=max(-maxerosion,fluxbs(j))
     396           fluxbs_1(j)=rhod(j)*ws1(j)*cdragh(j)*zeta_bs*(AcoefQBS(j)-qsalt(j)) &
     397                   / (1.-rhod(j)*ws1(j)*cdragh(j)*zeta_bs*BcoefQBS(j)*dtime)
     398           fluxbs_1(j)=max(-maxerosion,fluxbs_1(j))
     399
     400           if (precip_snow(j) .gt. abs(fluxbs_1(j))) then
     401               ok_remaining_freshsnow(j)=.true.
     402               bsweight_fresh(j)=1.
     403           else
     404               ok_remaining_freshsnow(j)=.false.
     405               bsweight_fresh(j)=exp(-(abs(fluxbs_1(j))-precip_snow(j))/precip_snow(j))
     406           endif
     407       else
     408           ok_remaining_freshsnow(j)=.false.
     409           fluxbs_1(j)=0.
     410           bsweight_fresh(j)=0.
     411       endif
    398412       enddo
    399413
     
    401415       ! we now compute the snow age of the overlying layer (snow surface after erosion of the fresh snow accumulated during the time step)
    402416       ! this is done through the routine albsno
    403        CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)+fluxbs(:))
     417       CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)+fluxbs_1(:))
    404418
    405419       ! 2nd step:
     
    407421       ! which depends on surface snow density
    408422       do j = 1, knon
     423        if (ok_remaining_freshsnow(j)) then
     424           fluxbs_2(j)=0.
     425        else
     426           ! we start eroding the underlying layer
    409427           ! estimation of snow density
    410428           ! snow density increases with snow age and
     
    418436           ! computation of qbs at the top of the saltation layer
    419437           ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)
    420            esalt=c_esalt_bs*ustar(j)
     438           esalt=1./(c_esalt_bs*max(1.e-6,ustar(j)))
    421439           hsalt(j)=0.08436*(max(1.e-6,ustar(j))**1.27)
    422440           qsalt(j)=(max(ustar(j)**2-ustart(j)**2,0.))/(RG*hsalt(j))*esalt
     
    428446           ! (rho*qsalt*hsalt)
    429447           maxerosion=hsalt(j)*qsalt(j)*rhod(j)/tau_eqsalt_bs
    430            fluxbs_2=rhod(j)*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) &
    431                    / (1.-rhod(j)*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime)
    432            !fluxbs_2= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j))
    433            fluxbs_2=max(-maxerosion,fluxbs_2)
    434            fluxbs(j)=fluxbs(j)+fluxbs_2
     448           fluxbs_2(j)=rhod(j)*ws1(j)*cdragh(j)*zeta_bs*(AcoefQBS(j)-qsalt(j)) &
     449                   / (1.-rhod(j)*ws1(j)*cdragh(j)*zeta_bs*BcoefQBS(j)*dtime)
     450           fluxbs_2(j)=max(-maxerosion,fluxbs_2(j))
     451         endif
    435452       enddo
    436453
    437        ! for outputs       
     454
     455
     456
     457       ! final flux and outputs       
    438458        do j=1, knon
     459              ! total flux is the erosion of fresh snow +
     460              ! a fraction of the underlying snow (if all the fresh snow has been eroded)
     461              ! the calculation of the fraction is quite delicate since we do not know
     462              ! how much time was needed to erode the fresh snow. We assume that this time
     463              ! is dt*exp(-(abs(fluxbs1)-precipsnow)/precipsnow)=dt*bsweight_fresh
     464
     465              fluxbs(j)=fluxbs_1(j)+fluxbs_2(j)*(1.-bsweight_fresh(j))
    439466              i = knindex(j)
    440467              zxustartlic(i) = ustart(j)
     
    444471
    445472
    446   else
     473  else ! not ok_bs
    447474  ! those lines are useful to calculate the snow age
    448475       CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:))
Note: See TracChangeset for help on using the changeset viewer.