Changeset 5912


Ignore:
Timestamp:
Dec 4, 2025, 3:16:33 PM (111 minutes ago)
Author:
evignon
Message:

changes in blowing snow routines to comply with the revised version of the paper

Location:
LMDZ6/trunk/libf
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lmdz_blowing_snow_ini.f90

    r5612 r5912  
    7070         CALL getin_p('fallv_bs',fallv_bs)
    7171
    72          coef_sub_bs =  0.1
     72         coef_sub_bs =  0.01
    7373         CALL getin_p('coef_sub_bs',coef_sub_bs)
    7474
     
    7979         CALL getin_p('iflag_sedim_bs',iflag_sedim_bs)
    8080
    81          r_bs=150.0e-6
     81         r_bs=50.0e-6
    8282         CALL getin_p('r_bs',r_bs)
    8383
  • LMDZ6/trunk/libf/phylmd/lmdz_blowing_snow_sublim_sedim.f90

    r5268 r5912  
    22
    33contains
    4 subroutine blowing_snow_sublim_sedim(ngrid,nlay,dtime,temp,qv,qb,pplay,paprs,dtemp_bs,dqv_bs,dqb_bs,bsfl,precip_bs)
     4
     5!==============================================================================       
     6subroutine blowing_snow_sublim_sedim(ngrid,nlay,dtime,ustar,temp,qv,qb,pplay,paprs,dtemp_bs,dqv_bs,dqb_bs,bsfl,precip_bs)
    57
    68!==============================================================================
    7 ! Routine that calculates the evaporation and sedimentation of blowing snow
    8 ! inspired by what is done in lscp_mod
     9! Routine that calculates the sublimation, melting and sedimentation
     10! of blowing snow
     11! Reference: Vignon et al 2025, GMD, https://doi.org/10.5194/egusphere-2025-2871
     12!
    913! Etienne Vignon, October 2022
    1014!==============================================================================
     
    1216
    1317use lmdz_blowing_snow_ini, only : iflag_sublim_bs, iflag_sedim_bs, coef_sub_bs,RTT,RD,RG,fallv_bs
    14 use lmdz_blowing_snow_ini, only : qbmin, RCPD, RLSTT, RLMLT, RLVTT, RVTMP2, RV, RPI, tbsmelt, taumeltbs0, rhobs, r_bs
     18use lmdz_blowing_snow_ini, only : qbmin, RCPD, RLSTT, RLMLT, RLVTT, RVTMP2, RV, RPI
     19use lmdz_blowing_snow_ini, only : tbsmelt, taumeltbs0, rhobs, r_bs
    1520USE lmdz_lscp_tools, only : calc_qsat_ecmwf
    1621
     
    2530!=====
    2631
    27 integer, intent(in)                     :: ngrid,nlay
    28 real, intent(in)                        :: dtime
    29 real, intent(in), dimension(ngrid,nlay) :: temp
    30 real, intent(in), dimension(ngrid,nlay) :: qv
    31 real, intent(in), dimension(ngrid,nlay) :: qb
    32 real, intent(in), dimension(ngrid,nlay) :: pplay
    33 real, intent(in), dimension(ngrid,nlay+1) :: paprs
     32integer, intent(in)                     :: ngrid ! number of horizontal grid points
     33integer, intent(in)                     :: nlay  ! number of vertical layers
     34real, intent(in)                        :: dtime ! physics time step [s]
     35real, intent(in), dimension(ngrid)      :: ustar ! surface friction velocity [m/s]
     36real, intent(in), dimension(ngrid,nlay) :: temp  ! temperature of the air [K]
     37real, intent(in), dimension(ngrid,nlay) :: qv    ! specific content of water [kg/kg]
     38real, intent(in), dimension(ngrid,nlay) :: qb    ! specific content of blowing snow [kg/kg]
     39real, intent(in), dimension(ngrid,nlay) :: pplay ! pressure at the middle of layers [Pa]
     40real, intent(in), dimension(ngrid,nlay+1) :: paprs ! pressure at the layer bottom interface [Pa]
    3441
    3542
     
    3946
    4047
    41 real, intent(out), dimension(ngrid,nlay) :: dtemp_bs
    42 real, intent(out), dimension(ngrid,nlay) :: dqv_bs
    43 real, intent(out), dimension(ngrid,nlay) :: dqb_bs
    44 real, intent(out), dimension(ngrid,nlay+1) :: bsfl
    45 real, intent(out), dimension(ngrid)      :: precip_bs
    46 
     48real, intent(out), dimension(ngrid,nlay) :: dtemp_bs ! temperature tendency [K/s]
     49real, intent(out), dimension(ngrid,nlay) :: dqv_bs   ! water vapor tendency [kg/kg/s]
     50real, intent(out), dimension(ngrid,nlay) :: dqb_bs   ! blowing snow mass tendancy [kg/kg/s]
     51real, intent(out), dimension(ngrid,nlay+1) :: bsfl   ! vertical profile of blowing snow vertical flux [kg/m2/s]
     52real, intent(out), dimension(ngrid)      :: precip_bs ! surface sedimentation flux of blowing snow [kg/s/m2]
    4753
    4854! LOCAL
     
    5561real                                     :: maxdqvmelt, rhoair, dz, dqbsedim
    5662real                                     :: delta_p, b_p, a_p, c_p, c_sub, qvsub
    57 real                                     :: p0, T0, Dv, Aprime, Bprime, Ka
     63real                                     :: p0, T0, Dv, Aprime, Bprime, Ka, radius0, radius
    5864real, dimension(ngrid)                   :: ztemp,zqv,zqb,zpres,qsi,dqsi,qsl,dqsl,qzero,sedim
    5965real, dimension(ngrid)                   :: zpaprsup, zpaprsdn, ztemp_up, zqb_up, zvelo
    60 real, dimension(ngrid,nlay)              :: temp_seri, qb_seri, qv_seri
     66real, dimension(ngrid,nlay)              :: temp_seri, qb_seri, qv_seri, zz
    6167
    6268!++++++++++++++++++++++++++++++++++++++++++++++++++
     
    7278precip_bs(:)=0.
    7379bsfl(:,:)=0.
     80zz(:,:)=0.
    7481
    7582
     
    8289      qv_seri(i,k)=qv(i,k)
    8390      qb_seri(i,k)=qb(i,k)
     91      zz(i,k)=zz(i,k)+(paprs(i,k)-paprs(i,k+1)) / (pplay(i,k)/RD/temp(i,k)*RG)
    8492   ENDDO
    8593ENDDO
     
    175183        zpaprsup(i)=paprs(i,k+1)
    176184        zpaprsdn(i)=paprs(i,k)
     185
     186    ! computation of blowing snow mean radius. Either constant value = r_bs if >0
     187    ! or use of the height-dependent formulation from Sauter et al. 2013 and Saigger et al. 2024
     188        IF (r_bs .GT. 0.) THEN
     189            radius=r_bs
     190        ELSE
     191            radius0=0.5*(ustar(i)*(7.8e-6)/0.036+31.e-6)
     192            radius=radius0*zz(i,k)**(-0.258)
     193        ENDIF
     194
    177195    ENDDO
    178196
     
    213231              ! Sublimation formulation for ice crystals from Pruppacher & Klett, Rutledge & Hobbs 1983
    214232              ! assuming monodispered crystal distrib
    215               ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*nc*8*r_bs/(Aprime+Bprime)
    216               ! assuming Mi=rhobs*4/3*pi*r_bs**3
    217               ! rhoair qb=nc*Mi -> nc=rhoair qb/Mi
    218               ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*6*rhoair*qb/(rhobs*pi*r_bs**2)/(Aprime+Bprime)
     233              ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*nc*8*radius/(Aprime+Bprime)
     234              ! assuming Mi=rhobs*4/3*pi*radius**3
     235              ! qb=nc*Mi -> nc=qb/Mi
     236              ! dqb/dt_sub=-coef_sub_bs*(1-qv/qsi)*6*qb/(rhobs*pi*radius**2)/(Aprime+Bprime)
    219237              ! dqb/dt_sub=-c_sub(1-qv/qsi)*qb
    220               ! c_sub=coef_sub_bs*6*rhoair/(rhobs*pi*r_bs**2)/(Aprime+Bprime)
     238              ! c_sub=coef_sub_bs*6/(rhobs*pi*radius**2)/(Aprime+Bprime)
    221239              !
    222240              ! Note the strong coupling between specific contents of water vapor and blowing snow during sublimation
     
    228246              IF (zqv(i) .LT. qsi(i)) THEN
    229247                 rhoair=zpres(i)/ztemp(i)/RD
    230                  Dv=0.0001*0.211*(p0/zpres(i))*((ztemp(i)/RTT)**1.94) ! water vapor diffusivity in air, SI
     248                 Dv=0.0001*0.211*(p0/zpres(i))*((ztemp(i)/RTT)**1.94)           ! water vapor diffusivity in air, SI
    231249                 Ka=(5.69+0.017*(ztemp(i)-RTT))*1.e-5*100.*4.184                ! thermal conductivity of the air, SI
    232250                 Aprime=RLSTT/Ka/ztemp(i)*(RLSTT/RV/ztemp(i) -1.)
    233251                 Bprime=1./(rhoair*Dv*qsi(i))
    234                  c_sub=coef_sub_bs*6.*rhoair/(rhobs*RPI*r_bs**2)/(Aprime+Bprime)
     252                 c_sub=coef_sub_bs*3./(rhobs*radius**2)/(Aprime+Bprime)
    235253                 c_p=-zqb(i)
    236254                 b_p=1.+c_sub*dtime-c_sub*dtime/qsi(i)*zqb(i)-c_sub*dtime/qsi(i)*zqv(i)
     
    293311
    294312end subroutine blowing_snow_sublim_sedim
     313!==============================================================================
     314
     315
     316
    295317end module lmdz_blowing_snow_sublim_sedim
  • LMDZ6/trunk/libf/phylmd/lmdz_call_blowing_snow.f90

    r5841 r5912  
    44contains
    55
    6 subroutine call_blowing_snow_sublim_sedim(ngrid,nlay,dtime,temp,q,qbs,pplay,paprs, &
     6subroutine call_blowing_snow_sublim_sedim(ngrid,nlay,dtime,ustar,temp,q,qbs,pplay,paprs, &
    77                                  dtemp_bs,dq_bs,dqbs_bs,bsfl,precip_bs)
    88
     
    1515integer, intent(in)                     :: ngrid,nlay
    1616real, intent(in)                        :: dtime
     17real, intent(in), dimension(ngrid)      :: ustar
    1718real, intent(in), dimension(ngrid,nlay) :: temp
    1819real, intent(in), dimension(ngrid,nlay) :: q
     
    3536
    3637
    37 call blowing_snow_sublim_sedim(ngrid,nlay,dtime,temp,q,qbs,pplay,paprs, &
     38call blowing_snow_sublim_sedim(ngrid,nlay,dtime,ustar,temp,q,qbs,pplay,paprs, &
    3839                                  dtemp_bs,dq_bs,dqbs_bs,bsfl,precip_bs)
    3940
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r5906 r5912  
    31063106    IF (ok_bs) THEN
    31073107
    3108      CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     3108     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,zustar,t_seri,q_seri,qbs_seri,pplay,paprs, &
    31093109                                        d_t_bsss,d_q_bsss,d_qbs_bsss,bsfl,bs_fall)
    31103110
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r5894 r5912  
    36193619    IF (ok_bs) THEN
    36203620
    3621      CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
    3622                                         d_t_bsss,d_q_bsss,d_qbs_bsss,bsfl,bs_fall)
     3621     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,zustar,t_seri,q_seri,qbs_seri,pplay,paprs, &
     3622                                         d_t_bsss,d_q_bsss,d_qbs_bsss,bsfl,bs_fall)
    36233623
    36243624     CALL add_phys_tend &
Note: See TracChangeset for help on using the changeset viewer.