1515! along with this program. If not, see <https: //www.gnu.org/licenses/>
1616!
1717
18+ ! > author: Vikas Sharma, Ph. D.
19+ ! date: 2022-12-09
20+ ! summary: Reverse communication interface (RCI) for the Implicitly
21+ ! Restarted Arnoldi Iteration.
22+
1823MODULE ARPACK_SAUPD
1924USE GlobalData, ONLY: I4B, DFP, LGT
2025USE String_Class, ONLY: String
2126IMPLICIT NONE
2227PRIVATE
2328
29+ PUBLIC :: SAUPD_ErrorMsg
30+ PUBLIC :: SEUPD_ErrorMsg
31+ PUBLIC :: SymLargestEigenVal
32+ PUBLIC :: SymSmallestEigenVal
33+
2434!- ---------------------------------------------------------------------------
2535! SAUPD_ErrorMsg
2636!- ---------------------------------------------------------------------------
2737
38+ ! > author: Vikas Sharma, Ph. D.
39+ ! date: 2022-12-09
40+ ! summary: error message for SAUPD
41+
2842INTERFACE
2943 MODULE FUNCTION SAUPD_ErrorMsg (INFO ) RESULT(ans)
3044 INTEGER (I4B), INTENT (IN ) :: INFO
3145 TYPE (String) :: ans
3246 END FUNCTION SAUPD_ErrorMsg
3347END INTERFACE
3448
35- PUBLIC :: SAUPD_ErrorMsg
36-
3749!- ---------------------------------------------------------------------------
3850! SAUPD_ErrorMsg
3951!- ---------------------------------------------------------------------------
4052
53+ ! > author: Vikas Sharma, Ph. D.
54+ ! date: 2022-12-09
55+ ! summary: error message for SEUPD
56+
4157INTERFACE
4258 MODULE FUNCTION SEUPD_ErrorMsg (INFO ) RESULT(ans)
4359 INTEGER (I4B), INTENT (IN ) :: INFO
4460 TYPE (String) :: ans
4561 END FUNCTION SEUPD_ErrorMsg
4662END INTERFACE
4763
48- PUBLIC :: SEUPD_ErrorMsg
49-
5064!- ---------------------------------------------------------------------------
5165!
5266!- ---------------------------------------------------------------------------
@@ -59,10 +73,10 @@ END FUNCTION SEUPD_ErrorMsg
5973!
6074!- This routine calculates the largest eigenvalue of a real sym dense matrix.
6175!- It calls ARPACK SSAUPD or DSAUPD routine
62-
63- INTERFACE
76+ !
77+ INTERFACE SymLargestEigenVal
6478 MODULE FUNCTION SymLargestEigenVal1 (mat , which , NCV , maxIter , tol ) &
65- & RESULT(ans)
79+ RESULT(ans)
6680 REAL (DFP), INTENT (IN ) :: mat(:, :)
6781 ! ! dense matrix
6882 CHARACTER (* ), OPTIONAL , INTENT (IN ) :: which
@@ -80,30 +94,24 @@ MODULE FUNCTION SymLargestEigenVal1(mat, which, NCV, maxIter, tol) &
8094 REAL (DFP) :: ans
8195 ! ! maximum eigenvalue
8296 END FUNCTION SymLargestEigenVal1
83- END INTERFACE
84-
85- INTERFACE SymLargestEigenVal
86- MODULE PROCEDURE SymLargestEigenVal1
8797END INTERFACE SymLargestEigenVal
8898
89- PUBLIC :: SymLargestEigenVal
90-
9199!- ---------------------------------------------------------------------------
92100!
93101!- ---------------------------------------------------------------------------
94102
95103! > author: Vikas Sharma, Ph. D.
96104! date: 2022-12-10
97- ! summary: Calculate the `nev` smallest eigenvalue of a real sym dense matrix
105+ ! summary: Calculate the smallest eigenvalue of a real sym dense matrix
98106!
99107! # Introduction
100108!
101109!- This routine calculates the smallest eigenvalue of a real sym dense matrix.
102110!- It calls ARPACK SSAUPD or DSAUPD routine
103-
104- INTERFACE
111+ !
112+ INTERFACE SymLargestEigenVal
105113 MODULE FUNCTION SymLargestEigenVal2 (mat , nev , which , NCV , maxIter , tol ) &
106- & RESULT(ans)
114+ RESULT(ans)
107115 REAL (DFP), INTENT (IN ) :: mat(:, :)
108116 ! ! dense matrix
109117 INTEGER (I4B), INTENT (IN ) :: nev
@@ -123,10 +131,6 @@ MODULE FUNCTION SymLargestEigenVal2(mat, nev, which, NCV, maxIter, tol) &
123131 REAL (DFP) :: ans(nev)
124132 ! ! first k, largest eigenvalue
125133 END FUNCTION SymLargestEigenVal2
126- END INTERFACE
127-
128- INTERFACE SymLargestEigenVal
129- MODULE PROCEDURE SymLargestEigenVal2
130134END INTERFACE SymLargestEigenVal
131135
132136!- ---------------------------------------------------------------------------
@@ -156,9 +160,9 @@ END FUNCTION SymLargestEigenVal2
156160! decomposition of mat0.
157161! @endnote
158162
159- INTERFACE
163+ INTERFACE SymSmallestEigenVal
160164 MODULE FUNCTION SymSmallestEigenVal1 (mat , sigma , which , NCV , maxIter , tol ) &
161- & RESULT(ans)
165+ RESULT(ans)
162166 REAL (DFP), INTENT (IN ) :: mat(:, :)
163167 ! ! dense matrix
164168 REAL (DFP), OPTIONAL , INTENT (IN ) :: sigma
@@ -178,14 +182,8 @@ MODULE FUNCTION SymSmallestEigenVal1(mat, sigma, which, NCV, maxIter, tol) &
178182 REAL (DFP) :: ans
179183 ! ! maximum eigenvalue
180184 END FUNCTION SymSmallestEigenVal1
181- END INTERFACE
182-
183- INTERFACE SymSmallestEigenVal
184- MODULE PROCEDURE SymSmallestEigenVal1
185185END INTERFACE SymSmallestEigenVal
186186
187- PUBLIC :: SymSmallestEigenVal
188-
189187!- ---------------------------------------------------------------------------
190188!
191189!- ---------------------------------------------------------------------------
@@ -205,19 +203,15 @@ END FUNCTION SymSmallestEigenVal1
205203!
206204!- [ ] TODO use Cholsky factorization instead of LU as mat is
207205! symmetric.
208- !
209206
210- INTERFACE
207+ INTERFACE SymSmallestEigenVal
211208 MODULE FUNCTION SymSmallestEigenVal2 (mat , isFactor , ipiv , sigma , which , &
212- & NCV , maxIter , tol ) &
213- & RESULT(ans)
209+ NCV , maxIter , tol ) RESULT(ans)
214210 REAL (DFP), INTENT (INOUT ) :: mat(:, :)
215- ! !
216211 ! ! Dense matrix
217212 ! ! If isFactor is false, then this matrix will change on return
218213 ! ! in this case, it will contain LU decomposition of `A-sigma*I`
219214 ! ! If isFactor is true, then this matrix will not change
220- ! !
221215 LOGICAL (LGT), INTENT (INOUT ) :: isFactor
222216 ! ! if mat is already factorized, the set isFactor to true
223217 ! ! if mat is not factorized, then set isFactor to false
@@ -244,10 +238,6 @@ MODULE FUNCTION SymSmallestEigenVal2(mat, isFactor, ipiv, sigma, which, &
244238 REAL (DFP) :: ans
245239 ! ! smallest eigenvalue
246240 END FUNCTION SymSmallestEigenVal2
247- END INTERFACE
248-
249- INTERFACE SymSmallestEigenVal
250- MODULE PROCEDURE SymSmallestEigenVal2
251241END INTERFACE SymSmallestEigenVal
252242
253243END MODULE ARPACK_SAUPD
0 commit comments