sedtrails.particle_tracer.position_calculator_numba
Numba-optimized ParticlePositionCalculator
This module provides a Numba-accelerated implementation of particle position calculation using a 4-stage Runge-Kutta integration scheme on unstructured grids. It replaces the matplotlib triangulation and multiprocessing approaches with Numba-compatible alternatives.
Dependencies: numpy, numba, scipy (only for initial triangulation)
Module Contents
Functions
Factory function to create a Numba-optimized particle calculator. |
|
Find which triangle contains the point (x, y). |
|
Interpolate field values at given points using barycentric coordinates. |
|
Update particle positions using a 4-stage Runge-Kutta integration scheme. |
|
Parallel version of update_particles_rk4 using Numba’s prange. |
API
- sedtrails.particle_tracer.position_calculator_numba.create_numba_particle_calculator(grid_x, grid_y, triangles=None)
Factory function to create a Numba-optimized particle calculator.
This function preprocesses the grid data and returns optimized Numba functions for particle position calculation.
- grid_x, grid_yarray_like
Coordinates of grid nodes
- trianglesarray_like, optional
Triangle connectivity (node indices). If None, Delaunay triangulation will be computed once (not using Numba).
- dict
Dictionary containing optimized Numba functions
- sedtrails.particle_tracer.position_calculator_numba.find_triangle(x, y, grid_x, grid_y, triangles)
Find which triangle contains the point (x, y).
- x, yfloat
Coordinates of the point
- grid_x, grid_yarray_like
Coordinates of grid nodes
- trianglesarray_like
Triangle connectivity (node indices)
- int
Triangle index or -1 if outside all triangles
- sedtrails.particle_tracer.position_calculator_numba.interpolate_field(field, x_points, y_points, grid_x, grid_y, triangles)
Interpolate field values at given points using barycentric coordinates.
- fieldarray_like
Field values at grid nodes
- x_points, y_pointsarray_like
Coordinates of points where to interpolate
- grid_x, grid_yarray_like
Coordinates of grid nodes
- trianglesarray_like
Triangle connectivity (node indices)
- array_like
Interpolated field values
- sedtrails.particle_tracer.position_calculator_numba.update_particles_rk4(x0, y0, grid_u, grid_v, grid_x, grid_y, triangles, dt, igeo=0)
Update particle positions using a 4-stage Runge-Kutta integration scheme.
- x0, y0array_like
Initial particle positions
- grid_u, grid_varray_like
Velocity components at grid nodes
- grid_x, grid_yarray_like
Coordinates of grid nodes
- trianglesarray_like
Triangle connectivity (node indices)
- dtfloat
Time step
- igeoint, optional
Flag for geographic coordinates adjustment (default: 0)
- tuple
Updated particle positions (x_new, y_new)
- sedtrails.particle_tracer.position_calculator_numba.update_particles_rk4_parallel(x0, y0, grid_u, grid_v, grid_x, grid_y, triangles, dt, igeo=0)
Parallel version of update_particles_rk4 using Numba’s prange.
This function is optimized for large particle sets.
Parameters are the same as update_particles_rk4.