Skip to content

Commit 0afd4d4

Browse files
Second batch of tutorial cleanups after #2719
1 parent 4cfb9c9 commit 0afd4d4

7 files changed

Lines changed: 93 additions & 101 deletions

docs/user_guide/examples/tutorial_interaction.ipynb

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@
6363
"\n",
6464
" # Boolean mask and coordinates of attractors\n",
6565
" attractor_mask = particles.attractor.astype(bool)\n",
66-
" lon_a = particles.lon[attractor_mask]\n",
67-
" lat_a = particles.lat[attractor_mask]\n",
66+
" x_a = particles.x[attractor_mask]\n",
67+
" y_a = particles.y[attractor_mask]\n",
6868
"\n",
6969
" # Pairwise differences and distances (n_attractors × n_particles)\n",
70-
" dx = particles.lon - lon_a[:, None]\n",
71-
" dy = particles.lat - lat_a[:, None]\n",
70+
" dx = particles.x - x_a[:, None]\n",
71+
" dy = particles.y - y_a[:, None]\n",
7272
" distances = np.sqrt(dx**2 + dy**2)\n",
7373
"\n",
7474
" # Mask dx, dy by interaction range\n",
@@ -81,8 +81,8 @@
8181
" dx_norm = dx * inv_dist\n",
8282
" dy_norm = dy * inv_dist\n",
8383
"\n",
84-
" particles.dlon += np.sum(dx_norm, axis=0) * velocity * particles.dt\n",
85-
" particles.dlat += np.sum(dy_norm, axis=0) * velocity * particles.dt"
84+
" particles.dx += np.sum(dx_norm, axis=0) * velocity * particles.dt\n",
85+
" particles.dy += np.sum(dy_norm, axis=0) * velocity * particles.dt"
8686
]
8787
},
8888
{
@@ -124,8 +124,8 @@
124124
"pset = parcels.ParticleSet(\n",
125125
" fieldset=DiffusionFieldSet(),\n",
126126
" pclass=InteractingParticle,\n",
127-
" lon=X,\n",
128-
" lat=Y,\n",
127+
" x=X,\n",
128+
" y=Y,\n",
129129
" attractor=attractor,\n",
130130
")\n",
131131
"\n",
@@ -170,17 +170,17 @@
170170
"ax.set_ylim(-1.1, 1.1)\n",
171171
"\n",
172172
"particles = df_other.filter(pl.col(\"time\") == pl.lit(timerange[0]))\n",
173-
"scatter = ax.scatter(particles[\"lon\"], particles[\"lat\"], c=\"b\", s=5, zorder=1)\n",
173+
"scatter = ax.scatter(particles[\"x\"], particles[\"y\"], c=\"b\", s=5, zorder=1)\n",
174174
"particles_attr = df_attr.filter(pl.col(\"time\") == pl.lit(timerange[0]))\n",
175175
"scatter_attr = ax.scatter(\n",
176-
" particles_attr[\"lon\"], particles_attr[\"lat\"], c=\"r\", s=40, zorder=2\n",
176+
" particles_attr[\"x\"], particles_attr[\"y\"], c=\"r\", s=40, zorder=2\n",
177177
")\n",
178178
"circs = []\n",
179-
"for lon_a, lat_a in zip(particles_attr[\"lon\"], particles_attr[\"lat\"], strict=True):\n",
179+
"for x_a, y_a in zip(particles_attr[\"x\"], particles_attr[\"y\"], strict=True):\n",
180180
" circs.append(\n",
181181
" ax.add_patch(\n",
182182
" plt.Circle(\n",
183-
" (lon_a, lat_a), 0.25, facecolor=\"None\", edgecolor=\"r\", linestyle=\"--\"\n",
183+
" (x_a, y_a), 0.25, facecolor=\"None\", edgecolor=\"r\", linestyle=\"--\"\n",
184184
" )\n",
185185
" )\n",
186186
" )\n",
@@ -192,13 +192,13 @@
192192
"\n",
193193
"def animate(i):\n",
194194
" particles = df_other.filter(pl.col(\"time\") == pl.lit(timerange[i]))\n",
195-
" scatter.set_offsets(np.c_[particles[\"lon\"], particles[\"lat\"]])\n",
195+
" scatter.set_offsets(np.c_[particles[\"x\"], particles[\"y\"]])\n",
196196
" particles_attr = df_attr.filter(pl.col(\"time\") == pl.lit(timerange[i]))\n",
197-
" scatter_attr.set_offsets(np.c_[particles_attr[\"lon\"], particles_attr[\"lat\"]])\n",
198-
" for c, lon_a, lat_a in zip(\n",
199-
" circs, particles_attr[\"lon\"], particles_attr[\"lat\"], strict=True\n",
197+
" scatter_attr.set_offsets(np.c_[particles_attr[\"x\"], particles_attr[\"y\"]])\n",
198+
" for c, x_a, y_a in zip(\n",
199+
" circs, particles_attr[\"x\"], particles_attr[\"y\"], strict=True\n",
200200
" ):\n",
201-
" c.center = (lon_a, lat_a)\n",
201+
" c.center = (x_a, y_a)\n",
202202
" title.set_text(\n",
203203
" f\"Particles at t = {timerange[i].total_seconds()}s\\n(Red particles are attractors)\"\n",
204204
" )\n",
@@ -235,11 +235,11 @@
235235
" \"\"\"\n",
236236
" interaction_distance = 0.05\n",
237237
"\n",
238-
" N = len(particles.lon)\n",
238+
" N = len(particles.x)\n",
239239
"\n",
240240
" # calculate pairwise distances (n_particles × n_particles)\n",
241-
" dx = particles.lon[None, :] - particles.lon[:, None]\n",
242-
" dy = particles.lat[None, :] - particles.lat[:, None]\n",
241+
" dx = particles.x[None, :] - particles.x[:, None]\n",
242+
" dy = particles.y[None, :] - particles.y[:, None]\n",
243243
" distances = np.sqrt(dx**2 + dy**2)\n",
244244
"\n",
245245
" # mask distances by interaction range\n",
@@ -291,8 +291,8 @@
291291
"pset = parcels.ParticleSet(\n",
292292
" fieldset=DiffusionFieldSet(),\n",
293293
" pclass=MergeParticle,\n",
294-
" lon=np.random.uniform(-1, 1, size=npart),\n",
295-
" lat=np.random.uniform(-1, 1, size=npart),\n",
294+
" x=np.random.uniform(-1, 1, size=npart),\n",
295+
" y=np.random.uniform(-1, 1, size=npart),\n",
296296
" mass=np.random.uniform(0.5, 1.5, size=npart),\n",
297297
")\n",
298298
"\n",
@@ -335,14 +335,14 @@
335335
"\n",
336336
"particles = df.filter(pl.col(\"time\") == pl.lit(timerange[0]))\n",
337337
"scatter = ax.scatter(\n",
338-
" particles[\"lon\"], particles[\"lat\"], c=\"b\", s=particles[\"mass\"], zorder=1\n",
338+
" particles[\"x\"], particles[\"y\"], c=\"b\", s=particles[\"mass\"], zorder=1\n",
339339
")\n",
340340
"title = ax.set_title(f\"Particles at t = {timerange[0].total_seconds()}s\")\n",
341341
"\n",
342342
"\n",
343343
"def animate(i):\n",
344344
" particles = df.filter(pl.col(\"time\") == pl.lit(timerange[i]))\n",
345-
" scatter.set_offsets(np.c_[particles[\"lon\"], particles[\"lat\"]])\n",
345+
" scatter.set_offsets(np.c_[particles[\"x\"], particles[\"y\"]])\n",
346346
" scatter.set_sizes(particles[\"mass\"])\n",
347347
" title.set_text(f\"Particles at t = {timerange[i].total_seconds()}s\")\n",
348348
"\n",
@@ -355,7 +355,7 @@
355355
],
356356
"metadata": {
357357
"kernelspec": {
358-
"display_name": "docs",
358+
"display_name": "Parcels:docs (3.14.6)",
359359
"language": "python",
360360
"name": "python3"
361361
},
@@ -369,7 +369,7 @@
369369
"name": "python",
370370
"nbconvert_exporter": "python",
371371
"pygments_lexer": "ipython3",
372-
"version": "3.14.4"
372+
"version": "3.14.6"
373373
}
374374
},
375375
"nbformat": 4,

