From 9ba69882381e7388e6fb2cca3b7d3a478442c146 Mon Sep 17 00:00:00 2001
From: Oliver Sander <oliver.sander@tu-dresden.de>
Date: Mon, 21 Oct 2019 16:52:02 +0200
Subject: [PATCH] Fix cosseratenergytest

* Do not test with configurations that result in zero-area elements
  (because the energy is inf in these cases).
* Test for the relative energy difference, rather than the absolute one,
  because the energy values can get very large.
---
 test/cosseratenergytest.cc | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/test/cosseratenergytest.cc b/test/cosseratenergytest.cc
index d6d2f5e2..05dc2011 100644
--- a/test/cosseratenergytest.cc
+++ b/test/cosseratenergytest.cc
@@ -197,10 +197,7 @@ void testEnergy(const GridType* grid, const std::vector<TargetSpace>& coefficien
         
         double energy = assembler.energy(localView,
                                          rotatedCoefficients);
-        
-        assert(std::fabs(energy-referenceEnergy) < 1e-4);
-        
-        //std::cout << "energy: " << energy << std::endl;
+        assert(std::fabs(energy-referenceEnergy)/std::fabs(energy) < 1e-4);
 
     }
 
@@ -234,6 +231,16 @@ void testFrameInvariance()
 
     for (int i=0; i<numIndices; i++, ++index) {
         
+        // Discard all configurations that deform the element to zero area
+        bool identicalPoints = false;
+        for (int j=0; j<domainDim+1; j++)
+          for (int k=0; k<domainDim+1; k++)
+            if (j!=k and (testPoints[index[j]].r - testPoints[index[k]].r).two_norm() < 1e-5)
+              identicalPoints = true;
+
+        if (identicalPoints)
+          continue;
+
         for (int j=0; j<domainDim+1; j++)
             coefficients[j] = testPoints[index[j]];
 
-- 
GitLab