From 735edf62791a6c7ce7ffeb1bdfda6406d41d3f0d Mon Sep 17 00:00:00 2001 From: Erik van Sebille Date: Fri, 18 Jul 2025 07:47:33 +0200 Subject: [PATCH] Performance testing: Removing particle.__setattr__ [BREAKING] --- parcels/kernel.py | 27 +++------------------------ parcels/particle.py | 2 +- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/parcels/kernel.py b/parcels/kernel.py index 4b55a7634..73be745d9 100644 --- a/parcels/kernel.py +++ b/parcels/kernel.py @@ -378,28 +378,7 @@ def evaluate_particle(self, p, endtime): dt : computational integration timestep """ - while p.state in [StatusCode.Evaluate, StatusCode.Repeat]: - pre_dt = p.dt - - sign_dt = np.sign(p.dt).astype(int) - if sign_dt * (endtime - p.time_nextloop) <= np.timedelta64(0, "ns"): - return p - - # TODO implement below later again - # try: # Use next_dt from AdvectionRK45 if it is set - # if abs(endtime - p.time_nextloop) < abs(p.next_dt) - 1e-6: - # p.next_dt = abs(endtime - p.time_nextloop) * sign_dt - # except AttributeError: - if abs(endtime - p.time_nextloop) <= abs(p.dt): - p.dt = abs(endtime - p.time_nextloop) * sign_dt - res = self._pyfunc(p, self._fieldset, p.time_nextloop) - - if res is None: - if p.state == StatusCode.Success: - if sign_dt * (p.time - endtime) > np.timedelta64(0, "ns"): - p.state = StatusCode.Evaluate - else: - p.state = res - - p.dt = pre_dt + # TODO: this is breaking change for performance checking + self._pyfunc(p, self._fieldset, endtime) + return p diff --git a/parcels/particle.py b/parcels/particle.py index 93ea35254..e5c955995 100644 --- a/parcels/particle.py +++ b/parcels/particle.py @@ -121,7 +121,7 @@ def __setattr__(self, name, value): if name in ["_data", "_index"]: object.__setattr__(self, name, value) else: - self._data[name][self._index] = value + pass # TODO this is a breaking change, just for checking performance def delete(self): """Signal the particle for deletion."""