Skip to content

Commit 9bd07f7

Browse files
Fixing vectorized kernels from running particles that start after endtime
1 parent 92c3d82 commit 9bd07f7

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

parcels/kernel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ def evaluate_pset(self, pset, endtime):
296296
except KeyError:
297297
pset.dt = np.where(
298298
sign_dt * (endtime - pset.time_nextloop) <= pset.dt,
299-
sign_dt * (endtime - pset.time_nextloop),
299+
np.where(sign_dt * (endtime - pset.time_nextloop) < 0, 0, sign_dt * (endtime - pset.time_nextloop)),
300300
pset.dt,
301301
)
302302
res = None

tests/v4/test_particleset_execute.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,22 @@ def test_execution_endtime(fieldset, starttime, endtime, dt):
8585
assert abs(pset.time_nextloop - endtime) < np.timedelta64(1, "ms")
8686

8787

88+
@pytest.mark.parametrize("direction", [-1, 1])
89+
def test_pset_starttime_outside_execute(fieldset, direction):
90+
if direction == 1:
91+
endtime = fieldset.time_interval.left + np.timedelta64(8, "s")
92+
start_times = [fieldset.time_interval.left + np.timedelta64(t, "s") for t in [0, 2, 10]]
93+
else:
94+
endtime = fieldset.time_interval.right - np.timedelta64(8, "s")
95+
start_times = [fieldset.time_interval.right - np.timedelta64(t, "s") for t in [0, 2, 10]]
96+
97+
pset = ParticleSet(fieldset, lon=np.zeros(len(start_times)), lat=np.zeros(len(start_times)), time=start_times)
98+
99+
pset.execute(DoNothing, dt=direction * np.timedelta64(1, "s"), endtime=endtime)
100+
assert pset.time_nextloop[0:1] == endtime
101+
assert pset.time_nextloop[2] == start_times[2]
102+
103+
88104
@pytest.mark.parametrize(
89105
"starttime, runtime, dt",
90106
[(0, 10, 1), (0, 10, 3), (2, 16, 3), (20, 10, -1), (20, 0, -2), (5, 15, None)],

0 commit comments

Comments
 (0)