Skip to content

Commit ab36fd4

Browse files
Merge pull request #935 from OceanParcels/bug_kernelconcatting_random_scipy
Fixing bug when concatenating kernels with ParcelsRandom functions in scipy
2 parents 70021ac + 9926ac7 commit ab36fd4

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

parcels/kernel.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
from parcels.grid import GridCode
3838
from parcels.kernels.advection import AdvectionRK4_3D
3939
from parcels.kernels.advection import AdvectionAnalytical
40+
import parcels.rng as ParcelsRandom # noqa
4041
from parcels.tools.statuscodes import StateCode, OperationCode, ErrorCode
4142
from parcels.tools.statuscodes import recovery_map as recovery_base_map
4243
from parcels.tools.loggers import logger
@@ -116,6 +117,7 @@ def __init__(self, fieldset, ptype, pyfunc=None, funcname=None,
116117
try:
117118
user_ctx = stack[-1][0].f_globals
118119
user_ctx['math'] = globals()['math']
120+
user_ctx['ParcelsRandom'] = globals()['ParcelsRandom']
119121
user_ctx['random'] = globals()['random']
120122
user_ctx['StateCode'] = globals()['StateCode']
121123
user_ctx['OperationCode'] = globals()['OperationCode']

tests/test_kernel_language.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,25 @@ class TestParticle(ptype[mode]):
294294
assert np.allclose(pset.p, series, atol=1e-9)
295295

296296

297+
@pytest.mark.parametrize('mode', ['scipy', 'jit'])
298+
@pytest.mark.parametrize('concat', [False, True])
299+
def test_random_kernel_concat(fieldset, mode, concat):
300+
class TestParticle(ptype[mode]):
301+
p = Variable('p', dtype=np.float32)
302+
303+
pset = ParticleSet(fieldset, pclass=TestParticle, lon=0, lat=0)
304+
305+
def RandomKernel(particle, fieldset, time):
306+
particle.p += ParcelsRandom.uniform(0, 1)
307+
308+
def AddOne(particle, fieldset, time):
309+
particle.p += 1.
310+
311+
kernels = pset.Kernel(RandomKernel)+pset.Kernel(AddOne) if concat else RandomKernel
312+
pset.execute(kernels, dt=0)
313+
assert pset.p > 1 if concat else pset.p < 1
314+
315+
297316
@pytest.mark.parametrize('mode', ['scipy', 'jit'])
298317
@pytest.mark.parametrize('c_inc', ['str', 'file'])
299318
def test_c_kernel(fieldset, mode, c_inc):

0 commit comments

Comments
 (0)