Skip to content

Commit 04a77c5

Browse files
Merge pull request #1935 from OceanParcels/remove_fieldset_fromparcels
Removing FieldSet.from_parcels() method
2 parents e031804 + b6a8e52 commit 04a77c5

10 files changed

+91
-107
lines changed

docs/examples/example_moving_eddies.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import gc
21
import math
32
from argparse import ArgumentParser
43
from datetime import timedelta
@@ -229,25 +228,25 @@ def fieldsetfile(mesh, tmpdir):
229228
return filename
230229

231230

232-
@pytest.mark.parametrize("mesh", ["flat", "spherical"])
233-
def test_moving_eddies_file(mesh, tmpdir):
234-
gc.collect()
235-
fieldset = parcels.FieldSet.from_parcels(
236-
fieldsetfile(mesh, tmpdir), extra_fields={"P": "P"}
237-
)
231+
def test_moving_eddies_file(tmpdir):
232+
data_folder = parcels.download_example_dataset("MovingEddies_data")
233+
filenames = {
234+
"U": str(data_folder / "moving_eddiesU.nc"),
235+
"V": str(data_folder / "moving_eddiesV.nc"),
236+
"P": str(data_folder / "moving_eddiesP.nc"),
237+
}
238+
variables = {"U": "vozocrtx", "V": "vomecrty", "P": "P"}
239+
dimensions = {"lon": "nav_lon", "lat": "nav_lat", "time": "time_counter"}
240+
fieldset = parcels.FieldSet.from_netcdf(filenames, variables, dimensions)
238241
outfile = tmpdir.join("EddyParticle")
239242
pset = moving_eddies_example(fieldset, outfile, 2)
240243
# Also include last timestep
241244
for var in ["lon", "lat", "depth", "time"]:
242245
pset.particledata.setallvardata(
243246
f"{var}", pset.particledata.getvardata(f"{var}_nextloop")
244247
)
245-
if mesh == "flat":
246-
assert pset[0].lon < 2.2e5 and 1.1e5 < pset[0].lat < 1.2e5
247-
assert pset[1].lon < 2.2e5 and 3.7e5 < pset[1].lat < 3.8e5
248-
else:
249-
assert pset[0].lon < 2.0 and 46.2 < pset[0].lat < 46.25
250-
assert pset[1].lon < 2.0 and 48.8 < pset[1].lat < 48.85
248+
assert pset[0].lon < 2.2e5 and 1.1e5 < pset[0].lat < 1.2e5
249+
assert pset[1].lon < 2.2e5 and 3.7e5 < pset[1].lat < 3.8e5
251250

252251

253252
@pytest.mark.v4alpha

docs/examples/example_peninsula.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import gc
21
import math # NOQA
32
from argparse import ArgumentParser
43
from datetime import timedelta
@@ -216,14 +215,18 @@ def fieldsetfile(mesh, tmpdir):
216215
return filename
217216

218217

