Skip to main content

Structure

The structure of AbstractDomain is given below.

TYPE, ABSTRACT :: AbstractDomain_
PRIVATE
LOGICAL(LGT) :: isInitiated = .FALSE.
!! flag
TYPE(String) :: engine
!! Engine used for generating the meshes
INTEGER(I4B) :: majorVersion = 0
!! Major version
INTEGER(I4B) :: minorVersion = 0
!! Minor version
REAL(DFP) :: version = 0.0_DFP
!! Version MajorVersion.MinorVersion
INTEGER(I4B) :: nsd = 0_I4B
!! number of spatial dimension
INTEGER(I4B) :: maxNptrs = 0
!! Largest node number in the domain
INTEGER(I4B) :: minNptrs = 0
!! Smallest node number in the domain
INTEGER(I4B) :: tNodes = 0
!! Total number of nodes in the mesh
LOGICAL(I4B) :: isNodeNumberSparse = .FALSE.
!! True if node numbers are not continuous
INTEGER(I4B) :: maxElemNum = 0
!! Largest element number in the domain
INTEGER(I4B) :: minElemNum = 0
!! Smallest element number in the domain
LOGICAL(LGT) :: isElemNumberSparse = .FALSE.
!! True if element numbers are sparse
INTEGER(I4B) :: tEntitiesForNodes = 0
!! Total number of entities required for reading nodes
INTEGER(I4B) :: tEntitiesForElements = 0
!! Total number of entities required for reading elements
INTEGER(I4B) :: tElements(0:3) = [0, 0, 0, 0]
!! Total number of elements inside the domain
!! tElements( 0 ) = total number of point elements
!! tElements( 1 ) = total number of line elements
!! tElements( 2 ) = total number of surface elements
!! tElements( 3 ) = total number of volume/cell elements
INTEGER(I4B) :: tEntities(0:3) = [0, 0, 0, 0]
!! Total number of entities inside the domain
!! tEntities( 0 ) = total number of point mesh entities, mesh of Points
!! tEntities( 1 ) = total number of line mesh entities, mesh of Edge
!! tEntities( 2 ) = total number of surface mesh entities, mesh Boundary
!! tEntities( 3 ) = total number of volume mesh entities, Omega
REAL(DFP), ALLOCATABLE :: nodeCoord(:, :)
!! Nodal coordinates in XiJ format
!! Number of rows are 3, and number of columns is total nodes

CLASS(AbstractMesh_), POINTER :: meshVolume => NULL()
!! meshVolume list of meshes of volume entities
CLASS(AbstractMesh_), POINTER :: meshSurface => NULL()
!! meshSurface list of meshes of surface entities
CLASS(AbstractMesh_), POINTER :: meshCurve => NULL()
!! meshCurve list of meshes of curve entities
CLASS(AbstractMesh_), POINTER :: meshPoint => NULL()
!! meshPoint list of meshes of point entities

TYPE(CSRSparsity_) :: meshMap
!! Sparse mesh data in CSR format

END TYPE AbstractDomain_

What is the difference between domain and mesh

A mesh is a collection of same topological order, that is,

  • a mesh of volume elements
  • a mesh of surface elements
  • a mesh of curve elements
  • a mesh of point elements

The element number and the node number in the mesh can be sparse. Therefore, we need to create a mapping from local numbering to global numbering. The mesh data does not contain any node coordinate information. The node coordinate data is available in Domain. It is stored inside nodeCoord array in xij format. We need global node number to access the entries in nodeCoord. These global node numbers are stored inside the mesh.