Skip to content
Closed
Show file tree
Hide file tree
Changes from 129 commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
caf2565
Add try_attribute member function to GridFile to allow retrieving opt…
msimberg Aug 7, 2025
643829b
Fix typos in a few docstrings and comments
msimberg Aug 7, 2025
4b0327c
Refactor global grid params to handle torus/sphere in a more structur…
msimberg Aug 7, 2025
4113218
Add more info grid type error message
msimberg Aug 7, 2025
2df94eb
Add more tests for global grid parameters
msimberg Aug 8, 2025
32f322e
Shorten GridSubdivisionParams to GridSubdivision
msimberg Aug 8, 2025
3dc0152
Remove compute_torus_num_cells, for now
msimberg Aug 8, 2025
3958306
Remove todos and debug print statements
msimberg Aug 8, 2025
f4bdfc3
Rename GridType helper class to GridParams
msimberg Aug 8, 2025
c05d469
Slightly simplify reading geometry_type from grid
msimberg Aug 8, 2025
21c6785
Remove useless comment
msimberg Aug 8, 2025
409ceeb
Merge remote-tracking branch 'origin/main' into better-torus-support
msimberg Aug 8, 2025
f87f5d9
More consistent error strings for grid params
msimberg Aug 8, 2025
04025bd
Fix check for torus root/level values
msimberg Aug 8, 2025
bd08cbb
Add more tests for grid params
msimberg Aug 8, 2025
9cf6b5d
Fix missing rename
msimberg Aug 8, 2025
6e96aee
Add geometry_type property to GlobalGridParams
msimberg Aug 8, 2025
667c38c
Merge remote-tracking branch 'origin/main' into better-torus-support
msimberg Aug 27, 2025
8c6d92c
Simplify GridParams setup and validation (make stronger assumptions)
msimberg Aug 27, 2025
471ba0a
Remove incorrect test
msimberg Aug 27, 2025
20b0735
Update model/common/src/icon4py/model/common/grid/icon.py
msimberg Aug 28, 2025
66c31e4
Apply suggestion from @msimberg
msimberg Aug 28, 2025
27b7cba
Use more appropriate type for fallback case matching on geometry types
msimberg Aug 28, 2025
1c31e16
Rename GridParams to GridShape
msimberg Sep 1, 2025
35e4a11
Remove custom GlobalGridParams __init__
msimberg Sep 1, 2025
d3e1bd0
Merge remote-tracking branch 'origin/main' into better-torus-support
msimberg Sep 1, 2025
b940c27
Remove from_mean_cell_area constructor
msimberg Aug 27, 2025
5816b44
Merge remote-tracking branch 'origin/main' into better-torus-support-2
msimberg Sep 3, 2025
8edfafc
Add tests for global grid parameters with real grid files
msimberg Aug 27, 2025
f295c3f
Keep separately track of number of cells and global number of cells
msimberg Aug 27, 2025
f6f0ce8
Use grid file mean cell area or value computed from geometry if possible
msimberg Aug 27, 2025
d314311
First working version of RBF interpolation with torus grid
msimberg Sep 1, 2025
863c1da
Tighten torus grid rbf test tolerances
msimberg Sep 1, 2025
b93c8f4
Compute EDGE_LENGTH field correctly for torus grids
msimberg Sep 1, 2025
a46ba77
Compute DUAL_EDGE_LENGTH and inverse correctly for torus grid
msimberg Sep 1, 2025
dee2fa7
Add INV_VERTEX_VERTEX field computation for toruses
msimberg Sep 2, 2025
03b0d45
Add torus tests for EDGE_AREA and EDGE_TANGENT/NORMAL_X/Y/Z
msimberg Sep 2, 2025
6b57608
Add torus test cases for tangent orientation and primal normals
msimberg Sep 2, 2025
8bb8e5f
Add torus grid test for cartesian cell/edge/vertex fields
msimberg Sep 2, 2025
989c904
Add torus tests for EDGE_TANGENT/NORMAL_VERTEX_U/V fields
msimberg Sep 2, 2025
db8c9b7
Add torus tests for EDGE_TANGENT/NORMAL_CELL_U/V fields
msimberg Sep 2, 2025
a4c43df
Add dummy coriolis field for torus grids
msimberg Sep 2, 2025
58bf6ac
Add missing distance computation for torus grids
msimberg Sep 2, 2025
491fae0
Add todo for torus distance computation
msimberg Sep 2, 2025
c92d007
Add torus test case for test_geometry_raises_for_unknown_field
msimberg Sep 2, 2025
34ed0c2
Slightly tighten tolerances for torus geometry tests
msimberg Sep 2, 2025
210b646
Compute default rbf scale for torus grids
msimberg Sep 3, 2025
995d822
Simplify GlobalGridParams construction and cached properties
msimberg Sep 4, 2025
ac84e00
num_cells and mean_cell_area can't be None anymore in GlobalGridParams
msimberg Sep 5, 2025
c68c183
Regroup GlobalGridParams attributes more logically
msimberg Sep 5, 2025
b4d73a8
Merge remote-tracking branch 'msimberg/better-torus-support-2' into b…
msimberg Sep 5, 2025
fbc91d6
Merge remote-tracking branch 'origin/main' into better-torus-support-3
msimberg Sep 10, 2025
a8e9044
Fix import in test_icon.py
msimberg Sep 10, 2025
48207b0
Minor globalgridparams fixes
msimberg Sep 10, 2025
7396648
Update globalgridparams tests
msimberg Sep 10, 2025
b05cc3d
Fix minor typos in grid definitions
msimberg Sep 10, 2025
4879d3a
Read more (optional) MPI-M grid properties into GlobalGridParameters
msimberg Sep 10, 2025
628de75
Make GlobalGridParams frozen kw_only data class
msimberg Sep 10, 2025
6d316bb
Add TODO for GlobalGridParams
msimberg Sep 10, 2025
c8eea7b
Add factory for GlobalGridParams that computes meann cell area
msimberg Sep 11, 2025
38680c7
Read EDGE_LENGTH and DUAL_EDGE_LENGTH from grid file
msimberg Sep 11, 2025
5e7eefc
Remove useless comment
msimberg Sep 11, 2025
a7f8dea
Fix and update GlobalGridParams tests
msimberg Sep 11, 2025
19256ce
Expand GlobalGridParams tests with real grids (check all properties)
msimberg Sep 11, 2025
8c484a6
Remove debug prints
msimberg Sep 11, 2025
c9dbdb3
Fix test_grid_manager_grid_level_and_root test
msimberg Sep 11, 2025
495e1f9
Merge remote-tracking branch 'msimberg/better-torus-support-3' into b…
msimberg Sep 11, 2025
fe96b1d
Fix inconsistent placement of mean_dual_edge_length
msimberg Sep 11, 2025
2b8c717
Fix experiment name
msimberg Sep 11, 2025
cc09dc3
Add torus grid to github CI workflows cache
msimberg Sep 12, 2025
e597f64
Merge remote-tracking branch 'origin/main' into better-torus-support-3
msimberg Sep 12, 2025
f91b65e
Merge remote-tracking branch 'msimberg/better-torus-support-3' into b…
msimberg Sep 12, 2025
565ce82
Add weisman klemp experiment to experiment fixture
msimberg Sep 12, 2025
cb9f5a4
Fix grid downloader
msimberg Sep 12, 2025
c70d427
Skip weisman klemp diffusion tests
msimberg Sep 12, 2025
0891271
Update model/common/src/icon4py/model/common/grid/icon.py
msimberg Sep 12, 2025
f75a552
Update global grid params tests
msimberg Sep 12, 2025
0046c4a
Merge branch 'better-torus-support-3' into better-torus-support-4
msimberg Sep 12, 2025
fda6768
Fix type annotation in GlobalGridParams
msimberg Sep 12, 2025
383166f
Merge branch 'better-torus-support-3' into better-torus-support-4
msimberg Sep 12, 2025
9ed78ee
Compute dummy coriolis np.zeros field using PrecomputedFieldProvider
msimberg Sep 12, 2025
145f792
Check that torus cartesian coordinates are within domain length/height
msimberg Sep 12, 2025
361efa5
Tidy up distance computations for rbf interpolation
msimberg Sep 12, 2025
befb007
Remove todos
msimberg Sep 12, 2025
945c849
Add missing experiment fixture for rbf tests
msimberg Sep 12, 2025
cc3e2f6
Remove todos
msimberg Sep 12, 2025
61e6c17
Further simplify torus geometry setup
msimberg Sep 12, 2025
df33e14
Remove duplicate reads of geometry type from gridfile
msimberg Sep 12, 2025
44d059c
Update CoordinateDict type alias
msimberg Sep 12, 2025
71e6d69
Use approximate comparisons for global grid parameters
msimberg Sep 15, 2025
4852673
Only use precomputed EDGE_LENGTH and DUAL_EDGE_LENGTH fields
msimberg Sep 15, 2025
6dec71b
Remove TODOs
msimberg Sep 15, 2025
e629e49
Merge branch 'better-torus-support-3' into better-torus-support-4
msimberg Sep 15, 2025
a4bf633
Remove todo
msimberg Sep 15, 2025
a2c5e5e
Fix test_vertex geometry test
msimberg Sep 15, 2025
8aeeb7e
Update torus edge length fields and remove unused operators
msimberg Sep 15, 2025
bf70755
Update todos
msimberg Sep 15, 2025
b058189
Add more torus tests for interpolation fields
msimberg Sep 15, 2025
f9a0221
Add computation and tests for E_BLN_C_S/C_BLN_AVG fields for toruses
msimberg Sep 15, 2025
6e60c30
Add POS_ON_TPLANE_E fields for torus grids
msimberg Sep 16, 2025
07346a0
Add tests to test_interpolation_fields.py for e_bln_c_s and c_bln_avg…
msimberg Sep 16, 2025
b6d6121
Increase common-integration timelimit in ci from 30 to 35 minutes
msimberg Sep 16, 2025
718ed0a
Merge remote-tracking branch 'origin/main' into better-torus-support-3
msimberg Sep 16, 2025
f9466cb
Merge remote-tracking branch 'msimberg/better-torus-support-3' into b…
msimberg Sep 16, 2025
290701f
Small simplification for c_bln_avg torus computation
msimberg Sep 16, 2025
abd65b8
Mark some torus metric field tests xfail, fix configuration parameter…
msimberg Sep 16, 2025
4622ec1
Increase common/integration test time limit in CI
msimberg Sep 16, 2025
75313b6
Increase common/integration test time limit in CI
msimberg Sep 16, 2025
e4dea44
Merge remote-tracking branch 'msimberg/better-torus-support-3' into b…
msimberg Sep 16, 2025
f38b37f
Merge remote-tracking branch 'origin/main' into better-torus-support-4
msimberg Sep 22, 2025
586c104
Merge remote-tracking branch 'origin/main' into better-torus-support-4
msimberg Sep 24, 2025
ed4883f
Fix icosahedron geometry inverse fields
msimberg Sep 24, 2025
1528b75
Add temporary todo for buggy inv_vert_vert_length on torus
msimberg Sep 24, 2025
1d08c67
Add todo for rbf renaming
msimberg Sep 24, 2025
8bf7642
Update configurations for metrics tests
msimberg Oct 6, 2025
201e37e
Mostly use GAUSS3D experiment for torus tests
msimberg Oct 6, 2025
fef60d2
Compare boolean fields as booleans instead of floats
msimberg Oct 6, 2025
374d02b
More metrics fields are expected to pass with different experiment
msimberg Oct 6, 2025
7d0831a
Add xfail diffusion tests for gauss3d experiment
msimberg Oct 6, 2025
22a9ea7
Remove unnecessary import
msimberg Oct 6, 2025
0f7fbd8
Remove unnecessary xfails
msimberg Oct 6, 2025
a541c55
Add gauss3d diffusion config
msimberg Oct 6, 2025
ef70ae7
Update GridGeometry initialization in diffusion benchmark
msimberg Oct 6, 2025
46e4590
Add TODO
msimberg Oct 6, 2025
a861af0
Add return types to grid geometry constructors
msimberg Oct 6, 2025
0c1a554
Add TODOs
msimberg Oct 6, 2025
74d5e19
Compute edge tangents and normals for torus grids
msimberg Oct 7, 2025
28b7629
Merge remote-tracking branch 'origin/main' into better-torus-support-4
msimberg Oct 7, 2025
56db697
Add helper for constructing right type of GridGeometry
msimberg Oct 7, 2025
ce0c5a1
Merge remote-tracking branch 'origin/main' into better-torus-support-4
msimberg Nov 17, 2025
f49e3c7
Merge remote-tracking branch 'origin/main' into better-torus-support-4
msimberg Nov 17, 2025
ff91b3c
Merge remote-tracking branch 'origin/main' into better-torus-support-4
msimberg Nov 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/validation_grid_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
definitions.Grids.R02B04_GLOBAL,
definitions.Grids.MCH_CH_R04B09_DSL,
definitions.Grids.MCH_OPR_R04B07_DOMAIN01,
definitions.Grids.TORUS_50000x5000,
) # change to MCH_OPR_R04B07_DOMAIN01
app = typer.Typer()

