---
# System prepended metadata

title: Grid Manager
tags: [cycle 15]

---

# Grid Manager

###### tags: `cycle 15` <!-- Change to the current cycle number -->

- Shaped by: Magdalena, Will
- Developers: Will,
- Appetite: Full cycle

## Problem
The objective is a grid manager which can read the grid file, distribute the grid, and subsequently derive other needed grid information, storing this in an internal state, which is then accessible from python.

## Solution
<!-- The core elements we came up with, presented in a form that’s easy for people to immediately understand -->

The best candidate is the BRIDGE code of Florian Prill, which reads and distributes in grid connectivity for the new Discontinuous Galerkin dynamical core. Florian has walked us through this code, and it seems completely usable for the current dycore (without nesting). This framework needs to be extended with additional connectivity information and python interfaces are needed.

BRIDGE creates a domain decomposition which is not the same as ICON's. In a later cycle, we can insert an interface which specifies an arbitrary decomposition.

- [ ] Create and interface BRIDGE with simple python driver for initialization
- [ ] Read and distribute grid from Python
- [ ] Add python 'getter' functions to access currently available connectivity data and domain decomposition (getter interface to be defined in separate project)
- [ ] Extend connectivity information as requested by separate project

## Appetite

<!-- How much time we want to spend and how that constrains the solution -->

2 days (Will): add the decomposition information into the `diffusion_init` interface, generate the serialization code with `f2ser` and dump the diffusion data to serialization files. 

3 weeks (Will): preparation of Python interfaces for the BRIDGE Grid Manager of Florian Prill and extensions for the connectivity and metric fields needed by `diffusion_run`.



## Rabbit holes
<!-- Details about the solution worth calling out to avoid problems -->

## 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 -->

Only the grid connectivity and decomposition information needed by the diffusion is included in this cycle. Other connectivity needed by the rest of the dycore is excluded until needed in later cycles.


