diff --git a/docs/examples/documentation_MPI.ipynb b/docs/examples/documentation_MPI.ipynb index bdfbc5e6c7..96a7ea0952 100644 --- a/docs/examples/documentation_MPI.ipynb +++ b/docs/examples/documentation_MPI.ipynb @@ -245,7 +245,7 @@ " fieldset = set_cms_fieldset(cs)\n", " pset = parcels.ParticleSet(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lon=[0],\n", " lat=[0],\n", " repeatdt=timedelta(hours=1),\n", @@ -400,7 +400,7 @@ " fieldset = set_cms_fieldset_3D(cs)\n", " pset = parcels.ParticleSet(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lon=[0],\n", " lat=[0],\n", " repeatdt=timedelta(hours=1),\n", diff --git a/docs/examples/documentation_advanced_zarr.ipynb b/docs/examples/documentation_advanced_zarr.ipynb index c79a6157a0..a0b96a2812 100644 --- a/docs/examples/documentation_advanced_zarr.ipynb +++ b/docs/examples/documentation_advanced_zarr.ipynb @@ -684,7 +684,7 @@ "):\n", " return parcels.ParticleSet.from_list(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lon=np.random.uniform(*lon_range, size=(number_particles,)),\n", " lat=np.random.uniform(*lat_range, size=(number_particles,)),\n", " time=np.zeros(shape=(number_particles,)),\n", @@ -1108,7 +1108,7 @@ " Conventions: CF-1.6/CF-1.7\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: spherical\n", " parcels_version: v2.4.2-370-gd0cb4110" + " dtype='int64', name='trajectory', length=200))
  • Conventions :
    CF-1.6/CF-1.7
    feature_type :
    trajectory
    ncei_template_version :
    NCEI_NetCDF_Trajectory_Template_v2.0
    parcels_kernels :
    ParticleAdvectionRK4
    parcels_mesh :
    spherical
    parcels_version :
    v2.4.2-370-gd0cb4110
  • " ], "text/plain": [ "\n", @@ -1448,7 +1448,7 @@ " Conventions: CF-1.6/CF-1.7\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: spherical\n", " parcels_version: v2.4.2-370-gd0cb4110" ] @@ -1895,7 +1895,7 @@ " Conventions: CF-1.6/CF-1.7\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: spherical\n", " parcels_version: v2.4.2-370-gd0cb4110" + " dtype='int64', name='trajectory', length=200))
  • Conventions :
    CF-1.6/CF-1.7
    feature_type :
    trajectory
    ncei_template_version :
    NCEI_NetCDF_Trajectory_Template_v2.0
    parcels_kernels :
    ParticleAdvectionRK4
    parcels_mesh :
    spherical
    parcels_version :
    v2.4.2-370-gd0cb4110
  • " ], "text/plain": [ "\n", @@ -2235,7 +2235,7 @@ " Conventions: CF-1.6/CF-1.7\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: spherical\n", " parcels_version: v2.4.2-370-gd0cb4110" ] @@ -2665,7 +2665,7 @@ " Conventions: CF-1.6/CF-1.7\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: spherical\n", " parcels_version: v2.4.2-370-gd0cb4110" + " dtype='int64', name='trajectory', length=200))
  • Conventions :
    CF-1.6/CF-1.7
    feature_type :
    trajectory
    ncei_template_version :
    NCEI_NetCDF_Trajectory_Template_v2.0
    parcels_kernels :
    ParticleAdvectionRK4
    parcels_mesh :
    spherical
    parcels_version :
    v2.4.2-370-gd0cb4110
  • " ], "text/plain": [ "\n", @@ -3005,7 +3005,7 @@ " Conventions: CF-1.6/CF-1.7\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: spherical\n", " parcels_version: v2.4.2-370-gd0cb4110" ] diff --git a/docs/examples/documentation_geospatial.ipynb b/docs/examples/documentation_geospatial.ipynb index b54cd227b9..63d436cad2 100644 --- a/docs/examples/documentation_geospatial.ipynb +++ b/docs/examples/documentation_geospatial.ipynb @@ -167,7 +167,7 @@ "# Mesh of particles\n", "lons, lats = np.meshgrid(range(15, 35, 2), range(-40, -30, 2))\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lons, lat=lats\n", ")\n", "dt = timedelta(hours=24)\n", "output_file = pset.ParticleFile(\n", diff --git a/docs/examples/documentation_stuck_particles.ipynb b/docs/examples/documentation_stuck_particles.ipynb index b850b9ca32..52d6b3db17 100644 --- a/docs/examples/documentation_stuck_particles.ipynb +++ b/docs/examples/documentation_stuck_particles.ipynb @@ -482,7 +482,7 @@ "time = np.zeros(lons.size)\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lons, lat=lats, time=time\n", ")\n", "\n", "kernels = pset.Kernel(parcels.AdvectionRK4)\n", @@ -940,7 +940,7 @@ "time = np.zeros(npart)\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, time=time\n", ")\n", "\n", "output_file = pset.ParticleFile(name=\"Cgrid-stuck.zarr\", outputdt=timedelta(hours=1))\n", @@ -1217,7 +1217,7 @@ }, "outputs": [], "source": [ - "LandParticle = parcels.ScipyParticle.add_variable(\"on_land\")\n", + "LandParticle = parcels.Particle.add_variable(\"on_land\")\n", "\n", "\n", "def Sample_land(particle, fieldset, time):\n", diff --git a/docs/examples/documentation_unstuck_Agrid.ipynb b/docs/examples/documentation_unstuck_Agrid.ipynb index b6dc9f02e7..fdab6f1c32 100644 --- a/docs/examples/documentation_unstuck_Agrid.ipynb +++ b/docs/examples/documentation_unstuck_Agrid.ipynb @@ -799,7 +799,7 @@ "metadata": {}, "outputs": [], "source": [ - "DisplacementParticle = parcels.ScipyParticle.add_variables(\n", + "DisplacementParticle = parcels.Particle.add_variables(\n", " [\n", " parcels.Variable(\"dU\"),\n", " parcels.Variable(\"dV\"),\n", @@ -902,7 +902,7 @@ ], "source": [ "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lons, lat=lats, time=time\n", ")\n", "\n", "kernels = parcels.AdvectionRK4\n", @@ -1513,7 +1513,7 @@ ")\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lons, lat=lats, time=time\n", ")\n", "\n", "kernels = pset.Kernel(parcels.AdvectionRK4)\n", @@ -1559,7 +1559,7 @@ " }, # Setting the interpolation for U and V\n", ")\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lons, lat=lats, time=time\n", ")\n", "\n", "kernels = pset.Kernel(parcels.AdvectionRK4)\n", diff --git a/docs/examples/example_brownian.py b/docs/examples/example_brownian.py index efea1eb090..85c3cfb93b 100644 --- a/docs/examples/example_brownian.py +++ b/docs/examples/example_brownian.py @@ -35,7 +35,7 @@ def test_brownian_example(mesh, npart=3000): random.seed(1234) pset = parcels.ParticleSet( fieldset=fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=np.zeros(npart), lat=np.zeros(npart), ) diff --git a/docs/examples/example_decaying_moving_eddy.py b/docs/examples/example_decaying_moving_eddy.py index 90ffd131bb..206eb80832 100644 --- a/docs/examples/example_decaying_moving_eddy.py +++ b/docs/examples/example_decaying_moving_eddy.py @@ -69,7 +69,7 @@ def true_values( def decaying_moving_example(fieldset, outfile, method=parcels.AdvectionRK4): pset = parcels.ParticleSet( - fieldset, pclass=parcels.ScipyParticle, lon=start_lon, lat=start_lat + fieldset, pclass=parcels.Particle, lon=start_lon, lat=start_lat ) dt = timedelta(minutes=5) diff --git a/docs/examples/example_globcurrent.py b/docs/examples/example_globcurrent.py index e16c58feeb..107e841e39 100755 --- a/docs/examples/example_globcurrent.py +++ b/docs/examples/example_globcurrent.py @@ -75,7 +75,7 @@ def test_globcurrent_fieldset_advancetime(dt, lonstart, latstart, use_xarray): fieldsetsub = set_globcurrent_fieldset(files[0:10], use_xarray=use_xarray) psetsub = parcels.ParticleSet.from_list( fieldset=fieldsetsub, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=[lonstart], lat=[latstart], ) @@ -85,7 +85,7 @@ def test_globcurrent_fieldset_advancetime(dt, lonstart, latstart, use_xarray): ) psetall = parcels.ParticleSet.from_list( fieldset=fieldsetall, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=[lonstart], lat=[latstart], ) @@ -107,7 +107,7 @@ def test_globcurrent_particles(use_xarray): latstart = [-35] pset = parcels.ParticleSet( - fieldset, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldset, pclass=parcels.Particle, lon=lonstart, lat=latstart ) pset.execute( @@ -126,7 +126,7 @@ def test_globcurrent_time_periodic(rundays): time_periodic=timedelta(days=365), deferred_load=deferred_load ) - MyParticle = parcels.ScipyParticle.add_variable("sample_var", initial=0.0) + MyParticle = parcels.Particle.add_variable("sample_var", initial=0.0) pset = parcels.ParticleSet( fieldset, pclass=MyParticle, lon=25, lat=-35, time=fieldset.U.grid.time[0] @@ -149,12 +149,12 @@ def test_globcurrent_xarray_vs_netcdf(dt): lonstart, latstart, runtime = (25, -35, timedelta(days=7)) psetN = parcels.ParticleSet( - fieldsetNetcdf, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldsetNetcdf, pclass=parcels.Particle, lon=lonstart, lat=latstart ) psetN.execute(parcels.AdvectionRK4, runtime=runtime, dt=dt) psetX = parcels.ParticleSet( - fieldsetxarray, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldsetxarray, pclass=parcels.Particle, lon=lonstart, lat=latstart ) psetX.execute(parcels.AdvectionRK4, runtime=runtime, dt=dt) @@ -170,12 +170,12 @@ def test_globcurrent_netcdf_timestamps(dt): lonstart, latstart, runtime = (25, -35, timedelta(days=7)) psetN = parcels.ParticleSet( - fieldsetNetcdf, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldsetNetcdf, pclass=parcels.Particle, lon=lonstart, lat=latstart ) psetN.execute(parcels.AdvectionRK4, runtime=runtime, dt=dt) psetT = parcels.ParticleSet( - fieldsetTimestamps, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldsetTimestamps, pclass=parcels.Particle, lon=lonstart, lat=latstart ) psetT.execute(parcels.AdvectionRK4, runtime=runtime, dt=dt) @@ -192,28 +192,28 @@ def test__particles_init_time(): # tests the different ways of initialising the time of a particle pset = parcels.ParticleSet( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=lonstart, lat=latstart, time=np.datetime64("2002-01-15"), ) pset2 = parcels.ParticleSet( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=lonstart, lat=latstart, time=14 * 86400, ) pset3 = parcels.ParticleSet( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=lonstart, lat=latstart, time=np.array([np.datetime64("2002-01-15")]), ) pset4 = parcels.ParticleSet( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=lonstart, lat=latstart, time=[np.datetime64("2002-01-15")], @@ -228,7 +228,7 @@ def test_globcurrent_time_extrapolation_error(use_xarray): fieldset = set_globcurrent_fieldset(use_xarray=use_xarray) pset = parcels.ParticleSet( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=[25], lat=[-35], time=fieldset.U.grid.time[0] - timedelta(days=1).total_seconds(), @@ -254,7 +254,7 @@ def test_globcurrent_startparticles_between_time_arrays(dt, with_starttime): ) ) - MyParticle = parcels.ScipyParticle.add_variable("sample_var", initial=0.0) + MyParticle = parcels.Particle.add_variable("sample_var", initial=0.0) def SampleP(particle, fieldset, time): # pragma: no cover particle.sample_var += fieldset.P[ @@ -293,7 +293,7 @@ def DeleteP0(particle, fieldset, time): # pragma: no cover particle.delete() pset0 = parcels.ParticleSet( - fieldset, pclass=parcels.ScipyParticle, lon=[25, 25], lat=[-35, -35], time=time0 + fieldset, pclass=parcels.Particle, lon=[25, 25], lat=[-35, -35], time=time0 ) pset0.execute( @@ -303,7 +303,7 @@ def DeleteP0(particle, fieldset, time): # pragma: no cover ) pset1 = parcels.ParticleSet( - fieldset, pclass=parcels.ScipyParticle, lon=[25, 25], lat=[-35, -35], time=time0 + fieldset, pclass=parcels.Particle, lon=[25, 25], lat=[-35, -35], time=time0 ) pset1.execute( @@ -319,8 +319,8 @@ def test_globcurrent_pset_fromfile(dt, pid_offset, tmpdir): filename = tmpdir.join("pset_fromparticlefile.zarr") fieldset = set_globcurrent_fieldset() - parcels.ScipyParticle.setLastID(pid_offset) - pset = parcels.ParticleSet(fieldset, pclass=parcels.ScipyParticle, lon=25, lat=-35) + parcels.Particle.setLastID(pid_offset) + pset = parcels.ParticleSet(fieldset, pclass=parcels.Particle, lon=25, lat=-35) pfile = pset.ParticleFile(filename, outputdt=timedelta(hours=6)) pset.execute( parcels.AdvectionRK4, runtime=timedelta(days=1), dt=dt, output_file=pfile @@ -330,7 +330,7 @@ def test_globcurrent_pset_fromfile(dt, pid_offset, tmpdir): restarttime = np.nanmax if dt > 0 else np.nanmin pset_new = parcels.ParticleSet.from_particlefile( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, filename=filename, restarttime=restarttime, ) @@ -351,7 +351,7 @@ def test_error_outputdt_not_multiple_dt(tmpdir): dt = 81.2584344538292 # number for which output writing fails - pset = parcels.ParticleSet(fieldset, pclass=parcels.ScipyParticle, lon=[0], lat=[0]) + pset = parcels.ParticleSet(fieldset, pclass=parcels.Particle, lon=[0], lat=[0]) ofile = pset.ParticleFile(name=filepath, outputdt=timedelta(days=1)) def DoNothing(particle, fieldset, time): # pragma: no cover diff --git a/docs/examples/example_mitgcm.py b/docs/examples/example_mitgcm.py index 2554596cec..4eab73381f 100644 --- a/docs/examples/example_mitgcm.py +++ b/docs/examples/example_mitgcm.py @@ -32,7 +32,7 @@ def periodicBC(particle, fieldset, time): # pragma: no cover # Release particles 5 cells away from the Eastern boundary pset = parcels.ParticleSet.from_line( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, start=(fieldset.U.grid.lon[-5], fieldset.U.grid.lat[5]), finish=(fieldset.U.grid.lon[-5], fieldset.U.grid.lat[-5]), size=10, diff --git a/docs/examples/example_moving_eddies.py b/docs/examples/example_moving_eddies.py index 6b74a02b96..20bbc54a6a 100644 --- a/docs/examples/example_moving_eddies.py +++ b/docs/examples/example_moving_eddies.py @@ -136,7 +136,7 @@ def moving_eddies_example( pset = parcels.ParticleSet.from_line( fieldset=fieldset, size=npart, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, start=start, finish=finish, ) @@ -168,7 +168,7 @@ def test_moving_eddies_fwdbwd(mesh, tmpdir, npart=2): lons = [3.3, 3.3] if fieldset.U.grid.mesh == "spherical" else [3.3e5, 3.3e5] lats = [46.0, 47.8] if fieldset.U.grid.mesh == "spherical" else [1e5, 2.8e5] pset = parcels.ParticleSet( - fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats + fieldset=fieldset, pclass=parcels.Particle, lon=lons, lat=lats ) # Execte for 14 days, with 30sec timesteps and hourly output @@ -262,7 +262,7 @@ def test_periodic_and_computeTimeChunk_eddies(): fieldset.add_periodic_halo(zonal=True, meridional=True) pset = parcels.ParticleSet.from_list( fieldset=fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=[3.3, 3.3], lat=[46.0, 47.8], ) diff --git a/docs/examples/example_nemo_curvilinear.py b/docs/examples/example_nemo_curvilinear.py index d03e2682c2..a9a36fb1eb 100644 --- a/docs/examples/example_nemo_curvilinear.py +++ b/docs/examples/example_nemo_curvilinear.py @@ -48,9 +48,7 @@ def periodicBC(particle, fieldSet, time): # pragma: no cover if particle.lon > 180: particle_dlon -= 360 # noqa - pset = parcels.ParticleSet.from_list( - fieldset, parcels.ScipyParticle, lon=lonp, lat=latp - ) + pset = parcels.ParticleSet.from_list(fieldset, parcels.Particle, lon=lonp, lat=latp) pfile = parcels.ParticleFile(outfile, pset, outputdt=timedelta(days=1)) kernels = pset.Kernel(advection[advtype]) + periodicBC pset.execute(kernels, runtime=runtime, dt=timedelta(hours=6), output_file=pfile) diff --git a/docs/examples/example_ofam.py b/docs/examples/example_ofam.py index a8ca271719..175d5f40de 100644 --- a/docs/examples/example_ofam.py +++ b/docs/examples/example_ofam.py @@ -51,12 +51,12 @@ def test_ofam_xarray_vs_netcdf(dt): lonstart, latstart, runtime = (180, 10, timedelta(days=7)) psetN = parcels.ParticleSet( - fieldsetNetcdf, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldsetNetcdf, pclass=parcels.Particle, lon=lonstart, lat=latstart ) psetN.execute(parcels.AdvectionRK4, runtime=runtime, dt=dt) psetX = parcels.ParticleSet( - fieldsetxarray, pclass=parcels.ScipyParticle, lon=lonstart, lat=latstart + fieldsetxarray, pclass=parcels.Particle, lon=lonstart, lat=latstart ) psetX.execute(parcels.AdvectionRK4, runtime=runtime, dt=dt) @@ -75,7 +75,7 @@ def test_ofam_particles(use_xarray): pset = parcels.ParticleSet( fieldset, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=lonstart, lat=latstart, depth=depstart, diff --git a/docs/examples/example_peninsula.py b/docs/examples/example_peninsula.py index b369e91fc7..37d9d354b1 100644 --- a/docs/examples/example_peninsula.py +++ b/docs/examples/example_peninsula.py @@ -127,7 +127,7 @@ def peninsula_example( """ # First, we define a custom Particle class to which we add a # custom variable, the initial stream function value p. - MyParticle = parcels.ScipyParticle.add_variable( + MyParticle = parcels.Particle.add_variable( [ parcels.Variable("p", dtype=np.float32, initial=0.0), parcels.Variable("p_start", dtype=np.float32, initial=0), diff --git a/docs/examples/example_radial_rotation.py b/docs/examples/example_radial_rotation.py index f0a6c94505..dfc45669b7 100644 --- a/docs/examples/example_radial_rotation.py +++ b/docs/examples/example_radial_rotation.py @@ -52,7 +52,7 @@ def rotation_example(fieldset, outfile, method=parcels.AdvectionRK4): pset = parcels.ParticleSet.from_line( fieldset, size=npart, - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, start=(30.0, 30.0), finish=(30.0, 50.0), ) # One particle in centre, one on periphery of Field. diff --git a/docs/examples/example_stommel.py b/docs/examples/example_stommel.py index 467a7ee429..2f714bd789 100755 --- a/docs/examples/example_stommel.py +++ b/docs/examples/example_stommel.py @@ -127,7 +127,7 @@ def stommel_example( parcels.Variable("next_dt", dtype=np.float64, initial=dt.total_seconds()), parcels.Variable("age", dtype=np.float32, initial=0.0), ] - MyParticle = parcels.ScipyParticle.add_variables(extra_vars) + MyParticle = parcels.Particle.add_variables(extra_vars) if custom_partition_function: pset = parcels.ParticleSet.from_line( diff --git a/docs/examples/parcels_tutorial.ipynb b/docs/examples/parcels_tutorial.ipynb index 992d0d4ec2..1d37d2d2b5 100644 --- a/docs/examples/parcels_tutorial.ipynb +++ b/docs/examples/parcels_tutorial.ipynb @@ -148,7 +148,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The next step is to define a `ParticleSet`. In this case, we start 2 particles at locations (330km, 100km) and (330km, 280km) using the `from_list` constructor method, that are advected on the `fieldset` we defined above. Note that we use `ScipyParticle` as `pclass`, which is the default choice for particle advection in Parcels.\n" + "The next step is to define a `ParticleSet`. In this case, we start 2 particles at locations (330km, 100km) and (330km, 280km) using the `from_list` constructor method, that are advected on the `fieldset` we defined above. Note that we use `Particle` as `pclass`, which is the default choice for particle advection in Parcels.\n" ] }, { @@ -159,7 +159,7 @@ "source": [ "pset = parcels.ParticleSet.from_list(\n", " fieldset=fieldset, # the fields on which the particles are advected\n", - " pclass=parcels.ScipyParticle, # the type of particles (ScipyParticle or a custom class)\n", + " pclass=parcels.Particle, # the type of particles (Particle or a custom class)\n", " lon=[3.3e5, 3.3e5], # a vector of release longitudes\n", " lat=[1e5, 2.8e5], # a vector of release latitudes\n", ")" @@ -205,7 +205,7 @@ " U: \n", " V: \n", " W: None\n", - " pclass : \n", + " pclass : \n", " repeatdt : None\n", " # particles: 2\n", " particles : [\n", @@ -362,7 +362,7 @@ " U: \n", " V: \n", " W: None\n", - " pclass : \n", + " pclass : \n", " repeatdt : None\n", " # particles: 2\n", " particles : [\n", @@ -13363,7 +13363,7 @@ " U: \n", " V: \n", " W: None\n", - " pclass : \n", + " pclass : \n", " repeatdt : None\n", " # particles: 2\n", " particles : [\n", @@ -13470,7 +13470,7 @@ "source": [ "pset = parcels.ParticleSet.from_list(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lon=[3.3e5, 3.3e5],\n", " lat=[1e5, 2.8e5],\n", ")\n", @@ -13621,7 +13621,7 @@ "source": [ "pset = parcels.ParticleSet.from_line(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " size=5, # releasing 5 particles\n", " start=(28, -33), # releasing on a line: the start longitude and latitude\n", " finish=(30, -33), # releasing on a line: the end longitude and latitude\n", @@ -13744,7 +13744,7 @@ "metadata": {}, "outputs": [], "source": [ - "SampleParticle = parcels.ScipyParticle.add_variable(\"p\")" + "SampleParticle = parcels.Particle.add_variable(\"p\")" ] }, { @@ -13933,7 +13933,7 @@ " ),\n", "]\n", "\n", - "DistParticle = parcels.ScipyParticle.add_variables(extra_vars)" + "DistParticle = parcels.Particle.add_variables(extra_vars)" ] }, { diff --git a/docs/examples/tutorial_Argofloats.ipynb b/docs/examples/tutorial_Argofloats.ipynb index 9f5eb3fcf6..37248e0f4f 100644 --- a/docs/examples/tutorial_Argofloats.ipynb +++ b/docs/examples/tutorial_Argofloats.ipynb @@ -122,7 +122,7 @@ "\n", "\n", "# Define a new Particle type including extra Variables\n", - "ArgoParticle = parcels.ScipyParticle.add_variables(\n", + "ArgoParticle = parcels.Particle.add_variables(\n", " [\n", " # Phase of cycle:\n", " # init_descend=0,\n", diff --git a/docs/examples/tutorial_NestedFields.ipynb b/docs/examples/tutorial_NestedFields.ipynb index 924420924f..752df732c3 100644 --- a/docs/examples/tutorial_NestedFields.ipynb +++ b/docs/examples/tutorial_NestedFields.ipynb @@ -140,7 +140,7 @@ } ], "source": [ - "pset = parcels.ParticleSet(fieldset, pclass=parcels.ScipyParticle, lon=[0], lat=[1000])\n", + "pset = parcels.ParticleSet(fieldset, pclass=parcels.Particle, lon=[0], lat=[1000])\n", "\n", "output_file = pset.ParticleFile(\n", " name=\"NestedFieldParticle.zarr\", outputdt=50, chunks=(1, 100)\n", @@ -237,7 +237,7 @@ " particle.f = fieldset.F[time, particle.depth, particle.lat, particle.lon]\n", "\n", "\n", - "SampleParticle = parcels.ScipyParticle.add_variable(\"f\", dtype=np.int32)\n", + "SampleParticle = parcels.Particle.add_variable(\"f\", dtype=np.int32)\n", "\n", "pset = parcels.ParticleSet(fieldset, pclass=SampleParticle, lon=[1000], lat=[500])\n", "pset.execute(SampleNestedFieldIndex, runtime=1)\n", diff --git a/docs/examples/tutorial_analyticaladvection.ipynb b/docs/examples/tutorial_analyticaladvection.ipynb index 4350c74dfd..a25bdcf905 100644 --- a/docs/examples/tutorial_analyticaladvection.ipynb +++ b/docs/examples/tutorial_analyticaladvection.ipynb @@ -146,7 +146,7 @@ " particle.radius = fieldset.R[time, particle.depth, particle.lat, particle.lon]\n", "\n", "\n", - "MyParticle = parcels.ScipyParticle.add_variables(\n", + "MyParticle = parcels.Particle.add_variables(\n", " [\n", " parcels.Variable(\"radius\", dtype=np.float32, initial=0.0),\n", " parcels.Variable(\"radius_start\", dtype=np.float32, initial=0.0),\n", @@ -301,7 +301,7 @@ "source": [ "X, Y = np.meshgrid(np.arange(0.15, 1.85, 0.1), np.arange(0.15, 0.85, 0.1))\n", "\n", - "psetAA = parcels.ParticleSet(fieldsetDG, pclass=parcels.ScipyParticle, lon=X, lat=Y)\n", + "psetAA = parcels.ParticleSet(fieldsetDG, pclass=parcels.Particle, lon=X, lat=Y)\n", "\n", "output = psetAA.ParticleFile(name=\"doublegyreAA.zarr\", outputdt=0.1)\n", "\n", @@ -14694,7 +14694,7 @@ } ], "source": [ - "psetRK4 = parcels.ParticleSet(fieldsetDG, pclass=parcels.ScipyParticle, lon=X, lat=Y)\n", + "psetRK4 = parcels.ParticleSet(fieldsetDG, pclass=parcels.Particle, lon=X, lat=Y)\n", "psetRK4.execute(parcels.AdvectionRK4, dt=0.01, runtime=3)" ] }, @@ -14863,9 +14863,7 @@ "source": [ "X, Y = np.meshgrid(np.arange(0, 19900, 100), np.arange(-100, 100, 100))\n", "\n", - "psetAA = parcels.ParticleSet(\n", - " fieldsetBJ, pclass=parcels.ScipyParticle, lon=X, lat=Y, time=0\n", - ")\n", + "psetAA = parcels.ParticleSet(fieldsetBJ, pclass=parcels.Particle, lon=X, lat=Y, time=0)\n", "\n", "output = psetAA.ParticleFile(name=\"bickleyjetAA.zarr\", outputdt=timedelta(hours=1))\n", "\n", @@ -28012,7 +28010,7 @@ } ], "source": [ - "psetRK4 = parcels.ParticleSet(fieldsetBJ, pclass=parcels.ScipyParticle, lon=X, lat=Y)\n", + "psetRK4 = parcels.ParticleSet(fieldsetBJ, pclass=parcels.Particle, lon=X, lat=Y)\n", "\n", "psetRK4.execute(\n", " [parcels.AdvectionRK4, ZonalBC], dt=timedelta(minutes=5), runtime=timedelta(days=1)\n", diff --git a/docs/examples/tutorial_croco_3D.ipynb b/docs/examples/tutorial_croco_3D.ipynb index cdeab021ab..3710257607 100644 --- a/docs/examples/tutorial_croco_3D.ipynb +++ b/docs/examples/tutorial_croco_3D.ipynb @@ -138,7 +138,7 @@ "\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=X, lat=Y, depth=Z\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=X, lat=Y, depth=Z\n", ")\n", "\n", "outputfile = pset.ParticleFile(name=\"croco_particles3D.zarr\", outputdt=5000)\n", @@ -240,7 +240,7 @@ "fieldset_noW.W.data[:] = 0.0\n", "\n", "pset_noW = parcels.ParticleSet(\n", - " fieldset=fieldset_noW, pclass=parcels.ScipyParticle, lon=X, lat=Y, depth=Z\n", + " fieldset=fieldset_noW, pclass=parcels.Particle, lon=X, lat=Y, depth=Z\n", ")\n", "\n", "outputfile = pset.ParticleFile(name=\"croco_particles_noW.zarr\", outputdt=5000)\n", diff --git a/docs/examples/tutorial_delaystart.ipynb b/docs/examples/tutorial_delaystart.ipynb index c31e3d28ba..0c0a30e182 100644 --- a/docs/examples/tutorial_delaystart.ipynb +++ b/docs/examples/tutorial_delaystart.ipynb @@ -93,7 +93,7 @@ "time = np.arange(0, npart) * timedelta(hours=1).total_seconds()\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, time=time\n", ")" ] }, @@ -10048,7 +10048,7 @@ "repeatdt = timedelta(hours=3) # release from the same set of locations every 3h\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, repeatdt=repeatdt\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, repeatdt=repeatdt\n", ")" ] }, @@ -21291,7 +21291,7 @@ ], "source": [ "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, repeatdt=repeatdt\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, repeatdt=repeatdt\n", ")\n", "output_file = pset.ParticleFile(\n", " name=\"DelayParticle_releasedt_9hrs\", outputdt=timedelta(hours=1)\n", @@ -32300,7 +32300,7 @@ "\n", "pset = parcels.ParticleSet(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lat=[3e3] * 3,\n", " lon=[3e3] * 3,\n", " time=[0, 1, 2],\n", @@ -32382,7 +32382,7 @@ "for times in [[0, 2], [1]]:\n", " pset = parcels.ParticleSet(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lat=[3e3] * len(times),\n", " lon=[3e3] * len(times),\n", " time=times,\n", @@ -32472,7 +32472,7 @@ } ], "source": [ - "GrowingParticle = parcels.ScipyParticle.add_variables(\n", + "GrowingParticle = parcels.Particle.add_variables(\n", " [\n", " parcels.Variable(\"mass\", initial=0),\n", " parcels.Variable(\"splittime\", initial=-1),\n", diff --git a/docs/examples/tutorial_diffusion.ipynb b/docs/examples/tutorial_diffusion.ipynb index 031c05bf09..03e3900673 100644 --- a/docs/examples/tutorial_diffusion.ipynb +++ b/docs/examples/tutorial_diffusion.ipynb @@ -231,7 +231,7 @@ "def get_test_particles():\n", " return parcels.ParticleSet.from_list(\n", " fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " lon=np.zeros(100),\n", " lat=np.ones(100) * 0.75,\n", " time=np.zeros(100),\n", @@ -548,7 +548,7 @@ "lon = [29] * len(time)\n", "lat = [-33] * len(time)\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, time=time\n", ")" ] }, diff --git a/docs/examples/tutorial_interaction.ipynb b/docs/examples/tutorial_interaction.ipynb index 8ceee2d6a7..7713d7f090 100644 --- a/docs/examples/tutorial_interaction.ipynb +++ b/docs/examples/tutorial_interaction.ipynb @@ -145,7 +145,7 @@ "\n", "# Create custom particle class with extra variable that indicates\n", "# whether the interaction kernel should be executed on this particle.\n", - "InteractingParticle = parcels.ScipyParticle.add_variable(\n", + "InteractingParticle = parcels.Particle.add_variable(\n", " \"attractor\", dtype=np.bool_, to_write=\"once\"\n", ")\n", "\n", @@ -30834,7 +30834,7 @@ "\n", "# Create custom InteractionParticle class\n", "# with extra variables nearest_neighbor and mass\n", - "MergeParticle = parcels.ScipyInteractionParticle.add_variables(\n", + "MergeParticle = parcels.InteractionParticle.add_variables(\n", " [\n", " parcels.Variable(\"nearest_neighbor\", dtype=np.int64, to_write=False),\n", " parcels.Variable(\"mass\", initial=1, dtype=np.float32),\n", diff --git a/docs/examples/tutorial_interpolation.ipynb b/docs/examples/tutorial_interpolation.ipynb index c70a579087..0bd2861e37 100644 --- a/docs/examples/tutorial_interpolation.ipynb +++ b/docs/examples/tutorial_interpolation.ipynb @@ -74,7 +74,7 @@ "metadata": {}, "outputs": [], "source": [ - "SampleParticle = parcels.ScipyParticle.add_variable(\"p\", dtype=np.float32)\n", + "SampleParticle = parcels.Particle.add_variable(\"p\", dtype=np.float32)\n", "\n", "\n", "def SampleP(particle, fieldset, time):\n", diff --git a/docs/examples/tutorial_kernelloop.ipynb b/docs/examples/tutorial_kernelloop.ipynb index b793072a51..72fac1efb0 100644 --- a/docs/examples/tutorial_kernelloop.ipynb +++ b/docs/examples/tutorial_kernelloop.ipynb @@ -195,7 +195,7 @@ "lons = 26.0 * np.ones(10)\n", "lats = np.linspace(-37.5, -34.5, 10)\n", "\n", - "pset = parcels.ParticleSet(fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats)\n", + "pset = parcels.ParticleSet(fieldset, pclass=parcels.Particle, lon=lons, lat=lats)\n", "output_file = pset.ParticleFile(\n", " name=\"advection_then_wind.zarr\", outputdt=timedelta(hours=6)\n", ")\n", @@ -230,7 +230,7 @@ ], "source": [ "pset_reverse = parcels.ParticleSet(\n", - " fieldset, pclass=parcels.ScipyParticle, lon=lons, lat=lats\n", + " fieldset, pclass=parcels.Particle, lon=lons, lat=lats\n", ")\n", "output_file_reverse = pset_reverse.ParticleFile(\n", " name=\"wind_then_advection.zarr\", outputdt=timedelta(hours=6)\n", diff --git a/docs/examples/tutorial_nemo_3D.ipynb b/docs/examples/tutorial_nemo_3D.ipynb index 27d8f8255a..4b150928c4 100644 --- a/docs/examples/tutorial_nemo_3D.ipynb +++ b/docs/examples/tutorial_nemo_3D.ipynb @@ -108,7 +108,7 @@ "\n", "pset = parcels.ParticleSet.from_line(\n", " fieldset=fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " size=10,\n", " start=(1.9, 52.5),\n", " finish=(3.4, 51.6),\n", diff --git a/docs/examples/tutorial_nemo_curvilinear.ipynb b/docs/examples/tutorial_nemo_curvilinear.ipynb index 6f5d940858..057cba2b85 100644 --- a/docs/examples/tutorial_nemo_curvilinear.ipynb +++ b/docs/examples/tutorial_nemo_curvilinear.ipynb @@ -177,9 +177,7 @@ "lonp = -180 * np.ones(npart)\n", "latp = [i for i in np.linspace(-70, 85, npart)]\n", "\n", - "pset = parcels.ParticleSet.from_list(\n", - " fieldset, parcels.ScipyParticle, lon=lonp, lat=latp\n", - ")\n", + "pset = parcels.ParticleSet.from_list(fieldset, parcels.Particle, lon=lonp, lat=latp)\n", "pfile = parcels.ParticleFile(\"nemo_particles\", pset, outputdt=timedelta(days=1))\n", "\n", "pset.execute(\n", @@ -237,9 +235,7 @@ "metadata": {}, "outputs": [], "source": [ - "pset = parcels.ParticleSet.from_list(\n", - " fieldset, parcels.ScipyParticle, lon=lonp, lat=latp\n", - ")\n", + "pset = parcels.ParticleSet.from_list(fieldset, parcels.Particle, lon=lonp, lat=latp)\n", "pset.populate_indices()" ] } diff --git a/docs/examples/tutorial_output.ipynb b/docs/examples/tutorial_output.ipynb index a75d6a8037..604ecb9202 100644 --- a/docs/examples/tutorial_output.ipynb +++ b/docs/examples/tutorial_output.ipynb @@ -56,7 +56,7 @@ "time = np.arange(npart) * timedelta(hours=2).total_seconds()\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, time=time\n", ")\n", "\n", "output_file = pset.ParticleFile(name=\"Output.zarr\", outputdt=timedelta(hours=2))" @@ -135,7 +135,7 @@ " date_created: 2025-02-12T17:43:13.316432\n", " feature_type: trajectory\n", " ncei_template_version: NCEI_NetCDF_Trajectory_Template_v2.0\n", - " parcels_kernels: ScipyParticleAdvectionRK4\n", + " parcels_kernels: ParticleAdvectionRK4\n", " parcels_mesh: flat\n", " parcels_version: v3.1.2-9-g43813b3b\n" ] diff --git a/docs/examples/tutorial_parcels_structure.ipynb b/docs/examples/tutorial_parcels_structure.ipynb index 79251bdfd2..8167b212d1 100644 --- a/docs/examples/tutorial_parcels_structure.ipynb +++ b/docs/examples/tutorial_parcels_structure.ipynb @@ -188,7 +188,7 @@ "metadata": {}, "source": [ "1. The `FieldSet` object in which the particles will be released.\n", - "2. The type of `Particle`: A default `ScipyParticle` or a custom `Particle`-type.\n", + "2. The type of `Particle`: A default `Particle` or a custom `Particle`-type.\n", "3. Initial conditions for each `Variable` defined in the `Particle`, most notably the release locations in `lon` and `lat`.\n" ] }, @@ -199,7 +199,7 @@ "outputs": [], "source": [ "# Define a new particleclass with Variable 'age' with initial value 0.\n", - "AgeParticle = parcels.ScipyParticle.add_variable(parcels.Variable(\"age\", initial=0))\n", + "AgeParticle = parcels.Particle.add_variable(parcels.Variable(\"age\", initial=0))\n", "\n", "pset = parcels.ParticleSet(\n", " fieldset=fieldset, # the fields that the particleset uses\n", diff --git a/docs/examples/tutorial_particle_field_interaction.ipynb b/docs/examples/tutorial_particle_field_interaction.ipynb index ba126267b8..cb9ae757ef 100644 --- a/docs/examples/tutorial_particle_field_interaction.ipynb +++ b/docs/examples/tutorial_particle_field_interaction.ipynb @@ -12,7 +12,7 @@ "\n", "The concept is similar to that of [Field sampling](https://docs.oceanparcels.org/en/latest/examples/tutorial_sampling.html): here instead, on top of reading the field value at their location, particles are able to alter it as defined in the `Kernel`. To do this, it is important to keep in mind that:\n", "\n", - "- Particles have to be defined as `ScipyParticles`\n", + "- Particles have to be defined as `Particles`\n", "- `Field` writing at each `outputdt` is not default and has to be enabled\n", "- The time of the `Field` to be saved has to be updated within a `Kernel`\n", "\n", @@ -138,7 +138,7 @@ "id": "470c2e80", "metadata": {}, "source": [ - "We will now define a new particle class. A `VectorParticle` is a `ScipyParticle` having a `Variable` to store the current tracer concentration `c` associated with it. As in this case we want our particles to release a tracer into a clean field, we will initialize `c` with an arbitrary value of `100`.\n", + "We will now define a new particle class. A `VectorParticle` is a `Particle` having a `Variable` to store the current tracer concentration `c` associated with it. As in this case we want our particles to release a tracer into a clean field, we will initialize `c` with an arbitrary value of `100`.\n", "\n", "We also need to define the `Kernel` that performs the particle-field interaction. In this Kernel, we will implement Eq.1, so that $\\Delta c_{particle}$ can be used to update $c_{particle}$ and $C_{field}$ at the particle location, and thus get their values at the current time $t$.\n", "\n", @@ -152,9 +152,7 @@ "metadata": {}, "outputs": [], "source": [ - "VectorParticle = parcels.ScipyParticle.add_variable(\n", - " \"c\", dtype=np.float32, initial=100.0\n", - ")\n", + "VectorParticle = parcels.Particle.add_variable(\"c\", dtype=np.float32, initial=100.0)\n", "\n", "\n", "def Interaction(particle, fieldset, time):\n", diff --git a/docs/examples/tutorial_peninsula_AvsCgrid.ipynb b/docs/examples/tutorial_peninsula_AvsCgrid.ipynb index a3fedebbb7..09d7b7736a 100644 --- a/docs/examples/tutorial_peninsula_AvsCgrid.ipynb +++ b/docs/examples/tutorial_peninsula_AvsCgrid.ipynb @@ -101,7 +101,7 @@ " particle.delete()\n", "\n", "\n", - "ptype = parcels.ScipyParticle.add_variables({\"p\": np.float32})" + "ptype = parcels.Particle.add_variables({\"p\": np.float32})" ] }, { diff --git a/docs/examples/tutorial_periodic_boundaries.ipynb b/docs/examples/tutorial_periodic_boundaries.ipynb index 556a71cf62..eaf036cdb6 100644 --- a/docs/examples/tutorial_periodic_boundaries.ipynb +++ b/docs/examples/tutorial_periodic_boundaries.ipynb @@ -161,7 +161,7 @@ "source": [ "pset = parcels.ParticleSet.from_line(\n", " fieldset,\n", - " pclass=parcels.ScipyParticle,\n", + " pclass=parcels.Particle,\n", " size=10,\n", " start=(20e3, 3e3),\n", " finish=(20e3, 45e3),\n", diff --git a/docs/examples/tutorial_sampling.ipynb b/docs/examples/tutorial_sampling.ipynb index db652acb10..42dea562b8 100644 --- a/docs/examples/tutorial_sampling.ipynb +++ b/docs/examples/tutorial_sampling.ipynb @@ -118,7 +118,7 @@ "metadata": {}, "outputs": [], "source": [ - "SampleParticle = parcels.ScipyParticle.add_variable(\"temperature\")\n", + "SampleParticle = parcels.Particle.add_variable(\"temperature\")\n", "\n", "pset = parcels.ParticleSet(\n", " fieldset=fieldset, pclass=SampleParticle, lon=lon, lat=lat, time=time\n", @@ -248,7 +248,7 @@ "\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, time=time\n", ")\n", "\n", "pset.execute(SampleVel_wrong)" @@ -281,7 +281,7 @@ "\n", "\n", "pset = parcels.ParticleSet(\n", - " fieldset=fieldset, pclass=parcels.ScipyParticle, lon=lon, lat=lat, time=time\n", + " fieldset=fieldset, pclass=parcels.Particle, lon=lon, lat=lat, time=time\n", ")\n", "\n", "pset.execute(SampleVel_correct)" @@ -301,7 +301,7 @@ "metadata": {}, "outputs": [], "source": [ - "SampleParticle = parcels.ScipyParticle.add_variables(\n", + "SampleParticle = parcels.Particle.add_variables(\n", " [\n", " parcels.Variable(\"U\", dtype=np.float32, initial=np.nan),\n", " parcels.Variable(\"V\", dtype=np.float32, initial=np.nan),\n", @@ -347,7 +347,7 @@ "metadata": {}, "outputs": [], "source": [ - "SampleParticleOnce = parcels.ScipyParticle.add_variable(\n", + "SampleParticleOnce = parcels.Particle.add_variable(\n", " \"temperature\", initial=0, to_write=\"once\"\n", ")\n", "\n", diff --git a/docs/examples/tutorial_timevaryingdepthdimensions.ipynb b/docs/examples/tutorial_timevaryingdepthdimensions.ipynb index b1fa83da32..a3f10377a2 100644 --- a/docs/examples/tutorial_timevaryingdepthdimensions.ipynb +++ b/docs/examples/tutorial_timevaryingdepthdimensions.ipynb @@ -127,9 +127,7 @@ } ], "source": [ - "pset = parcels.ParticleSet(\n", - " fieldset, parcels.ScipyParticle, lon=9.5, lat=12.5, depth=-0.1\n", - ")\n", + "pset = parcels.ParticleSet(fieldset, parcels.Particle, lon=9.5, lat=12.5, depth=-0.1)\n", "\n", "pfile = pset.ParticleFile(\"SwashParticles\", outputdt=timedelta(seconds=0.05))\n", "\n", diff --git a/parcels/kernel.py b/parcels/kernel.py index 0fbca991fd..08224bb0c6 100644 --- a/parcels/kernel.py +++ b/parcels/kernel.py @@ -405,7 +405,7 @@ def evaluate_particle(self, p, endtime): Parameters ---------- p : - object of (sub-)type ScipyParticle + object of (sub-)type Particle endtime : endtime of this overall kernel evaluation step dt : diff --git a/parcels/particle.py b/parcels/particle.py index 9190f91064..2b7cb1a237 100644 --- a/parcels/particle.py +++ b/parcels/particle.py @@ -5,7 +5,7 @@ from parcels.tools.statuscodes import StatusCode -__all__ = ["ScipyInteractionParticle", "ScipyParticle", "Variable"] +__all__ = ["InteractionParticle", "Particle", "Variable"] class Variable: @@ -59,13 +59,13 @@ class ParticleType: def __init__(self, pclass): if not isinstance(pclass, type): raise TypeError("Class object required to derive ParticleType") - if not issubclass(pclass, ScipyParticle): - raise TypeError("Class object does not inherit from parcels.ScipyParticle") + if not issubclass(pclass, Particle): + raise TypeError("Class object does not inherit from parcels.Particle") self.name = pclass.__name__ # Pick Variable objects out of __dict__. self.variables = [v for v in pclass.__dict__.values() if isinstance(v, Variable)] for cls in pclass.__bases__: - if issubclass(cls, ScipyParticle): + if issubclass(cls, Particle): # Add inherited particle variables ptype = cls.getPType() for v in self.variables: @@ -88,7 +88,7 @@ def __getitem__(self, item): return v -class ScipyParticle: +class Particle: """Class encapsulating the basic attributes of a particle, to be executed in SciPy mode. Parameters @@ -221,16 +221,16 @@ def set_lonlatdepth_dtype(cls, dtype): @classmethod def setLastID(cls, offset): # TODO v4: check if we can implement this in another way - ScipyParticle.lastID = offset + Particle.lastID = offset -ScipyInteractionParticle = ScipyParticle.add_variables( +InteractionParticle = Particle.add_variables( [Variable("vert_dist", dtype=np.float32), Variable("horiz_dist", dtype=np.float32)] ) -class JITParticle(ScipyParticle): +class JITParticle(Particle): def __init__(self, *args, **kwargs): raise NotImplementedError( - "JITParticle has been deprecated in Parcels v4. Use ScipyParticle instead." + "JITParticle has been deprecated in Parcels v4. Use Particle instead." ) # TODO v4: link to migration guide diff --git a/parcels/particleset.py b/parcels/particleset.py index 75d7d22564..4f403d688e 100644 --- a/parcels/particleset.py +++ b/parcels/particleset.py @@ -22,7 +22,7 @@ KDTreeFlatNeighborSearch, ) from parcels.kernel import Kernel -from parcels.particle import ScipyParticle, Variable +from parcels.particle import Particle, Variable from parcels.particledata import ParticleData, ParticleDataIterator from parcels.particlefile import ParticleFile from parcels.tools._helpers import particleset_repr, timedelta_to_float @@ -53,8 +53,8 @@ class ParticleSet: ---------- fieldset : mod:`parcels.fieldset.FieldSet` object from which to sample velocity. - pclass : parcels.particle.ScipyParticle - Optional object that inherits from :mod:`parcels.particle.ScipyParticle` object that defines custom particle + pclass : parcels.particle.Particle + Optional object that inherits from :mod:`parcels.particle.Particle` object that defines custom particle lon : List of initial longitude values for particles lat : @@ -83,7 +83,7 @@ class ParticleSet: def __init__( self, fieldset, - pclass=ScipyParticle, + pclass=Particle, lon=None, lat=None, depth=None, @@ -478,7 +478,7 @@ def from_list( fieldset : mod:`parcels.fieldset.FieldSet` object from which to sample velocity pclass : - Particle class. May be a parcels.particle.ScipyParticle class as defined in parcels, or a subclass defining a custom particle. + Particle class. May be a parcels.particle.Particle class as defined in parcels, or a subclass defining a custom particle. lon : List of initial longitude values for particles lat : @@ -534,7 +534,7 @@ def from_line( fieldset : mod:`parcels.fieldset.FieldSet` object from which to sample velocity pclass : - Particle class. May be a parcels.particle.ScipyParticle as defined in parcels, or a subclass defining a custom particle. + Particle class. May be a parcels.particle.Particle as defined in parcels, or a subclass defining a custom particle. start : Start point (longitude, latitude) for initialisation of particles on a straight line. finish : @@ -650,7 +650,7 @@ def from_field( fieldset : parcels.fieldset.FieldSet mod:`parcels.fieldset.FieldSet` object from which to sample velocity pclass : - Particle class. May be a parcels.particle.ScipyParticle class as defined in parcels, or a subclass defining a custom particle. + Particle class. May be a parcels.particle.Particle class as defined in parcels, or a subclass defining a custom particle. start_field : parcels.field.Field Field for initialising particles stochastically (horizontally) according to the presented density field. size : @@ -694,7 +694,7 @@ def from_particlefile( fieldset : parcels.fieldset.FieldSet mod:`parcels.fieldset.FieldSet` object from which to sample velocity pclass : - Particle class. May be a parcels.particle.ScipyParticle class as defined in parcels, or a subclass defining a custom particle. + Particle class. May be a parcels.particle.Particle class as defined in parcels, or a subclass defining a custom particle. filename : str Name of the particlefile from which to read initial conditions restart : bool diff --git a/tests/test_advection.py b/tests/test_advection.py index 7fb8e28691..1a1534b311 100644 --- a/tests/test_advection.py +++ b/tests/test_advection.py @@ -15,8 +15,8 @@ AdvectionRK45, Field, FieldSet, + Particle, ParticleSet, - ScipyParticle, StatusCode, Variable, ) @@ -71,7 +71,7 @@ def test_advection_zonal(lon, lat, depth): dimensions = {"lon": lon, "lat": lat} fieldset2D = FieldSet.from_data(data2D, dimensions, mesh="spherical", transpose=True) - pset2D = ParticleSet(fieldset2D, pclass=ScipyParticle, lon=np.zeros(npart) + 20.0, lat=np.linspace(0, 80, npart)) + pset2D = ParticleSet(fieldset2D, pclass=Particle, lon=np.zeros(npart) + 20.0, lat=np.linspace(0, 80, npart)) pset2D.execute(AdvectionRK4, runtime=timedelta(hours=2), dt=timedelta(seconds=30)) assert (np.diff(pset2D.lon) > 1.0e-4).all() @@ -79,7 +79,7 @@ def test_advection_zonal(lon, lat, depth): fieldset3D = FieldSet.from_data(data3D, dimensions, mesh="spherical", transpose=True) pset3D = ParticleSet( fieldset3D, - pclass=ScipyParticle, + pclass=Particle, lon=np.zeros(npart) + 20.0, lat=np.linspace(0, 80, npart), depth=np.zeros(npart) + 10.0, @@ -95,7 +95,7 @@ def test_advection_meridional(lon, lat): dimensions = {"lon": lon, "lat": lat} fieldset = FieldSet.from_data(data, dimensions, mesh="spherical", transpose=True) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(-60, 60, npart), lat=np.linspace(0, 30, npart)) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(-60, 60, npart), lat=np.linspace(0, 30, npart)) delta_lat = np.diff(pset.lat) pset.execute(AdvectionRK4, runtime=timedelta(hours=2), dt=timedelta(seconds=30)) assert np.allclose(np.diff(pset.lat), delta_lat, rtol=1.0e-4) @@ -115,7 +115,7 @@ def test_advection_3D(): fieldset = FieldSet.from_data(data, dimensions, mesh="flat", transpose=True) pset = ParticleSet( - fieldset, pclass=ScipyParticle, lon=np.zeros(npart), lat=np.zeros(npart) + 1e2, depth=np.linspace(0, 1, npart) + fieldset, pclass=Particle, lon=np.zeros(npart), lat=np.zeros(npart) + 1e2, depth=np.linspace(0, 1, npart) ) time = timedelta(hours=2).total_seconds() pset.execute(AdvectionRK4, runtime=time, dt=timedelta(seconds=30)) @@ -157,7 +157,7 @@ def SubmergeParticle(particle, fieldset, time): # pragma: no cover kernels.append(SubmergeParticle) kernels.append(DeleteParticle) - pset = ParticleSet(fieldset=fieldset, pclass=ScipyParticle, lon=0.5, lat=0.5, depth=0.9) + pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=0.5, lat=0.5, depth=0.9) pset.execute(kernels, runtime=11.0, dt=1) if direction == "up" and wErrorThroughSurface: @@ -179,7 +179,7 @@ def test_advection_RK45(lon, lat, rk45_tol): fieldset.add_constant("RK45_tol", rk45_tol) dt = timedelta(seconds=30).total_seconds() - RK45Particles = ScipyParticle.add_variable("next_dt", dtype=np.float32, initial=dt) + RK45Particles = Particle.add_variable("next_dt", dtype=np.float32, initial=dt) pset = ParticleSet(fieldset, pclass=RK45Particles, lon=np.zeros(npart) + 20.0, lat=np.linspace(0, 80, npart)) pset.execute(AdvectionRK45, runtime=timedelta(hours=2), dt=dt) assert (np.diff(pset.lon) > 1.0e-4).all() @@ -235,7 +235,7 @@ def test_advection_3DCROCO(): X, Z = np.meshgrid([40e3, 80e3, 120e3], [-10, -130]) Y = np.ones(X.size) * 100e3 - pclass = ScipyParticle.add_variable(Variable("w")) + pclass = Particle.add_variable(Variable("w")) pset = ParticleSet(fieldset=fieldset, pclass=pclass, lon=X, lat=Y, depth=Z) def SampleW(particle, fieldset, time): # pragma: no cover @@ -253,7 +253,7 @@ def test_advection_2DCROCO(): X = np.array([40e3, 80e3, 120e3]) Y = np.ones(X.size) * 100e3 Z = np.zeros(X.size) - pset = ParticleSet(fieldset=fieldset, pclass=ScipyParticle, lon=X, lat=Y, depth=Z) + pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=X, lat=Y, depth=Z) pset.execute([AdvectionRK4], runtime=runtime, dt=100) assert np.allclose(pset.depth, Z.flatten(), atol=1e-3) @@ -281,7 +281,7 @@ def test_advection_periodic_zonal(): fieldset.add_periodic_halo(zonal=True, halosize=halosize) assert len(fieldset.U.lon) == xdim + 2 * halosize - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0.5], lat=[0.5]) pset.execute(AdvectionRK4 + pset.Kernel(periodicBC), runtime=timedelta(hours=20), dt=timedelta(seconds=30)) assert abs(pset.lon[0] - 0.15) < 0.1 @@ -292,7 +292,7 @@ def test_advection_periodic_meridional(): fieldset.add_periodic_halo(meridional=True) assert len(fieldset.U.lat) == ydim + 10 # default halo size is 5 grid points - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0.5], lat=[0.5]) pset.execute(AdvectionRK4 + pset.Kernel(periodicBC), runtime=timedelta(hours=20), dt=timedelta(seconds=30)) assert abs(pset.lat[0] - 0.15) < 0.1 @@ -306,7 +306,7 @@ def test_advection_periodic_zonal_meridional(): assert np.allclose(np.diff(fieldset.U.lat), fieldset.U.lat[1] - fieldset.U.lat[0], rtol=0.001) assert np.allclose(np.diff(fieldset.U.lon), fieldset.U.lon[1] - fieldset.U.lon[0], rtol=0.001) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0.4], lat=[0.5]) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0.4], lat=[0.5]) pset.execute(AdvectionRK4 + pset.Kernel(periodicBC), runtime=timedelta(hours=20), dt=timedelta(seconds=30)) assert abs(pset.lon[0] - 0.05) < 0.1 assert abs(pset.lat[0] - 0.15) < 0.1 @@ -342,7 +342,7 @@ def test_length1dimensions(u, v, w): fieldset = FieldSet.from_data(data, dimensions, mesh="flat") x0, y0, z0 = 2, 8, -4 - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=x0, lat=y0, depth=z0) + pset = ParticleSet(fieldset, pclass=Particle, lon=x0, lat=y0, depth=z0) pfunc = AdvectionRK4 if w is None else AdvectionRK4_3D kernel = pset.Kernel(pfunc) pset.execute(kernel, runtime=5, dt=1) @@ -411,9 +411,9 @@ def test_stationary_eddy(fieldset_stationary, method, rtol, diffField): dt = timedelta(minutes=3).total_seconds() endtime = timedelta(hours=6).total_seconds() - RK45Particles = ScipyParticle.add_variable("next_dt", dtype=np.float32, initial=dt) + RK45Particles = Particle.add_variable("next_dt", dtype=np.float32, initial=dt) - pclass = RK45Particles if method == "RK45" else ScipyParticle + pclass = RK45Particles if method == "RK45" else Particle pset = ParticleSet(fieldset, pclass=pclass, lon=lon, lat=lat) pset.execute(kernel[method], dt=dt, endtime=endtime) @@ -443,7 +443,7 @@ def test_stationary_eddy_vertical(): data = {"U": fld1, "V": fldzero, "W": fld2} fieldset = FieldSet.from_data(data, dimensions, mesh="flat", transpose=True) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=lon, lat=lat, depth=depth) + pset = ParticleSet(fieldset, pclass=Particle, lon=lon, lat=lat, depth=depth) pset.execute(AdvectionRK4_3D, dt=dt, endtime=endtime) exp_lon = [truth_stationary(x, z, pset[0].time)[0] for x, z in zip(lon, depth, strict=True)] exp_depth = [truth_stationary(x, z, pset[0].time)[1] for x, z in zip(lon, depth, strict=True)] @@ -455,7 +455,7 @@ def test_stationary_eddy_vertical(): data = {"U": fldzero, "V": fld2, "W": fld1} fieldset = FieldSet.from_data(data, dimensions, mesh="flat", transpose=True) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=lon, lat=lat, depth=depth) + pset = ParticleSet(fieldset, pclass=Particle, lon=lon, lat=lat, depth=depth) pset.execute(AdvectionRK4_3D, dt=dt, endtime=endtime) exp_depth = [truth_stationary(z, y, pset[0].time)[0] for z, y in zip(depth, lat, strict=True)] exp_lat = [truth_stationary(z, y, pset[0].time)[1] for z, y in zip(depth, lat, strict=True)] @@ -516,9 +516,9 @@ def test_moving_eddy(fieldset_moving, method, rtol, diffField): dt = timedelta(minutes=3).total_seconds() endtime = timedelta(hours=6).total_seconds() - RK45Particles = ScipyParticle.add_variable("next_dt", dtype=np.float32, initial=dt) + RK45Particles = Particle.add_variable("next_dt", dtype=np.float32, initial=dt) - pclass = RK45Particles if method == "RK45" else ScipyParticle + pclass = RK45Particles if method == "RK45" else Particle pset = ParticleSet(fieldset, pclass=pclass, lon=lon, lat=lat) pset.execute(kernel[method], dt=dt, endtime=endtime) @@ -595,9 +595,9 @@ def test_decaying_eddy(fieldset_decaying, method, rtol, diffField): dt = timedelta(minutes=3).total_seconds() endtime = timedelta(hours=6).total_seconds() - RK45Particles = ScipyParticle.add_variable("next_dt", dtype=np.float32, initial=dt) + RK45Particles = Particle.add_variable("next_dt", dtype=np.float32, initial=dt) - pclass = RK45Particles if method == "RK45" else ScipyParticle + pclass = RK45Particles if method == "RK45" else Particle pset = ParticleSet(fieldset, pclass=pclass, lon=lon, lat=lat) pset.execute(kernel[method], dt=dt, endtime=endtime) @@ -613,7 +613,7 @@ def test_analyticalAgrid(): U = np.ones((lat.size, lon.size), dtype=np.float32) V = np.ones((lat.size, lon.size), dtype=np.float32) fieldset = FieldSet.from_data({"U": U, "V": V}, {"lon": lon, "lat": lat}, mesh="flat") - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=1, lat=1) + pset = ParticleSet(fieldset, pclass=Particle, lon=1, lat=1) with pytest.raises(NotImplementedError): pset.execute(AdvectionAnalytical, runtime=1) @@ -641,7 +641,7 @@ def test_uniform_analytical(u, v, w, direction, tmp_zarrfile): fieldset.V.interp_method = "cgrid_velocity" x0, y0, z0 = 6.1, 6.2, 20 - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=x0, lat=y0, depth=z0) + pset = ParticleSet(fieldset, pclass=Particle, lon=x0, lat=y0, depth=z0) outfile = pset.ParticleFile(name=tmp_zarrfile, outputdt=1, chunks=(1, 1)) pset.execute(AdvectionAnalytical, runtime=4, dt=direction, output_file=outfile) diff --git a/tests/test_diffusion.py b/tests/test_diffusion.py index df50c81265..389174c759 100644 --- a/tests/test_diffusion.py +++ b/tests/test_diffusion.py @@ -10,9 +10,9 @@ AdvectionDiffusionM1, DiffusionUniformKh, Field, + Particle, ParticleSet, RectilinearZGrid, - ScipyParticle, ) from tests.utils import create_fieldset_zeros_conversion @@ -34,7 +34,7 @@ def test_fieldKh_Brownian(mesh): runtime = timedelta(days=1) random.seed(1234) - pset = ParticleSet(fieldset=fieldset, pclass=ScipyParticle, lon=np.zeros(npart), lat=np.zeros(npart)) + pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=np.zeros(npart), lat=np.zeros(npart)) pset.execute(pset.Kernel(DiffusionUniformKh), runtime=runtime, dt=timedelta(hours=1)) expected_std_lon = np.sqrt(2 * kh_zonal * mesh_conversion**2 * runtime.total_seconds()) @@ -72,7 +72,7 @@ def test_fieldKh_SpatiallyVaryingDiffusion(mesh, kernel): runtime = timedelta(days=1) random.seed(1636) - pset = ParticleSet(fieldset=fieldset, pclass=ScipyParticle, lon=np.zeros(npart), lat=np.zeros(npart)) + pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=np.zeros(npart), lat=np.zeros(npart)) pset.execute(pset.Kernel(kernel), runtime=runtime, dt=timedelta(hours=1)) lats = pset.lat @@ -95,7 +95,7 @@ def test_randomexponential(lambd): random.seed(1234) pset = ParticleSet( - fieldset=fieldset, pclass=ScipyParticle, lon=np.zeros(npart), lat=np.zeros(npart), depth=np.zeros(npart) + fieldset=fieldset, pclass=Particle, lon=np.zeros(npart), lat=np.zeros(npart), depth=np.zeros(npart) ) def vertical_randomexponential(particle, fieldset, time): # pragma: no cover @@ -122,7 +122,7 @@ def test_randomvonmises(mu, kappa): # Set random seed random.seed(1234) - AngleParticle = ScipyParticle.add_variable("angle") + AngleParticle = Particle.add_variable("angle") pset = ParticleSet( fieldset=fieldset, pclass=AngleParticle, lon=np.zeros(npart), lat=np.zeros(npart), depth=np.zeros(npart) ) diff --git a/tests/test_fieldset.py b/tests/test_fieldset.py index 0fd9cb17a8..1a053cad75 100644 --- a/tests/test_fieldset.py +++ b/tests/test_fieldset.py @@ -8,8 +8,8 @@ AdvectionRK4, AdvectionRK4_3D, FieldSet, + Particle, ParticleSet, - ScipyParticle, Variable, ) from parcels.field import Field, VectorField @@ -207,7 +207,7 @@ def test_fieldset_float64(cast_data_dtype, tmpdir): assert fieldset.U.data.dtype == np.float32 else: assert fieldset.U.data.dtype == np.float64 - pset = ParticleSet(fieldset, ScipyParticle, lon=1, lat=2) + pset = ParticleSet(fieldset, Particle, lon=1, lat=2) failed = False try: @@ -300,7 +300,7 @@ def test_add_duplicate_field(dupobject): def test_add_field_after_pset(fieldtype): data, dimensions = generate_fieldset_data(100, 100) fieldset = FieldSet.from_data(data, dimensions) - pset = ParticleSet(fieldset, ScipyParticle, lon=0, lat=0) # noqa ; to trigger fieldset._check_complete + pset = ParticleSet(fieldset, Particle, lon=0, lat=0) # noqa ; to trigger fieldset._check_complete field1 = Field("field1", fieldset.U.data, lon=fieldset.U.lon, lat=fieldset.U.lat) field2 = Field("field2", fieldset.U.data, lon=fieldset.U.lon, lat=fieldset.U.lat) vfield = VectorField("vfield", field1, field2) @@ -500,7 +500,7 @@ def test_fieldset_constant(): fieldset.add_constant("moveeast", eastval) assert fieldset.movewest == westval - pset = ParticleSet.from_line(fieldset, size=1, pclass=ScipyParticle, start=(0.5, 0.5), finish=(0.5, 0.5)) + pset = ParticleSet.from_line(fieldset, size=1, pclass=Particle, start=(0.5, 0.5), finish=(0.5, 0.5)) pset.execute(pset.Kernel(addConst), dt=1, runtime=1) assert abs(pset.lon[0] - (0.5 + westval + eastval)) < 1e-4 @@ -518,7 +518,7 @@ def test_vector_fields(swapUV): UV = VectorField("UV", fieldset.V, fieldset.U) fieldset.add_vector_field(UV) - pset = ParticleSet.from_line(fieldset, size=1, pclass=ScipyParticle, start=(0.5, 0.5), finish=(0.5, 0.5)) + pset = ParticleSet.from_line(fieldset, size=1, pclass=Particle, start=(0.5, 0.5), finish=(0.5, 0.5)) pset.execute(AdvectionRK4, dt=1, runtime=2) if swapUV: assert abs(pset.lon[0] - 0.5) < 1e-9 @@ -549,7 +549,7 @@ def SampleUV2(particle, fieldset, time): # pragma: no cover particle_dlon += u * particle.dt # noqa particle_dlat += v * particle.dt # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=0.5, lat=0.5) + pset = ParticleSet(fieldset, pclass=Particle, lon=0.5, lat=0.5) pset.execute(AdvectionRK4 + pset.Kernel(SampleUV2), dt=1, runtime=2) assert abs(pset.lon[0] - 2.5) < 1e-9 @@ -573,7 +573,7 @@ def UpdateU(particle, fieldset, time): # pragma: no cover fieldset.U.data[particle.ti, particle.yi, particle.xi] += 1 fieldset.U.grid.time[0] = time - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=5, lat=5) + pset = ParticleSet(fieldset, pclass=Particle, lon=5, lat=5) ofile = pset.ParticleFile(name=tmp_zarrfile, outputdt=2.0) pset.execute(UpdateU, dt=1, runtime=10, output_file=ofile) @@ -615,7 +615,7 @@ def test_from_netcdf_chunking(time_periodic, chunksize, deferLoad): allow_time_extrapolation=True if time_periodic in [False, None] else False, chunksize=chunksize, ) - pset = ParticleSet.from_line(fieldset, size=1, pclass=ScipyParticle, start=(0.5, 0.5), finish=(0.5, 0.5)) + pset = ParticleSet.from_line(fieldset, size=1, pclass=Particle, start=(0.5, 0.5), finish=(0.5, 0.5)) pset.execute(AdvectionRK4, dt=1, runtime=1) @@ -710,7 +710,7 @@ def sampleTemp(particle, fieldset, time): # pragma: no cover # test if we can sample a non-timevarying field too particle.d = fieldset.D[0, 0, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [ Variable("temp", dtype=np.float32, initial=20.0), Variable("u1", dtype=np.float32, initial=0.0), @@ -773,7 +773,7 @@ def generate_dataset(xdim, ydim, zdim=1, tdim=1): fieldset = FieldSet.from_xarray_dataset(ds, variables, dimensions, mesh="flat") assert fieldset.U._creation_log == "from_xarray_dataset" - pset = ParticleSet(fieldset, ScipyParticle, 0, 0, depth=20) + pset = ParticleSet(fieldset, Particle, 0, 0, depth=20) pset.execute(AdvectionRK4, dt=1, runtime=10) if tdim == 10: @@ -788,7 +788,7 @@ def test_fieldset_frompop(): dimensions = {"lon": "lon", "lat": "lat", "time": "time"} fieldset = FieldSet.from_pop(filenames, variables, dimensions, mesh="flat") - pset = ParticleSet.from_list(fieldset, ScipyParticle, lon=[3, 5, 1], lat=[3, 5, 1]) + pset = ParticleSet.from_list(fieldset, Particle, lon=[3, 5, 1], lat=[3, 5, 1]) pset.execute(AdvectionRK4, runtime=3, dt=1) @@ -811,7 +811,7 @@ def test_fieldset_from_data_gridtypes(): # Rectilinear Z grid fieldset = FieldSet.from_data(data, dimensions, mesh="flat") - pset = ParticleSet(fieldset, ScipyParticle, [0, 0], [0, 0], [0, 0.4]) + pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4]) pset.execute(AdvectionRK4, runtime=1.5, dt=0.5) plon = pset.lon plat = pset.lat @@ -822,7 +822,7 @@ def test_fieldset_from_data_gridtypes(): # Rectilinear S grid dimensions["depth"] = depth_s fieldset = FieldSet.from_data(data, dimensions, mesh="flat") - pset = ParticleSet(fieldset, ScipyParticle, [0, 0], [0, 0], [0, 0.4]) + pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4]) pset.execute(AdvectionRK4, runtime=1.5, dt=0.5) assert np.allclose(plon, pset.lon) assert np.allclose(plat, pset.lat) @@ -832,7 +832,7 @@ def test_fieldset_from_data_gridtypes(): dimensions["lat"] = latm dimensions["depth"] = depth fieldset = FieldSet.from_data(data, dimensions, mesh="flat") - pset = ParticleSet(fieldset, ScipyParticle, [0, 0], [0, 0], [0, 0.4]) + pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4]) pset.execute(AdvectionRK4, runtime=1.5, dt=0.5) assert np.allclose(plon, pset.lon) assert np.allclose(plat, pset.lat) @@ -840,7 +840,7 @@ def test_fieldset_from_data_gridtypes(): # Curvilinear S grid dimensions["depth"] = depth_s fieldset = FieldSet.from_data(data, dimensions, mesh="flat") - pset = ParticleSet(fieldset, ScipyParticle, [0, 0], [0, 0], [0, 0.4]) + pset = ParticleSet(fieldset, Particle, [0, 0], [0, 0], [0, 0.4]) pset.execute(AdvectionRK4, runtime=1.5, dt=0.5) assert np.allclose(plon, pset.lon) assert np.allclose(plat, pset.lat) @@ -869,7 +869,7 @@ def test_deferredload_simplefield(direction, time_extrapolation, tmpdir): allow_time_extrapolation=time_extrapolation, ) - SamplingParticle = ScipyParticle.add_variable("p") + SamplingParticle = Particle.add_variable("p") pset = ParticleSet(fieldset, SamplingParticle, lon=0.5, lat=0.5) def SampleU(particle, fieldset, time): # pragma: no cover diff --git a/tests/test_fieldset_sampling.py b/tests/test_fieldset_sampling.py index 5cc6bda7a1..50524791b2 100644 --- a/tests/test_fieldset_sampling.py +++ b/tests/test_fieldset_sampling.py @@ -13,8 +13,8 @@ FieldSet, Geographic, NestedField, + Particle, ParticleSet, - ScipyParticle, StatusCode, Variable, ) @@ -22,7 +22,7 @@ def pclass(): - return ScipyParticle.add_variables( + return Particle.add_variables( [Variable("u", dtype=np.float32), Variable("v", dtype=np.float32), Variable("p", dtype=np.float32)] ) @@ -129,7 +129,7 @@ def test_verticalsampling(zdir): } data = {"U": np.zeros(dims, dtype=np.float32), "V": np.zeros(dims, dtype=np.float32)} fieldset = FieldSet.from_data(data, dimensions, mesh="flat") - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=0, lat=0, depth=0.7 * zdir) + pset = ParticleSet(fieldset, pclass=Particle, lon=0, lat=0, depth=0.7 * zdir) pset.execute(AdvectionRK4, dt=1.0, runtime=1.0) assert pset[0].zi == [2] @@ -163,7 +163,7 @@ def test_pset_from_field(): ) fieldset.add_field(densfield) - pset = ParticleSet.from_field(fieldset, size=npart, pclass=ScipyParticle, start_field=fieldset.start) + pset = ParticleSet.from_field(fieldset, size=npart, pclass=Particle, start_field=fieldset.start) pdens = np.histogram2d(pset.lon, pset.lat, bins=[np.linspace(0.0, 1.0, xdim + 1), np.linspace(0.0, 1.0, ydim + 1)])[ 0 ] @@ -292,7 +292,7 @@ def test_partialslip_nearland_zonal(boundaryslip, withW, withT): fieldset = FieldSet.from_data(data, dimensions, mesh="flat", interp_method=boundaryslip) pset = ParticleSet( - fieldset, pclass=ScipyParticle, lon=np.zeros(npart), lat=np.linspace(0.1, 3.9, npart), depth=np.zeros(npart) + fieldset, pclass=Particle, lon=np.zeros(npart), lat=np.linspace(0.1, 3.9, npart), depth=np.zeros(npart) ) kernel = AdvectionRK4_3D if withW else AdvectionRK4 pset.execute(kernel, endtime=2, dt=1) @@ -334,7 +334,7 @@ def test_partialslip_nearland_meridional(boundaryslip, withW): fieldset = FieldSet.from_data(data, dimensions, mesh="flat", interp_method=interp_method) pset = ParticleSet( - fieldset, pclass=ScipyParticle, lat=np.zeros(npart), lon=np.linspace(0.1, 3.9, npart), depth=np.zeros(npart) + fieldset, pclass=Particle, lat=np.zeros(npart), lon=np.linspace(0.1, 3.9, npart), depth=np.zeros(npart) ) kernel = AdvectionRK4_3D if withW else AdvectionRK4 pset.execute(kernel, endtime=2, dt=1) @@ -367,7 +367,7 @@ def test_partialslip_nearland_vertical(boundaryslip): fieldset = FieldSet.from_data(data, dimensions, mesh="flat", interp_method={"U": boundaryslip, "V": boundaryslip}) pset = ParticleSet( - fieldset, pclass=ScipyParticle, lon=np.zeros(npart), lat=np.zeros(npart), depth=np.linspace(0.1, 3.9, npart) + fieldset, pclass=Particle, lon=np.zeros(npart), lat=np.zeros(npart), depth=np.linspace(0.1, 3.9, npart) ) pset.execute(AdvectionRK4, endtime=2, dt=1) if boundaryslip == "partialslip": @@ -474,7 +474,7 @@ def test_meridionalflow_spherical(): lonstart = [0, 45] latstart = [0, 45] runtime = timedelta(hours=24) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=lonstart, lat=latstart) + pset = ParticleSet(fieldset, pclass=Particle, lon=lonstart, lat=latstart) pset.execute(pset.Kernel(AdvectionRK4), runtime=runtime, dt=timedelta(hours=1)) assert pset.lat[0] - (latstart[0] + runtime.total_seconds() * maxvel / 1852 / 60) < 1e-4 @@ -594,7 +594,7 @@ def test_sampling_3DCROCO(): data_path = os.path.join(os.path.dirname(__file__), "test_data/") fieldset = FieldSet.from_modulefile(data_path + "fieldset_CROCO3D.py") - SampleP = ScipyParticle.add_variable("p", initial=0.0) + SampleP = Particle.add_variable("p", initial=0.0) def SampleU(particle, fieldset, time): # pragma: no cover particle.p = fieldset.U[time, particle.depth, particle.lat, particle.lon, particle] @@ -651,7 +651,7 @@ def test_sampling_multigrids_non_vectorfield_from_file(npart, tmpdir, chs): assert fieldset.U.grid is fieldset.V.grid assert fieldset.U.grid is not fieldset.B.grid - TestParticle = ScipyParticle.add_variable("sample_var", initial=0.0) + TestParticle = Particle.add_variable("sample_var", initial=0.0) pset = ParticleSet.from_line(fieldset, pclass=TestParticle, start=[0.3, 0.3], finish=[0.7, 0.7], size=npart) @@ -690,7 +690,7 @@ def test_sampling_multigrids_non_vectorfield(npart): assert fieldset.U.grid is fieldset.V.grid assert fieldset.U.grid is not fieldset.B.grid - TestParticle = ScipyParticle.add_variable("sample_var", initial=0.0) + TestParticle = Particle.add_variable("sample_var", initial=0.0) pset = ParticleSet.from_line(fieldset, pclass=TestParticle, start=[0.3, 0.3], finish=[0.7, 0.7], size=npart) @@ -718,7 +718,7 @@ def test_sampling_multiple_grid_sizes(ugridfactor): lat=np.linspace(0.0, 1.0, ydim, dtype=np.float32), ) fieldset = FieldSet(U, V) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0.8], lat=[0.9]) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0.8], lat=[0.9]) if ugridfactor > 1: assert fieldset.U.grid is not fieldset.V.grid @@ -745,7 +745,7 @@ def test_multiple_grid_addlater_error(): ) fieldset = FieldSet(U, V) - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0.8], lat=[0.9]) # noqa ; to trigger fieldset._check_complete + pset = ParticleSet(fieldset, pclass=Particle, lon=[0.8], lat=[0.9]) # noqa ; to trigger fieldset._check_complete P = Field( "P", diff --git a/tests/test_grids.py b/tests/test_grids.py index 2947d251ea..f2782a7197 100644 --- a/tests/test_grids.py +++ b/tests/test_grids.py @@ -11,10 +11,10 @@ CurvilinearZGrid, Field, FieldSet, + Particle, ParticleSet, RectilinearSGrid, RectilinearZGrid, - ScipyParticle, StatusCode, UnitConverter, Variable, @@ -81,7 +81,7 @@ def sampleTemp(particle, fieldset, time): # pragma: no cover particle.temp0 = fieldset.temp0[time + particle.dt, particle.depth, particle.lat, particle.lon] particle.temp1 = fieldset.temp1[time + particle.dt, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("temp0", dtype=np.float32, initial=20.0), Variable("temp1", dtype=np.float32, initial=20.0)] ) @@ -180,7 +180,7 @@ def bath_func(lon): assert u_field.grid == v_field.grid assert u_field.grid == w_field.grid # w_field.grid is now supposed to be grid_1 - pset = ParticleSet.from_list(fieldset, ScipyParticle, lon=[0], lat=[0], depth=[1]) + pset = ParticleSet.from_list(fieldset, Particle, lon=[0], lat=[0], depth=[1]) for _ in range(10): pset.execute(AdvectionRK4_3D, runtime=1000, dt=500) @@ -230,7 +230,7 @@ def bath_func(lon): def sampleTemp(particle, fieldset, time): # pragma: no cover particle.temp = fieldset.temp[time, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variable("temp", dtype=np.float32, initial=20.0) + MyParticle = Particle.add_variable("temp", dtype=np.float32, initial=20.0) lon = 400 lat = 0 @@ -278,7 +278,7 @@ def bath_func(lon): lat = np.zeros(11) ratio = [min(i / 10.0, 0.99) for i in range(11)] depth = bath_func(lon) * ratio - pset = ParticleSet.from_list(fieldset, ScipyParticle, lon=lon, lat=lat, depth=depth) + pset = ParticleSet.from_list(fieldset, Particle, lon=lon, lat=lat, depth=depth) pset.execute(AdvectionRK4_3D, runtime=10000, dt=500) assert np.allclose(pset.depth / bath_func(pset.lon), ratio) @@ -313,7 +313,7 @@ def bath_func(lon): rel_depth_field = Field("relDepth", rel_depth_data, grid=grid) fieldset = FieldSet(u_field, v_field, fields={"relDepth": rel_depth_field}) - MyParticle = ScipyParticle.add_variable("relDepth", dtype=np.float32, initial=20.0) + MyParticle = Particle.add_variable("relDepth", dtype=np.float32, initial=20.0) def moveEast(particle, fieldset, time): # pragma: no cover particle_dlon += 5 * particle.dt # noqa @@ -353,7 +353,7 @@ def sampleSpeed(particle, fieldset, time): # pragma: no cover u, v = fieldset.UV[time, particle.depth, particle.lat, particle.lon] particle.speed = math.sqrt(u * u + v * v) - MyParticle = ScipyParticle.add_variable("speed", dtype=np.float32, initial=0.0) + MyParticle = Particle.add_variable("speed", dtype=np.float32, initial=0.0) pset = ParticleSet.from_list(fieldset, MyParticle, lon=[400, -200], lat=[600, 600]) pset.execute(pset.Kernel(sampleSpeed), runtime=1) @@ -378,12 +378,12 @@ def test_nemo_grid(): fieldset = FieldSet.from_nemo(filenames, variables, dimensions) # test ParticleSet.from_field on curvilinear grids - ParticleSet.from_field(fieldset, ScipyParticle, start_field=fieldset.U, size=5) + ParticleSet.from_field(fieldset, Particle, start_field=fieldset.U, size=5) def sampleVel(particle, fieldset, time): # pragma: no cover (particle.zonal, particle.meridional) = fieldset.UV[time, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("zonal", dtype=np.float32, initial=0.0), Variable("meridional", dtype=np.float32, initial=0.0)] ) @@ -416,7 +416,7 @@ def test_advect_nemo(): lonp = 175.5 latp = 81.5 - pset = ParticleSet.from_list(fieldset, ScipyParticle, lon=[lonp], lat=[latp]) + pset = ParticleSet.from_list(fieldset, Particle, lon=[lonp], lat=[latp]) pset.execute(AdvectionRK4, runtime=timedelta(days=2), dt=timedelta(hours=6)) assert abs(pset.lat[0] - latp) < 1e-3 @@ -442,7 +442,7 @@ def test_cgrid_uniform_2dvel(time): def sampleVel(particle, fieldset, time): # pragma: no cover (particle.zonal, particle.meridional) = fieldset.UV[time, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("zonal", dtype=np.float32, initial=0.0), Variable("meridional", dtype=np.float32, initial=0.0)] ) @@ -496,7 +496,7 @@ def sampleVel(particle, fieldset, time): # pragma: no cover time, particle.depth, particle.lat, particle.lon ] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [ Variable("zonal", dtype=np.float32, initial=0.0), Variable("meridional", dtype=np.float32, initial=0.0), @@ -553,7 +553,7 @@ def sampleVel(particle, fieldset, time): # pragma: no cover time, particle.depth, particle.lat, particle.lon ] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [ Variable("zonal", dtype=np.float32, initial=0.0), Variable("meridional", dtype=np.float32, initial=0.0), @@ -598,7 +598,7 @@ def OutBoundsError(particle, fieldset, time): # pragma: no cover particle_ddepth -= 3 # noqa particle.state = StatusCode.Success - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [ Variable("zonal", dtype=np.float32, initial=0.0), Variable("meridional", dtype=np.float32, initial=0.0), @@ -703,7 +703,7 @@ def UpdateR(particle, fieldset, time): # pragma: no cover particle.radius_start = fieldset.R[time, particle.depth, particle.lat, particle.lon] particle.radius = fieldset.R[time, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("radius", dtype=np.float32, initial=0.0), Variable("radius_start", dtype=np.float32, initial=0.0)] ) @@ -779,7 +779,7 @@ def UpdateR(particle, fieldset, time): # pragma: no cover particle.radius_start = fieldset.R[time, particle.depth, particle.lat, particle.lon] particle.radius = fieldset.R[time, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("radius", dtype=np.float32, initial=0.0), Variable("radius_start", dtype=np.float32, initial=0.0)] ) @@ -856,7 +856,7 @@ def UpdateR(particle, fieldset, time): # pragma: no cover particle.radius_start = fieldset.R[time, particle.depth, particle.lat, particle.lon] particle.radius = fieldset.R[time, particle.depth, particle.lat, particle.lon] - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("radius", dtype=np.float32, initial=0.0), Variable("radius_start", dtype=np.float32, initial=0.0)] ) @@ -928,7 +928,7 @@ def VelocityInterpolator(particle, fieldset, time): # pragma: no cover particle.Vvel = fieldset.V[time, particle.depth, particle.lat, particle.lon] particle.Wvel = fieldset.W[time, particle.depth, particle.lat, particle.lon] - myParticle = ScipyParticle.add_variables( + myParticle = Particle.add_variables( [ Variable("Uvel", dtype=np.float32, initial=0.0), Variable("Vvel", dtype=np.float32, initial=0.0), diff --git a/tests/test_interaction.py b/tests/test_interaction.py index 2eb8b12036..7c0e4fc08a 100644 --- a/tests/test_interaction.py +++ b/tests/test_interaction.py @@ -16,7 +16,7 @@ KDTreeFlatNeighborSearch, ) from parcels.interaction.neighborsearch.basehash import BaseHashNeighborSearch -from parcels.particle import ScipyInteractionParticle, Variable +from parcels.particle import InteractionParticle, Variable from tests.common_kernels import DoNothing from tests.utils import create_fieldset_unit_mesh, create_flat_positions, create_spherical_positions @@ -50,7 +50,7 @@ def test_simple_interaction_kernel(fieldset_unit_mesh): interaction_distance = 6371000 * 0.2 * np.pi / 180 pset = ParticleSet( fieldset_unit_mesh, - pclass=ScipyInteractionParticle, + pclass=InteractionParticle, lon=lons, lat=lats, interaction_distance=interaction_distance, @@ -67,7 +67,7 @@ def test_zonal_periodic_distance(mesh, periodic_domain_zonal): lons = [0.05, 0.4, 0.95] pset = ParticleSet( fset, - pclass=ScipyInteractionParticle, + pclass=InteractionParticle, lon=lons, lat=[0.5] * len(lons), interaction_distance=interaction_distance, @@ -89,7 +89,7 @@ def test_concatenate_interaction_kernels(fieldset_unit_mesh): pset = ParticleSet( fieldset_unit_mesh, - pclass=ScipyInteractionParticle, + pclass=InteractionParticle, lon=lons, lat=lats, interaction_distance=interaction_distance, @@ -114,7 +114,7 @@ def test_concatenate_interaction_kernels_as_pyfunc(fieldset_unit_mesh): pset = ParticleSet( fieldset_unit_mesh, - pclass=ScipyInteractionParticle, + pclass=InteractionParticle, lon=lons, lat=lats, interaction_distance=interaction_distance, @@ -133,7 +133,7 @@ def test_neighbor_merge(fieldset_unit_mesh): lats = [0.0, 0.0, 0.0, 0.0] # Distance in meters R_earth*0.2 degrees interaction_distance = 6371000 * 5.5 * np.pi / 180 - MergeParticle = ScipyInteractionParticle.add_variables( + MergeParticle = InteractionParticle.add_variables( [Variable("nearest_neighbor", dtype=np.int64, to_write=False), Variable("mass", initial=1, dtype=np.float32)] ) pset = ParticleSet( @@ -151,7 +151,7 @@ def test_asymmetric_attraction(fieldset_unit_mesh): lats = [0.0, 0.0, 0.0] # Distance in meters R_earth*0.2 degrees interaction_distance = 6371000 * 5.5 * np.pi / 180 - AttractingParticle = ScipyInteractionParticle.add_variable("attractor", dtype=np.bool_, to_write="once") + AttractingParticle = InteractionParticle.add_variable("attractor", dtype=np.bool_, to_write="once") pset = ParticleSet( fieldset_unit_mesh, pclass=AttractingParticle, @@ -190,11 +190,11 @@ def test_pseudo_interaction(runtime, dt): fieldset = FieldSet(Uflow, Vflow) # Execute the advection kernel only - pset = ParticleSet(fieldset, pclass=ScipyInteractionParticle, lon=[2], lat=[2]) + pset = ParticleSet(fieldset, pclass=InteractionParticle, lon=[2], lat=[2]) pset.execute(AdvectionRK4, runtime=runtime, dt=dt) # Execute both the advection and interaction kernel. - pset2 = ParticleSet(fieldset, pclass=ScipyInteractionParticle, lon=[2], lat=[2], interaction_distance=1) + pset2 = ParticleSet(fieldset, pclass=InteractionParticle, lon=[2], lat=[2], interaction_distance=1) pyfunc_inter = pset2.InteractionKernel(ConstantMoveInteraction) pset2.execute(AdvectionRK4, pyfunc_inter=pyfunc_inter, runtime=runtime, dt=dt) diff --git a/tests/test_interpolation.py b/tests/test_interpolation.py index 82299eb161..07c290edb4 100644 --- a/tests/test_interpolation.py +++ b/tests/test_interpolation.py @@ -3,7 +3,7 @@ import xarray as xr import parcels._interpolation as interpolation -from parcels import AdvectionRK4_3D, FieldSet, ParticleSet, ScipyParticle +from parcels import AdvectionRK4_3D, FieldSet, Particle, ParticleSet from tests.utils import TEST_DATA, create_fieldset_zeros_3d @@ -131,7 +131,7 @@ def test_interp_regression_v3(interp_method): x, y, z = np.meshgrid(np.linspace(0, 1, 7), np.linspace(0, 1, 13), np.linspace(0, 1, 5)) - TestP = ScipyParticle.add_variable("pid", dtype=np.int32, initial=0) + TestP = Particle.add_variable("pid", dtype=np.int32, initial=0) pset = ParticleSet(fieldset, pclass=TestP, lon=x, lat=y, depth=z, pid=np.arange(x.size)) def DeleteParticle(particle, fieldset, time): diff --git a/tests/test_kernel_execution.py b/tests/test_kernel_execution.py index 51d0b7e8cd..8de32ed963 100644 --- a/tests/test_kernel_execution.py +++ b/tests/test_kernel_execution.py @@ -8,8 +8,8 @@ AdvectionRK4, FieldOutOfBoundError, FieldSet, + Particle, ParticleSet, - ScipyParticle, StatusCode, ) from tests.common_kernels import DeleteParticle, DoNothing, MoveEast, MoveNorth @@ -48,7 +48,7 @@ def MoveLon_Update_dlon(particle, fieldset, time): # pragma: no cover def SampleP(particle, fieldset, time): # pragma: no cover particle.p = fieldset.U[time, particle.depth, particle.lat, particle.lon] - SampleParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0.0) + SampleParticle = Particle.add_variable("p", dtype=np.float32, initial=0.0) MoveLon = MoveLon_Update_dlon if kernel_type == "update_dlon" else MoveLon_Update_Lon @@ -84,7 +84,7 @@ def SampleP(particle, fieldset, time): # pragma: no cover def test_execution_endtime(fieldset_unit_mesh, start, end, substeps, dt): npart = 10 pset = ParticleSet( - fieldset_unit_mesh, pclass=ScipyParticle, time=start, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart) + fieldset_unit_mesh, pclass=Particle, time=start, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart) ) pset.execute(DoNothing, endtime=end, dt=dt) assert np.allclose(pset.time_nextloop, end) @@ -104,7 +104,7 @@ def test_execution_endtime(fieldset_unit_mesh, start, end, substeps, dt): def test_execution_runtime(fieldset_unit_mesh, start, end, substeps, dt): npart = 10 pset = ParticleSet( - fieldset_unit_mesh, pclass=ScipyParticle, time=start, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart) + fieldset_unit_mesh, pclass=Particle, time=start, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart) ) t_step = abs(end - start) / substeps for _ in range(substeps): @@ -121,9 +121,7 @@ def PythonFail(particle, fieldset, time): # pragma: no cover else: pass - pset = ParticleSet( - fieldset_unit_mesh, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart) - ) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) with pytest.raises(RuntimeError): pset.execute(PythonFail, endtime=20.0, dt=2.0) assert len(pset) == npart @@ -138,9 +136,7 @@ def MoveRight(particle, fieldset, time): # pragma: no cover tmp1, tmp2 = fieldset.UV[time, particle.depth, particle.lat, particle.lon + 0.1, particle] particle_dlon += 0.1 # noqa - pset = ParticleSet( - fieldset_unit_mesh, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart) - ) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) with pytest.raises(FieldOutOfBoundError): pset.execute(MoveRight, endtime=10.0, dt=1.0) assert len(pset) == npart @@ -161,7 +157,7 @@ def MoveLeft(particle, fieldset, time): # pragma: no cover lon = np.linspace(0.05, 0.95, npart) lat = np.linspace(1, 0, npart) - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=lon, lat=lat) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=lon, lat=lat) pset.execute([MoveRight, MoveLeft], endtime=11.0, dt=1.0) assert len(pset) == npart assert np.allclose(pset.lon, lon, rtol=1e-5) @@ -176,7 +172,7 @@ def RecoverAllErrors(particle, fieldset, time): # pragma: no cover if particle.state > 4: particle.state = StatusCode.Delete - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=10, lat=0) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=10, lat=0) pset.execute([MoveRight, RecoverAllErrors], endtime=11.0, dt=1.0) assert len(pset) == 0 @@ -188,7 +184,7 @@ def addoneLon(particle, fieldset, time): # pragma: no cover if particle.lon + particle_dlon >= 10: particle.state = StatusCode.StopAllExecution - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0, 1], lat=[0, 0]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0, 1], lat=[0, 0]) pset.execute(addoneLon, endtime=20.0, dt=1.0) assert pset[0].lon == 9 assert pset[0].time == 9 @@ -205,13 +201,13 @@ def MoveRight(particle, fieldset, time): # pragma: no cover lon = np.linspace(0.05, 0.95, npart) lat = np.linspace(1, 0, npart) - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=lon, lat=lat) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=lon, lat=lat) pset.execute([MoveRight, DeleteParticle], endtime=10.0, dt=1.0) assert len(pset) == 0 def test_kernel_add_no_new_variables(fieldset_unit_mesh): - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0.5], lat=[0.5]) pset.execute(pset.Kernel(MoveEast) + pset.Kernel(MoveNorth), endtime=2.0, dt=1.0) assert np.allclose(pset.lon, 0.6, rtol=1e-5) assert np.allclose(pset.lat, 0.6, rtol=1e-5) @@ -228,7 +224,7 @@ def Kernel2(particle, fieldset, time): # pragma: no cover add_lon = -0.3 particle_dlon += add_lon # noqa - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0.5], lat=[0.5]) pset.execute([Kernel1, Kernel2], endtime=2.0, dt=1.0) assert np.allclose(pset.lon, 0.3, rtol=1e-5) @@ -243,7 +239,7 @@ def MoveEast1(particle, fieldset, time): # pragma: no cover def MoveEast2(particle, fieldset, time): # pragma: no cover particle_dlon += add_lon # noqa - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0.5], lat=[0.5]) pset.execute(pset.Kernel(MoveEast1) + pset.Kernel(MoveEast2), endtime=2.0, dt=1.0) assert np.allclose(pset.lon, [0.9], rtol=1e-5) # should be 0.5 + 0.2 + 0.2 = 0.9 @@ -262,7 +258,7 @@ def MoveEast(particle, fieldset, time): # pragma: no cover def MoveNorth(particle, fieldset, time): # pragma: no cover particle_dlat += 0.1 # noqa - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0.5], lat=[0.5]) kernels_single = pset.Kernel([AdvectionRK4]) kernels_functions = pset.Kernel([AdvectionRK4, MoveEast, MoveNorth]) @@ -277,7 +273,7 @@ def test_combined_kernel_from_list_error_checking(fieldset_unit_mesh): Tests that various error cases raise appropriate messages. """ - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0.5], lat=[0.5]) # Test that list has to be non-empty with pytest.raises(ValueError): @@ -304,7 +300,7 @@ def MoveWest(particle, fieldset, time): # pragma: no cover add_lon = -0.3 particle_dlon += add_lon # noqa - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=[0.5], lat=[0.5]) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=[0.5], lat=[0.5]) pset.execute(pset.Kernel(MoveEast), endtime=1.0, dt=1.0) pset.execute(pset.Kernel(MoveWest), endtime=3.0, dt=1.0) assert np.allclose(pset.lon, 0.3, rtol=1e-5) # should be 0.5 + 0.1 - 0.3 = 0.3 diff --git a/tests/test_kernel_language.py b/tests/test_kernel_language.py index aa97eb47fb..b3ba394b16 100644 --- a/tests/test_kernel_language.py +++ b/tests/test_kernel_language.py @@ -8,8 +8,8 @@ Field, FieldSet, Kernel, + Particle, ParticleSet, - ScipyParticle, Variable, ) from parcels.application_kernels.EOSseawaterproperties import ( @@ -48,7 +48,7 @@ def fieldset_unit_mesh(): def test_expression_int(name, expr, result): """Test basic arithmetic expressions.""" npart = 10 - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet( create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, @@ -72,7 +72,7 @@ def test_expression_int(name, expr, result): def test_expression_float(name, expr, result): """Test basic arithmetic expressions.""" npart = 10 - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet( create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, @@ -102,7 +102,7 @@ def test_expression_float(name, expr, result): def test_expression_bool(name, expr, result): """Test basic arithmetic expressions.""" npart = 10 - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet( create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, @@ -115,7 +115,7 @@ def test_expression_bool(name, expr, result): def test_while_if_break(): """Test while, if and break commands.""" - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet(create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, lon=[0], lat=[0]) def kernel(particle, fieldset, time): # pragma: no cover @@ -132,7 +132,7 @@ def kernel(particle, fieldset, time): # pragma: no cover def test_nested_if(): """Test nested if commands.""" - TestParticle = ScipyParticle.add_variables( + TestParticle = Particle.add_variables( [Variable("p0", dtype=np.int32, initial=0), Variable("p1", dtype=np.int32, initial=1)] ) pset = ParticleSet(create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, lon=0, lat=0) @@ -149,7 +149,7 @@ def kernel(particle, fieldset, time): # pragma: no cover def test_pass(): """Test pass commands.""" - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet(create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, lon=0, lat=0) def kernel(particle, fieldset, time): # pragma: no cover @@ -161,7 +161,7 @@ def kernel(particle, fieldset, time): # pragma: no cover def test_dt_as_variable_in_kernel(): - pset = ParticleSet(create_fieldset_unit_mesh(mesh="spherical"), pclass=ScipyParticle, lon=0, lat=0) + pset = ParticleSet(create_fieldset_unit_mesh(mesh="spherical"), pclass=Particle, lon=0, lat=0) def kernel(particle, fieldset, time): # pragma: no cover dt = 1.0 # noqa @@ -174,8 +174,8 @@ def test_varname_as_fieldname(): fset = create_fieldset_unit_mesh(mesh="spherical") fset.add_field(Field("speed", 10, lon=0, lat=0)) fset.add_constant("vertical_speed", 0.1) - Particle = ScipyParticle.add_variable("speed") - pset = ParticleSet(fset, pclass=Particle, lon=0, lat=0) + particle = Particle.add_variable("speed") + pset = ParticleSet(fset, pclass=particle, lon=0, lat=0) def kernel_particlename(particle, fieldset, time): # pragma: no cover particle.speed = fieldset.speed[particle] @@ -191,7 +191,7 @@ def kernel_varname(particle, fieldset, time): # pragma: no cover def test_if_withfield(fieldset_unit_mesh): """Test combination of if and Field sampling commands.""" - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet(fieldset_unit_mesh, pclass=TestParticle, lon=[0], lat=[0]) def kernel(particle, fieldset, time): # pragma: no cover @@ -226,7 +226,7 @@ def kernel(particle, fieldset, time): # pragma: no cover def test_print(fieldset_unit_mesh, capfd): """Test print statements.""" - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet(fieldset_unit_mesh, pclass=TestParticle, lon=[0.5], lat=[0.5]) def kernel(particle, fieldset, time): # pragma: no cover @@ -253,7 +253,7 @@ def kernel2(particle, fieldset, time): # pragma: no cover def test_fieldset_access(fieldset_unit_mesh): - pset = ParticleSet(fieldset_unit_mesh, pclass=ScipyParticle, lon=0, lat=0) + pset = ParticleSet(fieldset_unit_mesh, pclass=Particle, lon=0, lat=0) def kernel(particle, fieldset, time): # pragma: no cover particle.lon = fieldset.U.grid.lon[2] @@ -264,7 +264,7 @@ def kernel(particle, fieldset, time): # pragma: no cover @pytest.mark.parametrize("concat", [False, True]) def test_random_kernel_concat(fieldset_unit_mesh, concat): - TestParticle = ScipyParticle.add_variable("p", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("p", dtype=np.float32, initial=0) pset = ParticleSet(fieldset_unit_mesh, pclass=TestParticle, lon=0, lat=0) def RandomKernel(particle, fieldset, time): # pragma: no cover @@ -279,7 +279,7 @@ def AddOne(particle, fieldset, time): # pragma: no cover def test_dt_modif_by_kernel(): - TestParticle = ScipyParticle.add_variable("age", dtype=np.float32, initial=0) + TestParticle = Particle.add_variable("age", dtype=np.float32, initial=0) pset = ParticleSet(create_fieldset_unit_mesh(mesh="spherical"), pclass=TestParticle, lon=[0.5], lat=[0]) def modif_dt(particle, fieldset, time): # pragma: no cover @@ -298,7 +298,7 @@ def test_small_dt(dt, expectation): npart = 10 pset = ParticleSet( create_fieldset_unit_mesh(mesh="spherical"), - pclass=ScipyParticle, + pclass=Particle, lon=np.zeros(npart), lat=np.zeros(npart), time=np.arange(0, npart) * dt * 10, @@ -331,7 +331,7 @@ def generate_fieldset(xdim=2, ydim=2, zdim=2, tdim=1): data, dimensions = generate_fieldset() fieldset = FieldSet.from_data(data, dimensions) - DensParticle = ScipyParticle.add_variable("density", dtype=np.float32) + DensParticle = Particle.add_variable("density", dtype=np.float32) pset = ParticleSet(fieldset, pclass=DensParticle, lon=5, lat=5, depth=1000) @@ -346,14 +346,14 @@ def test_EOSseawaterproperties_kernels(): ) fieldset.add_constant("refpressure", float(0)) - PoTempParticle = ScipyParticle.add_variables( + PoTempParticle = Particle.add_variables( [Variable("potemp", dtype=np.float32), Variable("pressure", dtype=np.float32, initial=10000)] ) pset = ParticleSet(fieldset, pclass=PoTempParticle, lon=5, lat=5, depth=1000) pset.execute(PtempFromTemp, runtime=1) assert np.allclose(pset[0].potemp, 36.89073) - TempParticle = ScipyParticle.add_variables( + TempParticle = Particle.add_variables( [Variable("temp", dtype=np.float32), Variable("pressure", dtype=np.float32, initial=10000)] ) pset = ParticleSet(fieldset, pclass=TempParticle, lon=5, lat=5, depth=1000) @@ -390,7 +390,7 @@ def generate_fieldset(p, xdim=2, ydim=2, zdim=2, tdim=1): data, dimensions = generate_fieldset(pressure) fieldset = FieldSet.from_data(data, dimensions) - DensParticle = ScipyParticle.add_variable("density", dtype=np.float32) + DensParticle = Particle.add_variable("density", dtype=np.float32) pset = ParticleSet(fieldset, pclass=DensParticle, lon=5, lat=5, depth=1000) diff --git a/tests/test_particlefile.py b/tests/test_particlefile.py index 469db1955d..41156e5048 100755 --- a/tests/test_particlefile.py +++ b/tests/test_particlefile.py @@ -13,8 +13,8 @@ AdvectionRK4, Field, FieldSet, + Particle, ParticleSet, - ScipyParticle, Variable, ) from parcels.particlefile import _set_calendar @@ -29,19 +29,19 @@ def fieldset(): def test_metadata(fieldset, tmp_zarrfile): - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=0, lat=0) + pset = ParticleSet(fieldset, pclass=Particle, lon=0, lat=0) pset.execute(DoNothing, runtime=1, output_file=pset.ParticleFile(tmp_zarrfile, outputdt=1)) ds = xr.open_zarr(tmp_zarrfile) - assert ds.attrs["parcels_kernels"].lower() == "ScipyParticleDoNothing".lower() + assert ds.attrs["parcels_kernels"].lower() == "ParticleDoNothing".lower() def test_pfile_array_write_zarr_memorystore(fieldset): """Check that writing to a Zarr MemoryStore works.""" npart = 10 zarr_store = MemoryStore() - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart), time=0) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart), time=0) pfile = pset.ParticleFile(zarr_store, outputdt=1) pfile.write(pset, 0) @@ -52,7 +52,7 @@ def test_pfile_array_write_zarr_memorystore(fieldset): def test_pfile_array_remove_particles(fieldset, tmp_zarrfile): npart = 10 - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart), time=0) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart), time=0) pfile = pset.ParticleFile(tmp_zarrfile, outputdt=1) pfile.write(pset, 0) pset.remove_indices(3) @@ -68,7 +68,7 @@ def test_pfile_array_remove_particles(fieldset, tmp_zarrfile): def test_pfile_set_towrite_False(fieldset, tmp_zarrfile): npart = 10 - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart)) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart)) pset.set_variable_write_status("depth", False) pset.set_variable_write_status("lat", False) pfile = pset.ParticleFile(tmp_zarrfile, outputdt=1) @@ -92,7 +92,7 @@ def Update_lon(particle, fieldset, time): # pragma: no cover @pytest.mark.parametrize("chunks_obs", [1, None]) def test_pfile_array_remove_all_particles(fieldset, chunks_obs, tmp_zarrfile): npart = 10 - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart), time=0) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=0.5 * np.ones(npart), time=0) chunks = (npart, chunks_obs) if chunks_obs else None pfile = pset.ParticleFile(tmp_zarrfile, chunks=chunks, outputdt=1) pfile.write(pset, 0) @@ -115,7 +115,7 @@ def test_variable_write_double(fieldset, tmp_zarrfile): def Update_lon(particle, fieldset, time): # pragma: no cover particle_dlon += 0.1 # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0], lat=[0], lonlatdepth_dtype=np.float64) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0], lat=[0], lonlatdepth_dtype=np.float64) ofile = pset.ParticleFile(name=tmp_zarrfile, outputdt=0.00001) pset.execute(pset.Kernel(Update_lon), endtime=0.001, dt=0.00001, output_file=ofile) @@ -141,7 +141,7 @@ def test_write_dtypes_pfile(fieldset, tmp_zarrfile): ] extra_vars = [Variable(f"v_{d.__name__}", dtype=d, initial=0.0) for d in dtypes] - MyParticle = ScipyParticle.add_variables(extra_vars) + MyParticle = Particle.add_variables(extra_vars) pset = ParticleSet(fieldset, pclass=MyParticle, lon=0, lat=0, time=0) pfile = pset.ParticleFile(name=tmp_zarrfile, outputdt=1) @@ -160,7 +160,7 @@ def Update_v(particle, fieldset, time): # pragma: no cover particle.v_once += 1.0 particle.age += particle.dt - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [ Variable("v_once", dtype=np.float64, initial=0.0, to_write="once"), Variable("age", dtype=np.float32, initial=0.0), @@ -189,7 +189,7 @@ def test_pset_repeated_release_delayed_adding_deleting(type, fieldset, repeatdt, fieldset.maxvar = maxvar pset = None - MyParticle = ScipyParticle.add_variables( + MyParticle = Particle.add_variables( [Variable("sample_var", initial=0.0), Variable("v_once", dtype=np.float64, initial=0.0, to_write="once")] ) @@ -228,9 +228,7 @@ def IncrLon(particle, fieldset, time): # pragma: no cover @pytest.mark.parametrize("nump", [1, 10]) def test_pfile_chunks_repeatedrelease(fieldset, repeatdt, nump, tmp_zarrfile): runtime = 8 - pset = ParticleSet( - fieldset, pclass=ScipyParticle, lon=np.zeros((nump, 1)), lat=np.zeros((nump, 1)), repeatdt=repeatdt - ) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.zeros((nump, 1)), lat=np.zeros((nump, 1)), repeatdt=repeatdt) chunks = (20, 10) pfile = pset.ParticleFile(tmp_zarrfile, outputdt=1, chunks=chunks) @@ -246,7 +244,7 @@ def test_write_timebackward(fieldset, tmp_zarrfile): def Update_lon(particle, fieldset, time): # pragma: no cover particle_dlon -= 0.1 * particle.dt # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lat=np.linspace(0, 1, 3), lon=[0, 0, 0], time=[1, 2, 3]) + pset = ParticleSet(fieldset, pclass=Particle, lat=np.linspace(0, 1, 3), lon=[0, 0, 0], time=[1, 2, 3]) pfile = pset.ParticleFile(name=tmp_zarrfile, outputdt=1.0) pset.execute(pset.Kernel(Update_lon), runtime=4, dt=-1.0, output_file=pfile) ds = xr.open_zarr(tmp_zarrfile) @@ -261,7 +259,7 @@ def test_write_xiyi(fieldset, tmp_zarrfile): fieldset.add_field(Field(name="P", data=np.zeros((3, 20)), lon=np.linspace(0, 1, 20), lat=[-2, 0, 2])) dt = 3600 - XiYiParticle = ScipyParticle.add_variables( + XiYiParticle = Particle.add_variables( [ Variable("pxi0", dtype=np.int32, initial=0.0), Variable("pxi1", dtype=np.int32, initial=0.0), @@ -321,7 +319,7 @@ def test_reset_dt(fieldset, tmp_zarrfile): def Update_lon(particle, fieldset, time): # pragma: no cover particle_dlon += 0.1 # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0], lat=[0], lonlatdepth_dtype=np.float64) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0], lat=[0], lonlatdepth_dtype=np.float64) ofile = pset.ParticleFile(name=tmp_zarrfile, outputdt=0.05) pset.execute(pset.Kernel(Update_lon), endtime=0.12, dt=0.02, output_file=ofile) @@ -334,7 +332,7 @@ def test_correct_misaligned_outputdt_dt(fieldset, tmp_zarrfile): def Update_lon(particle, fieldset, time): # pragma: no cover particle_dlon += particle.dt # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=[0], lat=[0], lonlatdepth_dtype=np.float64) + pset = ParticleSet(fieldset, pclass=Particle, lon=[0], lat=[0], lonlatdepth_dtype=np.float64) ofile = pset.ParticleFile(name=tmp_zarrfile, outputdt=3) pset.execute(pset.Kernel(Update_lon), endtime=11, dt=2, output_file=ofile) @@ -345,7 +343,7 @@ def Update_lon(particle, fieldset, time): # pragma: no cover ) -def setup_pset_execute(*, fieldset: FieldSet, outputdt: timedelta, execute_kwargs, particle_class=ScipyParticle): +def setup_pset_execute(*, fieldset: FieldSet, outputdt: timedelta, execute_kwargs, particle_class=Particle): npart = 10 if fieldset is None: diff --git a/tests/test_particles.py b/tests/test_particles.py index dba621e0f3..172d2a4291 100644 --- a/tests/test_particles.py +++ b/tests/test_particles.py @@ -5,8 +5,8 @@ from parcels import ( AdvectionRK4, + Particle, ParticleSet, - ScipyParticle, Variable, ) from tests.utils import create_fieldset_zeros_unit_mesh @@ -18,7 +18,7 @@ def fieldset(): def test_print(fieldset): - TestParticle = ScipyParticle.add_variable("p", to_write=True) + TestParticle = Particle.add_variable("p", to_write=True) pset = ParticleSet(fieldset, pclass=TestParticle, lon=[0, 1], lat=[0, 1]) print(pset) @@ -30,7 +30,7 @@ def test_variable_init(fieldset): Variable("p_float", dtype=np.float32, initial=10.0), Variable("p_double", dtype=np.float64, initial=11.0), ] - TestParticle = ScipyParticle.add_variables(extra_vars) + TestParticle = Particle.add_variables(extra_vars) TestParticle = TestParticle.add_variable("p_int", np.int32, initial=12.0) pset = ParticleSet(fieldset, pclass=TestParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) @@ -48,7 +48,7 @@ def addOne(particle, fieldset, time): # pragma: no cover @pytest.mark.parametrize("type", ["np.int8", "mp.float", "np.int16"]) def test_variable_unsupported_dtypes(fieldset, type): """Test that checks errors thrown for unsupported dtypes.""" - TestParticle = ScipyParticle.add_variable("p", dtype=type, initial=10.0) + TestParticle = Particle.add_variable("p", dtype=type, initial=10.0) with pytest.raises((RuntimeError, TypeError)): ParticleSet(fieldset, pclass=TestParticle, lon=[0], lat=[0]) @@ -56,7 +56,7 @@ def test_variable_unsupported_dtypes(fieldset, type): def test_variable_special_names(fieldset): """Test that checks errors thrown for special names.""" for vars in ["z", "lon"]: - TestParticle = ScipyParticle.add_variable(vars, dtype=np.float32, initial=10.0) + TestParticle = Particle.add_variable(vars, dtype=np.float32, initial=10.0) with pytest.raises(AttributeError): ParticleSet(fieldset, pclass=TestParticle, lon=[0], lat=[0]) @@ -67,7 +67,7 @@ def test_variable_init_relative(fieldset, coord_type): npart = 10 lonlat_type = np.float64 if coord_type == "double" else np.float32 - TestParticle = ScipyParticle.add_variables( + TestParticle = Particle.add_variables( [ Variable("p_base", dtype=lonlat_type, initial=10.0), Variable("p_relative", dtype=lonlat_type, initial=attrgetter("p_base")), diff --git a/tests/test_particlesets.py b/tests/test_particlesets.py index 31f646f9b2..c480295ef7 100644 --- a/tests/test_particlesets.py +++ b/tests/test_particlesets.py @@ -5,9 +5,9 @@ CurvilinearZGrid, Field, FieldSet, + Particle, ParticleSet, ParticleSetWarning, - ScipyParticle, StatusCode, Variable, ) @@ -23,7 +23,7 @@ def fieldset(): @pytest.fixture def pset(fieldset): npart = 10 - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.zeros(npart)) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.zeros(npart)) return pset @@ -31,7 +31,7 @@ def test_pset_create_lon_lat(fieldset): npart = 100 lon = np.linspace(0, 1, npart, dtype=np.float32) lat = np.linspace(1, 0, npart, dtype=np.float32) - pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=ScipyParticle) + pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=Particle) assert np.allclose([p.lon for p in pset], lon, rtol=1e-12) assert np.allclose([p.lat for p in pset], lat, rtol=1e-12) @@ -42,7 +42,7 @@ def test_pset_create_line(fieldset, lonlatdepth_dtype): lon = np.linspace(0, 1, npart, dtype=lonlatdepth_dtype) lat = np.linspace(1, 0, npart, dtype=lonlatdepth_dtype) pset = ParticleSet.from_line( - fieldset, size=npart, start=(0, 1), finish=(1, 0), pclass=ScipyParticle, lonlatdepth_dtype=lonlatdepth_dtype + fieldset, size=npart, start=(0, 1), finish=(1, 0), pclass=Particle, lonlatdepth_dtype=lonlatdepth_dtype ) assert np.allclose([p.lon for p in pset], lon, rtol=1e-12) assert np.allclose([p.lat for p in pset], lat, rtol=1e-12) @@ -50,7 +50,7 @@ def test_pset_create_line(fieldset, lonlatdepth_dtype): def test_create_empty_pset(fieldset): - pset = ParticleSet(fieldset, pclass=ScipyParticle) + pset = ParticleSet(fieldset, pclass=Particle) assert pset.size == 0 pset.execute(DoNothing, endtime=1.0, dt=1.0) @@ -62,7 +62,7 @@ def test_pset_create_list_with_customvariable(fieldset): lon = np.linspace(0, 1, npart, dtype=np.float32) lat = np.linspace(1, 0, npart, dtype=np.float32) - MyParticle = ScipyParticle.add_variable("v") + MyParticle = Particle.add_variable("v") v_vals = np.arange(npart) pset = ParticleSet.from_list(fieldset, lon=lon, lat=lat, v=v_vals, pclass=MyParticle) @@ -76,7 +76,7 @@ def test_pset_create_fromparticlefile(fieldset, restart, tmp_zarrfile): lon = np.linspace(0, 1, 10, dtype=np.float32) lat = np.linspace(1, 0, 10, dtype=np.float32) - TestParticle = ScipyParticle.add_variable("p", np.float32, initial=0.33) + TestParticle = Particle.add_variable("p", np.float32, initial=0.33) TestParticle = TestParticle.add_variable("p2", np.float32, initial=1, to_write=False) TestParticle = TestParticle.add_variable("p3", np.float64, to_write="once") @@ -111,7 +111,7 @@ def test_pset_create_field(fieldset, lonlatdepth_dtype): shape = (fieldset.U.lon.size, fieldset.U.lat.size) K = Field("K", lon=fieldset.U.lon, lat=fieldset.U.lat, data=np.ones(shape, dtype=np.float32), transpose=True) pset = ParticleSet.from_field( - fieldset, size=npart, pclass=ScipyParticle, start_field=K, lonlatdepth_dtype=lonlatdepth_dtype + fieldset, size=npart, pclass=Particle, start_field=K, lonlatdepth_dtype=lonlatdepth_dtype ) assert (np.array([p.lon for p in pset]) <= K.lon[-1]).all() assert (np.array([p.lon for p in pset]) >= K.lon[0]).all() @@ -139,7 +139,7 @@ def test_pset_create_field_curvi(): ufield = Field("U", u, grid=grid) vfield = Field("V", v, grid=grid) fieldset = FieldSet(ufield, vfield) - pset = ParticleSet.from_field(fieldset, size=npart, pclass=ScipyParticle, start_field=fieldset.V) + pset = ParticleSet.from_field(fieldset, size=npart, pclass=Particle, start_field=fieldset.V) lons = np.array([p.lon + 1 for p in pset]) lats = np.array([p.lat + 1 for p in pset]) @@ -158,11 +158,11 @@ def test_pset_create_with_time(fieldset): lon = np.linspace(0, 1, npart) lat = np.linspace(1, 0, npart) time = 5.0 - pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=ScipyParticle, time=time) + pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=Particle, time=time) assert np.allclose([p.time for p in pset], time, rtol=1e-12) - pset = ParticleSet.from_list(fieldset, lon=lon, lat=lat, pclass=ScipyParticle, time=[time] * npart) + pset = ParticleSet.from_list(fieldset, lon=lon, lat=lat, pclass=Particle, time=[time] * npart) assert np.allclose([p.time for p in pset], time, rtol=1e-12) - pset = ParticleSet.from_line(fieldset, size=npart, start=(0, 1), finish=(1, 0), pclass=ScipyParticle, time=time) + pset = ParticleSet.from_line(fieldset, size=npart, start=(0, 1), finish=(1, 0), pclass=Particle, time=time) assert np.allclose([p.time for p in pset], time, rtol=1e-12) @@ -170,12 +170,12 @@ def test_pset_create_outside_time(): fieldset = create_fieldset_zeros_simple(withtime=True) time = [-1, 0, 1, 20 * 86400] with pytest.warns(ParticleSetWarning, match="Some particles are set to be released*"): - ParticleSet(fieldset, pclass=ScipyParticle, lon=[0] * len(time), lat=[0] * len(time), time=time) + ParticleSet(fieldset, pclass=Particle, lon=[0] * len(time), lat=[0] * len(time), time=time) def test_pset_not_multipldt_time(fieldset): times = [0, 1.1] - pset = ParticleSet(fieldset, lon=[0] * 2, lat=[0] * 2, pclass=ScipyParticle, time=times) + pset = ParticleSet(fieldset, lon=[0] * 2, lat=[0] * 2, pclass=Particle, time=times) def Addlon(particle, fieldset, time): # pragma: no cover particle_dlon += particle.dt # noqa @@ -187,7 +187,7 @@ def Addlon(particle, fieldset, time): # pragma: no cover def test_pset_repeated_release(fieldset): npart = 10 time = np.arange(0, npart, 1) # release 1 particle every second - pset = ParticleSet(fieldset, lon=np.zeros(npart), lat=np.zeros(npart), pclass=ScipyParticle, time=time) + pset = ParticleSet(fieldset, lon=np.zeros(npart), lat=np.zeros(npart), pclass=Particle, time=time) assert np.allclose([p.time for p in pset], time) def IncrLon(particle, fieldset, time): # pragma: no cover @@ -198,7 +198,7 @@ def IncrLon(particle, fieldset, time): # pragma: no cover def test_pset_repeatdt_check_dt(fieldset): - pset = ParticleSet(fieldset, lon=[0], lat=[0], pclass=ScipyParticle, repeatdt=5) + pset = ParticleSet(fieldset, lon=[0], lat=[0], pclass=Particle, repeatdt=5) def IncrLon(particle, fieldset, time): # pragma: no cover particle.lon = 1.0 @@ -208,7 +208,7 @@ def IncrLon(particle, fieldset, time): # pragma: no cover def test_pset_repeatdt_custominit(fieldset): - MyParticle = ScipyParticle.add_variable("sample_var") + MyParticle = Particle.add_variable("sample_var") pset = ParticleSet(fieldset, lon=0, lat=0, pclass=MyParticle, repeatdt=1, sample_var=5) @@ -217,7 +217,7 @@ def test_pset_repeatdt_custominit(fieldset): def test_pset_stop_simulation(fieldset): - pset = ParticleSet(fieldset, lon=0, lat=0, pclass=ScipyParticle) + pset = ParticleSet(fieldset, lon=0, lat=0, pclass=Particle) def Delete(particle, fieldset, time): # pragma: no cover if time == 4: @@ -231,7 +231,7 @@ def test_pset_access(fieldset): npart = 100 lon = np.linspace(0, 1, npart, dtype=np.float32) lat = np.linspace(1, 0, npart, dtype=np.float32) - pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=ScipyParticle) + pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=Particle) assert pset.size == 100 assert np.allclose([pset[i].lon for i in range(pset.size)], lon, rtol=1e-12) assert np.allclose([pset[i].lat for i in range(pset.size)], lat, rtol=1e-12) @@ -239,9 +239,7 @@ def test_pset_access(fieldset): def test_pset_custom_ptype(fieldset): npart = 100 - TestParticle = ScipyParticle.add_variable( - [Variable("p", np.float32, initial=0.33), Variable("n", np.int32, initial=2)] - ) + TestParticle = Particle.add_variable([Variable("p", np.float32, initial=0.33), Variable("n", np.int32, initial=2)]) pset = ParticleSet(fieldset, pclass=TestParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) assert pset.size == npart @@ -253,11 +251,9 @@ def test_pset_add_explicit(fieldset): npart = 100 lon = np.linspace(0, 1, npart) lat = np.linspace(1, 0, npart) - pset = ParticleSet(fieldset, lon=[], lat=[], pclass=ScipyParticle, lonlatdepth_dtype=np.float64) + pset = ParticleSet(fieldset, lon=[], lat=[], pclass=Particle, lonlatdepth_dtype=np.float64) for i in range(npart): - particle = ParticleSet( - pclass=ScipyParticle, lon=lon[i], lat=lat[i], fieldset=fieldset, lonlatdepth_dtype=np.float64 - ) + particle = ParticleSet(pclass=Particle, lon=lon[i], lat=lat[i], fieldset=fieldset, lonlatdepth_dtype=np.float64) pset.add(particle) assert pset.size == npart assert np.allclose([p.lon for p in pset], lon, rtol=1e-12) @@ -268,9 +264,9 @@ def test_pset_add_shorthand(fieldset): npart = 100 lon = np.linspace(0, 1, npart, dtype=np.float32) lat = np.linspace(1, 0, npart, dtype=np.float32) - pset = ParticleSet(fieldset, lon=[], lat=[], pclass=ScipyParticle) + pset = ParticleSet(fieldset, lon=[], lat=[], pclass=Particle) for i in range(npart): - pset += ParticleSet(pclass=ScipyParticle, lon=lon[i], lat=lat[i], fieldset=fieldset) + pset += ParticleSet(pclass=Particle, lon=lon[i], lat=lat[i], fieldset=fieldset) assert pset.size == npart assert np.allclose([p.lon for p in pset], lon, rtol=1e-12) assert np.allclose([p.lat for p in pset], lat, rtol=1e-12) @@ -282,9 +278,9 @@ def test_pset_add_execute(fieldset): def AddLat(particle, fieldset, time): # pragma: no cover particle_dlat += 0.1 # noqa - pset = ParticleSet(fieldset, lon=[], lat=[], pclass=ScipyParticle) + pset = ParticleSet(fieldset, lon=[], lat=[], pclass=Particle) for _ in range(npart): - pset += ParticleSet(pclass=ScipyParticle, lon=0.1, lat=0.1, fieldset=fieldset) + pset += ParticleSet(pclass=Particle, lon=0.1, lat=0.1, fieldset=fieldset) for _ in range(4): pset.execute(pset.Kernel(AddLat), runtime=1.0, dt=1.0) assert np.allclose(np.array([p.lat for p in pset]), 0.4, rtol=1e-12) @@ -292,8 +288,8 @@ def AddLat(particle, fieldset, time): # pragma: no cover def test_pset_merge_inplace(fieldset): npart = 100 - pset1 = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) - pset2 = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(0, 1, npart)) + pset1 = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) + pset2 = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(0, 1, npart)) assert pset1.size == npart assert pset2.size == npart pset1.add(pset2) @@ -303,8 +299,8 @@ def test_pset_merge_inplace(fieldset): @pytest.mark.xfail(reason="ParticleSet duplication has not been implemented yet") def test_pset_merge_duplicate(fieldset): npart = 100 - pset1 = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) - pset2 = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(0, 1, npart)) + pset1 = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) + pset2 = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(0, 1, npart)) pset3 = pset1 + pset2 assert pset1.size == npart assert pset2.size == npart @@ -315,7 +311,7 @@ def test_pset_remove_index(fieldset): npart = 100 lon = np.linspace(0, 1, npart) lat = np.linspace(1, 0, npart) - pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=ScipyParticle, lonlatdepth_dtype=np.float64) + pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=Particle, lonlatdepth_dtype=np.float64) for ilon, ilat in zip(lon[::-1], lat[::-1], strict=True): assert pset[-1].lon == ilon assert pset[-1].lat == ilat @@ -328,7 +324,7 @@ def test_pset_remove_particle(fieldset): npart = 100 lon = np.linspace(0, 1, npart) lat = np.linspace(1, 0, npart) - pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=ScipyParticle) + pset = ParticleSet(fieldset, lon=lon, lat=lat, pclass=Particle) for ilon, ilat in zip(lon[::-1], lat[::-1], strict=True): assert pset.lon[-1] == ilon assert pset.lat[-1] == ilat @@ -343,7 +339,7 @@ def DeleteKernel(particle, fieldset, time): # pragma: no cover if particle.lon >= 0.4: particle.delete() - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.linspace(1, 0, npart)) pset.execute(pset.Kernel(DeleteKernel), endtime=1.0, dt=1.0) assert pset.size == 40 @@ -355,7 +351,7 @@ def test_pset_multi_execute(fieldset): def AddLat(particle, fieldset, time): # pragma: no cover particle_dlat += 0.1 # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.zeros(npart)) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.zeros(npart)) k_add = pset.Kernel(AddLat) for _ in range(n + 1): pset.execute(k_add, runtime=1.0, dt=1.0) @@ -369,7 +365,7 @@ def test_pset_multi_execute_delete(fieldset): def AddLat(particle, fieldset, time): # pragma: no cover particle_dlat += 0.1 # noqa - pset = ParticleSet(fieldset, pclass=ScipyParticle, lon=np.linspace(0, 1, npart), lat=np.zeros(npart)) + pset = ParticleSet(fieldset, pclass=Particle, lon=np.linspace(0, 1, npart), lat=np.zeros(npart)) k_add = pset.Kernel(AddLat) for _ in range(n + 1): pset.execute(k_add, runtime=1.0, dt=1.0) @@ -413,7 +409,7 @@ def test_from_field_exact_val(staggered_grid): FMask = Field("mask", mask, lon, lat, interp_method="cgrid_tracer") fieldset.add_field(FMask) - SampleParticle = ScipyParticle.add_variable("mask", initial=0) + SampleParticle = Particle.add_variable("mask", initial=0) def SampleMask(particle, fieldset, time): # pragma: no cover particle.mask = fieldset.mask[particle] diff --git a/tests/test_reprs.py b/tests/test_reprs.py index a7e7c0e2e9..8b6fc79f77 100644 --- a/tests/test_reprs.py +++ b/tests/test_reprs.py @@ -52,7 +52,7 @@ def test_check_indentation(): def test_particletype_repr(): - kwargs = dict(pclass=parcels.ScipyParticle) + kwargs = dict(pclass=parcels.Particle) assert_simple_repr(parcels.particle.ParticleType, kwargs) diff --git a/tests/tools/test_warnings.py b/tests/tools/test_warnings.py index 1979f9c86e..b6a9ad2169 100644 --- a/tests/tools/test_warnings.py +++ b/tests/tools/test_warnings.py @@ -10,9 +10,9 @@ FieldSet, FieldSetWarning, KernelWarning, + Particle, ParticleSet, ParticleSetWarning, - ScipyParticle, ) from tests.utils import TEST_DATA @@ -60,7 +60,7 @@ def test_file_warnings(tmp_zarrfile): fieldset = FieldSet.from_data( data={"U": np.zeros((1, 1)), "V": np.zeros((1, 1))}, dimensions={"lon": [0], "lat": [0]} ) - pset = ParticleSet(fieldset=fieldset, pclass=ScipyParticle, lon=[0, 0], lat=[0, 0], time=[0, 1]) + pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=[0, 0], lat=[0, 0], time=[0, 1]) pfile = pset.ParticleFile(name=tmp_zarrfile, outputdt=2) with pytest.warns(ParticleSetWarning, match="Some of the particles have a start time difference.*"): pset.execute(AdvectionRK4, runtime=3, dt=1, output_file=pfile) @@ -76,7 +76,7 @@ def test_kernel_warnings(): warnings.simplefilter("ignore", FieldSetWarning) fieldset = FieldSet.from_pop(filenames, variables, dimensions, mesh="flat") fieldset.W._scaling_factor = 0.01 - pset = ParticleSet(fieldset=fieldset, pclass=ScipyParticle, lon=[0], lat=[0], depth=[0], time=[0]) + pset = ParticleSet(fieldset=fieldset, pclass=Particle, lon=[0], lat=[0], depth=[0], time=[0]) with pytest.warns(KernelWarning): pset.execute(AdvectionRK4_3D, runtime=1, dt=1) @@ -88,7 +88,7 @@ def test_kernel_warnings(): fieldset = FieldSet.from_data(data={"U": u, "V": v}, dimensions={"lon": lon, "lat": lat}, transpose=True) pset = ParticleSet( fieldset=fieldset, - pclass=ScipyParticle.add_variable("next_dt", dtype=np.float32, initial=1), + pclass=Particle.add_variable("next_dt", dtype=np.float32, initial=1), lon=[0], lat=[0], depth=[0], diff --git a/tests/utils.py b/tests/utils.py index 35e134b21e..783f6ad4bb 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -74,7 +74,7 @@ def create_simple_pset(n=1): zeros = np.zeros(n) return parcels.ParticleSet( fieldset=create_fieldset_unit_mesh(), - pclass=parcels.ScipyParticle, + pclass=parcels.Particle, lon=zeros, lat=zeros, depth=zeros,