diff --git a/src/parcels/_core/fieldset.py b/src/parcels/_core/fieldset.py index 3a1aa449c..0003993b1 100644 --- a/src/parcels/_core/fieldset.py +++ b/src/parcels/_core/fieldset.py @@ -177,8 +177,6 @@ def add_context(self, name, value): if name in self.context: raise ValueError(f"FieldSet already has a context with name '{name}'") - if not isinstance(value, (float, np.floating, int, np.integer)): - raise ValueError(f"FieldSet context variables have to be of type float or int, got a {type(value)}") self.context[name] = value @property diff --git a/tests/test_kernel.py b/tests/test_kernel.py index 5a9ac0b31..e9fc3a80a 100644 --- a/tests/test_kernel.py +++ b/tests/test_kernel.py @@ -19,6 +19,33 @@ def ErrorKernel(particles, fieldset): # pragma: no cover pset.execute(ErrorKernel, runtime=np.timedelta64(2, "s"), dt=np.timedelta64(1, "s")) +def test_context_in_kernel(fieldset): + pset = ParticleSet(fieldset, lon=[0.5], lat=[0.5]) + + fieldset.add_context("fix_lon", -0.5) + + def ContextKernel(particles, fieldset): + particles.lon = fieldset.fix_lon + + pset.execute(ContextKernel, runtime=np.timedelta64(2, "s"), dt=np.timedelta64(1, "s")) + assert pset.lon == -0.5 + + +def test_func_context_in_kernel(fieldset): + pset = ParticleSet(fieldset, lon=[0.5], lat=[0.5]) + + def ContextFunc(x): + return 2 * x + + fieldset.add_context("func", ContextFunc) + + def FuncContextKernel(particles, fieldset): + particles.lon = fieldset.func(particles.lon) + + pset.execute(FuncContextKernel, runtime=np.timedelta64(2, "s"), dt=np.timedelta64(1, "s")) + assert pset.lon == 2.0 + + def test_kernel_init(fieldset): pset = ParticleSet(fieldset, lon=[0.5], lat=[0.5]) Kernel(kernels=[AdvectionRK4], pset=pset)