Skip to content

Commit e24c631

Browse files
Simplifying spherical grid advection across antimeridian
By not requiring periodicBC kernel anymore
1 parent 7b05ed3 commit e24c631

2 files changed

Lines changed: 6 additions & 7 deletions

File tree

src/parcels/interpolators.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,7 @@ def CGrid_Velocity(
175175
py = np.array([grid.lat[yi, xi], grid.lat[yi, xi + 1], grid.lat[yi + 1, xi + 1], grid.lat[yi + 1, xi]])
176176

177177
if grid._mesh == "spherical":
178-
px[0] = np.where(px[0] < lon - 225, px[0] + 360, px[0])
179-
px[0] = np.where(px[0] > lon + 225, px[0] - 360, px[0])
178+
px = ((px + 180.0) % 360.0) - 180.0
180179
px[1:] = np.where(px[1:] - px[0] > 180, px[1:] - 360, px[1:])
181180
px[1:] = np.where(-px[1:] + px[0] > 180, px[1:] + 360, px[1:])
182181
c1 = i_u._geodetic_distance(
@@ -291,7 +290,10 @@ def CGrid_Velocity(
291290

292291
# check whether the grid conversion has been applied correctly
293292
xx = (1 - xsi) * (1 - eta) * px[0] + xsi * (1 - eta) * px[1] + xsi * eta * px[2] + (1 - xsi) * eta * px[3]
294-
u = np.where(np.abs((xx - lon) / lon) > 1e-4, np.nan, u)
293+
dlon = xx - lon
294+
if grid._mesh == "spherical":
295+
dlon = ((dlon + 180.0) % 360.0) - 180.0
296+
u = np.where(np.abs(dlon / lon) > 1e-4, np.nan, u)
295297

296298
if vectorfield.W:
297299
data = vectorfield.W.data

tests/test_advection.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -463,11 +463,8 @@ def test_nemo_curvilinear_fieldset():
463463
latp = np.linspace(-70, 88, npart)
464464
runtime = np.timedelta64(160, "D")
465465

466-
def periodicBC(particles, fieldset): # pragma: no cover
467-
particles.dlon = np.where(particles.lon + particles.dlon > 180, particles.dlon - 360, particles.dlon)
468-
469466
pset = parcels.ParticleSet(fieldset, lon=lonp, lat=latp)
470-
pset.execute([AdvectionEE, periodicBC], runtime=runtime, dt=np.timedelta64(6, "h"))
467+
pset.execute(AdvectionEE, runtime=runtime, dt=np.timedelta64(6, "h"))
471468
np.testing.assert_allclose(pset.lat, latp, atol=1e-1)
472469

473470

0 commit comments

Comments
 (0)