aerosol aware Thompson microphysics

Submitted by Anning.Cheng on Mon, 07/12/2021 - 08:08

Has anybody run aerosol ware Thompson microphysics in CCPP? There is no "is_aerosol_aware" option in typedef and its default value is false in module_mp_thompson.F90.

 

Hi Anning, yes, we do that all the time, in regression tests, real-time parallels, ...

If you turn on the aerosol-awareness (is_aerosol_aware=.true.) then:

- you need to use a different field_table that includes three additional tracers (liq_aero, ice_aero, water_nc)

- you should provide 3d aerosol information as expected by Thompson MP in the initial conditions (nwfa=liq_aero, nifa=ice_aero), otherwise a default vertical profile is applied everywhere (regardless of land, water, ice, ... points) which isn't any good.

UFS_UTILS (chgres_cube) can interpolate the Thompson aerosol climatology to provide liq_aero and ice_aero. GSL folks are also working on a capability to use more realistic aerosol data, including fire emissions, to drive the aerosol-aware version of Thompson.

HI, Dom,

great to know. I have just clone the ufs and have not found setting of "is_aerosol_aware" in the regression tests.  Could you point me to a regression test turning on the aerosol awareness for Thompson?  Thank you!

/scratch1/NCEPDEV/global/Anning.Cheng/ufs-weather-model/tests/parm% grep -i is_aerosol_aware *
/scratch1/NCEPDEV/global/Anning.Cheng/ufs-weather-model/tests/parm% cd ../fv3_conf
/scratch1/NCEPDEV/global/Anning.Cheng/ufs-weather-model/tests/fv3_conf%  grep -i is_aerosol_aware *
/scratch1/NCEPDEV/global/Anning.Cheng/ufs-weather-model/tests/fv3_conf% cd tests
tests: No such file or directory.
/scratch1/NCEPDEV/global/Anning.Cheng/ufs-weather-model/tests/fv3_conf% cd ../tests
/scratch1/NCEPDEV/global/Anning.Cheng/ufs-weather-model/tests/tests%  grep -i is_aerosol_aware *
 

Permalink

In reply to by Anning.Cheng

Any test that has LTAEROSOL=.T. in it's file in tests/tests:

