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.