@@ -40,7 +40,18 @@ struct lapack_potrf {
4040 const int & lda);
4141};
4242
43-
43+ // ============================================================================
44+ // Standard Hermitian Eigenvalue Problem Solvers
45+ // ============================================================================
46+ // The following structures (lapack_heevd and lapack_heevx) implement solvers
47+ // for standard Hermitian eigenvalue problems of the form:
48+ // A * x = lambda * x
49+ // where:
50+ // - A is a Hermitian matrix
51+ // - lambda are the eigenvalues to be computed
52+ // - x are the corresponding eigenvectors
53+ //
54+ // ============================================================================
4455template <typename T, typename Device>
4556struct lapack_heevd {
4657 using Real = typename GetTypeReal<T>::type;
@@ -61,18 +72,15 @@ struct lapack_heevx {
6172 * This function solves the problem A*x = lambda*x, where A is a Hermitian matrix.
6273 * It computes a subset of eigenvalues and, optionally, the corresponding eigenvectors.
6374 *
64- * @param jobz 'N': Compute eigenvalues only; 'V': Compute eigenvalues and eigenvectors.
65- * @param range 'A': All eigenvalues; 'V': Eigenvalues in the half-open interval (vl, vu]; 'I': Eigenvalues with indices il through iu.
66- * @param uplo 'U': Upper triangle of A is stored; 'L': Lower triangle is stored.
6775 * @param dim The order of the matrix A. dim >= 0.
68- * @param Mat On entry, the Hermitian matrix A. On exit, it may be overwritten .
69- * @param vl Lower bound of the interval to search for eigenvalues if range == 'V' .
70- * @param vu Upper bound of the interval to search for eigenvalues if range == 'V' .
71- * @param il Index of the smallest eigenvalue to be returned if range == 'I'.
72- * @param iu Index of the largest eigenvalue to be returned if range == 'I' .
73- * @param m Output: The total number of found eigenvalues.
74- * @param eigen_val Array to store the computed eigenvalues in ascending order.
75- * @param eigen_vec If not nullptr and jobz == 'V', array to store the computed eigenvectors .
76+ * @param lda The leading dimension of the array Mat. lda >= max(1, dim) .
77+ * @param Mat On entry, the Hermitian matrix A. On exit, A is kept .
78+ * @param neig The number of eigenvalues to be found. 0 <= neig <= dim .
79+ * @param eigen_val On normal exit, the first \p neig elements contain the selected
80+ * eigenvalues in ascending order .
81+ * @param eigen_vec If eigen_vec is not nullptr, then on exit it contains the
82+ * orthonormal eigenvectors of the matrix A. The eigenvectors are stored in
83+ * the columns of eigen_vec, in the same order as the eigenvalues .
7684 *
7785 * @note
7886 * See LAPACK ZHEEVX or CHEEVX documentation for more details.
@@ -87,6 +95,21 @@ struct lapack_heevx {
8795 T *eigen_vec);
8896};
8997
98+
99+ // ============================================================================
100+ // Generalized Hermitian-definite Eigenvalue Problem Solvers
101+ // ============================================================================
102+ // The following structures (lapack_hegvd and lapack_hegvx) implement solvers
103+ // for generalized Hermitian-definite eigenvalue problems of the form:
104+ // A * x = lambda * B * x
105+ // where:
106+ // - A is a Hermitian matrix
107+ // - B is a Hermitian positive definite matrix
108+ // - lambda are the eigenvalues to be computed
109+ // - x are the corresponding eigenvectors
110+ //
111+ // ============================================================================
112+
90113template <typename T, typename Device>
91114struct lapack_hegvd {
92115 using Real = typename GetTypeReal<T>::type;
0 commit comments