jaxdem.bonded_forces.plastic_deformable_particle#
Implementation of the plastic deformable particle model.
Classes
|
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, vertex_count: int = 0, tau_s: Array | None = None)#
Bases:
DeformableParticleModelDeformable 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. Each update integrates the linear relaxation exactly with the current geometry held fixed. Positive rest lengths do not overshoot; infinite tau_s leaves the reference unchanged.Plasticity:
Once per physical time step, after the integrator drift and before force evaluation, the model integrates a spring-dashpot equation for the reference length of each edge:
\[L_{e,0}(t+dt) = L_e(t) + (L_{e,0}(t)-L_e(t)) e^{-dt/\tau_{s,e}}\]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
DeformableParticleModelfor 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, vertex_count: int | 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.