Skip to main content

Structure

This class is designed for generating mapping between two domains, or parts of two domains.

Two domains can have the following relation between them

pType has the following properties:

  • Same geometry
  • Same number of elements
  • CellToCell is an identity
  • Different number of nodes
  • Different order

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(iel) will be a collection of elements in Domain 2.

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

Structure

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(:)
  • 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 InitiateNodeToNodes
    • 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_