jaxdem.bonded_forces.plastic_bending_deformable_particle#
Implementation of the deformable particle model with plastic bending angles.
Classes
|
Deformable particle model with plastic bending angles. |
- class jaxdem.bonded_forces.plastic_bending_deformable_particle.PlasticBendingDeformableParticleModel(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 plastic bending angles.
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 for the reference bending angles.Instead of relaxing each edge rest length (as in
PlasticDeformableParticleModel), the reference bending angle of each adjacency relaxes toward the current bending angle:The update runs once per physical time step, after the integrator drift and before force evaluation.
\[\theta_{a,0}(t+dt) = \theta_{a,0}(t) + (1-e^{-dt/\tau_{s,a}})\operatorname{wrap}(\theta_a(t)-\theta_{a,0}(t))\]where \(\theta_{a,0}\) is the reference (rest) bending angle (
initial_bendings), \(\theta_a\) is the current bending angle, \(\tau_{s,a}\) is the relaxation time (tau_s), and \(dt\) is the simulation time step. The wrapped difference lies in [-pi, pi]. Each update integrates relaxation exactly with the current angle held fixed; infinite tau_s leaves the reference unchanged.Shapes (see
DeformableParticleModelfor definitions of K, M, E, A):tau_s:(A,)— one relaxation time per adjacency (bending hinge).
- tau_s: Array | None#
(A,).
- Type:
Plastic relaxation time for each adjacency (bending hinge). 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 bending angle toward the current bending angle.