chrono::fea::ChContactTriangleXYZRot Class Reference

Description

Contact element of triangular type - version for triangles where the nodes are of ChNodeFEAxyzrot type.

Used to 'tessellate' a generic surface like the outer of tetrahedral meshes.

#include <ChContactSurfaceMesh.h>

Inheritance diagram for chrono::fea::ChContactTriangleXYZRot:
Collaboration diagram for chrono::fea::ChContactTriangleXYZRot:

Public Member Functions

 ChContactTriangleXYZRot (const std::array< std::shared_ptr< ChNodeFEAxyzrot >, 3 > &nodes, ChContactSurface *container=nullptr)
 
void SetNodes (const std::array< std::shared_ptr< ChNodeFEAxyzrot >, 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< ChNodeFEAxyzrotGetNode (int i) const
 Acccess the specified FEA node for which this is a proxy.
 
ChContactSurfaceGetContactSurface () 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::eChContactableType GetContactableType () const override
 This must return the proper eChContactableType enum, for allowing a faster collision dispatcher in ChContactContainer classes (this enum will be used instead of slow dynamic_cast<> to infer the type of ChContactable, if possible)
 
virtual ChVariablesGetVariables1 () override
 Access variables for node 1.
 
virtual ChVariablesGetVariables2 () override
 Access variables for node 2.
 
virtual ChVariablesGetVariables3 () override
 Access variables for node 3.
 
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. More...
 
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, type_constraint_tuple &jacobian_tuple_N, type_constraint_tuple &jacobian_tuple_U, type_constraint_tuple &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 ChPhysicsItemGetPhysicsItem () 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 bool IsSubBlockActive (unsigned int nblock) const override
 Check if the specified sub-block of DOFs is active.
 
virtual void LoadableGetVariables (std::vector< ChVariables * > &mvars) override
 Get the pointers to the contained ChVariables, appending to the mvars vector.
 
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 contact point respect to triangle. More...
 

Member Function Documentation

◆ ComputeJacobianForContactPart()

void chrono::fea::ChContactTriangleXYZRot::ComputeJacobianForContactPart ( const ChVector3d abs_point,
ChMatrix33<> &  contact_plane,
type_constraint_tuple &  jacobian_tuple_N,
type_constraint_tuple &  jacobian_tuple_U,
type_constraint_tuple &  jacobian_tuple_V,
bool  second 
)
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.

◆ ComputeNF()

void chrono::fea::ChContactTriangleXYZRot::ComputeNF ( const double  U,
const double  V,
ChVectorDynamic<> &  Qi,
double &  detJ,
const ChVectorDynamic<> &  F,
ChVectorDynamic<> *  state_x,
ChVectorDynamic<> *  state_w 
)
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
Uparametric coordinate in surface
Vparametric coordinate in surface
QiReturn result of Q = N'*F here
detJReturn det[J] here
FInput F vector, size is =n. field coords.
state_xif != 0, update state (pos. part) to this, then evaluate Q
state_wif != 0, update state (speed part) to this, then evaluate Q

Implements chrono::ChLoadableUV.

◆ ComputeNormal()

ChVector3d chrono::fea::ChContactTriangleXYZRot::ComputeNormal ( const double  U,
const double  V 
)
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::ChContactTriangleXYZRot::ComputeUVfromP ( const ChVector3d  P,
double &  u,
double &  v 
)

Compute u,v of contact point respect to triangle.

u is node1->node2 direction, v is node1->node3 direction

◆ ContactableIncrementState()

void chrono::fea::ChContactTriangleXYZRot::ContactableIncrementState ( const ChState x,
const ChStateDelta dw,
ChState x_new 
)
overridevirtual

Increment the provided state of this object by the given state-delta increment.

Compute: x_new = x + dw.

Implements chrono::ChContactable.

◆ ContactComputeQ()

void chrono::fea::ChContactTriangleXYZRot::ContactComputeQ ( const ChVector3d F,
const ChVector3d T,
const ChVector3d point,
const ChState state_x,
ChVectorDynamic<> &  Q,
int  offset 
)
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()

void chrono::fea::ChContactTriangleXYZRot::ContactForceLoadResidual_F ( const ChVector3d F,
const ChVector3d T,
const ChVector3d abs_point,
ChVectorDynamic<> &  R 
)
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.

◆ GetContactPointSpeed() [1/2]

ChVector3d chrono::fea::ChContactTriangleXYZRot::GetContactPointSpeed ( const ChVector3d abs_point)
overridevirtual

Get the absolute speed of point abs_point if attached to the surface.

Easy in this case because there are no rotations..

Implements chrono::ChContactable.

◆ GetContactPointSpeed() [2/2]

ChVector3d chrono::fea::ChContactTriangleXYZRot::GetContactPointSpeed ( const ChVector3d loc_point,
const ChState state_x,
const ChStateDelta state_w 
)
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