---
# System prepended metadata

title: Explore scan() implementation for ICON graupel
tags: [functional cycle 11]

---

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