jaxdem.bonded_forces.plastic_deformable_particle#

Implementation of the plastic deformable particle model.

Classes

PlasticDeformableParticleModel(elements, ...)

Deformable particle model with per-edge plasticity.

class jaxdem.bonded_forces.plastic_deformable_particle.PlasticDeformableParticleModel(elements: Array | None, edges: Array | None, element_adjacency: Array | None, element_adjacency_edges: Array | None, elements_id: Array | None, initial_body_contents: Array | None, initial_element_measures: Array | None, initial_edge_lengths: Array | None, initial_bendings: Array | None, w_b: Array | None, em: Array | None, ec: Array | None, eb: Array | None, el: Array | None, gamma: Array | None, tau_s: Array | None = None)#

Bases: DeformableParticleModel

Deformable particle model with per-edge plasticity.

Elastic forces, topology, reference configuration, and coefficient broadcasting match DeformableParticleModel. See its docstring for the full energy definition and shape conventions. The only difference is the plastic update rule.

Plasticity:

Each force calculation integrates a spring-dashpot equation for the reference length of each edge:

\[L_{e,0}(t+dt) = L_{e,0}(t) + \frac{1}{\tau_{s,e}} (L_e(t) - L_{e,0}(t)) dt\]

where \(L_{e,0}\) is the initial (reference) edge length (initial_edge_lengths), \(L_e\) is the current edge length, \(\tau_{s,e}\) is the relaxation time (tau_s), and \(dt\) is the simulation time step.

Shapes (see DeformableParticleModel for definitions of K, M, E, A):

  • tau_s: (E,) — one relaxation time per edge.

tau_s: Array | None#

(E,).

Type:

Plastic relaxation time for each edge. Shape

classmethod Create(*, vertices: Array | ndarray | bool | number | bool | int | float | complex | None = None, elements: Array | ndarray | bool | number | bool | int | float | complex | None = None, edges: Array | ndarray | bool | number | bool | int | float | complex | None = None, element_adjacency: Array | ndarray | bool | number | bool | int | float | complex | None = None, element_adjacency_edges: Array | ndarray | bool | number | bool | int | float | complex | None = None, elements_id: Array | ndarray | bool | number | bool | int | float | complex | None = None, initial_body_contents: Array | ndarray | bool | number | bool | int | float | complex | None = None, initial_element_measures: Array | ndarray | bool | number | bool | int | float | complex | None = None, initial_edge_lengths: Array | ndarray | bool | number | bool | int | float | complex | None = None, initial_bendings: Array | ndarray | bool | number | bool | int | float | complex | None = None, em: Array | ndarray | bool | number | bool | int | float | complex | None = None, ec: Array | ndarray | bool | number | bool | int | float | complex | None = None, eb: Array | ndarray | bool | number | bool | int | float | complex | None = None, el: Array | ndarray | bool | number | bool | int | float | complex | None = None, gamma: Array | ndarray | bool | number | bool | int | float | complex | None = None, tau_s: Array | ndarray | bool | number | bool | int | float | complex | None = None, w_b: Array | ndarray | bool | number | bool | int | float | complex | None = None) Self[source]#
update_reference_state(pos: jax.Array, state: State, system: System) DeformableParticleModel[source]#

Relax each reference edge length toward the current edge length.