Skip to content

Commit 0c9b1f1

Browse files
reint-fischerreint-fischer
authored andcommitted
include helper function to get positions dictionaries
1 parent fbc64cb commit 0c9b1f1

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

src/parcels/_core/field.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -216,12 +216,7 @@ def eval(self, time: datetime, z, y, x, particles=None, applyConversion=True):
216216
else:
217217
_ei = particles.ei[:, self.igrid]
218218

219-
particle_positions = {"time": time, "z": z, "lat": y, "lon": x}
220-
grid_positions = {}
221-
grid_positions.update(_search_time_index(self, time))
222-
grid_positions.update(self.grid.search(z, y, x, ei=_ei))
223-
_update_particles_ei(particles, grid_positions, self)
224-
_update_particle_states_position(particles, grid_positions)
219+
particle_positions, grid_positions = _get_positions(self, time, z, y, x, particles, _ei)
225220

226221
value = self._interp_method(particle_positions, grid_positions, self)
227222

@@ -302,12 +297,7 @@ def eval(self, time: datetime, z, y, x, particles=None, applyConversion=True):
302297
else:
303298
_ei = particles.ei[:, self.igrid]
304299

305-
particle_positions = {"time": time, "z": z, "lat": y, "lon": x}
306-
grid_positions = {}
307-
grid_positions.update(_search_time_index(self.U, time))
308-
grid_positions.update(self.grid.search(z, y, x, ei=_ei))
309-
_update_particles_ei(particles, grid_positions, self)
310-
_update_particle_states_position(particles, grid_positions)
300+
particle_positions, grid_positions = _get_positions(self.U, time, z, y, x, particles, _ei)
311301

312302
if self._vector_interp_method is None:
313303
u = self.U._interp_method(particle_positions, grid_positions, self.U)
@@ -343,7 +333,7 @@ def __getitem__(self, key):
343333
return _deal_with_errors(error, key, vector_type=self.vector_type)
344334

345335

346-
def _update_particles_ei(particles, grid_positions, field):
336+
def _update_particles_ei(particles, grid_positions: dict, field: Field):
347337
"""Update the element index (ei) of the particles"""
348338
if particles is not None:
349339
if isinstance(field.grid, XGrid):
@@ -363,7 +353,7 @@ def _update_particles_ei(particles, grid_positions, field):
363353
)
364354

365355

366-
def _update_particle_states_position(particles, grid_positions):
356+
def _update_particle_states_position(particles, grid_positions: dict):
367357
"""Update the particle states based on the position dictionary."""
368358
if particles: # TODO also support uxgrid search
369359
for dim in ["X", "Y"]:
@@ -478,3 +468,14 @@ def _assert_same_time_interval(fields: list[Field]) -> None:
478468
raise ValueError(
479469
f"Fields must have the same time domain. {fields[0].name}: {reference_time_interval}, {field.name}: {field.time_interval}"
480470
)
471+
472+
473+
def _get_positions(field: Field, time, z, y, x, particles, _ei) -> tuple[dict, dict]:
474+
"""Initialize and populate particle_positions and grid_positions dictionaries"""
475+
particle_positions = {"time": time, "z": z, "lat": y, "lon": x}
476+
grid_positions = {}
477+
grid_positions.update(_search_time_index(field, time))
478+
grid_positions.update(field.grid.search(z, y, x, ei=_ei))
479+
_update_particles_ei(particles, grid_positions, field)
480+
_update_particle_states_position(particles, grid_positions)
481+
return particle_positions, grid_positions

0 commit comments

Comments
 (0)