---
# System prepended metadata

title: Brainstorming Cycle 20
tags: [cycle20]

---


Before pre-betting table: Name in parenthesis means, proposed by this person. 

After pre-betting table: Name in parenthesis means taking the lead in shaping. Please involve the right people or distribute the work.

## Blue line
- Continue benchmarking on Pre-Alps (Abishek, Sam, Will)
- Performance optimizations for fused stencils (Christoph)
    - measure and understand performance
    - including possible optimizations in GT4Py
    - Explore viability of other optimization options discussed with nvidia (Christoph)
- Integrate diffusion Python granule into Fortran ICON (Magdalena, Sam, Abishek)
    - Test `py2f` with larger stencils (granules), improve test coverage, and benchmark execution from Fortran (with benchmarking). -> .
- Update of `icon-dsl` to pull upstream changes, including `nblocks_e` and new license info. (Christoph, Abishek)
- Refactor `icon4pygen` to make it production ready (Christoph, Sam)
- Finish fused stencils (Christoph)
- ~~Use [`ruff`](https://docs.astral.sh/ruff/) for pre-commit and QA pipeline in `icon4py` and `icon4pytools`, to improve developer experience and QA runtime (Sam)~~ Done


## Green line
- Research: Python model architecture (Magdalena)
    - IO system: requirements and first implementation
    - Concept MVP: what features does it need? architecture draft
- stencil ports (Magdalena): 
    - finish interpolation (with exception of RBF)
        - 2 more stencils and projections(-> pygmt or similar)
    - metrics: remaining metrics fields for diffusion (and the ones used in dycore that come there with)
- consolidate test configuration: test configuration and setup has grown and is not handled in a consistent way troughout the repository. (Magdalena)
    - use same commandline options, configuration fixtures throughout
    - use icon-grid from grid file in `not datatests`
    - test hierarchy: do we need more refined test suits for CI (speedup)
   

## GT4Py

- jax pytree-like: for tuples, structs, mesh, expandable parameters (Hannes)
- Workflowify toolchain (Hannes)
- cleanups/concepts: (Hannes)
    - hierarchy of Field, NDArray implementation, etc
    - dimensions and offsets
        - each dimension should be a generator of an offset
        - E2V vs E2VDim is a concept discussion
        - [E2V_0, E2V_1] == E2V
    - constant fields and gtx.int32, etc (Hannes) `gtx.int32(1) < field` or ufuncs or https://wrapt.readthedocs.io/en/master/wrappers.html#object-proxy
    - `concat_where(k % 2 == 0, foo, bar)`   `1 < k & k < ksize`
        - [ 0  1  0  1 0 1 0 1]
        - [-0 -1 -2 -3]
        - [ 0  1  2  3 4 5 6 7]
        - [[0][-1][2][-3][4]]
    - as_offset
        - multi-dimension 
    - Batch of cleanups (related to concepts above, Hannes):
        - NamedTuple instead tuple for NamedRange (to allow attribute access)
        - ...
    - program -> fieldop call `domain` kwarg with same syntax as allowed in `domain()`
    - Field[Dims[]] variadic
- ~~Runtime (contrary to compile time) Optimizations:~~ shape in the blueline project(Till)
- Play with torus grid for strided access (Magdalena, Ioannis)
- Minimal combined IR (Till)
- Performance & compile time regression testing (Till)
- Index access in local dimension (Hannes, if time)

## DaCe
- Optimize nabla4 with DaCe starting from jax/field view (Philip, Edoardo)
- Continue investigating halo exchanges with DaCe for diffusion (Christos, Edoardo)