Expand All @@ -52,7 +53,7 @@ def download_validation_grids() -> None:
config.TEST_DATA_PATH = pathlib.Path.cwd() / definitions.DEFAULT_TEST_DATA_FOLDER
for grid in VALIDATION_GRIDS:
print(f"downloading and unpacking {grid.name}")
fname = grid_utils._download_grid_file(grid.name)
fname = grid_utils._download_grid_file(grid)
print(f"done - downloaded {fname}")


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from icon4py.model.atmosphere.diffusion import diffusion, diffusion_states
from icon4py.model.common.constants import RayleighType
from icon4py.model.common.grid import (
base,
geometry as grid_geometry,
geometry_attributes as geometry_meta,
vertical as v_grid,
Expand Down Expand Up @@ -82,7 +83,7 @@ def test_run_diffusion_benchmark(

decomposition_info = construct_decomposition_info(mesh, backend)

geometry_field_source = grid_geometry.GridGeometry(
geometry_field_source = grid_geometry.GridGeometry.with_geometry_type(
grid=mesh,
decomposition_info=decomposition_info,
backend=backend,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ def test_smagorinski_factor_diffusion_type_5(experiment):
[
(definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"),
(definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000"),
(definitions.Experiments.GAUSS3D, "2001-01-01T00:00:04.000"),
],
)
def test_diffusion_init(
Expand Down Expand Up @@ -298,6 +299,7 @@ def _verify_init_values_against_savepoint(
(definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000"),
(definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"),
(definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:04.000"),
(definitions.Experiments.GAUSS3D, "2001-01-01T00:00:04.000"),
],
)
@pytest.mark.parametrize("ndyn_substeps", (2,))
Expand All @@ -315,6 +317,9 @@ def test_verify_diffusion_init_against_savepoint(
ndyn_substeps,
backend,
):
if experiment == definitions.Experiments.GAUSS3D:
pytest.xfail("wrong results")

grid = get_grid_for_experiment(experiment, backend)
cell_params = get_cell_geometry_for_experiment(experiment, backend)
edge_params = get_edge_geometry_for_experiment(experiment, backend)
Expand Down Expand Up @@ -365,6 +370,11 @@ def test_verify_diffusion_init_against_savepoint(
"2000-01-01T00:00:02.000",
"2000-01-01T00:00:02.000",
),
(
definitions.Experiments.GAUSS3D,
"2001-01-01T00:00:04.000",
"2001-01-01T00:00:04.000",
),
],
)
@pytest.mark.parametrize("ndyn_substeps", [2])
Expand All @@ -390,6 +400,9 @@ def test_run_diffusion_single_step(
if orchestration and not test_utils.is_dace(backend):
pytest.skip("Orchestration test requires a dace backend.")

if experiment == definitions.Experiments.GAUSS3D:
pytest.xfail("wrong results")

grid = get_grid_for_experiment(experiment, backend)
cell_geometry = get_cell_geometry_for_experiment(experiment, backend)
edge_geometry = get_edge_geometry_for_experiment(experiment, backend)
Expand Down Expand Up @@ -451,6 +464,11 @@ def test_run_diffusion_single_step(
"2021-06-20T12:00:10.000",
"2021-06-20T12:00:10.000",
),
(
definitions.Experiments.GAUSS3D,
"2001-01-01T00:00:04.000",
"2001-01-01T00:00:04.000",
),
],
)
@pytest.mark.parametrize("ndyn_substeps", (2,))
Expand All @@ -475,6 +493,9 @@ def test_run_diffusion_multiple_steps(
pytest.skip("dace orchestration broken by precompiled programs")
if not test_utils.is_dace(backend):
raise pytest.skip("This test is only executed for dace backends")

if experiment == definitions.Experiments.GAUSS3D:
pytest.xfail("probably wrong results? not tested")
######################################################################
# Diffusion initialization
######################################################################
Expand Down Expand Up @@ -574,8 +595,23 @@ def test_run_diffusion_multiple_steps(

@pytest.mark.datatest
@pytest.mark.embedded_remap_error
@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09])
@pytest.mark.parametrize("linit", [True])
@pytest.mark.parametrize(
"experiment,step_date_init,step_date_exit,linit",
[
(
definitions.Experiments.MCH_CH_R04B09,
"2021-06-20T12:00:10.000",
"2021-06-20T12:00:10.000",
True,
),
(
definitions.Experiments.GAUSS3D,
"2001-01-01T00:00:04.000",
"2001-01-01T00:00:04.000",
False,
),
],
)
# TODO(): Enable dace orchestration, currently broken by precompiled programs
@pytest.mark.parametrize("orchestration", [False])
def test_run_diffusion_initial_step(
Expand All @@ -594,6 +630,10 @@ def test_run_diffusion_initial_step(
):
if orchestration and not test_utils.is_dace(backend):
pytest.skip("Orchestration test requires a dace backend.")

if experiment == definitions.Experiments.GAUSS3D:
pytest.xfail("wrong results")

grid = get_grid_for_experiment(experiment, backend)
cell_geometry = get_cell_geometry_for_experiment(experiment, backend)
edge_geometry = get_edge_geometry_for_experiment(experiment, backend)
Expand Down Expand Up @@ -652,17 +692,20 @@ def test_run_diffusion_initial_step(


@pytest.mark.datatest
@pytest.mark.parametrize("linit", [True])
# TODO(havogt): Remove custom `experiment` parametrization
@pytest.mark.parametrize(
"experiment,step_date_init",
"experiment,step_date_init,linit",
[
(definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"),
(definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", True),
(definitions.Experiments.GAUSS3D, "2001-01-01T00:00:04.000", False),
],
)
def test_verify_special_diffusion_inital_step_values_against_initial_savepoint(
savepoint_diffusion_init, experiment, icon_grid, linit, ndyn_substeps, backend
):
if experiment == definitions.Experiments.GAUSS3D:
pytest.xfail("wrong results")

savepoint = savepoint_diffusion_init
config = definitions.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps)

Expand Down
Loading