Skip to content

Commit

Permalink
Thompson AA enhancements: BC aerosol, biomass burning emissions, and … (
Browse files Browse the repository at this point in the history
#1616)

TYPE: enhancement

KEYWORDS: real, Thompson aerosol-aware, microphysics

SOURCE: Timothy W. Juliano and Pedro A. Jimenez (NCAR/RAL)

DESCRIPTION OF CHANGES:
Problem:
Several enhancements have been made to the Thompson Aerosol-Aware microphysics scheme 
(mp_physics=28) related to the addition of:
1. black carbon (BC) aerosol category from either climatology (e.g., GOCART) or first guess aerosol source 
(e.g., GEOS-5);
2. biomass burning aerosol (organic carbon (OC) and BC) emissions from a first guess aerosol source 
(e.g., GEOS-5);
3. time-varying surface emissions from a first guess aerosol source (e.g., GEOS-5)

Solution:
1. Addition of a new category (3D scalar variable, QNBCA), that represents BC aerosol for the Thompson 
Aerosol Aware (AA) microphysics scheme. This variable is handled in a similar fashion as QNWFA and 
QNIFA (water-friendly and ice-friendly aerosols, respectively), including the surface emissions. In terms 
of the microphysical activity of QNBCA, at present we consider only its removal due to wet scavenging by 
rain, snow, and graupel. We recognize that this is a limitation of the current implementation; however, 
more detailed investigation into the water/ice nucleating abilities of BC are needed and left for future work. 
As a result of this limitation, activation of BC aerosol is made through the &domains namelist option, 
wif_input_opt: =1 retains the current meaning (water- and ice-friendly aerosols only) and =2 adds the BC 
aerosol on top of the water- and ice-friendly aerosols. This allows a user to active the Thompson AA scheme 
as in its original implementation if desired.

To account for the radiative contribution of BC aerosols (which are strongly absorbing compared to the 
QNWFA and QNIFA aerosols that are strongly scattering) to diagnosed AOD at 550nm, we extend the 
look-up table in subroutine gt_aod. The new look-up table values are computed using Mie code provided 
by Trude Eidhammer (NCAR/RAL). For BC, we use the following parameter values:
   * Modal radius = 11.8 nm following Chin et al. (2002) to maintain consistency with the original implementation 
      of the Thompson AA scheme
   * Geometric standard deviation = 2.0 following Chin et al. (2002) to maintain consistency with the original 
      implementation of the Thompson AA scheme
   * Real and imaginary indices of refraction = 1.85 and 0.71, respectively, following Bond et al. (2006)
   * Hygroscopicity = 0.2 following Engelhart et al. (2012)

Citations:
Chin, M., Ginoux, P., Kinne, S., Torres, O., Holben, B. N., Duncan, B. N., Martin, R. V., Logan, J. A., Higurashi, A., & Nakajima, T. (2002). Tropospheric Aerosol Optical Thickness from the GOCART Model and Comparisons with Satellite and Sun Photometer Measurements, Journal of the Atmospheric Sciences, 59(3), 461-483. Retrieved Dec 22, 2021, from https://journals.ametsoc.org/view/journals/atsc/59/3/1520-0469_2002_059_0461_taotft_2.0.co_2.xml

Bond, T. C., G. Habib, and R. W. Bergstrom (2006), Limitations in the enhancement of visible light absorption due to mixing state, J. Geophys. Res., 111, D20211, doi:10.1029/2006JD007315.

Engelhart, G. J., Hennigan, C. J., Miracolo, M. A., Robinson, A. L., and Pandis, S. N.: Cloud condensation nuclei activity of fresh primary and aged biomass burning aerosol, Atmos. Chem. Phys., 12, 7285–7293, https://doi.org/10.5194/acp-12-7285-2012, 2012.

2. Addition of OC and BC biomass burning aerosol emissions. These two aerosols are important during periods 
of active wildfires. Therefore, only when using a first guess aerosol source that has information about biomass 
burning emissions (e.g., GEOS-5), a user may include these effects through a new &physics namelist option: 
wif_fire_emit (logical). We note that if wif_fire_emit=.true. and wif_input_opt=1 (i.e., water- and ice-friendly 
aerosols only), then only OC biomass burning aerosols are emitted, as OC is included in the water-friendly 
category. However, if wif_fire_emit=.true. and wif_input_opt=2 (i.e., water- and ice-friendly plus BC aerosols), 
then both OC and BC biomass burning aerosols are emitted. This logic is handled using a surrogate integer 
variable (aer_fire_emit_opt) that is invisible to the user and thus defined on the Registry as a derived variable. 
Using the integer variable allows us to properly handle the new emission variables using packages while 
maintaining simplicity for the user to set a single, logical namelist option. To complement this enhancement, by 
default we distribute the OC/BC fire aerosols evenly throughout the PBL column (&physics namelist option: 
wif_fire_inj=1) as a simple plume rise parameterization. This is controllable through the namelist, and we set a 
warning message in check_a_mundo if the user is not running a PBL scheme with wif_fire_inj=1, as resolved 
vertical motions may be sufficient such that the parameterization should be turned off.

3. Modifications have been made to the METGRID.TBL file to handle the processing of the new QNBCA aerosol, 
as well as the surface emissions of anthropogenic QNBCA (QNBCA2D – similar to QNWFA2D and QNIFA2D) and 
surface emissions of OC and BC biomass burning aerosols (QNOCBB2D and QNBCBB2D, respectively).

The modifications to METGRID.TBL may be found in the WPS#190 (wrf-model/WPS#190):
   
We add entries to METGRID.TBL to handle the black carbon aerosol category in addition to biomass burning emissions. Specifically, we:
   * add monthly climatology entries for black carbon aerosol (B_WIF_*) which generate FLAG_QNBCA_CL 
      for processing in real
   * add first guess entry for black carbon aerosol (QNBCA) which generates FLAG_QNBCA for processing in real
   * add first guess entry for anthropogenic emission of black carbon aerosol (QNBCA2D) which generates 
      FLAG_QNBCA2D
   * add first guess entries for biomass burning emissions of organic carbon (QNOCBB2D) and black carbon 
     (QNBCBB2D) which generate FLAG_QNOCBB2D and FLAG_QNBCBB2D, respectively

Note that the new .dat file for monthly GOCART climatology is hosted on Google Drive:  https://drive.google.com/file/d/1BYflyu65kP5giRYbTzKo6y4iSnTfb1Fw/view?usp=sharing

4. The ability to have time-varying aerosol emissions has been added. This capability is handled through 
&physics namelist option qna_update=1, similar to sst_update=1. The I/O for qna_update is done through 
auxinput17 and the file generated during real is called wrfqnainp_d0* (individual files for each domain, 
again similar to wrflowinp for sst_update=1).

LIST OF MODIFIED FILES:
M Registry/Registry.EM_COMMON
M Registry/registry.new3d_wif
M dyn_em/module_em.F
M dyn_em/module_first_rk_step_part1.F
M dyn_em/module_initialize_real.F
M dyn_em/solve_em.F
M dyn_em/start_em.F
M main/real_em.F
M phys/module_bl_mynn.F
M phys/module_microphysics_driver.F
M phys/module_mp_thompson.F
M phys/module_pbl_driver.F
M phys/module_physics_init.F
M phys/module_radiation_driver.F
M share/input_wrf.F
M share/mediation_integrate.F
M share/module_check_a_mundo.F
M share/module_optional_input.F

TESTS CONDUCTED:
1. We have conducted numerous simulations with the new code for a 21-day period in 2016 and a 9-day period 
in 2020 during active wildfire events. AOD/irradiance quantities from the model output have been compared 
to observations. For the 2020 wildfire event, our findings are summarized in a manuscript that is currently 
under review (Juliano, T. W., P. A. Jiménez, B. Kosović, T. Eidhammer, G. Thompson, J. Fast, L. Berg, A. Motley, 
and A. Polidori, 2021: Smoke from 2020 United States wildfires responsible for substantial solar energy 
forecast errors, in review at Environmental Research Letters).

2.	Jenkins tests are all passing.

RELEASE NOTE: A black carbon aerosol category has been added to the Thompson Aerosol-Aware microphysics scheme. Moreover, code enhancements are introduced to allow for time-varying surface aerosol emissions, in addition to consideration of biomass burning organic and black carbon aerosols when using a first guess aerosol source (e.g., GEOS-5).
  • Loading branch information
twjuliano authored Jan 20, 2022
1 parent 9dc68ca commit 8b5bfe5
Show file tree
Hide file tree
Showing 18 changed files with 1,016 additions and 121 deletions.
11 changes: 9 additions & 2 deletions Registry/Registry.EM_COMMON
Original file line number Diff line number Diff line change
Expand Up @@ -488,8 +488,11 @@ state real dfi_qh ikjftb dfi_moist 1 - \
rusdf=(bdy_interp:dt) "DFI_QHAIL" "Hail mixing ratio" "kg kg-1"
state real qvold ikj misc 1 - rdu "QVOLD" "Water vapor mixing ratio, old time step" "kg kg-1"
state real rimi ikj misc 1 - irh "RIMI" "riming intensity" "fraction"
state real qnwfa2d ij misc 1 - i014rhdu "QNWFA2D" "Surface aerosol number conc emission" "kg-1 s-1"
state real qnifa2d ij misc 1 - i014rhdu "QNIFA2D" "Surface dust number conc emission" "kg-1 s-1"
state real qnwfa2d ij misc 1 - i014{17}rhdu "QNWFA2D" "Surface aerosol number conc emission" "kg-1 s-1"
state real qnifa2d ij misc 1 - i014{17}rhdu "QNIFA2D" "Surface dust number conc emission" "kg-1 s-1"
state real qnbca2d ij misc 1 - i014{17}rhdu "QNBCA2D" "Surface black carbon number conc emission" "kg-1 s-1"
state real qnocbb2d ij misc 1 - i014{17}rhdu "QNOCBB2D" "Surface organic carbon biomass burning number conc emission" "kg-1 s-1"
state real qnbcbb2d ij misc 1 - i014{17}rhdu "QNBCBB2D" "Surface black carbon biomass burning number conc emission" "kg-1 s-1"
state real re_cloud ikj misc 1 - r "RE_CLOUD" "Effective radius cloud water" "m"
state real re_ice ikj misc 1 - r "RE_ICE" "Effective radius cloud ice" "m"
state real re_snow ikj misc 1 - r "RE_SNOW" "Effective radius snow" "m"
Expand Down Expand Up @@ -2506,6 +2509,7 @@ rconfig real mp_zero_out_thresh namelist,physics 1 1.e-8
rconfig real seaice_threshold namelist,physics 1 100 h "seaice_threshold" "tsk below which which water points are set to sea ice for slab scheme" "K"
rconfig logical bmj_rad_feedback namelist,physics max_domains .false. - "if true include radiative effects of bmj clouds" ""
rconfig integer sst_update namelist,physics 1 0 h "sst_update" "update sst from wrflowinp file 0=no, 1=yes" ""
rconfig integer qna_update namelist,physics 1 0 h "qna_update" "update aerosol in Thompson-MP-Aero from wrfqnainp file 0=no, 1=yes" ""

rconfig integer sst_skin namelist,physics 1 0 h "sst_skin" "calculate sst skin temperature 0=no, 1=yes" ""
rconfig integer tmn_update namelist,physics 1 0 h "tmn_update" "update tmn from calculation 0=no, 1=yes" ""
Expand Down Expand Up @@ -2602,6 +2606,9 @@ rconfig integer tracer_pblmix namelist,physics max_domains 1
rconfig logical use_aero_icbc namelist,physics 1 .false. rh "use_aero_icbc" "Use GOCART climo 3D aerosols IC/BC data in Thompson-MP-Aero" "logical flag"
rconfig logical use_rap_aero_icbc namelist,physics 1 .false. r "use_rap_aero_icbc" "Use GOCART climo 3D aerosols IC/BC data in Thompson-MP-Aero from RAP" "logical flag"
rconfig integer aer_init_opt derived 1 0 irh "aer_init_opt" "surrogate to handle aerosol IC/BC data in Thompson-MP-Aero: 0=no IC/BC aerosol, 1=climo, 2=first guess"
rconfig logical wif_fire_emit namelist,physics 1 .false. irh "wif_fire_emit" "Activate biomass burning emissionsu in Thompson-MP-Aero" " "
rconfig integer aer_fire_emit_opt derived 1 0 irh "aer_fire_emit_opt" "surrogate to handle aerosol fire emissions in Thompson-MP-Aero: 0=no fire emissions, 1=OC only, 2=OC+BC" " "
rconfig integer wif_fire_inj namelist,physics max_domains 1 irh "wif_fire_inj" "Vertically distribute biomass burning emissions in Thompson-MP-Aero" " "
rconfig integer use_mp_re namelist,physics 1 1 h "use_mp_re" "use effective radii computed in some mp schemes in RRTMG" "flag"
rconfig logical insert_init_cloud namelist,physics 1 .false. irh "insert_init_cloud" "Insert diagnostic initial cloud using icloud=3 method (Thompson)" "logical flag"

Expand Down
24 changes: 24 additions & 0 deletions Registry/registry.new3d_wif
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ rconfig integer wif_input_opt namelist,domains 1 1

state real qnwfa_gc i{wif}j dyn_em 1 Z i1 "QNWFA" "water-friendly aerosol num concentration" "# kg-1"
state real qnifa_gc i{wif}j dyn_em 1 Z i1 "QNIFA" "water-friendly aerosol num concentration" "# kg-1"
state real qnbca_gc i{wif}j dyn_em 1 Z i1 "QNBCA" "black carbon aerosol num concentration" "# kg-1"
state real p_wif_gc i{wif}j dyn_em 1 Z i1 "P_WIF" "Pressure for first guess aerosol fields from metgrid" "Pa"

state real p_wif_now i{wif}j dyn_em 1 Z - "P_WIF_NOW" "Pressure for Water Ice Friendly Aerosols Now" "Pa"
Expand Down Expand Up @@ -62,15 +63,38 @@ state real i_wif_oct i{wif}j dyn_em 1 Z i1
state real i_wif_nov i{wif}j dyn_em 1 Z i1 "I_WIF_NOV" "Background Ice Friendly Aerosol option Nov" "# kg-1"
state real i_wif_dec i{wif}j dyn_em 1 Z i1 "I_WIF_DEC" "Background Ice Friendly Aerosol option Dec" "# kg-1"

state real b_wif_now i{wif}j dyn_em 1 Z - "B_WIF_NOW" "Background Black Carbon Aerosol option Now" "# kg-1"
state real b_wif_jan i{wif}j dyn_em 1 Z i1 "B_WIF_JAN" "Background Black Carbon Aerosol option Jan" "# kg-1"
state real b_wif_feb i{wif}j dyn_em 1 Z i1 "B_WIF_FEB" "Background Black Carbon Aerosol option Feb" "# kg-1"
state real b_wif_mar i{wif}j dyn_em 1 Z i1 "B_WIF_MAR" "Background Black Carbon Aerosol option Mar" "# kg-1"
state real b_wif_apr i{wif}j dyn_em 1 Z i1 "B_WIF_APR" "Background Black Carbon Aerosol option Apr" "# kg-1"
state real b_wif_may i{wif}j dyn_em 1 Z i1 "B_WIF_MAY" "Background Black Carbon Aerosol option May" "# kg-1"
state real b_wif_jun i{wif}j dyn_em 1 Z i1 "B_WIF_JUN" "Background Black Carbon Aerosol option Jun" "# kg-1"
state real b_wif_jul i{wif}j dyn_em 1 Z i1 "B_WIF_JUL" "Background Black Carbon Aerosol option Jul" "# kg-1"
state real b_wif_aug i{wif}j dyn_em 1 Z i1 "B_WIF_AUG" "Background Black Carbon Aerosol option Aug" "# kg-1"
state real b_wif_sep i{wif}j dyn_em 1 Z i1 "B_WIF_SEP" "Background Black Carbon Aerosol option Sep" "# kg-1"
state real b_wif_oct i{wif}j dyn_em 1 Z i1 "B_WIF_OCT" "Background Black Carbon Aerosol option Oct" "# kg-1"
state real b_wif_nov i{wif}j dyn_em 1 Z i1 "B_WIF_NOV" "Background Black Carbon Aerosol option Nov" "# kg-1"
state real b_wif_dec i{wif}j dyn_em 1 Z i1 "B_WIF_DEC" "Background Black Carbon Aerosol option Dec" "# kg-1"

package use_wif_input wif_input_opt==1 - state:p_wif_gc,p_wif_now,p_wif_jan,p_wif_feb,p_wif_mar,p_wif_apr,p_wif_may,p_wif_jun,p_wif_jul,p_wif_aug,p_wif_sep,p_wif_oct,p_wif_nov,p_wif_dec,qnwfa_gc,w_wif_now,w_wif_jan,w_wif_feb,w_wif_mar,w_wif_apr,w_wif_may,w_wif_jun,w_wif_jul,w_wif_aug,w_wif_sep,w_wif_oct,w_wif_nov,w_wif_dec,qnifa_gc,i_wif_now,i_wif_jan,i_wif_feb,i_wif_mar,i_wif_apr,i_wif_may,i_wif_jun,i_wif_jul,i_wif_aug,i_wif_sep,i_wif_oct,i_wif_nov,i_wif_dec

package use_wif_input_bc wif_input_opt==2 - scalar:qnbca;state:qnbca2d,p_wif_gc,p_wif_now,p_wif_jan,p_wif_feb,p_wif_mar,p_wif_apr,p_wif_may,p_wif_jun,p_wif_jul,p_wif_aug,p_wif_sep,p_wif_oct,p_wif_nov,p_wif_dec,qnwfa_gc,w_wif_now,w_wif_jan,w_wif_feb,w_wif_mar,w_wif_apr,w_wif_may,w_wif_jun,w_wif_jul,w_wif_aug,w_wif_sep,w_wif_oct,w_wif_nov,w_wif_dec,qnifa_gc,i_wif_now,i_wif_jan,i_wif_feb,i_wif_mar,i_wif_apr,i_wif_may,i_wif_jun,i_wif_jul,i_wif_aug,i_wif_sep,i_wif_oct,i_wif_nov,i_wif_dec,b_wif_now,b_wif_jan,b_wif_feb,b_wif_mar,b_wif_apr,b_wif_may,b_wif_jun,b_wif_jul,b_wif_aug,b_wif_sep,b_wif_oct,b_wif_nov,b_wif_dec

package emit_oc_bb aer_fire_emit_opt==1 - state:qnocbb2d
package emit_ocbc_bb aer_fire_emit_opt==2 - state:qnocbb2d,qnbcbb2d

state real qnwfa ikjftb scalar 1 - \
i0rhusdf=(bdy_interp:dt) "QNWFA" "water-friendly aerosol number con" "# kg(-1)"
state real qnifa ikjftb scalar 1 - \
i0rhusdf=(bdy_interp:dt) "QNIFA" "ice-friendly aerosol number con" "# kg(-1)"
state real qnbca ikjftb scalar 1 - \
i0rhusdf=(bdy_interp:dt) "QNBCA" "black carbon aerosol number con" "# kg(-1)"

state real dfi_qnwfa ikjftb dfi_scalar 1 - \
i0rhusdf=(bdy_interp:dt) "DFI_QNWFA" "DFI water-friendly aerosol number con" "# kg(-1)"
state real dfi_qnifa ikjftb dfi_scalar 1 - \
i0rhusdf=(bdy_interp:dt) "DFI_QNIFA" "DFI ice-friendly aerosol number con" "# kg(-1)"
state real dfi_qnbca ikjftb dfi_scalar 1 - \
i0rhusdf=(bdy_interp:dt) "DFI_QNBCA" "DFI black carbon aerosol number con" "# kg(-1)"

33 changes: 33 additions & 0 deletions dyn_em/module_em.F
Original file line number Diff line number Diff line change
Expand Up @@ -2519,6 +2519,39 @@ SUBROUTINE bound_tke ( tke, tke_upper_bound, &

END SUBROUTINE bound_tke

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

SUBROUTINE bound_qna ( qna, &
ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte )

IMPLICIT NONE

INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
ims,ime, jms,jme, kms,kme, &
its,ite, jts,jte, kts,kte

REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), INTENT(INOUT) :: qna

INTEGER :: i,k,j

!<DESCRIPTION>
!
! bounds aerosol between zero and current value
!
!</DESCRIPTION>

DO j=jts,min(jte,jde-1)
DO k=kts,kte-1
DO i=its,min(ite,ide-1)
qna(i,k,j) = max(qna(i,k,j),0.)
ENDDO
ENDDO
ENDDO

END SUBROUTINE bound_qna

!----------------------------------------------------------------------------------
!cyl: Implement the forward Lagrangian trajectory calculation in WRF
!Chiaying Lee RSMAS/UM
Expand Down
3 changes: 3 additions & 0 deletions dyn_em/module_first_rk_step_part1.F
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,8 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags &
& , QNDROP=scalar(ims,kms,jms,P_QNDROP), F_QNDROP=F_QNDROP &
& ,QNIFA=scalar(ims,kms,jms,P_QNIFA),F_QNIFA=F_QNIFA & !Trude
& ,QNWFA=scalar(ims,kms,jms,P_QNWFA),F_QNWFA=F_QNWFA & !Trude
& ,QNBCA=scalar(ims,kms,jms,P_QNBCA) &
& ,wif_input_opt=config_flags%wif_input_opt &
& ,qc_tot=grid%qc_tot, qi_tot=grid%qi_tot & ! Solar diag
& ,ACSWUPT=grid%acswupt ,ACSWUPTC=grid%acswuptc &
& ,ACSWDNT=grid%acswdnt ,ACSWDNTC=grid%acswdntc &
Expand Down Expand Up @@ -1100,6 +1102,7 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags &
& ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG &
& ,QNIFA_CURR=scalar(ims,kms,jms,P_QNIFA),F_QNIFA=F_QNIFA &
& ,QNWFA_CURR=scalar(ims,kms,jms,P_QNWFA),F_QNWFA=F_QNWFA &
& ,QNBCA_CURR=scalar(ims,kms,jms,P_QNBCA),F_QNBCA=F_QNBCA &
& ,HOL=HOL, MOL=grid%mol, REGIME=grid%REGIME &
!mynn mp@
& ,QKE=grid%qke, Sh3d=grid%sh3d &
Expand Down
Loading

0 comments on commit 8b5bfe5

Please sign in to comment.