]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Allow LAAPCKFullMatrix to be reinitialised (reset state).
authoryoung <young@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 10 Apr 2014 09:06:33 +0000 (09:06 +0000)
committeryoung <young@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 10 Apr 2014 09:06:33 +0000 (09:06 +0000)
git-svn-id: https://svn.dealii.org/trunk@32754 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/lac/lapack_full_matrix.h
deal.II/source/lac/lapack_full_matrix.cc

index ddff7b1a090a87c2ca22c26b236e2b8dbf50fa14..4f97d3464edf276edfc7df2477beb248a27d98a5 100644 (file)
@@ -70,7 +70,7 @@ public:
    *
    * By default, no memory is allocated.
    */
-  explicit LAPACKFullMatrix (const size_type n = 0);
+  explicit LAPACKFullMatrix (const size_type size = 0);
 
 
   /**
@@ -79,6 +79,7 @@ public:
   LAPACKFullMatrix (const size_type rows,
                     const size_type cols);
 
+
   /**
    * Copy constructor. This constructor does a deep copy of the
    * matrix. Therefore, it poses a possible efficiency problem, if for
@@ -131,6 +132,21 @@ public:
   template <class MATRIX>
   void copy_from (const MATRIX &);
 
+  /**
+   * Regenerate the current matrix by one that has the same properties
+   * as if it were created by the constructor of this class with the
+   * same argument list as this present function.
+   */
+  void reinit (const size_type size);
+
+  /**
+   * Regenerate the current matrix by one that has the same properties
+   * as if it were created by the constructor of this class with the
+   * same argument list as this present function.
+   */
+  void reinit (const size_type rows,
+              const size_type cols);
+
   /**
    * Return the dimension of the range space. @note The matrix is of
    * dimension $m \times n$.
@@ -565,10 +581,11 @@ public:
                         const double        threshold   = 0.) const;
 
 private:
-
+  
   /**
-   * Since LAPACK operations notoriously change the meaning of the matrix
-   * entries, we record the current state after the last operation here.
+   * Since LAPACK operations notoriously change the meaning of the
+   * matrix entries, we record the current state after the last
+   * operation here.
    */
   LAPACKSupport::State state;
 
index 98aa0a1d52dcc967b83f113c6126f07b3b56eefb..f1e45edc7f04d8480f557620399bfcc658d360a6 100644 (file)
@@ -42,7 +42,7 @@ template <typename number>
 LAPACKFullMatrix<number>::LAPACKFullMatrix (const size_type m,
                                            const size_type n)
   :
-  TransposeTable<number> (m,n),
+  TransposeTable<number> (m, n),
   state (matrix)
 {}
 
@@ -65,6 +65,25 @@ LAPACKFullMatrix<number>::operator = (const LAPACKFullMatrix<number> &M)
 }
 
 
+template <typename number>
+void
+LAPACKFullMatrix<number>::reinit (const size_type n)
+{
+  this->TransposeTable<number>::reinit (n, n);
+  state = LAPACKSupport::matrix;
+}
+
+
+template <typename number>
+void
+LAPACKFullMatrix<number>::reinit (const size_type m,
+                                 const size_type n)
+{
+  this->TransposeTable<number>::reinit (m, n);
+  state = LAPACKSupport::matrix;
+}
+
+
 template <typename number>
 template <typename number2>
 LAPACKFullMatrix<number> &
@@ -738,6 +757,7 @@ LAPACKFullMatrix<number>::compute_eigenvalues_symmetric(const number        lowe
 
   eigenvalues.reinit(n_eigenpairs);
   eigenvectors.reinit(nn, n_eigenpairs, true);
+
   for (size_type i=0; i < static_cast<size_type> (n_eigenpairs); ++i)
     {
       eigenvalues(i) = wr[i];
@@ -838,6 +858,7 @@ LAPACKFullMatrix<number>::compute_generalized_eigenvalues_symmetric(
 
   eigenvalues.reinit(n_eigenpairs);
   eigenvectors.resize(n_eigenpairs);
+
   for (size_type i=0; i < static_cast<size_type> (n_eigenpairs); ++i)
     {
       eigenvalues(i) = wr[i];

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.