From c4871290ff09ad4dfb2a72391c3177902ed41ceb Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Thu, 2 Sep 2010 08:23:53 +0000
Subject: [PATCH] simplify code by factoring out the squared distance

[[Imported from SVN: r6311]]
---
 test/unitvectortest.cc | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/test/unitvectortest.cc b/test/unitvectortest.cc
index 8e7019a2..e13ac291 100644
--- a/test/unitvectortest.cc
+++ b/test/unitvectortest.cc
@@ -11,9 +11,16 @@ using namespace Dune;
 
 const double eps = 1e-6;
 
-double square(double a)
+template <int dim>
+double energy(const UnitVector<dim>& a, const UnitVector<dim>& b)
+{
+    return UnitVector<dim>::distance(a,b) * UnitVector<dim>::distance(a,b);
+}
+
+template <int dim>
+double energy(const UnitVector<dim>& a, const FieldVector<double,dim>& b)
 {
-    return a*a;
+    return UnitVector<dim>::distance(a,b) * UnitVector<dim>::distance(a,b);
 }
 
 template <int dim>
@@ -32,7 +39,7 @@ void testDerivativesOfSquaredDistance(const UnitVector<dim>& a, const UnitVector
         FieldVector<double,dim> bMinus = b.globalCoordinates();
         bPlus[i]  += eps;
         bMinus[i] -= eps;
-        d2_fd[i] = (square(UnitVector<dim>::distance(a,bPlus)) - square(UnitVector<dim>::distance(a,bMinus))) / (2*eps);
+        d2_fd[i] = (energy(a,bPlus) - energy(a,bMinus)) / (2*eps);
     }
     
     std::cout << "Analytical: " << d2 << std::endl;
@@ -57,7 +64,7 @@ void testDerivativesOfSquaredDistance(const UnitVector<dim>& a, const UnitVector
                 bPlus[i]  += eps;
                 bMinus[i] -= eps;
 
-                d2d2_fd[i][i] = (square(UnitVector<dim>::distance(a,bPlus)) - 2*square(UnitVector<dim>::distance(a,b)) + square(UnitVector<dim>::distance(a,bMinus))) / (eps*eps);
+                d2d2_fd[i][i] = (energy(a,bPlus) - 2*energy(a,b) + energy(a,bMinus)) / (eps*eps);
             } else {
                 
                 FieldVector<double,dim> bPlusPlus   = b.globalCoordinates();
@@ -70,8 +77,8 @@ void testDerivativesOfSquaredDistance(const UnitVector<dim>& a, const UnitVector
                 bMinusPlus[i]  -= eps;  bMinusPlus[j]  += eps;
                 bMinusMinus[i] -= eps;  bMinusMinus[j] -= eps;
             
-                d2d2_fd[i][j] = (square(UnitVector<dim>::distance(a,bPlusPlus)) + square(UnitVector<dim>::distance(a,bMinusMinus))
-                                        - square(UnitVector<dim>::distance(a,bPlusMinus)) - square(UnitVector<dim>::distance(a,bMinusPlus))) / (4*eps*eps);
+                d2d2_fd[i][j] = (energy(a,bPlusPlus) + energy(a,bMinusMinus)
+                                        - energy(a,bPlusMinus) - energy(a,bMinusPlus)) / (4*eps*eps);
             }
         }
     }
-- 
GitLab