chrono::fea::ChContactTriangleXYZ Class Reference

Description

Contact element of triangular type.

This can be used to 'tessellate' a generic surface like the outer of tetrahedral meshes

#include <ChContactSurfaceMesh.h>

Inheritance diagram for chrono::fea::ChContactTriangleXYZ:
Collaboration diagram for chrono::fea::ChContactTriangleXYZ:

Public Member Functions

 ChContactTriangleXYZ (std::shared_ptr< ChNodeFEAxyz > n1, std::shared_ptr< ChNodeFEAxyz > n2, std::shared_ptr< ChNodeFEAxyz > n3, ChContactSurface *acontainer=0)
 
collision::ChCollisionModelGetCollisionModel ()
 
std::shared_ptr< ChNodeFEAxyzGetNode1 ()
 Access the FEA node to whom this is a proxy as triangle vertex.
 
std::shared_ptr< ChNodeFEAxyzGetNode2 ()
 Access the FEA node to whom this is a proxy as triangle vertex.
 
std::shared_ptr< ChNodeFEAxyzGetNode3 ()
 Access the FEA node to whom this is a proxy as triangle vertex.
 
void SetNode1 (std::shared_ptr< ChNodeFEAxyz > mn)
 Set the FEA node to whom this is a proxy.
 
void SetNode2 (std::shared_ptr< ChNodeFEAxyz > mn)
 Set the FEA node to whom this is a proxy.
 
void SetNode3 (std::shared_ptr< ChNodeFEAxyz > mn)
 Set the FEA node to whom this is a proxy.
 
ChContactSurfaceGetContactSurface () const
 Get the contact surface container.
 
void SetContactSurface (ChContactSurface *mc)
 Set the contact surface container.
 
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 ContactableGet_ndof_x () override
 Get the number of DOFs affected by this object (position part)
 
virtual int ContactableGet_ndof_w () override
 Get the number of DOFs affected by this object (speed part)
 
virtual void ContactableGetStateBlock_x (ChState &x) override
 Get all the DOFs packed in a single vector (position part)
 
virtual void ContactableGetStateBlock_w (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 ChVector GetContactPoint (const ChVector<> &loc_point, const ChState &state_x) override
 Express the local point in absolute frame, for the given state position.
 
virtual ChVector GetContactPointSpeed (const ChVector<> &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 ChVector GetContactPointSpeed (const ChVector<> &abs_point) override
 Get the absolute speed of point abs_point if attached to the surface. More...
 
virtual ChCoordsys GetCsysForCollisionModel () override
 Return the coordinate system for the associated collision model. More...
 
virtual void ContactForceLoadResidual_F (const ChVector<> &F, const ChVector<> &abs_point, ChVectorDynamic<> &R) override
 Apply the force, expressed in absolute reference, applied in pos, to the coordinates of the variables. More...
 
virtual void ContactForceLoadQ (const ChVector<> &F, const ChVector<> &point, const ChState &state_x, ChVectorDynamic<> &Q, int offset) override
 Apply the given force at the given point and load the generalized force array. More...
 
virtual void ComputeJacobianForContactPart (const ChVector<> &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
 Might be needed by some SMC models.
 
virtual std::shared_ptr< ChMaterialSurface > & GetMaterialSurfaceBase () override
 Return the pointer to the surface material.
 
virtual ChPhysicsItemGetPhysicsItem () override
 This is only for backward compatibility.
 
virtual int LoadableGet_ndof_x () override
 Gets the number of DOFs affected by this element (position part).
 
virtual int LoadableGet_ndof_w () override
 Gets the number of DOFs affected by this element (velocity part).
 
virtual void LoadableGetStateBlock_x (int block_offset, ChState &mD) override
 Gets all the DOFs packed in a single vector (position part).
 
virtual void LoadableGetStateBlock_w (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 int Get_field_ncoords () override
 Number of coordinates in the interpolated field, ex=3 for a tetrahedron finite element or a cable, = 1 for a thermal problem, etc. More...
 
virtual int GetSubBlocks () override
 Tell the number of DOFs blocks (ex. =1 for a body, =4 for a tetrahedron, etc.)
 
virtual unsigned int GetSubBlockOffset (int nblock) override
 Get the offset of the i-th sub-block of DOFs in global vector.
 
virtual unsigned int GetSubBlockSize (int nblock) override
 Get the size of the i-th 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 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 ChVector 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.
 

Member Function Documentation

virtual void chrono::fea::ChContactTriangleXYZ::ComputeJacobianForContactPart ( const ChVector<> &  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.

void chrono::fea::ChContactTriangleXYZ::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.

ChVector chrono::fea::ChContactTriangleXYZ::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.

virtual void chrono::fea::ChContactTriangleXYZ::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.

virtual void chrono::fea::ChContactTriangleXYZ::ContactForceLoadQ ( const ChVector<> &  F,
const ChVector<> &  point,
const ChState state_x,
ChVectorDynamic<> &  Q,
int  offset 
)
overridevirtual

Apply the given force at the given point and load the generalized force array.

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.

virtual void chrono::fea::ChContactTriangleXYZ::ContactForceLoadResidual_F ( const ChVector<> &  F,
const ChVector<> &  abs_point,
ChVectorDynamic<> &  R 
)
overridevirtual

Apply the force, 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.

virtual int chrono::fea::ChContactTriangleXYZ::Get_field_ncoords ( )
overridevirtual

Number of coordinates in the interpolated field, ex=3 for a tetrahedron finite element or a cable, = 1 for a thermal problem, etc.

Implements chrono::ChLoadable.

virtual ChVector chrono::fea::ChContactTriangleXYZ::GetContactPointSpeed ( const ChVector<> &  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.

virtual ChVector chrono::fea::ChContactTriangleXYZ::GetContactPointSpeed ( const ChVector<> &  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.

virtual ChCoordsys chrono::fea::ChContactTriangleXYZ::GetCsysForCollisionModel ( )
overridevirtual

Return the coordinate system for the associated collision model.

ChCollisionModel might call this to get the position of the contact model (when rigid) and sync it.

Implements chrono::ChContactable.