Description

Class for a single node in the meshless FEA cluster.

#include <ChMatterMeshless.h>

Inheritance diagram for chrono::fea::ChNodeMeshless:
Collaboration diagram for chrono::fea::ChNodeMeshless:

Public Member Functions

 ChNodeMeshless (const ChNodeMeshless &other)
 
ChNodeMeshlessoperator= (const ChNodeMeshless &other)
 
ChVector GetPosReference ()
 Reference (initial) position of the node - in absolute csys. More...
 
void SetPosReference (const ChVector<> &mpos)
 Reference (initial) position of the node - in absolute csys.
 
double GetKernelRadius ()
 Get the kernel radius (max. radius while checking surrounding particles).
 
void SetKernelRadius (double mr)
 Set the kernel radius (max. radius while checking surrounding particles).
 
double GetCollisionRadius ()
 Get collision radius (for colliding with bodies, boundaries, etc.).
 
void SetCollisionRadius (double mr)
 Set collision radius (for colliding with bodies, boundaries, etc.)
 
void SetMass (double mmass) override
 Set the mass of the node.
 
double GetMass () const override
 Get the mass of the node.
 
virtual ChVariablesNodeVariables () override
 Access the variables of the node.
 
ChMatterMeshlessGetMatterContainer () const
 
void SetMatterContainer (ChMatterMeshless *mc)
 
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.
 
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
 Used by some SMC code.
 
virtual ChPhysicsItemGetPhysicsItem () override
 This is only for backward compatibility.
 
- Public Member Functions inherited from chrono::ChNodeXYZ
 ChNodeXYZ (const ChVector<> &initial_pos)
 
 ChNodeXYZ (const ChNodeXYZ &other)
 
ChNodeXYZoperator= (const ChNodeXYZ &other)
 
const ChVectorGetPos () const
 
void SetPos (const ChVector<> &mpos)
 
const ChVectorGetPos_dt () const
 
void SetPos_dt (const ChVector<> &mposdt)
 
const ChVectorGetPos_dtdt () const
 
void SetPos_dtdt (const ChVector<> &mposdtdt)
 
virtual int GetNdofX () const override
 Get the number of degrees of freedom.
 
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 (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, ex=3 for a tetrahedron finite element or a cable, etc. More...
 
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, const double W, ChVectorDynamic<> &Qi, double &detJ, const ChVectorDynamic<> &F, ChVectorDynamic<> *state_x, ChVectorDynamic<> *state_w) override
 Evaluate Q=N'*F , for Q generalized lagrangian load, where N is some type of matrix evaluated at point P(U,V,W) assumed in absolute coordinates, and F is a load assumed in absolute coordinates. More...
 
virtual double GetDensity () override
 This is not needed because not used in quadrature.
 
virtual void ArchiveOut (ChArchiveOut &marchive) override
 Method to allow serialization of transient data to archives.
 
virtual void ArchiveIn (ChArchiveIn &marchive) override
 Method to allow de serialization of transient data from archives.
 
- Public Member Functions inherited from chrono::ChNodeBase
 ChNodeBase (const ChNodeBase &other)
 
ChNodeBaseoperator= (const ChNodeBase &other)
 
virtual int GetNdofW () const
 Get the number of degrees of freedom, derivative. More...
 
virtual int GetNdofX_active () const
 Get the actual number of active degrees of freedom. More...
 
virtual int GetNdofW_active () const
 Get the actual number of active degrees of freedom, derivative. More...
 
virtual bool UseFullDof () const
 Return true if all node DOFs are active (no node variable is fixed).
 
unsigned int NodeGetOffsetX ()
 Get offset in the state vector (position part).
 
unsigned int NodeGetOffsetW ()
 Get offset in the state vector (speed part).
 
void NodeSetOffset_x (const unsigned int moff)
 Set offset in the state vector (position part).
 
void NodeSetOffset_w (const unsigned int moff)
 Set offset in the state vector (speed part).
 
virtual void NodeIntStateGather (const unsigned int off_x, ChState &x, const unsigned int off_v, ChStateDelta &v, double &T)
 
virtual void NodeIntStateScatter (const unsigned int off_x, const ChState &x, const unsigned int off_v, const ChStateDelta &v, const double T)
 
virtual void NodeIntStateGatherAcceleration (const unsigned int off_a, ChStateDelta &a)
 
virtual void NodeIntStateScatterAcceleration (const unsigned int off_a, const ChStateDelta &a)
 
virtual void NodeIntStateIncrement (const unsigned int off_x, ChState &x_new, const ChState &x, const unsigned int off_v, const ChStateDelta &Dv)
 
virtual void NodeIntStateGetIncrement (const unsigned int off_x, const ChState &x_new, const ChState &x, const unsigned int off_v, ChStateDelta &Dv)
 
