Skip to content

Commit 833d62f

Browse files
Fixing the first adding of dt to time
By moving the position_update_kernels to after the first kernel loop
1 parent 7c62244 commit 833d62f

File tree

3 files changed

+7
-11
lines changed

3 files changed

+7
-11
lines changed

src/parcels/_core/kernel.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,6 @@ def execute(self, pset, endtime, dt):
233233

234234
pset._data["state"][:] = StatusCode.Evaluate
235235

236-
if not self._positionupdate_kernels_added:
237-
self.add_positionupdate_kernels()
238-
self._positionupdate_kernels_added = True
239-
240236
while (len(pset) > 0) and np.any(np.isin(pset.state, [StatusCode.Evaluate, StatusCode.Repeat])):
241237
time_to_endtime = compute_time_direction * (endtime - pset.time)
242238

@@ -283,4 +279,8 @@ def execute(self, pset, endtime, dt):
283279
else:
284280
error_func(pset[inds].z, pset[inds].lat, pset[inds].lon)
285281

282+
if not self._positionupdate_kernels_added:
283+
self.add_positionupdate_kernels()
284+
self._positionupdate_kernels_added = True
285+
286286
return pset

src/parcels/_core/particleset.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -538,10 +538,6 @@ def execute(
538538

539539
next_output = start_time if output_file else None
540540

541-
# TODO clean up two lines below: -dt is needed because in SetCoords dt gets added again
542-
start_time -= dt
543-
self._data["time"][:] -= dt
544-
545541
time = start_time
546542
while sign_dt * (time - end_time) < 0:
547543
if next_output is not None:

tests/test_particleset_execute.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ def AddLat(particles, fieldset): # pragma: no cover
207207
particles.dlat += 0.1
208208

209209
k_add = pset.Kernel(AddLat)
210-
for _ in range(n + 1):
210+
for _ in range(n):
211211
pset.execute(k_add, runtime=np.timedelta64(1, "s"), dt=np.timedelta64(1, "s"))
212212
if with_delete:
213213
pset.remove_indices(len(pset) - 1)
@@ -244,7 +244,7 @@ def AddLon(particles, fieldset): # pragma: no cover
244244

245245
np.testing.assert_array_equal(pset.lon, [9, 7, 0])
246246
assert pset.time[0:1] == endtime
247-
assert pset.time[2] == start_times[2] - dt # this particle has not been executed # TODO check why -dt is needed
247+
assert pset.time[2] == start_times[2] # this particle has not been executed
248248

249249
# Test backward in time (note third particle is outside endtime)
250250
start_times = [fieldset.time_interval.right - np.timedelta64(t, "s") for t in [0, 2, 10]]
@@ -255,7 +255,7 @@ def AddLon(particles, fieldset): # pragma: no cover
255255

256256
np.testing.assert_array_equal(pset.lon, [9, 7, 0])
257257
assert pset.time[0:1] == endtime
258-
assert pset.time[2] == start_times[2] + dt # this particle has not been executed
258+
assert pset.time[2] == start_times[2] # this particle has not been executed
259259

260260

261261
def test_some_particles_throw_outofbounds(zonal_flow_fieldset):

0 commit comments

Comments
 (0)