The Model for Simulating Aerosol Interactions and Chemistry (MOSAIC) is a comprehensive aerosol chemistry module designed to dynamically partition H2SO4, MSA, HNO3, HCl, NH3 and secondary organic aerosol (SOA) to different aerosol size bins/modes, driven by particle-phase thermodynamics and heterogeneous chemical reactions (Zaveri et al., JGR, doi:10.1029/2007JD008782, 2008; Zaveri et al., JAMES, doi:10.1029/2020MS002346, 2021). It has been implemented into CESM2, but is not yet available in the standard code. A full description of this implementation is in Lu et al., JGR-Atmospheres, doi:10.1029/2021JD034809, 2021).
You can get the CESM source code with MOSAIC by executing the following commands:
cd your_code_directory git clone https://github.com/ESCOMP/CAM -b zz_cam6_3_018_mosaic0.3 your_mosaic_directory cd your_mosaic_directory ./manage_externals/checkout_externals |
'your_code_directory' should be a directory in your home or work space where you keep CESM source code. Replace 'your_mosaic_directory' with an appropriate name that reflects this source code.
You will get a message "You are in 'detached HEAD' state. ..." which is fine. The mosaic code is not on the main code trunk.
April 2024: the tag "zz_cam6_3_018_mosaic0.3" includes updates replacing SVN with GIT protocols.
CESM tutorials should be helpful if you are not familiar with CESM/CAM-chem, and how to set up a case from the code.
There is not a compset for the MOSAIC scheme so you must make the changes listed below. Start with a CAM-chem compset (such as FCnudged).
After creating a new case in the usual way (use compset FCnudged), issue the following commands in your new case directory (for running on Derecho):
./xmlchange PIO_STRIDE=1 ./xmlchange NTASKS=2048 ./case.setup |
You need to change a few files to use MOSAIC.
First one is env_build.xml, you can change the file manually, or do this command
./xmlchange --append CAM_CONFIG_OPTS="-mosaic -usr_mech_infile MOSAIC_MECH_FILE" |
Replace "MOSAIC_MECH_FILE" with the full path to the MOSAIC mechanism file, which you can download here and copy to Derecho (or your HPC): MZ272_TS1.1_simpleVBS_MOSAIC_20210528.in
You also need to change the user namelist file, to let the model know you simulate additional species.
1) aer_drydep_list & aer_wetdep_list
&aerosol_nl aer_drydep_list = 'bc_a1', 'bc_a4', 'ca_a1', 'ca_a2', 'ca_a3', 'cl_a1', 'cl_a2', 'cl_a3', 'co3_a1', 'co3_a2', 'co3_a3', 'dst_a1', 'dst_a2', 'dst_a3', 'na_a1', 'na_a2', 'na_a3', 'nh4_a1', 'nh4_a2', 'nh4_a3', 'no3_a1', 'no3_a2', 'no3_a3', 'num_a1', 'num_a2', 'num_a3', 'num_a4', 'pom_a1', 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3', 'soa1_a1', 'soa1_a2', 'soa2_a1', 'soa2_a2', 'soa3_a1', 'soa3_a2', 'soa4_a1', 'soa4_a2', 'soa5_a1', 'soa5_a2' aer_wetdep_list = 'bc_a1', 'bc_a4', 'ca_a1', 'ca_a2', 'ca_a3', 'cl_a1', 'cl_a2', 'cl_a3', 'co3_a1', 'co3_a2', 'co3_a3', 'dst_a1', 'dst_a2', 'dst_a3', 'na_a1', 'na_a2', 'na_a3', 'nh4_a1', 'nh4_a2', 'nh4_a3', 'no3_a1', 'no3_a2', 'no3_a3', 'num_a1', 'num_a2', 'num_a3', 'num_a4', 'pom_a1', 'pom_a4', 'so4_a1', 'so4_a2', 'so4_a3', 'soa1_a1', 'soa1_a2', 'soa2_a1', 'soa2_a2', 'soa3_a1', 'soa3_a2', 'soa4_a1', 'soa4_a2', 'soa5_a1', 'soa5_a2' / |
you can see the additional species compared to the default CAM-chem version, such as 'na_*', 'ca_*', 'cl_*', 'co3_*', 'nh4_*', and 'no3_*'
2) rad_cnst_nl
This change is needed for AOD & RRTMG calculations
&rad_cnst_nl mode_defs = 'mam4_mode1:accum:=', 'A:num_a1:N:num_c1:num_mr:+', 'A:so4_a1:N:so4_c1:sulfate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc:+', 'A:pom_a1:N:pom_c1:p-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocpho_rrtmg_c130709.nc:+', 'A:soa1_a1:N:soa1_c1:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa2_a1:N:soa2_c1:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa3_a1:N:soa3_c1:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa4_a1:N:soa4_c1:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa5_a1:N:soa5_c1:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:bc_a1:N:bc_c1:black-c:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/bcpho_rrtmg_c100508.nc:+', 'A:dst_a1:N:dst_c1:dust:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:na_a1:N:na_c1:seasalt:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ssam_rrtmg_c100508.nc:+', 'A:cl_a1:N:cl_c1:chloride:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ssam_rrtmg_c100508.nc:+', 'A:no3_a1:N:no3_c1:nitrate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc:+', 'A:ca_a1:N:ca_c1:calcium:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:co3_a1:N:co3_c1:carbonate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:nh4_a1:N:nh4_c1:ammonium:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc', 'mam4_mode2:aitken:=', 'A:num_a2:N:num_c2:num_mr:+', 'A:so4_a2:N:so4_c2:sulfate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc:+', 'A:soa1_a2:N:soa1_c2:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa2_a2:N:soa2_c2:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa3_a2:N:soa3_c2:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa4_a2:N:soa4_c2:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:soa5_a2:N:soa5_c2:s-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocphi_rrtmg_c100508.nc:+', 'A:na_a2:N:na_c2:seasalt:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ssam_rrtmg_c100508.nc:+', 'A:dst_a2:N:dst_c2:dust:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:cl_a2:N:cl_c2:chloride:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ssam_rrtmg_c100508.nc:+', 'A:co3_a2:N:co3_c2:carbonate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:no3_a2:N:no3_c2:nitrate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc:+', 'A:ca_a2:N:ca_c2:calcium:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:nh4_a2:N:nh4_c2:ammonium:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc', 'mam4_mode3:coarse:=', 'A:num_a3:N:num_c3:num_mr:+', 'A:dst_a3:N:dst_c3:dust:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:na_a3:N:na_c3:seasalt:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ssam_rrtmg_c100508.nc:+', 'A:so4_a3:N:so4_c3:sulfate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc:+', 'A:ca_a3:N:ca_c3:calcium:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:co3_a3:N:co3_c3:carbonate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/dust_aeronet_rrtmg_c141106.nc:+', 'A:cl_a3:N:cl_c3:chloride:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ssam_rrtmg_c100508.nc:+', 'A:no3_a3:N:no3_c3:nitrate:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc:+', 'A:nh4_a3:N:nh4_c3:ammonium:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/sulfate_rrtmg_c080918.nc', 'mam4_mode4:primary_carbon:=', 'A:num_a4:N:num_c4:num_mr:+', 'A:pom_a4:N:pom_c4:p-organic:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/ocpho_rrtmg_c130709.nc:+', 'A:bc_a4:N:bc_c4:black-c:/glade/p/cesmdata/cseg/inputdata/atm/cam/physprops/bcpho_rrtmg_c100508.nc' / |
Again, you can find newly added species from MOSAIC: 'na_*', 'ca_*', 'cl_*', 'co3_*', 'nh4_*', and 'no3_*'
3) If you want to save these newly added species to the history output files (e.g., *h0*, *h1*, etc.), of course, you need to add these to fincl1, fincl2, etc. You will also need to remove the old aerosol species (ncl_*) from the default output.