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.RigidBodySystemType
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 as system.cache.color. Currently this is used with BoundaryModelDummyParticles during colorfield initialization so fluids using ColorfieldSurfaceNormal can 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".
source

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.RigidContactModelType
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.

Experimental implementation

This is an experimental feature and may change in future releases.

source