]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
missing Tvmult implemented
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 3 Oct 2002 07:18:41 +0000 (07:18 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 3 Oct 2002 07:18:41 +0000 (07:18 +0000)
git-svn-id: https://svn.dealii.org/trunk@6595 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/block_sparse_matrix.h

index 25cb8d07846aebac63412d5357bf6b9369abd5b8..c76366bcad88492607689ce64c947c4dc87dc4e0 100644 (file)
@@ -555,6 +555,25 @@ class BlockSparseMatrix : public Subscriptor
 /* ------------------------- Template functions ---------------------- */
 
 
+template <typename number>
+inline
+unsigned int
+BlockSparseMatrix<number>::n_block_cols () const
+{
+  return columns;
+};
+
+
+
+template <typename number>
+inline
+unsigned int
+BlockSparseMatrix<number>::n_block_rows () const
+{
+  return rows;
+};
+
+
 template <typename number>
 inline
 SparseMatrix<number> &
@@ -748,14 +767,22 @@ BlockSparseMatrix<number>::vmult_add (BlockVector<somenumber>       &dst,
 template <typename number>
 template <typename somenumber>
 void
-BlockSparseMatrix<number>::Tvmult (BlockVector<somenumber>   &/*dst*/,
-                                  const BlockVector<somenumber> &/*src*/) const
+BlockSparseMatrix<number>::Tvmult (BlockVector<somenumber>& dst,
+                                  const BlockVector<somenumber>& src) const
 {
-                                  // presently not
-                                  // implemented. should be simple,
-                                  // but don't have the time right
-                                  // now.
-  Assert (false, ExcNotImplemented());
+  Assert (dst.n_blocks() == n_block_cols(),
+         ExcDimensionMismatch(dst.n_blocks(), n_block_cols()));
+  Assert (src.n_blocks() == n_block_rows(),
+         ExcDimensionMismatch(src.n_blocks(), n_block_rows()));
+
+  dst = 0.;
+  
+  for (unsigned int row=0; row<n_block_rows(); ++row)
+    {
+      for (unsigned int col=0; col<n_block_cols(); ++col)
+       block(row,col).Tvmult_add (dst.block(col),
+                                  src.block(row));
+    };
 };
 
 
@@ -763,14 +790,20 @@ BlockSparseMatrix<number>::Tvmult (BlockVector<somenumber>   &/*dst*/,
 template <typename number>
 template <typename somenumber>
 void
-BlockSparseMatrix<number>::Tvmult_add (BlockVector<somenumber>    &/*dst*/,
-                                      const BlockVector<somenumber> &/*src*/) const
+BlockSparseMatrix<number>::Tvmult_add (BlockVector<somenumber>& dst,
+                                      const BlockVector<somenumber>& src) const
 {
-                                  // presently not
-                                  // implemented. should be simple,
-                                  // but don't have the time right
-                                  // now.
-  Assert (false, ExcNotImplemented());
+  Assert (dst.n_blocks() == n_block_cols(),
+         ExcDimensionMismatch(dst.n_blocks(), n_block_cols()));
+  Assert (src.n_blocks() == n_block_rows(),
+         ExcDimensionMismatch(src.n_blocks(), n_block_rows()));
+
+  for (unsigned int row=0; row<n_block_rows(); ++row)
+    {
+      for (unsigned int col=0; col<n_block_cols(); ++col)
+       block(row,col).Tvmult_add (dst.block(col),
+                                  src.block(row));
+    };
 };
 
 
@@ -893,23 +926,4 @@ precondition_Jacobi (BlockVector<somenumber>          &dst,
 };
 
 
-template <typename number>
-inline
-unsigned int
-BlockSparseMatrix<number>::n_block_cols () const
-{
-  return columns;
-};
-
-
-
-template <typename number>
-inline
-unsigned int
-BlockSparseMatrix<number>::n_block_rows () const
-{
-  return rows;
-};
-
-
 #endif    // __deal2__block_sparse_matrix_h

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.