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
localNodeNumber
is used to convert the global node numbers of mesh to local node number inmat
lbound
andubound
are 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
localNodeNumber
to get the local node number of global node number (from step 3) - Call
SetSparsity
onmat
frombase
lib.
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.