Skip to main content

icon4py-atmosphere-dycore

Description

Contains code ported from ICON src/atm_dyn_iconam, which is the dynamical core of the ICON model.

Treatment of stencils operating on different vertical levels

Variables in ICON can either sit on full levels or half levels. Let's denote the number of full levels is nlev. Full-level variables have nlev levels in vertical dimension, while half-level variables have nlev+1 in vertical dimension. When running a GT4Py program over nlev+1 levels, do not output full-level and half-level variables together in a field_operator until the upper vertical bound of nlev+1 because the nlev+1 level will also be written for a full-level variable, which is out-of-bounds. The following code is an example:

@field_operator
def _foo(
    input_var: CellKField[wpfloat],
    k_field: KField[wpfloat],
    nlev: int32,
) -> tuple[CellKField[wpfloat], CellKField[wpfloat]]:
    (half_level_var, full_level_var) =  where(
        (k_field >= 0) & (k_field < nlev),
        _compute_var(input_var),
        (half_level_var, full_level_var),
    )
    half_level_var = where(k_field == nlev, _init_cell_kdim_field_with_zero_vp(), half_level_var)
    return half_level_var, full_level_var

@program
def foo(
    input_var: CellKField[wpfloat],
    k_field: KField[wpfloat],
    nlev: int32,
    full_level_var: CellField[wpfloat],
    half_level_var: CellField[wpfloat],
    horizontal_start: int32,
    horizontal_end: int32,
    vertical_start: int32,
    vertical_end: int32,
) -> None:
    _foo(
        input_var,
        k_field,
        nlev,
        out=(half_level_var, full_level_var),
        domain={
            CellDim: (horizontal_start, horizontal_end),
            KDim: (vertical_start, vertical_end),
        }
    )
)

foo(
    input_var=input_var,
    full_level_var=full_level_var,
    half_level_var=half_level_var,
    k_field=k_field,
    nlev=nlev,
    horizontal_start=start_cell,
    horizontal_end=end_cell,
    vertical_start=0,
    vertical_end=nlev + 1,
    offset_provider={},
)

Here is a fix to the example above:

@program
def foo(
    input_var: CellKField[wpfloat],
    full_level_var: CellField[wpfloat],
    half_level_var: CellField[wpfloat],
    horizontal_start: int32,
    horizontal_end: int32,
    vertical_start: int32,
    vertical_end: int32,
) -> None:
    _compute_var(
        input_var,
        out=(half_level_var, full_level_var),
        domain={
            CellDim: (horizontal_start, horizontal_end),
            KDim: (vertical_start, vertical_end - 1),
        }
    )
    _init_cell_kdim_field_with_zero_vp(
        out=half_level_var,
        domain={
            CellDim: (horizontal_start, horizontal_end),
            KDim: (vertical_end - 1, vertical_end),
        }
    )
)

foo(
    input_var=input_var,
    full_level_var=full_level_var,
    half_level_var=half_level_var,
    horizontal_start=start_cell,
    horizontal_end=end_cell,
    vertical_start=0,
    vertical_end=nlev + 1,
    offset_provider={},
)

In the fix above, the original field_operator _foo is removed and the GT4Py program directly calls _compute_var and _init_cell_kdim_field_with_zero_vp separately with different vertical bounds. The illegal access to nlev+1 level of the full-level variable can thus be avoided by calling _compute_var with vertical bounds of (0, nlev). The computation on nlev+1 level half_level_var = where(k_field == nlev, _init_cell_kdim_field_with_zero_vp(), half_level_var) in the removed field_operator _foo is instead performed explicitly by calling _init_cell_kdim_field_with_zero_vp with another vertical bounds of (nlev, nlev+1).

Installation instructions

Check the README.md at the root of the model folder for installation instructions.

Metadata

Release files for icon4py-atmosphere-dycore 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for icon4py-atmosphere-dycore 0.4.1
File Size Uploaded
icon4py_atmosphere_dycore-0.4.1.tar.gz 59.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for icon4py-atmosphere-dycore 0.4.1
File Interpreter ABI Platform
icon4py_atmosphere_dycore-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 177.9 kB

Release files / icon4py_atmosphere_dycore-0.4.1.tar.gz

Download URL icon4py_atmosphere_dycore-0.4.1.tar.gz
Size 59.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ae404a89b1fcb483ee7bd4fb234f35db6e01f53d71c8af74af667b49e5abf850
BLAKE2b-256 checksum
How to use checksums
7b693e79713db193303539e7a89b374916f57dc660a430bc8208785a4461952e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 20, 2026.

Transparency log

Release files / icon4py_atmosphere_dycore-0.4.1-py3-none-any.whl

Download URL icon4py_atmosphere_dycore-0.4.1-py3-none-any.whl
Size 118.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
36db5ca148e07f9a4168f507276966865f196ef4444fbb459312a2dfe7b8a31d
BLAKE2b-256 checksum
How to use checksums
1ec038d18c0ecf63f79bd201aefdd6179b32677b8e6c62561b98ef5b81f2b9b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page