Ignore:
Timestamp:
Feb 29, 2024, 7:42:12 PM (3 months ago)
Author:
evignon
Message:

commission pour la suite du travail sur la mise a jour
de la param de neige soufflee

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmdiso/surf_landice_mod.F90

    r4724 r4835  
    3535    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3636    USE calcul_fluxs_mod
    37     USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
     37    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic, zxqsaltlic
    3838    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3939#ifdef ISO   
     
    5050!FC
    5151    USE ioipsl_getin_p_mod, ONLY : getin_p
    52     USE lmdz_blowing_snow_ini, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs
    53 
     52    USE lmdz_blowing_snow_ini, ONLY : c_esalt_bs, zeta_bs, pbst_bs, prt_bs, rhoice_bs, rhohard_bs
     53    USE lmdz_blowing_snow_ini, ONLY : rhofresh_bs, tau_eqsalt_bs, tau_dens0_bs, tau_densmin_bs
    5454#ifdef CPP_INLANDSIS
    5555    USE surf_inlandsis_mod,  ONLY : surf_inlandsis
     
    5757
    5858    USE indice_sol_mod
    59 
    6059
    6160!    INCLUDE "indicesol.h"
     
    185184    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    186185    REAL, DIMENSION (klon,6) :: alb6
    187     REAL                   :: rho0, rhoice, ustart0,esalt, rhod
     186    REAL                   :: esalt
    188187    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
    189     REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
    190     REAL, DIMENSION(klon)  :: ws1, rhos, ustart, qsalt, hsalt, snowini
    191     REAL                   :: maxerosion ! in kg/s
     188    REAL                   :: tau_dens, maxerosion, fluxbs_2
     189    REAL, DIMENSION(klon)  :: ws1, rhod, rhos, ustart0, ustart, qsalt, hsalt
    192190
    193191! End definition
     
    420418!
    421419!****************************************************************************************
    422  
    423     CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    424 
    425 
    426 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values
    427 ! I therefore comment them
    428 !    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    429 !         0.6 * (1.0-zfra(1:knon))
     420
    430421!
    431422!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     
    450441
    451442
    452 
    453   ! Simple blowing snow param
    454   if (ok_bs) then
    455        ustart0 = 0.211
    456        rhoice = 920.0
    457        rho0 = 300.0
    458        rhomax=450.0
    459        rhohard=450.0
    460        tau_dens0=86400.0*10.  ! 10 days by default, in s
    461        tau_densmin=21600.0    ! 1/4 days according to in situ obs by C. Amory during blowing snow +
    462                               ! Marshall et al. 1999 (snow densification during rain)
    463 
     443!****************************************************************************************
     444! Simple blowing snow param
     445!****************************************************************************************
     446! we proceed in 2 steps:
     447! first we erode - if possible -the accumulated snow during the time step
     448! then we update the density of the underlying layer and see if we can also erode
     449! this layer
     450
     451
     452   if (ok_bs) then
     453       fluxbs(:)=0.
     454       do j=1,klon
     455          ws1(j)=(u1(j)**2+v1(j)**2)**0.5
     456          ustar(j)=(cdragm(j)*(u1(j)**2+v1(j)**2))**0.5
     457          rhod(j)=p1lay(j)/RD/temp_air(j)
     458          ustart0(j) =(log(2.868)-log(1.625))/0.085*sqrt(cdragm(j))
     459       enddo
     460
     461       ! 1st step: erosion of fresh snow accumulated during the time step
     462       do j=1, knon
     463
     464           rhos(j)=rhofresh_bs
     465           ! blowing snow flux formula used in MAR
     466           ustart(j)=ustart0(j)*exp(max(rhoice_bs/rhofresh_bs-rhoice_bs/rhos(j),0.))*exp(max(0.,rhos(j)-rhohard_bs))
     467           ! we have multiplied by exp to prevent erosion when rhos>rhohard_bs
     468           ! computation of qbs at the top of the saltation layer
     469           ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)
     470           esalt=1./(c_esalt_bs*max(1.e-6,ustar(j)))
     471           hsalt(j)=0.08436*(max(1.e-6,ustar(j))**1.27)
     472           qsalt(j)=(max(ustar(j)**2-ustart(j)**2,0.))/(RG*hsalt(j))*esalt
     473           ! calculation of erosion (flux positive towards the surface here)
     474           ! consistent with implicit resolution of turbulent mixing equation
     475           ! Nemoto and Nishimura 2004 show that steady-state saltation is achieved within a time tau_eqsalt_bs of about 10s
     476           ! we thus prevent snowerosion (snow particle transfer from the saltation layer to the first model level)
     477           ! integrated over tau_eqsalt_bs to exceed the total mass of snow particle in the saltation layer
     478           ! (rho*qsalt*hsalt)
     479           ! during this first step we also lower bound the erosion to the amount of fresh snow accumulated during the time step
     480           maxerosion=min(precip_snow(j),hsalt(j)*qsalt(j)*rhod(j)/tau_eqsalt_bs)
     481
     482           fluxbs(j)=rhod(j)*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) &
     483                   / (1.-rhod(j)*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime)
     484           !fluxbs(j)= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j))
     485           fluxbs(j)=max(-maxerosion,fluxbs(j))
     486       enddo
     487
     488
     489       ! we now compute the snow age of the overlying layer (snow surface after erosion of the fresh snow accumulated during the time step)
     490       ! this is done through the routine albsno
     491       CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)+fluxbs(:))
     492
     493       ! 2nd step:
    464494       ! computation of threshold friction velocity
    465495       ! which depends on surface snow density
     
    468498           ! snow density increases with snow age and
    469499           ! increases even faster in case of sedimentation of blowing snow or rain
    470            tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(j))/pbst_bs &
    471                    -abs(precip_rain(j))/prt_bs) *exp(-max(tsurf(j)-272.0,0.)))
    472            rhos(j)=rho0+(rhohard-rho0)*(1.-exp(-agesno(j)*86400.0/tau_dens))
     500           tau_dens=max(tau_densmin_bs, tau_dens0_bs*exp(-abs(precip_bs(j))/pbst_bs - &
     501                    abs(precip_rain(j))/prt_bs)*exp(-max(tsurf(j)-RTT,0.)))
     502           rhos(j)=rhofresh_bs+(rhohard_bs-rhofresh_bs)*(1.-exp(-agesno(j)*86400.0/tau_dens))
    473503           ! blowing snow flux formula used in MAR
    474            ws1(j)=(u1(j)**2+v1(j)**2)**0.5
    475            ustar(j)=(cdragm(j)*(u1(j)**2+v1(j)**2))**0.5
    476            ustart(j)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(j),0.))*exp(max(0.,rhos(j)-rhomax))
    477            ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
    478            ! rhohard<450)
     504           ustart(j)=ustart0(j)*exp(max(rhoice_bs/rhofresh_bs-rhoice_bs/rhos(j),0.))*exp(max(0.,rhos(j)-rhohard_bs))
     505           ! we have multiplied by exp to prevent erosion when rhos>rhohard_bs
     506           ! computation of qbs at the top of the saltation layer
     507           ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)
     508           esalt=c_esalt_bs*ustar(j)
     509           hsalt(j)=0.08436*(max(1.e-6,ustar(j))**1.27)
     510           qsalt(j)=(max(ustar(j)**2-ustart(j)**2,0.))/(RG*hsalt(j))*esalt
     511           ! calculation of erosion (flux positive towards the surface here)
     512           ! consistent with implicit resolution of turbulent mixing equation
     513           ! Nemoto and Nishimura 2004 show that steady-state saltation is achieved within a time tau_eqsalt_bs of about 10s
     514           ! we thus prevent snowerosion (snow particle transfer from the saltation layer to the first model level)
     515           ! integrated over tau_eqsalt_bs to exceed the total mass of snow particle in the saltation layer
     516           ! (rho*qsalt*hsalt)
     517           maxerosion=hsalt(j)*qsalt(j)*rhod(j)/tau_eqsalt_bs
     518           fluxbs_2=rhod(j)*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) &
     519                   / (1.-rhod(j)*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime)
     520           !fluxbs_2= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j))
     521           fluxbs_2=max(-maxerosion,fluxbs_2)
     522           fluxbs(j)=fluxbs(j)+fluxbs_2
    479523       enddo
    480        
    481        ! computation of qbs at the top of the saltation layer
    482        ! two formulations possible
    483        ! pay attention that qbs is a mixing ratio and has to be converted
    484        ! to specific content
    485        
    486        if (iflag_saltation_bs .eq. 1) then
    487        ! expression from CRYOWRF (Sharma et al. 2022)
    488           aa=2.6
    489           bb=2.5
    490           cc=2.0
    491           lambdasalt=0.45
    492           do j =1, knon
    493                rhod=p1lay(j)/RD/temp_air(j)
    494                nunu=max(ustar(j)/ustart(j),1.e-3)
    495                fluxsalt=rhod/RG*(ustar(j)**3)*(1.-nunu**(-2)) * &
    496                         (aa+bb*nunu**(-2)+cc*nunu**(-1)) 
    497                csalt=fluxsalt/(2.8*ustart(j))
    498                hsalt(j)=0.08436*ustar(j)**1.27
    499                qsalt(j)=1./rhod*csalt*lambdasalt*RG/(max(ustar(j)**2,1E-6)) &
    500                        * exp(-lambdasalt*RG*hsalt(j)/max(ustar(j)**2,1E-6))
    501                qsalt(j)=max(qsalt(j),0.)
    502           enddo
    503 
    504 
    505        else
    506        ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)       
    507           do j=1, knon
    508               esalt=1./(3.25*max(ustar(j),0.001))
    509               hsalt(j)=0.08436*ustar(j)**1.27
    510               qsalt(j)=(max(ustar(j)**2-ustart(j)**2,0.))/(RG*hsalt(j))*esalt
    511               !ep=qsalt*cdragm(j)*sqrt(u1(j)**2+v1(j)**2)
    512           enddo
    513        endif
    514 
    515         ! calculation of erosion (flux positive towards the surface here)
    516         ! consistent with implicit resolution of turbulent mixing equation
    517        do j=1, knon
     524
     525       ! for outputs       
     526        do j=1, knon
    518527              i = knindex(j)
    519               rhod=p1lay(j)/RD/temp_air(j)
    520               ! Nemoto and Nishimura 2004 show that steady-state saltation is achieved within an interval of about 10s
    521               ! we thus prevent snowerosion (snow particle transfer from the saltation layer to the first model level)
    522               ! to exceed (in intensity) integrated over 10s to exceed the total mass of snow particle in the saltation layer
    523               ! (rho*qsalt*hsalt)
    524               maxerosion=hsalt(j)*qsalt(j)*rhod/10.
    525               fluxbs(j)=rhod*ws1(j)*cdragm(j)*(AcoefQBS(j)-qsalt(j)) &
    526                        / (1.-rhod*ws1(j)*cdragm(j)*BcoefQBS(j)*dtime)
    527               !fluxbs(j)= rhod*ws1(j)*cdragm(j)*(qbs1(j)-qsalt(j))
    528               fluxbs(j)=max(-maxerosion,fluxbs(j))
    529 
    530               ! for outputs
    531 
    532528              zxustartlic(i) = ustart(j)
    533529              zxrhoslic(i) = rhos(j)
    534        enddo
    535 
    536   endif
    537 
    538 
    539 
    540 !****************************************************************************************
    541 ! Calculate surface snow amount
     530              zxqsaltlic(i)=qsalt(j)
     531        enddo
     532
     533
     534  else
     535  ! those lines are useful to calculate the snow age
     536       CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:))
     537
     538  endif ! if ok_bs
     539
     540
     541
     542
     543
     544
     545!****************************************************************************************
     546! Calculate snow amount
    542547!   
    543548!****************************************************************************************
Note: See TracChangeset for help on using the changeset viewer.