From c95ab3c08aba1e2a0e011c874a6585d5f81ad8eb Mon Sep 17 00:00:00 2001 From: bangerth Date: Wed, 20 Aug 2008 13:02:45 +0000 Subject: [PATCH] Simplify the code that computes row lengths in the AMG. git-svn-id: https://svn.dealii.org/trunk@16608 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/examples/step-31/step-31.cc | 34 ++++++++++------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/deal.II/examples/step-31/step-31.cc b/deal.II/examples/step-31/step-31.cc index 9e332ae3bd..8c9599a55b 100644 --- a/deal.II/examples/step-31/step-31.cc +++ b/deal.II/examples/step-31/step-31.cc @@ -114,7 +114,7 @@ class PreconditionerTrilinosAmg : public Subscriptor public: PreconditionerTrilinosAmg (); - void initialize (const SparseMatrix &preconditioner_matrix, + void initialize (const SparseMatrix &matrix, const std::vector &null_space, const unsigned int null_space_dimension, const bool higher_order_elements, @@ -129,8 +129,8 @@ class PreconditionerTrilinosAmg : public Subscriptor boost::shared_ptr ml_precond; Epetra_SerialComm communicator; - std::auto_ptr Map; - std::auto_ptr Matrix; + boost::shared_ptr Map; + boost::shared_ptr Matrix; }; @@ -138,7 +138,7 @@ PreconditionerTrilinosAmg::PreconditionerTrilinosAmg () {} void PreconditionerTrilinosAmg::initialize ( - const SparseMatrix &preconditioner_matrix, + const SparseMatrix &matrix, const std::vector &null_space, const unsigned int null_space_dimension, const bool elliptic, @@ -146,9 +146,8 @@ void PreconditionerTrilinosAmg::initialize ( const bool output_details ) { - unsigned int n_u = preconditioner_matrix.m(); - const SparsityPattern *sparsity_pattern = - &(preconditioner_matrix.get_sparsity_pattern()); + const unsigned int n_u = matrix.m(); + const SparsityPattern *sparsity_pattern = &(matrix.get_sparsity_pattern()); // Init Epetra Matrix, avoid // storing the nonzero elements. @@ -156,19 +155,10 @@ void PreconditionerTrilinosAmg::initialize ( Map.reset (new Epetra_Map(n_u, 0, communicator)); std::vector row_lengths (n_u); - for (unsigned int row=0; rowrow_length (row); - unsigned int local_length = 0; - for (unsigned int col=0; colcolumn_number (row, col); - if (std::abs(preconditioner_matrix (row, col_index)) > 1e-13) - local_length += 1; - } - row_lengths[row] = local_length; - } + for (SparseMatrix::const_iterator p = matrix.begin(); + p != matrix.end(); ++p) + if (std::abs(p->value()) > 1e-13) + ++row_lengths[p->row()]; Matrix.reset (new Epetra_CrsMatrix(Copy, *Map, &row_lengths[0], true)); @@ -190,12 +180,12 @@ void PreconditionerTrilinosAmg::initialize ( for (unsigned int col=0; colcolumn_number (row, col); - if (std::abs(preconditioner_matrix (row, col_index)) > 1e-13) + if (std::abs(matrix (row, col_index)) > 1e-13) { row_indices[col_counter] = sparsity_pattern->column_number (row, col); values[col_counter] = - preconditioner_matrix (row, row_indices[col_counter]); + matrix (row, row_indices[col_counter]); ++col_counter; } } -- 2.39.5