|
dynLattice
|
Model for rod-to-rod contact interactions using penalty methods. More...
#include "RodContactModel.h"


Public Member Functions | |
| RodContactModel (const String &name, const Properties &conf, const Properties &props, const Properties &globdat) | |
| Constructor. | |
| virtual bool | takeAction (const String &action, const Properties ¶ms, const Properties &globdat) override |
| Handle model actions. | |
Static Public Member Functions | |
| static Ref< Model > | makeNew (const String &name, const Properties &conf, const Properties &props, const Properties &globdat) |
| Create new RodContactModel instance. | |
| static void | declare () |
| Declare model type to factory. | |
Static Public Attributes | |
Property identifiers | |
| static const char * | TYPE_NAME = "RodContact" |
| Model type name. | |
| static const char * | PENALTY_PROP = "penalty" |
| General penalty property. | |
| static const char * | PENALTY_STS_PROP = "penaltySTS" |
| Segment-to-segment penalty property. | |
| static const char * | PENALTY_NTS_PROP = "penaltyNTS" |
| Node-to-segment penalty property. | |
| static const char * | RADIUS_PROP = "radius" |
| Rod radius property. | |
| static const char * | VERBOSE_PROP = "verbose" |
| Verbose output property. | |
Protected Member Functions | |
| virtual void | findContacts_ (IdxVector &elementsA, IdxVector &elementsB, const Vector &disp) const |
| Find pairs of contacts. | |
| void | getElementBoxes_ (Matrix &elemBoxMin, Matrix &elemBoxMax, const Vector &disp) const |
| Compute the bounding box of every rod element in the current configuration. | |
| virtual void | findPossibleBeams_ (IdxVector &beamsA, IdxVector &beamsB, const Matrix &elemBoxMin, const Matrix &elemBoxMax) const |
| Find beams of possible contact pairs. | |
| virtual void | findPossibleElements_ (IdxVector &elemsA, IdxVector &elemsB, const idx_t &beamA, const idx_t &beamB, const Matrix &elemBoxMin, const Matrix &elemBoxMax) const |
| Get the contacting point between two beams in possible contact. | |
| virtual void | computeContacts_ (MatrixBuilder &mbld, const Vector &fint, const IdxVector &elementsA, const IdxVector &elementsB, const Vector &disp) |
| Compute the effects of the contact. | |
| virtual void | computeBlacklist_ (const IdxVector &elementsA, const IdxVector &elementsB, const Vector &disp) |
| Build the list of nodes initially in contact. | |
| virtual bool | filterBlacklist_ (const idx_t elementsA, const idx_t elementsB) const |
| Check whether a contact is on the blacklist. | |
| virtual void | findClosestPoints_ (double &uA, double &uB, const Matrix &possA, const Matrix &possB) const |
| Find the local coordinates of the closest points on two beams. | |
| virtual double | getClosestPoint_ (const Vector &posS, const Matrix &possM) const |
| Get the closest coordinate on the main element to the secondary point. | |
| virtual bool | computeSTS_ (Vector &f_contrib, Matrix &k_contrib, const Matrix &possA, const Matrix &possB, const double uA, const double uB) const |
| Compute the force and stiffness contributions of a segment-to-segment contact. | |
| virtual bool | computeNTS_ (Vector &f_contrib, Matrix &k_contrib, const Vector &possS, const Matrix &possM, const double uM) const |
| Compute the force and stiffness contributions of a node-to-segment contact. | |
| bool | nodeInRod_ (const idx_t inode, const idx_t iRod) const |
| Whether a node belongs to a rod (see nodeRods_) | |
| void | updNodeDofs_ () const |
| Fill the cache of translational dof indices of the rod nodes (see nodeDofs_) | |
| void | invalidateNodeDofs_ () |
| Mark the cached dof indices as outdated (connected to the DofSpace events) | |
The RodContactModel implements contact mechanics between rod elements using penalty-based formulations. It supports both segment-to-segment and node-to-segment contact types with automatic contact detection, blacklist filtering, and configurable penalty parameters.
Features:
|
explicit |
| [in] | name | Model name |
| [out] | conf | Actually used configuration properties (output) |
| [in] | props | User-specified model properties |
| [in] | globdat | Global data container |
|
protectedvirtual |
| [in] | elementsA | Element indices A |
| [in] | elementsB | Element indices B |
| [in] | disp | Displacement vector |
|
protectedvirtual |
| [in,out] | mbld | Stiffness matrix builder, updated with contact contributions |
| [in,out] | fint | Internal force vector, updated with contact contributions |
| [in] | elementsA | Element indices of one side of the contact |
| [in] | elementsB | Element indices of the other side |
| [in] | disp | Displacement vector of all elements |
|
protectedvirtual |
| [out] | f_contrib | Force contribution |
| [out] | k_contrib | Stiffness contribution |
| [in] | possS | Position of the secondary node |
| [in] | possM | Positions of the main beam |
| [in] | uM | Local coordinate of the main beam |
|
protectedvirtual |
| [out] | f_contrib | Force contribution |
| [out] | k_contrib | Stiffness contribution |
| [in] | possA | Positions of Beam A |
| [in] | possB | Positions of Beam B |
| [in] | uA | Local coordinate Beam A |
| [in] | uB | Local coordinate Beam B |
|
static |
|
protectedvirtual |
| [in] | elementsA | Element index A |
| [in] | elementsB | Element index B |
|
protectedvirtual |
| [out] | uA | Local coordinate Beam A |
| [out] | uB | Local coordinate Beam B |
| [in] | possA | Positions Beam A |
| [in] | possB | Positions Beam B |
|
protectedvirtual |
| [out] | elementsA | Element indices of one side of the contact |
| [out] | elementsB | Element indices of the other side |
| [in] | disp | Displacement vector of all elements |
|
protectedvirtual |
The box of a rod is the union of the boxes of its elements.
| [out] | beamsA | Indices of the beams in contact |
| [out] | beamsB | Indices of corresponding beams |
| [in] | elemBoxMin | Lower element box corners (see getElementBoxes_) |
| [in] | elemBoxMax | Upper element box corners (see getElementBoxes_) |
|
protectedvirtual |
| [out] | elemsA | Element index of one side of the contact |
| [out] | elemsB | Corresponding element index on the other side |
| [in] | beamA | Possible beam on side A |
| [in] | beamB | Possible beam on side B |
| [in] | elemBoxMin | Lower element box corners (see getElementBoxes_) |
| [in] | elemBoxMax | Upper element box corners (see getElementBoxes_) |
|
protectedvirtual |
| [in] | posS | Secondary point |
| [in] | possM | Main element positions |
|
protected |
Each box encloses the displaced element nodes and is widened by the contact radius. Computed once per contact search, so that the element-level search of every rod pair only compares boxes.
| [out] | elemBoxMin | Lower box corners (globalRank x element count), column = element index |
| [out] | elemBoxMax | Upper box corners (globalRank x element count), column = element index |
| [in] | disp | Displacement vector of all elements |
|
protected |
|
static |
| [in] | name | Model name |
| [out] | conf | Actually used configuration properties (output) |
| [in] | props | User-specified model properties |
| [in] | globdat | Global data container |
|
protected |
| [in] | inode | Node index |
| [in] | iRod | Rod index |
|
overridevirtual |
| [in] | action | Action name |
| [in] | params | Action parameters |
| [in] | globdat | Global data container |
|
protected |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |