Skip to content

Commit 121974e

Browse files
author
corink21
committed
Added icon-art-full-chem case and related tools
1 parent f4774f3 commit 121974e

File tree

13 files changed

+2660
-0
lines changed

13 files changed

+2660
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Configuration file for the 'icon-art-full-chem-test' case with ICON
2+
3+
workflow: icon-art-full-chem
4+
constraint: mc
5+
run_on: cpu
6+
compute_queue: normal
7+
compute_account: s1317
8+
ntasks_per_node: 128
9+
restart_step: PT03H
10+
startdate: 2019-01-01T00:00:00Z
11+
enddate: 2019-01-01T09:00:00Z
12+
13+
eccodes_dir: /capstor/store/cscs/empa/em05/ckeller/spack-c2sm/spack/opt/spack/linux-sles15-zen2/gcc-12.3.0/eccodes-2.25.0-hrevcu72qaiav7csmdhgth323uozzutd/share/eccodes/definitions
14+
latbc_filename: LBC_<y><m><d><h>.nc
15+
inidata_prefix: IC_
16+
inidata_nameformat: '%Y%m%d%H'
17+
inidata_filename_suffix: .nc
18+
lbcdata_prefix: LBC_
19+
lbcdata_nameformat: '%Y%m%d%H'
20+
lbcdata_filename_suffix: .nc
21+
output_filename: icon-full-chem-test
22+
filename_format: <output_filename>_<ddhhmmss>
23+
lateral_boundary_grid_order: lateral_boundary
24+
art_input_folder: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/art
25+
26+
walltime:
27+
prepare_icon: '00:20:00'
28+
prepare_art_full_chem: '00:30:00'
29+
icon: '01:00:00'
30+
31+
meteo:
32+
dir: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/meteo
33+
prefix: era5_
34+
nameformat: '%Y%m%d%H'
35+
suffix: .grb
36+
inc: 3
37+
38+
chem:
39+
dir: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/chem
40+
prefix: camchem_
41+
nameformat: '%Y%m%d%H'
42+
suffix: .nc
43+
inc: 3
44+
icbc_filename: camchem-20190101-20190201.nc
45+
ref_date: '2000-03-01 00:00:00'
46+
47+
48+
input_files:
49+
radiation_grid_filename: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/grid/base_grid.nc
50+
dynamics_grid_filename: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/grid/icon_R03B07_DOM01.nc
51+
map_file_latbc: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/grid/map_file.latbc
52+
lateral_boundary_grid: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/grid/lateral_boundary_DOM01.grid.nc
53+
extpar_filename: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/grid/extpar_DOM01.nc
54+
cldopt_filename: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/rad/rrtm_cldopt.nc
55+
lrtm_filename: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/rad/rrtmg_lw.nc
56+
map_file_ana: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/mapping/map_file.ana
57+
meccatracer_xml_filename: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/xml/mecca_tracers.xml
58+
oem_vertical_profiles_nc: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/oem/vertical_profiles.nc
59+
oem_gridded_emissions_nc: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/oem/oem_gridded_emissions.nc
60+
oem_hourofday_nc: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/oem/hourofday.nc
61+
oem_dayofweek_nc: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/oem/dayofweek.nc
62+
oem_monthofyear_nc: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/oem/monthofyear.nc
63+
aerodyn_tracers: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/aerodyn/tracers_aerosol.xml
64+
aerodyn_modes: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/aerodyn/modes.xml
65+
aerodyn_coag: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/aerodyn/coagulate.xml
66+
aerodyn_emiss: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/aerodyn/emiss.xml
67+
aerodyn_diag: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/aerodyn/diag.xml
68+
69+
icon:
70+
binary_file: /capstor/store/cscs/userlab/s1317/ckeller/ICON-ART/Running_model/proc_chain_data/input/test-proc-chain-full-chem/bin/icon
71+
runjob_filename: icon_runjob.cfg
72+
era5_icjob: icon_era5_ic.sh
73+
era5_lbcjob: icon_era5_lbc.sh
74+
chem_icjob: icon_camchem_ic.sh
75+
chem_lbcjob: icon_camchem_lbc.sh
76+
compute_queue: normal
77+
walltime: '01:00:00'
78+
np_tot: 8
79+
np_io: 3
80+
np_restart: 1
81+
np_prefetch: 1
82+
timestep: 120.
83+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/bin/bash
2+
3+
cd {cfg.icon_input_icbc}
4+
5+
# ---------------------------------
6+
# -- Pre-processing
7+
# ---------------------------------
8+
9+
rm -f {cfg.icon_input_icbc}/{cfg.chem_prefix}{cfg.startdate_sim_yyyymmddhh}_ic_icon{cfg.inidata_filename_suffix}
10+
11+
# -- Change variable and coordinates names to be consistent with MECCA nomenclature
12+
cdo setpartabn,partab_chem,convert {cfg.icon_input_icbc}/{cfg.chem_prefix}{cfg.startdate_sim_yyyymmddhh}_ic{cfg.chem_suffix} data_in.nc
13+
14+
# ---------------------------------
15+
# -- Re-mapping
16+
# ---------------------------------
17+
18+
# -- Retrieve the triangular horizontal grid
19+
cdo -s selgrid,2 {cfg.input_files_scratch_dynamics_grid_filename} triangular-grid.nc
20+
21+
# -- Create the weights for remapping CAM-Chem (lat,lon) grid onto the triangular grid
22+
echo "creating weights"
23+
cdo genbil,triangular-grid.nc data_in.nc weights.nc
24+
25+
# -- Remap
26+
cdo -s remap,triangular-grid.nc,weights.nc data_in.nc chem_final.nc
27+
rm data_in.nc triangular-grid.nc
28+
29+
# ---------------------------------
30+
# -- Post-processing
31+
# ---------------------------------
32+
33+
# -- Rename dimensions and order alphabetically
34+
ncrename -h -d cell,ncells chem_final.nc
35+
ncrename -h -d nv,vertices chem_final.nc
36+
ncks chem_final.nc {cfg.icon_input_icbc}/{cfg.chem_prefix}{cfg.startdate_sim_yyyymmddhh}_ic_icon{cfg.inidata_filename_suffix}
37+
rm chem_final.nc weights.nc
38+
39+
# -- Clean up
40+
rm {cfg.icon_input_icbc}/{cfg.chem_prefix}{cfg.startdate_sim_yyyymmddhh}_ic{cfg.chem_suffix}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/bash
2+
3+
cd {cfg.icon_input_icbc}
4+
5+
# -- Loop over file list
6+
i=0
7+
echo "DATAFILELIST is {datafile_list_chem}"
8+
for datafilename in {datafile_list_chem} ; do
9+
datafile="${{datafilename##*/}}" # get filename without path
10+
outdatafile=${{datafile%.*}} # get filename without suffix
11+
((i++))
12+
13+
# ---------------------------------
14+
# -- Pre-processing
15+
# ---------------------------------
16+
17+
rm -f {cfg.icon_input_icbc}/${{outdatafile}}_icon{cfg.inidata_filename_suffix}
18+
19+
# -- Change variable and coordinates names to be consistent with ICON nomenclature
20+
cdo setpartabn,partab_chem,convert $datafilename data_in.nc
21+
22+
# ---------------------------------
23+
# -- Re-mapping
24+
# ---------------------------------
25+
26+
# -- Retrieve the lateral boundary grid
27+
cdo -s selgrid,2 {cfg.input_files_scratch_lateral_boundary_grid} triangular-grid.nc
28+
29+
# -- Create the weights for remapping CAM-Chem data from latlon grid onto the triangular grid
30+
if [[ $i == "1" ]] ; then
31+
echo "creating weights"
32+
cdo genbil,triangular-grid.nc data_in.nc weights.nc
33+
fi
34+
35+
# -- Remap
36+
cdo -s remap,triangular-grid.nc,weights.nc data_in.nc chem_final.nc
37+
rm data_in.nc triangular-grid.nc
38+
39+
# ---------------------------------
40+
# -- Post-processing
41+
# ---------------------------------
42+
43+
# -- Rename dimensions and order alphabetically
44+
ncrename -h -d cell,ncells chem_final.nc
45+
ncrename -h -d nv,vertices chem_final.nc
46+
ncks chem_final.nc {cfg.icon_input_icbc}/${{outdatafile}}_icon{cfg.inidata_filename_suffix}
47+
rm chem_final.nc
48+
49+
# -- Clean up
50+
rm $datafilename
51+
done
52+
# -- Clean up
53+
rm weights.nc
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#!/bin/bash
2+
3+
cd {cfg.icon_input_icbc}
4+
5+
# ---------------------------------
6+
# -- Pre-processing
7+
# ---------------------------------
8+
9+
rm -f {cfg.icon_input_icbc}/{cfg.meteo_prefix}{cfg.startdate_sim_yyyymmddhh}_ic{cfg.inidata_filename_suffix}
10+
11+
# -- Convert the GRIB files to NetCDF
12+
cdo -t ecmwf -f nc copy {cfg.meteo_dir}/{cfg.meteo_prefix}{cfg.startdate_sim_yyyymmddhh}{cfg.meteo_suffix} era5_ori.nc
13+
14+
# -- Change variable and coordinates names to be consistent with ICON nomenclature
15+
cdo setpartabn,partab_meteo,convert era5_ori.nc tmp.nc
16+
17+
# -- Order the variables alphabetically
18+
ncks tmp.nc data_in.nc
19+
rm tmp.nc era5_ori.nc
20+
21+
# ---------------------------------
22+
# -- Re-mapping
23+
# ---------------------------------
24+
25+
# -- Retrieve the triangular grid
26+
cdo -s selgrid,2 {cfg.input_files_scratch_dynamics_grid_filename} triangular-grid.nc
27+
28+
# -- Create the weights for remapping era5 latlon grid onto the triangular grid
29+
cdo gendis,triangular-grid.nc data_in.nc weights.nc
30+
31+
# -- Extract the land-sea mask variable
32+
cdo selname,LSM data_in.nc LSM_in.nc
33+
ncrename -h -v LSM,FR_LAND LSM_in.nc
34+
cdo selname,FR_LAND {cfg.input_files_scratch_extpar_filename} LSM_out_tmp.nc
35+
36+
# -- Add time dimension to LSM_out.nc
37+
ncecat -O -u time LSM_out_tmp.nc LSM_out_tmp.nc
38+
ncks -h -A -v time LSM_in.nc LSM_out_tmp.nc
39+
40+
# -- Create two different files for land- and sea-mask
41+
# --------------------------------------------------
42+
# -- Comments:
43+
# -- setctomoss,0. = setting missing values to 0.
44+
# -- gtc = greater than constant (o(t,x) = 1 if i(t,x) > const, o(t,x) = 0 else)
45+
# -- ltc = lower than constant (o(t,x) = 1 if i(t,x) < const, o(t,x) = 0 else)
46+
# --------------------------------------------------
47+
cdo -L setctomiss,0. -ltc,0.5 LSM_in.nc oceanmask_in.nc
48+
cdo -L setctomiss,0. -gec,0.5 LSM_in.nc landmask_in.nc
49+
cdo -L setctomiss,0. -ltc,0.5 LSM_out_tmp.nc oceanmask_out.nc
50+
cdo -L setctomiss,0. -gec,0.5 LSM_out_tmp.nc landmask_out.nc
51+
cdo setrtoc2,0.5,1.0,1,0 LSM_out_tmp.nc LSM_out.nc
52+
rm LSM_in.nc LSM_out_tmp.nc
53+
54+
# -- Select surface sea variables defined only on sea
55+
ncks -h -v SST,CI data_in.nc datasea_in.nc
56+
57+
# -- Select surface variables defined on both that must be remapped differently on sea and on land
58+
ncks -h -v SKT,STL1,STL2,STL3,STL4,ALB_SNOW,W_SNOW,T_SNOW data_in.nc dataland_in.nc
59+
60+
# -----------------------------------------------------------------------------
61+
# -- Remap land and ocean area differently for variables
62+
# -----------------------------------------------------------------------------
63+
64+
# -- Ocean part
65+
# -----------------
66+
67+
# -- Apply the ocean mask (by dividing)
68+
cdo div dataland_in.nc oceanmask_in.nc tmp1_land.nc
69+
cdo div datasea_in.nc oceanmask_in.nc tmp1_sea.nc
70+
71+
# -- Set missing values to a distance-weighted average
72+
cdo setmisstodis tmp1_land.nc tmp2_land.nc
73+
cdo setmisstodis tmp1_sea.nc tmp2_sea.nc
74+
75+
# -- Remap
76+
cdo remap,triangular-grid.nc,weights.nc tmp2_land.nc tmp3_land.nc
77+
cdo remap,triangular-grid.nc,weights.nc tmp2_sea.nc tmp3_sea.nc
78+
79+
80+
# -- Apply the ocean mask to remapped variables (by dividing)
81+
cdo div tmp3_land.nc oceanmask_out.nc dataland_ocean_out.nc
82+
cdo div tmp3_sea.nc oceanmask_out.nc datasea_ocean_out.nc
83+
84+
# -- Clean the repository
85+
rm tmp*.nc oceanmask*.nc
86+
87+
# -- Land part
88+
# -----------------
89+
90+
cdo div dataland_in.nc landmask_in.nc tmp1.nc
91+
cdo setmisstodis tmp1.nc tmp2.nc
92+
cdo remap,triangular-grid.nc,weights.nc tmp2.nc tmp3.nc
93+
cdo div tmp3.nc landmask_out.nc dataland_land_out.nc
94+
rm tmp*.nc landmask*.nc dataland_in.nc datasea_in.nc
95+
96+
# -- merge remapped land and ocean part
97+
# --------------------------------------
98+
99+
cdo ifthenelse LSM_out.nc dataland_land_out.nc dataland_ocean_out.nc dataland_out.nc
100+
rm dataland_ocean_out.nc dataland_land_out.nc
101+
102+
# remap the rest and merge all files
103+
# --------------------------------------
104+
105+
# -- Select all variables apart from these ones
106+
ncks -h -x -v SKT,STL1,STL2,STL3,STL4,ALB_SNOW,W_SNOW,T_SNOW,SST,CI,LSM data_in.nc datarest_in.nc
107+
# -- Remap
108+
cdo -s remap,triangular-grid.nc,weights.nc datarest_in.nc era5_final.nc
109+
rm datarest_in.nc data_in.nc
110+
111+
# -- Fill NaN values for SST and CI
112+
cdo setmisstodis -selname,SST,CI datasea_ocean_out.nc dataland_ocean_out_filled.nc
113+
rm datasea_ocean_out.nc
114+
115+
# -- Merge remapped files plus land-sea mask from EXTPAR
116+
ncks -h -A dataland_out.nc era5_final.nc
117+
ncks -h -A dataland_ocean_out_filled.nc era5_final.nc
118+
ncks -h -A -v FR_LAND LSM_out.nc era5_final.nc
119+
ncrename -h -v FR_LAND,LSM era5_final.nc
120+
rm LSM_out.nc dataland_out.nc dataland_ocean_out_filled.nc
121+
122+
# ---------------------------------
123+
# -- Post-processing
124+
# ---------------------------------
125+
126+
ncrename -h -d cell,ncells era5_final.nc
127+
ncrename -h -d nv,vertices era5_final.nc
128+
ncks era5_final.nc {cfg.icon_input_icbc}/{cfg.meteo_prefix}{cfg.startdate_sim_yyyymmddhh}_ic{cfg.inidata_filename_suffix}
129+
rm era5_final.nc
130+
131+
# -- Clean up
132+
rm triangular-grid.nc weights.nc
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
3+
cd {cfg.icon_input_icbc}
4+
5+
# -- Loop over file list
6+
i=0
7+
for datafilename in {datafile_list_meteo} ; do
8+
datafile="${{datafilename##*/}}" # get filename without path
9+
outdatafile=${{datafile%.*}} # get filename without suffix
10+
((i++))
11+
12+
# ---------------------------------
13+
# -- Pre-processing
14+
# ---------------------------------
15+
16+
rm -f {cfg.icon_input_icbc}/${{outdatafile}}_lbc{cfg.inidata_filename_suffix}
17+
18+
# -- Convert the GRIB files to NetCDF
19+
cdo -t ecmwf -f nc copy $datafilename era5_ori.nc
20+
21+
# -- Change variable and coordinates names to be consistent with ICON nomenclature
22+
cdo setpartabn,partab_meteo,convert era5_ori.nc tmp.nc
23+
# -- Order the variables alphabetically
24+
ncks tmp.nc data_in.nc
25+
rm tmp.nc era5_ori.nc
26+
27+
# ---------------------------------
28+
# -- Re-mapping
29+
# ---------------------------------
30+
31+
# -- Retrieve the lateral boundary grid
32+
cdo -s selgrid,2 {cfg.input_files_scratch_lateral_boundary_grid} triangular-grid.nc
33+
34+
# -- Create the weights for remapping era5 latlon grid onto the triangular grid
35+
if [[ $i == "1" ]] ; then
36+
echo "creating weights"
37+
cdo gendis,triangular-grid.nc data_in.nc weights.nc
38+
fi
39+
40+
# -- Remap
41+
cdo -s remap,triangular-grid.nc,weights.nc data_in.nc era5_final.nc
42+
rm data_in.nc triangular-grid.nc
43+
44+
# ---------------------------------
45+
# -- Post-processing
46+
# ---------------------------------
47+
48+
ncrename -h -d cell,ncells era5_final.nc
49+
ncrename -h -d nv,vertices era5_final.nc
50+
ncks era5_final.nc {cfg.icon_input_icbc}/${{outdatafile}}_lbc{cfg.inidata_filename_suffix}
51+
rm era5_final.nc
52+
done
53+
# -- Clean up
54+
rm weights.nc

0 commit comments

Comments
 (0)