From 0b70e086288205413955ed0bc736a49d80b0821d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruben=20Calj=C3=A9?= Date: Wed, 3 Dec 2025 17:02:05 +0100 Subject: [PATCH 1/2] Fix issue 523 --- nlmod/dims/layers.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/nlmod/dims/layers.py b/nlmod/dims/layers.py index e62360da..b76c6fa9 100644 --- a/nlmod/dims/layers.py +++ b/nlmod/dims/layers.py @@ -1564,13 +1564,11 @@ def get_layer_of_z(ds, z, above_model=-999, below_model=-999): for i in range(1, len(ds.layer)): layer = xr.where((layer == below_model) & (ds["botm"][i] < z), i, layer) - # set layer to nodata where z is above top + # set layer to above_model where z is above top if "layer" not in ds["top"].dims: - layer = xr.where((layer == below_model) & (ds["top"] > z), above_model, layer) + layer = xr.where(z > ds["top"], above_model, layer) else: - layer = xr.where( - (layer == below_model) & (ds["top"].isel(layer=0) > z), above_model, layer - ) + layer = xr.where(z > ds["top"].isel(layer=0), above_model, layer) # set nodata attribute layer.attrs["above_model"] = above_model From 6264512ea5bd2c4f22f6d0fcc259f91f6cfb537c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruben=20Calj=C3=A9?= Date: Wed, 3 Dec 2025 17:09:10 +0100 Subject: [PATCH 2/2] Add extra tests --- tests/test_009_layers.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/test_009_layers.py b/tests/test_009_layers.py index 209236d2..98e94c82 100644 --- a/tests/test_009_layers.py +++ b/tests/test_009_layers.py @@ -184,6 +184,18 @@ def test_get_layer_of_z(): assert (top.isel(layer=layer) > z).all() +def test_get_layer_of_z_above_model(): + ds = nlmod.get_ds([0, 1000, 0, 500], top=0, botm=[-10, -20]) + layer = nlmod.layers.get_layer_of_z(ds, 10, below_model=-999, above_model=999) + assert (layer == layer.attrs["above_model"]).all() + + +def test_get_layer_of_z_below_model(): + ds = nlmod.get_ds([0, 1000, 0, 500], top=0, botm=[-10, -20]) + layer = nlmod.layers.get_layer_of_z(ds, -30, below_model=-999, above_model=999) + assert (layer == layer.attrs["below_model"]).all() + + def test_aggregate_by_weighted_mean_to_ds(): regis = get_regis_horstermeer() regis2 = regis.copy(deep=True) @@ -358,8 +370,8 @@ def test_get_modellayers_indexer(): # structured grid idx = nlmod.layers.get_modellayers_indexer(ds, df) # check result - assert idx["layer"].values[0] == ds['layer'].values[1] - assert idx["layer"].values[1] == ds['layer'].values[ds.sizes["layer"] - 1] + assert idx["layer"].values[0] == ds["layer"].values[1] + assert idx["layer"].values[1] == ds["layer"].values[ds.sizes["layer"] - 1] # test getting bottom elevations using indexer _ = ds["botm"].sel(**idx)