dynLattice
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
RodContactModel Class Reference

Model for rod-to-rod contact interactions using penalty methods. More...

#include "RodContactModel.h"

Inheritance diagram for RodContactModel:
Inheritance graph
[legend]
Collaboration diagram for RodContactModel:
Collaboration graph
[legend]

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 &params, 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)
 

Detailed Description

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:

Constructor & Destructor Documentation

◆ RodContactModel()

RodContactModel::RodContactModel ( const String &  name,
const Properties &  conf,
const Properties &  props,
const Properties &  globdat 
)
explicit
Parameters
[in]nameModel name
[out]confActually used configuration properties (output)
[in]propsUser-specified model properties
[in]globdatGlobal data container

Member Function Documentation

◆ computeBlacklist_()

void RodContactModel::computeBlacklist_ ( const IdxVector &  elementsA,
const IdxVector &  elementsB,
const Vector &  disp 
)
protectedvirtual
Parameters
[in]elementsAElement indices A
[in]elementsBElement indices B
[in]dispDisplacement vector

◆ computeContacts_()

void RodContactModel::computeContacts_ ( MatrixBuilder &  mbld,
const Vector &  fint,
const IdxVector &  elementsA,
const IdxVector &  elementsB,
const Vector &  disp 
)
protectedvirtual
Parameters
[in,out]mbldStiffness matrix builder, updated with contact contributions
[in,out]fintInternal force vector, updated with contact contributions
[in]elementsAElement indices of one side of the contact
[in]elementsBElement indices of the other side
[in]dispDisplacement vector of all elements

◆ computeNTS_()

bool RodContactModel::computeNTS_ ( Vector &  f_contrib,
Matrix &  k_contrib,
const Vector &  possS,
const Matrix &  possM,
const double  uM 
) const
protectedvirtual
Parameters
[out]f_contribForce contribution
[out]k_contribStiffness contribution
[in]possSPosition of the secondary node
[in]possMPositions of the main beam
[in]uMLocal coordinate of the main beam
Returns
true if contact is active
See also
Wriggers, Simo (1985)

◆ computeSTS_()

bool RodContactModel::computeSTS_ ( Vector &  f_contrib,
Matrix &  k_contrib,
const Matrix &  possA,
const Matrix &  possB,
const double  uA,
const double  uB 
) const
protectedvirtual
Parameters
[out]f_contribForce contribution
[out]k_contribStiffness contribution
[in]possAPositions of Beam A
[in]possBPositions of Beam B
[in]uALocal coordinate Beam A
[in]uBLocal coordinate Beam B
Returns
true if contact is active
See also
Wriggers, Zavarise (1999)

◆ declare()

void RodContactModel::declare ( )
static

◆ filterBlacklist_()

bool RodContactModel::filterBlacklist_ ( const idx_t  elementsA,
const idx_t  elementsB 
) const
protectedvirtual
Parameters
[in]elementsAElement index A
[in]elementsBElement index B
Returns
true if the contact is on the blacklist

◆ findClosestPoints_()

void RodContactModel::findClosestPoints_ ( double &  uA,
double &  uB,
const Matrix &  possA,
const Matrix &  possB 
) const
protectedvirtual
Parameters
[out]uALocal coordinate Beam A
[out]uBLocal coordinate Beam B
[in]possAPositions Beam A
[in]possBPositions Beam B

◆ findContacts_()

void RodContactModel::findContacts_ ( IdxVector &  elementsA,
IdxVector &  elementsB,
const Vector &  disp 
) const
protectedvirtual
Parameters
[out]elementsAElement indices of one side of the contact
[out]elementsBElement indices of the other side
[in]dispDisplacement vector of all elements

◆ findPossibleBeams_()

void RodContactModel::findPossibleBeams_ ( IdxVector &  beamsA,
IdxVector &  beamsB,
const Matrix &  elemBoxMin,
const Matrix &  elemBoxMax 
) const
protectedvirtual

The box of a rod is the union of the boxes of its elements.

Parameters
[out]beamsAIndices of the beams in contact
[out]beamsBIndices of corresponding beams
[in]elemBoxMinLower element box corners (see getElementBoxes_)
[in]elemBoxMaxUpper element box corners (see getElementBoxes_)

◆ findPossibleElements_()

void RodContactModel::findPossibleElements_ ( IdxVector &  elemsA,
IdxVector &  elemsB,
const idx_t &  beamA,
const idx_t &  beamB,
const Matrix &  elemBoxMin,
const Matrix &  elemBoxMax 
) const
protectedvirtual
Parameters
[out]elemsAElement index of one side of the contact
[out]elemsBCorresponding element index on the other side
[in]beamAPossible beam on side A
[in]beamBPossible beam on side B
[in]elemBoxMinLower element box corners (see getElementBoxes_)
[in]elemBoxMaxUpper element box corners (see getElementBoxes_)

◆ getClosestPoint_()

double RodContactModel::getClosestPoint_ ( const Vector &  posS,
const Matrix &  possM 
) const
protectedvirtual
Parameters
[in]posSSecondary point
[in]possMMain element positions
Returns
Coordinate on the main element

◆ getElementBoxes_()

void RodContactModel::getElementBoxes_ ( Matrix &  elemBoxMin,
Matrix &  elemBoxMax,
const Vector &  disp 
) const
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.

Parameters
[out]elemBoxMinLower box corners (globalRank x element count), column = element index
[out]elemBoxMaxUpper box corners (globalRank x element count), column = element index
[in]dispDisplacement vector of all elements

◆ invalidateNodeDofs_()

void RodContactModel::invalidateNodeDofs_ ( )
protected

◆ makeNew()

Ref< Model > RodContactModel::makeNew ( const String &  name,
const Properties &  conf,
const Properties &  props,
const Properties &  globdat 
)
static
Parameters
[in]nameModel name
[out]confActually used configuration properties (output)
[in]propsUser-specified model properties
[in]globdatGlobal data container
Returns
New model instance

◆ nodeInRod_()

bool RodContactModel::nodeInRod_ ( const idx_t  inode,
const idx_t  iRod 
) const
protected
Parameters
[in]inodeNode index
[in]iRodRod index

◆ takeAction()

bool RodContactModel::takeAction ( const String &  action,
const Properties &  params,
const Properties &  globdat 
)
overridevirtual
Parameters
[in]actionAction name
[in]paramsAction parameters
[in]globdatGlobal data container
Returns
true if action was handled

◆ updNodeDofs_()

void RodContactModel::updNodeDofs_ ( ) const
protected

Member Data Documentation

◆ PENALTY_NTS_PROP

const char * RodContactModel::PENALTY_NTS_PROP = "penaltyNTS"
static

◆ PENALTY_PROP

const char * RodContactModel::PENALTY_PROP = "penalty"
static

◆ PENALTY_STS_PROP

const char * RodContactModel::PENALTY_STS_PROP = "penaltySTS"
static

◆ RADIUS_PROP

const char * RodContactModel::RADIUS_PROP = "radius"
static

◆ TYPE_NAME

const char * RodContactModel::TYPE_NAME = "RodContact"
static

◆ VERBOSE_PROP

const char * RodContactModel::VERBOSE_PROP = "verbose"
static