From da13db4c6eddf4363fd23257d324122e5f132abb Mon Sep 17 00:00:00 2001 From: guido Date: Tue, 7 Oct 2003 21:18:31 +0000 Subject: [PATCH] in-place filtering git-svn-id: https://svn.dealii.org/trunk@8088 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/lac/include/lac/matrix_lib.h | 14 +++++++++- .../lac/include/lac/matrix_lib.templates.h | 28 +++++++++++++++++++ deal.II/lac/source/matrix_lib.cc | 4 +++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/deal.II/lac/include/lac/matrix_lib.h b/deal.II/lac/include/lac/matrix_lib.h index 04d48823c0..4864cf92e2 100644 --- a/deal.II/lac/include/lac/matrix_lib.h +++ b/deal.II/lac/include/lac/matrix_lib.h @@ -92,7 +92,7 @@ class ProductMatrix : public PointerMatrixBase * @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(-1)); + /** + * Subtract mean value from @p{v}. + */ + template + void filter (Vector& v) const; + + /** + * Subtract mean value from @p{v}. + */ + template + void filter (BlockVector& v) const; + /** * Return the source vector with * subtracted mean value. diff --git a/deal.II/lac/include/lac/matrix_lib.templates.h b/deal.II/lac/include/lac/matrix_lib.templates.h index 01bf6fa0ec..f2115fce1a 100644 --- a/deal.II/lac/include/lac/matrix_lib.templates.h +++ b/deal.II/lac/include/lac/matrix_lib.templates.h @@ -18,6 +18,18 @@ #include +template +void +MeanValueFilter::filter(Vector& v) const +{ + number mean = v.mean_value(); + + for (unsigned int i=0;i void MeanValueFilter::vmult(Vector& dst, @@ -50,6 +62,22 @@ MeanValueFilter::vmult_add(Vector& dst, +template +void +MeanValueFilter::filter(BlockVector& v) const +{ + Assert (component != static_cast(-1), + ExcNotInitialized()); + + for (unsigned int i=0;i void MeanValueFilter::vmult(BlockVector& dst, diff --git a/deal.II/lac/source/matrix_lib.cc b/deal.II/lac/source/matrix_lib.cc index 6c648d356c..3cf1345ed2 100644 --- a/deal.II/lac/source/matrix_lib.cc +++ b/deal.II/lac/source/matrix_lib.cc @@ -19,6 +19,10 @@ MeanValueFilter::MeanValueFilter(unsigned int component) component(component) {} +template void MeanValueFilter::filter(Vector&) const; +template void MeanValueFilter::filter(Vector&) const; +template void MeanValueFilter::filter(BlockVector&) const; +template void MeanValueFilter::filter(BlockVector&) const; template void MeanValueFilter::vmult(Vector&, const Vector&) const; template void MeanValueFilter::vmult(Vector&, -- 2.39.5