# Halo exchanges ###### tags: `cycle 15` - Shaped by: Magdalena - Developers: Fabian (GHEX bindings), Magdalena (icon4py) - Appetite: Full cycle? ## Problem Follow up of [project](https://hackmd.io/4S4HG843RHKQ-7VQmDC-3A) from last cycle. There, mostly exploratory work was done. The work on the python bindings for GHEX was started. We want to gain experience of a python module including halo exchanges. We use the diffusion module as an example because it contains halo exchanges still being quite succinct. ## Appetite <!-- How much time we want to spend and how that constrains the solution --> ## Solution <!-- The core elements we came up with, presented in a form that’s easy for people to immediately understand --> - [x] Complete GHEX python bindings. - [ ] Pip build for GHEX Set up an experiment along the following lines: - [x] Do a parallel run of ICON and serialize all necessary data: - [x] decomposition information - [x] decomposed grids - [x] decomposed input fields for diffusion - [x] decomposed output fields for diffusion - [x] add halo exchange calls to diffusion module - [ ] setup the experiment itself: - [x] initialize a parallel runtime (MPI4Py?) - [x] read in the decomposed data from python - [x] initialize the diffusion on the parallel setup - [x] run diffusion - [ ] verify against serialized output data. The input and output fields of diffusion for a decomposed grid can be serialized using `f2ser`from the Fortran diffusion granule. A simple way of getting the decomposition information would be to add those fields to the diffusion granule interface. ## Rabbit holes <!-- Details about the solution worth calling out to avoid problems --> * I/O (serialization) for multinode runs. Possibly works out of the box. * verification and debugging due to parallel nature. * ## No-gos <!-- Anything specifically excluded from the concept: functionality or use cases we intentionally aren’t covering to fit the ## appetite or make the problem tractable --> * DONT do decomposition itself.