CAMS aerosol climatology

Hello,

I am having trouble to use the CAMS aerosol climatology with irad_aero = 7. I have put all information that I have in the post below. If you have ideas/comments what I could check or try next I would appreciate them.

I am following the steps from the “Reports on ICON 011” and the description in the `icon-model/scripts/preprocessing/make_camsclim_onICONgrid.sh` script to generate input files from the `aerosol_cams_climatology_49r2_1951-2019_4D_orig.nc` file. Those are stored alongside the grid files `c3sar_DOM.nc` as `icon_cams_clim_c3sar_DOM.nc` at `/work/bb1555/user/kolja/data/icon/grids-extpar/c3sar/`.

I adjusted the radiation_nml and the cams_aero_filename parameter.

&radiation_nml
 ecrad_data_path             = "${basedir}/externals/ecrad/data/"
 irad_o3     = 79
 irad_aero   = 7
 cams_aero_filename = "${grids_folder}/icon_cams_clim_${domain_name}_DOM<idom>.nc"
...
/

ICON fails when trying to read the file in.

   0:  mo_nwp_phy_init: init ECRAD
   0:  mo_nwp_ecrad_init::setup_ecrad: Setup of ecRad radiation
   0:  nwp_aerosol_init opening CAMS 3D climatology file:: /work/bb1555/user/kolja/data/icon/grids-extpar/c3sar/icon_cams_clim_c3sar_DOM01.nc
   0:  mo_read_netcdf_distributed_base::distrib_nf_open_base: /work/bb1555/user/kolja/data/icon/grids-extpar/c3sar/icon_cams_clim_c3sar_DOM01.nc
 870: [l40142:637311:0:637311] Caught signal 11 (Segmentation fault: address not mapped to object at address 0x11bfe860)
 133: [l40143:724364:0:724364] Caught signal 11 (Segmentation fault: address not mapped to object at address 0x11c898a0)

[ skipping 100+ similar lines ]

 551: [l40124:541278:0:541278] Caught signal 11 (Segmentation fault: address not mapped to object at address 0x11f925e0)
