Skip to content

Commit 9431199

Browse files
Merge branch 'main' into migration-guide
2 parents 42fcf2d + 59c549e commit 9431199

22 files changed

Lines changed: 437 additions & 124 deletions

docs/user_guide/additional_examples.md

Lines changed: 0 additions & 75 deletions
This file was deleted.

docs/user_guide/examples/explanation_kernelloop.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ import parcels.tutorial
5757
5858
# Load the CopernicusMarine data in the Agulhas region from the example_datasets
5959
ds_fields = parcels.tutorial.open_dataset("CopernicusMarine_data_for_Argo_tutorial/data")
60-
ds_fields.load() # load the dataset into memory
6160
6261
# Create an idealised wind field and add it to the dataset
6362
tdim, ydim, xdim = (len(ds_fields.time),len(ds_fields.latitude), len(ds_fields.longitude))
@@ -83,6 +82,9 @@ fieldset = parcels.FieldSet.from_sgrid_conventions(
8382
"Wind": ("UWind", "VWind")
8483
}
8584
)
85+
86+
# Convert the FieldSet to windowed arrays for better performance
87+
fieldset = fieldset.to_windowed_arrays()
8688
```
8789

8890
Now we define a wind Kernel that uses a forward Euler method to apply the wind forcing. Note that we update the `particles.dx` and `particles.dy` variables, rather than `particles.x` and `particles.y` directly.

docs/user_guide/examples/tutorial_Argofloats.ipynb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,6 @@
107107
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
108108
")\n",
109109
"\n",
110-
"# TODO check how we can get good performance without loading full dataset in memory\n",
111-
"ds_fields.load() # load the dataset into memory\n",
112-
"\n",
113110
"# Select fields\n",
114111
"fields = {\n",
115112
" \"U\": ds_fields[\"uo\"],\n",
@@ -120,6 +117,7 @@
120117
"# Convert to SGRID-compliant dataset and create FieldSet\n",
121118
"ds_fset = parcels.convert.copernicusmarine_to_sgrid(fields=fields)\n",
122119
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
120+
"fieldset.to_windowed_arrays()\n",
123121
"\n",
124122
"# Define a new Particle type including extra Variables\n",
125123
"ArgoParticle = parcels.Particle.add_variable(\n",

docs/user_guide/examples/tutorial_delaystart.ipynb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@
5656
"ds_fields = parcels.tutorial.open_dataset(\n",
5757
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
5858
")\n",
59-
"ds_fields.load() # load the dataset into memory\n",
6059
"\n",
6160
"# Convert to SGRID-compliant dataset and create FieldSet\n",
6261
"fields = {\"U\": ds_fields[\"uo\"], \"V\": ds_fields[\"vo\"]}\n",
6362
"ds_fset = parcels.convert.copernicusmarine_to_sgrid(fields=fields)\n",
64-
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)"
63+
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
64+
"\n",
65+
"# Convert the FieldSet to windowed arrays for better performance\n",
66+
"fieldset = fieldset.to_windowed_arrays()"
6567
]
6668
},
6769
{
@@ -398,7 +400,7 @@
398400
],
399401
"metadata": {
400402
"kernelspec": {
401-
"display_name": "Parcels:docs (3.14.6)",
403+
"display_name": "Python 3",
402404
"language": "python",
403405
"name": "python3"
404406
},

docs/user_guide/examples/tutorial_diffusion.ipynb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,7 @@
472472
"# Load the CopernicusMarine data in the Agulhas region from the example_datasets\n",
473473
"ds_fields = parcels.tutorial.open_dataset(\n",
474474
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
475-
").isel(depth=slice(0, 1))\n",
476-
"ds_fields.load() # load the dataset into memory"
475+
").isel(depth=slice(0, 1))"
477476
]
478477
},
479478
{
@@ -528,7 +527,10 @@
528527
"ds_cell_areas[\"cell_areas\"] = ([\"lat\", \"lon\"], calc_cell_areas(ds_fields))\n",
529528
"fset2 = parcels.FieldSet.from_sgrid_conventions(ds_cell_areas)\n",
530529
"\n",
531-
"fieldset += fset2"
530+
"fieldset += fset2\n",
531+
"\n",
532+
"# Convert the FieldSet to windowed arrays for better performance\n",
533+
"fieldset = fieldset.to_windowed_arrays()"
532534
]
533535
},
534536
{

docs/user_guide/examples/tutorial_dt_integrators.ipynb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
"ds_fields = parcels.tutorial.open_dataset(\n",
6868
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
6969
")\n",
70-
"ds_fields.load() # load the dataset into memory\n",
7170
"\n",
7271
"OUTPUT_FOLDER = Path(\"output\")\n",
7372
"OUTPUT_FOLDER.mkdir(exist_ok=True)\n",
@@ -77,6 +76,9 @@
7776
"ds_fset = parcels.convert.copernicusmarine_to_sgrid(fields=fields)\n",
7877
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
7978
"\n",
79+
"# Convert the FieldSet to windowed arrays for better performance\n",
80+
"fieldset = fieldset.to_windowed_arrays()\n",
81+
"\n",
8082
"# Check field resolution in time and space\n",
8183
"print(\n",
8284
" f\"dt = {np.unique(np.diff(ds_fields.time.values).astype('timedelta64[h]'))} hours\"\n",

docs/user_guide/examples/tutorial_gsw_density.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,6 @@
4343
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
4444
")\n",
4545
"\n",
46-
"# TODO check how we can get good performance without loading full dataset in memory\n",
47-
"ds_fields.load() # load the dataset into memory\n",
48-
"\n",
4946
"# Convert to SGRID-compliant dataset and create FieldSet\n",
5047
"fields = {\n",
5148
" \"U\": ds_fields[\"uo\"],\n",
@@ -54,7 +51,10 @@
5451
" \"so\": ds_fields[\"so\"],\n",
5552
"}\n",
5653
"ds_fset = parcels.convert.copernicusmarine_to_sgrid(fields=fields)\n",
57-
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)"
54+
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
55+
"\n",
56+
"# Convert the FieldSet to windowed arrays for better performance\n",
57+
"fieldset = fieldset.to_windowed_arrays()"
5858
]
5959
},
6060
{

docs/user_guide/examples/tutorial_manipulating_field_data.ipynb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
"ds_fields = parcels.tutorial.open_dataset(\n",
5050
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
5151
")\n",
52-
"ds_fields.load() # load the dataset into memory\n",
5352
"\n",
5453
"# Create an idealised wind field and add it to the dataset\n",
5554
"ydim, xdim = len(ds_fields.latitude), len(ds_fields.longitude)\n",
@@ -122,6 +121,9 @@
122121
"ds_fset = parcels.convert.copernicusmarine_to_sgrid(fields=fields)\n",
123122
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
124123
"\n",
124+
"# Convert the FieldSet to windowed arrays for better performance\n",
125+
"fieldset = fieldset.to_windowed_arrays()\n",
126+
"\n",
125127
"npart = 10\n",
126128
"z = np.repeat(ds_fields.depth[0].values, npart)\n",
127129
"lons = np.repeat(32.2, npart)\n",

docs/user_guide/examples/tutorial_nemo.ipynb

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,10 @@
307307
" fields={\"U\": ds_u[\"uo\"], \"V\": ds_v[\"vo\"], \"W\": ds_w[\"wo\"]},\n",
308308
" coords=ds_coords,\n",
309309
")\n",
310-
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)"
310+
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
311+
"\n",
312+
"fieldset = fieldset.to_windowed_arrays()\n",
313+
"fieldset.describe()"
311314
]
312315
},
313316
{
@@ -327,12 +330,12 @@
327330
},
328331
"outputs": [],
329332
"source": [
330-
"npart = 10\n",
333+
"npart = 3\n",
331334
"pset = parcels.ParticleSet(\n",
332335
" fieldset=fieldset,\n",
333336
" x=np.linspace(1.9, 3.4, npart),\n",
334-
" y=np.linspace(65, 51.6, npart),\n",
335-
" z=100 * np.ones(npart),\n",
337+
" y=np.linspace(60, 58, npart),\n",
338+
" z=20 * np.ones(npart),\n",
336339
")\n",
337340
"\n",
338341
"pfile = parcels.ParticleFile(\"output_nemo3D.parquet\", outputdt=np.timedelta64(1, \"D\"))\n",
@@ -358,16 +361,30 @@
358361
"metadata": {},
359362
"outputs": [],
360363
"source": [
361-
"field = fieldset.U.data[0, 0, :, :]\n",
364+
"fig, ax = plt.subplots(figsize=(8, 4))\n",
365+
"\n",
366+
"field = fieldset.U.data.isel(time=0, depth_center=0).compute()\n",
362367
"field = field.where(field != 0, np.nan) # Mask land values for better plotting\n",
363-
"plt.pcolormesh(fieldset.U.grid.lon, fieldset.U.grid.lat, field, cmap=\"RdBu\")\n",
368+
"ax.pcolormesh(fieldset.U.grid.lon, fieldset.U.grid.lat, field, cmap=\"RdBu\")\n",
364369
"\n",
365370
"df = parcels.read_particlefile(\"output_nemo3D.parquet\")\n",
366371
"vmin = df[\"z\"].min()\n",
367372
"vmax = df[\"z\"].max()\n",
368373
"for traj in df.partition_by(\"particle_id\", maintain_order=True):\n",
369-
" plt.scatter(traj[\"x\"], traj[\"y\"], c=-traj[\"z\"], marker=\".\", vmin=-vmax, vmax=-vmin)\n",
370-
"plt.colorbar(label=\"Depth (m)\")\n",
374+
" ax.plot(traj[\"x\"], traj[\"y\"], \"-\", color=\"k\", alpha=0.5)\n",
375+
" scat = ax.scatter(\n",
376+
" traj[\"x\"],\n",
377+
" traj[\"y\"],\n",
378+
" c=-traj[\"z\"],\n",
379+
" marker=\".\",\n",
380+
" vmin=-vmax,\n",
381+
" vmax=-vmin,\n",
382+
" zorder=10,\n",
383+
" )\n",
384+
"plt.colorbar(scat, label=\"Depth (m)\", ax=ax)\n",
385+
"ax.set_xlim([1, 9])\n",
386+
"ax.set_ylim([56, 61])\n",
387+
"ax.set_aspect(\"equal\")\n",
371388
"plt.show()"
372389
]
373390
}

docs/user_guide/examples/tutorial_sampling.ipynb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,14 @@
6060
"ds_fields = parcels.tutorial.open_dataset(\n",
6161
" \"CopernicusMarine_data_for_Argo_tutorial/data\"\n",
6262
")\n",
63-
"ds_fields.load() # load the dataset into memory\n",
6463
"\n",
6564
"# Convert to SGRID-compliant dataset and create FieldSet\n",
6665
"fields = {\"U\": ds_fields[\"uo\"], \"V\": ds_fields[\"vo\"], \"thetao\": ds_fields[\"thetao\"]}\n",
6766
"ds_fset = parcels.convert.copernicusmarine_to_sgrid(fields=fields)\n",
68-
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)"
67+
"fieldset = parcels.FieldSet.from_sgrid_conventions(ds_fset)\n",
68+
"\n",
69+
"# Convert the FieldSet to windowed arrays for better performance\n",
70+
"fieldset = fieldset.to_windowed_arrays()"
6971
]
7072
},
7173
{

0 commit comments

Comments
 (0)