NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble::PenaltyContactEnforcement Struct Reference

#include <nimble_contact_manager.h>

Public Member Functions

 PenaltyContactEnforcement ()
 
template<typename VecType>
NIMBLE_INLINE_FUNCTION void EnforceContact (const ContactEntity &node, ContactEntity &face, const double gap, const double normal[3], const double barycentric_coordinates[3], VecType &full_contact_force) const
 

Public Attributes

double penalty
 

Constructor & Destructor Documentation

◆ PenaltyContactEnforcement()

nimble::PenaltyContactEnforcement::PenaltyContactEnforcement ( )
inline
92: penalty(0.0) {}
double penalty
Definition nimble_contact_manager.h:130

Member Function Documentation

◆ EnforceContact()

template<typename VecType>
NIMBLE_INLINE_FUNCTION void nimble::PenaltyContactEnforcement::EnforceContact ( const ContactEntity & node,
ContactEntity & face,
const double gap,
const double normal[3],
const double barycentric_coordinates[3],
VecType & full_contact_force ) const
inline
103 {
104 constexpr int dim_vec = 3;
105 double contact_force[dim_vec]{};
106 details::getContactForce(penalty, gap, normal, contact_force);
107 //
108 //--- Create a local dummy copy of 'face' to avoid "critical" section
109 //
110 ContactEntity tmp_face;
111 tmp_face.entity_type_ = face.entity_type_;
112 tmp_face.node_id_for_node_1_ = face.node_id_for_node_1_;
113 tmp_face.node_id_for_node_2_ = face.node_id_for_node_2_;
114 tmp_face.node_id_1_for_fictitious_node_ = face.node_id_1_for_fictitious_node_;
115 tmp_face.node_id_2_for_fictitious_node_ = face.node_id_2_for_fictitious_node_;
116 tmp_face.node_id_3_for_fictitious_node_ = face.node_id_3_for_fictitious_node_;
117 tmp_face.node_id_4_for_fictitious_node_ = face.node_id_4_for_fictitious_node_;
118 tmp_face.SetNodalContactForces(contact_force, barycentric_coordinates);
119 tmp_face.ScatterForceToContactManagerForceVector<VecType>(full_contact_force);
120 //
121 //--- Create a local dummy copy of 'node' to avoid "critical" section
122 //
123 ContactEntity tmp_node;
124 tmp_node.entity_type_ = ContactEntity::NODE;
125 tmp_node.node_id_for_node_1_ = node.node_id_for_node_1_;
126 tmp_node.SetNodalContactForces(contact_force);
127 tmp_node.ScatterForceToContactManagerForceVector<VecType>(full_contact_force);
128 }
@ NODE
Definition nimble_contact_entity.h:121
void getContactForce(const double penalty, const double gap, const double normal[3], double contact_force[3])
Definition nimble_contact_manager.h:82

Member Data Documentation

◆ penalty

double nimble::PenaltyContactEnforcement::penalty

The documentation for this struct was generated from the following file: