Lifetime Tracer Simulation: Difference between revisions
No edit summary |
(fixed math display) |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
In this example it is shown how to simulate a lifetime driven tracer with simplified chemistry in ICON-ART. This tutorial teaches you... |
In this example it is shown how to simulate a lifetime driven tracer with simplified chemistry in ICON-ART. This tutorial teaches you... |
||
* the setup of the runscript |
|||
* the correct setup of the xml-file for such tracers. |
* the correct setup of the xml-file for such tracers. |
||
* the structure of lifetime tracers in xml-files |
* the structure of lifetime tracers in xml-files |
||
* editing output variables |
* editing output variables |
||
No emission data will be included in this simulation. |
|||
== Configuration case == |
|||
The depicted case is dealing with biogenic very short-lived species (VSLS) with a very short lifetime, more accurately Bromoform (<chem>CHBr3</chem>) and Dibromomethane (<chem>CH2Br2</chem>). Like of most VSLSs the major source of <chem>CHBr3</chem> and <chem>CH2Br2</chem> is the ocean which leads too a large gradient with increasing height in the concentration of these tracers. Bromoform is mainly depleted by photolysis in the Troposphere whereas Dibromomethanes main loss is due to Hydroxylradicals (OH). To assess the ability to simulate the transport of VSLS from the surface to the lower stratosphere, this case study uses an idealized chemical tracer approach. |
|||
The simulation is modeling the 01 October 2012 and is initialized with data from the ECMWF Integrated Forecast System (IFS) and includes boundary conditions and chemical lifetimes from the WMO Ozone assessment 2010. The boundary conditions and the chemical lifetimes are recalculated in a sort of rate at which the substances are depleted from the atmosphere with help of the implicit solution of the balance equation: |
|||
<math> |
|||
\frac{\partial \bar{\rho} \hat{\Psi}_l }{ \partial t} = -\nabla \cdot (\hat{v} \overline{\rho} \hat{\Psi}_{l})- \nabla \cdot (\overline{\rho v'' \Psi_{g,l}'' })+P_l-L_l+E_l |
|||
</math> |
|||
Here <math>\rho</math> is the density of air, <math>\hat{\Psi_{l}}</math> the barycentric-averaged mass mixing ratio, <math>\nabla\cdot (\hat{v}\bar{\rho}\hat{\Psi_{l}})</math> indicates the flux divergence that includes the horizontal and vertical advection of the gaseous compound l and <math>\nabla\cdot\overline{(\rho v''\Psi_{l}'')}</math> indicates the change due to turbulent fluxes. Further <math>P_l</math> describes the production rate due to chemical reactions, <math>L_l</math> the respective loss rate and emissions are noted with <math>E_l</math>. Everything is related to the respective compound l. |
|||
In this example no emission data is used. |
|||
== Setting up the Runscript == |
|||
Let's start with the runscript that has to be prepared. Please note that the in the following explained parts have to be printed in one runscript-file with the naming designation "xyz.run". Here it is named <code>exp.testsuite.lifetime_tracer_test.run</code> but of course you can call it differently as well. The runscript can be stored under the following path in your icon directory: <code>/icon-kit/run</code> |
|||
If you've already walked through the example of the [[Simplified Chemistry]], you can use nearly the same runscript. Note that you have to change the paths from Part 1, the timing settings from Part 2, the output variables from Part 3, the emission settings as well as the path of the chemtracer-xml-file in the ART-settings from Part 4 and finally the timing in the job settings from Part 5. Details can be found below. |
|||
Inside of that, first check in part 1 that all your paths to your directories are correct, probably they have to be adjusted. Note that "hp8526" is a name of a specific account here, make sure to double check especially these lines. Abbreviations used here are the following: |
|||
*CENTER: Your organization |
|||
*EXPNAME: name of your ICON-Simulation |
|||
*OUTDIR: Directory where the simulation output will be stored |
|||
*ARTFOLDER: Directory where the ICON-ART code is stored |
|||
*INDIR: Directory where the necessary Input data are stored |
|||
*EXP: |
|||
*lart: For ICON-ART Simulation that has to be switched to <code>.True.</code>. |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Part 1: Runscript Directory Settings (Example configuration) |
|||
<syntaxhighlight lang=bash line class="mw-collapsible-content"> |
|||
#!/bin/bash |
|||
CENTER=IMK |
|||
workspace=/hkfs/work/workspace/scratch/hp8526-liftime_tracer_test |
|||
basedir=${workspace}/icon-kit-testsuite |
|||
icon_data_poolFolder=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT/AMIP/amip_input |
|||
EXPNAME=liftime_tracer_test |
|||
OUTDIR=${workspace}/output/${EXPNAME} |
|||
ICONFOLDER=/home/hk-project-iconart/hp8526/icon-kit |
|||
ARTFOLDER=${ICONFOLDER}/externals/art |
|||
INDIR=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT |
|||
EXP=ECHAM_AMIP_LIFETIME |
|||
lart=.True. |
|||
FILETYPE=4 |
|||
COMPILER=intel |
|||
restart=.False. |
|||
read_restart_namelists=.False. |
|||
# Remove folder from OUTDIR for postprocessing output |
|||
OUTDIR_PREFIX=${workspace} |
|||
# Create output directory and go to this directory |
|||
if [ ! -d $OUTDIR ]; then |
|||
mkdir -p $OUTDIR |
|||
fi |
|||
cd $OUTDIR |
|||
#input for global domain |
|||
ln -sf ${INDIR}/../INPUT/GRID/icon_grid_0014_R02B05_G.nc iconR2B05_DOM01.nc |
|||
ln -sf ${INDIR}/../INPUT/EXTPAR/icon_extpar_0014_R02B05_G.nc extpar_iconR2B05_DOM01.nc |
|||
ln -sf /hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/output/0014_R02B05/uc1_ifs_t1279_grb2_remap_rev832_0014_R02B05_2018010100.nc ifs2icon_R2B05_DOM01.nc |
|||
ln -sf $ICONFOLDER/data/rrtmg_lw.nc rrtmg_lw.nc |
|||
ln -sf $ICONFOLDER/data/ECHAM6_CldOptProps.nc ECHAM6_CldOptProps.nc |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/mozart_coord.nc ${OUTDIR}/mozart_coord.nc |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Linoz2004Br.dat ${OUTDIR}/Linoz2004Br.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Simnoy2002.dat ${OUTDIR}/Simnoy2002.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-aer.dat ${OUTDIR}/FJX_scat-aer.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j.dat ${OUTDIR}/FJX_j2j.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-cld.dat ${OUTDIR}/FJX_scat-cld.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-ssa.dat ${OUTDIR}/FJX_scat-ssa.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-UMa.dat ${OUTDIR}/FJX_scat-UMa.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec.dat ${OUTDIR}/FJX_spec.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_std.dat ${OUTDIR}/atmos_std.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_h2och4.dat ${OUTDIR}/atmos_h2och4.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j_extended.dat ${OUTDIR}/FJX_j2j_extended.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended_lyman.dat ${OUTDIR}/FJX_spec_extended_lyman.dat |
|||
# this if condition is necessary because otherwise |
|||
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated |
|||
# linking to itself |
|||
if [ ! -L ${OUTDIR}/emissions ]; then |
|||
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions |
|||
fi |
|||
# this if condition is necessary because otherwise |
|||
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated |
|||
# linking to itself |
|||
if [ ! -L ${OUTDIR}/emissions ]; then |
|||
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions |
|||
fi |
|||
# the namelist filename |
|||
atmo_namelist=NAMELIST_${EXPNAME} |
|||
# |
|||
#----------------------------------------------------------------------------- |
|||
</syntaxhighlight> |
|||
</div> |
|||
Additionally in the next lines of code you set the timing. In this simulation we only simulate one day (01 October 2012). To calculate <chem>CHBr3</chem> and <chem>CH2Br2</chem> to every time of the day the output interval is set to 1 hour. |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Part 2: Runscript Timing Settings (Example configuration) |
|||
<syntaxhighlight lang=bash line class="mw-collapsible-content"> |
|||
! run_nml: general switches ---------- |
|||
&# model timing |
|||
start_date=${start_date:="2012-10-01T00:00:00Z"} |
|||
end_date=${end_date:="2012-10-02T00:00:00Z"} |
|||
output_start=${start_date:="2012-10-01T00:00:00Z"} |
|||
output_end=${end_date:="2012-10-02T00:00:00Z"} |
|||
output_interval="PT1H" |
|||
modelTimeStep="PT6M" |
|||
leadtime="P8H" |
|||
checkpoint_interval="P30D" |
|||
</syntaxhihlight> |
|||
</div> |
|||
Further, all the namelist parameters (from the regular ICON model without ART-extension) have to be set. For a regular ICON-ART-Simulation the following settings are recommended - if not stated differently. For a detailed description, check out the ICON Documentation ([https://code.mpimet.mpg.de/attachments/download/19568/ICON_tutorial_2019.pdf Drill et. al. (2019)]). |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Part 3: Runscript ICON-Parameter and -Namelist Settings (Example configuration) |
|||
<syntaxhighlight lang=bash line class="mw-collapsible-content"> |
|||
# model parameters |
|||
model_equations=3 # equation system |
|||
# 1=hydrost. atm. T |
|||
# 1=hydrost. atm. theta dp |
|||
# 3=non-hydrost. atm., |
|||
# 0=shallow water model |
|||
# -1=hydrost. ocean |
|||
#----------------------------------------------------------------------------- |
|||
# the grid parameters |
|||
declare -a atmo_dyn_grids=("iconR2B04_DOM01.nc" "iconR2B05_DOM02.nc" "iconR2B06_DOM03.nc") |
|||
# "iconR2B08_DOM03.nc" |
|||
#atmo_dyn_grids="iconR2B07_DOM02.nc","iconR2B08_DOM03.nc" |
|||
#atmo_rad_grids="iconR2B06_DOM01.nc" |
|||
#----------------------------------------------------------------------------- |
|||
# create ICON master namelist |
|||
# ------------------------ |
|||
# For a complete list see Namelist_overview and Namelist_overview.pdf |
|||
no_of_models=1 |
|||
cat > icon_master.namelist << EOF |
|||
&master_nml |
|||
lRestart = .false. |
|||
/ |
|||
&master_time_control_nml |
|||
experimentStartDate = "$start_date" |
|||
experimentStopDate = "$end_date" |
|||
forecastLeadTime = "$leadtime" |
|||
checkpointTimeIntval = "$checkpoint_interval" |
|||
/ |
|||
&master_model_nml |
|||
model_type=1 |
|||
model_name="ATMO" |
|||
model_namelist_filename="$atmo_namelist" |
|||
model_min_rank=1 |
|||
model_max_rank=65536 |
|||
model_inc_rank=1 |
|||
/ |
|||
EOF |
|||
#----------------------------------------------------------------------------- |
|||
# |
|||
#----------------------------------------------------------------------------- |
|||
# |
|||
# write ICON namelist parameters |
|||
# ------------------------ |
|||
# For a complete list see Namelist_overview and Namelist_overview.pdf |
|||
# |
|||
# ------------------------ |
|||
# reconstrcuct the grid parameters in namelist form |
|||
dynamics_grid_filename="" |
|||
for gridfile in ${atmo_dyn_grids}; do |
|||
dynamics_grid_filename="${dynamics_grid_filename} '${gridfile}'," |
|||
done |
|||
radiation_grid_filename="" |
|||
for gridfile in ${atmo_rad_grids}; do |
|||
radiation_grid_filename="${radiation_grid_filename} '${gridfile}'," |
|||
done |
|||
# ------------------------ |
|||
cat > ${atmo_namelist} << EOF |
|||
¶llel_nml |
|||
nproma = 8 ! optimal setting 8 for CRAY; use 16 or 24 for IBM |
|||
p_test_run = .false. |
|||
l_test_openmp = .false. |
|||
l_log_checks = .false. |
|||
num_io_procs = 0 ! up to one PE per output stream is possible |
|||
itype_comm = 1 |
|||
iorder_sendrecv = 3 ! best value for CRAY (slightly faster than option 1) |
|||
/ |
|||
&grid_nml |
|||
dynamics_grid_filename = 'iconR2B05_DOM01.nc' |
|||
dynamics_parent_grid_id = 0 |
|||
!radiation_grid_filename = ${radiation_grid_filename} |
|||
lredgrid_phys = .false. |
|||
lfeedback = .true. |
|||
ifeedback_type = 2 |
|||
/ |
|||
&initicon_nml |
|||
lconsistency_checks = .false. |
|||
init_mode = 2 ! operation mode 2: IFS |
|||
zpbl1 = 500. |
|||
zpbl2 = 1000. |
|||
! l_sst_in = .true. |
|||
/ |
|||
&run_nml |
|||
num_lev = 90 |
|||
lvert_nest = .true. ! use vertical nesting if a nest is active |
|||
! nsteps = ${nsteps} ! 50 ! 1200 ! 7200 ! |
|||
! dtime = ${dtime} ! timestep in seconds |
|||
modelTimeStep = "${modelTimeStep}" |
|||
ldynamics = .TRUE. ! dynamics |
|||
ltransport = .true. |
|||
iforcing = 3 ! NWP forcing |
|||
ltestcase = .false. ! false: run with real data |
|||
msg_level = 7 ! print maximum wind speeds every 5 time steps |
|||
ltimer = .true. ! set .TRUE. for timer output |
|||
timers_level = 10 ! can be increased up to 10 for detailed timer output |
|||
output = "nml" |
|||
lart = ${lart} |
|||
/ |
|||
&nwp_phy_nml |
|||
inwp_gscp = 1 |
|||
inwp_convection = 1 |
|||
inwp_radiation = 1 |
|||
inwp_cldcover = 1 |
|||
inwp_turb = 1 |
|||
inwp_satad = 1 |
|||
inwp_sso = 1 |
|||
inwp_gwd = 1 |
|||
inwp_surface = 1 |
|||
icapdcycl = 3 ! apply CAPE modification to improve diurnalcycle over tropical land (optimizes NWP scores) |
|||
latm_above_top = .false., .true. ! the second entry refers to the nested domain (if present) |
|||
efdt_min_raylfric = 7200. |
|||
itype_z0 = 2 |
|||
icpl_aero_conv = 1 |
|||
icpl_aero_gscp = 1 |
|||
! resolution-dependent settings - please choose the appropriate one |
|||
dt_rad = 2160. |
|||
dt_conv = 720. |
|||
dt_sso = 1440. |
|||
dt_gwd = 1440. |
|||
/ |
|||
&nwp_tuning_nml |
|||
tune_zceff_min = 0.075 ! ** default value to be used for R3B7; use 0.05 for R2B6 in order to get similar temperature biases in upper troposphere ** |
|||
itune_albedo = 1 ! somewhat reduced albedo (w.r.t. MODIS data) over Sahara in order to reduce cold bias |
|||
/ |
|||
&turbdiff_nml |
|||
tkhmin = 0.75 ! new default since rev. 16527 |
|||
tkmmin = 0.75 ! "" |
|||
pat_len = 100. |
|||
c_diff = 0.2 |
|||
rat_sea = 8.5 ! ** new since r20191: 8.5 for R3B7, 8.0 for R2B6 in order to get similar temperature biases in the tropics ** |
|||
ltkesso = .true. |
|||
frcsmot = 0.2 ! these 2 switches together apply vertical smoothing of the TKE source terms |
|||
imode_frcsmot = 2 ! in the tropics (only), which reduces the moist bias in the tropical lower troposphere |
|||
! use horizontal shear production terms with 1/SQRT(Ri) scaling to prevent unwanted side effects: |
|||
itype_sher = 3 |
|||
ltkeshs = .true. |
|||
a_hshr = 2.0 |
|||
/ |
|||
&lnd_nml |
|||
ntiles = 3 !!! 1 for assimilation cycle and forecast |
|||
nlev_snow = 3 !!! 1 for assimilation cycle and forecast |
|||
lmulti_snow = .true. !!! .false. for assimilation cycle and forecast |
|||
itype_heatcond = 2 |
|||
idiag_snowfrac = 2 |
|||
lsnowtile = .false. !! later on .true. if GRIB encoding issues are solved |
|||
lseaice = .true. |
|||
llake = .false. |
|||
itype_lndtbl = 3 ! minimizes moist/cold bias in lower tropical troposphere |
|||
itype_root = 2 |
|||
/ |
|||
&radiation_nml |
|||
irad_o3 = 10 |
|||
irad_aero = 6 |
|||
albedo_type = 2 ! Modis albedo |
|||
vmr_co2 = 390.e-06 ! values representative for 2012 |
|||
vmr_ch4 = 1800.e-09 |
|||
vmr_n2o = 322.0e-09 |
|||
vmr_o2 = 0.20946 |
|||
vmr_cfc11 = 240.e-12 |
|||
vmr_cfc12 = 532.e-12 |
|||
/ |
|||
&nonhydrostatic_nml |
|||
iadv_rhotheta = 2 |
|||
ivctype = 2 |
|||
itime_scheme = 4 |
|||
exner_expol = 0.333 |
|||
vwind_offctr = 0.2 |
|||
damp_height = 50000. |
|||
rayleigh_coeff = 0.10 |
|||
lhdiff_rcf = .true. |
|||
divdamp_order = 24 ! for data assimilation runs, '2' provides extra-strong filtering of gravity waves |
|||
divdamp_type = 32 !!! optional: 2 for assimilation cycle if very strong gravity-wave filtering is desired |
|||
divdamp_fac = 0.004 |
|||
l_open_ubc = .false. |
|||
igradp_method = 3 |
|||
l_zdiffu_t = .true. |
|||
thslp_zdiffu = 0.02 |
|||
thhgtd_zdiffu = 125. |
|||
htop_moist_proc= 22500. |
|||
hbot_qvsubstep = 22500. ! use 19000. with R3B7 |
|||
/ |
|||
&sleve_nml |
|||
min_lay_thckn = 20. |
|||
max_lay_thckn = 400. ! maximum layer thickness below htop_thcknlimit |
|||
htop_thcknlimit = 14000. ! this implies that the upcoming COSMO-EU nest will have 60 levels |
|||
top_height = 75000. |
|||
stretch_fac = 0.9 |
|||
decay_scale_1 = 4000. |
|||
decay_scale_2 = 2500. |
|||
decay_exp = 1.2 |
|||
flat_height = 16000. |
|||
/ |
|||
&dynamics_nml |
|||
iequations = 3 |
|||
idiv_method = 1 |
|||
divavg_cntrwgt = 0.50 |
|||
lcoriolis = .TRUE. |
|||
/ |
|||
&transport_nml |
|||
! qv, qc, qi, qr, qs |
|||
itype_vlimit = 1,1,1,1,1 |
|||
ivadv_tracer = 3, 3, 3, 3, 3 |
|||
itype_hlimit = 3, 4, 4, 4 , 4 |
|||
ihadv_tracer = 52, 2,2,2,2 |
|||
iadv_tke = 0 |
|||
/ |
|||
&diffusion_nml |
|||
hdiff_order = 5 |
|||
itype_vn_diffu = 1 |
|||
itype_t_diffu = 2 |
|||
hdiff_efdt_ratio = 24.0 |
|||
hdiff_smag_fac = 0.025 |
|||
lhdiff_vn = .TRUE. |
|||
lhdiff_temp = .TRUE. |
|||
/ |
|||
&interpol_nml |
|||
nudge_zone_width = 8 |
|||
lsq_high_ord = 3 |
|||
l_intp_c2l = .true. |
|||
l_mono_c2l = .true. |
|||
support_baryctr_intp = .false. |
|||
/ |
|||
&extpar_nml |
|||
itopo = 1 |
|||
n_iter_smooth_topo = 1 |
|||
heightdiff_threshold = 3000. |
|||
/ |
|||
&io_nml |
|||
itype_pres_msl = 4 ! IFS method with bug fix for self-consistency between SLP and geopotential |
|||
itype_rh = 1 ! RH w.r.t. water |
|||
/ |
|||
&output_nml |
|||
filetype = ${FILETYPE} ! output format: 2=GRIB2, 4=NETCDFv2 |
|||
dom = -1 ! write all domains |
|||
output_start = "${output_start}" |
|||
output_end = "${output_end}" |
|||
output_interval = "${output_interval}" |
|||
steps_per_file = 1 |
|||
include_last = .TRUE. |
|||
output_filename = 'icon-art-${EXPNAME}-chem' ! file name base |
|||
ml_varlist = 'temp','pres','group:ART_CHEMISTRY','u','v' |
|||
output_grid = .TRUE. |
|||
remap = 1 |
|||
reg_lon_def = -180.,1,180. |
|||
reg_lat_def = -90.,1,90. |
|||
/ |
|||
</syntaxhighlight> |
|||
</div> |
|||
Please note in the last namelist section "output_nml" that you can set all output variables that you need to postprocess your data later. All assigned variables here will be written in the output netCDF-files as well. To learn more about post processing your data, check out a later chapter of this article or the [[Postprocessing]] article. |
|||
Now, we're getting to the ICON-ART settings. To enable chemistry in an ICON-ART Simulation in general, the switch <code>lart_chem</code> has to be set to <code>.TRUE.</code>. With <code>lart_diag_out</code> output of the diagnostic fields can be enabled. Due to setting <code>lart_chem=.TRUE.</code> either <code>lart_chemtracer</code> or <code>lart_mecca</code> has to be set to <code>.TRUE.</code>. Because we want to perform a simulation with simplified chemistry, we have to switch on <code>lart_chemtracer</code>. If this namelist parameter is set to <code>.TRUE.</code>, also <code>cart_chemtracer_xml</code> has to be fulfilled. Here you enter the path of your xml-file which describes the tracers occurring and their properties in the simulation. How to create this xml-file is explained in the next chapter. |
|||
An example configuration for this part is shown in the following: |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Part 4: Runscript ICON-ART Settings (Example configuration) |
|||
<syntaxhighlight lang=bash line class="mw-collapsible-content"> |
|||
&art_nml |
|||
lart_chem = .TRUE. |
|||
lart_diag_out = .TRUE. |
|||
lart_aerosol = .FALSE. |
|||
lart_mecca = .FALSE. |
|||
lart_chemtracer = .TRUE. |
|||
cart_chemtracer_xml = '/home/hk-project-iconart/hp8526/icon-kit/externals/art/runctrl_examples/xml_ctrl/chemtracer_lifetime_test.xml' |
|||
cart_input_folder = '${OUTDIR}' |
|||
cart_io_suffix = '0014' |
|||
iart_init_gas = 0 |
|||
/ |
|||
EOF |
|||
</syntaxhighlight> |
|||
</div> |
|||
Please note that there are also several other namelist parameter you can select from (see [[Namelist]] article) but to perform our case study we're done for the ART setting at this point. |
|||
Depending on the used HPC-System, some parameter concerning the running job like maximum running time and used nodes can be set. For this case study the following settings can be copied. Note that this is valid for the HoreKa HPC system and that it can differ to other systems. |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Part 5: Runscript job Settings (Example configuration) |
|||
<syntaxhighlight lang=bash line class="mw-collapsible-content"> |
|||
cp ${ICONFOLDER}/bin/icon ./icon.exe |
|||
cat > job_ICON << ENDFILE |
|||
#!/bin/bash -x |
|||
#SBATCH --nodes=2 |
|||
#SBATCH --time=06:00:00 |
|||
#SBATCH --ntasks-per-node=76 |
|||
#SBATCH --partition=cpuonly |
|||
#SBATCH -A hk-project-iconart |
|||
###SBATCH --constraint=LSDF |
|||
module load compiler/intel/2022.0.2 mpi/openmpi/4.0 lib/netcdf/4.9_serial lib/hdf5/1.12_serial lib/netcdf-fortran/4.5_serial lib/eccodes/2.25.0 numlib/mkl/2022.0.2 |
|||
mpirun --bind-to core --map-by core --report-bindings ./icon.exe |
|||
ENDFILE |
|||
chmod +x job_ICON |
|||
sbatch job_ICON |
|||
</syntaxhighlight> |
|||
</div> |
|||
To conclude and to double check, in the following box the complete runscript is shown once again. |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Complete example configuration of the runscript |
|||
<syntaxhighlight lang=bash line class="mw-collapsible-content"> |
|||
#!/bin/bash |
|||
CENTER=IMK |
|||
workspace=/hkfs/work/workspace/scratch/hp8526-liftime_tracer_test |
|||
basedir=${workspace}/icon-kit-testsuite |
|||
icon_data_poolFolder=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT/AMIP/amip_input |
|||
EXPNAME=liftime_tracer_test |
|||
OUTDIR=${workspace}/output/${EXPNAME} |
|||
ICONFOLDER=/home/hk-project-iconart/hp8526/icon-kit |
|||
ARTFOLDER=${ICONFOLDER}/externals/art |
|||
INDIR=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT |
|||
EXP=ECHAM_AMIP_LIFETIME |
|||
lart=.True. |
|||
FILETYPE=4 |
|||
COMPILER=intel |
|||
restart=.False. |
|||
read_restart_namelists=.False. |
|||
# Remove folder from OUTDIR for postprocessing output |
|||
OUTDIR_PREFIX=${workspace} |
|||
# Create output directory and go to this directory |
|||
if [ ! -d $OUTDIR ]; then |
|||
mkdir -p $OUTDIR |
|||
fi |
|||
cd $OUTDIR |
|||
#input for global domain |
|||
ln -sf ${INDIR}/../INPUT/GRID/icon_grid_0014_R02B05_G.nc iconR2B05_DOM01.nc |
|||
ln -sf ${INDIR}/../INPUT/EXTPAR/icon_extpar_0014_R02B05_G.nc extpar_iconR2B05_DOM01.nc |
|||
ln -sf /hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/output/0014_R02B05/uc1_ifs_t1279_grb2_remap_rev832_0014_R02B05_2018010100.nc ifs2icon_R2B05_DOM01.nc |
|||
ln -sf $ICONFOLDER/data/rrtmg_lw.nc rrtmg_lw.nc |
|||
ln -sf $ICONFOLDER/data/ECHAM6_CldOptProps.nc ECHAM6_CldOptProps.nc |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/mozart_coord.nc ${OUTDIR}/mozart_coord.nc |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Linoz2004Br.dat ${OUTDIR}/Linoz2004Br.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Simnoy2002.dat ${OUTDIR}/Simnoy2002.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-aer.dat ${OUTDIR}/FJX_scat-aer.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j.dat ${OUTDIR}/FJX_j2j.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-cld.dat ${OUTDIR}/FJX_scat-cld.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-ssa.dat ${OUTDIR}/FJX_scat-ssa.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-UMa.dat ${OUTDIR}/FJX_scat-UMa.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec.dat ${OUTDIR}/FJX_spec.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_std.dat ${OUTDIR}/atmos_std.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_h2och4.dat ${OUTDIR}/atmos_h2och4.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j_extended.dat ${OUTDIR}/FJX_j2j_extended.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat |
|||
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended_lyman.dat ${OUTDIR}/FJX_spec_extended_lyman.dat |
|||
# this if condition is necessary because otherwise |
|||
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated |
|||
# linking to itself |
|||
if [ ! -L ${OUTDIR}/emissions ]; then |
|||
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions |
|||
fi |
|||
# this if condition is necessary because otherwise |
|||
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated |
|||
# linking to itself |
|||
if [ ! -L ${OUTDIR}/emissions ]; then |
|||
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions |
|||
fi |
|||
# the namelist filename |
|||
atmo_namelist=NAMELIST_${EXPNAME} |
|||
# |
|||
#----------------------------------------------------------------------------- |
|||
! run_nml: general switches ---------- |
|||
&# model timing |
|||
start_date=${start_date:="2012-10-01T00:00:00Z"} |
|||
end_date=${end_date:="2012-10-02T00:00:00Z"} |
|||
output_start=${start_date:="2012-10-01T00:00:00Z"} |
|||
output_end=${end_date:="2012-10-02T00:00:00Z"} |
|||
output_interval="PT1H" |
|||
modelTimeStep="PT6M" |
|||
leadtime="P8H" |
|||
checkpoint_interval="P30D" |
|||
# model parameters |
|||
model_equations=3 # equation system |
|||
# 1=hydrost. atm. T |
|||
# 1=hydrost. atm. theta dp |
|||
# 3=non-hydrost. atm., |
|||
# 0=shallow water model |
|||
# -1=hydrost. ocean |
|||
#----------------------------------------------------------------------------- |
|||
# the grid parameters |
|||
declare -a atmo_dyn_grids=("iconR2B04_DOM01.nc" "iconR2B05_DOM02.nc" "iconR2B06_DOM03.nc") |
|||
# "iconR2B08_DOM03.nc" |
|||
#atmo_dyn_grids="iconR2B07_DOM02.nc","iconR2B08_DOM03.nc" |
|||
#atmo_rad_grids="iconR2B06_DOM01.nc" |
|||
#----------------------------------------------------------------------------- |
|||
# create ICON master namelist |
|||
# ------------------------ |
|||
# For a complete list see Namelist_overview and Namelist_overview.pdf |
|||
no_of_models=1 |
|||
cat > icon_master.namelist << EOF |
|||
&master_nml |
|||
lRestart = .false. |
|||
/ |
|||
&master_time_control_nml |
|||
experimentStartDate = "$start_date" |
|||
experimentStopDate = "$end_date" |
|||
forecastLeadTime = "$leadtime" |
|||
checkpointTimeIntval = "$checkpoint_interval" |
|||
/ |
|||
&master_model_nml |
|||
model_type=1 |
|||
model_name="ATMO" |
|||
model_namelist_filename="$atmo_namelist" |
|||
model_min_rank=1 |
|||
model_max_rank=65536 |
|||
model_inc_rank=1 |
|||
/ |
|||
EOF |
|||
#----------------------------------------------------------------------------- |
|||
# |
|||
#----------------------------------------------------------------------------- |
|||
# |
|||
# write ICON namelist parameters |
|||
# ------------------------ |
|||
# For a complete list see Namelist_overview and Namelist_overview.pdf |
|||
# |
|||
# ------------------------ |
|||
# reconstrcuct the grid parameters in namelist form |
|||
dynamics_grid_filename="" |
|||
for gridfile in ${atmo_dyn_grids}; do |
|||
dynamics_grid_filename="${dynamics_grid_filename} '${gridfile}'," |
|||
done |
|||
radiation_grid_filename="" |
|||
for gridfile in ${atmo_rad_grids}; do |
|||
radiation_grid_filename="${radiation_grid_filename} '${gridfile}'," |
|||
done |
|||
# ------------------------ |
|||
cat > ${atmo_namelist} << EOF |
|||
¶llel_nml |
|||
nproma = 8 ! optimal setting 8 for CRAY; use 16 or 24 for IBM |
|||
p_test_run = .false. |
|||
l_test_openmp = .false. |
|||
l_log_checks = .false. |
|||
num_io_procs = 0 ! up to one PE per output stream is possible |
|||
itype_comm = 1 |
|||
iorder_sendrecv = 3 ! best value for CRAY (slightly faster than option 1) |
|||
/ |
|||
&grid_nml |
|||
dynamics_grid_filename = 'iconR2B05_DOM01.nc' |
|||
dynamics_parent_grid_id = 0 |
|||
!radiation_grid_filename = ${radiation_grid_filename} |
|||
lredgrid_phys = .false. |
|||
lfeedback = .true. |
|||
ifeedback_type = 2 |
|||
/ |
|||
&initicon_nml |
|||
lconsistency_checks = .false. |
|||
init_mode = 2 ! operation mode 2: IFS |
|||
zpbl1 = 500. |
|||
zpbl2 = 1000. |
|||
! l_sst_in = .true. |
|||
/ |
|||
&run_nml |
|||
num_lev = 90 |
|||
lvert_nest = .true. ! use vertical nesting if a nest is active |
|||
! nsteps = ${nsteps} ! 50 ! 1200 ! 7200 ! |
|||
! dtime = ${dtime} ! timestep in seconds |
|||
modelTimeStep = "${modelTimeStep}" |
|||
ldynamics = .TRUE. ! dynamics |
|||
ltransport = .true. |
|||
iforcing = 3 ! NWP forcing |
|||
ltestcase = .false. ! false: run with real data |
|||
msg_level = 7 ! print maximum wind speeds every 5 time steps |
|||
ltimer = .true. ! set .TRUE. for timer output |
|||
timers_level = 10 ! can be increased up to 10 for detailed timer output |
|||
output = "nml" |
|||
lart = ${lart} |
|||
/ |
|||
&nwp_phy_nml |
|||
inwp_gscp = 1 |
|||
inwp_convection = 1 |
|||
inwp_radiation = 1 |
|||
inwp_cldcover = 1 |
|||
inwp_turb = 1 |
|||
inwp_satad = 1 |
|||
inwp_sso = 1 |
|||
inwp_gwd = 1 |
|||
inwp_surface = 1 |
|||
icapdcycl = 3 ! apply CAPE modification to improve diurnalcycle over tropical land (optimizes NWP scores) |
|||
latm_above_top = .false., .true. ! the second entry refers to the nested domain (if present) |
|||
efdt_min_raylfric = 7200. |
|||
itype_z0 = 2 |
|||
icpl_aero_conv = 1 |
|||
icpl_aero_gscp = 1 |
|||
! resolution-dependent settings - please choose the appropriate one |
|||
dt_rad = 2160. |
|||
dt_conv = 720. |
|||
dt_sso = 1440. |
|||
dt_gwd = 1440. |
|||
/ |
|||
&nwp_tuning_nml |
|||
tune_zceff_min = 0.075 ! ** default value to be used for R3B7; use 0.05 for R2B6 in order to get similar temperature biases in upper troposphere ** |
|||
itune_albedo = 1 ! somewhat reduced albedo (w.r.t. MODIS data) over Sahara in order to reduce cold bias |
|||
/ |
|||
&turbdiff_nml |
|||
tkhmin = 0.75 ! new default since rev. 16527 |
|||
tkmmin = 0.75 ! "" |
|||
pat_len = 100. |
|||
c_diff = 0.2 |
|||
rat_sea = 8.5 ! ** new since r20191: 8.5 for R3B7, 8.0 for R2B6 in order to get similar temperature biases in the tropics ** |
|||
ltkesso = .true. |
|||
frcsmot = 0.2 ! these 2 switches together apply vertical smoothing of the TKE source terms |
|||
imode_frcsmot = 2 ! in the tropics (only), which reduces the moist bias in the tropical lower troposphere |
|||
! use horizontal shear production terms with 1/SQRT(Ri) scaling to prevent unwanted side effects: |
|||
itype_sher = 3 |
|||
ltkeshs = .true. |
|||
a_hshr = 2.0 |
|||
/ |
|||
&lnd_nml |
|||
ntiles = 3 !!! 1 for assimilation cycle and forecast |
|||
nlev_snow = 3 !!! 1 for assimilation cycle and forecast |
|||
lmulti_snow = .true. !!! .false. for assimilation cycle and forecast |
|||
itype_heatcond = 2 |
|||
idiag_snowfrac = 2 |
|||
lsnowtile = .false. !! later on .true. if GRIB encoding issues are solved |
|||
lseaice = .true. |
|||
llake = .false. |
|||
itype_lndtbl = 3 ! minimizes moist/cold bias in lower tropical troposphere |
|||
itype_root = 2 |
|||
/ |
|||
&radiation_nml |
|||
irad_o3 = 10 |
|||
irad_aero = 6 |
|||
albedo_type = 2 ! Modis albedo |
|||
vmr_co2 = 390.e-06 ! values representative for 2012 |
|||
vmr_ch4 = 1800.e-09 |
|||
vmr_n2o = 322.0e-09 |
|||
vmr_o2 = 0.20946 |
|||
vmr_cfc11 = 240.e-12 |
|||
vmr_cfc12 = 532.e-12 |
|||
/ |
|||
&nonhydrostatic_nml |
|||
iadv_rhotheta = 2 |
|||
ivctype = 2 |
|||
itime_scheme = 4 |
|||
exner_expol = 0.333 |
|||
vwind_offctr = 0.2 |
|||
damp_height = 50000. |
|||
rayleigh_coeff = 0.10 |
|||
lhdiff_rcf = .true. |
|||
divdamp_order = 24 ! for data assimilation runs, '2' provides extra-strong filtering of gravity waves |
|||
divdamp_type = 32 !!! optional: 2 for assimilation cycle if very strong gravity-wave filtering is desired |
|||
divdamp_fac = 0.004 |
|||
l_open_ubc = .false. |
|||
igradp_method = 3 |
|||
l_zdiffu_t = .true. |
|||
thslp_zdiffu = 0.02 |
|||
thhgtd_zdiffu = 125. |
|||
htop_moist_proc= 22500. |
|||
hbot_qvsubstep = 22500. ! use 19000. with R3B7 |
|||
/ |
|||
&sleve_nml |
|||
min_lay_thckn = 20. |
|||
max_lay_thckn = 400. ! maximum layer thickness below htop_thcknlimit |
|||
htop_thcknlimit = 14000. ! this implies that the upcoming COSMO-EU nest will have 60 levels |
|||
top_height = 75000. |
|||
stretch_fac = 0.9 |
|||
decay_scale_1 = 4000. |
|||
decay_scale_2 = 2500. |
|||
decay_exp = 1.2 |
|||
flat_height = 16000. |
|||
/ |
|||
&dynamics_nml |
|||
iequations = 3 |
|||
idiv_method = 1 |
|||
divavg_cntrwgt = 0.50 |
|||
lcoriolis = .TRUE. |
|||
/ |
|||
&transport_nml |
|||
! qv, qc, qi, qr, qs |
|||
itype_vlimit = 1,1,1,1,1 |
|||
ivadv_tracer = 3, 3, 3, 3, 3 |
|||
itype_hlimit = 3, 4, 4, 4 , 4 |
|||
ihadv_tracer = 52, 2,2,2,2 |
|||
iadv_tke = 0 |
|||
/ |
|||
&diffusion_nml |
|||
hdiff_order = 5 |
|||
itype_vn_diffu = 1 |
|||
itype_t_diffu = 2 |
|||
hdiff_efdt_ratio = 24.0 |
|||
hdiff_smag_fac = 0.025 |
|||
lhdiff_vn = .TRUE. |
|||
lhdiff_temp = .TRUE. |
|||
/ |
|||
&interpol_nml |
|||
nudge_zone_width = 8 |
|||
lsq_high_ord = 3 |
|||
l_intp_c2l = .true. |
|||
l_mono_c2l = .true. |
|||
support_baryctr_intp = .false. |
|||
/ |
|||
&extpar_nml |
|||
itopo = 1 |
|||
n_iter_smooth_topo = 1 |
|||
heightdiff_threshold = 3000. |
|||
/ |
|||
&io_nml |
|||
itype_pres_msl = 4 ! IFS method with bug fix for self-consistency between SLP and geopotential |
|||
itype_rh = 1 ! RH w.r.t. water |
|||
/ |
|||
&output_nml |
|||
filetype = ${FILETYPE} ! output format: 2=GRIB2, 4=NETCDFv2 |
|||
dom = -1 ! write all domains |
|||
output_start = "${output_start}" |
|||
output_end = "${output_end}" |
|||
output_interval = "${output_interval}" |
|||
steps_per_file = 1 |
|||
include_last = .TRUE. |
|||
output_filename = 'icon-art-${EXPNAME}-chem' ! file name base |
|||
ml_varlist = 'temp','pres','group:ART_CHEMISTRY','u','v' |
|||
output_grid = .TRUE. |
|||
remap = 1 |
|||
reg_lon_def = -180.,1,180. |
|||
reg_lat_def = -90.,1,90. |
|||
/ |
|||
&art_nml |
|||
lart_chem = .TRUE. |
|||
lart_diag_out = .TRUE. |
|||
lart_aerosol = .FALSE. |
|||
lart_mecca = .FALSE. |
|||
lart_chemtracer = .TRUE. |
|||
cart_chemtracer_xml = '/home/hk-project-iconart/hp8526/icon-kit/externals/art/runctrl_examples/xml_ctrl/chemtracer_lifetime_test.xml' |
|||
cart_input_folder = '${OUTDIR}' |
|||
cart_io_suffix = '0014' |
|||
iart_init_gas = 0 |
|||
/ |
|||
EOF |
|||
cp ${ICONFOLDER}/bin/icon ./icon.exe |
|||
cat > job_ICON << ENDFILE |
|||
#!/bin/bash -x |
|||
#SBATCH --nodes=2 |
|||
#SBATCH --time=06:00:00 |
|||
#SBATCH --ntasks-per-node=76 |
|||
#SBATCH --partition=cpuonly |
|||
#SBATCH -A hk-project-iconart |
|||
###SBATCH --constraint=LSDF |
|||
module load compiler/intel/2022.0.2 mpi/openmpi/4.0 lib/netcdf/4.9_serial lib/hdf5/1.12_serial lib/netcdf-fortran/4.5_serial lib/eccodes/2.25.0 numlib/mkl/2022.0.2 |
|||
mpirun --bind-to core --map-by core --report-bindings ./icon.exe |
|||
ENDFILE |
|||
chmod +x job_ICON |
|||
sbatch job_ICON |
|||
</syntaxhighlight> |
|||
</div> |
|||
== Setting up the xml-file == |
|||
An xml-file describes the chemical components of the simulation which means that all trace gases or aerosols and their properties that are relevant for the simulation are listed here. Since we perform a simulation with simplified ICON-ART chemistry of lifetime dependent tracers we need the matching chemtracer-xml-file where only these tracers have to mentioned. Then, the concentrations will be calculated according to their lifetimes with no relation to other tracers. Because of no specific other settings (e.g. emissions), this is the only xml-file needed here. |
|||
To prepare the xml-file we can select the matching species from the general previously generated xml-file <code>standard_chemtracer.xml</code>. |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Standard Chemtracer-xml-file for simulations without emission data |
|||
<syntaxhighlight lang=xml line class="mw-collapsible-content"> |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE tracers SYSTEM "tracers.dtd"> |
|||
<tracers> |
|||
<chemtracer id="TRCH4" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">1.604E-2</mol_weight> |
|||
<?source_lifetime Hayman et al., ACP, 2014 ?> |
|||
<lifetime type="real">286977600</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRCO;2.*TRH2O</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">CH4</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRC2H6" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">3.006E-2</mol_weight> |
|||
<?source_lifetime Hodnebrog et al, Atmos. Sci. Lett., 2018 ?> |
|||
<lifetime type="real">5011200</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRC3H8" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">4.40956E-2</mol_weight> |
|||
<?source_lifetime Hodnebrog et al, Atmos. Sci. Lett., 2018 ?> |
|||
<lifetime type="real">1123200</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">0.736*TRCH3COCH3</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRC5H8" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">6.812E-2</mol_weight> |
|||
<?source_lifetime Weimer (2015), p. 16 ?> |
|||
<lifetime type="real">8640</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRCH3COCH3" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">5.808E-2</mol_weight> |
|||
<?source_lifetime Weimer (2015), p. 9 ?> |
|||
<lifetime type="real">1728000</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRCO" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">2.801E-2</mol_weight> |
|||
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?> |
|||
<lifetime type="real">5184000</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRCO2</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">CO</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRCO2" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">4.401E-2</mol_weight> |
|||
<?source_lifetime Houghton et al., IPCC, Cambridge University Press, 2001 ?> |
|||
<lifetime type="real">3153600000</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRCO</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRH2O" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">1.802E-2</mol_weight> |
|||
<?source_lifetime Just a placeholder (not used in the code) ?> |
|||
<lifetime type="real">2592000000</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">H2O</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRCHBr3" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">2.527E-1</mol_weight> |
|||
<?source_lifetime Rieger et al., GMD, 2015 ?> |
|||
<lifetime type="real">2073600</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRCH2Br2" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">1.738E-1</mol_weight> |
|||
<?source_lifetime Rieger et al., GMD, 2015 ?> |
|||
<lifetime type="real">10627200</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRNH3" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">1.70E-2</mol_weight> |
|||
<?source_lifetime Pinder et al., GRL, 2008?> |
|||
<lifetime type="real">86400</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRNO2</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">NH3</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRNO2" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">4.601E-2</mol_weight> |
|||
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?> |
|||
<lifetime type="real">259200</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRHNO3</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">NO2</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRHNO3" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">6.30E-2</mol_weight> |
|||
<?source_lifetime Day et al., ACP, 2008?> |
|||
<lifetime type="real">21600</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">HNO3</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRSO2" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">6.40E-2</mol_weight> |
|||
<?source_lifetime Von Glasow, Chemical Geology, 2009 ?> |
|||
<lifetime type="real">1209600</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRH2SO4</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">SO2</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TROCS" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">6.01E-2</mol_weight> |
|||
<?source_lifetime Ullwer (2017) ?> |
|||
<lifetime type="real">504576000</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">TRSO2</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">OCS</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRDMS" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">6.21E-2</mol_weight> |
|||
<?source_lifetime Ullwer (2017) ?> |
|||
<lifetime type="real">216000</lifetime> |
|||
<!-- c_solve: lt, OH, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<products type="char">0.993*TRSO2;0.007*TROCS</products> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">DMS</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRH2SO4" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">9.80E-2</mol_weight> |
|||
<?source_lifetime Fiedler et al., ACP, 2005?> |
|||
<lifetime type="real">1800</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<dataset01 type="char" cvar_name="H2SO4" rbottom_height="10000" rupper_height="40000">CCMI-ETH_MPIC1.1</dataset01> |
|||
</chemtracer> |
|||
<chemtracer id="TRHCL" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">3.60E-2</mol_weight> |
|||
<lifetime type="real">259200</lifetime> |
|||
<!-- c_solve: lt, param, passive possible --> |
|||
<c_solve type="char">param</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TR_cold"> |
|||
<unit type="char">none</unit> |
|||
<mol_weight type="real">1.000E+0</mol_weight> |
|||
<lifetime type="real">432000</lifetime> |
|||
<!-- c_solve: cold possible --> |
|||
<c_solve type="char">cold</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRO3" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">4.800E-2</mol_weight> |
|||
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?> |
|||
<lifetime type="real">1576800</lifetime> |
|||
<!-- c_solve: lt, linoz, passive possible --> |
|||
<c_solve type="char">linoz</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">O3</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRN2O" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">4.401E-2</mol_weight> |
|||
<?source_lifetime Wypych, 2017, Atlas of Material Damage?> |
|||
<lifetime type="real">4730400000</lifetime> |
|||
<!-- c_solve: lt, simnoy, passive possible --> |
|||
<c_solve type="char">simnoy</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
<init_mode type="int">0</init_mode> |
|||
<init_name type="char">N2O</init_name> |
|||
</chemtracer> |
|||
<chemtracer id="TRNOy" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">6.301E-1</mol_weight> |
|||
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?> |
|||
<lifetime type="real">259200</lifetime> |
|||
<!-- c_solve: lt, simnoy, passive possible --> |
|||
<c_solve type="char">simnoy</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRAGE" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">none</unit> |
|||
<mol_weight type="real">1.000E+0</mol_weight> |
|||
<?source_lifetime Just a placeholder, not used in the code?> |
|||
<lifetime type="real">25920000</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">passive</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
</tracers> |
|||
</syntaxhighlight> |
|||
</div> |
|||
After identifying the needed chemtracers (in our case <chem>CHBr3</chem> (in xml-file: <code>TRCHBr3</code>) and <chem>CH2Br2</chem> (in xml-file: <code>TRCH2Br2</code>)) we copy the needed code lines into our new xml-file <code>chemtracer_lifetime_chbr3_ch2br2.xml</code> needed for the simulation. |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
Chemtracer-xml-file for lifetime tracer simulation (Example configuration) |
|||
<syntaxhighlight lang=xml line class="mw-collapsible-content"> |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE tracers SYSTEM "tracers.dtd"> |
|||
<tracers> |
|||
<chemtracer id="TRCHBr3" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">2.527E-1</mol_weight> |
|||
<?source_lifetime Rieger et al., GMD, 2015 ?> |
|||
<lifetime type="real">2073600</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
<chemtracer id="TRCH2Br2" full="FALSE" chemtr="TRUE"> |
|||
<tag001 type="char">chemtr</tag001> |
|||
<unit type="char">mol mol-1</unit> |
|||
<mol_weight type="real">1.738E-1</mol_weight> |
|||
<?source_lifetime Rieger et al., GMD, 2015 ?> |
|||
<lifetime type="real">10627200</lifetime> |
|||
<!-- c_solve: lt, passive possible --> |
|||
<c_solve type="char">lt</c_solve> |
|||
<!-- lfeedback=1, if nested simulation --> |
|||
<lfeedback type='int'>0</lfeedback> |
|||
<transport type="char">stdaero</transport> |
|||
</chemtracer> |
|||
</tracers> |
|||
</syntaxhighlight> |
|||
</div> |
|||
== Running the simulation == |
|||
Double check all filled in paths and namelist - especially the ART-namelists. If every namelist parameter in the runscript is filled in correctly, the runscript has to be saved. Afterwards by typing |
|||
./exp.testsuite.lifetime_tracer_test.run |
|||
a job can be submitted to the respective HPC-System. Type the terminal command |
|||
squeue |
|||
to view a list of your submitted and currently running and jobs. |
|||
By changing in the output directory (which is according to our runscript <code>/hkfs/work/workspace/scratch/hp8526-liftime_tracer_test</code> you can check the slurm file for possible errors and run times after your job has been run through. |
|||
In the output directory you can also find all output data for postprocessing in netCDF format. |
Latest revision as of 11:45, 26 October 2023
- under construction -
In this example it is shown how to simulate a lifetime driven tracer with simplified chemistry in ICON-ART. This tutorial teaches you...
- the setup of the runscript
- the correct setup of the xml-file for such tracers.
- the structure of lifetime tracers in xml-files
- editing output variables
No emission data will be included in this simulation.
Configuration case
The depicted case is dealing with biogenic very short-lived species (VSLS) with a very short lifetime, more accurately Bromoform () and Dibromomethane (). Like of most VSLSs the major source of and is the ocean which leads too a large gradient with increasing height in the concentration of these tracers. Bromoform is mainly depleted by photolysis in the Troposphere whereas Dibromomethanes main loss is due to Hydroxylradicals (OH). To assess the ability to simulate the transport of VSLS from the surface to the lower stratosphere, this case study uses an idealized chemical tracer approach.
The simulation is modeling the 01 October 2012 and is initialized with data from the ECMWF Integrated Forecast System (IFS) and includes boundary conditions and chemical lifetimes from the WMO Ozone assessment 2010. The boundary conditions and the chemical lifetimes are recalculated in a sort of rate at which the substances are depleted from the atmosphere with help of the implicit solution of the balance equation:
Here is the density of air, the barycentric-averaged mass mixing ratio, indicates the flux divergence that includes the horizontal and vertical advection of the gaseous compound l and indicates the change due to turbulent fluxes. Further describes the production rate due to chemical reactions, the respective loss rate and emissions are noted with . Everything is related to the respective compound l.
In this example no emission data is used.
Setting up the Runscript
Let's start with the runscript that has to be prepared. Please note that the in the following explained parts have to be printed in one runscript-file with the naming designation "xyz.run". Here it is named exp.testsuite.lifetime_tracer_test.run
but of course you can call it differently as well. The runscript can be stored under the following path in your icon directory: /icon-kit/run
If you've already walked through the example of the Simplified Chemistry, you can use nearly the same runscript. Note that you have to change the paths from Part 1, the timing settings from Part 2, the output variables from Part 3, the emission settings as well as the path of the chemtracer-xml-file in the ART-settings from Part 4 and finally the timing in the job settings from Part 5. Details can be found below.
Inside of that, first check in part 1 that all your paths to your directories are correct, probably they have to be adjusted. Note that "hp8526" is a name of a specific account here, make sure to double check especially these lines. Abbreviations used here are the following:
- CENTER: Your organization
- EXPNAME: name of your ICON-Simulation
- OUTDIR: Directory where the simulation output will be stored
- ARTFOLDER: Directory where the ICON-ART code is stored
- INDIR: Directory where the necessary Input data are stored
- EXP:
- lart: For ICON-ART Simulation that has to be switched to
.True.
.
Part 1: Runscript Directory Settings (Example configuration)
#!/bin/bash
CENTER=IMK
workspace=/hkfs/work/workspace/scratch/hp8526-liftime_tracer_test
basedir=${workspace}/icon-kit-testsuite
icon_data_poolFolder=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT/AMIP/amip_input
EXPNAME=liftime_tracer_test
OUTDIR=${workspace}/output/${EXPNAME}
ICONFOLDER=/home/hk-project-iconart/hp8526/icon-kit
ARTFOLDER=${ICONFOLDER}/externals/art
INDIR=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT
EXP=ECHAM_AMIP_LIFETIME
lart=.True.
FILETYPE=4
COMPILER=intel
restart=.False.
read_restart_namelists=.False.
# Remove folder from OUTDIR for postprocessing output
OUTDIR_PREFIX=${workspace}
# Create output directory and go to this directory
if [ ! -d $OUTDIR ]; then
mkdir -p $OUTDIR
fi
cd $OUTDIR
#input for global domain
ln -sf ${INDIR}/../INPUT/GRID/icon_grid_0014_R02B05_G.nc iconR2B05_DOM01.nc
ln -sf ${INDIR}/../INPUT/EXTPAR/icon_extpar_0014_R02B05_G.nc extpar_iconR2B05_DOM01.nc
ln -sf /hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/output/0014_R02B05/uc1_ifs_t1279_grb2_remap_rev832_0014_R02B05_2018010100.nc ifs2icon_R2B05_DOM01.nc
ln -sf $ICONFOLDER/data/rrtmg_lw.nc rrtmg_lw.nc
ln -sf $ICONFOLDER/data/ECHAM6_CldOptProps.nc ECHAM6_CldOptProps.nc
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/mozart_coord.nc ${OUTDIR}/mozart_coord.nc
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Linoz2004Br.dat ${OUTDIR}/Linoz2004Br.dat
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Simnoy2002.dat ${OUTDIR}/Simnoy2002.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-aer.dat ${OUTDIR}/FJX_scat-aer.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j.dat ${OUTDIR}/FJX_j2j.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-cld.dat ${OUTDIR}/FJX_scat-cld.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-ssa.dat ${OUTDIR}/FJX_scat-ssa.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-UMa.dat ${OUTDIR}/FJX_scat-UMa.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec.dat ${OUTDIR}/FJX_spec.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_std.dat ${OUTDIR}/atmos_std.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_h2och4.dat ${OUTDIR}/atmos_h2och4.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j_extended.dat ${OUTDIR}/FJX_j2j_extended.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended_lyman.dat ${OUTDIR}/FJX_spec_extended_lyman.dat
# this if condition is necessary because otherwise
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated
# linking to itself
if [ ! -L ${OUTDIR}/emissions ]; then
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions
fi
# this if condition is necessary because otherwise
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated
# linking to itself
if [ ! -L ${OUTDIR}/emissions ]; then
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions
fi
# the namelist filename
atmo_namelist=NAMELIST_${EXPNAME}
#
#-----------------------------------------------------------------------------
Additionally in the next lines of code you set the timing. In this simulation we only simulate one day (01 October 2012). To calculate and to every time of the day the output interval is set to 1 hour.
Part 2: Runscript Timing Settings (Example configuration)
! run_nml: general switches ----------
&# model timing
start_date=${start_date:="2012-10-01T00:00:00Z"}
end_date=${end_date:="2012-10-02T00:00:00Z"}
output_start=${start_date:="2012-10-01T00:00:00Z"}
output_end=${end_date:="2012-10-02T00:00:00Z"}
output_interval="PT1H"
modelTimeStep="PT6M"
leadtime="P8H"
checkpoint_interval="P30D"
</syntaxhihlight>
</div>
Further, all the namelist parameters (from the regular ICON model without ART-extension) have to be set. For a regular ICON-ART-Simulation the following settings are recommended - if not stated differently. For a detailed description, check out the ICON Documentation ([https://code.mpimet.mpg.de/attachments/download/19568/ICON_tutorial_2019.pdf Drill et. al. (2019)]).
<div class="toccolours mw-collapsible mw-collapsed">
Part 3: Runscript ICON-Parameter and -Namelist Settings (Example configuration)
<syntaxhighlight lang=bash line class="mw-collapsible-content">
# model parameters
model_equations=3 # equation system
# 1=hydrost. atm. T
# 1=hydrost. atm. theta dp
# 3=non-hydrost. atm.,
# 0=shallow water model
# -1=hydrost. ocean
#-----------------------------------------------------------------------------
# the grid parameters
declare -a atmo_dyn_grids=("iconR2B04_DOM01.nc" "iconR2B05_DOM02.nc" "iconR2B06_DOM03.nc")
# "iconR2B08_DOM03.nc"
#atmo_dyn_grids="iconR2B07_DOM02.nc","iconR2B08_DOM03.nc"
#atmo_rad_grids="iconR2B06_DOM01.nc"
#-----------------------------------------------------------------------------
# create ICON master namelist
# ------------------------
# For a complete list see Namelist_overview and Namelist_overview.pdf
no_of_models=1
cat > icon_master.namelist << EOF
&master_nml
lRestart = .false.
/
&master_time_control_nml
experimentStartDate = "$start_date"
experimentStopDate = "$end_date"
forecastLeadTime = "$leadtime"
checkpointTimeIntval = "$checkpoint_interval"
/
&master_model_nml
model_type=1
model_name="ATMO"
model_namelist_filename="$atmo_namelist"
model_min_rank=1
model_max_rank=65536
model_inc_rank=1
/
EOF
#-----------------------------------------------------------------------------
#
#-----------------------------------------------------------------------------
#
# write ICON namelist parameters
# ------------------------
# For a complete list see Namelist_overview and Namelist_overview.pdf
#
# ------------------------
# reconstrcuct the grid parameters in namelist form
dynamics_grid_filename=""
for gridfile in ${atmo_dyn_grids}; do
dynamics_grid_filename="${dynamics_grid_filename} '${gridfile}',"
done
radiation_grid_filename=""
for gridfile in ${atmo_rad_grids}; do
radiation_grid_filename="${radiation_grid_filename} '${gridfile}',"
done
# ------------------------
cat > ${atmo_namelist} << EOF
¶llel_nml
nproma = 8 ! optimal setting 8 for CRAY; use 16 or 24 for IBM
p_test_run = .false.
l_test_openmp = .false.
l_log_checks = .false.
num_io_procs = 0 ! up to one PE per output stream is possible
itype_comm = 1
iorder_sendrecv = 3 ! best value for CRAY (slightly faster than option 1)
/
&grid_nml
dynamics_grid_filename = 'iconR2B05_DOM01.nc'
dynamics_parent_grid_id = 0
!radiation_grid_filename = ${radiation_grid_filename}
lredgrid_phys = .false.
lfeedback = .true.
ifeedback_type = 2
/
&initicon_nml
lconsistency_checks = .false.
init_mode = 2 ! operation mode 2: IFS
zpbl1 = 500.
zpbl2 = 1000.
! l_sst_in = .true.
/
&run_nml
num_lev = 90
lvert_nest = .true. ! use vertical nesting if a nest is active
! nsteps = ${nsteps} ! 50 ! 1200 ! 7200 !
! dtime = ${dtime} ! timestep in seconds
modelTimeStep = "${modelTimeStep}"
ldynamics = .TRUE. ! dynamics
ltransport = .true.
iforcing = 3 ! NWP forcing
ltestcase = .false. ! false: run with real data
msg_level = 7 ! print maximum wind speeds every 5 time steps
ltimer = .true. ! set .TRUE. for timer output
timers_level = 10 ! can be increased up to 10 for detailed timer output
output = "nml"
lart = ${lart}
/
&nwp_phy_nml
inwp_gscp = 1
inwp_convection = 1
inwp_radiation = 1
inwp_cldcover = 1
inwp_turb = 1
inwp_satad = 1
inwp_sso = 1
inwp_gwd = 1
inwp_surface = 1
icapdcycl = 3 ! apply CAPE modification to improve diurnalcycle over tropical land (optimizes NWP scores)
latm_above_top = .false., .true. ! the second entry refers to the nested domain (if present)
efdt_min_raylfric = 7200.
itype_z0 = 2
icpl_aero_conv = 1
icpl_aero_gscp = 1
! resolution-dependent settings - please choose the appropriate one
dt_rad = 2160.
dt_conv = 720.
dt_sso = 1440.
dt_gwd = 1440.
/
&nwp_tuning_nml
tune_zceff_min = 0.075 ! ** default value to be used for R3B7; use 0.05 for R2B6 in order to get similar temperature biases in upper troposphere **
itune_albedo = 1 ! somewhat reduced albedo (w.r.t. MODIS data) over Sahara in order to reduce cold bias
/
&turbdiff_nml
tkhmin = 0.75 ! new default since rev. 16527
tkmmin = 0.75 ! ""
pat_len = 100.
c_diff = 0.2
rat_sea = 8.5 ! ** new since r20191: 8.5 for R3B7, 8.0 for R2B6 in order to get similar temperature biases in the tropics **
ltkesso = .true.
frcsmot = 0.2 ! these 2 switches together apply vertical smoothing of the TKE source terms
imode_frcsmot = 2 ! in the tropics (only), which reduces the moist bias in the tropical lower troposphere
! use horizontal shear production terms with 1/SQRT(Ri) scaling to prevent unwanted side effects:
itype_sher = 3
ltkeshs = .true.
a_hshr = 2.0
/
&lnd_nml
ntiles = 3 !!! 1 for assimilation cycle and forecast
nlev_snow = 3 !!! 1 for assimilation cycle and forecast
lmulti_snow = .true. !!! .false. for assimilation cycle and forecast
itype_heatcond = 2
idiag_snowfrac = 2
lsnowtile = .false. !! later on .true. if GRIB encoding issues are solved
lseaice = .true.
llake = .false.
itype_lndtbl = 3 ! minimizes moist/cold bias in lower tropical troposphere
itype_root = 2
/
&radiation_nml
irad_o3 = 10
irad_aero = 6
albedo_type = 2 ! Modis albedo
vmr_co2 = 390.e-06 ! values representative for 2012
vmr_ch4 = 1800.e-09
vmr_n2o = 322.0e-09
vmr_o2 = 0.20946
vmr_cfc11 = 240.e-12
vmr_cfc12 = 532.e-12
/
&nonhydrostatic_nml
iadv_rhotheta = 2
ivctype = 2
itime_scheme = 4
exner_expol = 0.333
vwind_offctr = 0.2
damp_height = 50000.
rayleigh_coeff = 0.10
lhdiff_rcf = .true.
divdamp_order = 24 ! for data assimilation runs, '2' provides extra-strong filtering of gravity waves
divdamp_type = 32 !!! optional: 2 for assimilation cycle if very strong gravity-wave filtering is desired
divdamp_fac = 0.004
l_open_ubc = .false.
igradp_method = 3
l_zdiffu_t = .true.
thslp_zdiffu = 0.02
thhgtd_zdiffu = 125.
htop_moist_proc= 22500.
hbot_qvsubstep = 22500. ! use 19000. with R3B7
/
&sleve_nml
min_lay_thckn = 20.
max_lay_thckn = 400. ! maximum layer thickness below htop_thcknlimit
htop_thcknlimit = 14000. ! this implies that the upcoming COSMO-EU nest will have 60 levels
top_height = 75000.
stretch_fac = 0.9
decay_scale_1 = 4000.
decay_scale_2 = 2500.
decay_exp = 1.2
flat_height = 16000.
/
&dynamics_nml
iequations = 3
idiv_method = 1
divavg_cntrwgt = 0.50
lcoriolis = .TRUE.
/
&transport_nml
! qv, qc, qi, qr, qs
itype_vlimit = 1,1,1,1,1
ivadv_tracer = 3, 3, 3, 3, 3
itype_hlimit = 3, 4, 4, 4 , 4
ihadv_tracer = 52, 2,2,2,2
iadv_tke = 0
/
&diffusion_nml
hdiff_order = 5
itype_vn_diffu = 1
itype_t_diffu = 2
hdiff_efdt_ratio = 24.0
hdiff_smag_fac = 0.025
lhdiff_vn = .TRUE.
lhdiff_temp = .TRUE.
/
&interpol_nml
nudge_zone_width = 8
lsq_high_ord = 3
l_intp_c2l = .true.
l_mono_c2l = .true.
support_baryctr_intp = .false.
/
&extpar_nml
itopo = 1
n_iter_smooth_topo = 1
heightdiff_threshold = 3000.
/
&io_nml
itype_pres_msl = 4 ! IFS method with bug fix for self-consistency between SLP and geopotential
itype_rh = 1 ! RH w.r.t. water
/
&output_nml
filetype = ${FILETYPE} ! output format: 2=GRIB2, 4=NETCDFv2
dom = -1 ! write all domains
output_start = "${output_start}"
output_end = "${output_end}"
output_interval = "${output_interval}"
steps_per_file = 1
include_last = .TRUE.
output_filename = 'icon-art-${EXPNAME}-chem' ! file name base
ml_varlist = 'temp','pres','group:ART_CHEMISTRY','u','v'
output_grid = .TRUE.
remap = 1
reg_lon_def = -180.,1,180.
reg_lat_def = -90.,1,90.
/
Please note in the last namelist section "output_nml" that you can set all output variables that you need to postprocess your data later. All assigned variables here will be written in the output netCDF-files as well. To learn more about post processing your data, check out a later chapter of this article or the Postprocessing article.
Now, we're getting to the ICON-ART settings. To enable chemistry in an ICON-ART Simulation in general, the switch lart_chem
has to be set to .TRUE.
. With lart_diag_out
output of the diagnostic fields can be enabled. Due to setting lart_chem=.TRUE.
either lart_chemtracer
or lart_mecca
has to be set to .TRUE.
. Because we want to perform a simulation with simplified chemistry, we have to switch on lart_chemtracer
. If this namelist parameter is set to .TRUE.
, also cart_chemtracer_xml
has to be fulfilled. Here you enter the path of your xml-file which describes the tracers occurring and their properties in the simulation. How to create this xml-file is explained in the next chapter.
An example configuration for this part is shown in the following:
Part 4: Runscript ICON-ART Settings (Example configuration)
&art_nml
lart_chem = .TRUE.
lart_diag_out = .TRUE.
lart_aerosol = .FALSE.
lart_mecca = .FALSE.
lart_chemtracer = .TRUE.
cart_chemtracer_xml = '/home/hk-project-iconart/hp8526/icon-kit/externals/art/runctrl_examples/xml_ctrl/chemtracer_lifetime_test.xml'
cart_input_folder = '${OUTDIR}'
cart_io_suffix = '0014'
iart_init_gas = 0
/
EOF
Please note that there are also several other namelist parameter you can select from (see Namelist article) but to perform our case study we're done for the ART setting at this point.
Depending on the used HPC-System, some parameter concerning the running job like maximum running time and used nodes can be set. For this case study the following settings can be copied. Note that this is valid for the HoreKa HPC system and that it can differ to other systems.
Part 5: Runscript job Settings (Example configuration)
cp ${ICONFOLDER}/bin/icon ./icon.exe
cat > job_ICON << ENDFILE
#!/bin/bash -x
#SBATCH --nodes=2
#SBATCH --time=06:00:00
#SBATCH --ntasks-per-node=76
#SBATCH --partition=cpuonly
#SBATCH -A hk-project-iconart
###SBATCH --constraint=LSDF
module load compiler/intel/2022.0.2 mpi/openmpi/4.0 lib/netcdf/4.9_serial lib/hdf5/1.12_serial lib/netcdf-fortran/4.5_serial lib/eccodes/2.25.0 numlib/mkl/2022.0.2
mpirun --bind-to core --map-by core --report-bindings ./icon.exe
ENDFILE
chmod +x job_ICON
sbatch job_ICON
To conclude and to double check, in the following box the complete runscript is shown once again.
Complete example configuration of the runscript
#!/bin/bash
CENTER=IMK
workspace=/hkfs/work/workspace/scratch/hp8526-liftime_tracer_test
basedir=${workspace}/icon-kit-testsuite
icon_data_poolFolder=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT/AMIP/amip_input
EXPNAME=liftime_tracer_test
OUTDIR=${workspace}/output/${EXPNAME}
ICONFOLDER=/home/hk-project-iconart/hp8526/icon-kit
ARTFOLDER=${ICONFOLDER}/externals/art
INDIR=/hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/INPUT
EXP=ECHAM_AMIP_LIFETIME
lart=.True.
FILETYPE=4
COMPILER=intel
restart=.False.
read_restart_namelists=.False.
# Remove folder from OUTDIR for postprocessing output
OUTDIR_PREFIX=${workspace}
# Create output directory and go to this directory
if [ ! -d $OUTDIR ]; then
mkdir -p $OUTDIR
fi
cd $OUTDIR
#input for global domain
ln -sf ${INDIR}/../INPUT/GRID/icon_grid_0014_R02B05_G.nc iconR2B05_DOM01.nc
ln -sf ${INDIR}/../INPUT/EXTPAR/icon_extpar_0014_R02B05_G.nc extpar_iconR2B05_DOM01.nc
ln -sf /hkfs/work/workspace/scratch/fb4738-dwd_ozone/icon/output/0014_R02B05/uc1_ifs_t1279_grb2_remap_rev832_0014_R02B05_2018010100.nc ifs2icon_R2B05_DOM01.nc
ln -sf $ICONFOLDER/data/rrtmg_lw.nc rrtmg_lw.nc
ln -sf $ICONFOLDER/data/ECHAM6_CldOptProps.nc ECHAM6_CldOptProps.nc
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/mozart_coord.nc ${OUTDIR}/mozart_coord.nc
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Linoz2004Br.dat ${OUTDIR}/Linoz2004Br.dat
ln -sf ${ARTFOLDER}/runctrl_examples/init_ctrl/Simnoy2002.dat ${OUTDIR}/Simnoy2002.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-aer.dat ${OUTDIR}/FJX_scat-aer.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j.dat ${OUTDIR}/FJX_j2j.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-cld.dat ${OUTDIR}/FJX_scat-cld.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-ssa.dat ${OUTDIR}/FJX_scat-ssa.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_scat-UMa.dat ${OUTDIR}/FJX_scat-UMa.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec.dat ${OUTDIR}/FJX_spec.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_std.dat ${OUTDIR}/atmos_std.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/atmos_h2och4.dat ${OUTDIR}/atmos_h2och4.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_j2j_extended.dat ${OUTDIR}/FJX_j2j_extended.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended.dat ${OUTDIR}/FJX_spec_extended.dat
ln -sf ${ARTFOLDER}/runctrl_examples/photo_ctrl/FJX_spec_extended_lyman.dat ${OUTDIR}/FJX_spec_extended_lyman.dat
# this if condition is necessary because otherwise
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated
# linking to itself
if [ ! -L ${OUTDIR}/emissions ]; then
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions
fi
# this if condition is necessary because otherwise
# a new link in ${INDIR}/${EXP}/emiss_minimal is generated
# linking to itself
if [ ! -L ${OUTDIR}/emissions ]; then
ln -sd /home/hk-project-iconart/hp8526/emissions ${OUTDIR}/emissions
fi
# the namelist filename
atmo_namelist=NAMELIST_${EXPNAME}
#
#-----------------------------------------------------------------------------
! run_nml: general switches ----------
&# model timing
start_date=${start_date:="2012-10-01T00:00:00Z"}
end_date=${end_date:="2012-10-02T00:00:00Z"}
output_start=${start_date:="2012-10-01T00:00:00Z"}
output_end=${end_date:="2012-10-02T00:00:00Z"}
output_interval="PT1H"
modelTimeStep="PT6M"
leadtime="P8H"
checkpoint_interval="P30D"
# model parameters
model_equations=3 # equation system
# 1=hydrost. atm. T
# 1=hydrost. atm. theta dp
# 3=non-hydrost. atm.,
# 0=shallow water model
# -1=hydrost. ocean
#-----------------------------------------------------------------------------
# the grid parameters
declare -a atmo_dyn_grids=("iconR2B04_DOM01.nc" "iconR2B05_DOM02.nc" "iconR2B06_DOM03.nc")
# "iconR2B08_DOM03.nc"
#atmo_dyn_grids="iconR2B07_DOM02.nc","iconR2B08_DOM03.nc"
#atmo_rad_grids="iconR2B06_DOM01.nc"
#-----------------------------------------------------------------------------
# create ICON master namelist
# ------------------------
# For a complete list see Namelist_overview and Namelist_overview.pdf
no_of_models=1
cat > icon_master.namelist << EOF
&master_nml
lRestart = .false.
/
&master_time_control_nml
experimentStartDate = "$start_date"
experimentStopDate = "$end_date"
forecastLeadTime = "$leadtime"
checkpointTimeIntval = "$checkpoint_interval"
/
&master_model_nml
model_type=1
model_name="ATMO"
model_namelist_filename="$atmo_namelist"
model_min_rank=1
model_max_rank=65536
model_inc_rank=1
/
EOF
#-----------------------------------------------------------------------------
#
#-----------------------------------------------------------------------------
#
# write ICON namelist parameters
# ------------------------
# For a complete list see Namelist_overview and Namelist_overview.pdf
#
# ------------------------
# reconstrcuct the grid parameters in namelist form
dynamics_grid_filename=""
for gridfile in ${atmo_dyn_grids}; do
dynamics_grid_filename="${dynamics_grid_filename} '${gridfile}',"
done
radiation_grid_filename=""
for gridfile in ${atmo_rad_grids}; do
radiation_grid_filename="${radiation_grid_filename} '${gridfile}',"
done
# ------------------------
cat > ${atmo_namelist} << EOF
¶llel_nml
nproma = 8 ! optimal setting 8 for CRAY; use 16 or 24 for IBM
p_test_run = .false.
l_test_openmp = .false.
l_log_checks = .false.
num_io_procs = 0 ! up to one PE per output stream is possible
itype_comm = 1
iorder_sendrecv = 3 ! best value for CRAY (slightly faster than option 1)
/
&grid_nml
dynamics_grid_filename = 'iconR2B05_DOM01.nc'
dynamics_parent_grid_id = 0
!radiation_grid_filename = ${radiation_grid_filename}
lredgrid_phys = .false.
lfeedback = .true.
ifeedback_type = 2
/
&initicon_nml
lconsistency_checks = .false.
init_mode = 2 ! operation mode 2: IFS
zpbl1 = 500.
zpbl2 = 1000.
! l_sst_in = .true.
/
&run_nml
num_lev = 90
lvert_nest = .true. ! use vertical nesting if a nest is active
! nsteps = ${nsteps} ! 50 ! 1200 ! 7200 !
! dtime = ${dtime} ! timestep in seconds
modelTimeStep = "${modelTimeStep}"
ldynamics = .TRUE. ! dynamics
ltransport = .true.
iforcing = 3 ! NWP forcing
ltestcase = .false. ! false: run with real data
msg_level = 7 ! print maximum wind speeds every 5 time steps
ltimer = .true. ! set .TRUE. for timer output
timers_level = 10 ! can be increased up to 10 for detailed timer output
output = "nml"
lart = ${lart}
/
&nwp_phy_nml
inwp_gscp = 1
inwp_convection = 1
inwp_radiation = 1
inwp_cldcover = 1
inwp_turb = 1
inwp_satad = 1
inwp_sso = 1
inwp_gwd = 1
inwp_surface = 1
icapdcycl = 3 ! apply CAPE modification to improve diurnalcycle over tropical land (optimizes NWP scores)
latm_above_top = .false., .true. ! the second entry refers to the nested domain (if present)
efdt_min_raylfric = 7200.
itype_z0 = 2
icpl_aero_conv = 1
icpl_aero_gscp = 1
! resolution-dependent settings - please choose the appropriate one
dt_rad = 2160.
dt_conv = 720.
dt_sso = 1440.
dt_gwd = 1440.
/
&nwp_tuning_nml
tune_zceff_min = 0.075 ! ** default value to be used for R3B7; use 0.05 for R2B6 in order to get similar temperature biases in upper troposphere **
itune_albedo = 1 ! somewhat reduced albedo (w.r.t. MODIS data) over Sahara in order to reduce cold bias
/
&turbdiff_nml
tkhmin = 0.75 ! new default since rev. 16527
tkmmin = 0.75 ! ""
pat_len = 100.
c_diff = 0.2
rat_sea = 8.5 ! ** new since r20191: 8.5 for R3B7, 8.0 for R2B6 in order to get similar temperature biases in the tropics **
ltkesso = .true.
frcsmot = 0.2 ! these 2 switches together apply vertical smoothing of the TKE source terms
imode_frcsmot = 2 ! in the tropics (only), which reduces the moist bias in the tropical lower troposphere
! use horizontal shear production terms with 1/SQRT(Ri) scaling to prevent unwanted side effects:
itype_sher = 3
ltkeshs = .true.
a_hshr = 2.0
/
&lnd_nml
ntiles = 3 !!! 1 for assimilation cycle and forecast
nlev_snow = 3 !!! 1 for assimilation cycle and forecast
lmulti_snow = .true. !!! .false. for assimilation cycle and forecast
itype_heatcond = 2
idiag_snowfrac = 2
lsnowtile = .false. !! later on .true. if GRIB encoding issues are solved
lseaice = .true.
llake = .false.
itype_lndtbl = 3 ! minimizes moist/cold bias in lower tropical troposphere
itype_root = 2
/
&radiation_nml
irad_o3 = 10
irad_aero = 6
albedo_type = 2 ! Modis albedo
vmr_co2 = 390.e-06 ! values representative for 2012
vmr_ch4 = 1800.e-09
vmr_n2o = 322.0e-09
vmr_o2 = 0.20946
vmr_cfc11 = 240.e-12
vmr_cfc12 = 532.e-12
/
&nonhydrostatic_nml
iadv_rhotheta = 2
ivctype = 2
itime_scheme = 4
exner_expol = 0.333
vwind_offctr = 0.2
damp_height = 50000.
rayleigh_coeff = 0.10
lhdiff_rcf = .true.
divdamp_order = 24 ! for data assimilation runs, '2' provides extra-strong filtering of gravity waves
divdamp_type = 32 !!! optional: 2 for assimilation cycle if very strong gravity-wave filtering is desired
divdamp_fac = 0.004
l_open_ubc = .false.
igradp_method = 3
l_zdiffu_t = .true.
thslp_zdiffu = 0.02
thhgtd_zdiffu = 125.
htop_moist_proc= 22500.
hbot_qvsubstep = 22500. ! use 19000. with R3B7
/
&sleve_nml
min_lay_thckn = 20.
max_lay_thckn = 400. ! maximum layer thickness below htop_thcknlimit
htop_thcknlimit = 14000. ! this implies that the upcoming COSMO-EU nest will have 60 levels
top_height = 75000.
stretch_fac = 0.9
decay_scale_1 = 4000.
decay_scale_2 = 2500.
decay_exp = 1.2
flat_height = 16000.
/
&dynamics_nml
iequations = 3
idiv_method = 1
divavg_cntrwgt = 0.50
lcoriolis = .TRUE.
/
&transport_nml
! qv, qc, qi, qr, qs
itype_vlimit = 1,1,1,1,1
ivadv_tracer = 3, 3, 3, 3, 3
itype_hlimit = 3, 4, 4, 4 , 4
ihadv_tracer = 52, 2,2,2,2
iadv_tke = 0
/
&diffusion_nml
hdiff_order = 5
itype_vn_diffu = 1
itype_t_diffu = 2
hdiff_efdt_ratio = 24.0
hdiff_smag_fac = 0.025
lhdiff_vn = .TRUE.
lhdiff_temp = .TRUE.
/
&interpol_nml
nudge_zone_width = 8
lsq_high_ord = 3
l_intp_c2l = .true.
l_mono_c2l = .true.
support_baryctr_intp = .false.
/
&extpar_nml
itopo = 1
n_iter_smooth_topo = 1
heightdiff_threshold = 3000.
/
&io_nml
itype_pres_msl = 4 ! IFS method with bug fix for self-consistency between SLP and geopotential
itype_rh = 1 ! RH w.r.t. water
/
&output_nml
filetype = ${FILETYPE} ! output format: 2=GRIB2, 4=NETCDFv2
dom = -1 ! write all domains
output_start = "${output_start}"
output_end = "${output_end}"
output_interval = "${output_interval}"
steps_per_file = 1
include_last = .TRUE.
output_filename = 'icon-art-${EXPNAME}-chem' ! file name base
ml_varlist = 'temp','pres','group:ART_CHEMISTRY','u','v'
output_grid = .TRUE.
remap = 1
reg_lon_def = -180.,1,180.
reg_lat_def = -90.,1,90.
/
&art_nml
lart_chem = .TRUE.
lart_diag_out = .TRUE.
lart_aerosol = .FALSE.
lart_mecca = .FALSE.
lart_chemtracer = .TRUE.
cart_chemtracer_xml = '/home/hk-project-iconart/hp8526/icon-kit/externals/art/runctrl_examples/xml_ctrl/chemtracer_lifetime_test.xml'
cart_input_folder = '${OUTDIR}'
cart_io_suffix = '0014'
iart_init_gas = 0
/
EOF
cp ${ICONFOLDER}/bin/icon ./icon.exe
cat > job_ICON << ENDFILE
#!/bin/bash -x
#SBATCH --nodes=2
#SBATCH --time=06:00:00
#SBATCH --ntasks-per-node=76
#SBATCH --partition=cpuonly
#SBATCH -A hk-project-iconart
###SBATCH --constraint=LSDF
module load compiler/intel/2022.0.2 mpi/openmpi/4.0 lib/netcdf/4.9_serial lib/hdf5/1.12_serial lib/netcdf-fortran/4.5_serial lib/eccodes/2.25.0 numlib/mkl/2022.0.2
mpirun --bind-to core --map-by core --report-bindings ./icon.exe
ENDFILE
chmod +x job_ICON
sbatch job_ICON
Setting up the xml-file
An xml-file describes the chemical components of the simulation which means that all trace gases or aerosols and their properties that are relevant for the simulation are listed here. Since we perform a simulation with simplified ICON-ART chemistry of lifetime dependent tracers we need the matching chemtracer-xml-file where only these tracers have to mentioned. Then, the concentrations will be calculated according to their lifetimes with no relation to other tracers. Because of no specific other settings (e.g. emissions), this is the only xml-file needed here.
To prepare the xml-file we can select the matching species from the general previously generated xml-file standard_chemtracer.xml
.
Standard Chemtracer-xml-file for simulations without emission data
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tracers SYSTEM "tracers.dtd">
<tracers>
<chemtracer id="TRCH4" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">1.604E-2</mol_weight>
<?source_lifetime Hayman et al., ACP, 2014 ?>
<lifetime type="real">286977600</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRCO;2.*TRH2O</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">CH4</init_name>
</chemtracer>
<chemtracer id="TRC2H6" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">3.006E-2</mol_weight>
<?source_lifetime Hodnebrog et al, Atmos. Sci. Lett., 2018 ?>
<lifetime type="real">5011200</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRC3H8" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">4.40956E-2</mol_weight>
<?source_lifetime Hodnebrog et al, Atmos. Sci. Lett., 2018 ?>
<lifetime type="real">1123200</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">0.736*TRCH3COCH3</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRC5H8" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">6.812E-2</mol_weight>
<?source_lifetime Weimer (2015), p. 16 ?>
<lifetime type="real">8640</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRCH3COCH3" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">5.808E-2</mol_weight>
<?source_lifetime Weimer (2015), p. 9 ?>
<lifetime type="real">1728000</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRCO" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">2.801E-2</mol_weight>
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?>
<lifetime type="real">5184000</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRCO2</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">CO</init_name>
</chemtracer>
<chemtracer id="TRCO2" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">4.401E-2</mol_weight>
<?source_lifetime Houghton et al., IPCC, Cambridge University Press, 2001 ?>
<lifetime type="real">3153600000</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRCO</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRH2O" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">1.802E-2</mol_weight>
<?source_lifetime Just a placeholder (not used in the code) ?>
<lifetime type="real">2592000000</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">H2O</init_name>
</chemtracer>
<chemtracer id="TRCHBr3" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">2.527E-1</mol_weight>
<?source_lifetime Rieger et al., GMD, 2015 ?>
<lifetime type="real">2073600</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRCH2Br2" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">1.738E-1</mol_weight>
<?source_lifetime Rieger et al., GMD, 2015 ?>
<lifetime type="real">10627200</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRNH3" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">1.70E-2</mol_weight>
<?source_lifetime Pinder et al., GRL, 2008?>
<lifetime type="real">86400</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRNO2</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">NH3</init_name>
</chemtracer>
<chemtracer id="TRNO2" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">4.601E-2</mol_weight>
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?>
<lifetime type="real">259200</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRHNO3</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">NO2</init_name>
</chemtracer>
<chemtracer id="TRHNO3" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">6.30E-2</mol_weight>
<?source_lifetime Day et al., ACP, 2008?>
<lifetime type="real">21600</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">HNO3</init_name>
</chemtracer>
<chemtracer id="TRSO2" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">6.40E-2</mol_weight>
<?source_lifetime Von Glasow, Chemical Geology, 2009 ?>
<lifetime type="real">1209600</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRH2SO4</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">SO2</init_name>
</chemtracer>
<chemtracer id="TROCS" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">6.01E-2</mol_weight>
<?source_lifetime Ullwer (2017) ?>
<lifetime type="real">504576000</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">TRSO2</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">OCS</init_name>
</chemtracer>
<chemtracer id="TRDMS" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">6.21E-2</mol_weight>
<?source_lifetime Ullwer (2017) ?>
<lifetime type="real">216000</lifetime>
<!-- c_solve: lt, OH, passive possible -->
<c_solve type="char">lt</c_solve>
<products type="char">0.993*TRSO2;0.007*TROCS</products>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">DMS</init_name>
</chemtracer>
<chemtracer id="TRH2SO4" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">9.80E-2</mol_weight>
<?source_lifetime Fiedler et al., ACP, 2005?>
<lifetime type="real">1800</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<dataset01 type="char" cvar_name="H2SO4" rbottom_height="10000" rupper_height="40000">CCMI-ETH_MPIC1.1</dataset01>
</chemtracer>
<chemtracer id="TRHCL" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">3.60E-2</mol_weight>
<lifetime type="real">259200</lifetime>
<!-- c_solve: lt, param, passive possible -->
<c_solve type="char">param</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TR_cold">
<unit type="char">none</unit>
<mol_weight type="real">1.000E+0</mol_weight>
<lifetime type="real">432000</lifetime>
<!-- c_solve: cold possible -->
<c_solve type="char">cold</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRO3" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">4.800E-2</mol_weight>
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?>
<lifetime type="real">1576800</lifetime>
<!-- c_solve: lt, linoz, passive possible -->
<c_solve type="char">linoz</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">O3</init_name>
</chemtracer>
<chemtracer id="TRN2O" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">4.401E-2</mol_weight>
<?source_lifetime Wypych, 2017, Atlas of Material Damage?>
<lifetime type="real">4730400000</lifetime>
<!-- c_solve: lt, simnoy, passive possible -->
<c_solve type="char">simnoy</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
<init_mode type="int">0</init_mode>
<init_name type="char">N2O</init_name>
</chemtracer>
<chemtracer id="TRNOy" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">6.301E-1</mol_weight>
<?source_lifetime Ehhalt et al., IPCC, 2001, Chapter 4 ?>
<lifetime type="real">259200</lifetime>
<!-- c_solve: lt, simnoy, passive possible -->
<c_solve type="char">simnoy</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRAGE" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">none</unit>
<mol_weight type="real">1.000E+0</mol_weight>
<?source_lifetime Just a placeholder, not used in the code?>
<lifetime type="real">25920000</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">passive</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
</tracers>
After identifying the needed chemtracers (in our case (in xml-file: TRCHBr3
) and (in xml-file: TRCH2Br2
)) we copy the needed code lines into our new xml-file chemtracer_lifetime_chbr3_ch2br2.xml
needed for the simulation.
Chemtracer-xml-file for lifetime tracer simulation (Example configuration)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tracers SYSTEM "tracers.dtd">
<tracers>
<chemtracer id="TRCHBr3" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">2.527E-1</mol_weight>
<?source_lifetime Rieger et al., GMD, 2015 ?>
<lifetime type="real">2073600</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
<chemtracer id="TRCH2Br2" full="FALSE" chemtr="TRUE">
<tag001 type="char">chemtr</tag001>
<unit type="char">mol mol-1</unit>
<mol_weight type="real">1.738E-1</mol_weight>
<?source_lifetime Rieger et al., GMD, 2015 ?>
<lifetime type="real">10627200</lifetime>
<!-- c_solve: lt, passive possible -->
<c_solve type="char">lt</c_solve>
<!-- lfeedback=1, if nested simulation -->
<lfeedback type='int'>0</lfeedback>
<transport type="char">stdaero</transport>
</chemtracer>
</tracers>
Running the simulation
Double check all filled in paths and namelist - especially the ART-namelists. If every namelist parameter in the runscript is filled in correctly, the runscript has to be saved. Afterwards by typing
./exp.testsuite.lifetime_tracer_test.run
a job can be submitted to the respective HPC-System. Type the terminal command
squeue
to view a list of your submitted and currently running and jobs.
By changing in the output directory (which is according to our runscript /hkfs/work/workspace/scratch/hp8526-liftime_tracer_test
you can check the slurm file for possible errors and run times after your job has been run through.
In the output directory you can also find all output data for postprocessing in netCDF format.