12#ifndef BELFEM_CL_FEM_ELEMENT_HPP
13#define BELFEM_CL_FEM_ELEMENT_HPP
55 Element * mReferenceElement =
nullptr;
61 Dof ** mDOFs =
nullptr;
62 uint mNumberOfDofs = 0;
65 Dof ** mLocalDofs =
nullptr;
66 uint mNumberOfLocalDofs = 0;
75 real * mRotationData =
nullptr;
119 const id_t aMasterBlockID,
120 const id_t aSlaveBlockID );
335 const id_t aSideSetID,
336 const id_t aMasterBlockID,
337 const id_t aSlaveBlockID );
350 link_dofs_facet_only(
363 link_dofs_facet_and_master(
376 link_dofs_facet_and_slave(
389 link_dofs_master_and_slave(
403 link_dofs_thin_shell(
407 const id_t aMasterBlockID,
408 const id_t aSlaveBlockID );
413 link_dofs_thin_shell_master_and_slave(
426 link_dofs_thin_shell_facet_only(
436 grab_edge_directions_for_facet(
Element * aReferenceElement );
445 const uint aNumberOfNodesPerElement,
455 const uint aNumberOfEdgesPerElement,
465 const uint aNumberOfFacesPerElement,
471 link_edge_dofs_thin_shell(
480 link_face_dofs_thin_shell(
496 compute_edge_directions();
501 compute_edge_directions_thinshell();
560 mReferenceElement = aElement;
568 return mParent->material();
584 return mDOFs[ aIndex ];
592 return mNumberOfDofs;
600 return mNumberOfLocalDofs == 0 ? mDOFs[ aIndex ] : mLocalDofs[ aIndex ];
608 return mNumberOfLocalDofs == 0 ? mNumberOfDofs : mNumberOfLocalDofs ;
616 return mRotationData !=
nullptr;
624 for (
uint e = 0; e < mElement->number_of_edges(); ++e )
626 aEdgeDirections[ e ] = mEdgeDirections.test( e ) ? 1.0 : -1.0;
636 for (
uint e = 0; e < mElement->number_of_edges(); ++e )
638 if ( mEdgeDirections.test( e ))
640 aEdgeDirections.
set( e );
644 aEdgeDirections.
reset( e );
654 return mEdgeDirections.test( aIndex );
662 return mElement->id();
673 for (
uint i = 0; i < tD; ++i )
675 for (
uint k = 0; k < tN; ++k )
677 aNodeCoords( k, i ) = mElement->node( k )->x( i );
687 return mTmatrix != nullptr ;
719 return mReferenceElement;
725 return mReferenceElement;
void reset(const index_t aIndex)
set a bit to false
Definition cl_Bitset.hpp:103
void set(const index_t aIndex)
set a bit to true
Definition cl_Bitset.hpp:92
A bounds-checked wrapper around std::vector.
Definition cl_Cell.hpp:45
Base class for all materials in BELFEM.
Definition cl_Material.hpp:270
size_t n_rows() const
Definition cl_AR_Matrix.hpp:183
size_t n_cols() const
Definition cl_AR_Matrix.hpp:191
Definition cl_FEM_Block.hpp:35
Definition cl_FEM_Dof.hpp:28
Main workhorse: DOF management, assembly coordination and the solver interface.
Definition cl_FEM_DofManager.hpp:52
Definition cl_FEM_Element.hpp:41
void edge_directions(real *aEdgeDirections) const
expose container for edge directions (obsolete)
Definition cl_FEM_Element.hpp:622
Element * slave()
return the slave element, only for sidesets, returns null if there is none
Definition cl_FEM_Element.hpp:526
const Material * material() const
return the material of this element
Definition cl_FEM_Element.hpp:566
void unflag_dofs()
unflag all dofs that are connected to this element
Definition cl_FEM_Element.cpp:1235
void get_node_coors(Matrix< real > &aNodeCoords)
Definition cl_FEM_Element.hpp:668
bool has_hanging_dofs() const
Definition cl_FEM_Element.cpp:1474
void flag_dofs()
flag all dofs that are connected to this element
Definition cl_FEM_Element.cpp:1224
void add_t_matrix(const Matrix< real > &aT)
void set_rotation_data(const Matrix< real > &aRotationAxes, const Vector< real > &aRotationAngles)
set the rotation axes
Definition cl_FEM_Element.cpp:1343
Group * parent()
Definition cl_FEM_Element.hpp:709
Element(Block *aParent, DofManager *aDofManager, mesh::Element *aElement)
Definition cl_FEM_Element.cpp:24
Dof * dof(const index_t aIndex)
expose a specific dof
Definition cl_FEM_Element.hpp:582
void set_facet(mesh::Facet *aFacet)
Definition cl_FEM_Element.hpp:550
void relink_dofs(Cell< Dof * > &aGlobalDofs, Cell< Dof * > &aLocalDofs, const Matrix< real > &aTmatrix)
Definition cl_FEM_Element.cpp:1430
uint number_of_dofs() const
expose the number of dofs
Definition cl_FEM_Element.hpp:590
void set_reference(Element *aElement)
Definition cl_FEM_Element.hpp:558
Dof * local_dof(const index_t aIndex)
expose a specific dof
Definition cl_FEM_Element.hpp:598
uint number_of_local_dofs() const
expose the number of dofs
Definition cl_FEM_Element.hpp:606
bool edge_direction(const index_t aIndex) const
expose container for edge directions
Definition cl_FEM_Element.hpp:652
bool has_rotation() const
tell if this element has rotation properties
Definition cl_FEM_Element.hpp:614
const Tmatrix * t_matrix() const
Definition cl_FEM_Element.hpp:693
Element * reference()
Definition cl_FEM_Element.hpp:717
mesh::Facet * facet()
Definition cl_FEM_Element.hpp:534
bool has_t_matrix() const
Definition cl_FEM_Element.hpp:685
Element * master()
return the master element, only for sidesets
Definition cl_FEM_Element.hpp:518
id_t id() const
return the id of the underlying mesh element
Definition cl_FEM_Element.hpp:660
mesh::Element * element()
expose the underlying element on the mesh
Definition cl_FEM_Element.hpp:574
void get_rotation_data(Matrix< real > &aRotationAxes, Vector< real > &aRotationAngles)
Definition cl_FEM_Element.cpp:1389
Definition cl_FEM_Group.hpp:45
Definition cl_FEM_SideSet.hpp:64
Definition cl_FEM_Tmatrix.hpp:22
Definition cl_Facet.hpp:24
Definition cl_IFB_LINE3.hpp:21
SideSetDofLinkMode
how the dofs of a sideset element are linked to its facet, master and slave elements ( six modes plus...
Definition en_IWG_SideSetDofLinkMode.hpp:25
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
unsigned int id_t
Definition typedefs.hpp:41
uint32_t index_t
Definition typedefs.hpp:52
double real
Definition typedefs.hpp:36