diff --git a/src/parcels/_core/index_search.py b/src/parcels/_core/index_search.py index 5e84eee2e..6c75fa080 100644 --- a/src/parcels/_core/index_search.py +++ b/src/parcels/_core/index_search.py @@ -12,9 +12,9 @@ from parcels._core.xgrid import XGrid -GRID_SEARCH_ERROR = -3 -LEFT_OUT_OF_BOUNDS = -2 -RIGHT_OUT_OF_BOUNDS = -1 +GRID_SEARCH_ERROR = np.iinfo(np.int32).max - 3 +LEFT_OUT_OF_BOUNDS = np.iinfo(np.int32).max - 2 +RIGHT_OUT_OF_BOUNDS = np.iinfo(np.int32).max - 1 def _search_1d_array( diff --git a/tests/test_field.py b/tests/test_field.py index 5e57c43cb..587a39a57 100644 --- a/tests/test_field.py +++ b/tests/test_field.py @@ -5,6 +5,7 @@ from parcels import Field, UxGrid, VectorField, XGrid from parcels._core.fieldset import FieldSet +from parcels._datasets.structured.generated import simple_UV_dataset from parcels._datasets.structured.generic import T as T_structured from parcels._datasets.structured.generic import datasets as datasets_structured from parcels._datasets.unstructured.generic import datasets as datasets_unstructured @@ -270,6 +271,21 @@ def test_field_constant_in_time(): assert np.isclose(P1, P2) +def test_field_eval_out_of_bounds(): + """Test that Field.eval returns IndexError when queried outside the grid boundaries.""" + ds = simple_UV_dataset(mesh="flat") + fieldset = FieldSet.from_sgrid_conventions(ds, mesh="flat") + + with pytest.raises(IndexError, match=".* is out of bounds.*"): + fieldset.U.eval(0.0, 0.0, 0.0, 5e6) + + with pytest.raises(IndexError, match=".* is out of bounds.*"): + fieldset.U.eval(0.0, 0.0, 5e6, 0.0) + + with pytest.raises(IndexError, match=".* is out of bounds.*"): + fieldset.U.eval(0.0, 5e6, 0.0, 0.0) + + def test_field_unstructured_grid_creation(): ...