Skip to content

Commit f681162

Browse files
Merge branch 'v4-dev' into particledata_as_dict
2 parents 3ee1c37 + a2b0618 commit f681162

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

parcels/kernel.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -379,25 +379,24 @@ def evaluate_particle(self, p, endtime):
379379
dt :
380380
computational integration timestep
381381
"""
382+
sign_dt = 1 if p.dt >= 0 else -1
382383
while p.state in [StatusCode.Evaluate, StatusCode.Repeat]:
383-
pre_dt = p.dt
384-
385-
sign_dt = np.sign(p.dt).astype(int)
386-
if sign_dt * (endtime - p.time_nextloop) <= np.timedelta64(0, "ns"):
384+
if sign_dt * (endtime - p.time_nextloop) <= 0:
387385
return p
388386

387+
pre_dt = p.dt
389388
# TODO implement below later again
390389
# try: # Use next_dt from AdvectionRK45 if it is set
391390
# if abs(endtime - p.time_nextloop) < abs(p.next_dt) - 1e-6:
392391
# p.next_dt = abs(endtime - p.time_nextloop) * sign_dt
393392
# except AttributeError:
394-
if abs(endtime - p.time_nextloop) <= abs(p.dt):
395-
p.dt = abs(endtime - p.time_nextloop) * sign_dt
393+
if sign_dt * (endtime - p.time_nextloop) <= p.dt:
394+
p.dt = sign_dt * (endtime - p.time_nextloop)
396395
res = self._pyfunc(p, self._fieldset, p.time_nextloop)
397396

398397
if res is None:
399398
if p.state == StatusCode.Success:
400-
if sign_dt * (p.time - endtime) > np.timedelta64(0, "ns"):
399+
if sign_dt * (p.time - endtime) > 0:
401400
p.state = StatusCode.Evaluate
402401
else:
403402
p.state = res

parcels/particleset.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -806,9 +806,9 @@ def execute(
806806
time = start_time
807807
while sign_dt * (time - end_time) < 0:
808808
if sign_dt > 0:
809-
next_time = min(time + dt, end_time)
809+
next_time = end_time # TODO update to min(next_output, end_time) when ParticleFile works
810810
else:
811-
next_time = max(time + dt, end_time)
811+
next_time = end_time # TODO update to max(next_output, end_time) when ParticleFile works
812812
res = self._kernel.execute(self, endtime=next_time, dt=dt)
813813
if res == StatusCode.StopAllExecution:
814814
return StatusCode.StopAllExecution
@@ -822,7 +822,7 @@ def execute(
822822
next_output += outputdt
823823

824824
if verbose_progress:
825-
pbar.update(dt / np.timedelta64(1, "s"))
825+
pbar.update((next_time - time) / np.timedelta64(1, "s"))
826826

827827
time = next_time
828828

tests/v4/test_particleset_execute.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ def PythonFail(particle, fieldset, time): # pragma: no cover
112112
with pytest.raises(RuntimeError):
113113
pset.execute(PythonFail, runtime=np.timedelta64(20, "s"), dt=np.timedelta64(2, "s"))
114114
assert len(pset) == npart
115-
assert all([time == fieldset.time_interval.left + np.timedelta64(10, "s") for time in pset.time])
115+
assert pset.time[0] == fieldset.time_interval.left + np.timedelta64(10, "s")
116+
assert all([time == fieldset.time_interval.left + np.timedelta64(0, "s") for time in pset.time[1:]])
116117

117118

118119
@pytest.mark.parametrize("verbose_progress", [True, False])

0 commit comments

Comments
 (0)