virtual void NodeIntLoadResidual_F (const unsigned int off, ChVectorDynamic<> &R, const double c)
 
virtual void NodeIntLoadResidual_Mv (const unsigned int off, ChVectorDynamic<> &R, const ChVectorDynamic<> &w, const double c)
 
virtual void NodeIntToDescriptor (const unsigned int off_v, const ChStateDelta &v, const ChVectorDynamic<> &R)
 
virtual void NodeIntFromDescriptor (const unsigned int off_v, ChStateDelta &v)
 
virtual void InjectVariables (ChSystemDescriptor &mdescriptor)
 Tell to a system descriptor that there are variables of type ChVariables in this object (for further passing it to a solver).
 
virtual void VariablesFbReset ()
 Set the 'fb' part (the known term) of the encapsulated ChVariables to zero.
 
virtual void VariablesFbLoadForces (double factor=1)
 Add the current forces (applied to node) into the encapsulated ChVariables. More...
 
virtual void VariablesQbLoadSpeed ()
 Initialize the 'qb' part of the ChVariables with the current value of speeds.
 
virtual void VariablesFbIncrementMq ()
 Add M*q (masses multiplied current 'qb') to Fb, ex. More...
 
virtual void VariablesQbSetSpeed (double step=0)
 Fetch the item speed (ex. More...
 
virtual void VariablesQbIncrementPosition (double step)
 Increment node positions by the 'qb' part of the ChVariables, multiplied by a 'step' factor. More...
 
- Public Member Functions inherited from chrono::ChLoadableUVW
virtual bool IsTetrahedronIntegrationNeeded ()
 If true, use quadrature over u,v,w in [0..1] range as tetrahedron volumetric coords (with z=1-u-v-w) otherwise use default quadrature over u,v,w in [-1..+1] as box isoparametric coords.
 
virtual bool IsTrianglePrismIntegrationNeeded ()
 If true, use quadrature over u,v in [0..1] range as triangle natural coords (with z=1-u-v), and use linear quadrature over w in [-1..+1], otherwise use default quadrature over u,v,w in [-1..+1] as box isoparametric coords.
 

Public Attributes

ChMatterMeshlesscontainer
 
ChVector pos_ref
 
ChMatrix33 Amoment
 
ChMatrix33 J
 
ChMatrix33 FA
 
ChStrainTensor t_strain
 
ChStrainTensor p_strain
 plastic strain
 
ChStrainTensor e_strain
 elastic strain
 
ChStressTensor e_stress
 stress
 
ChVariablesNode variables
 
ChCollisionModelcollision_model
 
ChVector UserForce
 
double volume
 
double density
 
double h_rad
 
double coll_rad
 
double hardening
 
- Public Attributes inherited from chrono::ChNodeXYZ
ChVector pos
 
ChVector pos_dt
 
ChVector pos_dtdt
 

Additional Inherited Members

- Protected Attributes inherited from chrono::ChNodeBase
unsigned int offset_x
 offset in vector of state (position part)
 
unsigned int offset_w
 offset in vector of state (speed part)
 

Member Function Documentation

◆ ComputeJacobianForContactPart()

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

◆ ContactableIncrementState()

virtual void chrono::fea::ChNodeMeshless::ContactableIncrementState ( const ChState x,
const ChStateDelta dw,
ChState x_new 
)
inlineoverridevirtual

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

Compute: x_new = x + dw.

Implements chrono::ChContactable.

◆ ContactForceLoadQ()

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

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

The force and its application point are specified in the gloabl 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::ChNodeMeshless::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.

◆ GetContactPointSpeed() [1/2]

virtual ChVector chrono::fea::ChNodeMeshless::GetContactPointSpeed ( const ChVector<> &  abs_point)
inlineoverridevirtual

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

Easy in this case because there are no roations..

Implements chrono::ChContactable.

◆ GetContactPointSpeed() [2/2]

virtual ChVector chrono::fea::ChNodeMeshless::GetContactPointSpeed ( const ChVector<> &  loc_point,
const ChState state_x,
const ChStateDelta state_w 
)
inlineoverridevirtual

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.

◆ GetCsysForCollisionModel()

virtual ChCoordsys chrono::fea::ChNodeMeshless::GetCsysForCollisionModel ( )
inlineoverridevirtual

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.

◆ GetPosReference()

ChVector chrono::fea::ChNodeMeshless::GetPosReference ( )
inline

Reference (initial) position of the node - in absolute csys.

Note that the simulation algorithm might reset this once in a while, exp. for highly plastic objects.


The documentation for this class was generated from the following files:
  • /builds/uwsbel/chrono/src/chrono/fea/ChMatterMeshless.h
  • /builds/uwsbel/chrono/src/chrono/fea/ChMatterMeshless.cpp