219-
@pytest.mark.parametrize("mesh", ["flat", "spherical"])
220-
def test_peninsula_file(mesh, tmpdir):
218+
def test_peninsula_file(tmpdir):
221219
"""Open fieldset files and execute."""
222-
gc.collect()
223-
fieldset = parcels.FieldSet.from_parcels(
224-
fieldsetfile(mesh, tmpdir),
225-
extra_fields={"P": "P"},
226-
allow_time_extrapolation=True,
220+
data_folder = parcels.download_example_dataset("Peninsula_data")
221+
filenames = {
222+
"U": str(data_folder / "peninsulaU.nc"),
223+
"V": str(data_folder / "peninsulaV.nc"),
224+
"P": str(data_folder / "peninsulaP.nc"),
225+
}
226+
variables = {"U": "vozocrtx", "V": "vomecrty", "P": "P"}
227+
dimensions = {"lon": "nav_lon", "lat": "nav_lat", "time": "time_counter"}
228+
fieldset = parcels.FieldSet.from_netcdf(
229+
filenames, variables, dimensions, allow_time_extrapolation=True
227230
)
228231
outfile = tmpdir.join("Peninsula")
229232
pset = peninsula_example(fieldset, outfile, 5, degree=1)
@@ -299,9 +302,17 @@ def main(args=None):
299302
fieldset.write(filename)
300303

301304
# Open fieldset file set
302-
fieldset = parcels.FieldSet.from_parcels(
303-
"peninsula", extra_fields={"P": "P"}, allow_time_extrapolation=True
305+
filenames = {
306+
"U": f"{filename}U.nc",
307+
"V": f"{filename}V.nc",
308+
"P": f"{filename}P.nc",
309+
}
310+
variables = {"U": "vozocrtx", "V": "vomecrty", "P": "P"}
311+
dimensions = {"lon": "nav_lon", "lat": "nav_lat", "time": "time_counter"}
312+
fieldset = parcels.FieldSet.from_netcdf(
313+
filenames, variables, dimensions, allow_time_extrapolation=True
304314
)
315+
305316
outfile = "Peninsula"
306317

307318
if args.profiling:

docs/examples/parcels_tutorial.ipynb

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"cell_type": "markdown",
6666
"metadata": {},
6767
"source": [
68-
"The first step to running particles with Parcels is to define a `FieldSet` object, which is simply a collection of hydrodynamic fields. In this first case, we use a simple flow of two idealised moving eddies. That field can be downloaded using the `download_example_dataset()` function that comes with Parcels. Since we know that the files are in what's called Parcels FieldSet format, we can call these files using the function `FieldSet.from_parcels()`.\n"
68+
"The first step to running particles with Parcels is to define a `FieldSet` object, which is simply a collection of hydrodynamic fields. In this first case, we use a simple flow of two idealised moving eddies. That field can be downloaded using the `download_example_dataset()` function that comes with Parcels. Since we know that the files are in what's called Parcels FieldSet format, we can call these files using the function `FieldSet.from_netcdf()`.\n"
6969
]
7070
},
7171
{
@@ -76,7 +76,13 @@
7676
"source": [
7777
"example_dataset_folder = parcels.download_example_dataset(\"MovingEddies_data\")\n",
7878
"\n",
79-
"fieldset = parcels.FieldSet.from_parcels(f\"{example_dataset_folder}/moving_eddies\")\n",
79+
"filenames = {\n",
80+
" \"U\": str(example_dataset_folder / \"moving_eddiesU.nc\"),\n",
81+
" \"V\": str(example_dataset_folder / \"moving_eddiesV.nc\"),\n",
82+
"}\n",
83+
"variables = {\"U\": \"vozocrtx\", \"V\": \"vomecrty\"}\n",
84+
"dimensions = {\"lon\": \"nav_lon\", \"lat\": \"nav_lat\", \"time\": \"time_counter\"}\n",
85+
"fieldset = parcels.FieldSet.from_netcdf(filenames, variables, dimensions)\n",
8086
"\n",
8187
"print(fieldset)"
8288
]
@@ -666,10 +672,15 @@
666672
"outputs": [],
667673
"source": [
668674
"example_dataset_folder = parcels.download_example_dataset(\"Peninsula_data\")\n",
669-
"fieldset = parcels.FieldSet.from_parcels(\n",
670-
" f\"{example_dataset_folder}/peninsula\",\n",
671-
" extra_fields={\"P\": \"P\"},\n",
672-
" allow_time_extrapolation=True,\n",
675+
"filenames = {\n",
676+
" \"U\": str(example_dataset_folder / \"peninsulaU.nc\"),\n",
677+
" \"V\": str(example_dataset_folder / \"peninsulaV.nc\"),\n",
678+
" \"P\": str(example_dataset_folder / \"peninsulaP.nc\"),\n",
679+
"}\n",
680+
"variables = {\"U\": \"vozocrtx\", \"V\": \"vomecrty\", \"P\": \"P\"}\n",
681+
"dimensions = {\"lon\": \"nav_lon\", \"lat\": \"nav_lat\", \"time\": \"time_counter\"}\n",
682+
"fieldset = parcels.FieldSet.from_netcdf(\n",
683+
" filenames, variables, dimensions, allow_time_extrapolation=True\n",
673684
")"
674685
]
675686
},

docs/examples/tutorial_delaystart.ipynb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@
5050
"outputs": [],
5151
"source": [
5252
"example_dataset_folder = parcels.download_example_dataset(\"Peninsula_data\")\n",
53-
"fieldset = parcels.FieldSet.from_parcels(\n",
54-
" f\"{example_dataset_folder}/peninsula\", allow_time_extrapolation=True\n",
53+
"filenames = {\n",
54+
" \"U\": str(example_dataset_folder / \"peninsulaU.nc\"),\n",
55+
" \"V\": str(example_dataset_folder / \"peninsulaV.nc\"),\n",
56+
"}\n",
57+
"variables = {\"U\": \"vozocrtx\", \"V\": \"vomecrty\"}\n",
58+
"dimensions = {\"lon\": \"nav_lon\", \"lat\": \"nav_lat\", \"time\": \"time_counter\"}\n",
59+
"fieldset = parcels.FieldSet.from_netcdf(\n",
60+
" filenames, variables, dimensions, allow_time_extrapolation=True\n",
5561
")"
5662
]
5763
},

