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