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).  

Get the CESM code with MOSAIC implemented

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).

Create new case

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

Change env_build.xml

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

Change user_nl_cam

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. 


Additional information