docs/examples/tutorial_output.ipynb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,15 @@
4444
"outputs": [],
4545
"source": [
4646
"example_dataset_folder = parcels.download_example_dataset(\"Peninsula_data\")\n",
47-
"fieldset = parcels.FieldSet.from_parcels(\n",
48-
" f\"{example_dataset_folder}/peninsula\", allow_time_extrapolation=True\n",
47+
"example_dataset_folder = parcels.download_example_dataset(\"Peninsula_data\")\n",
48+
"filenames = {\n",
49+
" \"U\": str(example_dataset_folder / \"peninsulaU.nc\"),\n",
50+
" \"V\": str(example_dataset_folder / \"peninsulaV.nc\"),\n",
51+
"}\n",
52+
"variables = {\"U\": \"vozocrtx\", \"V\": \"vomecrty\"}\n",
53+
"dimensions = {\"lon\": \"nav_lon\", \"lat\": \"nav_lat\", \"time\": \"time_counter\"}\n",
54+
"fieldset = parcels.FieldSet.from_netcdf(\n",
55+
" filenames, variables, dimensions, allow_time_extrapolation=True\n",
4956
")\n",
5057
"\n",
5158
"npart = 10 # number of particles to be released\n",

docs/examples/tutorial_periodic_boundaries.ipynb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,14 @@
8686
"outputs": [],
8787
"source": [
8888
"example_dataset_folder = parcels.download_example_dataset(\"Peninsula_data\")\n",
89-
"fieldset = parcels.FieldSet.from_parcels(\n",
90-
" f\"{example_dataset_folder}/peninsula\", allow_time_extrapolation=True\n",
89+
"filenames = {\n",
90+
" \"U\": str(example_dataset_folder / \"peninsulaU.nc\"),\n",
91+
" \"V\": str(example_dataset_folder / \"peninsulaV.nc\"),\n",
92+
"}\n",
93+
"variables = {\"U\": \"vozocrtx\", \"V\": \"vomecrty\"}\n",
94+
"dimensions = {\"lon\": \"nav_lon\", \"lat\": \"nav_lat\", \"time\": \"time_counter\"}\n",
95+
"fieldset = parcels.FieldSet.from_netcdf(\n",
96+
" filenames, variables, dimensions, allow_time_extrapolation=True\n",
9197
")"
9298
]
9399
},

