Changeset 4529 for LMDZ6/trunk


Ignore:
Timestamp:
May 11, 2023, 10:53:52 AM (19 months ago)
Author:
evignon
Message:

nouvelle formulation du flux d'emission de neige soufflee

Location:
LMDZ6/trunk/libf
Files:
5 edited

Legend:

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

    r4523 r4529  
    88   real coef_eva_bs, expo_eva_bs, fallv_bs, zeta_bs
    99   real prt_bs, pbst_bs, qbst_bs
    10    integer :: niter_bs
     10   integer :: niter_bs, iflag_saltation_bs
    1111
    1212   !$OMP THREADPRIVATE(prt_level, lunout)
     
    1414   !$OMP THREADPRIVATE(coef_eva_bs, expo_eva_bs, fallv_bs, zeta_bs)
    1515   !$OMP THREADPRIVATE(pbst_bs, prt_bs, qbst_bs)
    16    !$OMP THREADPRIVATE(niter_bs)
     16   !$OMP THREADPRIVATE(niter_bs, iflag_saltation_bs)
    1717
    1818      contains
     
    6767         CALL getin_p('niter_bs',niter_bs)
    6868
     69         iflag_saltation_bs=0
     70         CALL getin_p('iflag_saltation_bs',iflag_saltation_bs)
     71
    6972
    7073      end subroutine blowing_snow_ini
  • LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90

    r4523 r4529  
    21472147                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21482148                  AcoefU, AcoefV, BcoefU, BcoefV, &
     2149                  AcoefQBS, BcoefQBS, &
    21492150                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    21502151                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
  • LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90

    r4526 r4529  
    1515       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1616       AcoefU, AcoefV, BcoefU, BcoefV, &
     17       AcoefQBS, BcoefQBS, &
    1718       ps, u1, v1, gustiness, rugoro, pctsrf, &
    1819       snow, qsurf, qsol, qbs1, agesno, &
     
    3435!FC
    3536    USE ioipsl_getin_p_mod, ONLY : getin_p
    36     USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs
     37    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs
    3738
    3839#ifdef CPP_INLANDSIS
     
    6263    REAL, DIMENSION(klon), INTENT(IN)             :: BcoefH, BcoefQ
    6364    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
     65    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefQBS, BcoefQBS
    6466    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    6567    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
     
    138140    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    139141    REAL, DIMENSION (klon,6) :: alb6
    140     REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, qsalt
     142    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, rhod
     143    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
    141144    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
    142     REAL, DIMENSION(klon)  :: ws1, rhos, ustart
     145    REAL, DIMENSION(klon)  :: ws1, rhos, ustart, qsalt
    143146! End definition
    144147!****************************************************************************************
     
    366369       tau_dens0=86400.0*10.  ! 10 days by default, in s
    367370       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     371
     372       ! computation of threshold friction velocity
     373       ! which depends on surface snow density
    368374       do i = 1, knon
    369375           ! estimation of snow density
     
    378384           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
    379385           ! rhohard<450)
    380            esalt=1./(3.25*max(ustar(i),0.001))
    381            hsalt=0.08436*ustar(i)**1.27
    382            qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
    383            !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
    384            !Pay attention that this is an explicit formulation for the surface flux
    385            !Formulation fully consistent with the implicit resolution of the turbulent
    386            !mixing scheme remains to be coded
    387            fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt)
     386       enddo
     387       
     388       ! computation of qbs at the top of the saltation layer
     389       ! two formulations possible
     390       ! pay attention that qbs is a mixing ratio and has to be converted
     391       ! to specific content
     392       
     393       if (iflag_saltation_bs .eq. 1) then
     394       ! expression from CRYOWRF (Sharma et al. 2022)
     395          aa=2.6
     396          bb=2.5
     397          cc=2.0
     398          lambdasalt=0.45
     399          do i =1, knon
     400               rhod=p1lay(i)/RD/temp_air(i)
     401               nunu=max(ustar(i)/ustart(i),1.e-3)
     402               fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * &
     403                        (aa+bb*nunu**(-2)+cc*nunu**(-1)) 
     404               csalt=fluxsalt/(2.8*ustart(i))
     405               hsalt=0.08436*ustar(i)**1.27
     406               qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) &
     407                       * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6))
     408               qsalt(i)=max(qsalt(i),0.)
     409          enddo
     410
     411
     412       else
     413       ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)       
     414          do i=1, knon
     415              esalt=1./(3.25*max(ustar(i),0.001))
     416              hsalt=0.08436*ustar(i)**1.27
     417              qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     418              !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     419          enddo
     420       endif
     421
     422        ! calculation of erosion (emission flux towards the first atmospheric level)
     423        ! consistent with implicit resolution of turbulent mixing equation
     424       do i=1, knon
     425              rhod=p1lay(i)/RD/temp_air(i)
     426              fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) &
     427                       / (1.-rhod*ws1(i)*zeta_bs*BcoefQBS(i)*dtime)
     428              !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i))
    388429       enddo
    389430
  • LMDZ6/trunk/libf/phylmdiso/pbl_surface_mod.F90

    r4523 r4529  
    24742474                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    24752475                  AcoefU, AcoefV, BcoefU, BcoefV, &
     2476                  AcoefQBS, BcoefQBS, &
    24762477                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    24772478                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
  • LMDZ6/trunk/libf/phylmdiso/surf_landice_mod.F90

    r4528 r4529  
    1515       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1616       AcoefU, AcoefV, BcoefU, BcoefV, &
     17       AcoefQBS, BcoefQBS, &
    1718       ps, u1, v1, gustiness, rugoro, pctsrf, &
    1819       snow, qsurf, qsol, qbs1, agesno, &
     
    4950!FC
    5051    USE ioipsl_getin_p_mod, ONLY : getin_p
    51     USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs
     52    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs
    5253
    5354#ifdef CPP_INLANDSIS
     
    7879    REAL, DIMENSION(klon), INTENT(IN)             :: BcoefH, BcoefQ
    7980    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
     81    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefQBS, BcoefQBS
    8082    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    8183    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
     
    183185    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    184186    REAL, DIMENSION (klon,6) :: alb6
    185     REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, qsalt
     187    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, rhod
     188    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
    186189    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
    187     REAL, DIMENSION(klon)  :: ws1, rhos, ustart
     190    REAL, DIMENSION(klon)  :: ws1, rhos, ustart, qsalt
    188191! End definition
    189192!****************************************************************************************
     
    455458       tau_dens0=86400.0*10.  ! 10 days by default, in s
    456459       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     460
     461       ! computation of threshold friction velocity
     462       ! which depends on surface snow density
    457463       do i = 1, knon
    458464           ! estimation of snow density
     
    467473           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
    468474           ! rhohard<450)
    469            esalt=1./(3.25*max(ustar(i),0.001))
    470            hsalt=0.08436*ustar(i)**1.27
    471            qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
    472            !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
    473            fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt)
     475       enddo
     476       
     477       ! computation of qbs at the top of the saltation layer
     478       ! two formulations possible
     479       ! pay attention that qbs is a mixing ratio and has to be converted
     480       ! to specific content
     481       
     482       if (iflag_saltation_bs .eq. 1) then
     483       ! expression from CRYOWRF (Sharma et al. 2022)
     484          aa=2.6
     485          bb=2.5
     486          cc=2.0
     487          lambdasalt=0.45
     488          do i =1, knon
     489               rhod=p1lay(i)/RD/temp_air(i)
     490               nunu=max(ustar(i)/ustart(i),1.e-3)
     491               fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * &
     492                        (aa+bb*nunu**(-2)+cc*nunu**(-1)) 
     493               csalt=fluxsalt/(2.8*ustart(i))
     494               hsalt=0.08436*ustar(i)**1.27
     495               qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) &
     496                       * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6))
     497               qsalt(i)=max(qsalt(i),0.)
     498          enddo
     499
     500
     501       else
     502       ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)       
     503          do i=1, knon
     504              esalt=1./(3.25*max(ustar(i),0.001))
     505              hsalt=0.08436*ustar(i)**1.27
     506              qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     507              !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     508          enddo
     509       endif
     510
     511        ! calculation of erosion (emission flux towards the first atmospheric level)
     512        ! consistent with implicit resolution of turbulent mixing equation
     513       do i=1, knon
     514              rhod=p1lay(i)/RD/temp_air(i)
     515              fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) &
     516                       / (1.-rhod*ws1(i)*zeta_bs*BcoefQBS(i)*dtime)
     517              !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i))
    474518       enddo
    475519
Note: See TracChangeset for help on using the changeset viewer.