]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Merge pull request #6062 from BenBrands/MRRR
authorBruno Turcksin <bruno.turcksin@gmail.com>
Mon, 9 Apr 2018 13:39:29 +0000 (09:39 -0400)
committerGitHub <noreply@github.com>
Mon, 9 Apr 2018 13:39:29 +0000 (09:39 -0400)
ScaLAPACKMatrix: add eigensolver routines using MRRR algorithm

1  2 
include/deal.II/lac/scalapack.h
include/deal.II/lac/scalapack.templates.h
source/lac/scalapack.cc

index c5f8b5bb9be5e5bd7b5c5e74a68ae5bbb6c52a5c,0f0a1bf3e73764a936b6d1814d60d677acfc3027..4a12cde77980d4039cbeb587c40b60a51075a18d
@@@ -453,24 -421,53 +453,53 @@@ public
    std::vector<NumberType> eigenpairs_symmetric_by_value(const std::pair<NumberType,NumberType> &value_limits,
                                                          const bool compute_eigenvectors);
  
+   /**
+    * Computing selected eigenvalues and, optionally, the eigenvectors of the real symmetric
+    * matrix $\mathbf{A} \in \mathbb{R}^{M \times M}$ using the MRRR algorithm.
+    *
+    * The eigenvalues/eigenvectors are selected by prescribing a range of indices @p index_limits.
+    *
+    * If successful, the computed eigenvalues are arranged in ascending order.
+    * The eigenvectors are stored in the columns of the matrix, thereby
+    * overwriting the original content of the matrix.
+    *
+    * If all eigenvalues/eigenvectors have to be computed, pass the closed interval $ \left[ 0, M-1 \right] $ in @p index_limits.
+    *
+    * Pass the closed interval $ \left[ M-r, M-1 \right] $ if the $r$ largest eigenvalues/eigenvectors are desired.
+    */
+   std::vector<NumberType> eigenpairs_symmetric_by_index_MRRR(const std::pair<unsigned int,unsigned int> &index_limits,
+                                                              const bool compute_eigenvectors);
+   /**
+    * Computing selected eigenvalues and, optionally, the eigenvectors of the real symmetric
+    * matrix $\mathbf{A} \in \mathbb{R}^{M \times M}$ using the MRRR algorithm.
+    * The eigenvalues/eigenvectors are selected by prescribing a range of values @p value_limits for the eigenvalues.
+    *
+    * If successful, the computed eigenvalues are arranged in ascending order.
+    * The eigenvectors are stored in the columns of the matrix, thereby
+    * overwriting the original content of the matrix.
+    */
+   std::vector<NumberType> eigenpairs_symmetric_by_value_MRRR(const std::pair<NumberType,NumberType> &value_limits,
+                                                              const bool compute_eigenvectors);
    /**
    * Computing the singular value decomposition (SVD) of a
 -  * matrix $A \in \mathbb{R}^{M \times N}$, optionally computing the left and/or right
 -  * singular vectors. The SVD is written as $A = U * \Sigma * V^T$
 -  * with $\Sigma \in \mathbb{R}^{M \times N}$ as a diagonal matrix,
 -  * $U \in \mathbb{R}^{M \times M}$ and $U \in \mathbb{R}^{M \times M}$
 -  * as orthogonal matrices. The diagonal elements of $\Sigma$
 -  * are the singular values of $A$ and the columns of $U$ and $V$ are the
 +  * matrix $\mathbf{A} \in \mathbb{R}^{M \times N}$, optionally computing the left and/or right
 +  * singular vectors. The SVD is written as $\mathbf{A} = \mathbf{U} \cdot \mathbf{\Sigma} \cdot \mathbf{V}^T$
 +  * with $\mathbf{\Sigma} \in \mathbb{R}^{M \times N}$ as a diagonal matrix,
 +  * $\mathbf{U} \in \mathbb{R}^{M \times M}$ and $\mathbf{V} \in \mathbb{R}^{M \times M}$
 +  * as orthogonal matrices. The diagonal elements of $\mathbf{\Sigma}$
 +  * are the singular values of $A$ and the columns of $\mathbf{U}$ and $\mathbf{V}$ are the
    * corresponding left and right singular vectors, respectively. The
    * singular values are returned in decreasing order and only the first $\min(M,N)$
 -  * columns of $U$ and rows of VT = $V^T$ are computed.
 +  * columns of $\mathbf{U}$ and rows of $\mathbf{V}^T$ are computed.
    *
    * Upon return the content of the matrix is unusable.
 -  * The matrix A must have identical block cyclic distribution for the rows and column.
 +  * The matrix $\mathbf{A}$ must have identical block cyclic distribution for the rows and column.
    *
 -  * If left singular vectors are required matrices $A$ and $U$
 +  * If left singular vectors are required matrices $\mathbf{A}$ and $\mathbf{U}$
    * have to be constructed with the same process grid and block cyclic distribution.
 -  * If right singular vectors are required matrices $A$ and $V^T$
 +  * If right singular vectors are required matrices $\mathbf{A}$ and $\mathbf{V}^T$
    * have to be constructed with the same process grid  and block cyclic distribution.
    *
    * To avoid computing the left and/or right singular vectors the function accepts <code>nullptr</code>
Simple merge

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.