From da29755fc2177462982bdf949df51f0413691e76 Mon Sep 17 00:00:00 2001 From: mingxuanwupnnl Date: Thu, 21 Jul 2022 10:46:40 -0500 Subject: [PATCH 1/3] Do not reset HNO3, NH3, and HCL back, after calling gas-aerosol exchange --- components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 b/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 index df912cd84d84..a8c78ac9193d 100644 --- a/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 +++ b/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 @@ -1275,7 +1275,9 @@ subroutine gas_phase_chemdr(lchnk, ncol, imozart, q, & if ( n > 0 ) then 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') then + 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 !write(iulog,*) 'n=',n,'solsym=',trim(solsym(n)) vmr(:ncol,:,n) = vmr_old2(:ncol,:,n) endif From 35af2c35803160954ceeaf7c640fe2ca580b9da0 Mon Sep 17 00:00:00 2001 From: Yan Feng Date: Fri, 2 Sep 2022 16:16:03 -0500 Subject: [PATCH 2/3] Implement a new dust emission scheme With the new dust emissions, seasonal and land use land cover changes of land surface properties are coupled closely with dust mobilization through changes of erodible areas and soil moisture. It results in better agreement of aerosol optical depth comparison with the observations over the dust source regions, and in the mid-latitudes. The new dust scheme includes dust sources in high latitudes, and affect the ice nuclei source for mixed-phase clouds. Change dust_emis_fact in the default namelist file for eam, to re-tune the global dust emissions to match the observational constraint of dust aerosol optical depth. [CC] - Climate Changing [NML] - Namelist Changing See confluence for a more detailed description about these tags. --- .../namelist_files/namelist_defaults_eam.xml | 2 +- .../src/chemistry/modal_aero/dust_model.F90 | 4 +- components/elm/src/biogeochem/DUSTMod.F90 | 60 +++++++++++++++---- 3 files changed, 51 insertions(+), 15 deletions(-) diff --git a/components/eam/bld/namelist_files/namelist_defaults_eam.xml b/components/eam/bld/namelist_files/namelist_defaults_eam.xml index 52deff8f5e93..9eb24062fee6 100755 --- a/components/eam/bld/namelist_files/namelist_defaults_eam.xml +++ b/components/eam/bld/namelist_files/namelist_defaults_eam.xml @@ -910,7 +910,7 @@ 50.D0 -2.76D0 +9.80D0 1.38D0 1.38D0 1.2D0 diff --git a/components/eam/src/chemistry/modal_aero/dust_model.F90 b/components/eam/src/chemistry/modal_aero/dust_model.F90 index 8fc3aa40edf8..ff150284cb80 100644 --- a/components/eam/src/chemistry/modal_aero/dust_model.F90 +++ b/components/eam/src/chemistry/modal_aero/dust_model.F90 @@ -163,7 +163,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 diff --git a/components/elm/src/biogeochem/DUSTMod.F90 b/components/elm/src/biogeochem/DUSTMod.F90 index 88ff22504e2d..bd2576bfbc4c 100644 --- a/components/elm/src/biogeochem/DUSTMod.F90 +++ b/components/elm/src/biogeochem/DUSTMod.F90 @@ -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 @@ -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( & @@ -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 @@ -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 From 1369969867406e09b2de2f8139bacbb15f81be43 Mon Sep 17 00:00:00 2001 From: Yan Feng Date: Wed, 21 Sep 2022 09:32:40 -0500 Subject: [PATCH 3/3] Update mo_gas_phase_chemdr.F90 --- components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 b/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 index 0d0298f0f6fd..194297e544f6 100644 --- a/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 +++ b/components/eam/src/chemistry/mozart/mo_gas_phase_chemdr.F90 @@ -1326,7 +1326,6 @@ 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. & - yfenganl/atm/chemUCI-chemMZT-MOSAIC-dustemisK14_AMIP trim(solsym(n))/='HNO3' .and. trim(solsym(n))/='NH3' .and. & trim(solsym(n))/='HCL') then !write(iulog,*) 'n=',n,'solsym=',trim(solsym(n))