Skip to content

Commit 693f8f2

Browse files
authored
Merge pull request #319 from OceanParcels/auto_advanceTime2
Auto advance time
2 parents 5298c0f + 6b41256 commit 693f8f2

File tree

11 files changed

+1157
-1333
lines changed

11 files changed

+1157
-1333
lines changed

parcels/examples/example_globcurrent.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,22 @@
99
ptype = {'scipy': ScipyParticle, 'jit': JITParticle}
1010

1111

12-
def set_globcurrent_fieldset(filename=None, indices={}):
12+
def set_globcurrent_fieldset(filename=None, indices={}, full_load=False):
1313
if filename is None:
1414
filename = path.join(path.dirname(__file__), 'GlobCurrent_example_data',
1515
'20*-GLOBCURRENT-L4-CUReul_hs-ALT_SUM-v02.0-fv01.0.nc')
1616
filenames = {'U': filename, 'V': filename}
1717
variables = {'U': 'eastward_eulerian_current_velocity', 'V': 'northward_eulerian_current_velocity'}
1818
dimensions = {'lat': 'lat', 'lon': 'lon', 'time': 'time'}
19-
return FieldSet.from_netcdf(filenames, variables, dimensions, indices)
19+
return FieldSet.from_netcdf(filenames, variables, dimensions, indices, full_load=full_load)
2020

2121

2222
def test_globcurrent_fieldset():
2323
fieldset = set_globcurrent_fieldset()
2424
assert(fieldset.U.lon.size == 81)
2525
assert(fieldset.U.lat.size == 41)
26-
assert(fieldset.U.data.shape == (365, 41, 81))
2726
assert(fieldset.V.lon.size == 81)
2827
assert(fieldset.V.lat.size == 41)
29-
assert(fieldset.V.data.shape == (365, 41, 81))
3028

3129
indices = {'lon': [5], 'lat': range(20, 30)}
3230
fieldsetsub = set_globcurrent_fieldset(indices=indices)
@@ -46,19 +44,17 @@ def test_globcurrent_fieldset_advancetime(mode, dt, substart, subend, lonstart,
4644
'20*-GLOBCURRENT-L4-CUReul_hs-ALT_SUM-v02.0-fv01.0.nc')
4745
files = sorted(glob(str(basepath)))
4846

49-
fieldsetsub = set_globcurrent_fieldset(files[substart:subend])
47+
fieldsetsub = set_globcurrent_fieldset(files[0:10])
5048
psetsub = ParticleSet.from_list(fieldset=fieldsetsub, pclass=ptype[mode], lon=[lonstart], lat=[latstart])
5149

52-
fieldsetall = set_globcurrent_fieldset(files[0:10])
50+
fieldsetall = set_globcurrent_fieldset(files[0:10], full_load=True)
5351
psetall = ParticleSet.from_list(fieldset=fieldsetall, pclass=ptype[mode], lon=[lonstart], lat=[latstart])
5452
if dt < 0:
5553
psetsub[0].time = fieldsetsub.U.time[-1]
5654
psetall[0].time = fieldsetall.U.time[-1]
5755

5856
for i in irange:
5957
psetsub.execute(AdvectionRK4, runtime=delta(days=1), dt=dt)
60-
fieldsetsub.advancetime(set_globcurrent_fieldset(files[i]))
61-
6258
psetall.execute(AdvectionRK4, runtime=delta(days=1), dt=dt)
6359

6460
assert abs(psetsub[0].lon - psetall[0].lon) < 1e-4

parcels/examples/example_moving_eddies.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,34 @@ def test_moving_eddies_file(fieldsetfile, mode):
148148
assert(pset[1].lon < 2.0 and 48.8 < pset[1].lat < 48.85)
149149

150150

151+
@pytest.mark.parametrize('mode', ['scipy', 'jit'])
152+
def test_periodic_and_computeTimeChunk_eddies(mode):
153+
filename = path.join(path.dirname(__file__), 'MovingEddies_data', 'moving_eddies')
154+
fieldset = FieldSet.from_parcels(filename)
155+
fieldset.add_periodic_halo(zonal=True, meridional=True)
156+
pset = ParticleSet.from_list(fieldset=fieldset,
157+
pclass=ptype[mode],
158+
lon=[3.3, 3.3],
159+
lat=[46.0, 47.8])
160+
161+
def periodicBC(particle, fieldset, time, dt):
162+
if particle.lon < fieldset.halo_west:
163+
particle.lon += fieldset.halo_east - fieldset.halo_west
164+
elif particle.lon > fieldset.halo_east:
165+
particle.lon -= fieldset.halo_east - fieldset.halo_west
166+
if particle.lat < fieldset.halo_south:
167+
particle.lat += fieldset.halo_north - fieldset.halo_south
168+
elif particle.lat > fieldset.halo_north:
169+
particle.lat -= fieldset.halo_north - fieldset.halo_south
170+
171+
def slowlySouthWestward(particle, fieldset, time, dt):
172+
particle.lon = particle.lon - 5 * dt / 1e5
173+
particle.lat -= 3 * dt / 1e5
174+
175+
kernels = pset.Kernel(AdvectionRK4)+slowlySouthWestward+periodicBC
176+
pset.execute(kernels, runtime=delta(days=6), dt=delta(hours=1))
177+
178+
151179
if __name__ == "__main__":
152180
p = ArgumentParser(description="""
153181
Example of particle advection around an idealised peninsula""")

parcels/examples/example_ofam.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,17 @@
77
ptype = {'scipy': ScipyParticle, 'jit': JITParticle}
88

99

10-
def set_ofam_fieldset():
10+
def set_ofam_fieldset(full_load=False):
1111
filenames = {'U': path.join(path.dirname(__file__), 'OFAM_example_data', 'OFAM_simple_U.nc'),
1212
'V': path.join(path.dirname(__file__), 'OFAM_example_data', 'OFAM_simple_V.nc')}
1313
variables = {'U': 'u', 'V': 'v'}
1414
dimensions = {'lat': 'yu_ocean', 'lon': 'xu_ocean', 'depth': 'st_ocean',
1515
'time': 'Time'}
16-
return FieldSet.from_netcdf(filenames, variables, dimensions, allow_time_extrapolation=True)
17-
18-
19-
def test_ofam_fieldset():
20-
fieldset = set_ofam_fieldset()
21-
assert(fieldset.U.lon.size == 2001)
22-
assert(fieldset.U.lat.size == 601)
23-
assert(fieldset.U.data.shape == (4, 601, 2001))
24-
assert(fieldset.V.lon.size == 2001)
25-
assert(fieldset.V.lat.size == 601)
26-
assert(fieldset.V.data.shape == (4, 601, 2001))
16+
return FieldSet.from_netcdf(filenames, variables, dimensions, allow_time_extrapolation=True, full_load=full_load)
2717

2818

2919
def test_ofam_fieldset_fillvalues():
30-
fieldset = set_ofam_fieldset()
20+
fieldset = set_ofam_fieldset(full_load=True)
3121
# V.data[0, 0, 150] is a landpoint, that makes NetCDF4 generate a masked array, instead of an ndarray
3222
assert(fieldset.V.data[0, 0, 150] == 0)
3323

parcels/examples/parcels_tutorial.ipynb

Lines changed: 857 additions & 959 deletions
Large diffs are not rendered by default.

parcels/examples/tutorial_advancetime.ipynb

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

0 commit comments

Comments
 (0)