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 match
DeformableParticleModel. The model keeps the edge-spring, measure, content, bending, and surface-tension terms. See theDeformableParticleModeldocstring for the full energy definition and shape conventions. The only difference is 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. Uniform rescaling then distributes the change back to the individual edges:\[\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 body, analogous toelements_idfor elements. For a single body withoutedges_id, all edges 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.