Skip to content

Commit

Permalink
Merge branch 'yfenganl/atm/chemUCI-chemMZT-MOSAIC-dustemisK14_AMIP' i…
Browse files Browse the repository at this point in the history
…nto NGD_v3atm (PR #9)

Implement the new dust emission scheme

In addition to modifying the dust module, the changes are also made
to not update soil erodibility factor and to retune emission factor.

[non-BFB]
  • Loading branch information
wlin7 committed Oct 4, 2022
2 parents fc60d16 + 1369969 commit 78027c6
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -921,7 +921,7 @@
<molec_diff_bot_press> 50.D0 </molec_diff_bot_press>

<!-- dust emission tuning factor -->
<dust_emis_fact >2.76D0</dust_emis_fact>
<dust_emis_fact >9.80D0</dust_emis_fact>
<dust_emis_fact hgrid="ne30np4" phys="cam5" >1.38D0</dust_emis_fact>
<dust_emis_fact hgrid="ne45np4" phys="cam5" >1.38D0</dust_emis_fact>
<dust_emis_fact hgrid="ne120np4" phys="cam5" >1.2D0</dust_emis_fact>
Expand Down
4 changes: 3 additions & 1 deletion components/eam/src/chemistry/modal_aero/dust_model.F90
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,9 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod )

col_loop: do i =1,ncol

soil_erod(i) = soil_erodibility( i, lchnk )
! turn off the soil erodibility map in the source function by YF 20220816
! soil_erod(i) = soil_erodibility( i, lchnk )
soil_erod(i) = 1._r8

if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8

