From: guido Date: Mon, 6 Nov 2000 09:56:55 +0000 (+0000) Subject: BlockIndices is not template anymore X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8137a91a4703312dd8c289d9de543f73eb1c14f0;p=dealii-svn.git BlockIndices is not template anymore git-svn-id: https://svn.dealii.org/trunk@3472 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/dofs/dof_constraints.h b/deal.II/deal.II/include/dofs/dof_constraints.h index 25edb18ca9..8158e65c0a 100644 --- a/deal.II/deal.II/include/dofs/dof_constraints.h +++ b/deal.II/deal.II/include/dofs/dof_constraints.h @@ -23,7 +23,7 @@ class SparsityPattern; template class BlockSparsityPattern; template class SparseMatrix; template class BlockSparseMatrix; -template class BlockIndices; +class BlockIndices; /** * This class represents the matrix denoting the distribution of the degrees diff --git a/deal.II/deal.II/include/dofs/dof_constraints.templates.h b/deal.II/deal.II/include/dofs/dof_constraints.templates.h index 129fbcd98d..6deb241407 100644 --- a/deal.II/deal.II/include/dofs/dof_constraints.templates.h +++ b/deal.II/deal.II/include/dofs/dof_constraints.templates.h @@ -28,7 +28,7 @@ void ConstraintMatrix::condense (BlockSparsityPattern &sparsity) Assert (sparsity.get_column_indices() == sparsity.get_row_indices(), ExcMatrixNotSquare()); - const BlockIndices & + const BlockIndices & index_mapping = sparsity.get_column_indices(); // store for each index whether it @@ -415,7 +415,7 @@ ConstraintMatrix::condense (BlockSparseMatrix &uncondensed Assert (sparsity.get_column_indices() == sparsity.get_row_indices(), ExcMatrixNotSquare()); - const BlockIndices & + const BlockIndices & index_mapping = sparsity.get_column_indices(); // store for each index whether it diff --git a/deal.II/deal.II/source/numerics/matrices.cc b/deal.II/deal.II/source/numerics/matrices.cc index 0e8213c06f..fa68e4f9fe 100644 --- a/deal.II/deal.II/source/numerics/matrices.cc +++ b/deal.II/deal.II/source/numerics/matrices.cc @@ -755,7 +755,7 @@ MatrixTools::apply_boundary_values (const map &boundar // the row and column mappings are // equal, store a pointer on only // one of them - const BlockIndices & + const BlockIndices & index_mapping = sparsity_pattern.get_column_indices(); // now loop over all boundary dofs diff --git a/deal.II/lac/include/lac/block_indices.h b/deal.II/lac/include/lac/block_indices.h index c127e83cba..880caef79a 100644 --- a/deal.II/lac/include/lac/block_indices.h +++ b/deal.II/lac/include/lac/block_indices.h @@ -25,36 +25,37 @@ * useful if a matrix is composed of several blocks, where you have to * translate global row and column indices to local ones. * - * @author Wolfgang Bangerth, 2000 + * @author Wolfgang Bangerth, Guido Kanschat, 2000 */ -template class BlockIndices { public: /** - * Defaulut constructor. Set all - * indices denoting the start of - * the blocks to zero. + * Default + * constructor. Initialize for + * @p{n_blocks} blocks and set + * all block sizes to zero. */ - BlockIndices (); + BlockIndices (const unsigned int n_blocks); /** * Constructor. Initialize the - * number of indices within each - * block from the given - * argument. The size of the - * vector shall be equal to - * @p{n_blocks}. + * number of entries in each + * block @p{i} as @p{n[i]}. The + * number of blocks will be the + * size of the vector */ BlockIndices (const vector &n); /** - * Reset the number of indices - * within each block from the - * given argument. The size of - * the vector shall be equal to - * @p{n_blocks}. + * Reinitialize the number of + * indices within each block from + * the given argument. The number + * of blocks will be adjusted to + * the size of @p{n} and the size + * of block @p{i} is set to + * @p{n[i]}. */ void reinit (const vector &n); @@ -64,7 +65,7 @@ class BlockIndices * for the global index @p{i}. The * first element of the pair is * the block, the second the - * index within that. + * index within it. */ pair global_to_local (const unsigned int i) const; @@ -76,17 +77,24 @@ class BlockIndices unsigned int local_to_global (const unsigned int block, const unsigned int index) const; + /** + * Number of blocks in index field. + */ + unsigned int size () const; + /** * Return the total number of * indices accumulated over all - * blocks. + * blocks, that is, the dimension + * of the vector space of the + * block vector. */ unsigned int total_size () const; /** * Copy operator. */ - BlockIndices & operator = (const BlockIndices &b); + BlockIndices & operator = (const BlockIndices &b); /** * Compare whether two objects @@ -94,31 +102,39 @@ class BlockIndices * starting indices of all blocks * are equal. */ - bool operator == (const BlockIndices &b) const; + bool operator == (const BlockIndices &b) const; /** * Swap the contents of these two * objects. */ - void swap (BlockIndices &b); + void swap (BlockIndices &b); private: + /** + * Number of blocks. This is made + * constant to avoid accidental + * changes during lifetime. + */ + unsigned int n_blocks; + /** * Global starting index of each * vector. The last and redundant * value is the total number of * entries. */ - unsigned int start_indices[n_blocks+1]; + vector start_indices; }; /* ---------------------- template and inline functions ------------------- */ -template inline -BlockIndices::BlockIndices () +BlockIndices::BlockIndices (unsigned int n_blocks) + : n_blocks(n_blocks), + start_indices(n_blocks) { for (unsigned int i=0; i<=n_blocks; ++i) start_indices[i] = 0; @@ -126,23 +142,23 @@ BlockIndices::BlockIndices () -template inline -BlockIndices::BlockIndices (const vector &n) +BlockIndices::BlockIndices (const vector &n) { reinit (n); }; -template inline void -BlockIndices::reinit (const vector &n) +BlockIndices::reinit (const vector &n) { - Assert(n.size()==n_blocks, - ExcDimensionMismatch(n.size(), n_blocks)); - + if (start_indices.size() != n.size()+1) + { + n_blocks = n.size(); + start_indices.resize(n_blocks+1); + } start_indices[0] = 0; for (unsigned int i=1; i<=n_blocks; ++i) start_indices[i] = start_indices[i-1] + n[i-1]; @@ -150,10 +166,9 @@ BlockIndices::reinit (const vector &n) -template inline pair -BlockIndices::global_to_local (const unsigned int i) const +BlockIndices::global_to_local (const unsigned int i) const { Assert (i::global_to_local (const unsigned int i) const }; -template inline unsigned int -BlockIndices::local_to_global (const unsigned int block, +BlockIndices::local_to_global (const unsigned int block, const unsigned int index) const { Assert (block < n_blocks, ExcIndexRange(block, 0, n_blocks)); @@ -179,21 +193,27 @@ BlockIndices::local_to_global (const unsigned int block, }; +inline +unsigned int +BlockIndices::size () const +{ + return n_blocks; +} + + -template inline unsigned int -BlockIndices::total_size () const +BlockIndices::total_size () const { return start_indices[n_blocks]; }; -template inline -BlockIndices & -BlockIndices::operator = (const BlockIndices &b) +BlockIndices & +BlockIndices::operator = (const BlockIndices &b) { for (unsigned int i=0; i<=n_blocks; ++i) start_indices[i] = b.start_indices[i]; @@ -202,10 +222,9 @@ BlockIndices::operator = (const BlockIndices &b) -template inline bool -BlockIndices::operator == (const BlockIndices &b) const +BlockIndices::operator == (const BlockIndices &b) const { for (unsigned int i=0; i<=n_blocks; ++i) if (start_indices[i] != b.start_indices[i]) @@ -216,10 +235,9 @@ BlockIndices::operator == (const BlockIndices &b) const -template inline void -BlockIndices::swap (BlockIndices &b) +BlockIndices::swap (BlockIndices &b) { for (unsigned int i=0; i<=n_blocks; ++i) std::swap (start_indices[i], b.start_indices[i]); @@ -237,10 +255,8 @@ BlockIndices::swap (BlockIndices &b) * * @author Wolfgang Bangerth, 2000 */ -template inline -void swap (BlockIndices &u, - BlockIndices &v) +void swap (BlockIndices &u, BlockIndices &v) { u.swap (v); }; diff --git a/deal.II/lac/include/lac/block_sparse_matrix.h b/deal.II/lac/include/lac/block_sparse_matrix.h index 1391733c38..d8ba6d0dfb 100644 --- a/deal.II/lac/include/lac/block_sparse_matrix.h +++ b/deal.II/lac/include/lac/block_sparse_matrix.h @@ -178,6 +178,18 @@ class BlockSparseMatrix : public Subscriptor */ virtual void clear (); + /** + * Return the number of blocks in a + * column. + */ + unsigned int n_block_rows () const; + + /** + * Return the number of blocks in a + * row. + */ + unsigned int n_block_cols () const; + /** * Return whether the object is * empty. It is empty if either @@ -755,5 +767,23 @@ precondition_Jacobi (BlockVector &dst, }; +template +inline +unsigned int +BlockSparseMatrix::n_block_cols () const +{ + return columns; +} + + + +template +inline +unsigned int +BlockSparseMatrix::n_block_rows () const +{ + return rows; +} + #endif // __deal2__block_sparse_matrix_h diff --git a/deal.II/lac/include/lac/block_sparsity_pattern.h b/deal.II/lac/include/lac/block_sparsity_pattern.h index ac71ff37d8..e072ff269e 100644 --- a/deal.II/lac/include/lac/block_sparsity_pattern.h +++ b/deal.II/lac/include/lac/block_sparsity_pattern.h @@ -133,7 +133,7 @@ class BlockSparsityPattern : public Subscriptor * row indices to the individual * blocks. */ - const BlockIndices & + const BlockIndices & get_row_indices () const; /** @@ -142,7 +142,7 @@ class BlockSparsityPattern : public Subscriptor * column indices to the individual * blocks. */ - const BlockIndices & + const BlockIndices & get_column_indices () const; /** @@ -154,6 +154,18 @@ class BlockSparsityPattern : public Subscriptor */ void compress (); + /** + * Return the number of blocks in a + * column. + */ + unsigned int n_block_rows () const; + + /** + * Return the number of blocks in a + * row. + */ + unsigned int n_block_cols () const; + /** * Return whether the object is * empty. It is empty if no @@ -274,7 +286,7 @@ class BlockSparsityPattern : public Subscriptor * indices to indices of the * sub-objects. */ - BlockIndices row_indices; + BlockIndices row_indices; /** * Object storing and managing @@ -282,7 +294,7 @@ class BlockSparsityPattern : public Subscriptor * indices to indices of the * sub-objects. */ - BlockIndices column_indices; + BlockIndices column_indices; /** * Make the block sparse matrix a @@ -324,7 +336,7 @@ BlockSparsityPattern::block (const unsigned int row, template inline -const BlockIndices & +const BlockIndices & BlockSparsityPattern::get_row_indices () const { return row_indices; @@ -334,7 +346,7 @@ BlockSparsityPattern::get_row_indices () const template inline -const BlockIndices & +const BlockIndices & BlockSparsityPattern::get_column_indices () const { return column_indices; @@ -360,4 +372,22 @@ BlockSparsityPattern::add (const unsigned int i, +template +inline +unsigned int +BlockSparsityPattern::n_block_cols () const +{ + return columns; +} + + + +template +inline +unsigned int +BlockSparsityPattern::n_block_rows () const +{ + return rows; +} + #endif diff --git a/deal.II/lac/include/lac/block_sparsity_pattern.templates.h b/deal.II/lac/include/lac/block_sparsity_pattern.templates.h index 5448e6373f..c878cd3ccf 100644 --- a/deal.II/lac/include/lac/block_sparsity_pattern.templates.h +++ b/deal.II/lac/include/lac/block_sparsity_pattern.templates.h @@ -19,6 +19,7 @@ template BlockSparsityPattern::BlockSparsityPattern () + : row_indices (rows), column_indices(columns) { Assert (rows>0, ExcInvalidSize (rows)); Assert (columns>0, ExcInvalidSize (columns)); diff --git a/deal.II/lac/include/lac/block_vector.h b/deal.II/lac/include/lac/block_vector.h index a18d16ab4c..68d84eb04a 100644 --- a/deal.II/lac/include/lac/block_vector.h +++ b/deal.II/lac/include/lac/block_vector.h @@ -190,9 +190,13 @@ class BlockVector * Return a reference on the * object that describes the * mapping between block and - * global indices. + * global indices. The use of + * this function is highly + * deprecated and it should + * vanish in one of the next + * versions */ - const BlockIndices & + const BlockIndices & get_block_indices () const; /** @@ -431,39 +435,6 @@ class BlockVector void block_read (istream &in); //@} - /** - * Exception - */ - DeclException2 (ExcDimensionsDontMatch, - int, int, - << "The dimensions " << arg1 << " and " << arg2 - << " do not match here."); - /** - * Exception - */ - DeclException2 (ExcInvalidIndex, - int, int, - << "The given index " << arg1 - << " should be less than " << arg2 << "."); - /** - * Exception - */ - DeclException1 (ExcInvalidNumber, - int, - << "The provided number is invalid here: " << arg1); - /** - * Exception - */ - DeclException0 (ExcOutOfMemory); - /** - * Exception - */ - DeclException0 (ExcEmptyVector); - /** - * Exception - */ - DeclException0 (ExcIO); - protected: /** * Pointer to the array of components. @@ -476,7 +447,7 @@ class BlockVector * indices and indices within the * different blocks. */ - BlockIndices block_indices; + BlockIndices block_indices; }; @@ -538,7 +509,7 @@ BlockVector::block(unsigned int i) const template inline -const BlockIndices& +const BlockIndices& BlockVector::get_block_indices () const { return block_indices; diff --git a/deal.II/lac/include/lac/block_vector.templates.h b/deal.II/lac/include/lac/block_vector.templates.h index 025d7a67ec..e1028e9a7b 100644 --- a/deal.II/lac/include/lac/block_vector.templates.h +++ b/deal.II/lac/include/lac/block_vector.templates.h @@ -21,12 +21,14 @@ template BlockVector::BlockVector () + : block_indices(n_blocks) {} template BlockVector::BlockVector (const vector &n) + : block_indices(n_blocks) { reinit (n, false); } @@ -34,6 +36,7 @@ BlockVector::BlockVector (const vector &n) template BlockVector::BlockVector (const BlockVector& v) + : block_indices(n_blocks) { block_indices = v.block_indices; for (unsigned int i=0; i::operator * (const Vector& v) const if (&v == this) return norm_sqr(); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); Number sum0 = 0, sum1 = 0, @@ -321,7 +321,7 @@ template Vector& Vector::operator -= (const Vector& v) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); iterator i_ptr = begin(), i_end = end(); @@ -349,7 +349,7 @@ template void Vector::add (const Vector& v) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); iterator i_ptr = begin(), i_end = end(); @@ -363,7 +363,7 @@ template void Vector::add (const Number a, const Vector& v) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); iterator i_ptr = begin(), i_end = end(); @@ -378,8 +378,8 @@ void Vector::add (const Number a, const Vector& v, const Number b, const Vector& w) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); - Assert (dim == w.dim, ExcDimensionsDontMatch(dim, w.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); + Assert (dim == w.dim, ExcDimensionMismatch(dim, w.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator v_ptr = v.begin(), @@ -393,7 +393,7 @@ template void Vector::sadd (const Number x, const Vector& v) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator v_ptr = v.begin(); @@ -406,7 +406,7 @@ template void Vector::sadd (const Number x, const Number a, const Vector& v) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator v_ptr = v.begin(); @@ -420,8 +420,8 @@ void Vector::sadd (const Number x, const Number a, const Vector& v, const Number b, const Vector& w) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); - Assert (dim == w.dim, ExcDimensionsDontMatch(dim, w.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); + Assert (dim == w.dim, ExcDimensionMismatch(dim, w.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator v_ptr = v.begin(), @@ -437,9 +437,9 @@ void Vector::sadd (const Number x, const Number a, const Vector& w, const Number c, const Vector& y) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); - Assert (dim == w.dim, ExcDimensionsDontMatch(dim, w.dim)); - Assert (dim == y.dim, ExcDimensionsDontMatch(dim, y.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); + Assert (dim == w.dim, ExcDimensionMismatch(dim, w.dim)); + Assert (dim == y.dim, ExcDimensionMismatch(dim, y.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator v_ptr = v.begin(), @@ -467,8 +467,8 @@ void Vector::equ (const Number a, const Vector& u, const Number b, const Vector& v) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == u.dim, ExcDimensionsDontMatch(dim, u.dim)); - Assert (dim == v.dim, ExcDimensionsDontMatch(dim, v.dim)); + Assert (dim == u.dim, ExcDimensionMismatch(dim, u.dim)); + Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator u_ptr = u.begin(), @@ -483,7 +483,7 @@ template void Vector::equ (const Number a, const Vector& u) { Assert (dim!=0, ExcEmptyVector()); - Assert (dim == u.dim, ExcDimensionsDontMatch(dim, u.dim)); + Assert (dim == u.dim, ExcDimensionMismatch(dim, u.dim)); iterator i_ptr = begin(), i_end = end(); const_iterator u_ptr = u.begin(); @@ -497,7 +497,7 @@ template void Vector::ratio (const Vector &a, const Vector &b) { Assert (dim!=0, ExcEmptyVector()); - Assert (a.dim == b.dim, ExcDimensionsDontMatch (a.dim, b.dim)); + Assert (a.dim == b.dim, ExcDimensionMismatch (a.dim, b.dim)); // no need to reinit with zeros, since // we overwrite them anyway diff --git a/tests/lac/Makefile.in b/tests/lac/Makefile.in index b3e80ea0f4..c68c9951e1 100644 --- a/tests/lac/Makefile.in +++ b/tests/lac/Makefile.in @@ -63,7 +63,7 @@ endif # mgbase.check mg.check are removed until the sutructure of the # multigrid classes will be fixed. -all: full_matrix.check solver.check +all: vector-vector.check block_vector.check block_matrices.check full_matrix.check solver.check exe: $(all:.check=.testcase) benchmark run: $(all:.check=.output) @@ -95,6 +95,36 @@ vector-vector.testcase: $(vector-vector-o-files) $(libraries) @$(CXX) $(LDFLAGS) -g -o $@ $^ $(LIBS) +############################################################ + +block_matrices-cc-files = block_matrices.cc + +ifeq ($(debug-mode),on) +block_matrices-o-files = $(block_matrices-cc-files:.cc=.go) +else +block_matrices-o-files = $(block_matrices-cc-files:.cc=.o) +endif + +block_matrices.testcase: $(block_matrices-o-files) $(libraries) + @echo =====linking======= $< + @$(CXX) $(LDFLAGS) -g -o $@ $^ $(LIBS) + + +############################################################ + +block_vector-cc-files = block_vector.cc + +ifeq ($(debug-mode),on) +block_vector-o-files = $(block_vector-cc-files:.cc=.go) +else +block_vector-o-files = $(block_vector-cc-files:.cc=.o) +endif + +block_vector.testcase: $(block_vector-o-files) $(libraries) + @echo =====linking======= $< + @$(CXX) $(LDFLAGS) -g -o $@ $^ $(LIBS) + + ############################################################ diff --git a/tests/lac/block_vector.cc b/tests/lac/block_vector.cc new file mode 100644 index 0000000000..3f2a26d12d --- /dev/null +++ b/tests/lac/block_vector.cc @@ -0,0 +1,144 @@ +//-------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2000 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//-------------------------------------------------------------------- + + +#include +#include +#include +#include +#include +#include + +void abort () +{} + + +void test () +{ + deallog.push("BlockIndices"); + + vector ivector(4); + ivector[0] = 3; + ivector[1] = 0; + ivector[2] = 1; + ivector[3] = 2; + + BlockIndices i1(ivector); + BlockIndices i2 = i1; + BlockIndices i3(13); + i3.reinit(ivector); + + deallog.push("global->local"); + + unsigned int n = i1.total_size(); + for (unsigned int i=0;iglobal"); + for (unsigned int i=0 ; ilocal::0 0 0 0 0 0 0 +DEAL:BlockIndices:global->local::1 0 1 0 1 0 1 +DEAL:BlockIndices:global->local::2 0 2 0 2 0 2 +DEAL:BlockIndices:global->local::3 2 0 2 0 2 0 +DEAL:BlockIndices:global->local::4 3 0 3 0 3 0 +DEAL:BlockIndices:global->local::5 3 1 3 1 3 1 +DEAL:BlockIndices:local->global::0 0 0 +DEAL:BlockIndices:local->global::0 1 1 +DEAL:BlockIndices:local->global::0 2 2 +DEAL:BlockIndices:local->global::2 0 3 +DEAL:BlockIndices:local->global::3 0 4 +DEAL:BlockIndices:local->global::3 1 5 +DEAL:BlockIndices:reinit::0 0 0 +DEAL:BlockIndices:reinit::1 0 1 +DEAL:BlockIndices:reinit::2 0 2 +DEAL:BlockIndices:reinit::3 0 3 +DEAL:BlockIndices:reinit::4 0 4 +DEAL:BlockIndices:reinit::5 1 0 +DEAL:BlockIndices:reinit::6 1 1 +DEAL:BlockIndices:reinit::7 1 2 +DEAL:BlockIndices:reinit::8 3 0 +DEAL:BlockIndices:reinit::9 4 0 +DEAL:BlockIndices:reinit::10 4 1 +DEAL:BlockIndices:reinit::--- +DEAL:BlockIndices:reinit::0 0 0 +DEAL:BlockIndices:reinit::1 1 0 +DEAL:BlockIndices:reinit::2 1 1 +DEAL:BlockIndices::Range +-------------------------------------------------------- +An error occurred in line <174> of file in function + struct pair BlockIndices::global_to_local(unsigned int) const +The violated condition was: + i of file in function + unsigned int BlockIndices::local_to_global(unsigned int, unsigned int) const +The violated condition was: + index < start_indices[block+1]-start_indices[block] +The name and call sequence of the exception was: + ExcIndexRange (index, 0, start_indices[block+1]-start_indices[block]) +Additional Information: +Index 2 is not in [0,2[ +-------------------------------------------------------- +-------------------------------------------------------- +An error occurred in line <189> of file in function + unsigned int BlockIndices::local_to_global(unsigned int, unsigned int) const +The violated condition was: + block < n_blocks +The name and call sequence of the exception was: + ExcIndexRange(block, 0, n_blocks) +Additional Information: +Index 2 is not in [0,2[ +--------------------------------------------------------