SetSparsity
Inheritence
This method is inherited from the AbstractMesh class.
SetSparsity
The SetSparsity method sets the sparsity pattern of a CSR matrix based on mesh connectivity. It has four versions for different use cases.
Interface 1
INTERFACE
  MODULE SUBROUTINE obj_SetSparsity1(obj, mat, localNodeNumber, lbound, &
                                     ubound)
    CLASS(AbstractMesh_), INTENT(INOUT) :: obj
    !! [[Mesh_]] class
    TYPE(CSRMatrix_), INTENT(INOUT) :: mat
    !! [[CSRMatrix_]] object
    INTEGER(I4B), INTENT(IN) :: lbound
    INTEGER(I4B), INTENT(IN) :: ubound
    INTEGER(I4B), INTENT(IN) :: localNodeNumber(lbound:ubound)
    !! Global to local node number map
  END SUBROUTINE obj_SetSparsity1
END INTERFACE
localNodeNumberis used to convert the global node numbers of mesh to local node number inmatlboundanduboundare bounds oflocalNodeNumber
The algorithm is as follows:
- Start loop of node numbers in mesh
 - Get the global node number of mesh
 - Get the global node numbers around this node
 - Use 
localNodeNumberto get the local node number of global node number (from step 3) - Call 
SetSparsityonmatfrombaselib. 
Interface 2
INTERFACE
  MODULE SUBROUTINE obj_SetSparsity2(obj, mat)
    CLASS(AbstractMesh_), INTENT(INOUT) :: obj
    !! Mesh_ class
    TYPE(CSRMatrix_), INTENT(INOUT) :: mat
    !! CSRMatrix object
  END SUBROUTINE obj_SetSparsity2
END INTERFACE
Inteface 3
INTERFACE
  MODULE SUBROUTINE obj_SetSparsity3(obj, colMesh, nodeToNode, mat, &
                                     ivar, jvar)
    CLASS(AbstractMesh_), INTENT(INOUT) :: obj
    !! Abstract mesh class
    CLASS(AbstractMesh_), INTENT(INOUT) :: colMesh
    !! Abstract mesh class
    INTEGER(I4B), INTENT(IN) :: nodeToNode(:)
    !! Node to node connectivity between obj and colMesh
    TYPE(CSRMatrix_), INTENT(INOUT) :: mat
    !! [[CSRMatrix_]] object
    INTEGER(I4B), INTENT(IN) :: ivar
    INTEGER(I4B), INTENT(IN) :: jvar
  END SUBROUTINE obj_SetSparsity3
END INTERFACE
Interface 4
INTERFACE
  MODULE SUBROUTINE obj_SetSparsity4(obj, colMesh, nodeToNode, mat, &
                              rowGlobalToLocalNodeNum, rowLBOUND, rowUBOUND, &
                    colGlobalToLocalNodeNum, colLBOUND, colUBOUND, ivar, jvar)
    CLASS(AbstractMesh_), INTENT(INOUT) :: obj
    !! [[Mesh_]] class
    CLASS(AbstractMesh_), INTENT(INOUT) :: colMesh
    !! [[Mesh_]] class
    INTEGER(I4B), INTENT(IN) :: nodeToNode(:)
    !! node to node connectivity between obj and colMesh
    TYPE(CSRMatrix_), INTENT(INOUT) :: mat
    !! [[CSRMatrix_]] object
    INTEGER(I4B), INTENT(IN) :: rowLBOUND
    INTEGER(I4B), INTENT(IN) :: rowUBOUND
    INTEGER(I4B), INTENT(IN) :: rowGlobalToLocalNodeNum( &
      & rowLBOUND:rowUBOUND)
    !! Global to local node number map
    INTEGER(I4B), INTENT(IN) :: colLBOUND
    INTEGER(I4B), INTENT(IN) :: colUBOUND
    INTEGER(I4B), INTENT(IN) :: colGlobalToLocalNodeNum( &
      & colLBOUND:colUBOUND)
    INTEGER(I4B), INTENT(IN) :: ivar
    INTEGER(I4B), INTENT(IN) :: jvar
  END SUBROUTINE obj_SetSparsity4
END INTERFACE
Syntax
! Version 1: Using global-to-local node number mapping
CALL obj%SetSparsity(mat, localNodeNumber, lbound, ubound)
! Version 2: Using mesh connectivity directly
CALL obj%SetSparsity(mat)
! Version 3: For coupled meshes with physical variables
CALL obj%SetSparsity(colMesh, nodeToNode, mat, ivar, jvar)
! Version 4: With custom node mappings for coupled meshes
CALL obj%SetSparsity(colMesh, nodeToNode, mat, rowGlobalToLocalNodeNum, rowLBOUND, rowUBOUND, colGlobalToLocalNodeNum, colLBOUND, colUBOUND, ivar, jvar)
Parameters
Parameters vary by version but generally include:
obj: The mesh objectmat: The CSR matrix to set sparsity forlocalNodeNumber: Mapping from global to local node numbers- Various bounds and indices for node mappings
 - For coupled meshes: 
colMesh,nodeToNode, physical variable indices 
Description
SetSparsity establishes the sparsity pattern of a CSR matrix based on mesh connectivity. This is crucial for finite element computations, as it determines which matrix entries can be non-zero.
The different versions accommodate various use cases:
- Version 1: Uses a provided global-to-local node number mapping
 - Version 2: Uses mesh connectivity directly
 - Version 3: For coupled meshes with physical variables
 - Version 4: For complex scenarios with custom node mappings
 
Implementation Notes
All versions ensure that node-to-node connectivity is available, calling InitiateNodeToNodes if needed. They then iterate through nodes, determine connected nodes, and set the sparsity pattern accordingly.