# Explore scan() implementation for ICON graupel ###### tags: `functional cycle 11` Explore new `scan()` functionality for writing single column solvers with ICON graupel() routine. Developers: David, Nikki, Linus Appetite: 3 weeks ## Idea Write a toy implementation of the primary algorithmic motif of graupel(). In the last cycle a first version was established that highlighted a list of requried features (see below). In iteration 2 we aim at implementing all the featrues requried for graupel(). ## Goals 1. Test and expand scan_operator 2. Gather and implement missing features of scan 3. Have all the features ready to attempt a port of the full graupel () scheme ## Not (yet) goals: - Performance, code beauty - Completeness, scientific usefullness (wont implement a real scheme) - Full single column abstraction ## Potential Issues - Handling of lower boundary conditions (index fields) - offsets on IF statements ## Required Features: ### For [satad](https://github.com/C2SM/icon4py/tree/satad): - [x] Docstings in field_operator (Nikki) - [ ] Discuss/shape fixed-size for loop or recursion (Linus) - [x] Implement multiple returns form where (Nikki) - [x] Local, global, compile-time constants (Peter) ### For [graupel_stub](https://github.com/leuty/graupel_standalone/tree/graupel_stub) - [x] Ternary in scan_operator (Nikki) - [ ] Implement local IF statement in scan_operator (Ben) - [ ] Index fields (Lower boundary condition) - [ ] Passing non-constant scalars to scan() ??? - [ ] Equivalent to @gtsript.function, fortran elemental function - [ ] Think about optimized returning CellDim field. Maybe hotfix possible? (Till)