docs/examples/tutorial_sampling.ipynb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,15 @@
6767
"source": [
6868
"# Velocity and temperature fields\n",
6969
"example_dataset_folder = parcels.download_example_dataset(\"Peninsula_data\")\n",
70-
"fieldset = parcels.FieldSet.from_parcels(\n",
71-
" f\"{example_dataset_folder}/peninsula\",\n",
72-
" extra_fields={\"T\": \"T\"},\n",
73-
" allow_time_extrapolation=True,\n",
70+
"filenames = {\n",
71+
" \"U\": str(example_dataset_folder / \"peninsulaU.nc\"),\n",
72+
" \"V\": str(example_dataset_folder / \"peninsulaV.nc\"),\n",
73+
" \"T\": str(example_dataset_folder / \"peninsulaT.nc\"),\n",
74+
"}\n",
75+
"variables = {\"U\": \"vozocrtx\", \"V\": \"vomecrty\", \"T\": \"T\"}\n",
76+
"dimensions = {\"lon\": \"nav_lon\", \"lat\": \"nav_lat\", \"time\": \"time_counter\"}\n",
77+
"fieldset = parcels.FieldSet.from_netcdf(\n",
78+
" filenames, variables, dimensions, allow_time_extrapolation=True\n",
7479
")\n",
7580
"\n",
7681
"# Particle locations and initial time\n",

parcels/fieldset.py

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import os
33
import sys
44
import warnings
5-
from copy import deepcopy
65
from glob import glob
76

87
import numpy as np
@@ -894,57 +893,6 @@ def from_b_grid_dataset(
894893
**kwargs,
895894
)
896895

897-
@classmethod
898-
def from_parcels(
899-
cls,
900-
basename,
901-
uvar="vozocrtx",
902-
vvar="vomecrty",
903-
extra_fields=None,
904-
allow_time_extrapolation: bool | None = None,
905-
**kwargs,
906-
):
907-
"""Initialises FieldSet data from NetCDF files using the Parcels FieldSet.write() conventions.
908-
909-
Parameters
910-
----------
911-
basename : str
912-
Base name of the file(s); may contain
913-
wildcards to indicate multiple files.
914-
fieldtype :
915-
Optional dictionary mapping fields to fieldtypes to be used for UnitConverter.
916-
(either 'U', 'V', 'Kh_zonal', 'Kh_meridional' or None)
917-
extra_fields :
918-
Extra fields to read beyond U and V (Default value = None)
919-
allow_time_extrapolation : bool
920-
boolean whether to allow for extrapolation
921-
(i.e. beyond the last available time snapshot)
922-
Default is False if dimensions includes time, else True
923-
uvar :
924-
(Default value = 'vozocrtx')
925-
vvar :
926-
(Default value = 'vomecrty')
927-
**kwargs :
928-
Keyword arguments passed to the :func:`Fieldset.from_netcdf` constructor.
929-
"""
930-
if extra_fields is None:
931-
extra_fields = {}
932-
933-
dimensions = {}
934-
default_dims = {"lon": "nav_lon", "lat": "nav_lat", "depth": "depth", "time": "time_counter"}
935-
extra_fields.update({"U": uvar, "V": vvar})
936-
for vars in extra_fields:
937-
dimensions[vars] = deepcopy(default_dims)
938-
dimensions[vars]["depth"] = f"depth{vars.lower()}"
939-
filenames = {v: str(f"{basename}{v}.nc") for v in extra_fields.keys()}
940-
return cls.from_netcdf(
941-
filenames,
942-
variables=extra_fields,
943-
dimensions=dimensions,
944-
allow_time_extrapolation=allow_time_extrapolation,
945-
**kwargs,
946-
)
947-
948896
@classmethod
949897
def from_xarray_dataset(cls, ds, variables, dimensions, mesh="spherical", allow_time_extrapolation=None, **kwargs):
950898
"""Initialises FieldSet data from xarray Datasets.

tests/test_fieldset.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -143,21 +143,6 @@ def test_fieldset_from_data_different_dimensions(xdim, ydim):
143143
assert np.allclose(fieldset.P.data, 2.0, rtol=1e-12)
144144

145145

146-
@pytest.mark.parametrize("xdim", [100, 200])
147-
@pytest.mark.parametrize("ydim", [100, 200])
148-
def test_fieldset_from_parcels(xdim, ydim, tmpdir):
149-
"""Simple test for fieldset initialisation from Parcels FieldSet file format."""
150-
filepath = tmpdir.join("test_parcels")
151-
data, dimensions = generate_fieldset_data(xdim, ydim)
152-
fieldset_out = FieldSet.from_data(data, dimensions)
153-
fieldset_out.write(filepath)
154-
fieldset = FieldSet.from_parcels(filepath)
155-
assert len(fieldset.U.data.shape) == 3 # Will be 4 once we use depth
156-
assert len(fieldset.V.data.shape) == 3
157-
assert np.allclose(fieldset.U.data[0, :], data["U"], rtol=1e-12)
158-
assert np.allclose(fieldset.V.data[0, :], data["V"], rtol=1e-12)
159-
160-
161146
def test_fieldset_from_modulefile():
162147
nemo_fname = str(TEST_DATA / "fieldset_nemo.py")
163148
nemo_error_fname = str(TEST_DATA / "fieldset_nemo_error.py")

tests/test_particlefile.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,13 @@ def test_pset_execute_outputdt_backwards_fieldset_timevarying():
402402

403403
# TODO: Not ideal using the `download_example_dataset` here, but I'm struggling to recreate this error using the test suite fieldsets we have
404404
example_dataset_folder = parcels.download_example_dataset("MovingEddies_data")
405-
fieldset = parcels.FieldSet.from_parcels(f"{example_dataset_folder}/moving_eddies")
405+
filenames = {
406+
"U": str(example_dataset_folder / "moving_eddiesU.nc"),
407+
"V": str(example_dataset_folder / "moving_eddiesV.nc"),
408+
}
409+
variables = {"U": "vozocrtx", "V": "vomecrty"}
410+
dimensions = {"lon": "nav_lon", "lat": "nav_lat", "time": "time_counter"}
411+
fieldset = parcels.FieldSet.from_netcdf(filenames, variables, dimensions)
406412

407413
ds = setup_pset_execute(outputdt=outputdt, execute_kwargs=dict(runtime=runtime, dt=dt), fieldset=fieldset)
408414
file_outputdt = ds.isel(trajectory=0).time.diff(dim="obs").values

0 commit comments

Comments
 (0)