From f4de9921d690d0d470945e1b563da31720f117a6 Mon Sep 17 00:00:00 2001 From: Martin Kronbichler Date: Wed, 25 Aug 2010 15:06:52 +0000 Subject: [PATCH] Simplify a lot of assertions. Add instantiations for block sparsity patterns. git-svn-id: https://svn.dealii.org/trunk@21708 0785d39b-7218-0410-832d-ea1e28bc413d --- .../include/lac/constraint_matrix.templates.h | 129 +++++++----------- deal.II/lac/source/constraint_matrix.cc | 12 +- 2 files changed, 57 insertions(+), 84 deletions(-) diff --git a/deal.II/lac/include/lac/constraint_matrix.templates.h b/deal.II/lac/include/lac/constraint_matrix.templates.h index 980933b628..1bf937f70c 100644 --- a/deal.II/lac/include/lac/constraint_matrix.templates.h +++ b/deal.II/lac/include/lac/constraint_matrix.templates.h @@ -68,9 +68,7 @@ ConstraintMatrix::condense (const VectorType &uncondensed, VectorType &condensed) const { Assert (sorted == true, ExcMatrixNotClosed()); - Assert (condensed.size()+n_constraints() == uncondensed.size(), - ExcDimensionMismatch(condensed.size()+n_constraints(), - uncondensed.size())); + AssertDimension (condensed.size()+n_constraints(), uncondensed.size()); // store for each line of the // vector its new line number after @@ -187,15 +185,12 @@ ConstraintMatrix::condense (const SparseMatrix &uncondensed, ExcNotQuadratic()); Assert (condensed.n() == condensed.m(), ExcNotQuadratic()); - Assert (condensed.n()+n_constraints() == uncondensed.n(), - ExcDimensionMismatch(condensed.n()+n_constraints(), uncondensed.n())); + AssertDimension (condensed.n()+n_constraints(), uncondensed.n()); if (use_vectors == true) { - Assert (condensed_vector.size()+n_constraints() == uncondensed_vector.size(), - ExcDimensionMismatch(condensed_vector.size()+n_constraints(), - uncondensed_vector.size())); - Assert (condensed_vector.size() == condensed.m(), - ExcDimensionMismatch(condensed_vector.size(), condensed.m())); + AssertDimension (condensed_vector.size()+n_constraints(), + uncondensed_vector.size()); + AssertDimension (condensed_vector.size(), condensed.m()); } // store for each line of the matrix @@ -354,10 +349,7 @@ ConstraintMatrix::condense (SparseMatrix &uncondensed, Assert (sparsity.n_rows() == sparsity.n_cols(), ExcNotQuadratic()); if (use_vectors == true) - { - Assert (vec.size() == sparsity.n_rows(), - ExcDimensionMismatch(vec.size(), sparsity.n_rows())); - } + AssertDimension (vec.size(), sparsity.n_rows()); double average_diagonal = 0; for (unsigned int i=0; i &uncondensed, if (use_vectors == true) { - Assert (vec.size() == sparsity.n_rows(), - ExcDimensionMismatch(vec.size(), sparsity.n_rows())); - Assert (vec.n_blocks() == sparsity.n_block_rows(), - ExcDimensionMismatch(vec.n_blocks(), sparsity.n_block_rows())); + AssertDimension (vec.size(), sparsity.n_rows()); + AssertDimension (vec.n_blocks(), sparsity.n_block_rows()); } double average_diagonal = 0; @@ -730,13 +720,10 @@ distribute_local_to_global (const Vector &local_vector, VectorType &global_vector, const FullMatrix &local_matrix) const { - Assert (local_vector.size() == local_dof_indices.size(), - ExcDimensionMismatch(local_vector.size(), local_dof_indices.size())); Assert (sorted == true, ExcMatrixNotClosed()); - Assert (local_matrix.m() == local_dof_indices.size(), - ExcDimensionMismatch(local_matrix.m(), local_dof_indices.size())); - Assert (local_matrix.n() == local_dof_indices.size(), - ExcDimensionMismatch(local_matrix.n(), local_dof_indices.size())); + AssertDimension (local_vector.size(), local_dof_indices.size()); + AssertDimension (local_matrix.m(), local_dof_indices.size()); + AssertDimension (local_matrix.n(), local_dof_indices.size()); const unsigned int n_local_dofs = local_vector.size(); if (lines.size() == 0) @@ -811,9 +798,7 @@ ConstraintMatrix::distribute (const VectorType &condensed, VectorType &uncondensed) const { Assert (sorted == true, ExcMatrixNotClosed()); - Assert (condensed.size()+n_constraints() == uncondensed.size(), - ExcDimensionMismatch(condensed.size()+n_constraints(), - uncondensed.size())); + AssertDimension (condensed.size()+n_constraints(), uncondensed.size()); // store for each line of the new vector // its old line number before @@ -945,7 +930,7 @@ namespace internals { *this = (in); } - + inline Distributing & Distributing::operator = (const Distributing &in) { @@ -1032,7 +1017,7 @@ namespace internals void append_index (const unsigned int index, const std::pair &pair) { - Assert (index < n_used_elements, ExcIndexRange (index, 0, n_used_elements)); + AssertIndexRange (index, n_used_elements); const unsigned int my_size = individual_size[index]; if (my_size == element_size) { @@ -1092,8 +1077,8 @@ namespace internals n_active_rows (n_local_rows), n_inhomogeneous_rows (0) {} - - + + // implemented below void insert_index (const unsigned int global_row, const unsigned int local_row, @@ -1112,32 +1097,32 @@ namespace internals os << std::endl << "Global:"; for (unsigned int i=0 ; i &block_starts) { - Assert (block_starts.size() == block_object.n_block_rows() + 1, - ExcDimensionMismatch(block_starts.size(), - block_object.n_block_rows()+1)); + AssertDimension (block_starts.size(), block_object.n_block_rows()+1); typedef std::vector::iterator row_iterator; row_iterator block_indices = global_rows.total_row_indices.begin(); @@ -1422,9 +1406,7 @@ namespace internals std::vector &row_indices, std::vector &block_starts) { - Assert (block_starts.size() == block_object.n_block_rows() + 1, - ExcDimensionMismatch(block_starts.size(), - block_object.n_block_rows()+1)); + AssertDimension (block_starts.size(), block_object.n_block_rows()+1); typedef std::vector::iterator row_iterator; row_iterator col_indices = row_indices.begin(); @@ -1525,8 +1507,7 @@ namespace internals unsigned int * &col_ptr, number * &val_ptr) { - Assert (global_cols.size() >= column_end, - ExcIndexRange (column_end, 0, global_cols.size())); + AssertIndexRange (column_end-1, global_cols.size()); const unsigned int loc_row = global_rows.local_row(i); // fast function if there are no indirect @@ -1624,8 +1605,7 @@ namespace internals const FullMatrix &local_matrix, SparseMatrix *sparse_matrix) { - Assert (global_rows.size() >= column_end, - ExcIndexRange (column_end, 0, global_rows.size())); + AssertIndexRange (column_end-1, global_rows.size()); const SparsityPattern & sparsity = sparse_matrix->get_sparsity_pattern(); #ifndef DEBUG if (sparsity.n_nonzero_elements() == 0) @@ -1659,8 +1639,7 @@ namespace internals { if (global_rows.have_indirect_rows() == false) { - Assert(loc_row < local_matrix.m(), - ExcIndexRange(loc_row, 0, local_matrix.m())); + AssertIndexRange (loc_row, local_matrix.m()); const double * matrix_ptr = &local_matrix(loc_row, 0); for (unsigned int j=column_start; j >::value; - Assert (local_matrix.n() == local_dof_indices.size(), - ExcDimensionMismatch(local_matrix.n(), local_dof_indices.size())); - Assert (local_matrix.m() == local_dof_indices.size(), - ExcDimensionMismatch(local_matrix.m(), local_dof_indices.size())); + AssertDimension (local_matrix.n(), local_dof_indices.size()); + AssertDimension (local_matrix.m(), local_dof_indices.size()); Assert (global_matrix.m() == global_matrix.n(), ExcNotQuadratic()); if (use_vectors == true) { - Assert (local_matrix.m() == local_vector.size(), - ExcDimensionMismatch(local_matrix.m(), local_vector.size())); - Assert (global_matrix.m() == global_vector.size(), - ExcDimensionMismatch(global_matrix.m(), global_vector.size())); + AssertDimension (local_matrix.m(), local_vector.size()); + AssertDimension (global_matrix.m(), global_vector.size()); } Assert (sorted == true, ExcMatrixNotClosed()); @@ -2461,19 +2434,15 @@ distribute_local_to_global (const FullMatrix &local_matrix, const bool use_dealii_matrix = types_are_equal >::value; - Assert (local_matrix.n() == local_dof_indices.size(), - ExcDimensionMismatch(local_matrix.n(), local_dof_indices.size())); - Assert (local_matrix.m() == local_dof_indices.size(), - ExcDimensionMismatch(local_matrix.m(), local_dof_indices.size())); + AssertDimension (local_matrix.n(), local_dof_indices.size()); + AssertDimension (local_matrix.m(), local_dof_indices.size()); Assert (global_matrix.m() == global_matrix.n(), ExcNotQuadratic()); Assert (global_matrix.n_block_rows() == global_matrix.n_block_cols(), ExcNotQuadratic()); if (use_vectors == true) { - Assert (local_matrix.m() == local_vector.size(), - ExcDimensionMismatch(local_matrix.m(), local_vector.size())); - Assert (global_matrix.m() == global_vector.size(), - ExcDimensionMismatch(global_matrix.m(), global_vector.size())); + AssertDimension (local_matrix.m(), local_vector.size()); + AssertDimension (global_matrix.m(), global_vector.size()); } Assert (sorted == true, ExcMatrixNotClosed()); @@ -2580,8 +2549,7 @@ add_entries_local_to_global (const std::vector &local_dof_indices, if (dof_mask.n_rows() == n_local_dofs) { dof_mask_is_active = true; - Assert (dof_mask.n_cols() == n_local_dofs, - ExcDimensionMismatch(dof_mask.n_cols(), n_local_dofs)); + AssertDimension (dof_mask.n_cols(), n_local_dofs); } // if the dof mask is not active, all we @@ -2720,8 +2688,7 @@ add_entries_local_to_global (const std::vector &local_dof_indices, if (dof_mask.n_rows() == n_local_dofs) { dof_mask_is_active = true; - Assert (dof_mask.n_cols() == n_local_dofs, - ExcDimensionMismatch(dof_mask.n_cols(), n_local_dofs)); + AssertDimension (dof_mask.n_cols(), n_local_dofs); } if (dof_mask_is_active == false) diff --git a/deal.II/lac/source/constraint_matrix.cc b/deal.II/lac/source/constraint_matrix.cc index 689e63be6c..e0d0d0d133 100644 --- a/deal.II/lac/source/constraint_matrix.cc +++ b/deal.II/lac/source/constraint_matrix.cc @@ -1946,7 +1946,7 @@ ConstraintMatrix::distribute (TrilinosWrappers::MPI::Vector &vec) const AssertThrow (vec.vector_partitioner().IsOneToOne(), ExcMessage ("Distribute does not work on vectors with overlapping parallel partitioning.")); - + typedef std::vector::const_iterator constraint_iterator; ConstraintLine index_comparison; index_comparison.line = vec.local_range().first; @@ -2155,7 +2155,7 @@ ConstraintMatrix::distribute (PETScWrappers::MPI::Vector &vec) const IndexSet local_range_is (vec.size()); local_range_is.add_range(local_range.first, local_range.second); - + // create a vector and import those indices PETScWrappers::MPI::Vector ghost_vec(vec.get_mpi_communicator(), local_range_is, @@ -2524,7 +2524,13 @@ BLOCK_MATRIX_VECTOR_FUNCTIONS(TrilinosWrappers::BlockSparseMatrix, TrilinosWrapp SparsityType &, \ const bool, \ const Table<2,bool> &, \ - internal::bool2type) const + internal::bool2type) const; \ + template void ConstraintMatrix::add_entries_local_to_global (\ + const std::vector &, \ + const std::vector &, \ + SparsityType &, \ + const bool, \ + const Table<2,bool> &) const SPARSITY_FUNCTIONS(SparsityPattern); SPARSITY_FUNCTIONS(CompressedSparsityPattern); -- 2.39.5