Rigid Bodies
Rigid bodies in TrixiParticles.jl are represented by particles whose motion is evolved with rigid-body translation and rotation. This allows fluid-structure interaction while keeping the structure kinematics rigid.
API
TrixiParticles.RigidBodySystem — Type
RigidBodySystem(initial_condition;
boundary_model=nothing,
contact_model=nothing,
acceleration=ntuple(_ -> 0.0, ndims(initial_condition)),
particle_spacing=initial_condition.particle_spacing,
max_manifolds=8,
source_terms=nothing, adhesion_coefficient=0.0,
color_value=0)System for particles of a rigid structure.
The rigid body is represented by particles and advanced with rigid-body translation and rotation. Fluid-structure interaction forces are reduced to resultant force and torque and applied consistently to all rigid particles.
Arguments
initial_condition: Initial condition representing the rigid particles.
Keywords
boundary_model: Boundary model for fluid-structure interaction (see Boundary Models).contact_model: Optional rigid contact model. If specified, rigid-wall and rigid-rigid collisions are enabled.acceleration: Global acceleration vector applied to all rigid particles.particle_spacing: Reference particle spacing used for time-step estimation.max_manifolds: Maximum number of wall-contact manifolds cached per rigid particle.source_terms: Optional source terms of the form(coords, velocity, density, pressure, t) -> source.adhesion_coefficient: Wall-adhesion strength used by Akinci-type surface tension models when fluids interact with this rigid body. This is only evaluated for fluid-structure interaction with surface-tension-enabled fluid systems.color_value: Integer label stored assystem.cache.color. Currently this is used withBoundaryModelDummyParticlesduring colorfield initialization so fluids usingColorfieldSurfaceNormalcan detect contact with rigid bodies, it participates in the multi-system color sanity check for surface-tension setups, and it is written to VTK output as"color".
Contact Models
Rigid contact is configured through the contact model. This is separate from the boundary model used for fluid-structure interaction; see Boundary Models for that part of the rigid-body setup.
RigidContactModel currently defines a normal spring-dashpot contact law with the parameters normal_stiffness, normal_damping, and contact_distance.
The current implementation uses the same model for rigid-wall and rigid-rigid contact:
- rigid-wall contact groups penetrating wall neighbors into a small number of contact manifolds per rigid particle and applies one normal contact force per manifold,
- rigid-rigid contact evaluates direct pairwise normal contact forces between rigid particles,
- and both paths are currently normal-only, i.e. there are no tangential/frictional forces or contact-history terms yet.
Here, a contact manifold is a discrete approximation of one locally smooth contact patch. A rigid particle touching a flat wall will usually produce one manifold, while corners or edges can produce several.
The number of cached rigid-wall manifolds per rigid particle is controlled by the RigidBodySystem(...; max_manifolds=8) keyword argument. If more wall-contact patches are detected than cached manifold slots are available, the implementation falls back to the best-matching existing manifold for that particle.
contact_distance defines when contact starts. If contact_distance == 0, the particle spacing of the RigidBodySystem is used.
If no contact_model is specified for a rigid body, rigid-wall and rigid-rigid contact for that system are disabled.
For output and postprocessing, rigid bodies also expose the diagnostics contact_count and max_contact_penetration. They are available through rigid-body system data and VTK output.
TrixiParticles.RigidContactModel — Type
RigidContactModel(; normal_stiffness,
normal_damping=0.0,
contact_distance=0.0)Shared rigid-contact model used by the active rigid-wall and rigid-rigid contact paths. The current contact force consists of a linear normal spring-dashpot contribution only. If contact_distance == 0, the particle spacing of the RigidBodySystem will be used as contact distance.