]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
in-place filtering
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 7 Oct 2003 21:18:31 +0000 (21:18 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 7 Oct 2003 21:18:31 +0000 (21:18 +0000)
git-svn-id: https://svn.dealii.org/trunk@8088 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/matrix_lib.h
deal.II/lac/include/lac/matrix_lib.templates.h
deal.II/lac/source/matrix_lib.cc

index 04d48823c0c4c949afa65cbb2589e65af76a75c9..4864cf92e2b7becc023669632bb27914851c0215 100644 (file)
@@ -92,7 +92,7 @@ class ProductMatrix : public PointerMatrixBase<VECTOR>
  * @p{BlockVector}, then an additional parameter selects a single
  * component for this operation.
  *
- * @author Guido Kanschat, 2002
+ * @author Guido Kanschat, 2002, 2003
  */
 class MeanValueFilter : public Subscriptor
 {
@@ -103,6 +103,18 @@ class MeanValueFilter : public Subscriptor
                                      */
     MeanValueFilter(unsigned int component = static_cast<unsigned int>(-1));
 
+                                    /**
+                                     * Subtract mean value from @p{v}.
+                                     */
+    template <typename number>
+    void filter (Vector<number>& v) const;
+    
+                                    /**
+                                     * Subtract mean value from @p{v}.
+                                     */
+    template <typename number>
+    void filter (BlockVector<number>& v) const;
+    
                                     /**
                                      * Return the source vector with
                                      * subtracted mean value.
index 01bf6fa0ecad721457bed255510db885e4220662..f2115fce1a61cc354155a14c183a0fa1308c6364 100644 (file)
 #include <lac/block_vector.h>
 
 
+template <typename number>
+void
+MeanValueFilter::filter(Vector<number>& v) const
+{
+  number mean = v.mean_value();
+
+  for (unsigned int i=0;i<v.size();++i)
+    v(i) -= mean;
+}
+
+
+
 template <typename number>
 void
 MeanValueFilter::vmult(Vector<number>& dst,
@@ -50,6 +62,22 @@ MeanValueFilter::vmult_add(Vector<number>& dst,
 
 
 
+template <typename number>
+void
+MeanValueFilter::filter(BlockVector<number>& v) const
+{
+  Assert (component != static_cast<unsigned int>(-1),
+         ExcNotInitialized());
+  
+  for (unsigned int i=0;i<v.n_blocks();++i)
+    if (i == component)
+      vmult(v.block(i), v.block(i));
+    else
+      v.block(i) = v.block(i);
+}
+
+
+
 template <typename number>
 void
 MeanValueFilter::vmult(BlockVector<number>& dst,
index 6c648d356ced11a8213a2c525a9d07d9d51b1460..3cf1345ed2bea9ba4fe6fe83d82e71aa1c86707a 100644 (file)
@@ -19,6 +19,10 @@ MeanValueFilter::MeanValueFilter(unsigned int component)
                component(component)
 {}
 
+template void MeanValueFilter::filter(Vector<float>&) const;
+template void MeanValueFilter::filter(Vector<double>&) const;
+template void MeanValueFilter::filter(BlockVector<float>&) const;
+template void MeanValueFilter::filter(BlockVector<double>&) const;
 template void MeanValueFilter::vmult(Vector<float>&,
                                     const Vector<float>&) const;
 template void MeanValueFilter::vmult(Vector<double>&,

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.