1008: ==== backtrace (tid: 923435) ====
1008:  0 0x0000000000012990 __funlockfile()  :0
1008:  1 0x00000000012415d2 mo_interpolate_time_mp_time_intp_monthlyclim_final_r1_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:504
1008:  2 0x00000000012415d2 mo_interpolate_time_mp_time_intp_monthlyclim_final_r1_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:504
1008:  3 0x0000000002b04a84 for_finalize()  ???:0
1008:  4 0x0000000001241a5a mo_interpolate_time_mp_time_intp_monthlyclim_init_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:454
1008:  5 0x0000000001959c8c mo_nwp_aerosol_mp_nwp_aerosol_init_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_phy_nwp/mo_nwp_aerosol.f90:170
1008:  6 0x0000000001aa521f mo_nwp_phy_init_mp_init_nwp_phy_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_phy_nwp/mo_nwp_phy_init.f90:1078
1008:  7 0x000000000137867f mo_nh_stepping_mp_perform_nh_stepping_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_dyn_iconam/mo_nh_stepping.f90:468
1008:  8 0x0000000000a6bebc mo_atmo_nonhydrostatic_mp_atmo_nonhydrostatic_()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/mo_atmo_nonhydrostatic.f90:284
1008:  9 0x000000000061e65e mo_atmo_model_mp_atmo_model_()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/mo_atmo_model.f90:214
1008: 10 0x0000000000587999 MAIN__()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/icon.f90:248
1008: 11 0x0000000000586d62 main()  ???:0
1008: 12 0x000000000003a865 __libc_start_main()  ???:0
1008: 13 0x0000000000586c6e _start()  ???:0
1008: =================================
1010: ==== backtrace (tid: 923437) ====
1010:  0 0x0000000000012990 __funlockfile()  :0
1010:  1 0x00000000012415d2 mo_interpolate_time_mp_time_intp_monthlyclim_final_r1_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:504
1010:  2 0x00000000012415d2 mo_interpolate_time_mp_time_intp_monthlyclim_final_r1_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:504
1010:  3 0x0000000002b04a84 for_finalize()  ???:0
1010:  4 0x0000000001241a5a mo_interpolate_time_mp_time_intp_monthlyclim_init_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:454
1010:  5 0x0000000001959c8c mo_nwp_aerosol_mp_nwp_aerosol_init_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_phy_nwp/mo_nwp_aerosol.f90:170
1010:  6 0x0000000001aa521f mo_nwp_phy_init_mp_init_nwp_phy_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_phy_nwp/mo_nwp_phy_init.f90:1078
1010:  7 0x000000000137867f mo_nh_stepping_mp_perform_nh_stepping_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_dyn_iconam/mo_nh_stepping.f90:468
1010:  8 0x0000000000a6bebc mo_atmo_nonhydrostatic_mp_atmo_nonhydrostatic_()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/mo_atmo_nonhydrostatic.f90:284
1010:  9 0x000000000061e65e mo_atmo_model_mp_atmo_model_()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/mo_atmo_model.f90:214
1010: 10 0x0000000000587999 MAIN__()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/icon.f90:248
1010: 11 0x0000000000586d62 main()  ???:0
1010: 12 0x000000000003a865 __libc_start_main()  ???:0
1010: 13 0x0000000000586c6e _start()  ???:0
1010: =================================
1009: ==== backtrace (tid: 923436) ====
1009:  0 0x0000000000012990 __funlockfile()  :0
1009:  1 0x00000000012415d2 mo_interpolate_time_mp_time_intp_monthlyclim_final_r1_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:504
1009:  2 0x00000000012415d2 mo_interpolate_time_mp_time_intp_monthlyclim_final_r1_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:504
1009:  3 0x0000000002b04a84 for_finalize()  ???:0
1009:  4 0x0000000001241a5a mo_interpolate_time_mp_time_intp_monthlyclim_init_()  /home/b/b383631/workspace/model/icon/icon-model/src/shared/mo_interpolate_time.f90:454
1009:  5 0x0000000001959c8c mo_nwp_aerosol_mp_nwp_aerosol_init_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_phy_nwp/mo_nwp_aerosol.f90:170
1009:  6 0x0000000001aa521f mo_nwp_phy_init_mp_init_nwp_phy_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_phy_nwp/mo_nwp_phy_init.f90:1078
1009:  7 0x000000000137867f mo_nh_stepping_mp_perform_nh_stepping_()  /home/b/b383631/workspace/model/icon/icon-model/src/atm_dyn_iconam/mo_nh_stepping.f90:468
1009:  8 0x0000000000a6bebc mo_atmo_nonhydrostatic_mp_atmo_nonhydrostatic_()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/mo_atmo_nonhydrostatic.f90:284
1009:  9 0x000000000061e65e mo_atmo_model_mp_atmo_model_()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/mo_atmo_model.f90:214
1009: 10 0x0000000000587999 MAIN__()  /home/b/b383631/workspace/model/icon/icon-model/src/drivers/icon.f90:248
1009: 11 0x0000000000586d62 main()  ???:0
1009: 12 0x000000000003a865 __libc_start_main()  ???:0
1009: 13 0x0000000000586c6e _start()  ???:0
1009: =================================
srun: error: l40146: tasks 1008-1010: Segmentation fault
srun: Terminating StepId=27476606.0
   0: [2026-09-15T17:55:03.114] error: *** STEP 27476606.0 ON l40119 CANCELLED AT 2026-09-15T17:55:03 DUE TO TASK FAILURE ***
 390: forrtl: error (78): process killed (SIGTERM)

The path specified in the logfile exists. The file is not damaged and can be read with f.e. ncdump. The `:number_of_grid_used = 99 ` and `:uuidOfHGrid = “7fad9f84-2562-8608-875c-071c55c029c0”` match the grid of the domain.

ICON2026.04 was build out of sourceon levante with:

