SymSmallestEigenval
This routine computes the smallest eigenvalue of CSRMatrix.
Calling example
ans = SymSmallestEigenVal(CSRMatrix_::mat &
& [, char(2)::which, INTEGER::NCV, INTEGER::maxIter, REAL::tol])
ans = SymSmallestEigenVal(CSRMatrix_::mat, INTEGER::nev &
[&, char(2)::which, INTEGER::NCV, INTEGER::maxIter, REAL::tol])
Interface
- ܀ Interface
- ️܀ Example 1
- ️܀ Example 2
- ↢
INTERFACE
MODULE FUNCTION SymSmallestEigenVal(mat, which, NCV, maxIter, tol) &
& RESULT(ans)
TYPE(CSRMatrix_), INTENT(INOUT) :: mat
!! dense matrix
CHARACTER(*), OPTIONAL, INTENT(IN) :: which
!! `which = "SM"` ⇨ absolute smallest eigenvalue
!! `which = "SA"` ⇨ algebraic smallest eigenvalue
!! default is "SA"
INTEGER(I4B), OPTIONAL, INTENT(IN) :: NCV
!! Number of Lanczos vectors generated
!! It must be greater than 1 and smaller than `size(mat,1)`
!! Default is `NCV = MIN(n, 20)`
INTEGER(I4B), OPTIONAL, INTENT(IN) :: maxIter
!! Maximum number of iteration default = `N*10`
REAL(DFP), OPTIONAL, INTENT(IN) :: tol
!! tolerance, default = 0.0
REAL(DFP) :: ans
!! maximum eigenvalue
END FUNCTION SymSmallestEigenVal
END INTERFACE
program main
use easifemBase
implicit none
Declaring variables:
TYPE(CSRMatrix_) :: csrmat
CHARACTER(*), PARAMETER :: matrix_name = "./matrixMarket/fidap005.mtx"
REAL( DFP ), ALLOCATABLE :: rhs(:), sol(:), exact_sol(:)
INTEGER( I4B ) :: info
REAL( DFP ) :: ev1
Import csrmatrix from matrix market.
CALL IMPORT(csrmat, matrix_name, SPARSE_FMT_COO)
CALL Display(SIZE(csrmat, 1), "csrmat = ")
CALL Display(SIZE(csrmat, 2), "csrmat = ")
CALL Display(GetNNZ(csrmat), "GetNNZ = ")
Getting the largest eigenvalue.
ev1 = SymSmallestEigenVal(mat=csrmat, which="SM")
CALL Display(ev1, "ev1 = ")
end program main
program main
use easifemBase
implicit none
Declaring variables:
TYPE(CSRMatrix_) :: csrmat
CHARACTER(*), PARAMETER :: matrix_name = "./matrixMarket/fidap005.mtx"
REAL( DFP ), ALLOCATABLE :: rhs(:), sol(:), exact_sol(:)
INTEGER( I4B ) :: info
REAL( DFP ) :: ev1
Import csrmatrix from matrix market.
CALL IMPORT(csrmat, matrix_name, SPARSE_FMT_COO)
CALL Display(SIZE(csrmat, 1), "csrmat = ")
CALL Display(SIZE(csrmat, 2), "csrmat = ")
CALL Display(GetNNZ(csrmat), "GetNNZ = ")
Getting the largest eigenvalue.
ev1 = SymSmallestEigenVal(mat=csrmat, which="SA")
CALL Display(ev1, "ev1 = ")
end program main
- ܀ Interface
- ️܀ Example 1
- ܀ Example 2
- ↢
INTERFACE
MODULE FUNCTION SymSmallestEigenVal(mat, nev, which, &
& NCV, maxIter, tol) RESULT(ans)
TYPE(CSRMatrix_), INTENT(INOUT) :: mat
!! CSRMatrix
INTEGER(I4B), INTENT(IN) :: nev
!! number of eigenvalues
CHARACTER(*), OPTIONAL, INTENT(IN) :: which
!! `which = "SM"` ⇨ absolute smallest eigenvalue
!! `which = "SA"` ⇨ algebraic smallest eigenvalue
!! default is "SA"
INTEGER(I4B), OPTIONAL, INTENT(IN) :: NCV
!! Number of Lanczos vectors generated
!! It must be greater than 1 and smaller than `size(mat,1)`
!! Default is `NCV = MIN(n, 20)`
INTEGER(I4B), OPTIONAL, INTENT(IN) :: maxIter
!! Maximum number of iteration default = `N*10`
REAL(DFP), OPTIONAL, INTENT(IN) :: tol
!! tolerance, default = 0.0
REAL(DFP) :: ans(nev)
!! smallest eigenvalue
END FUNCTION SymSmallestEigenVal
END INTERFACE
program main
use easifemBase
implicit none
Declaring variables:
TYPE(CSRMatrix_) :: csrmat
CHARACTER(*), PARAMETER :: matrix_name = "./matrixMarket/fidap005.mtx"
REAL( DFP ), ALLOCATABLE :: rhs(:), sol(:), exact_sol(:)
INTEGER( I4B ) :: info, nev
REAL( DFP ), ALLOCATABLE :: ev1(:)
Import csrmatrix from matrix market.
CALL IMPORT(csrmat, matrix_name, SPARSE_FMT_COO)
CALL Display(SIZE(csrmat, 1), "csrmat = ")
CALL Display(SIZE(csrmat, 2), "csrmat = ")
CALL Display(GetNNZ(csrmat), "GetNNZ = ")
Getting the largest eigenvalue.
nev=6
ev1 = SymSmallestEigenVal(mat=csrmat, nev=nev, which="SM")
CALL Display(ev1, "ev1 = ")
end program main
program main
use easifemBase
implicit none
Declaring variables:
TYPE(CSRMatrix_) :: csrmat
CHARACTER(*), PARAMETER :: matrix_name = "./matrixMarket/fidap005.mtx"
REAL( DFP ), ALLOCATABLE :: rhs(:), sol(:), exact_sol(:)
INTEGER( I4B ) :: info, nev
REAL( DFP ), ALLOCATABLE :: ev1(:)
Import csrmatrix from matrix market.
CALL IMPORT(csrmat, matrix_name, SPARSE_FMT_COO)
CALL Display(SIZE(csrmat, 1), "csrmat = ")
CALL Display(SIZE(csrmat, 2), "csrmat = ")
CALL Display(GetNNZ(csrmat), "GetNNZ = ")
Getting the largest eigenvalue.
nev=6
ev1 = SymSmallestEigenVal(mat=csrmat, nev=nev, which="SA")
CALL Display(ev1, "ev1 = ")
end program main