jaxdem.integrators.vicsek#

Vicsek-style integrators (extrinsic and intrinsic noise).

Classes

VicsekExtrinsic(neighbor_radius, eta, v0, ...)

Vicsek-model integrator with extrinsic (vectorial) noise.

VicsekIntrinsic(neighbor_radius, eta, v0, ...)

Vicsek-model integrator with intrinsic noise.

class jaxdem.integrators.vicsek.VicsekExtrinsic(neighbor_radius: Array, eta: Array, v0: Array, max_neighbors: int)#

Bases: LinearIntegrator

Vicsek-model integrator with extrinsic (vectorial) noise.

Each step, the integrator sets the translational velocity magnitude to v0. The direction comes from a vector that combines:

  • the current accumulated force vector (from colliders + force functions),

  • the average neighbor velocity direction (including self),

  • an additive random unit vector scaled by eta (extrinsic noise).

Notes

  • The integrator draws the noise per clump (one sample per rigid body) and broadcasts it to all clump members, so clumps move coherently.

  • A collider may cache the neighbor list (e.g., NeighborList collider) or sort the state (e.g., some cell-list builders). This integrator uses the returned state from create_neighbor_list for consistency.

neighbor_radius: Array#
eta: Array#
v0: Array#
max_neighbors: int#
static step_after_force(state: State, system: System) tuple[State, System][source]#
class jaxdem.integrators.vicsek.VicsekIntrinsic(neighbor_radius: Array, eta: Array, v0: Array, max_neighbors: int)#

Bases: LinearIntegrator

Vicsek-model integrator with intrinsic noise.

This variant perturbs the direction of the desired motion. It applies a random rotation to the normalized base direction. It does not add a random vector in force space as the extrinsic (vectorial-noise) variant does.

The base direction comes from: - the current accumulated force vector (from colliders + force functions), - the average neighbor velocity direction (including self).

The integrator then applies the noise per clump and broadcasts it to all clump members, so clumps move coherently.

neighbor_radius: Array#
eta: Array#
v0: Array#
max_neighbors: int#
static step_after_force(state: State, system: System) tuple[State, System][source]#