]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
more tests on infinite and divide by zero
authorkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 21 Oct 2010 14:08:18 +0000 (14:08 +0000)
committerkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 21 Oct 2010 14:08:18 +0000 (14:08 +0000)
git-svn-id: https://svn.dealii.org/trunk@22416 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/solver_cg.h
deal.II/lac/include/lac/vector.templates.h

index 3f182e64daa45f5188f2e65d868d9209565a40df..7a561e9e6fbc7c52c10c0f3b8ac79121823a2073 100644 (file)
@@ -367,6 +367,7 @@ SolverCG<VECTOR>::solve (const MATRIX         &A,
        A.vmult(Ad,d);
 
        alpha = d*Ad;
+       Assert(alpha != 0., ExcDivideByZero());
        alpha = gh/alpha;
 
        g.add(alpha,Ad);
@@ -382,6 +383,7 @@ SolverCG<VECTOR>::solve (const MATRIX         &A,
        precondition.vmult(h,g);
 
        beta = gh;
+       Assert(beta != 0., ExcDivideByZero());
        gh   = g*h;
        beta = gh/beta;
 
@@ -397,7 +399,7 @@ SolverCG<VECTOR>::solve (const MATRIX         &A,
            eigen_beta_alpha = beta/alpha;
            offdiagonal.push_back(std::sqrt(beta)/alpha);
          }
-
+       
        if (additional_data.compute_all_condition_numbers && (diagonal.size()>1))
          {
            TridiagonalMatrix<double> T(diagonal.size(), true);
index 80819f7d55f846baf3e2b2f82cf7304c7188a05b..858b78cdbd79082a74fe9da0ea1807e02afb9e85 100644 (file)
@@ -393,6 +393,8 @@ Number Vector<Number>::operator * (const Vector<Number2>& v) const
     sum3 += *X++ * Number(numbers::NumberTraits<Number2>::conjugate(*Y++));
   sum += sum3;
 
+  Assert(numbers::is_finite(sum), ExcNumberNotFinite());
+  
   return sum;
 }
 
@@ -452,6 +454,8 @@ Vector<Number>::norm_sqr () const
     sum3 += numbers::NumberTraits<Number>::abs_square(*X++);
   sum += sum3;
 
+  Assert(numbers::is_finite(sum), ExcNumberNotFinite());
+  
   return sum;
 }
 
@@ -855,8 +859,7 @@ template <typename Number>
 void Vector<Number>::equ (const Number a,
                          const Vector<Number>& u)
 {
-  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 == u.vec_size, ExcDimensionMismatch(vec_size, u.vec_size));
@@ -879,8 +882,7 @@ template <typename Number2>
 void Vector<Number>::equ (const Number a,
                          const Vector<Number2>& u)
 {
-  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 == u.vec_size, ExcDimensionMismatch(vec_size, u.vec_size));

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.