Skip to content

Commit ccf9b98

Browse files
Merge pull request #206 from OceanParcels/changing_kernels_in_script_bug
Changing kernels in script bug fixed
2 parents a58bb60 + 900c3c2 commit ccf9b98

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

parcels/particleset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def execute(self, pyfunc=AdvectionRK4, starttime=None, endtime=None, dt=1.,
221221
kernel errors.
222222
:param show_movie: True shows particles; name of field plots that field as background
223223
"""
224-
if self.kernel is None:
224+
if self.kernel is None or self.kernel.pyfunc is not pyfunc:
225225
# Generate and store Kernel
226226
if isinstance(pyfunc, Kernel):
227227
self.kernel = pyfunc

tests/test_kernel_execution.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,23 @@ def MoveWest(particle, fieldset, time, dt):
189189
pset.execute(pset.Kernel(MoveEast) + pset.Kernel(MoveWest),
190190
starttime=0., endtime=1., dt=1.)
191191
assert np.allclose([p.lon for p in pset], 0.3, rtol=1e-5)
192+
193+
194+
@pytest.mark.parametrize('mode', ['scipy', 'jit'])
195+
def test_update_kernel_in_script(fieldset, mode):
196+
# Testing what happens when kernels are updated during runtime of a script
197+
# Should throw a warning, but go ahead regardless
198+
def MoveEast(particle, fieldset, time, dt):
199+
add_lon = 0.1
200+
particle.lon += add_lon
201+
202+
def MoveWest(particle, fieldset, time, dt):
203+
add_lon = -0.3
204+
particle.lon += add_lon
205+
206+
pset = ParticleSet(fieldset, pclass=ptype[mode], lon=[0.5], lat=[0.5])
207+
pset.execute(pset.Kernel(MoveEast),
208+
starttime=0., endtime=1., dt=1.)
209+
pset.execute(pset.Kernel(MoveWest),
210+
starttime=1., endtime=2., dt=1.)
211+
assert np.allclose([p.lon for p in pset], 0.3, rtol=1e-5) # should be 0.5 + 0.1 - 0.3 = 0.3

0 commit comments

Comments
 (0)