Skip to main content

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
  • CellToCell is 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
  • CellToCell will 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
  • CellToCell is identity matrix
  • NodeToNode is an identity matrix
  • Spatial position of nodes would be different

More details

  • isInitiated, is true if an instance of DomainConnectivity is initiated

  • isFacetToCell is true if facetToCell data is initiated

  • isNodeToNode is true if nodeToNode data is initiated

  • isCellToCell is true if cellToCell data 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 number i in domain-1/mesh-1.
  • cellToCell contains 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 cellToCell is 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 number i in domain-1/ mesh-1
  • cellToCellExtraData: Currently,

    • cellToCellExtraData has two rows (a) the first row is dim, (b) the second row is entityNum.
    • each column represents the element number, for example
      • iel1 in domain1, then cellToCell(iel1) gives iel2 in domain2
      • cellToCellExtraData(1, iel1) gives dimension of mesh which contains iel2
      • cellToCellExtraData(2, iel1) gives entityNum of 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_