../icon-model/config/dkrz/levante.intel --disable-art --disable-jsbach --disable-quincy

 ICON MPI interface runtime information:
 mo_mpi::start_mpi Used MPI version: 3.1
 mo_mpi::start_mpi ICON: Globally run on 1 mpi processes.

 Single processor run.

 executable: ./bin/icon
 date: 20260916
 time: 094429
 user: Jan Kolja Wagner (b383631)
 host: levante5 (Linux 4.18.0-553.157.1.el8_10.x86_64 x86_64)
 version: 2026.04
 revision: icon-2026.04-public-0-g8597da45ef4b86323f3fb844caedc4ae5e1ffc01
 repository: git@gitlab.dkrz.de:icon/icon-model.git
 local branch: release-2026.04-public
 application libraries:
   ECRAD: ecrad-safeguard-09666303-13-g19ceb48ac61ea1cab148149b65f7a496cb5d6626
   RTE-RRTMGP: v1.7-18-g0a8f3011a07299ca7d2bdd0de59686746340379b
 infrastructure and support libraries:
   MEMMAN: 1.0.0-0-g90bd21b062b0a7a1c6f3b8675cce2098a1ca0045
   ICONMATH: 1.3.0-0-g622c01ba78e4fbb19fdf5f3c9f18a90b1e551389
   FORTRAN-SUPPORT: 2.2.1-0-g34246610b17db29f214fb2f95ca1c9087f09b89c
   COMIN:
     version: 0.5.2
     revision: icon-2026.04-public-0-g8597da45ef4b86323f3fb844caedc4ae5e1ffc01
   YAC:
     version: 3.14.0
     revision: v3.14.0_p1-0-ge796555f4319712c5f49713409d4e2a56769be22
   MTIME: 1.3.0-1-g04f02ccbd765104a1570355c5d3fdfcfdad11c4c
   CDI:
     version: 2.6.0
     revision: cdi-2.6.0-1-g60e0a3b9899c8021437686d720702a978a5bb63d
   YAXT: v0.11.5.1-1-g85c470071b8628814df5c77107b1ac70273a460a
 other libraries:
   ECCODES: 2.27.0
   NetCDF-C: 4.9.3
   MPI: Open MPI v4.1.2, package: Open MPI k202066@levante7.atos.local Distribution, ident: 4.1.2, repo rev: v4.1.2, Nov 24, 2021
 compilers:
   Fortran: Intel Classic 2021.5.0 (Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.5.0 Build 20211109_000000)
   C: Intel Classic 2021.5.0 (GNU 11.2.0)

PS: workspace is a shortcut to my part of the projects work directory:

/home/b/b383631/workspace -> /work/bb1555/user/kolja/

Hello,

not sure whether this helps, but did you read “Reports on ICON - 012”?

Cheers,
Moritz

Hey Moritz,
I was not aware of this. After a first skip through this could be a different way to achieve the same goal. I use a 2° circular domain around the DWD observatory in Lindenberg, forced by ICON-D2 and resolution down to 250m. I am not shure if I am the targeted user of the workflow mentioned there.

As my interest is mainly the cloud-radiation interaction I “just” wanted to have a more recent aerosol climatology in the simulation to improve the “baseline” of a cloud-free case, when compared to observations from BSRN data.

This seems to be a bug with the Intel Fortran compiler and Fortran’s FINAL routines. These routines cause all sorts of trouble and will be removed in the next release. For now, you can apply this patch

diff --git a/src/atm_phy_nwp/mo_nwp_aerosol.f90 b/src/atm_phy_nwp/mo_nwp_aerosol.f90
index 1d3ca7d599..506868e301 100644
--- a/src/atm_phy_nwp/mo_nwp_aerosol.f90
+++ b/src/atm_phy_nwp/mo_nwp_aerosol.f90
@@ -111,6 +111,9 @@ CONTAINS
     INTEGER :: jg
 
     IF (ALLOCATED(cams_intp)) THEN
+      DO jg = 1, n_dom
+        CALL cams_intp(jg)%finalize
+      END DO
       DEALLOCATE(cams_intp)
     END IF
 
diff --git a/src/shared/mo_interpolate_time.f90 b/src/shared/mo_interpolate_time.f90
index 4fd2f4351b..e3ce49426d 100644
--- a/src/shared/mo_interpolate_time.f90
+++ b/src/shared/mo_interpolate_time.f90
@@ -111,7 +111,6 @@ MODULE mo_interpolate_time
     PROCEDURE :: get_weight => time_intp_transient_get_weight
     PROCEDURE :: get_npromz => time_intp_transient_get_npromz
 
-    FINAL :: time_intp_transient_final_r0, time_intp_transient_final_r1
   END TYPE t_time_intp_transient
 
   !> Interpolation for monthly climatologies.
@@ -131,8 +130,6 @@ MODULE mo_interpolate_time
     PROCEDURE :: read_new_data => time_intp_monthlyclim_read_new_data
     PROCEDURE :: get_weight => time_intp_monthlyclim_get_weight
     PROCEDURE :: get_npromz => time_intp_monthlyclim_get_npromz
-
-    FINAL :: time_intp_monthlyclim_final_r0, time_intp_monthlyclim_final_r1
   END TYPE t_time_intp_monthlyclim
 
   INTEGER, PARAMETER :: intModeConstant          = 0

Thanks a lot. ICON compiled without issues, the climatology was accepted and the resulting global surface irradiance matches the observations within 1% for my case, which is better than expected and much better than before.