Structure
This class is designed for generating mapping between two domains or parts of two domains.
The structure of DomainConnectivity is given below.
TYPE :: DomainConnectivity_
PRIVATE
LOGICAL(LGT), PUBLIC :: isInitiated = .FALSE.
LOGICAL(LGT), PUBLIC :: isFacetToCell = .FALSE.
LOGICAL(LGT), PUBLIC :: isNodeToNode = .FALSE.
LOGICAL(LGT), PUBLIC :: isCellToCell = .FALSE.
INTEGER(I4B), ALLOCATABLE :: nodeToNode(:)
INTEGER(I4B), ALLOCATABLE :: cellToCell(:)
INTEGER(I4B), ALLOCATABLE :: cellToCellExtraData(:, :)
TYPE(FacetConnectivity_), ALLOCATABLE :: facetToCell(:)
TYPE(ElementConnectivity_), ALLOCATABLE :: elemToElem(:)
END TYPE
Two domains can have the following relation between them
p-type
pType has the following properties:
- Same geometry
- Same number of elements
CellToCellis an identity- Different number of nodes
- Different order
h-type
hType has the following properties:
- Same geometry
- Different number of elements
- Different number of nodes
- order is same.
- Same element topology for a given mesh
CellToCellwill be a collection of elements in Domain 2.
r-type
rType has the following properties:
- Same geometry
- Same number of nodes
- Same number of elements
CellToCellis identity matrixNodeToNodeis an identity matrix- Spatial position of nodes would be different
More details
-
isInitiated, is true if an instance ofDomainConnectivityis initiated -
isFacetToCellis true iffacetToCelldata is initiated -
isNodeToNodeis true ifnodeToNodedata is initiated -
isCellToCellis true ifcellToCelldata is initiated -
nodeToNode, contains the node-to-node mapping from one mesh/domain to another mesh/domain.- We can create mapping between parts of domain (mesh) or domains. See InitiateNodeToNodeData
- Size of NodeToNode is equal to the largest node number in domain-1 or mesh-1 (depending upon how the data is initiated)
NodeToNode(i)implies global node number in domain-2/mesh-2, corresponding to global node numberiin domain-1/mesh-1.
-
cellToCellcontains the cell-to-cell mapping from one mesh/domain to another mesh/domain.- We can create mapping between parts of domain (mesh) or domains. See, InitiateCellToCellData
- Size of
cellToCellis equal to the largest element number in domain-1 or mesh-1 (depending upon how the data is initiated) cellToCell(i) denotes global element number in domain-2/ mesh-2, corresponding to global element numberiin domain-1/ mesh-1
-
cellToCellExtraData: Currently,cellToCellExtraDatahas two rows (a) the first row is dim, (b) the second row is entityNum.- each column represents the element number, for example
iel1in domain1, thencellToCell(iel1) gives iel2 in domain2cellToCellExtraData(1, iel1) gives dimension of mesh which contains iel2cellToCellExtraData(2, iel1) givesentityNumof mesh which contains iel2- In this way,
domain2%getMeshPointer(dim, entityNum)can give us the pointer to the mesh which contains the iel2
-
facetToCell, facet to cell-connectivity data.
-
elemToElem, currently, we do not know how to implement it (TODO).
FacetConnectivity
TYPE :: FacetConnectivity_
INTEGER(I4B) :: facetID = 0
!! global element number of facet element in facet mesh
INTEGER(I4B) :: GlobalCellData(4, 2) = 0
!! 1,1 --> Global element number of master cell
!! 2,1 --> master cell's local facet number connected to facet-elem
!! 3,1 --> master mesh dimension
!! 4,1 --> master mesh entity number
!! 1,2 --> Global element number of slave cell
!! 2,2 --> slave cell's local facet number connected to facet-elem
!! 3,2 --> slave mesh dimension
!! 4,2 --> slave mesh entity number
END TYPE FacetConnectivity_
ElementConnectivity
TYPE :: ElementConnectivity_
INTEGER(I4B) :: masterGlobalElemNum = 0
INTEGER(I4B) :: masterLocalFacetID = 0
INTEGER(I4B) :: slaveGlobalElemNum = 0
INTEGER(I4B) :: slaveLocalFacetID = 0
END TYPE ElementConnectivity_