From: guido Date: Tue, 13 Jul 1999 10:37:08 +0000 (+0000) Subject: subtract_mean_values X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ed06350591e6fc632698a45d2a49dffb5ce53ff;p=dealii-svn.git subtract_mean_values git-svn-id: https://svn.dealii.org/trunk@1571 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/numerics/vectors.h b/deal.II/deal.II/include/numerics/vectors.h index 2e4a8f1e37..3b9fd5bce2 100644 --- a/deal.II/deal.II/include/numerics/vectors.h +++ b/deal.II/deal.II/include/numerics/vectors.h @@ -11,7 +11,7 @@ #include #include - +#include /** * Denote which norm/integral is to be computed. The following possibilities @@ -468,7 +468,26 @@ class VectorTools // Vector &difference, const Quadrature &q, const NormType &norm, - const Function *weight=0); + const Function *weight=0); + + /** + * Mean-value filter for Stokes. + * The pressure in Stokes' + * equations is determined up to a + * constant only. This function + * allows to subtract the mean + * value of the pressure. It is + * usually called in a + * preconditioner and generates + * updates with mean value zero. + * + * Apart from the vector #v# to + * operate on, this function takes + * a bit vector. This has a true + * entry for every pressure component. + */ + static void subtract_mean_value(Vector& v, const + bit_vector& p_select); /** diff --git a/deal.II/deal.II/source/numerics/vectors.cc b/deal.II/deal.II/source/numerics/vectors.cc index 8b5874a6c6..a196449e76 100644 --- a/deal.II/deal.II/source/numerics/vectors.cc +++ b/deal.II/deal.II/source/numerics/vectors.cc @@ -23,6 +23,7 @@ #include #include +#include #include @@ -1102,7 +1103,21 @@ VectorTools::integrate_difference (const DoFHandler &dof, }; }; +template +void +VectorTools::subtract_mean_value(Vector& v, const + bit_vector& p_select) +{ + unsigned int n = v.size(); + Assert(n == p_select.size(), ExcDimensionMismatch(n, p_select.size())); + double s = 0; + for (unsigned int i=0;i;