Create Hands on ICON data analysis for beginners authored by Dian Putrasahan's avatar Dian Putrasahan
# Hands-On ICON data analysis for beginners
[toc]
-------------
## Workshop Schedule
**Date:** January 18, 2024
**Time:** 9:30 AM - 5:00 PM
**Location:** Room 002
**Overview:**
This one-day workshop will introduce participants to ICON data analysis, covering data access, variables, grids, plotting, remapping, and analysis techniques.
**Notes:**
- Drinks will be available throughout the workshop.
- Participants should bring their laptops and have access to Levante
<details><summary><b> Workshop Agenda </b></summary>
**09:30 - 09:40 Welcome and Introduction**
- Overview of the workshop objectives
**09:40 - 10:40 Availability and access to ICON**
Available ICON Simulations (Ruby & Sapphire)
Accessing ICON Data
- How to access raw output vs catalogues
- Understanding variable outputs
**10:40 - 10:50 short break**
**10:50 - 12:00 Grids, plotting, remapping**
Working with Grids (native vs healpix)
Plotting ICON Data
- 2D maps: native grid, healpix, regular
- python and command line examples
Remapping and Interpolation
- Techniques for remapping ICON data
- Interpolation of atmospheric model levels to pressure levels
**12:00 - 13:15 Lunch Break**
**13:15 – 14:45 Model evaluation packages**
- Quickplots with pyICON
- Climate Variability Diagnostic Package (CVDP)
**14:45 - 15:00 short break**
**15:00 - 16:30 2D Bivariate Time Series Analysis**
- Correlation, regression, and spectral analysis
- Practical applications
**16:30 - 17:00 Wrap-up and Feedback**
- Additional tips and resources
- Feedback collection and closing remarks
</details>
<details><summary><b> Registered participants </b></summary>
1) Doseok Lee
2) Rolf Schimmer
3) Masaki Toda
4) Tomas Escaff
5) Jiayu Zhang
6) Eduardo Moreno-Chamarro
7) Thomas Raddatz
8) Maria-Jesus Rapanague
9) Hongdou Fan
10) Katja Lohmann
11) Quan Liu
12) Danai Filippou
13) Jiajun Wu
14) Josipa Župani
15) Otaiba Yahya
16) Dakuan Yu
Instructors:
Dian Putrasahan
Florian Ziemen
</details>
## Important reference
1) Hackthon 2024 (nextGEMS cycle4, EERIE, WarmWorld) [starter pack](https://pad.gwdg.de/nSKolAzGQY2zLz3oOr0QSQ)
2) easygems reference: [https://easy.gems.dkrz.de/Processing/index.html](https://easy.gems.dkrz.de/Processing/index.html)
3) pyICON
- documentation: [https://m300602.gitlab-pages.dkrz.de/pyicon/](https://m300602.gitlab-pages.dkrz.de/pyicon/)
- gitlab site: [https://gitlab.dkrz.de/m300602/pyicon](https://gitlab.dkrz.de/m300602/pyicon)
## Available simulations
### Ruby as of 10.12.2024
<details><summary> <b> CMIP7 DECK experiments (ICON-XPP) </b></summary>
[gitlab DECK info](https://gitlab.dkrz.de/icon/icon-nwp/-/wikis/ICON-Seamless/DECK-Experiments)
| Simulation (expid) | Project | Resolutions | start date | end date | Location (on Levante) | Contact |
| --- | --- | --- | --- | --- | --- | --- |
| slo1826 | CMIP7 - PICTRL | r2b5l130 atmos / r2b7 ocean | 1000-01-01 | 1900-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1826 | Stephan Lorenz |
| slo1827 | CMIP7 - 4xCO2 | r2b5l130 atmos / r2b7 ocean | 1750-01-01 | 1949-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1827 | Stephan Lorenz |
| slo1828 | CMIP7 - 1%CO2 | r2b5l130 atmos / r2b7 ocean | 1750-01-01 | 1949-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1828 | Stephan Lorenz |
| slo1774 | CMIP7 - PICTRL | r2b4l90 atmos / r2b6 ocean | 1000-01-01 | 2100-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdint/experiments/slo1774 | Stephan Lorenz |
| slo1781 | CMIP7 - 4xCO2 | r2b4l90 atmos / r2b6 ocean | 1750-01-01 | 1949-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdint/experiments/slo1781 | Stephan Lorenz |
| slo1782 | CMIP7 - 1%CO2 | r2b4l90 atmos / r2b6 ocean | 1750-01-01 | 1949-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdint/experiments/slo1782 | Stephan Lorenz |
| tvp1826\_001 | CMIP7 - historical | r2b5l130 atmos / r2b7 ocean | 1850-01-01 | 2014-12-31 | /work/mh0287/b364148/Icon/Git\_lev/icon.nwp.hdext.intno/experiments/tvp1826\_001 | Trang Pham |
| tvp1826\_002 | CMIP7 - historical | r2b5l130 atmos / r2b7 ocean | 1850-01-01 | 2014-12-31 | /work/mh0287/b364148/Icon/Git\_lev/icon.nwp.hdext.intno/experiments/tvp1826\_002 | Trang Pham |
| tvp1826\_003 | CMIP7 - historical | r2b5l130 atmos / r2b7 ocean | 1850-01-01 | 2014-12-31 | /work/mh0287/b364148/Icon/Git\_lev/icon.nwp.hdext.intno/experiments/tvp1826\_003 | Trang Pham |
| tvp1774\_001 | CMIP7 - historical | r2b4l90 atmos / r2b6 ocean | 1850-01-01 | 2014-12-31 | /work/mh0287/b364148/Icon/Git\_lev/icon.nwp.hdext.intno/experiments/tvp1774\_001 | Trang Pham |
| tvp1774\_002 | CMIP7 - historical | r2b4l90 atmos / r2b6 ocean | 1850-01-01 | 2014-12-31 | /work/mh0287/b364148/Icon/Git\_lev/icon.nwp.hdext.intno/experiments/tvp1774\_002 | Trang Pham |
| tvp1774\_003 | CMIP7 - historical | r2b4l90 atmos / r2b6 ocean | 1850-01-01 | 2014-12-31 | /work/mh0287/b364148/Icon/Git\_lev/icon.nwp.hdext.intno/experiments/tvp1774\_003 | Trang Pham |
</details>
<details><summary> <b> HAMOCC and their counterparts (ICON-XPP) </b></summary>
| Simulation (expid) | Project | Resolutions | start date | end date | Location (on Levante) | Contact |
| --- | --- | --- | --- | --- | --- | --- |
| slo1802 | PICTRL | r2b5l130 atmos / r2b7 ocean | 1300-01-01 | 2299-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1802 | Stephan Lorenz |
| FC04\_XPPslo1802 | HAMOCC - PICTRL | r2b5l130 atmos / r2b7 ocean | 2350-01-01 | 2384-12-31 | /work/uo1451/m300805/projects/seamless/icon-XPP-20240717/build.intel-hdext/experiments/FC04\_XPPslo1802 | Fatemeh Chegini |
| slo1774 | CMIP7 - PICTRL | r2b4l90 atmos / r2b6 ocean | 1000-01-01 | 2100-12-31 | /work/mh0287/m211032/Icon/Git\_lev/icon.XPP.20240717/build.intel-hdint/experiments/slo1774 | Stephan Lorenz |
| FC001\_XPPslo1774 | HAMOCC - PICTRL | r2b4l90 atmos / r2b6 ocean | 1450-01-01 | 1499-12-31 | /work/uo1451/m300805/projects/seamless/icon-XPP-20240717/build.intel-hdint/experiments/FC001\_XPPslo1774/ | Fatemeh Chegini |
</details>
<details><summary><b>EPOC/ACDC (ICON-Sapphire) </b></summary>
[**pad**](https://pad.gwdg.de/HmxTo9WPQ1OLtj1jACoYUA)
EPOC uses ICON-Sapphire model but hosted under Ruby.
| Simulation (expid) | Project | Resolutions | start date | end date | Location (on Levante) | Contact |
| --- | --- | --- | --- | --- | --- | --- |
| epoc2\_004 | EPOC - SPINUP | r2b8 atmos / r2b9 tele-ocean | 1990-01-01 | 1999-09-30 | /work/bm1313/m211054/epoc2-1/experiments/epoc2\_004/work/run\_\* | Helmuth Haak and Michael Botzet |
| epoc2\_010 | EPOC - 1990 CNTL | r2b8 atmos / r2b9 tele-ocean | 1990-01-01 | still running | /work/bm1313/b383127/epoc-icon-2024.10/experiments/epoc2\_010/work/run\_\*/ | Helmuth Haak and Michael Botzet |
| epoc2\_0?? | EPOC - historical | r2b8 atmos / r2b9 tele-ocean | | | | Helmuth Haak and Michael Botzet |
</details>
<details><summary><b>DRAGON (ICON-XPP) </b></summary>
[**pad**](https://pad.gwdg.de/\_MTO4v0ARYaYVkVh24MtJw)
| Simulation (expid) | Project | Resolutions | start date | end date | Location (on Levante) | Contact |
| --- | --- | --- | --- | --- | --- | --- |
| hel24312\_r5b7\_ctrl | DRAGON - lowres | r2b5 atmos / r2b7 ocean | 1700-01-01 | 1799-12-31 | /work/mh0033/m211054/projects/icon/seamless/icon-2024.10/build_hdext/experiments/hel24312\_r5b7\_ctrl/outdata/ | Helmuth Haak |
| hel24315\_r5b7\_ctrl | DRAGON - lowres | r2b5 atmos / r2b7 ocean | 1700-01-01 | 1799-12-31 | /work/mh0033/m211054/projects/icon/seamless/icon-2024.10/build_hdext/experiments/hel24315\_r5b7\_ctrl/outdata/ | Helmuth Haak |
| hel24316\_r5b7\_ctrl | DRAGON - lowres | r2b5 atmos / r2b7 ocean | 1700-01-01 | 1999-12-31 | /work/mh0033/m211054/projects/icon/seamless/icon-2024.10/build_hdext/experiments/hel24316\_r5b7\_ctrl/outdata/ | Helmuth Haak |
| hel24317\_r5b7\_ctrl | DRAGON - lowres | r2b5 atmos / r2b7 ocean | 1700-01-01 | 1799-12-31 | /work/mh0033/m211054/projects/icon/seamless/icon-2024.10/build_hdext/experiments/hel24317\_r5b7\_ctrl/outdata/ | Helmuth Haak |
| dap010\_r3b7-r2b9 | DRAGON | r3b7 atmos / r2b9 ocean | 1950-01-01 | 1955-02-28 | /work/mh1421/m300466/icon-xpp/icon-2024.10b/build/experiments/dap010\_r3b7-r2b9/ | Dian Putrasahan and Helmuth Haak |
</details>
<details><summary><b>OCEmix (ICON-Sapphire) </b></summary>
These runs uses ICON-Sapphire model, but hosted under Ruby.
| Simulation (expid) | Project | Resolutions | start date | end date | Location (on Levante) | Contact |
| --- | --- | --- | --- | --- | --- | --- |
| mss0008\_r5b8\_ctrl | NextGEMS - ocemix | r2b5 atmos / r2b8 ocean | 1950-01-01 | 2017-12-31 | /work/mh0287/m300731/sensitivity\_exp/icon-2024.07/build/experiments/mss0008\_r5b8\_ctrl/ | Mia Sophie Specht |
| mss0009\_r5b8 | NextGEMS - ocemix (ck=0.2) | r2b5 atmos / r2b8 ocean | 1950-01-01 | 2013-12-31 | /work/mh0287/m300731/sensitivity\_exp/icon-2024.07/build/experiments/mss0009\_r5b8 | Mia Sophie Specht |
</details>
### Sapphire as of MPIM retreat 2024
Detailed information of ICON-Sapphire simulations can be found [here](https://owncloud.gwdg.de/index.php/apps/onlyoffice/s/rgYtnOROmJkmZRg?fileId=3122041030).
<details><summary><b>Table of Sapphire projects and simulations </b></summary>
| Project | Simulations (expid) |
|---|---|
|nextGEMS cycle4 | ngc4008a; ngc4008; ngc4007; ngc4006; ngc4005 |
|nextGEMS cycle3 | ngc3028; ngc3028_bc_land; ngc3542; HAMOCC |
| EERIE | erc1011 (v20231106; v20240618); erc1017 (v20231106; v20240618) |
| C5 | AMIP_CNTL; AMIP_P4K; AMIP_4CO2 |
| PrecipPuzzle | mbe2922; mbe2923; mbe2934; mbe2936; mbe2939 |
| nextGEMS cycle5 | ngc5004 |
</details>
## Data Access via raw output
To access raw output, one needs to know the location of the files. Since most Ruby data has not been catalogued yet, we'll access them directly from their output path. Available Ruby simulations and their respective output locations are tabulated [here](#Ruby-as-of-10122024)
### Command line
Let's take the example from a CMIP7 experiment, `slo1826`.
**Types of output and variables they hold**:
```
outdir=/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1826/
ls ${outdir}/*_1280*.nc
cdo vardes slo1826_atm_3d_ml_12800101T000000Z.nc
```
<details><summary> cdo text dump on variable description </summary>
<img src="https://pad.gwdg.de/uploads/28f33fd4-2d4a-4efd-bdd1-3ab3dc59af0f.png" width="700"/>
</details>
### Python
Here we take the example from a DRAGON simulation.
```python
import xarray as xr
outdir='/work/mh1421/m300466/icon-xpp/icon-2024.10b/build/experiments/dap010_r3b7-r2b9/'
dsa=xr.open_mfdataset(outdir+'dap010_r3b7-r2b9_atm_2d_ml_*.nc')
dsa
```
<details><summary> xarray dataset text dump </summary>
<img src="https://pad.gwdg.de/uploads/3cf6b047-8b05-4504-939a-a928fe33df20.png" width="500"/>
</details>
## Data Access via Catalogue
For catalogues, one does not need to know the location of the data. But you might want to know the name or where the catalogue of interest is located.
| Project Group | Catalogue |
| --- | --- |
| Ruby | /home/k/k202134/dumpster/Hackapalooza/tools/cataloging/datasets/main.yaml |
| Sapphire | https://data.nextgems-h2020.eu/catalog.yaml (default) |
| EERIE | https://raw.githubusercontent.com/eerie-project/intake_catalogues/main/eerie.yaml |
### Command line `query_yaml`
One can use `query_yaml` to browse through the catalogue, look into its tree structure, available streams, output variables, possibly find location of output :smirk:, etc. Some details for the usage of `query_yaml` can be found on [easygems webpage](https://easy.gems.dkrz.de/Processing/Intake/query_yaml.html).
#### To use `query_yaml`, load the necessary modules
```bash
module use /work/k20200/k202134/hsm-tools/outtake/module
module load hsm-tools/unstable
```
#### Designate catalogues
```
rubycat=/home/k/k202134/dumpster/Hackapalooza/tools/cataloging/datasets/main.yaml
sappcat=https://data.nextgems-h2020.eu/catalog.yaml
eeriecat=https://raw.githubusercontent.com/eerie-project/intake_catalogues/main/eerie.yaml
```
#### `query_yaml` commands to play with
> **Ruby**
- `query_yaml -c ${rubycat}` will list a hierarchy of simulations (data tree structure included) that is on the specified catalogue.
<details><summary>text dump snippet from "query_yaml -c ${rubycat}" </summary>
```
cmip7
slo1774
atm_2d_ml
atm_3d_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_fx
oce_ice
oce_moc
oce_mon
slo1781
atm_2d_ml
atm_3d_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
slo1782
atm_2d_ml
atm_3d_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
slo1826
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_fx
oce_ice
oce_moc
oce_mon
slo1827
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
slo1828
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
tvp1774_001
atm_2d_ml
atm_3d_ml
atm_hfreq_inst_ml
atm_hfreq_mean_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
tvp1774_002
atm_2d_ml
atm_3d_ml
atm_hfreq_inst_ml
atm_hfreq_mean_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
tvp1774_003
atm_2d_ml
atm_3d_ml
atm_hfreq_inst_ml
atm_hfreq_mean_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
tvp1826_001
atm_2d_ml
atm_3d_ml
atm_day_pl
atm_hfreq_inst_ml
atm_hfreq_mean_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_day_pl
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
tvp1826_002
atm_2d_ml
atm_3d_ml
atm_day_pl
atm_hfreq_inst_ml
atm_hfreq_mean_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_day_pl
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
tvp1826_003
atm_2d_ml
atm_3d_ml
atm_day_pl
atm_hfreq_inst_ml
atm_hfreq_mean_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_day_pl
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
dragon
dap010_r3b7-r2b9
atm_2d_hfq
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
lnd_mon
oce_kin
oce_moc
oce_mon
oce_qps
hel24282_r3b7_ctrl
hel24312_r5b7_ctrl
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
oce_fx
oce_mon
oce_qps
hel24315_r5b7_ctrl
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
oce_fx
oce_mon
oce_qps
hel24316_r5b7_ctrl
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
oce_fx
oce_mon
oce_qps
hel24317_r5b7_ctrl
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
oce_fx
oce_mon
oce_qps
epoc
epoc2_004
epoc2_010
epoc2_0??
hamocc
FC001_XPPslo1774
atm_2d_ml
atm_3d_ml
atm_mon
hamocc
hamocc_2d_tendencies
hamocc_EU_tendencies
hamocc_monitor
hamocc_sediment
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
FC04_XPPslo1802
atm_2d_ml
atm_3d_ml
atm_mon
hamocc
hamocc_2d_tendencies
hamocc_3d_tendencies
hamocc_EU_tendencies
hamocc_monitor
hamocc_sediment
hd_meanflow
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
oce_ssh
oce_zos
slo1774
atm_2d_ml
atm_3d_ml
atm_mon
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_fx
oce_ice
oce_moc
oce_mon
slo1802
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
jsb_2d
lnd_mon
oce_dbg
oce_def
oce_ice
oce_moc
oce_mon
oce_ssh
oce_zos
ocemix
mss0008_r5b8_ctrl
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
oce_flx
oce_mon
oce_qps
oce_tke
mss0009_r5b8
atm_2d_ml
atm_3d_ml
atm_mon
hd_meanflow
oce_flx
oce_mon
oce_qps
oce_tke
```
</details>
- `query_yaml -c ${rubycat} cmip7 slo1826 atm_2d_ml` gives list of variable in stream
<details><summary>text dump snippet from "query_yaml -c ${rubycat} cmip7 slo1826 atm_2d_ml" </summary>
<img src="https://pad.gwdg.de/uploads/6d0876ee-82b2-4c01-81c0-c92ccf3535c8.png" width="500"/>
</details>
- `query_yaml -c ${rubycat} cmip7 slo1826 atm_2d_ml --var t_2m --cdo` gives path to data
> **Sapphire**
- `query_yaml -c ${sappcat} ICON` will list only ICON-Sapphire simulations that are part of the general catalogue. Note that this is from NextGEMS cycle3 onwards.
<details><summary>text dump snippet from "query_yaml -c ${sappcat} ICON" </summary>
```
ICON
ngc4008a (time, zoom)
ngc4008 (time, zoom)
ngc4007 (time, zoom)
ngc4006 (time, zoom)
ngc4005 (time, zoom)
ngc3028 (time, zoom)
ngc3028_bc_land
ngc3026_WILL_BE_DELETED (time, zoom)
HAMOCC
HEALPix (zoom)
OneDegree
ngc3542
atm_2d_1h_inst (variables)
atm_2d_1h_mean (variables)
......
erc1011
v20231106
atmos
gr025
2d_daily_max (variables)
2d_daily_mean (variables)
......
native
2d_1h_inst (variables)
2d_1h_mean (variables)
......
ocean
gr025
2d_daily_mean (variables)
2d_daily_mean_vertical-remap025 (variables)
......
native
2d_grid
3d_grid
2d_daily_mean (variables)
......
land
gr025
2d_daily_mean (variables)
2d_monthly_mean (variables)
native
2d_daily_mean (variables)
2d_monthly_mean (variables)
v20240618
atmos
native
2d_1h_inst (variables)
2d_1h_mean (variables)
......
ocean
native
2d_grid
3d_grid
2d_daily_mean (variables)
land
native
2d_daily_mean (variables)
2d_monthly_mean (variables)
erc1017
v20231106
atmos
native
2d_monthly_mean (variables)
atm_mon (variables)
......
ocean
native
2d_monthly_mean (variables)
moc_monthly_mean (variables)
......
land
native
2d_monthly_mean (variables)
tl_monthly_mean (variables)
v20240618
atmos
gr025
2d_daily_max (variables)
2d_daily_mean (variables)
......
native
2d_daily_max (variables)
2d_daily_mean (variables)
......
ocean
gr025
2d_daily_mean (variables)
2d_daily_mean_vertical-remap025 (variables)
......
native
2d_daily_mean (variables)
2d_daily_square (variables)
......
land
native
2d_daily_mean (variables)
2d_monthly_mean (variables)
mon (variables)
C5
AMIP_CNTL (grid, time, zoom)
AMIP_P4K (grid, time, zoom)
AMIP_4CO2 (grid, time, zoom)
PrecipPuzzle
mbe2922 (time)
mbe2923 (time)
mbe2934 (time)
mbe2936 (time)
mbe2939 (time)
ngc5004 (time)
```
</details>
- `query_yaml -c ${sappcat} ICON ngc3028` provides output frequency, zoom resolution availability and variables
<details><summary>text dump snippet from "query_yaml -c ${sappcat} ICON ngc3028" </summary>
```
Choices for this dataset:
name description type allowed default
0 time time resolution of the dataset str [PT30M, PT3H, P1D] P1D
1 zoom zoom resolution of the dataset int [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 0
Variables:
a_tracer_v_to (time, depth_half, cell) sea water vertical diffusivity
atmos_fluxes_frshflux_evaporation (time, cell)
atmos_fluxes_frshflux_precipitation (time, cell)
......
```
</details>
- `query_yaml -c ${sappcat} ICON ngc3028 --search_args time=PT3H zoom=5` lists the variables available available at 3-hourly intervals and on zoom 5
- `query_yaml -c ${sappcat} ICON ngc3028 --search_args time=PT3H zoom=5 --var=hfls --uri --cdo` gives the path for latent heat flux at 3-hourly intervals and on zoom 5
> **EERIE**
- `query_yaml -c ${eeriecat} dkrz disk model-output icon-esm-er eerie-control-1950 v20231106 ocean native 2d_monthly_mean` gives list of variable in stream
<details><summary>text dump snippet from "query_yaml -c ${eeriecat} dkrz disk model-output icon-esm-er eerie-control-1950 v20231106 ocean native 2d_monthly_mean" </summary>
```
Choices for this dataset:
Variables:
Qbot (time, lev, ncells) Conductive heat flux at ice-ocean interface
Qtop (time, lev, ncells) Energy flux available for surface melting
Wind_Speed_10m (time, ncells) Wind Speed at 10m height
......
```
</details>
- `query_yaml -c ${eeriecat} dkrz disk model-output icon-esm-er eerie-control-1950 v20231106 atmos native 2d_monthly_mean --var tas --uri --cdo` gives path to data
- [EERIE data access on shell environment](https://pad.gwdg.de/nSKolAzGQY2zLz3oOr0QSQ?both#EERIE-data-access-on-shell-environment-for-cdo-operations) from hackathon starter pack
### Python (Sapphire)
[nextGEMS data access via intake](https://pad.gwdg.de/nSKolAzGQY2zLz3oOr0QSQ?both#NextGEMS-data-access-via-intake) from hackathon starter pack
[EERIE data access via intake](https://pad.gwdg.de/nSKolAzGQY2zLz3oOr0QSQ?both#EERIE-data-access-via-intake) from hackathon starter pack
Simple example:
```python
import intake
#For nextGEMS
cat = intake.open_catalog("https://data.nextgems-h2020.eu/catalog.yaml")
ds = cat.ICON.ngc3028.to_dask()
ds
#For EERIE
eerie_cat=intake.open_catalog("https://raw.githubusercontent.com/eerie-project/intake_catalogues/main/eerie.yaml")
model = 'icon-esm-er'
expid = 'eerie-control-1950'
gridspec = 'native'
realm='ocean'
cat_data=eerie_cat['dkrz.disk.model-output'][model][expid][realm][gridspec]
print(list(cat_data))
dso = cat_data['2d_monthly_mean'].to_dask()
dso
```
## Variable output for ICON
This is just a sample of the variables that are outputted from ICON. It is *NOT* a complete set!
<details><summary><b> ICON Ocean </b></summary>
ICON-XPP and ICON-Sapphire uses the same model version of ICON Ocean, hence the same variable output names are used.
|VariableName|VariableDescription|Units|
|------------|-------------------|-----|
|ssh|Surface elevation at cell center|m|
|zos|Zstar surface elevation at cell center|m|
|to|Sea water potential temperature|$^o$C|
|so|Sea water salinity|psu|
|u|U zonal velocity component|m/s|
|v|V meridional velocity component|m/s|
|u_vint|Barotropic zonal velocity|m*m/s|
|v_vint|Barotropic meridional velocity|m*m/s|
|w|Vertical velocity at cells|m/s|
|w_deriv|Physical vertical velocity at cells for zstar|m/s|
|mass_flux|Mass flux at edges|kg/s|
|verticallyTotal_mass_flux_e|Vertically integrated mass flux at edges|kg/s|
|stretch_c|Zstar surface stretch at cell center|1|
|rho|Sea water in-situ density|kg/m$^3$|
|rhopot|Sea water potential density|kg/m$^3$|
|mld|Mixed layer depth|m|
|mlotst|Ocean mixed layer thickness defined by sigma_t|m|
|mlotst10|Ocean mixed layer thickness defined by sigma_t at 10m|m|
|Wind_Speed_10m|Wind Speed at 10m height|m/s|
|zos_square|Square of sea surface height|m$^2$|
|mlotstsq|Square of ocean mixed layer thickness defined by sigma_t|m$^2$|
|mlotst10sq|Square of ocean mixed layer thickness defined by sigma_t at 10m|m$^2$|
|vort|vorticity|1/s|
|tke|Turbulent kinetic energy|m$^2$/s$^2$|
|A_veloc_v|Vertical velocity viscosity |m$^2$/s|
|A_tracer_v_to|vertical diffusivity of tracer (sea water potential temperature)|kg/kg|
| age_tracer | age tracer | s |
| | | |
|**isopycnal layer variables** | | |
|diapycnal_velocity | diapycnal velocity |m/s |
|layer_thickness_e | thickness of isopycnal layer on edges | m |
|mass_flux_lay | mass flux in isopycnal layer |m$^2$/s |
| | | |
|**Eddy variables** | | |
|w_prismcenter|vertical velocity at prism center|m s-1|
|sigma0|density anomaly|kg m-3|
|hflR|product of net heatflux and density|kg2ms-3|
|fwR|product of fw flux and density|kg m-2s-1|
|tauxu|product of x windstress and u-velocity|Pa m s-1|
|tauyv|product of y windstress and v-velocity|Pa m s-1|
|uT|product of zonal velocity and temperature|ms-1K|
|uS|product of zonal velocity and salinity|m s-1 kg m-3|
|uR|product of zonal velocity and density|ms-1 kg m-3|
|uu|square of zonal velocity|m2s-2|
|vT|product of meridional velocity and temperature|ms-1K|
|vS|product of meridional velocity and salinity|m s-1 kg m-3|
|vR|product of meridional velocity and density|ms-1 kg m-3|
|vv|square of meridional velocity|m2s-2|
|wT|product of vertical velocity and temperature|ms-1K|
|wS|product of vertical velocity and salinity|m s-1 kg m-3|
|wR|product of vertical velocity and density|ms-1 kg m-3|
|ww|square of vertical velocity|m2s-2|
|RR|square of density|kg2m-6|
|SS|square of salinity|kg2 m-6|
|TT|square of temperature|K2|
|uv|product of zonal velocity and meridional velocity|m2s-2|
|uw|product of zonal velocity and vertical velocity|m2 s-2|
|vw|product of meridional velocity and vertical velocity|m2 s-2|
| | | |
|**sea-ice variables** | | |
|ice_u|Zonal velocity|m/s|
|ice_v|Meridional velocity|m/s|
|sic|Fraction of ocean covered by sea ice| |
|sit|Sea ice thickness|m|
|hi|Ice thickness|m|
|hs|Snow thickness|m|
|conc|Ice concentration in each ice class||
|draftave|Average water equivalent of ice and snow on grid area|m|
| | | |
|**flux related variables** | | |
|atmos_fluxes_FrshFlux_Evaporation| evaporative flux | |
|atmos_fluxes_FrshFlux_Precipitation| precipitation flux | |
|atmos_fluxes_FrshFlux_Runoff| river runoff | |
|atmos_fluxes_FrshFlux_Snowfall| snow precipitation flux| |
|atmos_fluxes_HeatFlux_Latent| surface latent heat flux | W/m$^2$ |
|atmos_fluxes_HeatFlux_LongWave| net surface longwave flux| W/m$^2$ |
|atmos_fluxes_HeatFlux_Sensible| surface sensible heat flux| W/m$^2$ |
|atmos_fluxes_HeatFlux_ShortWave| net surface shortwave flux | W/m$^2$|
|atmos_fluxes_HeatFlux_Total| net surface heat flux | W/m$^2$|
|atmos_fluxes_stress_x| zonal wind stress (over seaice?) | N/m$^2$|
|atmos_fluxes_stress_xw| zonal wind stress over water | N/m$^2$|
|atmos_fluxes_stress_y| meridional wind stress (over seaice?) | N/m$^2$|
|atmos_fluxes_stress_yw| meridional wind stress over water | N/m$^2$ |
|Qtop|Energy flux available for surface melting|W/m$^2$|
|Qbot|Conductive heat flux at ice-ocean interface|W/m$^2$|
|condep|Convection depth index|1|
|heatOceI|Heat flux to ocean from the ice growth|W/m$^2$|
|heatOceW|Heat flux to ocean from the atmosphere|W/m$^2$|
|heat_content_liquid_water|Heat content liquid water|J/m$^2$|
|heat_content_snow|Heat content snow|Jm$^2$|
|heat_content_seaice|Heat content sea ice|J/m$^2$|
|heat_content_total|Heat content total|J/m$^2$|
|swsum|Swsum|1|
|heatabs|Heat absorption|J/m$^2$|
|heatflux_rainevaprunoff|Heat flux rain evaporation runoff|W/m$^2$|
|swrab|Swrab|1|
|rsdoabsorb|Net rate of absorption of shortwave energy in ocean layer|W/m$^2$|
| | | |
| **MOC variables** | | |
|global_moc|Global meridional overturning|kg/s|
|atlantic_moc|Atlantic meridional overturning|kg/s|
|pacific_moc|Indo-Pacific meridional overturning|kg/s|
|global_hfl|Global implied heat transport|W|
|atlantic_hfl|Atlantic implied heat transport|W|
|pacific_hfl|Indo-Pacific implied heat transport|W|
|global_wfl|Global implied freshwater transport|m$^3$/s|
|atlantic_wfl|Atlantic implied freshwater transport|m$^3$/s|
|pacific_wfl|Indo-Pacific implied freshwater transport|m$^3$/s|
|global_hfbasin|Global northward ocean heat transport|W|
|atlantic_hfbasin|Atlantic northward ocean heat transport|W|
|pacific_hfbasin|Indo-Pacific northward ocean heat transport|W|
|global_sltbasin|Global northward ocean salt transport|kg/s|
|atlantic_sltbasin|Atlantic northward ocean salt transport|kg/s|
|pacific_sltbasin|Indo-Pacific northward ocean salt transport|kg/s|
| | | |
| **monitoring variables** | | |
|total_salt|Total salt|kg|
|total_saltinseaice|Total salt in sea ice|kg|
|total_saltinliquidwater|Total salt in liquid water|kg|
|amoc26n|AMOC at 26N|kg/s|
|kin_energy_global|Kinetic energy|J|
|pot_energy_global|Potential energy|J|
|total_energy_global|Total energy|J|
|ssh_global|SSH global|m|
|sst_global|Global mean sea surface temperature|C|
|sss_global|Global mean sea surface salinity|kg/m$^3$|
|potential_enstrophy_global|Potential enstrophy|m$^2$/s$^2$|
|HeatFlux_Total_global|Total heat flux|W/m$^2$|
|FrshFlux_Precipitation_global|Freshwater flux precipitation|m/s|
|FrshFlux_SnowFall_global|Freshwater flux snowfall|m/s|
|FrshFlux_Evaporation_global|Freshwater flux evaporation|m/s|
|FrshFlux_Runoff_global|Freshwater flux runoff|m/s|
|FrshFlux_VolumeIce_global|Freshwater flux volume ice|m/s|
|FrshFlux_TotalOcean_global|Freshwater flux total ocean|m/s|
|FrshFlux_TotalIce_global|Freshwater flux total ice|m/s|
|FrshFlux_VolumeTotal_global|Freshwater flux volume total|m/s|
|totalsnowfall_global|Total snowfall|m/s|
|ice_volume_nh|Ice volume Northern Hemisphere|km$^3$|
|ice_volume_sh|Ice volume Southern Hemisphere|km$^3$|
|ice_extent_nh|Ice extent Northern Hemisphere|km$^2$|
|ice_extent_sh|Ice extent Southern Hemisphere|km$^2$|
|LabrSea_Conv|Labrador Sea convection|m|
|global_heat_content|Global heat content|J|
|global_heat_content_solid|Global heat content solid|J|
</details>
<details><summary><b> ICON HAMOCC </b></summary>
With the same model version of ICON Ocean comes the same OBGC model, HAMOCC, thus the same variable output names are used.
|VariableName|VariableDescription|Units|
|------------|-------------------|-----|
|hi|hydrogen ion concentration|kmol m-3|
|co3|carbonate ion concentration|kmol m-3|
|dissic|DIC concentration|kmolP m-3|
|talk|alkalinity|kmol m-3|
|po4|phosphate concentration|kmolP m-3|
|no3|Nitrate concentration|kmolP m-3|
|n2|gaseous nitrogen concentration|kmolN2 m-3|
|phyp|phytoplankton concentration|kmolP m-3|
|zoop|zooplankton concentration|kmolP m-3|
|phydiaz|cyanobacteria concentration|kmolP m-3|
|o2|oxygen concentration|kmol O2 m-3|
|si|silicate concentration|kmolP m-3|
|dissoc|DOC concentration|kmolP m-3|
|n2o|N2O concentration|kmolP m-3|
|det|POC concentration|kmolP m-3|
|dfe|dissolved iron concentration|kmolFe m-3|
|dmso|dimethylsulfide concentration|kmol S m-3|
|h2s|H2S alkalinity concentration|kmol m-3|
|agesc|linear age||
|caco3|calcium carbonate shells|kmolP m-3|
|bsi|opal shells|kmol Si m-3|
|fdust|Dust concentration|kmol m-3|
|co2flux|co2 flux (positive upward)|kmol C m-2 s-1|
|pco2|co2 ocean partical pressure|ppm|
|orginp|organic input|check|
|silinp|silicate input|check|
|calinp|calc input|check|
|o2flux|o2 flux|kmol O m-2 s-1|
|n2flux|n2 flux|kmol N m-2 s-1|
|n2oflux|n2o flux|kmol N m-2 s-1|
|n2fixdiag|diagnostic n fixation|kmol N m-2 s-1|
|coex90|OM flux at 90 m|kmol P m-2 s-1|
|calex90|Calc flux at 90 m|kmol C m-2 s-1|
|opex90|Opal flux at 90 m|kmol Si m-2 s-1|
|coex1000|OM flux at 1000 m|kmol P m-2 s-1|
|opex1000|Opal flux at 1000 m|kmol Si m-2 s-1|
|calex1000|Calc flux at 1000 m|kmol C m-2 s-1|
|coex2000|OM flux at 2000 m|kmol P m-2 s-1|
|opex2000|Opal flux at 2000 m|kmol Si m-2 s-1|
|calex2000|Calc flux at 2000 m|kmol C m-2 s-1|
|o2min|mole concentration of dissolved molecular oxygen in seawater at shallowest local minimum in vertical profile|mol m-3|
|zo2min|depth at shallowest local minimum in vertical profile of mole concentration of dissolved molecular oxygen in sea water|m|
|bacfa|bacterial decomposition of DOC|kmolP m-3 s-1|
|sulfat_red|sulfate reduction|kmolP m-3 s-1|
|remin|aerob detritus remineralization|kmolP m-3 s-1|
|denit|denitrification|kmolP m-3 s-1|
|delsil|opal production|kmol Si m-3 s-1|
|delcar|calcium carbonate production|kmol C m-3 s-1|
|aou|apparent O2 utilisation||
|NPP|net primary production|kmolP m-3 s-1|
|n2_fixation|n fixation|kmol N2 m-3 s-1|
|export|\_export\_ variable (ecan*zoomor etc)|kmol P m-3 s-1|
|pho_cya|total cyanobacteria growth|kmol P m-3 s-1|
|cya_loss|cyanobacteria dying|kmol P m-3 s-1|
|graz|zooplankton grazing|kmol P m-3 s-1|
|HAMOCC_remin_via_grazer|remineralization_via_grazer|kmol P m-3 s-1|
|exud_phy|phytoplankton exudation|kmol P m-3 s-1|
|exud_zoo|zooplankton exudation|kmol P m-3 s-1|
|zoomor|zooplankton mortality|kmol P m-3 s-1|
|phymor|phytoplankton mortality|kmol P m-3 s-1|
|phyplim|P_limitation of PP||
|phyflim|Fe limitation of PP||
|phynlim|N_limitation of PP||
|cyaTlim|Temp_limitation of cyanobacteria growth||
|cyaLlim|Light_limitation of cyanobacteria growth||
|cyaPlim|P_limitation of cyanobacteria growth||
|cyaFlim|Fe_limitation of cyanobacteria growth||
| | | |
| **monitoring & sediment variables** | | |
|global_primary_production|global net_npp|GtC yr-1|
|global_zooplankton_grazing|global zooplankton grazing|GtC yr-1|
|global_OM_export_at_90m|global_om_export_at_90m|GtCyr-1|
|global_calc_export_at_90m|global_calc_export_at_90m|GtCyr-1|
|global_opal_export_at_90m|global_opal_export_at_90m|kmol Si s-1|
|global_opal_production|global opal production|kmol Si s-1|
|global_caco3_production|global caco3 production|GtC yr-1|
|global_net_co2_flux|global net_co2_flux|GtC yr-1|
|global_surface_alk|global_surface_alkalinity|kmol m-3|
|global_surface_dic|global surface dissolved inorganic carbon|kmol C m-3|
|global_remin_via_grazer|global remineraliation via grazer|GtC yr-1|
|global_exudation_phytoplankton|global phytoplankton exudation|GtC yr-1|
|global_phytoplankton_dying|global phytoplankton dying|GtC yr-1|
|bacterial_activity|EU_bacterial_activity|GtC yr-1|
|global_exudation_zooplankton|global zooplankton exudation|GtC yr-1|
|global_zooplankton_dying|global_zooplankton_dying|GtC yr-1|
|N2_fixation|global N2 fixation|TgN yr-1|
|WC_denit|global watern column denitrification|TgN yr-1|
|global_npp_cya|global annual primary production of cyanobacteria|GtC yr-1|
|Aerob_remin_of_detritus|Aerob_remineralization_of_detritus|GtC yr-1|
|SED_denit|Sediment_denitrification|TgN yr-1|
|global_cya_loss_det|Global cyanobacteria loss to detritus|GtC yr-1|
|global_cya_loss_doc|Global cyanobacteria loss to DOC|GtC yr-1|
|global_surface_phosphate|global_surface_phosphate|kmol m-3|
|global_surface_silicate|global_surface_silicate|kmol m-3|
|global_surface_nitrate|global_surface_nitrate|kmol m-3|
|global_zalkn2|global H+ compensation for N2 production/fixation|kmol|
|global_OM_export_at_1000m|global_om_export_at_1000m|GtCyr-1|
|global_calc_export_at_1000m|global_calc_export_at_1000m|GtCyr-1|
|global_opal_export_at_1000m|global_opal_export_at_1000m|kmol Si s-1|
|global_OM_export_at_2000m|global_om_export_at_2000m|GtCyr-1|
|global_calc_export_at_2000m|global_calc_export_at_2000m|GtCyr-1|
|global_opal_export_at_2000m|global_opal_export_at_2000m|kmol Si s-1|
|remin_of_det_by_S|remin_of_det_by_S|GtC yr-1|
|silpro|Si flux to sediment|kmol Si m-2 s-1|
|produs|Dust flux to sediment|kmol m-2 s-1|
|prcaca|C inorg flux to sediment|kmol C m-2 s-1|
|prorca|C org flux to sediment|kmol P m-2 s-1|
|sedflux_dic|sediment-ocean flux DIC|kmol C m-2 s-1|
|sedflux_alk|sediment-ocean flux alkalinity|kmol m-2 s-1|
|sedflux_po4|sediment-ocean flux phosphate|kmol P m-2 s-1|
|sedflux_o2|sediment-ocean flux oxygen|kmol O2 m-2 s-1|
|sedflux_n2|sediment-ocean flux nitrogen|kmol N m-2 s-1|
|sedflux_no3|sediment-ocean flux nitrate|kmol N m-2 s-1|
|sedflux_si|sediment-ocean flux nitrate|kmol Si m-2 s-1|
|sedflux_fe|sediment-ocean flux iron|kmol Fe m-2 s-1|
|sedflux_h2s|sediment-ocean flux H2S|kmol m-2 s-1|
|sed_remino2|sediment aerob remineralization|kmol P m-3 s-1|
|sed_reminn|sediment denitrification|kmol P m-3 s-1|
|sed_remins|sediment sulfate reduction|kmol P m-3 s-1|
|ssso12|solid sediment C org|kmol P m-3|
|sssc12|solid sediment calcium carbonate|kmol C m-3|
|sssil|solid sediment opal|kmol Si m-3|
|ssster|solid sediment clay|kmol m-3|
|powaic|sediment pore water DIC|kmol C m-3|
|powaal|sediment pore water alkalinity|kmol m-3|
|powaph|sediment pore water phosphate|kmol P m-3|
|powaox|sediment pore water oxygen|kmol O2 m-3|
|powasi|sediment pore water silicate|kmol Si m-3|
|powafe|sediment pore water iron|kmol Fe m-3|
|powan2|sediment pore water N2|kmoll N2 m-3|
|powano3|sediment pore water nitrate|kmol N m-3|
|powah2s|sediment pore water H2S alkalinity|kmol m-3|
|powan2b|sediment pore water n2 budget|kmol N m-3|
|powah2o|sediment pore water h2o budget|kmol N m-3|
|sedhpl|sediment hydrogen ion concentration|kmol m-3|
|buro12|sediment burial C org|kmol P m-2|
|burc12|sediment burial calcium carbonate|kmol C m-2|
|burter|sediment burial clay|kmol m-2|
|bursi|sediment burial opal|kmol Si m-2|
|bolay|bottom layer thickness|m|
</details>
<details><summary><b> ICON Atmosphere (XPP) </b></summary>
The physics package of the atmospheric model used in ICON-XPP and ICON-Sapphire are different. Similarly, their naming convention for variables and parameters are different. Here's a table listing some of the variables from the atmospheric component of ICON-XPP.
|Variable Name|Variable Description|Units|
|-------------|--------------------|-----|
|pres_msl|Mean sea level pressure|Pa|
|pres_sfc|Surface pressure|Pa|
|t_s|Weighted temperature of ground surface|K|
|clct|Total cloud cover|%|
|tot_prec_rate|Total precipitation rate|kg/m$^2$/s|
|tqv|Total column integrated water vapour|kg/m$^2$|
|tqv_dia|Total column integrated water vapour (diagnostic)|kg/m$^2$|
|tqc_dia|Total column integrated cloud water (diagnostic)|kg/m$^2$|
|tqi_dia|Total column integrated cloud ice (diagnostic)|kg/m$^2$|
|umfl_s|U-momentum flux at the surface|N/m$^2$|
|vmfl_s|V-momentum flux at the surface|N/m$^2$|
|sp_10m|Wind speed in 10m|m/s|
|t_2m|Temperature in 2m|K|
|sob_t|Shortwave net flux at TOA|W/m$^2$|
|sod_t|Downward shortwave flux at TOA|W/m$^2$|
|sou_t|Shortwave upward flux at TOA|W/m$^2$|
|thb_t|Thermal net flux at TOA|W/m$^2$|
|sob_s|Shortwave net flux at surface|W/m$^2$|
|sou_s|Shortwave upward flux at surface|W/m$^2$|
|thb_s|Longwave net flux at surface|W/m$^2$|
|shfl_s|Surface sensible heat flux|W/m$^2$|
|lhfl_s|Surface latent heat flux|W/m$^2$|
|snow_con_rate|Convective snow rate (convection scheme output for next time step)|kg/m$^2$/s|
|snow_gsp_rate|Gridscale snow rate|kg/m$^2$/s|
|ice_gsp_rate|Gridscale ice rate|kg/m$^2$/s|
|qifl_s|Surface cloud ice deposition flux due to diffusion|kg/m$^2$/s|
|qhfl_s|Surface moisture flux|kg/m$^2$/s|
|t_seasfc|Sea surface temperature|K|
|fr_land|Fraction land|-|
|fr_seaice|Fraction of sea ice|1|
|condhf_ice|Conductive heat flux at sea-ice bottom|W/m$^2$|
|meltpot_ice|Melt potential at sea-ice top|W/m$^2$|
|t_ice|Sea/lake-ice temperature|K|
|h_ice|Sea/lake-ice depth|m|
|albvisdif|UV visible albedo for diffuse radiation|%|
|albvisdir|UV visible albedo for direct radiation|%|
|albnirdif|Near IR albedo for diffuse radiation|%|
|albnirdir|Near IR albedo for direct radiation|%|
|pres|Pressure|Pa|
|geopot|Geopotential at full level cell centre|m$^2$/s$^2$|
|temp|Temperature|K|
|u|Zonal wind|m/s|
|v|Meridional wind|m/s|
|qv|Specific humidity|kg/kg|
|rh|Relative humidity|%|
|clc|Cloud cover|%|
|tot_qc_dia|Total specific cloud water content (diagnostic)|kg/kg|
|tot_qi_dia|Total specific cloud ice content (diagnostic)|kg/kg|
|runoff_s|Weighted surface water runoff|kg/m$^2$|
|runoff_g|Weighted soil/ground water runoff|kg/m$^2$|
|tas_gmean|Global mean temperature at 2m|K|
|rsdt_gmean|Global mean TOA incident shortwave radiation|W/m$^2$|
|rsut_gmean|Global mean TOA outgoing shortwave radiation|W/m$^2$|
|rlut_gmean|Global mean TOA outgoing longwave radiation|W/m$^2$|
|radtop_gmean|Global mean TOA total radiation|W/m$^2$|
|prec_gmean|Global mean precipitation flux|kg/m$^2$/s|
|evap_gmean|Global mean evaporation flux|kg/m$^2$/s|
|pme_gmean|Global mean P-E|kg/m$^2$/s|
</details>
<details><summary><b> ICON Land (XPP) </b></summary>
|variable name|variable description|units|
|---|---|---|
|seb_t_box|surface temperature|K|
|seb_heat_cap_box|surface layer heat capacity|J/m$^2$/K|
|seb_latent_hflx_box|latent heat flux density at surface|W/m$^2$|
|seb_sensible_hflx_box|sensible heat flux at surface|W/m$^2$|
|seb_forc_hflx_box|additional heat flux at surface|W/m$^2$|
|seb_s_star_box|surface dry static energy|m$^2$/s$^2$|
|seb_qsat_star_box|surface specific humidity at saturation|m$^2$/s$^2$|
|a2l_DEBUG_VAR_box|||
|a2l_co2_air_box|CO2 mass mixing ratio of lowest atmosphere level|kg(CO2) / kg(air)|
|a2l_co2_air_mol_box|CO2 mol mixing ratio of lowest atmosphere level|mol(CO2) / mol(air)|
|a2l_t_air_box|||
|a2l_q_air_box|Specific humidity of air at surface|kg/kg|
|a2l_rain_box|||
|a2l_snow_box|||
|a2l_wind_air_box|||
|a2l_wind_10m_box|||
|a2l_lw_srf_down_box|||
|a2l_swvis_srf_down_box|||
|a2l_swnir_srf_down_box|||
|a2l_swpar_srf_down_box|||
|a2l_fract_par_diffuse_box|||
|a2l_press_srf_box|||
|a2l_drag_srf_box|||
|a2l_pch_box|||
|a2l_t_acoef_box|||
|a2l_t_bcoef_box|||
|a2l_q_acoef_box|||
|a2l_q_bcoef_box|||
|a2l_cos_zenith_angle_box|||
|a2l_drag_wtr_box|||
|a2l_drag_ice_box|||
|a2l_t_acoef_wtr_box|||
|a2l_t_bcoef_wtr_box|||
|a2l_q_acoef_wtr_box|||
|a2l_q_bcoef_wtr_box|||
|a2l_t_acoef_ice_box|||
|a2l_t_bcoef_ice_box|||
|a2l_q_acoef_ice_box|||
|a2l_q_bcoef_ice_box|||
|l2a_carbon_conservation_test_box|Carbon conservation test||
|l2a_yday_c_state_sum_box|yday c state sum required for carbon conservation test||
|turb_rough_m_box|surface roughness length for momentum|m|
|turb_rough_h_box|surface roughness length for heat|m|
|turb_fact_q_air_box|||
|turb_fact_qsat_srf_box|||
|turb_fact_qsat_trans_srf_box|||
|sse_t_soil_sl_box|||
|sse_t_snow_box|||
|sse_hcap_grnd_box|Ground heat capacity|J/m$^2$/K|
|sse_hcap_grnd_old_box|Ground heat capacity (old)|J/m$^2$/K|
|sse_grnd_hflx_box|Ground heat flux|J/m$^2$/s|
|sse_grnd_hflx_old_box|Ground heat flux (old)|J/m$^2$/s|
|hydro_fract_snow_box|Snow area fraction|-|
|hydro_weq_snow_box|Snow amount|m (water equivalent)|
|hydro_evapotrans_box|Evapotranspiration, including sublimation|kg/m$^2$/s|
|hydro_infilt_box|Water infiltrating into the soil|kg/m$^2$/s|
|hydro_runoff_box|Total surface runoff|kg/m$^2$/s|
|hydro_drainage_box|Total drainage|kg/m$^2$/s|
|hydro_discharge_box|Local discharge|m$^3$/s|
|hydro_discharge_ocean_box|Discharge to the ocean|m$^3$/s|
|hydro_weq_balance_err_box|Land water balance error|m$^3$/(time step)|
|hydro_evapotrans_lnd_box|Evapotranspiration from land surface w/o lakes|kg/m$^2$/s|
|hydro_fract_wet_box|Wet surface fraction|-|
|hydro_wtr_skin_box|Water content of soil and canopy skin reservoir|m|
|hydro_wtr_rootzone_box|Liquid water content of the root zone|m|
|hydro_ice_rootzone_box|Ice content in the root zone|m water equivalent|
|hydro_wtr_soil_sl_box|Water content of soil layers|m|
|hydro_ice_soil_sl_box|Ice content of soil layers|m|
|hydro_wtr_rootzone_rel_box|Relative root zone moisture|-|
|hydro_fract_snow_can_box|Snow fraction on canopy|-|
|hydro_weq_snow_can_box|Snow amount on canopy|m (water equivalent)|
|hydro_wtr_rootzone_avail_box|Plant available water content in root zone|m|
|hydro_wtr_rootzone_avail_max_box|Maximum plant available water content in root zone|m|
|hydro_transpiration_box|Transpiration|kg/m$^2$/s|
|hydro_fract_snow_glac_box|Snow fraction on glacier|-|
|hydro_weq_glac_box|Glacier depth (including snow)|m (water equivalent)|
|hydro_fract_snow_lice_box|Snow fraction on lake ice (rel. to ice fraction)|-|
|hydro_weq_snow_lice_box|Snow amount on lake ice|m water equivalent|
|rad_sw_srf_net_box|Net surface shortwave radiation||
|rad_lw_srf_net_box|Net surface longwave radiation||
|rad_rad_srf_net_box|Net surface radiation||
|rad_alb_vis_box|||
|rad_alb_nir_box|||
|rad_fapar_box|||
|assimi_gross_assimilation_ca_box|Gross photosynthesis on canopy ground area|mol(CO2)/m$^2$(canopy ground) / s|
|assimi_gross_assimilation_box|Gross photosynthesis on tile area|mol(CO2)/m$^2$ (tile area) / s|
|assimi_dark_respiration_ca_box|Dark_respiration on canopy ground area|mol(CO2)/$m^2$(canopy ground) / s|
|assimi_dark_respiration_box|Dark_respiration on tile area|mol(CO2)/$m^2$ (tile area) / s|
|assimi_npp_pot_rate_ca_box|NPP_pot_rate_ca|mol(CO2)/($m^2$ (canopy ground) / s)|
|assimi_seconds_year_box|time sum year|sum of seconds in year|
|assimi_npp_sum_year_box|NPP_sum_year|mol(CO2)/($m^2$ (canopy ground) / s)|
|assimi_npp_mean_5year_box|NPP_mean_5year|mol(CO2)/($m^2$ (canopy ground) / s)|
|assimi_land_cover_class_box|land_cover_class||
|assimi_bclimit_min_cold_mmtemp_box|bclimit_min_cold_mmtemp||
|assimi_bclimit_max_cold_mmtemp_box|bclimit_max_cold_mmtemp||
|assimi_bclimit_max_warm_mmtemp_box|bclimit_max_warm_mmtemp||
|assimi_bclimit_min_temprange_box|bclimit_min_temprange||
|assimi_bclimit_min_gdd_box|bclimit_min_gdd||
|assimi_tau_c_woods_box|tau_c_woods||
|pheno_lai_box|||
|pheno_lai_ta_box|||
|pheno_fract_fpc_box|||
|pheno_fract_fpc_max_box|||
|carbon_c_greenwood2litter_ta_box|Total litter flux entering the soil pools.|mol(CO2) /m$^2$/s|
|carbon_c_green_ta_box|C-Pool for green parts of vegetation.|mol(C) /m$^2$|
|carbon_c_woods_ta_box|C-Pool for structural material/parts of vegetation.|mol(C) /m$^2$|
|carbon_c_reserve_ta_box|C-Pool for reserve carbohydrates (starches, sugars) of vegetation.|mol(C) /m$^2$|
|carbon_c_crop_harvest_ta_box|C-Pool for Harvested Material from Crops.|mol(C) /m$^2$|
|carbon_c_sum_veg_ta_box|Sum of all vegetation C pools.|mol(C) /m$^2$|
|carbon_c_sum_litter_ag_ta_box|Sum of all above ground litter C pools.|mol(C) /m$^2$|
|carbon_c_sum_litter_bg_ta_box|Sum of all below ground litter C pools.|mol(C) /m$^2$|
|carbon_c_sum_humus_ta_box|Sum of all humus C pools.|mol(C) /m$^2$|
|carbon_c_sum_natural_ta_box|Sum of all natural C pools.|mol(C) /m$^2$|
|carbon_soil_respiration_ta_box|Soil respiration.|mol(C) /m$^2$/s|
|carbon_excess_npp_ta_box|NPP that could not be not stored in vegetation carbon pools.|mol(C) /m$^2$/s|
|carbon_npp_pot_ydaymean_ta_box|Mean NPP Rate of the previous day.|mol(C) /m$^2$/s|
|carbon_npp_act_ydaymean_ta_box|Actual NPP Rate of the previous day.|mol(C) /m$^2$/s|
|carbon_gpp_ydaymean_ta_box|Mean GPP Rate of the previous day.|mol(C) /m$^2$/s|
|carbon_co2_l2a_npp_ta_box|Net CO2 fluxes between biosphere and atmosphere due to NPP.|kg(CO2) /m$^2$/s|
|carbon_co2_l2a_resp_ta_box|Net CO2 fluxes between biosphere and atmosphere due to soil respiration.|kg(CO2) /m$^2$/s|
|carbon_co2_l2a_herb_ta_box|Net CO2 fluxes between biosphere and atmosphere due to herbivory.|kg(CO2) /m$^2$/s|
|carbon_ccons_calccpools_box|C conservation test: should be zero|mol(C) /m$^2$(tile area)|
|hydro_trans_gmean_box|Global mean transpiration|kg/m$^2$/s|
|hydro_evapotrans_gmean_box|Global land evapotranspiration|kg/m$^2$/s|
|hydro_weq_land_gsum_box|Global amount of land water and ice|km$^3$|
|hydro_discharge_ocean_gsum_box|Global water discharge to the oceans|Sv|
|hydro_wtr_rootzone_rel_gmean_box|Global mean relative rootzone moisture|-|
|hydro_fract_snow_gsum_box|Global snow area (including glaciers)|Mio km$^2$|
|hydro_weq_snow_gsum_box|Global snow amount on non-glacier land|Gt|
|hydro_weq_balance_err_gsum_box|Global land water balance error|m$^3$/timestep|
|pheno_lai_ta_gmean_box|Global land mean leaf area index|1|
|pheno_fract_fpc_gmean_box|Global land mean foliage projected cover|1|
|seb_t_gmean_box|Global land mean surface temperature|K|
</details>
<details><summary><b> ICON Atmosphere (Sapphire) </b></summary>
The physics package of the atmospheric model used in ICON-XPP and ICON-Sapphire are different. Similarly, their naming convention for variables and parameters are different. Here's a table listing some of the variables from the atmospheric component of ICON-Sapphire.
| Variable Name | Variable Description | Units |
|-------|------|-----|
|cli|Specific cloud ice content|kg/kg|
|clivi|Vertically integrated cloud ice|kg/m$^2$|
|cllvi|Vertically integrated cloud water|kg/m$^2$|
|clw|Specific cloud water content|kg/kg|
|dzghalf|Vertical extent of model full layer|m|
|hfls|Latent heat flux|W/m$^2$|
|hfss|Sensible heat flux|W/m$^2$|
|hus|Specific humidity| |
|pfull| | |
|phalf| | |
|pr|Precipitation flux|kg/m$^2$/s|
|pres_msl|Mean sea level pressure|Pa|
|pres_sfc|Surface pressure|Pa|
|prls| | |
|prw|Vertically integrated water vapour|kg/m$^2$|
|qg|Specific graupel content|kg/kg|
|qgvi|Vertically integrated graupel|kg/m$^2$|
|qr|Specific rain content|kg/kg|
|qrvi|Vertically integrated rain|kg/m$^2$|
|qs|Specific snow content|kg/kg|
|qsvi|Vertically integrated snow|kg/m$^2$|
|rlds|Surface downwelling longwave radiation|W/m$^2$|
|rlus|Surface upwelling longwave radiation|W/m$^2$|
|rlut|TOA outgoing longwave radiation|W/m$^2$|
|rsds|Surface downwelling shortwave radiation|W/m$^2$|
|rsdt|TOA incident shortwave radiation|W/m$^2$|
|rsus|Surface upwelling shortwave radiation|W/m$^2$|
|rsut|TOA outgoing shortwave radiation|W/m$^2$|
|sfcwind|10m windspeed|m/s|
|ta|Temperature|K|
|tas|Temperature in 2m|K|
|tauu|U-momentum flux at the surface|N/m$^2$|
|tauv|V-momentum flux at the surface|N/m$^2$|
|tend_ta_mig|Temperature tendency due to graupel processes (cp)|K/s|
|ts|Surface temperature|K|
|u_vint|Vertically integrated barotropic zonal velocity|m$^2$/s|
|ua|Zonal wind|m/s|
|uas|Zonal wind in 10m|m/s|
|v_vint|Vertically integrated meridional zonal velocity|m$^2$/s|
|va|Meridional wind|m/s|
|vas|Meridional wind in 10m|m/s|
|wa_phy| | |
|zg|Geometric height at full level center|m|
|zghalf|Geometric height at half level center|m|
</details>
<details><summary><b> ICON Land (Sapphire) </b></summary>
| Variable Name | Variable Description | Units |
|-------|------|-----|
|hydro_canopy_cond_limited_box| | |
|hydro_discharge_ocean_box| | |
|hydro_drainage_box| | |
|hydro_runoff_box|Surface runoff|kg/m$^2$/s|
|hydro_snow_soil_dens_box|Density of snow on soil|kg/m³|
|hydro_transpiration_box|Transpiration from surface|kg/m$^2$/s|
|hydro_w_ice_sl_box|Ice content in soil layers|m|
|hydro_w_snow_box|Water content of snow reservoir on surface|m|
|hydro_w_soil_sl_box|Water content in soil layers|m|
|sse_grnd_hflx_old_box|Ground heat flux (old)|J/m$^2$/s|
|sse_t_soil_sl_box| | |
</details>
## Grid
### Native grid
<img src="https://pad.gwdg.de/uploads/ca125244-4cfa-46c4-987d-f3223a15461f.png" alt="ICON grid" width="150" />
The nomenclature (R*n*B*k*) for ICON resolution derives from how an icosahedron is divided. Taking a grid that originates from an icosahedron, the the edge of each triangle face is initially divided into *n* parts (thus `R02` in most of our cases), followed by *k* subsequent edge bisections. When a particular resolution grid is generated, a grid ID is officially tagged to it. Official list of gridIDs associated with [MPIM](http://icon-downloads.mpimet.mpg.de/mpim_grids.xml) and [DWD](http://icon-downloads.mpimet.mpg.de/dwd_grids.xml) are on their respective sites.
<details><summary><b> Abbreviated table of resolution and their gridID </b></summary>
| gridID (MPIM) | Realm | ICON resolution | nominal resolution |
| --- | --- | --- | --- |
| 0049 | Atmosphere | R02B04 | 160km |
| 0051 | Atmosphere | R02B05 | 80km |
| 0052 | Atmosphere | R02B06 | 40km |
| 0053 | Atmosphere | R02B07 | 20km |
| 0054 | Atmosphere | R02B08 | 10km |
| 0055 | Atmosphere | R02B09 | 5km |
| 0056 | Atmosphere | R02B10 | 2.5km |
| 0057 | Atmosphere | R02B11 | 1.25km |
| 0046 | Ocean | R02B06 | 40km |
| 0024 | Ocean | R02B07 | 20km |
| 0058 | Ocean | R02B08 | 10km |
| 0016 | Ocean | R02B09 | 5km |
| 0059 | Ocean | R02B10 | 2.5km |
| 0060 | Ocean | R02B11 | 1.25km |
| 0045 | Ocean | EPOC (R2B9) | telescopic 1.8-15km |
| 0026 (DWD) | Atmosphere | R03B07 | 13km |
</details>
Grid files are on Levante:
- MPIM: `/pool/data/ICON/grids/public/mpim/${gridID}`
- DWD: `/pool/data/ICON/grids/public/edzw`
### Healpix
As higher and higher resolution modelling are performed, efficiency is paramount for the post-processing of these very large dataset. To just view the data or compute area-average of of a large region, we don't necessarily need such high resolution. HEALpix co-ordinate system (heavily used in astronomy) allows for efficient access and computation of these humongous data set.
<details><summary><b> HEALpix reference table </b></summary>
| zoom index (ICON) | nside index (IFS/FESOM) | resolution in degrees | resolution in km |
| --------------- | --------------- | --------------- | --------------- |
| zoom 0 | nside 1 | 59 deg | 6144 km |
| zoom 1 | nside 2 | 29 deg | 3072 km |
| zoom 2 | nside 4 | 15 deg | 1536 km |
| zoom 3 | nside 8 | 7.3 deg | 768 km |
| zoom 4 | nside 16 | 3.7 deg | 384 km |
| zoom 5 | nside 32 | 1.8 deg | 192 km |
| zoom 6 | nside 64 | 0.92 deg | 96 km |
| zoom 7 | nside 128 | 0.46 deg | 48 km |
| zoom 8 | nside 256 | 0.23 deg | 24 km |
| zoom 9 | nside 512 | 0.11 deg | 12 km |
| zoom 10 | nside 1024 | 0.057 deg | 6 km |
</details>
## Plotting
For plotting ICON data, we rely a lot on python and some available packages. Nils Brüggemann has developed an amazing package, called **pyICON**, that aids in the analysis of ICON data.
<details><summary><b> Installing pyICON </b></summary>
```bash
#Directory you'd like to install pyCION
cd /work/mh1421/m300466/tools
git clone git@gitlab.dkrz.de:m300602/pyicon.git pyicon
cd pyicon
pip install -e ./
#Ensure its path is readable from default python3 module on Levante
vi ~/.bashrc
PYICONPATH="/work/mh1421/m300466/tools/pyicon"
export PYTHONPATH=${PYTHONPATH}:${PYICONPATH}
#Test that is works
python -c "import pyicon"
```
</details>
### Native grid (python; pyicon)
<details><summary><b> Python example </b></summary>
```python
import xarray as xr
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.ticker as ticker
import matplotlib.gridspec as gridspec
import cmocean as cmo
import cartopy.crs as ccrs
import cartopy.feature as cfeature
%matplotlib inline
# This example uses DRAGON simulation
outdir='/work/mh1421/m300466/icon-xpp/icon-2024.10b/build/experiments/dap010_r3b7-r2b9/'
```
**Surface temperature (atm variable)**
```python
gridds_r3b7=xr.open_dataset('/pool/data/ICON/grids/public/edzw/icon_grid_0026_R03B07_G.nc')
ds=xr.open_mfdataset(outdir+'dap010_r3b7-r2b9_atm_2d_ml_*.nc')
varname='t_2m'
coarsen = 2 #Higher value for more coarsening (speed up plotting)
fig = plt.figure(figsize=(10,6))
G = gridspec.GridSpec(1,1)
ax = plt.subplot(G[0,0], projection=ccrs.Mollweide(central_longitude=0))
ax.coastlines(color='black')
plot = ax.scatter(np.rad2deg(gridds_r3b7.clon[::4**coarsen]), np.rad2deg(gridds_r3b7.clat[::4**coarsen]),
c=ds[varname].mean('time')[0,::4**coarsen], s=1, cmap=plt.cm.get_cmap('cmo.thermal'),
transform=ccrs.Geodetic(), vmin=275, vmax=305)
plt.title('mean 2m temperature')
plt.colorbar(plot, orientation='horizontal', shrink=0.5, label=r'2m temperature (K)')
ax.gridlines(draw_labels=True)
ax.set_global()
plt.show()
```
<img src="https://pad.gwdg.de/uploads/7c31b140-bea4-4919-915c-cf4910046178.png" alt="2D temperature at 2m" width="500" />
**Mixed layer depth (ocean variable)**
```python
gridds_r2b9O=xr.open_dataset('/pool/data/ICON/grids/public/mpim/0016/icon_grid_0016_R02B09_O.nc')
dso=xr.open_mfdataset(outdir+'dap010_r3b7-r2b9_oce_qps_*.nc')
varname='mlotst'
coarsen = 3
monyr="1952-03-01"
fig = plt.figure(figsize=(10,6))
G = gridspec.GridSpec(1,1)
ax = plt.subplot(G[0,0], projection=ccrs.Mollweide(central_longitude=0))
ax.coastlines(color='black')
plot = ax.scatter(np.rad2deg(gridds_r2b9O.clon[::4**coarsen]), np.rad2deg(gridds_r2b9O.clat[::4**coarsen]),
c=dso[varname].sel(time=slice(monyr,monyr))[0,::4**coarsen], s=1, cmap=plt.cm.get_cmap('cmo.deep'),
transform=ccrs.Geodetic(), vmin=0, vmax=800)
plt.title('Mixed layer depth ('+monyr+')')
plt.colorbar(plot, orientation='horizontal', shrink=0.5, label=r'MLD (m)')
ax.gridlines(draw_labels=True)
ax.set_global()
plt.show()
```
<img src="https://pad.gwdg.de/uploads/f7e9f7ed-4f74-49b5-92b5-e5f47702d69f.png" alt="2D mixed layer depth" width="500" />
</details>
<details><summary><b> Modified snippet from <a href="https://gitlab.dkrz.de/m300602/pyicon/-/blob/master/quickstart/notebook_plotting.ipynb?ref_type=heads"> pyICON example </a> </b></summary>
```python
import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np
import pyicon as pyic
#Example from CMIP7 experiment with r2b4atm, r2b6oce
outdir='/work/mh0287/b364148/Icon/Git_lev/icon.nwp.hdext.intno/experiments/tvp1774_001/'
dso=xr.open_mfdataset(outdir+'tvp1774_001_oce_def_1[8-9]*.nc')
#Plot mixed layer depth
dso.mlotst10.isel(time=6).pyic.plot()
```
<img src="https://pad.gwdg.de/uploads/b4238dc7-70de-4c5e-8788-cab007755f8b.png" alt="10m wind speed" width="450" />
```python
#Plot regional SST
dso.to.isel(depth=0, time=6).pyic.plot(lon_reg=[100,-70], lat_reg=[-20,20])
```
<img src="https://pad.gwdg.de/uploads/3d679a4c-c6e2-4d63-9bb9-79fc48ef6f21.png" alt="SST" width="650" />
```python
#Example from CMIP7 experiment with r2b5atm, r2b7oce
outdir='/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1826/'
dsa=xr.open_mfdataset(outdir+'slo1826_atm_2d_ml_1[0-2]*.nc')
#Plot 10m wind speed
P = pyic.Plot(1, 1, projection=ccrs.EqualEarth(central_longitude=210.), fig_size_fac=2.5)
P.plot(dsa.sp_10m.isel(height=0, time=1440), template='global')
P.ax.set_title('10m wind speed')
P.ax.set_title('', loc='right')
P.ax.set_title('', loc='left')
P.cax.set_ylabel('wind speed [m/s]')
```
<img src="https://pad.gwdg.de/uploads/a9c8889f-0a33-494b-a5a5-f5f3e083e76a.png" alt="10m wind speed" width="450" />
</details>
### Command line
We will use a script called `pyic_fig.py`, that is part of pyICON. Please refer to `pyic_fig.py --help` for the myraid options you can use to tweak your figure.
<details><summary><b> Quick view example using command line</b></summary>
```brainfuck=bash
pyicdir=/work/mh1421/m300466/tools/pyicon/scripts
cd ${pyicdir}
outdir=/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1826
examplefile=slo1826_atm_2d_ml_19900101T000000Z.nc
varname=sp_10m
figpath=/home/m/m300466/iconfigs/ICON-XPP
figname=slo1826_sp_10m_199001_20W30E_45S20S.png
pyic_fig.py ${outdir}/${examplefile} ${varname} --clim=0,15 --cmap=viridis --use_tgrid --lon_reg=-20,30 --lat_reg=-45,-20 --fpath_fig=${figpath}/${figname}
eog slo1826_sp_10m_199001_20W30E_45S20S.png &
```
<img src="https://pad.gwdg.de/uploads/3ccd4226-a3ef-4026-8931-2fe65887bfbd.png" alt="10m wind speed over South Atlantic" width=500 />
</details>
### Healpix
Precious detailed notes on how to handle healpix can be found on the [easygems website](https://easy.gems.dkrz.de/Processing/healpix/index.html)
<details><summary><b> TL;DR </b></summary>
```python
%pip install easygems
import intake
import healpy
cat = intake.open_catalog("https://data.nextgems-h2020.eu/catalog.yaml")
#Plot time series of global mean surface temeprature
ds = cat.ICON.ngc3028.to_dask()
ds.tas.mean("cell").plot()
```
<img src="https://pad.gwdg.de/uploads/e2b02431-6a4a-4454-91ef-a9c7d3100ec8.png" alt="GMST" width="400" />
```python
#Plot 2D map of surface temperature at time=0
def get_nest(ds):
return ds.crs.healpix_order == "nest"
ds_map = cat.ICON.ngc3028(zoom=7).to_dask()
healpy.mollview(ds_map.tas.isel(time=0), flip="geo", nest=get_nest(ds_map))
```
<img src="https://pad.gwdg.de/uploads/7693723e-2797-474b-833f-5e59d6e3033c.png" alt="2D surface temperature" width="450" />
</details>
### Regular interpolated grid
[Next section on remapping](#Remapping) includes plotting of regridded data.
### Ocean sectional plots
**Python**: Please refer to [pyicon notebook example](https://gitlab.dkrz.de/m300602/pyicon/-/blob/master/quickstart/notebook_plotting.ipynb?ref_type=heads), cell 13 onwards.
**Command line**: A script called `pyic_sec.py`, that is part of pyICON, can be used for making quick sectional plots for 170W, 30W, global zonal average, Atlantic zonal average and Indo-Pacific zonal average. Please refer to `pyic_sec.py --help` for the myraid options you can use to tweak your figure.
<details><summary><b> Sample script using pyic_sec.py </b></summary>
```brainfuck=bash
expid=slo1826
datadir=/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdext/experiments/${expid}
examplefile=${expid}_oce_def_19900101T000000Z.nc
varname="to"
figpath=/home/m/m300466/iconfigs/ICON-XPP
figname=${expid}_${varname}_gzave_199001.png
${pyicdir}/pyic_sec.py ${datadir}/${examplefile} ${varname} --clim=-5,25 --cmap=magma --it=3 --section='gzave' --fpath_fig=${figpath}/${expid}_${varname}_gzave_199001.png
eog ${figpath}/${expid}_${varname}_gzave_199001.png &
```
<img src="https://pad.gwdg.de/uploads/b01a9fb0-783c-4033-abe0-76600c614fa9.png" alt="Global zonal average temperature" width="450" />
</details>
## Remapping
### Native grid with cdo
General recommendation (not a fixed rule) for remapping ICON to lon/lat:
high res to low res $\rightarrow$ remapycon (uses YAC conservative remapping)
low res to high res $\rightarrow$ remapnn (nearest neighbour)
<details><summary><b> Remap r2b9 (5km) ocean to 0.25deg grid </b></summary>
```brainfuck=bash
targetgrid=/work/mh0256/m300466/DPP/grid/IFS25_invertlat_gridexample.nc
remapwgt=/work/mh0256/m300466/DPP/weights/r2b9O_IFS25invertlat_yconremapweights.nc
srcgrid=/pool/data/ICON/grids/public/mpim/0016/icon_grid_0016_R02B09_O.nc
varname=zos
monyr="195101"
examplefile=/work/mh1421/m300466/icon-xpp/icon-2024.10b/build/experiments/dap010_r3b7-r2b9/dap010_r3b7-r2b9_oce_qps_${monyr}01T000000Z.nc
varfile=dap010_r3b7-r2b9_${varname}_${monyr}_IFS25.nc
#Perform remapping without generating weights
cdo -P 96 -remapycon,${targetgrid} -setgrid,${srcgrid} -select,name=${varname} ${examplefile} ${varfile}
#Create weights from r2b9 (oce) to IFS25grid
cdo -P 96 -genycon,${targetgrid} -setgrid,${srcgrid} -selname,${varname} ${examplefile} ${remapwgt}
#Perform remapping using weights generated
cdo -P 96 -remap,${targetgrid},${remapwgt} -setgrid,${srcgrid} -select,name=${varname} ${examplefile} ${varfile}
ncview ${varfile} &
```
<img src="https://pad.gwdg.de/uploads/b9c5c71d-41d0-4f28-9980-b9431bd641b4.png" alt="SSH at 0.25deg resolution" width="400" />()
</details>
<details><summary><b> Remap r2b5 (80km) atmosphere to 0.25deg grid </b></summary>
```brainfuck=bash
targetgrid=/work/mh0256/m300466/DPP/grid/IFS25_invertlat_gridexample.nc
srcgrid=/pool/data/ICON/grids/public/mpim/0053/icon_grid_0053_R02B07_G.nc
varname="umfl_s"
monyr="172001"
examplefile=/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdext/experiments/slo1826/slo1826_atm_2d_ml_${monyr}01T000000Z.nc
varfile=slo1826_${varname}_${monyr}_IFS25.nc
#Perform remapping without generating weights
cdo -P 48 -remapnn,${targetgrid} -setgrid,${srcgrid} -select,name=${varname} ${examplefile} ${varfile}
ncview ${varfile} &
```
<img src="https://pad.gwdg.de/uploads/4e4f51ec-d939-4844-a4da-d80cda727e6d.png" alt="Zonal wind stress at 0.25deg resolution" width="400" />()
</details>
<details><summary><b> Remap from catalogue: r2b9 (5km) ocean to 0.25deg grid </b></summary>
```brainfuck=bash
module use /work/k20200/k202134/hsm-tools/outtake/module
module load hsm-tools/unstable
module sw cdo cdo
targetgrid=/work/mh0256/m300466/DPP/grid/IFS25_invertlat_gridexample.nc
srcgrid=/pool/data/ICON/grids/public/mpim/0016/icon_grid_0016_R02B09_O.nc
varname=mlotst10
yr=2020
filenc=$(query_yaml ICON erc1011 v20240618 ocean native 2d_monthly_mean --var=${varname} --uri --cdo)
varfile=erc2002_${varname}_${yr}_IFS25.nc
#Perform remapping without generating weights
cdo -P 96 -remapycon,${targetgrid} -setgrid,${srcgrid} -select,name=${varname},year=${yr} [ ${filenc} ] ${varfile}
```
<img src="https://pad.gwdg.de/uploads/62d27c3e-7c14-4c1d-ae77-0f2242215e88.png" alt="Mixed layer depth at 0.25deg resolution" width="400" />()
</details>
### HEALpix with python
<details><summary><b> Copied snippet from <a href="https://easy.gems.dkrz.de/Processing/healpix/regridding.html#Using-Python"> easygems </a> </b></summary>
```python
import intake
import matplotlib.pyplot as plt
import healpy as hp
import cmocean
import xarray as xr
import numpy as np
cat = intake.open_catalog("https://data.nextgems-h2020.eu/catalog.yaml")
data = cat["ICON"]["ngc3028"](zoom=7, time="P1D").to_dask()
# Find the HEALPix pixels that are closest to the 1x1 degree grid points.
lon = np.arange(0, 360, 1)
lat = np.arange(90, -91, -1)
pix = xr.DataArray(
hp.ang2pix(data.crs.healpix_nside, *np.meshgrid(lon, lat), nest=True, lonlat=True),
coords=(("lat", lat), ("lon", lon)),
)
# Plot the 1x1 world map for a given variable and time.
data.tas.isel(cell=pix).sel(time="2020-09-30").plot(
vmin=253, vmax=303, cmap=cmocean.cm.thermal
)
```
<img src="https://pad.gwdg.de/uploads/1bd5ae3e-404f-4baf-b7e5-4fe282e01446.png" alt="global 2m temperature at 1x1deg resolution" width="500" />
</details>
### HEALpix with cdo
<details><summary><b> Modified snippet from <a href="https://easy.gems.dkrz.de/Processing/healpix/regridding.html#Using-CDO"> easygems </a> </b></summary>
1) Create text file containing 1x1 grid info.
<details><summary><b> global_1x1.txt </b></summary>
```bash
#
# Global 1x1 deg grid
#
gridtype = lonlat
gridsize = 65160
xsize = 360
ysize = 181
xname = lon
xlongname = "longitude"
xunits = "degrees_east"
yname = lat
ylongname = "latitude"
yunits = "degrees_north"
xfirst = 0
xinc = 1
yfirst = 90
yinc = -1
```
</details>
2) Use cdo to interpolate
```bash
module use /work/k20200/k202134/hsm-tools/outtake/module
module load hsm-tools/unstable
module sw cdo cdo
DATAPATH=$(query_yaml.py ICON ngc3028 -s time=P1D zoom=6 --cdo)
cdo -f nc4 -remapnn,global_1x1.txt [ -select,name=tas,date="2020-09-30" ${DATAPATH} ] ngc3028_tas_20200930.nc
ncview ngc3028_tas_20200930.nc &
```
<img src="https://pad.gwdg.de/uploads/200b41b0-f4f4-4967-8ad2-10e79b3c877a.png" alt="ncview global 2m temperature at 1x1deg resolution" width="450" />
</details>
## Caveats in ICON
Honorable mentions on some caveats in ICON that may matter for the analysis.
:::warning
1) 3D **time-mean** atmospheric output on model levels only. See next section to [interpolate to pressure level](#Interpolating-from-model-levels-to-pressure-levels)
2) Time shift in output (e.g. `cdo -shifttime,-14days` for monthly files)
3) For sea surface height, better to use `ssh` instead of `zos`, especially under sea-ice
4) ICON-A is non-hydrostatic, be careful with conversion of wa to omega
5) Ocean has time-variant vertical coordinate system (zstar)
:::
## Atmospheric 3D variables
### Interpolating from model levels to pressure levels
ICON can only output on pressure levels if they are instantaneous outputs. For time-mean variables, they have to be outputted on model levels. Hence, you may need to interpolate from model level to pressure level, which is easily done with cdo.
<details><summary><b> Command line example for interpolation (model to pressure levels) </b></summary>
We use C5 experiments (ICON-Sapphire) as an example.
```brainfuck=bash
#Find where files are located using `query_yaml`
module use /work/k20200/k202134/hsm-tools/outtake/module
module load hsm-tools/unstable
filelist_ctl7=$(query_yaml ICON C5 AMIP_CNTL --search_args grid=R02B07 time=P1D --uri --var ta --cdo)
filelist_p4k7=$(query_yaml ICON C5 AMIP_P4K --search_args grid=R02B07 time=P1D --uri --var ta --cdo)
```
In this example, we first horizontally interpolate the relevant variables onto 1x1deg grid, and then vertically interpolate onto the pressure levels.
```brainfuck=bash
res=r2b7
RES=R02B07
ctldir=/work/mh0730/C5/experiments/LUMI_AMIP_${RES}_CNTL/public
p4kdir=/work/mh0730/C5/experiments/LUMI_AMIP_${RES}_P4K/public
ctlprefix=LUMI_AMIP_hpz8_CNTL_atm_P1D
p4kprefix=LUMI_AMIP_hpz8_P4K_atm_P1D
outdir=/work/mh1421/m300466/analysis/amipC5
#Horizontal interpolation onto 1x1deg
declare -a varnamearr=("pfull" "ta" "ua" "va")
for varname in "${varnamearr[@]}"
do
for yyyy in $(seq 1979 1981);
do
cdo -f nc4 -remapnn,global_1x1.txt -monmean [ -select,name=${varname} ${ctldir}/${ctlprefix}_${yyyy}.nc ] ${outdir}/${varname}_AMIP_CNTL_${res}_mm_${yyyy}_1x1deg.nc
cdo -f nc4 -remapnn,global_1x1.txt -monmean [ -select,name=${varname} ${p4kdir}/${p4kprefix}_${yyyy}.nc ] ${outdir}/${varname}_AMIP_P4K_${res}_mm_${yyyy}_1x1deg.nc
done
done
#Vertical interpolation from model to pressure levels
declare -a scnarr=("AMIP_CNTL" "AMIP_P4K")
LEVELS="100000,92500,85000,77500,70000,60000,50000,40000,30000,25000,20000,15000,10000,7000,5000,3000,1000"
for scn in "${scnarr[@]}"
do
for yyyy in $(seq 1979 1981);
do
inDat1=${outdir}/${varname}_${scn}_${res}_mm_${yyyy}_1x1deg.nc
inDat2=${outdir}/pfull_${scn}_${res}_mm_${yyyy}_1x1deg.nc
inDat3=${outdir}/ps_${scn}_${res}_mm_${yyyy}_1x1deg.nc
inatm3D=${outdir}/Uatm_${scn}_${res}_ml_mm_${yyyy}_1x1deg.nc
outsuffix=${scn}_${res}_pl_mm_${yyyy}_1x1deg
cdo -merge [ ${inDat1} ${inDat2} ${inDat3} ] ${inatm3D}
cdo -P 48 -ap2plx,${LEVELS} ${inatm3D} ${outdir}/${varname}_${outsuffix}.nc
rm -f ${inatm3D}
done
done
```
</details>
### Hadley Circulation (zonal mean)
<details><summary><b> Compute mass streamfunction and take zonal mean </b></summary>
```brainfuck=bash
res=r2b7
RES=R02B07
outdir=/work/mh1421/m300466/analysis/amipC5
declare -a scnarr=("AMIP_CNTL" "AMIP_P4K")
LEVELS="100000,92500,85000,77500,70000,60000,50000,40000,30000,25000,20000,15000,10000,7000,5000,3000,1000"
for scn in "${scnarr[@]}"
do
for yyyy in $(seq 1979 1981);
do
outsuffix=${scn}_${res}_pl_mm_${yyyy}_1x1deg
outDat=${outdir}/atmpsi_${outsuffix}.nc
#Compute stream function, take zonal mean
cdo -r mastrfu -zonmean -sellevel,${LEVELS} -selvar,va ${outdir}/Uatm_${outsuffix} ${outdir}/mastrfu_${outsuffix}
cdo -divc,1000000000 ${outdir}/mastrfu_${outsuffix} ${outDat}
done
done
```
</details>
## Model evaluation packages
### Quick plots with pyicon
There's a driver script to produce quickplots for ICON simulations. Edits are needed for each simulation.
<details><summary><b> Example driver script for making quick plots </b></summary>
We use a DRAGON run as an example.
cd /work/mh1421/m300466/tools/pyicon/tools
vi run_qp_driver_dragon_r3b7-r2b9.sh
```brainfuck=bash
#!/bin/bash
#SBATCH --job-name=pyicon_qp
#SBATCH --time=02:00:00
#SBATCH --output=log.o-%j.out
#SBATCH --error=log.o-%j.out
#SBATCH --nodes=1
#SBATCH --exclusive
#SBATCH --partition=compute
#SBATCH --account=mh1421
cd /work/mh1421/m300466/tools/pyicon/tools
module list
source /home/m/m300602/pyicon/tools/act_pyicon_py39.sh
which python
rand=$(cat /dev/urandom | tr -dc 'A-Z' | fold -w 3 | head -n 1)
PYICON_PATH="$( cd "$(pwd)/.." >/dev/null 2>&1 && pwd )" # problem: takes directory as base from where this script is called
export PYTHONPATH="${PYICON_PATH}"
path_pyicon=`(cd .. && pwd)`"/"
config_file="./config_qp_${rand}.py"
qp_driver="${path_pyicon}pyicon/quickplots/qp_driver.py"
cat > ${config_file} << %eof%
# --- path to quickplots
path_quickplots = '../all_qps/dragon'
# --- set this to True if the simulation is still running
omit_last_file = True
ave_freq = 0
save_data = False
path_nc = 'auto'
# --- do ocean and/or atmosphere plots
do_atmosphere_plots = True
do_conf_dwd = True
do_djf = False
do_jja = False
do_ocean_plots = True
# --- grid information
gname = 'r2b9_oce_r0004'
lev = 'L72'
gname_atm = 'r3b7_atm_r0026'
lev_atm = 'L130'
# --- path to interpolation files
path_grid = '/work/mh0033/m300602/icon/grids/'+gname+'/'
path_grid_atm = '/work/mh0033/m300602/icon/grids/'+gname_atm+'/'
path_ckdtree = path_grid+'/ckdtree/'
path_ckdtree_atm = path_grid_atm+'/ckdtree/'
# --- grid files and reference data
fpath_tgrid_atm = path_grid_atm + gname_atm+'_tgrid.nc'
path_atm_ref = '/pool/data/ICON/edzw-shadow/grids/r2b5_atm_r0030/'
fpath_ref_data_atm = path_atm_ref+'era5_pyicon_1959-2010_1.5x1.5deg.nc'
fpath_ref_data_atm_rad = path_atm_ref+'ceres_pyicon_2001-2021_1.5x1.5deg.nc'
fpath_ref_data_atm_prec = path_atm_ref+'gpm_pyicon_2001-2020_1.5x1.5deg.nc'
path_pool_oce = '/pool/data/ICON/oes/input/r0005/OceanOnly_IcosSymmetric_4932m_rotatedZ37d_modified_srtm30_1min/L72/'
#gnameu = gname.split('_')[0].upper()
fpath_tgrid = path_grid + gname+'_tgrid.nc'
fpath_ref_data_oce = path_pool_oce + 'R2B9L72_initial_state.nc'
fpath_fx = path_pool_oce + 'R2B9L72_fx.nc'
# --- mappings for ocean
D_variable_container = dict(
default = '_oce_qps',
to = '_oce_qps',
so = '_oce_qps',
u = '_oce_qps',
v = '_oce_qps',
massflux = '_oce_qps',
moc = '_oce_moc',
mon = '_oce_mon',
ice = '_oce_qps',
monthly = '_oce_qps',
sqr = '_oce_qps',
)
# --- mappings for atmosphere
atm_2d = '_atm_2d_ml'
atm_3d = '_atm_3d_ml'
atm_mon = '_atm_mon'
red_list = []
# from dwd; does not work for MPI-ICON
red_list += ['ts_pme_gmean']
red_list += ['ice_conc_mon_nh', 'mlotst_mon']
# uncomment this to omit plots which require loading 3D u, v
red_list += ['arctic_budgets']
# uncomment this to omit plots which require loading 3D density
red_list += ['dens30w','atm_geop_500_bias','atm_geop_500','atm_cc_zave']
%eof%
# --- start qp_driver
startdate=`date +%Y-%m-%d\ %H:%M:%S`
run="dap010_r3b7-r2b9"
path_data="/work/mh1421/m300466/icon-xpp/icon-2024.10b/build/experiments/${run}/"
python -u ${qp_driver} --batch=True ${config_file} --path_data=$path_data --run=$run --tave_int='1951-02-01,1954-01-01'
enddate=`date +%Y-%m-%d\ %H:%M:%S`
rm ${config_file}
echo "--------------------------------------------------------------------------------"
echo "Started at ${startdate}"
echo "Ended at ${enddate}"
```
</details>
[View quick plots on swiftbrowser](https://swift.dkrz.de/v1/dkrz_b70a6895-056b-4057-943d-2495ab773b09/m300466_DRAGON/dragon/qp-dap010_r3b7-r2b9/tave_1951-02-01-1954-01-01/qp_index.html)
### Climate Variability Diagnostic Package
CVDP is a package to obtain quick assessment of the different climate modes in the simulations. You can download the newest version v6.0.0 at [https://github.com/NCAR/CVDP-ncl?tab=readme-ov-file](https://github.com/NCAR/CVDP-ncl?tab=readme-ov-file)
The observational dataset used in CVDP can be downloaded from [https://www.cesm.ucar.edu/projects/cvdp/observations](https://www.cesm.ucar.edu/projects/cvdp/observations)
<details><summary><b> Download CVDP </b></summary>
```brainfuck=bash
cd /work/mh1421/m300466/tools
git clone https://github.com/NCAR/CVDP-ncl.git CVDP
ls CVDP/
driver.ncl LICENSE namelist namelist_obs README.md scripts/
#Prepare folders for running CVDP on many simulations
cd CVDP
mv namelist namelist.orig
mv namelist_obs namelist_obs.orig
mkdir -p icondata/ cvdpplots/ driverscripts/
```
</details>
<details><summary><b> Example of running CVDP for a simulation </b></summary>
We use a low res DRAGON run as an example. Here is a script `go_cvdp.sh` which you can modify to run CVDP.
```brainfuck=bash
#!/bin/bash -x
CDO="cdo -P 48"
module load ncl
\rm namelist
\rm namelist_obs
obs=TRUE
touch namelist_obs
##### observations #####
if [ $obs == TRUE ]; then
cat >>namelist_obs<<EOF
TS | HadISST | /work/mh0033/m211054/projects/cvdp/obs/sst_HadISST_sst_187001_202402.nc | 1950 | 2010
PSL | 20CR | /work/mh0033/m211054/projects/cvdp/obs/prmsl_20CR_187101_201212.nc | 1950 | 2010
TREFHT | BEST | /work/mh0033/m211054/projects/cvdp/obs/BEST/tas_abs_miss_Land_and_Ocean_LatLong1_185001_202401.nc | 1950 | 2010
PRECT | GPCP| /work/mh0033/m211054/projects/cvdp/obs/precip_GPCP_197901_202403.nc | 1980 | 2010
EOF
fi
##### simulations ######
expid=hel24312_r5b7_ctrl
expdir=/work/mh0033/m211054/projects/icon/seamless/icon-2024.10/build_hdext/experiments/${expid}/outdata/
ystart=1750
yend=1799
datadir=/work/mh1421/m300466/tools/CVDP/icondata/data_${expid}_${ystart}-${yend}
plotdir=/work/mh1421/m300466/tools/CVDP/cvdpplots/${expid}_cvdp_${ystart}-${yend}
###Prepare the files for running CVDP
mkdir -p $datadir
mkdir -p $plotdir
$CDO -O -f nc -cat $expdir/*atm_2d_ml* ${datadir}/${expid}_BOT.nc
REMAP="-remapnn,r360x180"
SELYEAR="-selyear,$ystart/$yend -shifttime,-14days" #monthly files
$CDO $REMAP $SELYEAR -chname,t_2m,tas -selvar,t_2m ${datadir}/${expid}_BOT.nc ${datadir}/tas_${expid}_icon_BOT_mm_${ystart}01_${yend}12.nc
$CDO $REMAP $SELYEAR -chname,tot_prec_rate,pr -selvar,tot_prec_rate ${datadir}/${expid}_BOT.nc ${datadir}/pr_${expid}_icon_BOT_mm_${ystart}01_${yend}12.nc
$CDO $REMAP $SELYEAR -chname,pres_msl,psl -selvar,pres_msl ${datadir}/${expid}_BOT.nc ${datadir}/psl_${expid}_icon_BOT_mm_${ystart}01_${yend}12.nc
$CDO $REMAP $SELYEAR -chname,t_s,ts -selvar,t_s ${datadir}/${expid}_BOT.nc ${datadir}/ts_${expid}_icon_BOT_mm_${ystart}01_${yend}12.nc
##$CDO $REMAP $SELYEAR -selvar,snd ${datadir}/${expid}_BOT.nc ${datadir}/snd_${expid}_icon_BOT_mm_${ystart}01_${yend}12.nc
rm ${datadir}/${expid}_BOT.nc
###Create namelist of experiments for CVDP to run
cat >>namelist<<EOF
$expid | ${datadir}/ | ${ystart} | ${yend}
EOF
### Run CVDP ##
#cd /work/mh1421/m300466/tools/CVDP
cp driver.ncl ${expid}_${ystart}-${yend}.ncl
sed -i "s/\/project\/diag\/Comparison1/\/work\/mh1421\/m300466\/tools\/CVDP\/cvdpplots\/${expid}_cvdp_${ystart}-${yend}/" ${expid}_${ystart}-${yend}.ncl
sed -i "s/Title\ goes\ here/${expid}\ (${ystart}-${yend})/" ${expid}_${ystart}-${yend}.ncl
ncl ${expid}_${ystart}-${yend}.ncl
mv ${expid}_${ystart}-${yend}.ncl driverscripts/
rm -rf ${datadir}
rm ${plotdir}/*.nc
```
</details>
<details><summary><b> Upload figures to swiftbrowser and view </b></summary>
```bash
module load py-python-swiftclient/3.12.0-gcc-11.2.0
cd /work/mh1421/m300466/tools/CVDP
swift upload m300466_DRAGON cvdpplots
```
[View CVDP plots](https://swift.dkrz.de/v1/dkrz_b70a6895-056b-4057-943d-2495ab773b09/m300466_DRAGON/cvdpplots/hel24312_r5b7_ctrl_cvdp_1750-1799/index.html)
</details>
## 2D bivariate time series analysis
Using `cdo` to perform basic time series analysis on ICON output.
### Correlation and Regression
Correlation and regression coefficients can be simulataneously computed for each grid point on the native grid so that we can obtain 2D maps of the bi-variate relations.
<details><summary><b> Example script for computing correlation and regression </b></summary>
This example uses a control CMIP7 experiment (slo1774; 160km atm resolution).
Be sure to remove trend and largest "known" time scale, e.g. seasonal cycle.
```bash
expid=slo1774
datadir=/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdint/experiments/${expid}
outdir=/work/mh1421/m300466/blah/${expid}
varname1="t_2m"
varname2="sp_10m"
yyyys=1200
yyyye=1299
mkdir -p ${outdir}
# Detrend and remove seasonal cycle
cdo -ymonsub -detrend -select,name=${varname1},year=${yyyys}/${yyyye}/1 [ ${datadir}/slo1774_atm_2d_ml_*.nc ] -ymonmean -detrend -select,name=${varname1},year=${yyyys}/${yyyye}/1 [ ${datadir}/slo1774_atm_2d_ml_*.nc ] ${outdir}/rmseas_${varname1}_mm_${yyyys}-${yyyye}.nc
cdo -ymonsub -detrend -select,name=${varname2},year=${yyyys}/${yyyye}/1 [ ${datadir}/slo1774_atm_2d_ml_*.nc ] -ymonmean -detrend -select,name=${varname2},year=${yyyys}/${yyyye}/1 [ ${datadir}/slo1774_atm_2d_ml_*.nc ] ${outdir}/rmseas_${varname2}_mm_${yyyys}-${yyyye}.nc
#Correlation computed directly from cdo
cdo -timcor ${outdir}/rmseas_${varname1}_mm_${yyyys}-${yyyye}.nc ${outdir}/rmseas_${varname2}_mm_${yyyys}-${yyyye}.nc ${outdir}/timcor_${varname1}_${varname2}_mm_${yyyys}-${yyyye}.nc
#Correlation = covariance/(std(x)*std(y))
cdo -div -timcovar ${outdir}/rmseas_${varname1}_mm_${yyyys}-${yyyye}.nc ${outdir}/rmseas_${varname2}_mm_${yyyys}-${yyyye}.nc -mul -timstd ${outdir}/rmseas_${varname1}_mm_${yyyys}-${yyyye}.nc -timstd ${outdir}/rmseas_${varname2}_mm_${yyyys}-${yyyye}.nc ${outdir}/timecorr_${expid}_${varname1}_${varname2}_mm_${yyyys}-${yyyye}.nc
#Regrid to 1x1deg for easy plotting
cdo -remapycon,r360x180 ${outdir}/timecorr_${expid}_${varname1}_${varname2}_mm_${yyyys}-${yyyye}.nc ${outdir}/timecorr_${expid}_${varname1}_${varname2}_mm_${yyyys}-${yyyye}_r360x180.nc
#Plot
ncview ${outdir}/timecorr_${expid}_${varname1}_${varname2}_mm_${yyyys}-${yyyye}_r360x180.nc &
#Regression(y on x)=covariance(x,y)/variance(x)
cdo -div -timcovar ${outdir}/rmseas_${varname1}_mm_${yyyys}-${yyyye}.nc ${outdir}/rmseas_${varname2}_mm_${yyyys}-${yyyye}.nc -timvar ${outdir}/rmseas_${varname1}_mm_${yyyys}-${yyyye}.nc
${outdir}/regress_${varname2}_on_${varname1}_${expid}_mm_${yyyys}-${yyyye}.nc
#Regrid to 1x1deg for easy plotting
cdo -remapycon,r360x180 ${outdir}/regress_${varname2}_on_${varname1}_${expid}_mm_${yyyys}-${yyyye}.nc ${outdir}/regress_${varname2}_on_${varname1}_${expid}_mm_${yyyys}-${yyyye}_r360x180.nc
#Plot
ncview ${outdir}/regress_${varname2}_on_${varname1}_${expid}_mm_${yyyys}-${yyyye}_r360x180.nc &
```
</details>details>
### Temporal Spectra
While variance/covariance gives you the combined variability on all time scales, the power/cross spectra allows us to assess the variability at particular frequency. Furthermore, the squared coherence, phase spectra and gain functions tells us the correlation, lead-lag and regression, respectively, at specific frequency/timescales.
The spectra can be simulataneously computed for each grid point on the native grid so that we can obtain 2D maps of how variability and bi-variate relations may look like on different frequency/timescales.
<details><summary><b> Example script for spectral analysis </b></summary>
This example uses a control CMIP7 experiment (slo1774; 160km atm resolution). The script is called `timespectra_iconxpp.sh`
```bash
#!/bin/sh
expid=slo1774
DATAPATH=/work/mh0287/m211032/Icon/Git_lev/icon.XPP.20240717/build.intel-hdint/experiments/${expid}
OUTPATH=/work/mh1421/m300466/blah/${expid}/spectra
mkdir -p ${OUTPATH}
YYYYs=1000
YYYYe=2099
Tyear=100
Tlen=$Tyear #annual values
varname1="t_2m"
varname2="sp_10m"
varxy="${varname1}_${varname2}"
PSfacfile=${OUTPATH}/PSfac${Tlen}atmfile
setgridfile=${OUTPATH}/setgrid${Tlen}atmfile.nc
### end of user define ###
iens=1
YYYYint=$YYYYs
YYYYce=`expr $YYYYe - $Tyear + 1`
fqpt=$(expr $Tlen / 2 + 1 )
fqptm=$(expr $Tlen / 2 )
tvec=($(seq 0 1 $fqptm))
tlist="time(:)={"$(printf "%s," "${tvec[@]}" | sed 's/,$//')"}"
PSfac=$(echo "2/$Tlen" | bc -l )
r2d=$(echo "180/3.14159" | bc -l )
while [ $YYYYint -le $YYYYce ] ; do
YYYYinte=`expr $YYYYint + $Tyear - 1`
if [ $iens -le 9 ] ; then
ensid="0${iens}"
else
ensid="${iens}"
fi
#Multiplication factor (2/time length) for power spectrum [need to only make once]
if [ $YYYYint -eq $YYYYs ]; then
echo "Compute multiplication factor for spectrum"
cdo -s -detrend -yearmean -select,name=${varname1},year=${YYYYint}/${YYYYinte}/1 [ ${DATAPATH}/${expid}_atm_2d_ml_*.nc ] ${setgridfile}
cdo -f ext -retocomplex -setmisstoc,${PSfac} -setrtomiss,-50,50 ${setgridfile} ${PSfacfile}
fi
# Detrend
cdo -detrend -yearmean -select,name=${varname1},year=${YYYYint}/${YYYYinte}/1 [ ${DATAPATH}/slo1774_atm_2d_ml_*.nc ] ${OUTPATH}/detrend_${varname1}_ym_ens${ensid}.nc
cdo -detrend -yearmean -select,name=${varname2},year=${YYYYint}/${YYYYinte}/1 [ ${DATAPATH}/slo1774_atm_2d_ml_*.nc ] ${OUTPATH}/detrend_${varname2}_ym_ens${ensid}.nc
# Fourier Transform
cdo -s -f ext fourier,-1 -retocomplex ${OUTPATH}/detrend_${varname1}_ym_ens${ensid}.nc ${OUTPATH}/fft_${varname1}_ens${ensid}
cdo -s -f ext fourier,-1 -retocomplex ${OUTPATH}/detrend_${varname2}_ym_ens${ensid}.nc ${OUTPATH}/fft_${varname2}_ens${ensid}
# Multiply by conjugate and with factor (2/time length) to get periodogram
echo "Compute periodogram and cross periodogram for "${ensid}
# spxx
cdo -s -mul ${PSfacfile} -mul ${OUTPATH}/fft_${varname1}_ens${ensid} -conj ${OUTPATH}/fft_${varname1}_ens${ensid} ${OUTPATH}/SPXX_ens${ensid}
# spyy
cdo -s -mul ${PSfacfile} -mul ${OUTPATH}/fft_${varname2}_ens${ensid} -conj ${OUTPATH}/fft_${varname2}_ens${ensid} ${OUTPATH}/SPYY_ens${ensid}
# spxy
cdo -s -mul ${PSfacfile} -mul ${OUTPATH}/fft_${varname1}_ens${ensid} -conj ${OUTPATH}/fft_${varname2}_ens${ensid} ${OUTPATH}/SPXY_ens${ensid}
rm ${OUTPATH}/fft_${varname1}_ens${ensid}
rm ${OUTPATH}/fft_${varname2}_ens${ensid}
cdo -s -complextorect ${OUTPATH}/SPXX_ens${ensid} ${OUTPATH}/SPXXreal_ens${ensid} ${OUTPATH}/SPXXimag_ens${ensid}
cdo -s -complextorect ${OUTPATH}/SPYY_ens${ensid} ${OUTPATH}/SPYYreal_ens${ensid} ${OUTPATH}/SPYYimag_ens${ensid}
cdo -s -complextorect ${OUTPATH}/SPXY_ens${ensid} ${OUTPATH}/SPXYreal_ens${ensid} ${OUTPATH}/SPXYimag_ens${ensid}
rm ${OUTPATH}/SPXX_ens${ensid}
rm ${OUTPATH}/SPYY_ens${ensid}
rm ${OUTPATH}/SPXY_ens${ensid}
iens=`expr $iens + 1`
YYYYint=`expr $YYYYint + $Tyear`
done #iens
echo "Finished processing periodogram"
echo "Compute ensemble mean of power and cross spectrum "
# Mean power spectrum (separate computation for real and imag parts)
# Only use first-half of spectrum
cdo -s -setreftime,0 -select,timestep=1/${fqpt} -ensmean "${OUTPATH}/SPXXreal_ens*" ${OUTPATH}/MSPXXreal_${expid}
cdo -s -setreftime,0 -select,timestep=1/${fqpt} -ensmean "${OUTPATH}/SPXXimag_ens*" ${OUTPATH}/MSPXXimag_${expid}
cdo -s -setreftime,0 -select,timestep=1/${fqpt} -ensmean "${OUTPATH}/SPYYreal_ens*" ${OUTPATH}/MSPYYreal_${expid}
cdo -s -setreftime,0 -select,timestep=1/${fqpt} -ensmean "${OUTPATH}/SPYYimag_ens*" ${OUTPATH}/MSPYYimag_${expid}
cdo -s -setreftime,0 -select,timestep=1/${fqpt} -ensmean "${OUTPATH}/SPXYreal_ens*" ${OUTPATH}/MSPXYreal_${expid}
cdo -s -setreftime,0 -select,timestep=1/${fqpt} -ensmean "${OUTPATH}/SPXYimag_ens*" ${OUTPATH}/MSPXYimag_${expid}
rm ${OUTPATH}/SPXXreal_ens*
rm ${OUTPATH}/SPXXimag_ens*
rm ${OUTPATH}/SPYYreal_ens*
rm ${OUTPATH}/SPYYimag_ens*
rm ${OUTPATH}/SPXYreal_ens*
rm ${OUTPATH}/SPXYimag_ens*
#Convert back to complex
cdo -s -add -retocomplex ${OUTPATH}/MSPXXreal_${expid} -imtocomplex ${OUTPATH}/MSPXXimag_${expid} ${OUTPATH}/MSPXX_${expid}
cdo -s -add -retocomplex ${OUTPATH}/MSPYYreal_${expid} -imtocomplex ${OUTPATH}/MSPYYimag_${expid} ${OUTPATH}/MSPYY_${expid}
cdo -s -add -retocomplex ${OUTPATH}/MSPXYreal_${expid} -imtocomplex ${OUTPATH}/MSPXYimag_${expid} ${OUTPATH}/MSPXY_${expid}
# Mean power and cross spectra
cdo -f nc -setgrid,${setgridfile} -abs ${OUTPATH}/MSPXX_${expid} ${OUTPATH}/powerspec_${varname1}_${expid}.nc
cdo -f nc -setgrid,${setgridfile} -abs ${OUTPATH}/MSPYY_${expid} ${OUTPATH}/powerspec_${varname2}_${expid}.nc
cdo -f nc -setgrid,${setgridfile} -abs ${OUTPATH}/MSPXY_${expid} ${OUTPATH}/crossspec_${varxy}_${expid}.nc
#Coherence
echo "Compute coherence and regrid to geographical locations"
cdo -s -mul -abs ${OUTPATH}/MSPXY_${expid} -abs ${OUTPATH}/MSPXY_${expid} ${OUTPATH}/abs2MSPXY_${expid}
cdo -s -mul ${OUTPATH}/MSPXX_${expid} ${OUTPATH}/MSPYY_${expid} ${OUTPATH}/MSPXXxMSPYY_${expid}
cdo -s -div ${OUTPATH}/abs2MSPXY_${expid} -re ${OUTPATH}/MSPXXxMSPYY_${expid} ${OUTPATH}/SQCOH_${varxy}_${expid}
cdo -f nc -setgrid,${setgridfile} ${OUTPATH}/SQCOH_${varxy}_${expid} ${OUTPATH}/coher_${varxy}_${expid}.nc
rm ${OUTPATH}/abs2MSPXY_${expid}
rm ${OUTPATH}/MSPXXxMSPYY_${expid}
rm ${OUTPATH}/SQCOH_${varxy}_${expid}
#Phase spectrum
echo "Compute phase spectrum and regrid to geographical locations"
cdo -f nc -setgrid,${setgridfile} -mulc,${r2d} -atan2 -mulc,-1 ${OUTPATH}/MSPXYimag_${expid} ${OUTPATH}/MSPXYreal_${expid} ${OUTPATH}/phase_${varxy}_${expid}.nc
#Gain spectrum
echo "Compute gain spectrum and regrid to geographical locations"
#Regression of Y on X
cdo -div -abs ${OUTPATH}/MSPXY_${expid} -abs ${OUTPATH}/MSPXX_${expid} ${OUTPATH}/gainXY_${varxy}_${expid}
cdo -f nc -setgrid,${setgridfile} ${OUTPATH}/gainXY_${varxy}_${expid} ${OUTPATH}/gainXY_${varxy}_${expid}.nc
rm ${OUTPATH}/gainXY_${varxy}_${expid}
#Regression of X on Y
cdo -div -abs ${OUTPATH}/MSPXY_${expid} -abs ${OUTPATH}/MSPYY_${expid} ${OUTPATH}/gainYX_${varxy}_${expid}
cdo -f nc -setgrid,${setgridfile} ${OUTPATH}/gainYX_${varxy}_${expid} ${OUTPATH}/gainYX_${varxy}_${expid}.nc
rm ${OUTPATH}/gainYX_${varxy}_${expid}
# Adjust frequency axis
ncap2 -O -h -s ${tlist} ${OUTPATH}/powerspec_${varname1}_${expid}.nc ${OUTPATH}/powerspec_${varname1}_${expid}.nc
ncap2 -O -h -s ${tlist} ${OUTPATH}/powerspec_${varname2}_${expid}.nc ${OUTPATH}/powerspec_${varname2}_${expid}.nc
ncap2 -O -h -s ${tlist} ${OUTPATH}/crossspec_${varxy}_${expid}.nc ${OUTPATH}/crossspec_${varxy}_${expid}.nc
ncap2 -O -h -s ${tlist} ${OUTPATH}/coher_${varxy}_${expid}.nc ${OUTPATH}/coher_${varxy}_${expid}.nc
ncap2 -O -h -s ${tlist} ${OUTPATH}/phase_${varxy}_${expid}.nc ${OUTPATH}/phase_${varxy}_${expid}.nc
ncap2 -O -h -s ${tlist} ${OUTPATH}/gainXY_${varxy}_${expid}.nc ${OUTPATH}/gainXY_${varxy}_${expid}.nc
ncap2 -O -h -s ${tlist} ${OUTPATH}/gainYX_${varxy}_${expid}.nc ${OUTPATH}/gainYX_${varxy}_${expid}.nc
# Remove intermediate files
rm ${OUTPATH}/MSPXXreal_${expid}
rm ${OUTPATH}/MSPXXimag_${expid}
rm ${OUTPATH}/MSPYYreal_${expid}
rm ${OUTPATH}/MSPYYimag_${expid}
rm ${OUTPATH}/MSPXYreal_${expid}
rm ${OUTPATH}/MSPXYimag_${expid}
rm ${OUTPATH}/MSPXX_${expid}
rm ${OUTPATH}/MSPYY_${expid}
rm ${OUTPATH}/MSPXY_${expid}
#Remap to 1x1deg for easy plotting
cdo -remapycon,r360x180 ${OUTPATH}/powerspec_${varname1}_${expid}.nc ${OUTPATH}/powerspec_${varname1}_${expid}_r360x180.nc
cdo -remapycon,r360x180 ${OUTPATH}/powerspec_${varname2}_${expid}.nc ${OUTPATH}/powerspec_${varname2}_${expid}_r360x180.nc
cdo -remapycon,r360x180 ${OUTPATH}/crossspec_${varxy}_${expid}.nc ${OUTPATH}/crossspec_${varxy}_${expid}_r360x180.nc
cdo -remapycon,r360x180 ${OUTPATH}/coher_${varxy}_${expid}.nc ${OUTPATH}/coher_${varxy}_${expid}_r360x180.nc
cdo -remapycon,r360x180 ${OUTPATH}/phase_${varxy}_${expid}.nc ${OUTPATH}/phase_${varxy}_${expid}_r360x180.nc
cdo -remapycon,r360x180 ${OUTPATH}/gainXY_${varxy}_${expid}.nc ${OUTPATH}/gainXY_${varxy}_${expid}_r360x180.nc
cdo -remapycon,r360x180 ${OUTPATH}/gainYX_${varxy}_${expid}.nc ${OUTPATH}/gainYX_${varxy}_${expid}_r360x180.nc
```
</details>
## Example notebooks for some scientific analysis from 2024 pre-hackathon
This was prepared for the 2024 hackathon (nextGEMS, EERIE, WarmWorld). Here's a [collection of examples](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/README.md) particularly for topics on mesoscale eddies and their impact on air-sea coupling, ocean state (physical and BGC) and atmospheric state.
<details><summary><b> Collection of example notebooks </b></summary>
- [Eddy identification, tracking and compositing](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/eddy_track_composite/README.md) of physical (ocean/atmos) and biogeochemical properties
- ICON (read-in netcdf; serial running): [identify and track eddies](https://github.com/eerie-project/EERIE_hackathon_2023/blob/main/ICON/ICON-O/howto-IDtrackcompeddy-daily.ipynb), [build eddy composites](https://github.com/eerie-project/EERIE_hackathon_2023/blob/main/ICON/ICON-O/howto-eddycompositeotherfields-daily.ipynb), [plot composites](https://github.com/eerie-project/EERIE_hackathon_2023/blob/main/ICON/ICON-O/howto-plot-eddycompositesalongtrack-dm.ipynb) by Dian Putrasahan
- ICON (read-in netcdf; parallel running): [py-eddy-tracker parameter sensitivity experiment](https://github.com/eerie-project/EERIE_hackathon_2023/tree/main/RESULTS/pyeddytracker_parallel_computing) by Arjun Kumar
- ICON ( [parallelise eddy identification code](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/eddy_track_composite/ICON/identify_fast.py) and [compositing with higher res data](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/eddy_track_composite/ICON/composite_tracks.py) than 0.25deg) by Moritz Epke
- ICON ([read-in as xarray; parallel running](https://github.com/eerie-project/EERIE_hackathon_2023/tree/main/RESULTS/pyeddytracker_xarray_dask_parallel)) by Aaron Wienkers
- [IFS-AMIP](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/RESULTS/eddy_composites-short.ipynb) (atm response) by Matthias Aengenheyster
- [IFS/FESOM](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/eddy_track_composite/IFS-FESOM/IDtrackeddy-daily-intake_IFSFESOM.ipynb) (use intake and read-in as xarray; parallel running) by Aaron Wienkers and Dian Putrasahan
- [HAMOCC](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/eddy_track_composite/HAMOCC/README.md) (read-in netcdf; serial running) by Johann Jungclaus and Dian Putrasahan
- [Spatial filters](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/Spatial_Filters/README.md) on regular grid
1. [Weighted area-average smoothing](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/Spatial_Filters/README.md#weighted-area-average-smoothing-using-cdo) using `cdo -smooth` operator.
- [Spatial filtering on HEALpix data](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/Spatial_Filters/README.md#bonus-spatial-filtering-on-healpix-data).
2. [Bessel filter](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/Spatial_Filters/README.md#bessel-filter) using a function from py-eddy-tracker by Dian Putrasahan
3. [Gaussian filter](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/Spatial_Filters/README.md#gaussian-filter) using a function from GCM filters by Matthias Aengenheyster and Dian Putrasahan
- [Scale dependency of air-sea coupling](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/README.md)
- [ICON](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/ICON/README.md) by Dian Putrasahan
- [IFS/FESOM](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mesoscale-air-sea-coupling/IFS-FESOM/README.md) by Matthias Aengenheyster, Rohit Ghosh and Dian Putrasahan
- [Mean vs eddy fluxes in the ocean](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mean_eddy_flux/README.md)
- [vertical heat fluxes in ICON](https://github.com/eerie-project/EERIE_hackathon_2023/blob/main/RESULTS/vertical_heat_flux_ICON_WP6_hackathon.ipynb) by Stella Bērziņa and Matthias Münnich
- [in-situ or potential density from potential temperature and salinity](https://github.com/eerie-project/EERIE_hackathon_2023/tree/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mean_eddy_flux#in-situ-or-potential-density)
- [find depth of isopycnal surfaces](https://github.com/eerie-project/EERIE_hackathon_2023/tree/pre-joint-hackathon-2024/pre-joint-hackathon-2024/mean_eddy_flux#depth-of-isopycnal-surfaces)
- [Impact of eddies on atmosphere mean state (IFS-AMIP)](https://github.com/eerie-project/EERIE_hackathon_2023/tree/pre-joint-hackathon-2024/RESULTS)
- [2D atm clim state](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/RESULTS/IFS_AMIP_atmosresponse_to_SST_forcing_djf_clmdiff.ipynb) by Iuliia Polkova
- [3D atm clim state](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/RESULTS/IFS_AMIP_atmosresponse_to_SST_forcing_djf_clmdiff_3D.ipynb) by Iuliia Polkova
- [atm covariability/correlation](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/RESULTS/IFS_AMIP_atmosresponse_to_SST_forcing_djf_correlation.ipynb) by Iuliia Polkova
- [local atm response (composites)](https://github.com/eerie-project/EERIE_hackathon_2023/blob/pre-joint-hackathon-2024/RESULTS/IFS_AMIP_composites.ipynb) by Chris Roberts and Matthias Aengenheyster
</details>