docs/user_guide/examples/tutorial_interpolation.ipynb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
" print(fieldset.P.interp_method.__class__.__name__)\n",
134134
" xv, yv = np.meshgrid(np.linspace(0, 1, 8), np.linspace(0, 1, 8))\n",
135135
" pset[p_interp.__class__.__name__] = parcels.ParticleSet(\n",
136-
" fieldset, pclass=SampleParticle, lon=xv.flatten(), lat=yv.flatten()\n",
136+
" fieldset, pclass=SampleParticle, x=xv.flatten(), y=yv.flatten()\n",
137137
" )\n",
138138
" pset[p_interp.__class__.__name__].execute(\n",
139139
" SampleP,\n",
@@ -170,7 +170,7 @@
170170
" ax[i].axvline(lon, color=\"k\", linestyle=\"--\")\n",
171171
" pc = ax[i].pcolormesh(x, y, data, vmin=0.1, vmax=1.1)\n",
172172
" ax[i].scatter(\n",
173-
" pset[p].lon, pset[p].lat, c=pset[p].p, edgecolors=\"k\", s=50, vmin=0.1, vmax=1.1\n",
173+
" pset[p].x, pset[p].y, c=pset[p].p, edgecolors=\"k\", s=50, vmin=0.1, vmax=1.1\n",
174174
" )\n",
175175
" xp, yp = np.meshgrid(fieldset.P.grid.lon, fieldset.P.grid.lat)\n",
176176
" ax[i].plot(xp, yp, \"kx\")\n",
@@ -198,8 +198,8 @@
198198
"outputs": [],
199199
"source": [
200200
"plt.scatter(\n",
201-
" pset[\"XLinear\"].lon,\n",
202-
" pset[\"XLinear\"].lat,\n",
201+
" pset[\"XLinear\"].x,\n",
202+
" pset[\"XLinear\"].y,\n",
203203
" c=pset[\"XLinearInvdistLandTracer\"].p - pset[\"XLinear\"].p,\n",
204204
" edgecolors=\"k\",\n",
205205
" s=50,\n",
@@ -339,7 +339,7 @@
339339
"xv, yv = np.meshgrid(np.linspace(0.2, 0.8, 8), np.linspace(0.2, 0.9, 8))\n",
340340
"\n",
341341
"pset[\"node\"] = parcels.ParticleSet(\n",
342-
" fieldset, pclass=SampleParticle, lon=xv.flatten(), lat=yv.flatten()\n",
342+
" fieldset, pclass=SampleParticle, x=xv.flatten(), y=yv.flatten()\n",
343343
")\n",
344344
"pset[\"node\"].execute(\n",
345345
" SampleTracer_Node,\n",
@@ -349,7 +349,7 @@
349349
")\n",
350350
"\n",
351351
"pset[\"face\"] = parcels.ParticleSet(\n",
352-
" fieldset, pclass=SampleParticle, lon=xv.flatten(), lat=yv.flatten()\n",
352+
" fieldset, pclass=SampleParticle, x=xv.flatten(), y=yv.flatten()\n",
353353
")\n",
354354
"pset[\"face\"].execute(\n",
355355
" SampleTracer_Face,\n",
@@ -403,8 +403,8 @@
403403
")\n",
404404
"\n",
405405
"ax[0].scatter(\n",
406-
" pset[\"node\"].lon,\n",
407-
" pset[\"node\"].lat,\n",
406+
" pset[\"node\"].x,\n",
407+
" pset[\"node\"].y,\n",
408408
" c=pset[\"node\"].tracer,\n",
409409
" cmap=\"viridis\",\n",
410410
" edgecolors=\"k\",\n",
@@ -442,8 +442,8 @@
442442
"yf = ds.uxgrid.face_lat.values\n",
443443
"\n",
444444
"ax[1].scatter(\n",
445-
" pset[\"face\"].lon,\n",
446-
" pset[\"face\"].lat,\n",
445+
" pset[\"face\"].x,\n",
446+
" pset[\"face\"].y,\n",
447447
" c=pset[\"face\"].tracer,\n",
448448
" cmap=\"viridis\",\n",
449449
" edgecolors=\"k\",\n",

docs/user_guide/examples/tutorial_nemo.ipynb

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@
149149
"latp = np.linspace(-70, 88, npart)\n",
150150
"runtime = np.timedelta64(40, \"D\")\n",
151151
"\n",
152-
"pset = parcels.ParticleSet(fieldset, lon=lonp, lat=latp)\n",
152+
"pset = parcels.ParticleSet(fieldset, x=lonp, y=latp)\n",
153153
"pfile = parcels.ParticleFile(\n",
154154
" \"output_curvilinear.parquet\", outputdt=np.timedelta64(1, \"D\")\n",
155155
")\n",
@@ -160,7 +160,7 @@
160160
" dt=np.timedelta64(1, \"D\"),\n",
161161
" output_file=pfile,\n",
162162
")\n",
163-
"np.testing.assert_allclose(pset.lat, latp, atol=1e-1)"
163+
"np.testing.assert_allclose(pset.y, latp, atol=1e-1)"
164164
]
165165
},
166166
{
@@ -179,7 +179,7 @@
179179
"df = parcels.read_particlefile(\"output_curvilinear.parquet\")\n",
180180
"\n",
181181
"for traj in df.partition_by(\"particle_id\", maintain_order=True):\n",
182-
" plt.plot(traj[\"lon\"], traj[\"lat\"], \".-\")\n",
182+
" plt.plot(traj[\"x\"], traj[\"y\"], \".-\")\n",
183183
"\n",
184184
"plt.vlines(np.arange(-180, 901, 360), -90, 90, color=\"r\", label=\"antimeridian\")\n",
185185
"plt.ylabel(\"Latitude [deg N]\")\n",
@@ -204,12 +204,12 @@
204204
"outputs": [],
205205
"source": [
206206
"# post processing\n",
207-
"df = df.with_columns((pl.col(\"lon\") % 360).alias(\"lon\"))\n",
207+
"df = df.with_columns((pl.col(\"x\") % 360).alias(\"x\"))\n",
208208
"df = df.with_columns(\n",
209-
" pl.when(pl.col(\"lon\") <= 180)\n",
210-
" .then(pl.col(\"lon\"))\n",
211-
" .otherwise(pl.col(\"lon\") - 360)\n",
212-
" .alias(\"lon\")\n",
209+
" pl.when(pl.col(\"x\") <= 180)\n",
210+
" .then(pl.col(\"x\"))\n",
211+
" .otherwise(pl.col(\"x\") - 360)\n",
212+
" .alias(\"x\")\n",
213213
")"
214214
]
215215
},
@@ -225,12 +225,12 @@
225225
"source": [
226226
"# with a Kernel\n",
227227
"def periodicBC(particles, fieldset): # pragma: no cover\n",
228-
" particles.dlon = np.where(\n",
229-
" particles.lon + particles.dlon > 180, particles.dlon - 360, particles.dlon\n",
228+
" particles.dx = np.where(\n",
229+
" particles.x + particles.dx > 180, particles.dx - 360, particles.dx\n",
230230
" )\n",
231231
"\n",
232232
"\n",
233-
"pset = parcels.ParticleSet(fieldset, lon=lonp, lat=latp)\n",
233+
"pset = parcels.ParticleSet(fieldset, x=lonp, y=latp)\n",
234234
"pfile = parcels.ParticleFile(\n",
235235
" \"output_curvilinear_periodic.parquet\", outputdt=np.timedelta64(1, \"D\")\n",
236236
")\n",
@@ -251,7 +251,7 @@
251251
"source": [
252252
"fig, ax = plt.subplots(1, 2, figsize=(10, 5))\n",
253253
"for traj in df.partition_by(\"particle_id\", maintain_order=True):\n",
254-
" ax[0].plot(traj[\"lon\"], traj[\"lat\"], \".-\")\n",
254+
" ax[0].plot(traj[\"x\"], traj[\"y\"], \".-\")\n",
255255
"ax[0].vlines(np.arange(-180, 360, 360), -90, 90, color=\"r\", label=\"antimeridian\")\n",
256256
"ax[0].set_ylabel(\"Latitude [deg N]\")\n",
257257
"ax[0].set_xlabel(\"Longitude [deg E]\")\n",
@@ -262,7 +262,7 @@
262262
"\n",
263263
"df_periodic = parcels.read_particlefile(\"output_curvilinear_periodic.parquet\")\n",
264264
"for traj in df_periodic.partition_by(\"particle_id\", maintain_order=True):\n",
265-
" ax[1].plot(traj[\"lon\"], traj[\"lat\"], \".-\")\n",
265+
" ax[1].plot(traj[\"x\"], traj[\"y\"], \".-\")\n",
266266
"\n",
267267
"ax[1].vlines(np.arange(-180, 360, 360), -90, 90, color=\"r\", label=\"antimeridian\")\n",
268268
"ax[1].set_ylabel(\"Latitude [deg N]\")\n",
@@ -330,8 +330,8 @@
330330
"npart = 10\n",
331331
"pset = parcels.ParticleSet(\n",
332332
" fieldset=fieldset,\n",
333-
" lon=np.linspace(1.9, 3.4, npart),\n",
334-
" lat=np.linspace(65, 51.6, npart),\n",
333+
" x=np.linspace(1.9, 3.4, npart),\n",
334+
" y=np.linspace(65, 51.6, npart),\n",
335335
" z=100 * np.ones(npart),\n",
336336
")\n",
337337
"\n",
@@ -366,17 +366,15 @@
366366
"vmin = df[\"z\"].min()\n",
367367
"vmax = df[\"z\"].max()\n",
368368
"for traj in df.partition_by(\"particle_id\", maintain_order=True):\n",
369-
" plt.scatter(\n",
370-
" traj[\"lon\"], traj[\"lat\"], c=-traj[\"z\"], marker=\".\", vmin=-vmax, vmax=-vmin\n",
371-
" )\n",
369+
" plt.scatter(traj[\"x\"], traj[\"y\"], c=-traj[\"z\"], marker=\".\", vmin=-vmax, vmax=-vmin)\n",
372370
"plt.colorbar(label=\"Depth (m)\")\n",
373371
"plt.show()"
374372
]
375373
}
376374
],
377375
"metadata": {
378376
"kernelspec": {
379-
"display_name": "docs",
377+
"display_name": "Parcels:docs (3.14.6)",
380378
"language": "python",
381379
"name": "python3"
382380
},
@@ -390,7 +388,7 @@
390388
"name": "python",
391389
"nbconvert_exporter": "python",
392390
"pygments_lexer": "ipython3",
393-
"version": "3.14.4"
391+
"version": "3.14.6"
394392
}
395393
},
396394
"nbformat": 4,

0 commit comments

Comments
 (0)