chrono::fea::ChFaceTetra_4 Class Reference

## Description

Face of a linear ChElementTetra_4 tetrahedron.

This is a proxy to the tetrahedron. It can be used to apply pressure loads. Note, face_id is the number of the vertex to whom it is opposed: 0,1,2,3. Corner nodes, obtainable with GetNodeN(), are in counterclockwise order seen from the outside.

#include <ChFaceTetra_4.h>

Inheritance diagram for chrono::fea::ChFaceTetra_4: [legend]
Collaboration diagram for chrono::fea::ChFaceTetra_4: [legend]

## Public Member Functions

ChFaceTetra_4 (std::shared_ptr< ChElementTetra_4 > mel, char mid)

std::shared_ptr< ChNodeFEAxyzGetNodeN (int i) const

void ShapeFunctions (ChVectorN< double, 3 > &N, double r, double s)
Fills the N shape function vector (size 3) with the values of shape functions at r,s 'area' coordinates, all ranging in [0...1].

Gets the number of DOFs affected by this element (position part)

Gets the number of DOFs affected by this element (speed 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 (speed 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: here the {x,y,z} displacement.

virtual int GetSubBlocks () override
Get the number of DOFs sub-blocks.

virtual unsigned int GetSubBlockOffset (int nblock) override
Get the offset of the specified sub-block of DOFs in global vector.

virtual unsigned int GetSubBlockSize (int nblock) override
Get the size of the specified sub-block of DOFs in global vector.

virtual bool IsSubBlockActive (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 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 bool IsTriangleIntegrationNeeded () override
If true, use quadrature over u,v in [0..1] range as triangle volumetric coords.

virtual ChVector ComputeNormal (const double U, const double V) override
Gets the normal to the surface at the parametric coordinate u,v. More...

## Protected Attributes

char face_id

std::shared_ptr< ChElementTetra_4melement

## ◆ ComputeNF()

 virtual void chrono::fea::ChFaceTetra_4::ComputeNF ( const double U, const double V, ChVectorDynamic<> & Qi, double & detJ, const ChVectorDynamic<> & F, ChVectorDynamic<> * state_x, ChVectorDynamic<> * state_w )
inlineoverridevirtual

Evaluate N'*F , where N is some type of shape function evaluated at U,V coordinates of the surface, each ranging in 0..+1 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 N'*F here, maybe with offset block_offset 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

## ◆ ComputeNormal()

 virtual ChVector chrono::fea::ChFaceTetra_4::ComputeNormal ( const double U, const double V )
inlineoverridevirtual

Gets the normal to the surface at the parametric coordinate u,v.

Normal must be considered pointing outside in case the surface is a boundary to a volume.
{"ft_lang_label":"__label__en","ft_lang_prob":0.6396166,"math_prob":0.8645823,"size":4007,"snap":"2021-31-2021-39","text_gpt3_token_len":1039,"char_repetition_ratio":0.13065201,"word_repetition_ratio":0.2555746,"special_character_ratio":0.23608685,"punctuation_ratio":0.15796897,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.9528367,"pos_list":[0,1,2,3,4],"im_url_duplicate_count":[null,1,null,1,null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2021-09-24T00:30:10Z\",\"WARC-Record-ID\":\"<urn:uuid:00f4be36-fe24-4665-9170-d8540c0d5b73>\",\"Content-Length\":\"33239\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:b3916251-3187-4f26-87e5-1c600e07d34c>\",\"WARC-Concurrent-To\":\"<urn:uuid:3d835b3f-00eb-4d68-abc2-11de48298b29>\",\"WARC-IP-Address\":\"104.21.25.153\",\"WARC-Target-URI\":\"https://api.projectchrono.org/development/classchrono_1_1fea_1_1_ch_face_tetra__4.html\",\"WARC-Payload-Digest\":\"sha1:PJNA6PQINNMMAATA7ZIBY55REQXIU2HS\",\"WARC-Block-Digest\":\"sha1:ID7OZACTQWHZM5HQNBDJFM46EYJ3X75M\",\"WARC-Identified-Payload-Type\":\"application/xhtml+xml\",\"warc_filename\":\"/cc_download/warc_2021/CC-MAIN-2021-39/CC-MAIN-2021-39_segments_1631780057479.26_warc_CC-MAIN-20210923225758-20210924015758-00492.warc.gz\"}"}