[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Plans for ITK version 4



> So I just noticed that my nightly build of ITK 4 has been
> failing ever since Debian switched to gcc 4.7 [1].  The
> previous night was successful [2].  Might be worth switching
> to gcc-4.6 for the build.
> 
> 
> [1] http://open.cdash.org/buildSummary.php?buildid=2260572
> [2] http://open.cdash.org/buildSummary.php?buildid=2257925
> 
> -Steve

Attached is a patch that will fix the failed FEM tests. Let me know if
there are any problems.

The segfaults are still there though. BTW, the segfaults go away with
-O2 instead of the default -O3 optimization. We'll see where that leads.

-Paul

Description: Fix Failed FEM Tests on gcc 4.7
 With any optimization (-O1, -O2, -O3), the following tests were failing
 .
        557 - itkFEMC0HexahedralElement-NodalLoads-BCs (Failed)
        559 - itkFEMC0HexahedralElement-GravityLoad-BCs (Failed)
        560 - itkFEMC0TetrahedralElement-NodalLoads-BCs (Failed)
        562 - itkFEMC0TetrahedralElement-GravityLoad-BCs (Failed)
        563 - itkFEMC0QuadElement-NodalLoads-BCs (Failed)
        564 - itkFEMC0QuadElement-Strain (Failed)
        566 - itkFEMC0QuadElement-GravityLoad-BCs (Failed)
        567 - itkFEMLoadLandmarkImplementation (Failed)
        569 - itkFEMC0TriangularElement-NodalLoads-BCs (Failed)
        572 - itkFEMC0TriangularElement-Quadratic (Failed)
        573 - itkFEMTruss (Failed) 
 .
 It looks like expectedSolution in the code below was pointing to some
 unitialized memory. So while the tests were giving the right result, the
 expectedSolution was wrong. This change just sets expectedSolution
 directly instead of pointing it to the first element in an array that is 
 no longer on the stack.
Author: Paul Novotny <paul@paulnovo.us>

--- debian-svn.orig/Modules/Numerics/FEM/test/itkFEMElement2DTest.cxx
+++ debian-svn/Modules/Numerics/FEM/test/itkFEMElement2DTest.cxx
@@ -90,7 +90,8 @@
 
   femSO->GetFEMObject()->FinalizeMesh();
 
-  double *    expectedSolution = NULL;
+  double      expectedSolution[12];
+  bool        haveExpectedSolution = false;
   bool        foundError = false;
   std::string modelFile = itksys::SystemTools::GetFilenameName( argv[1] );
 
@@ -137,135 +138,103 @@
       if( modelFile == "quad2-small.meta" )
         {
         tolerance = 10e-10;
-        double quad2smallExpectedSolution[8] =
-          {
-          0, 0,
-          2.97334e-07, -1.20555e-06,
-          1.944e-06, -1.32333e-06,
-          0, 0
-          };
-        expectedSolution = &(quad2smallExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 2.97334e-07;  expectedSolution[3] = -1.20555e-06;
+        expectedSolution[4] = 1.944e-06;    expectedSolution[5] = -1.32333e-06;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
         }
       else if( modelFile == "quad2-strain.meta" )
         {
         tolerance = 10e-10;
-        double quad2strainExpectedSolution[8] =
-          {
-          0, 0,
-          2.56204e-07, -1.02482e-06,
-          1.67956e-06, -1.19562e-06,
-          0, 0
-          };
-        expectedSolution = &(quad2strainExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 2.56204e-07;  expectedSolution[3] = -1.02482e-06;
+        expectedSolution[4] = 1.67956e-06;  expectedSolution[5] = -1.19562e-06;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
         }
       else if( modelFile == "quad4.meta" )
         {
         tolerance = 10e-10;
-        double quad4ExpectedSolution[8] =
-          {
-          0, 0,
-          0, 0,
-          0, 0,
-          0, 0
-          };
-        expectedSolution = &(quad4ExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
         }
       else if( modelFile == "quad6-grav.meta" )
         {
         tolerance = 10e-10;
-        double quad6gravExpectedSolution[8] =
-          {
-          0, 0,
-          0, 0,
-          -5.32164e-08, 1.59649e-07,
-          5.32164e-08, 1.59649e-07
-          };
-        expectedSolution = &(quad6gravExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = -5.32164e-08; expectedSolution[5] = 1.59649e-07;
+        expectedSolution[6] = 5.32164e-08;  expectedSolution[7] = 1.59649e-07;
         }
       else if( modelFile == "quad-lm.meta" )
         {
         tolerance = 10e-7;
-        double quadlmExpectedSolution[8] =
-          {
-          0, 0,
-          -8.76093e-05, -0.0135944,
-          -0.00420457, 0.00477804,
-          -0.0163679, -0.0360446,
-          };
-        expectedSolution = &(quadlmExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = -8.76093e-05; expectedSolution[3] = -0.0135944;
+        expectedSolution[4] = -0.00420457;  expectedSolution[5] = 0.00477804;
+        expectedSolution[6] = -0.0163679;   expectedSolution[7] = -0.0360446;
         }
       else if( modelFile == "trapezoid.meta" )
         {
         tolerance = 10e-10;
-        double trapezoidExpectedSolution[8] =
-          {
-          0, 0,
-          0, 0,
-          0, 0,
-          0, 0
-          };
-        expectedSolution = &(trapezoidExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
         }
       else if( modelFile == "tri2.meta" )
         {
         tolerance = 10e-6;
-        double tri2ExpectedSolution[8] =
-          {
-          0, 0,
-          9.86667e-07, -2.028e-05,
-          -9.76e-06, -5.67867e-05,
-          -2.87733e-05, -9.68267e-05
-          };
-        expectedSolution = &(tri2ExpectedSolution[0]);
-
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 9.86667e-07;  expectedSolution[3] = -2.028e-05;
+        expectedSolution[4] = -9.76e-06;    expectedSolution[5] = -5.67867e-05;
+        expectedSolution[6] = -2.87733e-05; expectedSolution[7] = -9.68267e-05;
         }
       else if( modelFile == "tri3.meta" )
         {
         tolerance = 10e-10;
-        double tri3ExpectedSolution[6] =
-          {
-          0, 0,
-          0, 0,
-          0, 0
-          };
-        expectedSolution = &(tri3ExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
         }
       else if( modelFile == "tri3-e.meta" )
         {
         tolerance = 10e-10;
-        double tri3eExpectedSolution[6] =
-          {
-          0, 0,
-          0, 0,
-          0, 0
-          };
-        expectedSolution = &(tri3eExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
         }
       else if( modelFile == "tri3-q.meta" )
         {
         tolerance = 10e-9;
-        double tri3qExpectedSolution[12] =
-          {
-          0, 0,
-          -3.315e-07, 1.57527e-06,
-          4.98323e-06, 7.36775e-07,
-          -5.3625e-08, 2.18676e-06,
-          8.32488e-07, 1.04065e-06,
-          5.22113e-07, 2.42889e-06
-          };
-        expectedSolution = &(tri3qExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = -3.315e-07;   expectedSolution[3] = 1.57527e-06;
+        expectedSolution[4] = 4.98323e-06;  expectedSolution[5] = 7.36775e-07;
+        expectedSolution[6] = -5.3625e-08;  expectedSolution[7] = 2.18676e-06;
+        expectedSolution[8] = 8.32488e-07;  expectedSolution[9] = 1.04065e-06;
+        expectedSolution[10] = 5.22113e-07; expectedSolution[11] = 2.42889e-06;
         }
       else if( modelFile == "truss.meta" )
         {
         tolerance = 10e-7;
-        double trussExpectedSolution[11] =
-          {
-          0, 0, -0.179399,
-          0.00169764, -0.478397, 0,
-          0.00339527, 0, 0.179399,
-          0.392323, -0.505307
-          };
-        expectedSolution = &(trussExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = -0.179399;    expectedSolution[3] = 0.00169764;
+        expectedSolution[4] = -0.478397;    expectedSolution[5] = 0;
+        expectedSolution[6] = 0.00339527;   expectedSolution[7] = 0;
+        expectedSolution[8] =  0.179399;    expectedSolution[9] = 0.392323;
+        expectedSolution[10] = -0.505307;
         }
       else
         {
@@ -293,7 +262,7 @@
         }
       else
         {
-        if( expectedSolution != NULL )
+        if( haveExpectedSolution )
           {
           bool testError = CheckDisplacements1(solver, s, expectedSolution, tolerance);
           if( testError )
--- debian-svn.orig/Modules/Numerics/FEM/test/itkFEMElement3DTest.cxx
+++ debian-svn/Modules/Numerics/FEM/test/itkFEMElement3DTest.cxx
@@ -92,7 +92,8 @@
 
   femSO->GetFEMObject()->FinalizeMesh();
 
-  double *    expectedSolution = NULL;
+  double      expectedSolution[24];
+  bool        haveExpectedSolution = false;
   bool        foundError = false;
   std::string modelFile = itksys::SystemTools::GetFilenameName( argv[1] );
 
@@ -139,87 +140,88 @@
       if( modelFile == "hexa2.meta" )
         {
         tolerance = 10e-6;
-        double hex2expectedSolution[24] =
-          {
-          -0.086324, -0.00055514, 0.121079,
-          0.0952793, -0.00331153, 0.114235,
-          0.0727445, 0.00768949, -0.0394109,
-          -0.0774779, -0.0115562, -0.0325665,
-          0, 0, 0.0713128,
-          0, 0, 0.0734239,
-          0.0439568, 0, 0.00211102,
-          -0.0397348, 0, 0
-          };
-        expectedSolution = &(hex2expectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = -0.086324;    expectedSolution[1] = -0.00055514;
+        expectedSolution[2] = 0.121079;     expectedSolution[3] = 0.0952793;
+        expectedSolution[4] = -0.00331153;  expectedSolution[5] = 0.114235;
+        expectedSolution[6] = 0.0727445;    expectedSolution[7] = 0.00768949;
+        expectedSolution[8] = -0.0394109;   expectedSolution[9] = -0.0774779;
+        expectedSolution[10] = -0.0115562;  expectedSolution[11] = -0.0325665;
+        expectedSolution[12] = 0;           expectedSolution[13] = 0;
+        expectedSolution[14] = 0.0713128;   expectedSolution[15] = 0;
+        expectedSolution[16] = 0;           expectedSolution[17] = 0.0734239;
+        expectedSolution[18] = 0.0439568;   expectedSolution[19] = 0;
+        expectedSolution[20] = 0.00211102;  expectedSolution[21] = -0.0397348;
+        expectedSolution[22] = 0;           expectedSolution[23] = 0;
         }
       else if( modelFile == "hexa3.meta" )
         {
         tolerance = 10e-10;
-        double hex3ExpectedSolution[24] =
-          {
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0
-          };
-        expectedSolution = &(hex3ExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
+        expectedSolution[8] = 0;            expectedSolution[9] = 0;
+        expectedSolution[10] = 0;           expectedSolution[11] = 0;
+        expectedSolution[12] = 0;           expectedSolution[13] = 0;
+        expectedSolution[14] = 0;           expectedSolution[15] = 0;
+        expectedSolution[16] = 0;           expectedSolution[17] = 0;
+        expectedSolution[18] = 0;           expectedSolution[19] = 0;
+        expectedSolution[20] = 0;           expectedSolution[21] = 0;
+        expectedSolution[22] = 0;           expectedSolution[23] = 0;
         }
       else if( modelFile == "hexa4-grav.meta" )
         {
         tolerance = 10e-10;
-        double hex4GravExpectedSolution[24] =
-          {
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          9.27489e-08, 2.95922e-06, -9.27489e-08,
-          -1.49661e-06, 8.59118e-07, 1.38971e-06,
-          -1.32956e-06, -5.70152e-07, 1.32956e-06,
-          -1.38971e-06, 8.59118e-07, 1.49661e-06,
-          -1.59154e-06, 2.37079e-06, 1.59154e-06
-          };
-        expectedSolution = &(hex4GravExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;             expectedSolution[1] = 0;
+        expectedSolution[2] = 0;             expectedSolution[3] = 0;
+        expectedSolution[4] = 0;             expectedSolution[5] = 0;
+        expectedSolution[6] = 0;             expectedSolution[7] = 0;
+        expectedSolution[8] = 0;             expectedSolution[9] = 9.27489e-08;
+        expectedSolution[10] = 2.95922e-06;  expectedSolution[11] = -9.27489e-08;
+        expectedSolution[12] = -1.49661e-06; expectedSolution[13] = 8.59118e-07;
+        expectedSolution[14] = 1.38971e-06;  expectedSolution[15] = -1.32956e-06;
+        expectedSolution[16] = -5.70152e-07; expectedSolution[17] = 1.32956e-06;
+        expectedSolution[18] = -1.38971e-06; expectedSolution[19] = 8.59118e-07;
+        expectedSolution[20] = 1.49661e-06;  expectedSolution[21] = -1.59154e-06;
+        expectedSolution[22] = 2.37079e-06;  expectedSolution[23] = 1.59154e-06;
         }
       else if( modelFile == "tetra2.meta" )
         {
         tolerance = 10e-9;
-        double tetra2ExpectedSolution[15] =
-          {
-          0, 0, 0,
-          0, 0, -0.000866667,
-          0, 0, -0.000866667,
-          0, 0, 0,
-          0, 0, 0
-          };
-        expectedSolution = &(tetra2ExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = -0.000866667;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
+        expectedSolution[8] = -0.000866667; expectedSolution[9] = 0;
+        expectedSolution[10] = 0;           expectedSolution[11] = 0;
+        expectedSolution[12] = 0;           expectedSolution[13] = 0;
+        expectedSolution[14] = 0;
         }
       else if( modelFile == "tetra3.meta" )
         {
         tolerance = 10e-10;
-        double tetra3ExpectedSolution[12] =
-          {
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0
-          };
-        expectedSolution = &(tetra3ExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
+        expectedSolution[8] = 0;            expectedSolution[9] = 0;
+        expectedSolution[10] = 0;           expectedSolution[11] = 0;
         }
       else if( modelFile == "tetra4-grav.meta" )
         {
         tolerance = 10e-9;
-        double tetra4gravExpectedSolution[12] =
-          {
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 0,
-          0, 0, 1.46858e-05
-          };
-        expectedSolution = &(tetra4gravExpectedSolution[0]);
+        haveExpectedSolution = true;
+        expectedSolution[0] = 0;            expectedSolution[1] = 0;
+        expectedSolution[2] = 0;            expectedSolution[3] = 0;
+        expectedSolution[4] = 0;            expectedSolution[5] = 0;
+        expectedSolution[6] = 0;            expectedSolution[7] = 0;
+        expectedSolution[8] = 0;            expectedSolution[9] = 0;
+        expectedSolution[10] = 0;           expectedSolution[11] = 1.46858e-05;
         }
       else
         {
@@ -231,7 +233,7 @@
       PrintNodalCoordinates1(solver, s);
       // PrintU(S, s, );
 
-      if( expectedSolution != NULL )
+      if( haveExpectedSolution )
         {
         bool testError = CheckDisplacements1(solver, s, expectedSolution, tolerance);
         if( testError )

Reply to: