Test#
Test for Input Processing#
Make sure no Nan values in the outputs. For example:
tag = 'CAMS-GLOB-ANTv5.3'
period = '20180101_20181201'
for var in ['bc_a4', 'CO', 'NH3', 'NO', 'pom_a4', 'C2H6', 'C3H8', 'C2H4', 'C3H6', 'C2H2', 'BIGENE', 'BENZENE', 'TOLUENE', 'CH2O', 'CH3CHO', 'BIGALK', 'XYLENES', 'CH3OH', 'C2H5OH', 'CH3COCH3', 'MEK', 'HCOOH', 'CH3COOH', 'IVOC']:
check = xr.open_dataset(f'/gws/nopw/j04/duicv/yuansun/IPTpy/tests/rename/{tag}_{var}_anthro_{period}_0.9x1.25_c20250131.nc')
# Print max value
print(check['emiss_anthro'].max().item())
# Check for NaN values
if np.isnan(emiss_anthro).any():
print(f'Warning: NaN values detected in {var}')
Test for CESM Simulation#
Choose an appropriate CESM component set (composet) in the cime_config/config_compsets.xml, such as, FCHIST, and run a test simulation.
Below is an example job script for CESM2.3 including CAM6.3 and CTSM5.2. Users should modify the script based on their model version and configure it according to their computing environment.
#!/bin/bash --login
# Yuan Sun, 2025-01-31, Manchester, UK
# bash /work/n02/n02/yuansun/shell_scripts/archive/IPTpy/cams.sh
# this script is used to run FCnudged with CAMS anthropogenic emissions for testing IPT-py
# squeue -u yuansun
module load cray-python/3.9.13.1
export CESM_ROOT="/work/n02/n02/yuansun/cesm"
export CESM_VERSION="my_cesm_sandbox_cesm2.3"
export CASE_SCRIPT="/work/n02/n02/yuansun/cesm/${CESM_VERSION}/cime/scripts"
export TYPE=cams
export CASE_NAME="/work/n02/n02/yuansun/cesm/runs/ipt-py_${TYPE}"
export CASE_DOCS="CaseDocs"
export COMPSET=FCHIST
export RES=f09_f09_mg17
export PROJECT=n02-duicv
export MACH=archer2
export STARTYEAR=2018
export STARTMONTH=01
export STARTDAY=01
export ENDYEAR=2018
export QUE=short
export WALLTIME=00:20:00
export ANT_PERIOD=${STARTYEAR}_${ENDYEAR}
export EMIS_DATE=20250131
export SOURCE='CAMS-GLOB-ANT'
export VERSION='v5.3'
export RENAMED_PATH='/work/n02/n02/yuansun/cesm/cesm_inputdata/renamed/'
if [ -d "${CASE_NAME}" ]; then
rm -rf "${CASE_NAME}"
echo "'${CASE_NAME}' exits but is deleted"
echo "create a new case in '${CASE_NAME}'"
cd ${CASE_SCRIPT}
./create_newcase --case ${CASE_NAME} --compset ${COMPSET} --res ${RES} --machine ${MACH} --queue ${QUE} --walltime ${WALLTIME} --run-unsupported
else
echo "create a new case in '${CASE_NAME}'"
cd ${CASE_SCRIPT}
./create_newcase --case ${CASE_NAME} --compset ${COMPSET} --res ${RES} --machine ${MACH} --queue ${QUE} --walltime ${WALLTIME} --run-unsupported
fi
cd ${CASE_NAME}
./xmlchange RUN_STARTDATE=${STARTYEAR}-${STARTMONTH}-${STARTDAY}
./xmlchange NTASKS_ATM=1280
./xmlchange NTASKS_CPL=1280
./xmlchange NTASKS_LND=640
./xmlchange NTASKS_ROF=640
./xmlchange NTASKS_OCN=320
./xmlchange NTASKS_ICE=320
./xmlchange ROOTPE_OCN=640
./xmlchange ROOTPE_ICE=640
./xmlchange NTASKS_WAV=1
./xmlchange NTASKS_GLC=1
./xmlchange NTASKS_ESP=1
./xmlchange NTHRDS=1
./xmlchange STOP_OPTION=ndays
./xmlchange STOP_N=1
./xmlchange RESUBMIT=0
./xmlchange NTHRDS=1
./xmlchange SSTICE_DATA_FILENAME='/work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/sst/sst_HadOIBl_bc_0.9x1.25_1850_2022_c230628.nc'
./xmlchange SSTICE_YEAR_END=2021
./xmlchange SSTICE_YEAR_START=1850
./xmlchange SSTICE_YEAR_ALIGN=1850
./xmlchange RUN_TYPE=startup
./xmlchange GET_REFCASE=FALSE
./xmlchange CALENDAR=NO_LEAP
./case.setup
./preview_namelists
# vertical inputs: so4_a1 and num_a1
echo "ext_frc_specifier = 'bc_a4 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
'NO2 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_NO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
'num_a1 -> ${RENAMED_PATH}${SOURCE}${VERSION}_num_so4_a1_anthro-ene-vertical_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'num_a1 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a1_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
'num_a2 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_num_a2_so4_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
'num_a4 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_num_bc_a4_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
'SO2 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_SO2_aircraft_vertical_mol_175001-210101_0.9x1.25_c20190222.nc',
'SO2 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_SO2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
'SO2 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/stratvolc/VolcanEESMv3.10_piControl_SO2_1850-2014average_ext_1deg_ZeroTrop_c181020.nc',
'so4_a1 -> ${RENAMED_PATH}${SOURCE}${VERSION}_so4_a1_anthro-ene-vertical_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'so4_a1 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a1_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc',
'so4_a2 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions-cmip6_so4_a2_contvolcano_vertical_850-5000_0.9x1.25_c20170724.nc'" >> user_nl_cam
# surface inputs
# CAM63 does not use:
#'DMS -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_${TYPE}/emissions-cmip6-SSP_DMS_other_surface_mol_175001-210101_0.9x1.25_${EMIS_DATE}.nc',
echo "srf_emis_specifier = 'BENZENE -> ${RENAMED_PATH}${SOURCE}${VERSION}_BENZENE_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'BIGALK -> ${RENAMED_PATH}${SOURCE}${VERSION}_BIGALK_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'BIGENE -> ${RENAMED_PATH}${SOURCE}${VERSION}_BIGENE_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C2H2 -> ${RENAMED_PATH}${SOURCE}${VERSION}_C2H2_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C2H4 -> ${RENAMED_PATH}${SOURCE}${VERSION}_C2H4_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C2H4 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C2H4_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'C2H5OH -> ${RENAMED_PATH}${SOURCE}${VERSION}_C2H5OH_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C2H6 -> ${RENAMED_PATH}${SOURCE}${VERSION}_C2H6_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C2H6 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C2H6_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'C3H6 -> ${RENAMED_PATH}${SOURCE}${VERSION}_C3H6_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C3H6 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C3H6_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'C3H8 -> ${RENAMED_PATH}${SOURCE}${VERSION}_C3H8_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'C3H8 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_C3H8_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'CH2O -> ${RENAMED_PATH}${SOURCE}${VERSION}_CH2O_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CH3CHO -> ${RENAMED_PATH}${SOURCE}${VERSION}_CH3CHO_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CH3CN -> ${RENAMED_PATH}${SOURCE}${VERSION}_CH3CN_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CH3COCH3 -> ${RENAMED_PATH}${SOURCE}${VERSION}_CH3COCH3_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CH3COOH -> ${RENAMED_PATH}${SOURCE}${VERSION}_CH3COOH_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CH3OH -> ${RENAMED_PATH}${SOURCE}${VERSION}_CH3OH_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CO -> ${RENAMED_PATH}${SOURCE}${VERSION}_CO_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'CO -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_CO_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'E90 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/CMIP6_emissions_1750_2015/emissions_E90global_surface_1750-2100_0.9x1.25_c20170322.nc',
'HCN -> ${RENAMED_PATH}${SOURCE}${VERSION}_HCN_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'HCOOH -> ${RENAMED_PATH}${SOURCE}${VERSION}_HCOOH_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'IVOC -> ${RENAMED_PATH}${SOURCE}${VERSION}_IVOC_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'MEK -> ${RENAMED_PATH}${SOURCE}${VERSION}_MEK_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'NH3 -> ${RENAMED_PATH}${SOURCE}${VERSION}_NH3_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'NH3 -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_NH3_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'NO -> ${RENAMED_PATH}${SOURCE}${VERSION}_NO_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'NO -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-SSP_NO_other_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'SVOC -> ${RENAMED_PATH}${SOURCE}${VERSION}_SVOC_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'TOLUENE -> ${RENAMED_PATH}${SOURCE}${VERSION}_TOLUENE_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'XYLENES -> ${RENAMED_PATH}${SOURCE}${VERSION}_XYLENES_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'bc_a4 -> ${RENAMED_PATH}${SOURCE}${VERSION}_bc_a4_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'DMS -> /work/n02/n02/yuansun/cesm/cesm_inputdata/atm/cam/chem/emis/emissions_ssp370/emissions-cmip6-ScenarioMIP_IAMC-AIM-ssp370-1-1_DMS_bb_surface_mol_175001-210101_0.9x1.25_c20190222.nc',
'num_a1 -> ${RENAMED_PATH}${SOURCE}${VERSION}_num_so4_a1_anthro-ag-ship_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'num_a2 -> ${RENAMED_PATH}${SOURCE}${VERSION}_num_so4_a2_anthro-res_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'num_a4 -> ${RENAMED_PATH}${SOURCE}${VERSION}_num_bc_a4_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'num_a4 -> ${RENAMED_PATH}${SOURCE}${VERSION}_num_pom_a4_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'pom_a4 -> ${RENAMED_PATH}${SOURCE}${VERSION}_pom_a4_anthro_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'SO2 -> ${RENAMED_PATH}${SOURCE}${VERSION}_SO2_anthro-ag-ship-res_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'SO2 -> ${RENAMED_PATH}${SOURCE}${VERSION}_SO2_anthro-ene_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'so4_a1 -> ${RENAMED_PATH}${SOURCE}${VERSION}_so4_a1_anthro-ag-ship_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc',
'so4_a2 -> ${RENAMED_PATH}${SOURCE}${VERSION}_so4_a2_anthro-res_${ANT_PERIOD}_0.9x1.25_c${EMIS_DATE}.nc' ">> user_nl_cam
# user_nl_cam
#echo "empty_htapes=.true." >> user_nl_cam
echo "nhtfrq=-24" >> user_nl_cam
echo "mfilt=1" >> user_nl_cam
# user_nl_clm
#echo "hist_empty_htapes=.true." >> user_nl_clm
echo "flanduse_timeseries = '/work/n02/n02/yuansun/cesm/cesm_inputdata/lnd/clm2/surfdata_esmf/ctsm5.2.0/landuse.timeseries_0.9x1.25_SSP3-7.0_1850-2100_78pfts_c240216.nc'" >> user_nl_clm
echo "fsurdat = '/work/n02/n02/yuansun/cesm/cesm_inputdata/lnd/clm2/surfdata_esmf/ctsm5.2.0/surfdata_0.9x1.25_hist_2000_78pfts_c240216.nc'" >> user_nl_clm
echo "init_interp_method = 'general'" >> user_nl_clm
echo "use_init_interp = .true." >> user_nl_clm
echo "check_dynpft_consistency = .false." >> user_nl_clm
echo "hist_nhtfrq=-24" >> user_nl_clm
echo "hist_mfilt=1" >> user_nl_clm
# user_nl_mosart
echo "rtmhist_nhtfrq = -876000" >> user_nl_mosart
# user_nl_cism
echo "history_frequency = 100" >> user_nl_cism
# user_nl_cice
echo "histfreq = 'x', 'x', 'x', 'x', 'x'" >> user_nl_cice
echo "histfreq_n = 0, 0, 0, 0, 0" >> user_nl_cice
./preview_namelists
./case.build
./preview_run
#./case.submit