From eddadeaaee8aa720263a3afe2ec9727ea74c83b0 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Sun, 12 Feb 2006 02:33:09 +0000 Subject: [PATCH] Rename a few arguments. Break out member functions. git-svn-id: https://svn.dealii.org/trunk@12324 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/examples/step-20/step-20.cc | 49 +++++++++++++++-------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/deal.II/examples/step-20/step-20.cc b/deal.II/examples/step-20/step-20.cc index f67e11a3f0..90e7a479e6 100644 --- a/deal.II/examples/step-20/step-20.cc +++ b/deal.II/examples/step-20/step-20.cc @@ -742,35 +742,31 @@ void MixedLaplaceProblem::assemble_system () class InverseMatrix : public Subscriptor { public: - InverseMatrix (const SparseMatrix &matrix); + InverseMatrix (const SparseMatrix &m); void vmult (Vector &dst, const Vector &src) const; private: - const SmartPointer > mass_matrix; + const SmartPointer > matrix; mutable GrowingVectorMemory<> vector_memory; }; -InverseMatrix::InverseMatrix (const SparseMatrix &matrix) +InverseMatrix::InverseMatrix (const SparseMatrix &m) : - mass_matrix (&matrix) + matrix (&m) {} void InverseMatrix::vmult (Vector &dst, const Vector &src) const { - SolverControl solver_control (mass_matrix->m(), 1e-8*src.l2_norm()); + SolverControl solver_control (matrix->m(), 1e-8*src.l2_norm()); SolverCG<> cg (solver_control, vector_memory); - cg.solve (*mass_matrix, dst, src, PreconditionIdentity()); - - std::cout << " " << solver_control.last_step() - << " inner iterations needed to obtain convergence." - << std::endl; + cg.solve (*matrix, dst, src, PreconditionIdentity()); } @@ -779,21 +775,10 @@ class SchurComplement { public: SchurComplement (const BlockSparseMatrix &A, - const InverseMatrix &Minv) - : - system_matrix (&A), - m_inverse (&Minv), - tmp1 (A.block(0,0).m()), - tmp2 (A.block(0,0).m()) - {} + const InverseMatrix &Minv); void vmult (Vector &dst, - const Vector &src) const - { - system_matrix->block(0,1).vmult (tmp1, src); - m_inverse->vmult (tmp2, tmp1); - system_matrix->block(1,0).vmult (dst, tmp2); - } + const Vector &src) const; private: const SmartPointer > system_matrix; @@ -803,6 +788,24 @@ class SchurComplement }; +SchurComplement::SchurComplement (const BlockSparseMatrix &A, + const InverseMatrix &Minv) + : + system_matrix (&A), + m_inverse (&Minv), + tmp1 (A.block(0,0).m()), + tmp2 (A.block(0,0).m()) +{} + + +void SchurComplement::vmult (Vector &dst, + const Vector &src) const +{ + system_matrix->block(0,1).vmult (tmp1, src); + m_inverse->vmult (tmp2, tmp1); + system_matrix->block(1,0).vmult (dst, tmp2); +} + template void MixedLaplaceProblem::solve () -- 2.39.5