Skip to content

Commit 77395bc

Browse files
committed
Add VectorField.time_interval
1 parent 53583e9 commit 77395bc

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

parcels/field.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@ def __init__(
166166
self.name = name
167167
self.data = data
168168
self.grid = grid
169-
self.time_interval = get_time_interval(data)
169+
try:
170+
self.time_interval = get_time_interval(data)
171+
except ValueError as e:
172+
e.add_note(
173+
f"Error getting time interval for field {name!r}. Are you sure that the time dimension on the xarray dataset is stored as datetime or cftime datetime objects?"
174+
)
175+
raise e
170176

171177
# For compatibility with parts of the codebase that rely on v3 definition of Grid.
172178
# Should be worked to be removed in v4
@@ -531,6 +537,13 @@ def __init__(
531537
self.V = V
532538
self.W = W
533539

540+
if W is None:
541+
assert_same_time_interval((U, V))
542+
else:
543+
assert_same_time_interval((U, V, W))
544+
545+
self.time_interval = U.time_interval
546+
534547
if self.W:
535548
self.vector_type = "3D"
536549
else:
@@ -670,3 +683,16 @@ def get_time_interval(data: xr.DataArray | ux.UxDataArray) -> TimeInterval | Non
670683
return None
671684

672685
return TimeInterval(data.time.values[0], data.time.values[-1])
686+
687+
688+
def assert_same_time_interval(fields: list[Field]) -> None:
689+
if len(fields) == 0:
690+
return
691+
692+
reference_time_interval = fields[0].time_interval
693+
694+
for field in fields[1:]:
695+
if field.time_interval != reference_time_interval:
696+
raise ValueError(
697+
f"Fields must have the same time domain. {fields[0].name}: {reference_time_interval}, {field.name}: {field.time_interval}"
698+
)

tests/v4/test_field.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ def test_field_time_interval(data, grid):
105105
assert field.time_interval.right == np.datetime64("2001-01-01")
106106

107107

108+
def test_vectorfield_init_different_time_intervals():
109+
# Tests that a VectorField raises a ValueError if the component fields have different time domains.
110+
...
111+
112+
108113
def test_field_unstructured_grid_creation(): ...
109114

110115

0 commit comments

Comments
 (0)