---
# System prepended metadata

title: Port dry dycore to python
tags: [cycle 14]

---

# Port dry dycore to python


###### tags: `cycle 14`

- Developers:
- Appetite: full cycle


## Problem
For EXCLAIM greenline we want to drive the ICON dry dycore from python. Diffusion (mo_nh_diffusion.f90) and mo_velocity_advection.f90 have already been ported to python. In order to complete and make the ICON dynamics timestep available we need to port mo_solve_nonhydro.f90.

### Task
- [ ] finish velocity advection
- [ ] solve_nh in mo_solve_nonhydro.f90

## Solution
Starting from `solve_nh` in `mo_solve_nonhydro.f90`  code write a component that performs one substep integration.
The component should have 
- an initialization phase where
    - configuration options relevant to the component are passed
    - local fields are allocated
    - parameters that will not change during a run of the component get calculated.
- a run phase:
    - where actual time stepping is performed. Fields that during integration get passed.

```
comp = IconComponent(config) # initialization
(...)
for i in dyn_steps:
    comp.run()             # time loop call
``` 
It calls the (possibly fused) gt4py stencils that are integrated into icon-dsl.
the ICON dycore uses a predictor-corrector integration sc heme (given by the `istep` variable). This can be made explicit in the code.

The (already ported) velocity advection should be integrated in the component

The component should be verified against serialized ICON data.

## Rabbit holes
<!-- Details about the solution worth calling out to avoid problems -->
- Don't follow all possible configuration options and branches in the ICON code:
    -  only consider namelist parameters of `exp.mch_ch_r04b09_dsl`
    -  additionally , keep an eye  on non-LAM mode for the Aquaplanet test case (`exclaim_ape_R2B05`).


## 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 -->
- Nested grids `jg > 0`, `lvert_nest=TRUE`
- Multi-Node (halo exchanges) 

