jaxdem.bonded_forces.plastic_perimeter_deformable_particle#
Implementation of the plastic perimeter deformable particle model.
Classes
Deformable particle model with perimeter-level plasticity. |
- class jaxdem.bonded_forces.plastic_perimeter_deformable_particle.PlasticPerimeterDeformableParticleModel(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, edges_id: Array | None = None, tau_s: Array | None = None)#
Bases:
DeformableParticleModelDeformable particle model with perimeter-level plasticity.
Elastic forces are identical to
DeformableParticleModel(individual edge springs, measure, content, bending, and surface-tension terms are all preserved; see its docstring for the full energy definition and shape conventions). The only difference is in the plastic update rule.Instead of relaxing each edge rest length independently (as in
PlasticDeformableParticleModel), the total reference perimeter of each body relaxes toward the current total perimeter, and the change is distributed back to individual edges by uniform rescaling:\[\begin{split}P_{K,0}^{\text{new}} &= P_{K,0} + \frac{1}{\tau_{s,K}} (P_K - P_{K,0})\,dt \\ L_{e,0}^{\text{new}} &= L_{e,0}\;\frac{P_{K,0}^{\text{new}}}{P_{K,0}} \qquad \forall\, e \in K\end{split}\]where \(P_K = \sum_{e \in K} L_e\) is the current perimeter, \(P_{K,0} = \sum_{e \in K} L_{e,0}\) the reference perimeter, \(\tau_{s,K}\) the per-body relaxation time, and \(dt\) the time step. Uniform rescaling preserves relative edge proportions within each body.
This model requires an
edges_idmapping (shape(E,)) that assigns each edge to its owning body, analogous toelements_idfor elements. When only a single body is present andedges_idis omitted, all edges are assumed to belong to body 0.Shapes (see
DeformableParticleModelfor definitions of K, M, E, A):edges_id:(E,)tau_s:(K,)
- edges_id: Array | None#
(E,).
edges_id[e] == kmeans edgeebelongs to bodyk. Required for perimeter-level plasticity.- Type:
Array of body IDs for each edge. Shape
- tau_s: Array | None#
(K,). Controls how fast the total reference perimeter of each body relaxes toward the current perimeter.
- Type:
Plastic relaxation time for each body. 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, edges_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 body’s reference perimeter toward its current perimeter.