Scheduled Downtime
On Friday 21 April 2023 @ 5pm MT, this website will be down for maintenance and expected to return online the morning of 24 April 2023 at the latest

chem_opt=401 with calling optical driver

This post was from a previous version of the WRF&MPAS-A Support Forum. New replies have been disabled and if you have follow up questions related to this post, then please start a new thread from the forum home page.

robert_s

New member
Hi everyone,

I recently started using WRF-CHEM and would like to do dust simulations with optical interaction to get aerosol optical depth.
Therefore I though I could use chem_opt=401. The simulation works fine and dust is emitted etc. But then I just get optical variables like tauaer1=0. When I look at the log file I can see, that this is the case, because the optical driver is not called.
Is there a possibility to call the optical driver while having chem_opt=401?
(I though, I would do this with setting aer_ra_feedback= 1 and opt_pars_out= 1.)

I tried out the same namelist just with chem_opt=300. Here I get optical values for example tauaer1 values that fit with the dust in the atmosphere. The only thing is that it takes 6 times longer than the simulation before. Is this the case because of all the additional GOCART chemistry or because of the optical driver?

Since I am just interested in the dust aerosols and not the whole GOCART chemistry I was wondering how I have to set up the namelist that the optical driver is called in chem_opt=401? Or are there other possibilities that are not as computational expensive like my attempt with chem_opt=300?

Thank you for your tips. Below I also have my physics and chem settings of my namelist.

Cheers,

Robert

Code:
&physics
 num_land_cat                        = 21,
 mp_physics                          = 2,
 progn                               = 1, 1,
 ra_lw_physics                       = 4, 4,
 ra_sw_physics                       = 4, 4,
 radt                                = 5, 5,
 sf_sfclay_physics                   = 1, 1,
 sf_surface_physics                  = 2, 2,
 bl_pbl_physics                      = 1, 1,
 icloud_bl                           = 0,
 bldt                                = 0, 0,
 cu_physics                          = 5, 0,
 cudt                                = 0, 0,
 isfflx                              = 1,
 num_soil_layers                     = 4,
 sf_urban_physics                    = 1, 1,
 mp_zero_out                         = 2,
 mp_zero_out_thresh                  = 1.e-12
 maxiens                             = 1,
 maxens                              = 3,
 maxens2                             = 3,
 maxens3                             = 16,
 ensdim                              = 144,
 cu_rad_feedback                     = .true.,.false.,
 cu_diag                             = 1, 0,
/

&chem
 kemit                               = 0,
 chem_opt                            = 401, 401,
 bioemdt                             = 0,
 photdt                              = 0,
 chemdt                              = 2.5, 0.5,
 io_style_emissions                  = 0,
 emiss_opt                           = 0, 0,
 emiss_opt_vol                       = 0, 0,
 aircraft_emiss_opt                  = 0,
 emiss_inpt_opt                      = 0,
 chem_in_opt                         = 0, 0,
 phot_opt                            = 0, 0,
 gas_drydep_opt                      = 0, 0,
 aer_drydep_opt                      = 1, 1,
 bio_emiss_opt                       = 0, 0,
 biomass_burn_opt                    = 0, 0,
 seas_opt                            = 0,
 dust_opt                            = 4,
 dust_schme                          = 3,
 dustwd_onoff                        = 1,
 dmsemis_opt                         = 0,
 aer_op_opt                          = 1, 1,
 aerchem_onoff                       = 0,
 aer_ra_feedback                     = 1, 1,
 opt_pars_out                        = 1,
/
 
Hi Robert,

The optical driver is not called due to a catch in chem/chem_driver.F:

if( do_photstep .and. &
config_flags%chem_opt /= CHEM_TRACER .and. &
config_flags%chem_opt /= CHEM_VASH .and. &
config_flags%chem_opt /= CHEM_VOLC .and. &
config_flags%chem_opt /= CHEM_VOLC_4BIN .and. &
config_flags%chem_opt /= DUST .and. &
config_flags%chem_opt /= CHEM_TRACE2 .and. &
config_flags%chem_opt /= CO2_TRACER .and. &
config_flags%chem_opt /= GHG_TRACER ) then
call wrf_debug(15,'calling optical driver')
call optical_driver (grid%id,curr_secs,grid%dt,config_flags,haveaer, & ...


At present, the code is not configured to work with the dust-only option, as if you look in chem/module_optical_averaging.F, there is only a subroutine for the gocart_simple case, which as you have noticed has ~3X as many advected tracers in addition to chemistry, both of which are contributing to the longer simulation times (optical driver to a lesser extent).

You could try removing the catch from the chem_driver, and adding another case (bold) to this statement in chem/module_optical_averaging.F:

CASE (GOCART_SIMPLE, GOCARTRACM_KPP, GOCARTRADM2, &
MOZCART_KPP, DUST )
call optical_prep_gocart(..

The problem is that this subroutine expects species in the chem array that will not be there (e.g., oc, bc) and thus may cause spurious solutions. A much better option would be to (1) remove the catch from chem_driver, and then (2) add a completely new case and subroutine such that it only references the species that you have (i.e., dust_1-5).

Jordan
 
Hi Jordan,

Thank you for your answer and explanation.
I edited the chem_driver, but like you said it causes problems and for my quick try it crashed after a few timesteps.
So for now I will stick to the chem_opt=300. Maybe some other time, when I am more familiar with WRF, I will try to add the completely new case like you mentioned in (2).

Thanks for your help,

Robert
 
Top