]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add NumberTraits::abs as well as a variant of numbers::is_finite for complex<float>.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Sun, 4 Nov 2007 05:34:29 +0000 (05:34 +0000)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Sun, 4 Nov 2007 05:34:29 +0000 (05:34 +0000)
git-svn-id: https://svn.dealii.org/trunk@15437 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/base/include/base/numbers.h
deal.II/base/source/config.cc
tests/base/number_traits_complex.cc
tests/base/number_traits_complex/cmp/generic
tests/base/number_traits_real.cc
tests/base/number_traits_real/cmp/generic

index 934885ef2efb2527367e444173279c91facdb8eb..89751ec45516766dde4836f766123cd52812985e 100644 (file)
@@ -132,6 +132,13 @@ namespace numbers
                                    */
   bool is_finite (const std::complex<double> x);
 
+                                  /**
+                                   * Return @p true if real and 
+                                   * imaginary parts of the given
+                                   * complex number are finite.
+                                   */
+  bool is_finite (const std::complex<float> x);
+  
                                   /**
                                    * Return @p true if real and 
                                    * imaginary parts of the given
@@ -195,6 +202,13 @@ namespace numbers
                                        */
       static
       real_type abs_square (const number &x);
+
+                                      /**
+                                       * Return the absolute value of a
+                                       * number.
+                                       */
+      static
+      real_type abs (const number &x);
   };
 
 
@@ -239,6 +253,14 @@ namespace numbers
                                        */
       static
       real_type abs_square (const std::complex<number> &x);
+
+
+                                      /**
+                                       * Return the absolute value of a
+                                       * complex number.
+                                       */
+      static
+      real_type abs (const std::complex<number> &x);
   };
   
 }
@@ -276,6 +298,15 @@ namespace numbers
 
 
 
+  template <typename number>
+  typename NumberTraits<number>::real_type
+  NumberTraits<number>::abs (const number &x)
+  {
+    return std::fabs(x);
+  }
+
+
+
   template <typename number>
   std::complex<number>
   NumberTraits<std::complex<number> >::conjugate (const std::complex<number> &x)
@@ -285,6 +316,15 @@ namespace numbers
 
 
 
+  template <typename number>
+  typename NumberTraits<std::complex<number> >::real_type
+  NumberTraits<std::complex<number> >::abs (const std::complex<number> &x)
+  {
+    return std::abs(x);
+  }
+
+
+
   template <typename number>
   typename NumberTraits<std::complex<number> >::real_type
   NumberTraits<std::complex<number> >::abs_square (const std::complex<number> &x)
index 4153b2a9ebd4f833af33cd40247b81e1681beec2..890eca248ed721bc04251f081c529c5210db2022 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2006 by the deal.II authors
+//    Copyright (C) 2006, 2007 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -48,6 +48,17 @@ namespace numbers
 
 
 
+  bool is_finite (const std::complex<float> x) 
+  {
+                                       // Check complex numbers for infinity
+                                       // by testing real and imaginary part
+    return ( is_finite (x.real()) 
+             && 
+             is_finite (x.imag()) );
+  }
+
+
+
   bool is_finite (const std::complex<long double> x) 
   {
                                        // Same for std::complex<long double>
index c37530b072937df84034c2f145bc13f94f6a2f59..c78e081767d724a99fcd1b3e91231ca008f915c9 100644 (file)
@@ -36,6 +36,9 @@ void check (const number &x)
 
   deallog << numbers::NumberTraits<number>::abs_square (x)
          << std::endl;
+
+  deallog << numbers::NumberTraits<number>::abs (x)
+         << std::endl;
 } 
 
 
index 1802a34257bb5cb31c0946959fc1f2f800cb8f7e..41298771aa589b607c5d9edbe56d75ef03945b4b 100644 (file)
@@ -3,23 +3,29 @@ DEAL::typeid(x).name() = St7complexIfE
 DEAL::typeid(NumberTraits<number>::real_type).name() = f
 DEAL::(1.50,-2.50)
 DEAL::8.50
+DEAL::2.92
 DEAL::typeid(x).name() = St7complexIfE
 DEAL::typeid(NumberTraits<number>::real_type).name() = f
 DEAL::(-1.50,2.50)
 DEAL::8.50
+DEAL::2.92
 DEAL::typeid(x).name() = St7complexIdE
 DEAL::typeid(NumberTraits<number>::real_type).name() = d
 DEAL::(1.50,-2.50)
 DEAL::8.50
+DEAL::2.92
 DEAL::typeid(x).name() = St7complexIdE
 DEAL::typeid(NumberTraits<number>::real_type).name() = d
 DEAL::(-1.50,2.50)
 DEAL::8.50
+DEAL::2.92
 DEAL::typeid(x).name() = St7complexIeE
 DEAL::typeid(NumberTraits<number>::real_type).name() = e
 DEAL::(1.50,-2.50)
 DEAL::8.50
+DEAL::2.92
 DEAL::typeid(x).name() = St7complexIeE
 DEAL::typeid(NumberTraits<number>::real_type).name() = e
 DEAL::(-1.50,2.50)
 DEAL::8.50
+DEAL::2.92
index 5d44968af56fc0d4c6249bf97ddd2d6c59b93230..3e93a5c2bf75189a201608767286c9bd9e6775e7 100644 (file)
@@ -36,6 +36,9 @@ void check (const number &x)
 
   deallog << numbers::NumberTraits<number>::abs_square (x)
          << std::endl;
+
+  deallog << numbers::NumberTraits<number>::abs (x)
+         << std::endl;
 } 
 
 
index bfcaccfd6481b40a61cfa2624a356fc948f4d6ca..340da47975ee92a2f5583a08fc058c41b39c4dd6 100644 (file)
@@ -3,23 +3,29 @@ DEAL::typeid(x).name() = f
 DEAL::typeid(NumberTraits<number>::real_type).name() = f
 DEAL::1.50
 DEAL::2.25
+DEAL::1.50
 DEAL::typeid(x).name() = f
 DEAL::typeid(NumberTraits<number>::real_type).name() = f
 DEAL::-1.50
 DEAL::2.25
+DEAL::1.50
 DEAL::typeid(x).name() = d
 DEAL::typeid(NumberTraits<number>::real_type).name() = d
 DEAL::1.50
 DEAL::2.25
+DEAL::1.50
 DEAL::typeid(x).name() = d
 DEAL::typeid(NumberTraits<number>::real_type).name() = d
 DEAL::-1.50
 DEAL::2.25
+DEAL::1.50
 DEAL::typeid(x).name() = e
 DEAL::typeid(NumberTraits<number>::real_type).name() = e
 DEAL::1.50
 DEAL::2.25
+DEAL::1.50
 DEAL::typeid(x).name() = e
 DEAL::typeid(NumberTraits<number>::real_type).name() = e
 DEAL::-1.50
 DEAL::2.25
+DEAL::1.50

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.