Structure
AbstractMesh_ datatype is simply a collection of finite elements and nodes.
This is an abstract class, which will be extended by Mesh_ and FEMesh_ class.
Mesh and FEMeshMeshclass is older version andFEMeshis a newer version. In future,Meshclass will be merged withFEMeshclass.- In EASIFEM mesh is a homogeneous collection of reference elements. All elements in mesh should be of same type (i.e., triangle, quadrangle, tetrahedron, etc.).
- Two meshes can have different types of elements. For example, we can define a mesh of triangle element or a mesh of tetrahedron element.
- However, in
FEMeshelements can have different topology but they all should have same co-dimension. That is inFEMeshall elements need to be eithervolume, orsurface, orcurve, orpoint.
The support for Mesh class is deprecated and will be removed in future. Please use FEMesh class instead. In the future Mesh class and FEMesh class will be the same.
- You can learn about the structure of
FEMeshHere - You can learn about the structure of
ElemDataHere - You can learn about the structure of
NodeDataHere - The information of
BoundaryFacetDatais given Here - The information of
InternalFacetDatais given Here
Type definition
TYPE, ABSTRACT :: AbstractMesh_
PRIVATE
LOGICAL(LGT) :: showTime = .FALSE.
!! If true, then we show the time taken by various mesh operations
!! This is for checking the performance of a subclass
LOGICAL(LGT) :: readFromFile = .TRUE.
!! True if the mesh is read from a file
LOGICAL(LGT) :: isInitiated = .FALSE.
!! logical flag denoting for whether mesh data is Initiated or not
LOGICAL(LGT) :: isNodeToElementsInitiated = .FALSE.
!! Node to elements mapping
LOGICAL(LGT) :: isNodeToNodesInitiated = .FALSE.
!! Node to nodes mapping
LOGICAL(LGT) :: isExtraNodeToNodesInitiated = .FALSE.
!! Node to nodes mapping
LOGICAL(LGT) :: isElementToElementsInitiated = .FALSE.
!! Element to elements mapping
LOGICAL(LGT) :: isEdgeConnectivityInitiated = .FALSE.
!! This is Set to true when edge connectivity is initiated
!! See InitiateEdgeConnectivity method
LOGICAL(LGT) :: isFaceConnectivityInitiated = .FALSE.
!! This is Set to true when face connectivity is initiated
!! See InitiateFaceConnectivity method
LOGICAL(LGT) :: isBoundaryDataInitiated = .FALSE.
!! Boundary data
LOGICAL(LGT) :: isFacetDataInitiated = .FALSE.
!! FacetData
INTEGER(I4B) :: uid = 0
!! Unique id of the mesh
!! In case of Mesh_ it is entityNumber of the mesh
INTEGER(I4B) :: tElements_topology_wise(8) = 0
!! point, line, triangle, quadrangle, tetrahedron, hexahedron, prism,
!! pyramid (it is calculated in the postprocessing step)
INTEGER(I4B) :: tElemTopologies = 0, elemTopologies(8) = 0
!! total element topologies, name of element topologies are stored in
!! elemTopologies(1:tElemTopologies)
!! this info is computed in a postprocessing step
INTEGER(I4B) :: maxNNE = 0
!! maximum number of nodes in element
INTEGER(I4B) :: nsd = 0
!! number of spatial dimension of the mesh
INTEGER(I4B) :: xidim = 0
!! xidimension of elements present inside the mesh
!! for point xidim = 0
!! for line/curve xidim = 1
!! for surface xidim = 2
!! for volume xidim = 3
INTEGER(I4B) :: maxNptrs = 0
!! largest node number present inside the mesh
INTEGER(I4B) :: minNptrs = 0
!! minimum node number present inside the mesh
INTEGER(I4B) :: maxElemNum = 0
!! largest element number present inside the mesh
INTEGER(I4B) :: minElemNum = 0
!! minimum element number present inside the mesh
INTEGER(I4B) :: tNodes = 0
!! total number of nodes present inside the mesh
INTEGER(I4B) :: tEdges = 0
!! total number of internal nodes inside the mesh
INTEGER(I4B) :: tFaces = 0
!! total number of internal nodes inside the mesh
INTEGER(I4B) :: tElements = 0
!! total number of elements present inside the mesh
!! It is the size of elemNumber vector
REAL(DFP) :: minX = 0.0
!! minimum value of x coordinate
REAL(DFP) :: maxX = 0.0
!! maximum value of x coordinate
REAL(DFP) :: minY = 0.0
!! minimum value of y coordinate
REAL(DFP) :: maxY = 0.0
!! maximum value of y coordinate
REAL(DFP) :: minZ = 0.0
!! minimum value of z coordinate
REAL(DFP) :: maxZ = 0.0
!! maximum value of z coordinate
REAL(DFP) :: x = 0.0
!! x coorindate of centroid
REAL(DFP) :: y = 0.0
!! y coordinate of centroid
REAL(DFP) :: z = 0.0
!! z coordinate of centroid
INTEGER(I4B), ALLOCATABLE :: boundingEntity(:)
!! Bounding entity numbers of the current entity
INTEGER(I4B), ALLOCATABLE :: local_elemNumber(:)
!! List of local element numbers, the lowerbound is `minElemNum`
!! and upper bound is `maxElemNum`. In this way, local_elemNumber(iel)
!! returns the local element number of global element number iel.
INTEGER(I4B), ALLOCATABLE :: local_Nptrs(:)
!! Returns local node number from a global node number
!! Its length is from 1 to maxNptrs
!! Helpul in finding if a global node is present inside the mesh or not
REAL(DFP), ALLOCATABLE :: quality(:, :)
!! number of rows are meshquality
!! number of columns are elements
INTEGER(I4B), ALLOCATABLE :: facetElementType(:, :)
!! Number of rows of this array is same as the total number of
!! facets present in the mesh-reference elements
!! Number of columns of this array is equal to the total number of
!! elements inside the mesh
!! facetElementType(ii, iel) can be
!! INTERNAL_ELEMENT, BOUNDARY_ELEMENT, DOMAIN_BOUNDARY_ELEMENT
!! If the face is a part of the mesh boundary then it will be called
!! the BOUNDARY_ELEMENT
TYPE(NodeData_), ALLOCATABLE :: nodeData(:)
!! Node data
TYPE(ElemData_), ALLOCATABLE :: elementData(:)
!! element data
TYPE(InternalFacetData_), ALLOCATABLE :: internalFacetData(:)
!! Internal facet data
!! INFO: This data is initiated by InitiateFacetElements method
TYPE(BoundaryFacetData_), PUBLIC, ALLOCATABLE :: boundaryFacetData(:)
!! Domain Facet Data
!! INFO: This data is initiated by InitiateFacetElements method
TYPE(ElemDataList_) :: elementDataList
!! ElemData list
TYPE(ElemDataBinaryTree_) :: elementDataBinaryTree
!! ElemData binary tree
TYPE(NodeDataList_) :: nodeDataList
!! NodeData list
TYPE(NodeDataBinaryTree_) :: nodeDataBinaryTree
!! NodeData binary tree
END TYPE AbstractMesh_
showTime
showTime is true if the time taken by various mesh operations is shown.
readFromFile
readFromFile is true if the mesh is read from a file.
isInitiated
isInitiated is logical flag denoting whether mesh data is initiated or not.
isNodeToElementsInitiated
isNodeToElementsInitiated is true if node to elements mapping is initiated.
isNodeToNodesInitiated
isNodeToNodesInitiated is true of node to nodes mapping is initiated.
isExtraNodeToNodesInitiated
It is true if extra information of node to nodes is initiated. Extra node to nodes is necessary for edge based FEM.
isElementToElementsInitiated
isElementToElementsInitiated is true if element to elements mapping available.
isEdgeConnectivityInitiated
If is true if edge connectivity is initiated.
isFaceConnectivityInitiated
It is true when face connectivity is initiated.
isBoundaryDataInitiated
isBoundaryDataInitiated is true if boundary data is available.
isFacetDataInitiated
It is true when the facet data is initiated.
uid
uid denotes the unique-id of the mesh. It is read from the mesh file, if present.
xidim
xidimdenotes thexidimensionof elements present inside the mesh,xidim= (0,1,2,3) for (point, line, surface, volume) elements.
tElements_topology_wise
It denotes the total number of elements present in the mesh. It is calculated in the post-processing step.
| index | element tyep |
|---|---|
| 1 | point |
| 2 | line |
| 3 | triangle |
| 4 | quadrangle |
| 5 | tetrahedron |
| 6 | hexahedron |
| 7 | prism |
| 8 | pyramid |
tElemTopologies and elemTopologies
Total number of topologies stored in the mesh. For example, in a mesh of lines, we will have tElemTopolies=1. In the case of mesh of surfaces we can have tElemTopologies=2. The name of the topolgoy is stored in elemTopologies(1:tElemTopolies).
maxNNE
Maximum number of nodes in an element.
nsd
nsd denotes the number of spatial dimension of the mesh.
xidim
The codimension of the mesh. It is 0 for point, 1 for line, 2 for surface, 3 for volume.
maxNptrs
maxNptrs stands for the largest node number present inside the mesh.
minNptrs
minNptrs stands for the smallest node number present inside the mesh.
maxElemNum
maxElemNum denotes the largest element number present inside the mesh.
minElemNum
minElemNum denotes the smallest element number present inside the mesh.
tNodes
tNodes is the total number of (local) nodes present inside the mesh.
tEdges
Total number of edges present inside the mesh.
tFaces
Total number of faces present inside the mesh.
tElements
tElements is the total number of elements present inside the mesh. It is the size of elemNumber vector.
minX, maxX, minY, maxY, minZ, maxZ
minXdenotes the minimum value of x coordinate ofboundingbox.maxXdenotes the maximum value of x coordinate ofboundingbox.minYis the minimum value of y coordinate ofboundingbox.maxYis the maximum value of y coordinate ofboundingbox.minZis the minimum value of z coordinate ofboundingbox.maxZis the maximum value of z coordinate ofboundingbox.
x, y, z
xis the x coordinate of center of mesh.yis the y coordinate of center of mesh.zis the z coordinate of center of mesh.
boundingEntity
boundingEntity denotes the bounding entity numbers of the current entity
local_elemNumber and local_Nptrs
local_elemNumberdenotes the list of local element numbers, the lower bound isminElemNumand upper bound ismaxElemNum. In this way,local_elemNumber(iel)returns the local element number of global element numberiel.local_Nptrsreturns the local node number from a global node number. Its length is from 1 tomaxNptrs. Helpful in finding if a global node is present inside the mesh or not.
quality
Denotes the quality of elements.
facetElementType
- Number of rows of this array is same as the total number of facets present in the mesh’s reference-element.
- Number of columns of this array is equal to the total number of elements inside the mesh.
- In this way,
facetElementType(ii, iel)denotes theiith facet’s type of element local element numberiel facetElementTypecan beINTERNAL_ELEMENT,BOUNDARY_ELEMENT,DOMAIN_BOUNDARY_ELEMENT.
- If the face is a part of the mesh boundary then it will be called the
BOUNDARY_ELEMENT - If the face is part of domain boundary, then it is a
DOMAIN_BOUNDARY_ELEMENT - If the facet is internal to a mesh, then it is a
INTERNAL_ELEMENT - Note that every,
DOMAIN_BOUNDARY_ELEMENTisBOUNDARY_ELEMENTbut not vice-versa.
nodeData
nodeData node data
elementData
elementData element data
internalFacetData
internalFacetData internal facet data
boundaryFacetData
boundaryFacetData boundary facet Data
elementDataList
Linked list of element data
elementDataBinaryTree
Binary tree of element data.
nodeDataList
Linked list of node data
nodeDataBinaryTree
Binary tree of node data.