Description
Contact element of triangular type.
Used to 'tessellate' the surface of FEA meshes for collision purposes.
#include <ChContactSurfaceMesh.h>


Public Member Functions | |
ChContactTriangleXYZ (std::shared_ptr< ChNodeFEAxyz > node1, std::shared_ptr< ChNodeFEAxyz > node2, std::shared_ptr< ChNodeFEAxyz > node3, ChContactSurface *container=nullptr) | |
ChContactTriangleXYZ (const std::array< std::shared_ptr< ChNodeFEAxyz >, 3 > &nodes, ChContactSurface *container=nullptr) | |
void | SetNodes (const std::array< std::shared_ptr< ChNodeFEAxyz >, 3 > &nodes) |
Set the FEA nodes for which this is a proxy. | |
void | SetContactSurface (ChContactSurface *container) |
Set the contact surface container. | |
void | SetNodeOwnership (const ChVector3b &owns_node) |
Set node ownership. | |
void | SetEdgeOwnership (const ChVector3b &owns_edge) |
Set edge ownership. | |
std::shared_ptr< ChNodeFEAxyz > | GetNode (int i) const |
Acccess the specified FEA node for which this is a proxy. | |
const ChVector3d & | GetPos1 () const |
Get the current position of first node. | |
const ChVector3d & | GetPos2 () const |
Get the current position of second node. | |
const ChVector3d & | GetPos3 () const |
Get the current position of third node. | |
ChContactSurface * | GetContactSurface () const |
Get the contact surface container. | |
bool | OwnsNode (int i) const |
Returns true if the specified node is owned by this triangle. | |
bool | OwnsEdge (int i) const |
Returns true if the specified edge is owned by this triangle. | |
virtual ChContactable::Type | GetContactableType () const override |
Return the proper contactable Type. More... | |
virtual ChConstraintTuple * | CreateConstraintTuple () override |
Create a constraint tuple with the appropriate number of variables for this contactable object. More... | |
virtual bool | IsContactActive () override |
Tell if the object must be considered in collision detection. | |
virtual int | GetContactableNumCoordsPosLevel () override |
Get the number of DOFs affected by this object (position part). | |
virtual int | GetContactableNumCoordsVelLevel () override |
Get the number of DOFs affected by this object (speed part). | |
virtual void | ContactableGetStateBlockPosLevel (ChState &x) override |
Get all the DOFs packed in a single vector (position part). | |
virtual void | ContactableGetStateBlockVelLevel (ChStateDelta &w) override |
Get all the DOFs packed in a single vector (speed part). | |
virtual void | ContactableIncrementState (const ChState &x, const ChStateDelta &dw, ChState &x_new) override |
Increment the provided state of this object by the given state-delta increment. More... | |
virtual ChVector3d | GetContactPoint (const ChVector3d &loc_point, const ChState &state_x) override |
Express the local point in absolute frame, for the given state position. | |
virtual ChVector3d | GetContactPointSpeed (const ChVector3d &loc_point, const ChState &state_x, const ChStateDelta &state_w) override |
Get the absolute speed of a local point attached to the contactable. More... | |
virtual ChVector3d | GetContactPointSpeed (const ChVector3d &abs_point) override |
Get the absolute speed of point abs_point if attached to the surface. | |
virtual ChFrame | GetCollisionModelFrame () override |
Return the frame of the associated collision model relative to the contactable object. | |
virtual void | ContactForceLoadResidual_F (const ChVector3d &F, const ChVector3d &T, const ChVector3d &abs_point, ChVectorDynamic<> &R) override |
Apply the force & torque, expressed in absolute reference, applied in pos, to the coordinates of the variables. More... | |
virtual void | ContactComputeQ (const ChVector3d &F, const ChVector3d &T, const ChVector3d &point, const ChState &state_x, ChVectorDynamic<> &Q, int offset) override |
Compute a contiguous vector of generalized forces Q from a given force & torque at the given point. More... | |
virtual void | ComputeJacobianForContactPart (const ChVector3d &abs_point, ChMatrix33<> &contact_plane, ChConstraintTuple *jacobian_tuple_N, ChConstraintTuple *jacobian_tuple_U, ChConstraintTuple *jacobian_tuple_V, bool second) override |
Compute the jacobian(s) part(s) for this contactable item. More... | |
virtual double | GetContactableMass () override |
Return mass of contactable object. | |
virtual ChPhysicsItem * | GetPhysicsItem () override |
This is only for backward compatibility. | |
virtual unsigned int | GetLoadableNumCoordsPosLevel () override |
Gets the number of DOFs affected by this element (position part). | |
virtual unsigned int | GetLoadableNumCoordsVelLevel () override |
Gets the number of DOFs affected by this element (velocity part). | |
virtual void | LoadableGetStateBlockPosLevel (int block_offset, ChState &mD) override |
Gets all the DOFs packed in a single vector (position part). | |
virtual void | LoadableGetStateBlockVelLevel (int block_offset, ChStateDelta &mD) override |
Gets all the DOFs packed in a single vector (velocity part). | |
virtual void | LoadableStateIncrement (const unsigned int off_x, ChState &x_new, const ChState &x, const unsigned int off_v, const ChStateDelta &Dv) override |
Increment all DOFs using a delta. | |
virtual unsigned int | GetNumFieldCoords () override |
Number of coordinates in the interpolated field, ex=3 for a tetrahedron finite element or a cable, = 1 for a thermal problem, etc. | |
virtual unsigned int | GetNumSubBlocks () override |
Get the number of DOFs sub-blocks. | |
virtual unsigned int | GetSubBlockOffset (unsigned int nblock) override |
Get the offset of the specified sub-block of DOFs in global vector. | |
virtual unsigned int | GetSubBlockSize (unsigned int nblock) override |
Get the size of the specified sub-block of DOFs in global vector. | |
virtual void | LoadableGetVariables (std::vector< ChVariables * > &mvars) override |
Get the pointers to the contained ChVariables, appending to the mvars vector. | |
virtual bool | IsSubBlockActive (unsigned int nblock) const override |
Check if the specified sub-block of DOFs is active. | |
virtual void | ComputeNF (const double U, const double V, ChVectorDynamic<> &Qi, double &detJ, const ChVectorDynamic<> &F, ChVectorDynamic<> *state_x, ChVectorDynamic<> *state_w) override |
Evaluate N'*F , where N is some type of shape function evaluated at U,V coordinates of the surface, each ranging in 0..+1 (as IsTriangleIntegrationNeeded() is true) F is a load, N'*F is the resulting generalized load Returns also det[J] with J=[dx/du,..], that might be useful in gauss quadrature. More... | |
virtual ChVector3d | ComputeNormal (const double U, const double V) override |
Gets the normal to the surface at the parametric coordinate U,V. More... | |
virtual bool | IsTriangleIntegrationNeeded () override |
If true, use quadrature over u,v in [0..1] range as triangle volumetric coords. | |
void | ComputeUVfromP (const ChVector3d &P, double &u, double &v) |
Compute u,v of given point with respect to the triangle. More... | |
![]() | |
void | AddCollisionModel (std::shared_ptr< ChCollisionModel > model) |
Add the collision model. | |
void | AddCollisionShape (std::shared_ptr< ChCollisionShape > shape, const ChFrame<> &frame=ChFrame<>()) |
Add a collision shape. More... | |
std::shared_ptr< ChCollisionModel > | GetCollisionModel () const |
Access the collision model. | |
void | SetUserData (const std::shared_ptr< void > &data) |
Set user-data associated with this contactable. | |
bool | HasData () const |
Check if this contactable has associated user-data. | |
template<typename T > | |
std::shared_ptr< T > | GetUserData () const |
Get the user-data using static cast to a known type. | |
virtual void | ComputeJacobianForRollingContactPart (const ChVector3d &abs_point, ChMatrix33<> &contact_plane, ChConstraintTuple *jacobian_tuple_N, ChConstraintTuple *jacobian_tuple_U, ChConstraintTuple *jacobian_tuple_V, bool second) |
Compute the rolling Jacobian part(s) for this contactable item. More... | |
void | ArchiveOut (ChArchiveOut &archive_out) |
Method to allow serialization of transient data to archives. | |
void | ArchiveIn (ChArchiveIn &archive_in) |
Method to allow deserialization of transient data from archives. | |
Additional Inherited Members | |
![]() | |
enum | Type { Type::UNKNOWN, Type::ONE_1, Type::ONE_2, Type::ONE_3, Type::ONE_4, Type::ONE_5, Type::ONE_6, Type::TWO_33, Type::TWO_66, Type::THREE_333, Type::THREE_666 } |
Contactable type (based on number of variables objects and their DOFs). More... | |
![]() | |
std::shared_ptr< ChCollisionModel > | collision_model |
collision model for the contactable object | |
std::vector< ChVariables * > | m_contactable_variables |
variables associated with the contactable object | |
std::shared_ptr< void > | m_data |
arbitrary user-data | |
Member Function Documentation
◆ ComputeJacobianForContactPart()
|
overridevirtual |
Compute the jacobian(s) part(s) for this contactable item.
For example, if the contactable is a ChBody, this should update the corresponding 1x6 jacobian.
Implements chrono::ChContactable.
◆ ComputeNF()
|
overridevirtual |
Evaluate N'*F , where N is some type of shape function evaluated at U,V coordinates of the surface, each ranging in 0..+1 (as IsTriangleIntegrationNeeded() is true) F is a load, N'*F is the resulting generalized load Returns also det[J] with J=[dx/du,..], that might be useful in gauss quadrature.
- Parameters
-
U parametric coordinate in surface V parametric coordinate in surface Qi Return result of Q = N'*F here detJ Return det[J] here F Input F vector, size is =n. field coords. state_x if != 0, update state (pos. part) to this, then evaluate Q state_w if != 0, update state (speed part) to this, then evaluate Q
Implements chrono::ChLoadableUV.
◆ ComputeNormal()
|
overridevirtual |
Gets the normal to the surface at the parametric coordinate U,V.
Each coordinate ranging in -1..+1.
Implements chrono::ChLoadableUV.
◆ ComputeUVfromP()
void chrono::fea::ChContactTriangleXYZ::ComputeUVfromP | ( | const ChVector3d & | P, |
double & | u, | ||
double & | v | ||
) |
Compute u,v of given point with respect to the triangle.
(u,v) represent barycentric coordinates of the point projection onto the segment, with u in the node1->node2 direction and v in the node1->node3 direction.
◆ ContactableIncrementState()
|
overridevirtual |
Increment the provided state of this object by the given state-delta increment.
Compute: x_new = x + dw.
Implements chrono::ChContactable.
◆ ContactComputeQ()
|
overridevirtual |
Compute a contiguous vector of generalized forces Q from a given force & torque at the given point.
Used for computing stiffness matrix (square force jacobian) by backward differentiation. The force and its application point are specified in the global frame. Each object must set the entries in Q corresponding to its variables, starting at the specified offset. If needed, the object states must be extracted from the provided state position.
Implements chrono::ChContactable.
◆ ContactForceLoadResidual_F()
|
overridevirtual |
Apply the force & torque, expressed in absolute reference, applied in pos, to the coordinates of the variables.
Force for example could come from a penalty model.
Implements chrono::ChContactable.
◆ CreateConstraintTuple()
|
inlineoverridevirtual |
Create a constraint tuple with the appropriate number of variables for this contactable object.
Required for NSC contact formulation.
Implements chrono::ChContactable.
◆ GetContactableType()
|
inlineoverridevirtual |
Return the proper contactable Type.
Used for the collision dispatcher in ChContactContainer classes.
Implements chrono::ChContactable.
◆ GetContactPointSpeed()
|
overridevirtual |
Get the absolute speed of a local point attached to the contactable.
The given point is assumed to be expressed in the local frame of this object. This function must use the provided states.
Implements chrono::ChContactable.
The documentation for this class was generated from the following files:
- /builds/uwsbel/chrono/src/chrono/fea/ChContactSurfaceMesh.h
- /builds/uwsbel/chrono/src/chrono/fea/ChContactSurfaceMesh.cpp