heinzeller-lt:ufs-weather-model-emc-develop-20210625-thompson-subcycling-hydrometeors dom.heinzeller$ grep -ie ltaero tests/tests/*
tests/tests/control_thompson:export LTAEROSOL=.T.
tests/tests/control_thompson_debug:export LTAEROSOL=.T.
tests/tests/control_thompson_no_aero:export LTAEROSOL=.F.
tests/tests/control_thompson_no_aero_debug:export LTAEROSOL=.F.
tests/tests/fv3_HAFS_v0_hwrf_thompson:export LTAEROSOL=.F.
tests/tests/fv3_HAFS_v0_hwrf_thompson_debug:export LTAEROSOL=.F.
tests/tests/fv3_esg_HAFS_v0_hwrf_thompson:export LTAEROSOL=.T.
tests/tests/fv3_esg_HAFS_v0_hwrf_thompson_debug:export LTAEROSOL=.T.
tests/tests/fv3_gf_thompson:export LTAEROSOL=.T.
tests/tests/fv3_gsd:export LTAEROSOL=.T.
tests/tests/fv3_gsd_RRTMGP:export LTAEROSOL=.T.
tests/tests/fv3_gsd_RRTMGP_debug:export LTAEROSOL=.T.
tests/tests/fv3_gsd_coldstart:export LTAEROSOL=.T.
tests/tests/fv3_gsd_debug:export LTAEROSOL=.T.
tests/tests/fv3_gsd_diag3d_debug:export LTAEROSOL=.T.
tests/tests/fv3_gsd_drag_suite:export LTAEROSOL=.T.
tests/tests/fv3_gsd_drag_suite_unified_ugwp:export LTAEROSOL=.T.
tests/tests/fv3_gsd_lndp:export LTAEROSOL=.T.
tests/tests/fv3_gsd_mynnsfc:export LTAEROSOL=.T.
tests/tests/fv3_gsd_mynnsfc_debug:export LTAEROSOL=.T.
tests/tests/fv3_gsd_noah:export LTAEROSOL=.T.
tests/tests/fv3_gsd_noah_lndp:export LTAEROSOL=.T.
tests/tests/fv3_gsd_noah_mynnsfc:export LTAEROSOL=.T.
tests/tests/fv3_gsd_noah_mynnsfc_debug:export LTAEROSOL=.T.
tests/tests/fv3_gsd_unified_ugwp:export LTAEROSOL=.T.
tests/tests/fv3_gsd_warmstart:export LTAEROSOL=.T.
tests/tests/fv3_hrrr:export LTAEROSOL=.T.
tests/tests/fv3_rap:export LTAEROSOL=.T.
tests/tests/fv3_rrfs_v1alpha:export LTAEROSOL=.T.
tests/tests/fv3_rrfs_v1alpha_debug:export LTAEROSOL=.T.
tests/tests/fv3_rrfs_v1beta:export LTAEROSOL=.T.
tests/tests/fv3_rrfs_v1beta_debug:export LTAEROSOL=.T.
tests/tests/fv3_thompson_mynn:export LTAEROSOL=.T.

Dom,

I have made a rt run with control_thompson. The aerosol awareness is turn on. But I have no idea where "is_aerosol_awareness" is set to T with ltaersol=T. Where does the model read in  liq_aero and ice_aero? How the initial data is produced despite of your mention of UFS_UTILS? Is there any documentation on those topic? Digging into the code is really time consuming and non-efficient. 

Anning

 

Like for all other CCPP physics GFS_control%ltaerosol corresponds to a certain standard name flag_for_aerosol_physics

If you then look into mp_thompson.meta, you find:

[is_aerosol_aware]
  standard_name = flag_for_aerosol_physics
  long_name = flag for aerosol-aware physics
  units = flag
  dimensions = ()
  type = logical
  intent = in
  optional = F
 

As for ice_aero and liq_aero, this iis all part of the fv3 dycore reading in initial conditions / restart information for tracers, just like specific humidity.

Get it. But it seems that the code does not read in the ice_aero and liq_aero properly in regression tests:

/scratch1/NCEPDEV/stmp2/Anning.Cheng/FV3_RT/rt_296149/control_thompson/out

  366   0:  SPHUM max =   2.318546182490500E-002  min =   0.000000000000000E+000
  367   0:  TS max =    343.493835449219       min =    218.181777954102
  368   0:  liq_wat max =   1.209091716549252E-003  min =   0.000000000000000E+000
  369   0:  ice_wat max =   8.368320363491328E-004  min =   0.000000000000000E+000
  370   0:  rainwat max =   2.932208353165916E-003  min =   0.000000000000000E+000
  371   0:  snowwat max =   2.072102623060683E-003  min =   0.000000000000000E+000
  372   0:  graupel max =   2.996901535370807E-003  min =   0.000000000000000E+000
  373   0:  O3MR max =   1.934374267875683E-005  min =   0.000000000000000E+000
  374   0:  liq_aero max =   0.000000000000000E+000  min =   0.000000000000000E+000
  375   0:  ice_aero max =   0.000000000000000E+000  min =   0.000000000000000E+000

From the fv_tracer.res.tile*.nc file. liq_aero, for example, is on the order of 10^6. 

Where is the  location for fv_tracer.res.tile*.nc and phy_data.tile*.nc for C768L127?

Permalink

In reply to by Anning.Cheng

I see. That is because when Jun updated the UFS global regression tests, she didn't add the aerosols to the input data. If you scroll down further in the log, you will probably find messaged from Thompson MP that no aerosol data is present:

> Apparently there are no initial CCN aerosols

> ...

> Apparently there are no initial IN aerosols.

In this case, it will compute the default vertical profile that I mentioned yesterday at every grid point.

Can you please try to run the GSD regression tests `fv3_gsd` or `fv3_gsd_debug`? This one uses C96L64 input data with aerosols.

If you need C768L127 with Thompson aerosol climatology, then you will have to run chgres_cube. But I may have initial conditions for C768L127 on hera for you to test.

yes, fv3_gsd does read in the liq_aero and ice_aero.  The value of them have to be put in gfs_data.tile*nc in order to be read.