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.
Example 1
!> author: Vikas Sharma, Ph. D.
! date: 2025-06-05
! summary: Test for SetSparsity method of FEMesh class
PROGRAM main
USE GlobalData
USE FEMesh_Class
USE HDF5File_Class
USE BaseType, ONLY: DOF_, CSRMatrix_
USE DOF_Method
USE CSRMatrix_Method
IMPLICIT NONE
TYPE(FEMesh_) :: obj
TYPE(HDF5File_) :: meshfile
TYPE(DOF_) :: dofobj
TYPE(CSRMatrix_) :: mat
INTEGER(I4B) :: tNodes(1)
INTEGER(I4B), PARAMETER :: spaceCompo(1) = [1], &
timeCompo(1) = [1], &
storageFMT = NODES_FMT
CHARACTER(1), PARAMETER :: names(1) = ["K"]
CHARACTER(LEN=*), PARAMETER :: filename = &
"./meshdata/small_tri3_mesh.h5"
CALL meshfile%Initiate(FileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL obj%Initiate(hdf5=meshfile, dim=2)
tNodes = obj%GetTotalNodes()
CALL Initiate(obj=dofobj, tNodes=tNodes, &
spaceCompo=spaceCompo, timeCompo=timeCompo, &
names=names, storageFMT=storageFMT)
CALL Initiate(mat, ncol=SIZE(dofobj), nrow=SIZE(dofobj), &
idof=dofobj, jdof=dofobj)
CALL obj%SetSparsity(mat=mat)
CALL obj%DEALLOCATE()
CALL meshfile%DEALLOCATE()
END PROGRAM main