How to run aquaplanet slab ocean experiments using MPI-ESM
Currently, one has to use the mpiesm-landveg
branch if you'd like to run aquaplanet slab ocean.
The example shown below is based on previous guideline in here
Download model
Clone mpiesm without --recursive and put it in directory mpiesm-landveg
git clone git@git.mpimet.mpg.de:mpiesm.git mpiesm-landveg
cd mpiesm-landveg
# Check which branch you're on
git branch
mpiesm-landveg
branch
Check out git checkout mpiesm-landveg
# Check which branch you're on
git branch
Check whether submodules are initialised and/or checked out (likely not)
git submodule
# This should list all submodules not yet initialised or checked out
Initialise and check out submodules, then check again
git submodule update --init
git submodule
Compile model
Read RECIPE.landveg
Edit landveg-compile.ksh to your needs
Of primary importance for aquaplanet slab ocean, you will be using mpiesm-as
(echam6 only).
vers=aqua # model version (tag used in the executable name)
cplmod=mpiesm-as # coupled model name: mpiesm-s (jsbach3, cbalance, hd)
# mpiesm-s4 (jsbach4)
# mpiesm-as (echam6)
# mpiesm-as4 (echam6 with jsbach4)
# mpiesm-asob (mpiesm-1.2)
compiler=intel # compiler to be used (nag/intel/gcc)
configure=yes # yes: run configure - mandatory if running the first time model version $vers
automake=no # yes: run automake, e.g. if dependencies changed (only with configure=yes)
make_argument="-j 8" # number of processes for make, 'clean' or 'distclean'
# (make clean needs the modules, thus script is helpful)
Execute landveg-compile.ksh
./landveg-compile.ksh
Generate run script
The recipe/guideline on how to do this is in an older version of RECIPE.landveg. However, with the new checkout of mpiesm-landveg
, this is no longer available. Hence, a snippet of that guideline is attached here.
Running
---------
For standard simulation with mpiesm-asob we recommend to use runscripts generated
with mkexp (compare RECIPE section 3 and below).
For all other configurations generate the run scripts using Create_TASKS.frm
cd util/running/tools/
./Create_TASKS.frm <cplmod> --id <expid> [--node <node>]
with <cplmod> as defined above, <expid> being an experiment id of your choice,
and <node> being the computer name ('linux-x64' for CIS linux PCs, optional for
mistral).
Adapt the setup file you just created. Especially,
atmvers / srfvers (executable id) has to be consitent to the version 'vers'
defined in the compile script.
account account for computing time, e.g. mj0060, needs to be set on mistral
Then run Create_TASKS.frm again with the same parameters.
./Create_TASKS.frm <cplmod> --id <expid> [--node <node>]
Here's an example for the aquaplanet slab ocean
cd util/running/tools/
./Create_TASKS.frm mpiesm-as --id aqua
This creates a setup file, setup_mpiesm-as_aqua
in the util/running/setup/
folder.
Modify setup_mpiesm-as_aqua
atm_out_filetype=2
forcing=climatology
iaero=0
isolrad=0
nsoil=1
compile_path=/work/mh1421/mxxxxxx/mpiesm-landveg/build-${cplmod}-aqua/bin
export data=/work/mh1421/mxxxxxx/experiments_landveg
export archive=/work/mh1421/mxxxxxx/experiments_landveg
work=/work/mh1421/mxxxxxx/experiments_landveg
account='mh1421'
experiments_landveg
is a folder created beforehand to store model output
Generating run script for each experiment
cd util/running/tools
./Create_TASKS.frm -F setup_mpiesm-as_aqua --id aqua0101 mpiesm-as
Edits to run script
Not yet there, but getting close...... Namelist parameters and input forcing files must be specified in accordance to aquaplanet slab ocean requirements.
Modifications to namelist settings
-
Under runctl, please add
echo " l_orbvsop87 = .false." >> namelist.echam
echo " lmlo = .true." >> namelist.echam
echo " lmlo_ice = .false." >> namelist.echam
-
Under radctl, please add
echo " ldiur = false" >> namelist.echam
echo " cecc = 0.0" >> namelist.echam
echo " cobld = 0.0" >> namelist.echam
Please also comment out as follows:#if [[ ${read_ghg} == false ]]; then echo " ighg = 0" >> namelist.echam echo " icfc = 2" >> namelist.echam echo " ich4 = 3" >> namelist.echam #else # echo " ighg = 1" >> namelist.echam # echo " icfc = 4" >> namelist.echam # echo " ich4 = 4" >> namelist.echam #fi #if [ "${piControl}" = "true" ]; then # echo " co2vmr = 284.3169860840e-06" >> namelist.echam echo " co2vmr = 280.0e-06" >> namelist.echam echo " ch4vmr = 808.2490234375e-09" >> namelist.echam echo " n2ovmr = 273.0210571289e-09" >> namelist.echam # echo " yr_perp = 1850" >> namelist.echam #fi
-
Under greenhouse gases
Please comment out and add 3 lines like this:#if [[ ${co2_transport} = true ]]; then # ico2=1 # prognostic CO2 mass mixing ratio # lco2_scenario=false #elif [[ ${read_ghg} == true ]]; then # lco2_scenario=true # use CO2 scenario in jsbach # ico2=4 # use CO2 scenario in echam radiation #else # ico2=2 # uniform CO2 volume mixing ratio #fi lco2_scenario=false ico2=2 #if [[ ${n2o_transport} = true ]]; then # in2o=1 # prognostic N2O mass mixing ratio #elif [[ ${read_ghg} == true ]]; then # in2o=4 # use N2O scenario in echam radiation #else # in2o=3 # uniform N2O volume mixing ratio #fi in2o=3
Modifications to linking input files
While many input forcing files need to change, this is done by changing the link/pointing. However, to run with slab ocean, you'll need an extra file, the heatflux
or qflx
file. Assume for the moment you have this file T63_heatflux_test.nc
. There are also two other files that are not necessarily readily available, T63GR15_surf_aqua_irad_noseason_final.nc
and T63_ozone_historical_1850.nc
Below, unless otherwise stated, #
means to comment these lines out and be sure to add the new pointers.
- 3d initial file of atmosphere (spectral, no dependence on lsmask)
#get_file ${atmmod} input ${res_atm}L${vres_atm}_jan_spec.nc unit.23 aquadir=/pool/data/ECHAM6/T63/aqua get_file ${atmmod} input ${aquadir}/JW_balanced_init_spec_${res_atm}L${vres_atm}_ECHAM.nc unit.23
- Surface boundary conditions (land/sea mask, albedo etc.), annual mean data; file depends on lsmask
aquaindir=/work/mh1421/m300466/mpiesm-landveg/input/tra #get_file ${atmmod} input ${res_atm}${res_oce}_jan_surf.nc unit.24 get_file ${atmmod} input ${aquaindir}/echam6/T63GR15_surf_aqua_irad_noseason_final.nc unit.24
- AMIP sst and sea ice concentration; files depend on lsmask
if [ "${forcing}" = "amip" ]; then typeset -Z4 yr yp1 ym1 yr=$(format_date -f4 -- ${startdate} | cut -f1 -d" ") (( yp1 = yr + 1 )) (( ym1 = yr - 1 )) for yrs in ${yr} ${yp1} ${ym1}; do amipdir=/pool/data/ECHAM6/input/${archive_rev_echam6}/${res_atm}/amip #get_file ${atmmod} input ${amipdir}/${res_atm}_amipsst_${yrs}.nc sst${yrs} #get_file ${atmmod} input ${amipdir}/${res_atm}_amipsic_${yrs}.nc ice${yrs} get_file ${atmmod} input ${aquadir}/${res_atm}_sst_aqua_Qobs.nc sst${yrs} get_file ${atmmod} input ${aquadir}/${res_atm}_sic_aqua.nc ice${yrs} done else #get_file ${atmmod} input ${res_atm}_amipsst_clim.nc unit.20 #get_file ${atmmod} input ${res_atm}_amipsic_clim.nc unit.96 get_file ${atmmod} input ${aquadir}/${res_atm}_sst_aqua_Qobs.nc unit.20 get_file ${atmmod} input ${aquadir}/${res_atm}_sic_aqua.nc unit.96 fi
- Heat fluxes for mixed layer ocean (needed for slab ocean and needs to be added entirely)
# # heat fluxes for mixed layer ocean # get_file ${atmmod} input ${aquaindir}/echam6/T63_heatflux_test.nc unit.42
- Ozone
# # ozone # if [[ ${io3} = 4 ]]; then # read ozon climatology from file # ozonedir=/pool/data/ECHAM6/input/${archive_rev_echam6}/${res_atm}/ozone # if [[ ${piControl} = true ]]; then # get_file ${atmmod} input ${ozonedir}/${res_atm}_ozone_picontrol.nc ozon${yrs} # else # if [[ ${yrs} -le 1849 ]]; then # get_file ${atmmod} input ${ozonedir}/${res_atm}_ozone_${scenario}_1850.nc ozon${yrs} # else # if [[ ${yrs} -le 2014 ]]; then # get_file ${atmmod} input ${ozonedir}/${res_atm}_ozone_historical_${yrs}.nc ozon${yrs} # else # get_file ${atmmod} input ${ozonedir}/${res_atm}_ozone_${scenario}_${yrs}.nc ozon${yrs} # fi # fi # fi # fi get_file ${atmmod} input ${aquaindir}/echam6/T63_ozone_historical_1850.nc ozon${yrs}
- Soil layers
#get_file ${srfmod} input jsbach_${grid}_${nsoil}layers_${refyear}_${dvtag}${surface_tag}.nc jsbach.nc get_file ${srfmod} input ${aquadir}/jsbach_${res_atm}${res_oce}_11tiles_1976_aqua.nc jsbach.nc
- Land use maps/ cover fraction
# [[ ${startyear} -le 1992 ]] && ludir=/pool/data/JSBACH/input/${archive_rev_jsbach}/${res_srf}/land_use_maps # [[ ${startyear} -gt 1992 ]] && ludir=/pool/data/JSBACH/input/${archive_rev_jsbach}/${res_srf}/land_use_maps/A1B ludir=/pool/data/JSBACH/input/${archive_rev_jsbach}/${res_srf}/land_use_maps # get_file ${srfmod} input ${ludir}/cover_fract_${res_srf}_${ntiles}tiles_${startyear}.nc cover_fract.${startyear}.nc get_file ${srfmod} input ${ludir}/cover_fract_${res_srf}_${ntiles}tiles_2015.nc cover_fract.${startyear}.nc
A little more on preparations of these input files, particularly for aquaplanet slab ocean.
- Ozone file needs a vertical profile to ensure radiative properties of the stratosphere and troposphere, but for an aquaplanet slab ocean, we would need zonally invariant and hemispherically symmetric ozone concentrations.
- Solar irradiance must have no seasons. Here, we ensure eccentricity and obliquity is also set to zero. However, all these do not account for varying zenith angle of the sun.
- 'qfl' file: The simplest option is to use no correction 'qflx=0' everywhere. Here, the system would respond to the forcing and can arrive at a different mean state climate, fully free to evolve.
- 'qflx' file to constrain to the same climate mean state. Here, the 'qlfx' file is normally obtained by first running a slab ocean aquaplanet with zero flux correction in order to get the climatological SST. The SST is then used to run a pure aquaplanet run with prescribed SST that has been post-processed (i.e. climatological mean, zonally averaged, hemispherically symmetric) for about 20 years, and from which we can get the surface flux associated with the mean climate state. This surface flux then requires post-processing to get a climatological mean, zonally invariant and hemispherically symmetric flux file, that is then used as the 'qflx' file input to the actual aquaplanet slab ocean run.
Submit job
cd experiments/aqua0101/scripts
sbatch aqua0101.run