Expand Down
4 changes: 2 additions & 2 deletions components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1326,8 +1326,8 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, &
if ( .not. any( aer_species == n ) ) then
if (trim(solsym(n))/='DMS' .and. trim(solsym(n))/='SO2' .and. &
trim(solsym(n))/='H2SO4' .and. trim(solsym(n))/='SOAG' .and. &
trim(solsym(n))/='HNO3' .and. trim(solsym(n))/='NH3' .and. &
trim(solsym(n))/='HCL' ) then
trim(solsym(n))/='HNO3' .and. trim(solsym(n))/='NH3' .and. &
trim(solsym(n))/='HCL') then
!write(iulog,*) 'n=',n,'solsym=',trim(solsym(n))
vmr(:ncol,:,n) = vmr_old2(:ncol,:,n)
endif
Expand Down
60 changes: 47 additions & 13 deletions components/elm/src/biogeochem/DUSTMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -219,16 +219,20 @@ subroutine DustEmission (bounds, &
! !LOCAL VARIABLES
integer :: fp,p,c,l,t,g,m,n ! indices
real(r8) :: liqfrac ! fraction of total water that is liquid
real(r8) :: wnd_frc_rat ! [frc] Wind friction threshold over wind friction
!real(r8) :: wnd_frc_rat ! [frc] Wind friction threshold over wind friction, variable no longer needed, -YF 202208
real(r8) :: wnd_frc_slt_dlt ! [m s-1] Friction velocity increase from saltatn
real(r8) :: wnd_rfr_dlt ! [m s-1] Reference windspeed excess over threshld
real(r8) :: dst_slt_flx_rat_ttl
real(r8) :: flx_mss_hrz_slt_ttl
!real(r8) :: dst_slt_flx_rat_ttl ! variable no longer needed, -YF 202208
!real(r8) :: flx_mss_hrz_slt_ttl ! variable no longer needed, -YF 202208
real(r8) :: flx_mss_vrt_dst_ttl(bounds%begp:bounds%endp)
real(r8) :: frc_thr_wet_fct
real(r8) :: frc_thr_rgh_fct
real(r8) :: wnd_frc_thr_slt
real(r8) :: wnd_rfr_thr_slt
real(r8) :: wnd_frc_thr_slt_std ! [m/s] The soil threshold friction speed at
! standard air density (1.2250 kg/m3) -YF
real(r8) :: Cd ! [dimless] The dust emission coefficient, which depends on
! the soil's standardized threshold friction speed -YF
real(r8) :: wnd_frc_slt
real(r8) :: lnd_frc_mbl(bounds%begp:bounds%endp)
real(r8) :: bd
Expand All @@ -241,9 +245,22 @@ subroutine DustEmission (bounds, &
!
! constants
!
real(r8), parameter :: cst_slt = 2.61_r8 ! [frc] Saltation constant
!real(r8), parameter :: cst_slt = 2.61_r8 ! [frc] Saltation constant, variable no longer needed -YF
real(r8), parameter :: flx_mss_fdg_fct = 5.0e-4_r8 ! [frc] Empir. mass flx tuning eflx_lh_vegt
real(r8), parameter :: vai_mbl_thr = 0.3_r8 ! [m2 m-2] VAI threshold quenching dust mobilization
real(r8), parameter :: Cd0 = 4.4e-5_r8 ! [dimless] proportionality constant
! in calculation of dust emission coefficient -YF
real(r8), parameter :: Ca = 2.7_r8 ! [dimless] proportionality constant in scaling of dust
! emission exponent -YF
real(r8), parameter :: Ce = 2.0_r8 ! [dimless] proportionality constant scaling
! exponential dependence of dust emission coefficient
! on standardized soil threshold friction speed -YF
real(r8), parameter :: C_tune = 0.05_r8 ! [dimless] global tuning constant for vertical dust flux;
! set to produce ~same global dust flux in
! control sim (I_2000) as old parameterization -YF
real(r8), parameter :: wnd_frc_thr_slt_std_min = 0.16_r8 ! [m/s] minimum standardized soil threshold friction speed -YF
real(r8), parameter :: forc_rho_std = 1.2250_r8 ! [kg/m3] density of air at standard pressure (101325) and temperature (293 K) -YF

!------------------------------------------------------------------------

associate( &
Expand Down Expand Up @@ -398,11 +415,13 @@ subroutine DustEmission (bounds, &
! friction velocity for saltation

wnd_frc_thr_slt = tmp1 / sqrt(forc_rho(t)) * frc_thr_wet_fct * frc_thr_rgh_fct
! standardized soil threshold friction speed -YF
wnd_frc_thr_slt_std = wnd_frc_thr_slt * sqrt(forc_rho(t) / forc_rho_std)

! reset these variables which will be updated in the following if-block

wnd_frc_slt = fv(p)
flx_mss_hrz_slt_ttl = 0.0_r8
!flx_mss_hrz_slt_ttl = 0.0_r8 !variable no longer needed, -YF
flx_mss_vrt_dst_ttl(p) = 0.0_r8

! the following line comes from subr. dst_mbl
Expand All @@ -424,25 +443,40 @@ subroutine DustEmission (bounds, &
! purpose: compute vertically integrated streamwise mass flux of particles

if (wnd_frc_slt > wnd_frc_thr_slt) then
wnd_frc_rat = wnd_frc_thr_slt / wnd_frc_slt
flx_mss_hrz_slt_ttl = cst_slt * forc_rho(t) * (wnd_frc_slt**3.0_r8) * &
(1.0_r8 - wnd_frc_rat) * (1.0_r8 + wnd_frc_rat) * (1.0_r8 + wnd_frc_rat) / grav
!wnd_frc_rat = wnd_frc_thr_slt / wnd_frc_slt !variable no longer needed, -YF
!flx_mss_hrz_slt_ttl = cst_slt * forc_rho(t) * (wnd_frc_slt**3.0_r8) * &
! (1.0_r8 - wnd_frc_rat) * (1.0_r8 + wnd_frc_rat) * (1.0_r8 + wnd_frc_rat) / grav
!variable no longer needed, -YF

! the following two lines are added, -YF
Cd = Cd0 * exp(-Ce * (wnd_frc_thr_slt_std -wnd_frc_thr_slt_std_min) / wnd_frc_thr_slt_std_min)
! the dust emission coefficient
flx_mss_vrt_dst_ttl(p) = Cd * mss_frc_cly_vld(c) * forc_rho(t) * &
((wnd_frc_slt**2.0_r8 - wnd_frc_thr_slt**2.0_r8) / wnd_frc_thr_slt_std) * &
(wnd_frc_slt / wnd_frc_thr_slt)**(Ca * (wnd_frc_thr_slt_std - wnd_frc_thr_slt_std_min) / &
wnd_frc_thr_slt_std_min) ! the vertical dust flux

! the following loop originates from subr. dst_mbl
! purpose: apply land sfc and veg limitations and global tuning factor
! slevis: multiply flx_mss_hrz_slt_ttl by liqfrac to incude the effect
! of frozen soil

flx_mss_hrz_slt_ttl = flx_mss_hrz_slt_ttl * lnd_frc_mbl(p) * mbl_bsn_fct(c) * &
flx_mss_fdg_fct * liqfrac
!flx_mss_hrz_slt_ttl = flx_mss_hrz_slt_ttl * lnd_frc_mbl(p) * mbl_bsn_fct(c) * &
! flx_mss_fdg_fct * liqfrac !variable no longer needed, -YF

! the following line is added to account for bare soil fraction,
! frozen soil fraction, and apply global tuning parameter -YF
flx_mss_vrt_dst_ttl(p) = flx_mss_vrt_dst_ttl(p) * lnd_frc_mbl(p) * C_tune * liqfrac

end if

! the following comes from subr. flx_mss_vrt_dst_ttl_MaB95_get
! purpose: diagnose total vertical mass flux of dust from vertically
! integrated streamwise mass flux

dst_slt_flx_rat_ttl = 100.0_r8 * exp( log(10.0_r8) * (13.4_r8 * mss_frc_cly_vld(c) - 6.0_r8) )
flx_mss_vrt_dst_ttl(p) = flx_mss_hrz_slt_ttl * dst_slt_flx_rat_ttl

!variables no longer needed, -YF
!dst_slt_flx_rat_ttl = 100.0_r8 * exp( log(10.0_r8) * (13.4_r8 * mss_frc_cly_vld(c) - 6.0_r8) )
!flx_mss_vrt_dst_ttl(p) = flx_mss_hrz_slt_ttl * dst_slt_flx_rat_ttl

end if ! lnd_frc_mbl > 0.0

Expand Down

0 comments on commit 78027c6

Please sign in to comment.