From 08e31fdb59a5e974f77d54588c76973bc2c60b27 Mon Sep 17 00:00:00 2001 From: kanschat Date: Thu, 14 Oct 2010 15:59:09 +0000 Subject: [PATCH] introduce ExcNumberNotFinite and test for inifinity in boundary projections git-svn-id: https://svn.dealii.org/trunk@22344 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/base/include/base/exceptions.h | 13 +++ .../deal.II/include/multigrid/mg_smoother.h | 1 + .../include/numerics/vectors.templates.h | 11 ++- deal.II/deal.II/source/numerics/matrices.cc | 11 ++- deal.II/lac/include/lac/block_matrix_base.h | 6 +- .../lac/include/lac/block_sparse_matrix_ez.h | 6 +- deal.II/lac/include/lac/block_vector.h | 6 +- deal.II/lac/include/lac/block_vector_base.h | 71 ++++++--------- deal.II/lac/include/lac/chunk_sparse_matrix.h | 8 +- .../include/lac/constraint_matrix.templates.h | 1 + deal.II/lac/include/lac/full_matrix.h | 5 +- .../lac/include/lac/full_matrix.templates.h | 11 +-- deal.II/lac/include/lac/petsc_matrix_base.h | 16 +--- deal.II/lac/include/lac/sparse_matrix.h | 8 +- .../lac/include/lac/sparse_matrix.templates.h | 12 +-- deal.II/lac/include/lac/sparse_matrix_ez.h | 6 +- .../lac/include/lac/trilinos_sparse_matrix.h | 18 ++-- .../lac/include/lac/trilinos_vector_base.h | 86 +++++-------------- deal.II/lac/include/lac/vector.h | 28 ++---- deal.II/lac/include/lac/vector.templates.h | 26 ++---- deal.II/lac/source/petsc_vector_base.cc | 63 +++++--------- 21 files changed, 146 insertions(+), 267 deletions(-) diff --git a/deal.II/base/include/base/exceptions.h b/deal.II/base/include/base/exceptions.h index 46f2ff5245..30356c8bd5 100644 --- a/deal.II/base/include/base/exceptions.h +++ b/deal.II/base/include/base/exceptions.h @@ -640,6 +640,19 @@ namespace StandardExceptions */ DeclException0 (ExcDivideByZero); + /** + * Exception raised if a number is + * not finite. + * + * This exception should be used to + * catch infinite or not a number + * results of arithmetic operations + * that do not result from a + * division by zero (use + * ExcDivideByZero for those). + */ + DeclException0 (ExcNumberNotFinite); + /** * Trying to allocate a new * object failed due to lack of diff --git a/deal.II/deal.II/include/multigrid/mg_smoother.h b/deal.II/deal.II/include/multigrid/mg_smoother.h index 72a7fef192..96d660ef49 100644 --- a/deal.II/deal.II/include/multigrid/mg_smoother.h +++ b/deal.II/deal.II/include/multigrid/mg_smoother.h @@ -806,6 +806,7 @@ namespace mg smoothers[i].initialize(m[i], data[i]); } + template inline void SmootherRelaxation::smooth( diff --git a/deal.II/deal.II/include/numerics/vectors.templates.h b/deal.II/deal.II/include/numerics/vectors.templates.h index dc34cb5c06..842b437a44 100644 --- a/deal.II/deal.II/include/numerics/vectors.templates.h +++ b/deal.II/deal.II/include/numerics/vectors.templates.h @@ -1945,6 +1945,9 @@ VectorTools::project_boundary_values (const Mapping &mappin // have support there. Let's // eliminate them here. + // The Bogner-Fox-Schmidt element + // is an example for those. + //TODO: Maybe we should figure out if the element really needs this FilteredMatrix > filtered_mass_matrix(mass_matrix, true); @@ -1988,6 +1991,9 @@ VectorTools::project_boundary_values (const Mapping &mappin for (unsigned int i=0; i::invalid_dof_index && ! excluded_dofs[dof_to_boundary_mapping[i]]) + { + Assert(numbers::is_finite(boundary_projection(dof_to_boundary_mapping[i])), ExcNumberNotFinite()); + // this dof is on one of the // interesting boundary parts // @@ -1995,7 +2001,8 @@ VectorTools::project_boundary_values (const Mapping &mappin // number, dof_to_boundary_mapping[i] // is the number on the boundary and // thus in the solution vector - boundary_values[i] = boundary_projection(dof_to_boundary_mapping[i]); + boundary_values[i] = boundary_projection(dof_to_boundary_mapping[i]); + } } #endif @@ -4370,7 +4377,7 @@ namespace internal } // append result of this cell // to the end of the vector - Assert (numbers::is_finite(diff), ExcInternalError()); + Assert (numbers::is_finite(diff), ExcNumberNotFinite()); difference(index) = diff; } } diff --git a/deal.II/deal.II/source/numerics/matrices.cc b/deal.II/deal.II/source/numerics/matrices.cc index 5993e9513e..0c3b0e709c 100644 --- a/deal.II/deal.II/source/numerics/matrices.cc +++ b/deal.II/deal.II/source/numerics/matrices.cc @@ -1164,10 +1164,13 @@ create_boundary_mass_matrix_1 (std_cxx1x::tuple &, { for (unsigned int j=0; j::set (const unsigned int i, { prepare_set_operation(); - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); const std::pair row_index = row_block_indices.global_to_local (i), @@ -1997,8 +1996,7 @@ BlockMatrixBase::add (const unsigned int i, const value_type value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); prepare_add_operation(); diff --git a/deal.II/lac/include/lac/block_sparse_matrix_ez.h b/deal.II/lac/include/lac/block_sparse_matrix_ez.h index 66e32f39b2..793c23de98 100644 --- a/deal.II/lac/include/lac/block_sparse_matrix_ez.h +++ b/deal.II/lac/include/lac/block_sparse_matrix_ez.h @@ -423,8 +423,7 @@ BlockSparseMatrixEZ::set (const unsigned int i, const Number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); const std::pair row_index = row_indices.global_to_local (i), @@ -444,8 +443,7 @@ BlockSparseMatrixEZ::add (const unsigned int i, const Number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); const std::pair row_index = row_indices.global_to_local (i), diff --git a/deal.II/lac/include/lac/block_vector.h b/deal.II/lac/include/lac/block_vector.h index 08cb7a4445..c6cc279f14 100644 --- a/deal.II/lac/include/lac/block_vector.h +++ b/deal.II/lac/include/lac/block_vector.h @@ -482,8 +482,7 @@ BlockVector & BlockVector::operator = (const value_type s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); BaseClass::operator = (s); return *this; @@ -531,8 +530,7 @@ template void BlockVector::scale (const value_type factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); for (unsigned int i=0; in_blocks();++i) this->components[i].scale(factor); diff --git a/deal.II/lac/include/lac/block_vector_base.h b/deal.II/lac/include/lac/block_vector_base.h index 4bd235721b..ba33570fcd 100644 --- a/deal.II/lac/include/lac/block_vector_base.h +++ b/deal.II/lac/include/lac/block_vector_base.h @@ -2019,8 +2019,7 @@ BlockVectorBase::add (const unsigned int n_indices, template void BlockVectorBase::add (const value_type a) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); for (unsigned int i=0;i::add (const value_type a, const BlockVectorBase& v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2070,10 +2068,8 @@ void BlockVectorBase::add (const value_type a, const BlockVectorBase& w) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2094,8 +2090,7 @@ void BlockVectorBase::sadd (const value_type x, const BlockVectorBase& v) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2113,10 +2108,8 @@ void BlockVectorBase::sadd (const value_type x, const value_type a, const BlockVectorBase& v) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2136,12 +2129,9 @@ void BlockVectorBase::sadd (const value_type x, const value_type a, const BlockVectorBase& w) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2165,14 +2155,10 @@ void BlockVectorBase::sadd (const value_type x, const value_type a, const BlockVectorBase& y) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(c), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); + Assert (numbers::is_finite(c), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2209,10 +2195,8 @@ void BlockVectorBase::equ (const value_type a, const BlockVectorBase& w) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2245,8 +2229,7 @@ void BlockVectorBase::equ (const value_type a, const BlockVector2 &v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); Assert (n_blocks() == v.n_blocks(), ExcDimensionMismatch(n_blocks(), v.n_blocks())); @@ -2262,8 +2245,7 @@ BlockVectorBase& BlockVectorBase::operator = (const value_type s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); for (unsigned int i=0;i BlockVectorBase& BlockVectorBase::operator = (const BlockVectorBase& v) { - Assert (n_blocks() == v.n_blocks(), - ExcDimensionMismatch(n_blocks(), v.n_blocks())); + AssertDimension(n_blocks(), v.n_blocks()); for (unsigned int i=0;i BlockVectorBase& BlockVectorBase::operator = (const BlockVectorBase &v) { - Assert (n_blocks() == v.n_blocks(), - ExcDimensionMismatch(n_blocks(), v.n_blocks())); + AssertDimension(n_blocks(), v.n_blocks()); for (unsigned int i=0;i:: operator == (const BlockVectorBase &v) const { - Assert (block_indices == v.block_indices, - ExcDifferentBlockIndices()); + Assert (block_indices == v.block_indices, ExcDifferentBlockIndices()); for (unsigned int i=0;i & BlockVectorBase::operator *= (const value_type factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); for (unsigned int i=0;i & BlockVectorBase::operator /= (const value_type factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (factor > 0., ExcZero() ); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); + Assert (factor > 0., ExcDivideByZero() ); for (unsigned int i=0;i::set (const unsigned int i, const number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); Assert (cols != 0, ExcNotInitialized()); // it is allowed to set elements of @@ -1275,8 +1274,7 @@ void ChunkSparseMatrix::add (const unsigned int i, const number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); Assert (cols != 0, ExcNotInitialized()); diff --git a/deal.II/lac/include/lac/constraint_matrix.templates.h b/deal.II/lac/include/lac/constraint_matrix.templates.h index a6127d8943..889938f542 100644 --- a/deal.II/lac/include/lac/constraint_matrix.templates.h +++ b/deal.II/lac/include/lac/constraint_matrix.templates.h @@ -884,6 +884,7 @@ ConstraintMatrix::distribute (VectorType &vec) const new_value += (static_cast (vec(next_constraint->entries[i].first)) * next_constraint->entries[i].second); + Assert(numbers::is_finite(new_value), ExcNumberNotFinite()); vec(next_constraint->line) = new_value; } } diff --git a/deal.II/lac/include/lac/full_matrix.h b/deal.II/lac/include/lac/full_matrix.h index ed3e2c044e..42bcbe880b 100644 --- a/deal.II/lac/include/lac/full_matrix.h +++ b/deal.II/lac/include/lac/full_matrix.h @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by the deal.II authors +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -1454,8 +1454,7 @@ inline number FullMatrix::Accessor::value() const { - Assert (numbers::is_finite( matrix->el(a_row, a_col) ), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite( matrix->el(a_row, a_col) ), ExcNumberNotFinite()); return matrix->el(a_row, a_col); } diff --git a/deal.II/lac/include/lac/full_matrix.templates.h b/deal.II/lac/include/lac/full_matrix.templates.h index a230d25674..45c1267cf0 100644 --- a/deal.II/lac/include/lac/full_matrix.templates.h +++ b/deal.II/lac/include/lac/full_matrix.templates.h @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by the deal.II authors +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -146,8 +146,7 @@ FullMatrix & FullMatrix::operator *= (const number factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); number *p = &(*this)(0,0); const number *e = &(*this)(0,0) + n()*m(); @@ -164,16 +163,14 @@ FullMatrix & FullMatrix::operator /= (const number factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); number *p = &(*this)(0,0); const number *e = &(*this)(0,0) + n()*m(); const number factor_inv = number(1.)/factor; - Assert (numbers::is_finite(factor_inv), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor_inv), ExcNumberNotFinite()); while (p != e) *p++ *= factor_inv; diff --git a/deal.II/lac/include/lac/petsc_matrix_base.h b/deal.II/lac/include/lac/petsc_matrix_base.h index 45caef637c..8de24c42cc 100644 --- a/deal.II/lac/include/lac/petsc_matrix_base.h +++ b/deal.II/lac/include/lac/petsc_matrix_base.h @@ -1424,9 +1424,7 @@ namespace PETScWrappers const PetscScalar value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either " - "infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); set (i, 1, &j, &value, false); } @@ -1529,9 +1527,7 @@ namespace PETScWrappers for (unsigned int j=0; j::set (const unsigned int i, const unsigned int j, const number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either " - "infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); const unsigned int index = cols->operator()(i, j); @@ -2239,9 +2237,7 @@ SparseMatrix::add (const unsigned int i, const unsigned int j, const number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either " - "infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); if (value == 0) return; diff --git a/deal.II/lac/include/lac/sparse_matrix.templates.h b/deal.II/lac/include/lac/sparse_matrix.templates.h index c639ba0a78..9d3f561727 100644 --- a/deal.II/lac/include/lac/sparse_matrix.templates.h +++ b/deal.II/lac/include/lac/sparse_matrix.templates.h @@ -492,9 +492,7 @@ SparseMatrix::add (const unsigned int row, for (unsigned int j=0; j::set (const unsigned int row, for (unsigned int j=0; j::set (const unsigned int row, for (unsigned int j=0; j::set (const unsigned int i, const number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); Assert (i::add (const unsigned int i, const number value) { - Assert (numbers::is_finite(value), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(value), ExcNumberNotFinite()); Assert (iPutScalar(s); @@ -1423,9 +1421,7 @@ namespace TrilinosWrappers VectorBase::operator *= (const TrilinosScalar a) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); const int ierr = vector->Scale(a); AssertThrow (ierr == 0, ExcTrilinosError(ierr)); @@ -1440,15 +1436,11 @@ namespace TrilinosWrappers VectorBase::operator /= (const TrilinosScalar a) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); const TrilinosScalar factor = 1./a; - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); const int ierr = vector->Scale(factor); AssertThrow (ierr == 0, ExcTrilinosError(ierr)); @@ -1493,9 +1485,7 @@ namespace TrilinosWrappers VectorBase::add (const TrilinosScalar s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); unsigned int n_local = local_size(); for (unsigned int i=0; iUpdate(a, *(v.vector), 1.); AssertThrow (ierr == 0, ExcTrilinosError(ierr)); @@ -1534,12 +1522,8 @@ namespace TrilinosWrappers Assert (size() == w.size(), ExcDimensionMismatch(size(), w.size())); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); const int ierr = vector->Update(a, *(v.vector), b, *(w.vector), 1.); @@ -1556,9 +1540,7 @@ namespace TrilinosWrappers Assert (size() == v.size(), ExcDimensionMismatch(size(), v.size())); - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); const int ierr = vector->Update(1., *(v.vector), s); @@ -1576,12 +1558,8 @@ namespace TrilinosWrappers Assert (size() == v.size(), ExcDimensionMismatch(size(), v.size())); - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); const int ierr = vector->Update(a, *(v.vector), s); @@ -1604,15 +1582,9 @@ namespace TrilinosWrappers ExcDimensionMismatch(size(), w.size())); - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); const int ierr = vector->Update(a, *(v.vector), b, *(w.vector), s); @@ -1638,18 +1610,10 @@ namespace TrilinosWrappers Assert (size() == x.size(), ExcDimensionMismatch(size(), x.size())); - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(c), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); + Assert (numbers::is_finite(c), ExcNumberNotFinite()); // Update member can only // input two other vectors so @@ -1682,9 +1646,7 @@ namespace TrilinosWrappers const VectorBase &v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); // If we don't have the same map, copy. if (local_range() != v.local_range()) @@ -1726,12 +1688,8 @@ namespace TrilinosWrappers Assert (v.size() == w.size(), ExcDimensionMismatch (v.size(), w.size())); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but " - "either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); // If we don't have the same map, copy. if (local_range() != v.local_range()) diff --git a/deal.II/lac/include/lac/vector.h b/deal.II/lac/include/lac/vector.h index dddf85158b..f21cb7b5cf 100644 --- a/deal.II/lac/include/lac/vector.h +++ b/deal.II/lac/include/lac/vector.h @@ -1103,10 +1103,7 @@ template inline Vector & Vector::operator = (const Number s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or " - "Not A Number (NaN)")); - + Assert (numbers::is_finite(s), ExcNumberNotFinite()); if (s != Number()) Assert (vec_size!=0, ExcEmptyObject()); if (vec_size>internal::Vector::minimum_parallel_grain_size) @@ -1129,10 +1126,7 @@ inline Vector > & Vector >::operator = (const std::complex s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or " - "Not A Number (NaN)")); - + Assert (numbers::is_finite(s), ExcNumberNotFinite()); if (s != std::complex()) Assert (vec_size!=0, ExcEmptyObject()); if (vec_size!=0) @@ -1263,8 +1257,7 @@ inline Vector & Vector::operator *= (const Number factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor),ExcNumberNotFinite()); scale (factor); return *this; @@ -1277,8 +1270,7 @@ inline Vector & Vector::operator /= (const Number factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor),ExcNumberNotFinite()); Assert (factor != Number(0.), ExcZero() ); this->operator *= (Number(1.)/factor); @@ -1292,8 +1284,7 @@ inline void Vector::scale (const Number factor) { - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); @@ -1360,8 +1351,7 @@ void Vector::add (const Number a, const Vector& v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == v.vec_size, ExcDimensionMismatch(vec_size, v.vec_size)); @@ -1383,10 +1373,8 @@ Vector::sadd (const Number x, const Number a, const Vector& v) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x),ExcNumberNotFinite()); + Assert (numbers::is_finite(a),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == v.vec_size, ExcDimensionMismatch(vec_size, v.vec_size)); diff --git a/deal.II/lac/include/lac/vector.templates.h b/deal.II/lac/include/lac/vector.templates.h index 773acec024..80819f7d55 100644 --- a/deal.II/lac/include/lac/vector.templates.h +++ b/deal.II/lac/include/lac/vector.templates.h @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by the deal.II authors +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -735,10 +735,8 @@ template void Vector::add (const Number a, const Vector& v, const Number b, const Vector& w) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a),ExcNumberNotFinite()); + Assert (numbers::is_finite(b),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == v.vec_size, ExcDimensionMismatch(vec_size, v.vec_size)); @@ -762,8 +760,7 @@ template void Vector::sadd (const Number x, const Vector& v) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == v.vec_size, ExcDimensionMismatch(vec_size, v.vec_size)); @@ -787,12 +784,9 @@ void Vector::sadd (const Number x, const Number a, const Vector& v, const Number b, const Vector& w) { - Assert (numbers::is_finite(x), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(x),ExcNumberNotFinite()); + Assert (numbers::is_finite(a),ExcNumberNotFinite()); + Assert (numbers::is_finite(b),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == v.vec_size, ExcDimensionMismatch(vec_size, v.vec_size)); @@ -907,10 +901,8 @@ template void Vector::equ (const Number a, const Vector& u, const Number b, const Vector& v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a),ExcNumberNotFinite()); + Assert (numbers::is_finite(b),ExcNumberNotFinite()); Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == u.vec_size, ExcDimensionMismatch(vec_size, u.vec_size)); diff --git a/deal.II/lac/source/petsc_vector_base.cc b/deal.II/lac/source/petsc_vector_base.cc index 53c1df3e70..c958951b51 100644 --- a/deal.II/lac/source/petsc_vector_base.cc +++ b/deal.II/lac/source/petsc_vector_base.cc @@ -208,8 +208,7 @@ namespace PETScWrappers VectorBase::operator = (const PetscScalar s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); // flush previously cached elements. this // seems to be necessary since petsc @@ -684,8 +683,7 @@ namespace PETScWrappers VectorBase::operator *= (const PetscScalar a) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); #if DEAL_II_PETSC_VERSION_LT(2,3,0) const int ierr = VecScale (&a, vector); @@ -704,13 +702,11 @@ namespace PETScWrappers VectorBase::operator /= (const PetscScalar a) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); const PetscScalar factor = 1./a; - Assert (numbers::is_finite(factor), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(factor), ExcNumberNotFinite()); #if DEAL_II_PETSC_VERSION_LT(2,3,0) const int ierr = VecScale (&factor, vector); @@ -763,8 +759,7 @@ namespace PETScWrappers VectorBase::add (const PetscScalar s) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); #if DEAL_II_PETSC_VERSION_LT(2,3,0) const int ierr = VecShift (&s, vector); @@ -790,8 +785,7 @@ namespace PETScWrappers const VectorBase &v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); #if DEAL_II_PETSC_VERSION_LT(2,3,0) const int ierr = VecAXPY (&a, v, vector); @@ -811,10 +805,8 @@ namespace PETScWrappers const VectorBase &w) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); const PetscScalar weights[2] = {a,b}; Vec addends[2] = {v.vector, w.vector}; @@ -835,8 +827,7 @@ namespace PETScWrappers const VectorBase &v) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); #if DEAL_II_PETSC_VERSION_LT(2,3,0) const int ierr = VecAYPX (&s, v, vector); @@ -855,10 +846,8 @@ namespace PETScWrappers const VectorBase &v) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); // there is nothing like a AXPAY // operation in Petsc, so do it in two @@ -877,12 +866,9 @@ namespace PETScWrappers const VectorBase &w) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); // there is no operation like MAXPAY, so // do it in two steps @@ -912,14 +898,10 @@ namespace PETScWrappers const VectorBase &x) { - Assert (numbers::is_finite(s), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(c), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(s), ExcNumberNotFinite()); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); + Assert (numbers::is_finite(c), ExcNumberNotFinite()); // there is no operation like MAXPAY, so // do it in two steps @@ -954,8 +936,7 @@ namespace PETScWrappers const VectorBase &v) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); Assert (size() == v.size(), ExcDimensionMismatch (size(), v.size())); @@ -978,10 +959,8 @@ namespace PETScWrappers const VectorBase &w) { - Assert (numbers::is_finite(a), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); - Assert (numbers::is_finite(b), - ExcMessage("The given value is not finite but either infinite or Not A Number (NaN)")); + Assert (numbers::is_finite(a), ExcNumberNotFinite()); + Assert (numbers::is_finite(b), ExcNumberNotFinite()); Assert (size() == v.size(), ExcDimensionMismatch (size(), v.size())); -- 2.39.5