Skip to content
4 changes: 2 additions & 2 deletions src/parcels/interpolators/_xinterpolators.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ def _get_offsets_dictionary(grid: XGrid) -> dict[ptyping.CfAxisSpatial, Literal[
offsets = {}
metadata = grid.sgrid_metadata
for fnp, axis in zip(metadata.face_dimensions, ["X", "Y"], strict=False):
offsets[axis] = 1 if fnp.padding == sgrid.Padding.LOW else 0
offsets[axis] = 1 if (fnp.padding == sgrid.Padding.LOW or fnp.padding == sgrid.Padding.BOTH) else 0
if metadata.vertical_dimensions is not None:
fnp_z = metadata.vertical_dimensions[0]
offsets["Z"] = 1 if fnp_z.padding == sgrid.Padding.LOW else 0
offsets["Z"] = 1 if (fnp_z.padding == sgrid.Padding.LOW or fnp_z.padding == sgrid.Padding.BOTH) else 0
else:
offsets["Z"] = 0
return offsets
Expand Down
27 changes: 26 additions & 1 deletion tests/test_interpolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@
StatusCode,
Variable,
VectorField,
XGrid,
particlefile_to_v3_zarr,
)
from parcels._core.index_search import _search_time_index
from parcels._core.mesh import FlatMesh, SphericalMesh
from parcels._datasets.structured.generated import simple_UV_dataset
from parcels._sgrid.core import Padding
from parcels.interpolators import (
CGrid_Velocity,
XFreeslip,
Expand All @@ -25,7 +27,7 @@
XPartialslip,
)
from parcels.interpolators._base import VectorInterpolator
from parcels.interpolators._xinterpolators import _get_corner_data_Agrid
from parcels.interpolators._xinterpolators import _get_corner_data_Agrid, _get_offsets_dictionary
from parcels.kernels import AdvectionRK4_3D
from tests.utils import TEST_DATA

Expand Down Expand Up @@ -278,6 +280,29 @@ def test_corner_gather_keeps_axes_missing_from_the_mapping():
assert out[0, 0, 0, 0, p] == data.values[ti[p], 0, yi[p], xi[p]]


def test_get_offsets_dictionary():
ds = simple_UV_dataset()
xgrid = XGrid(ds, mesh=FlatMesh())

# verify simple_UV_dataset padding
assert xgrid.sgrid_metadata.face_dimensions[0].padding == Padding.LOW
assert xgrid.sgrid_metadata.vertical_dimensions[0].padding == Padding.BOTH

offsets = _get_offsets_dictionary(xgrid)

assert offsets["X"] == 1
assert offsets["Z"] == 1

xgrid.sgrid_metadata.face_dimensions[0].padding = Padding.HIGH
xgrid.sgrid_metadata.face_dimensions[1].padding = Padding.HIGH
xgrid.sgrid_metadata.vertical_dimensions[0].padding = Padding.NONE

offsets = _get_offsets_dictionary(xgrid)

assert offsets["X"] == 0
assert offsets["Z"] == 0


class XNearest_Velocity(VectorInterpolator): # noqa: N801
"""Nearest-Neighbour interpolation on a regular grid for VectorFields of velocity."""

Expand Down
Loading