]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
0021099: [CEA 437] interp3D hex splitting method
authoreap <eap@opencascade.com>
Thu, 20 Jan 2011 13:34:39 +0000 (13:34 +0000)
committereap <eap@opencascade.com>
Thu, 20 Jan 2011 13:34:39 +0000 (13:34 +0000)
    Test 3D interpolation with all SplittingPolicy's

src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx

index b60b3e066a7353718ad08e0eedde5a2ab804484b..7e2725d4aa060df44892e3c98c42a2ccd2451d3d 100644 (file)
@@ -924,53 +924,59 @@ void MEDCouplingBasicsTest::test3DInterpP0P0_1()
   INTERP_KERNEL::Interpolation3D myInterpolator;
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8.e6,sumAll(res),1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(41666.66666666667,res[0][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][10],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(41666.66666666667,res[1][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[1][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[1][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[2][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[2][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[2][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[2][9],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[2][11],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[3][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[3][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333331,res[3][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[3][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[3][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[4][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[4][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[4][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[4][9],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[4][10],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[5][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333331,res[5][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[5][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[5][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[5][10],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[6][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(250000,res[6][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(541666.6666666667,res[6][9],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[6][11],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333331,res[7][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(333333.3333333333,res[7][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(624999.9999999997,res[7][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333333,res[7][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333331,res[7][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333333,res[7][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333333,res[7][9],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333331,res[7][10],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][11],1e-7);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(8.e6,sumAll(res),1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(41666.66666666667,res[0][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[0][10],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(41666.66666666667,res[1][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[1][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[1][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[2][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[2][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[2][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[2][9],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[2][11],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[3][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[3][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333331,res[3][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[3][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[3][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[4][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[4][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[4][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333333,res[4][9],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[4][10],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[5][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(20833.33333333331,res[5][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[5][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[5][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(395833.3333333333,res[5][10],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[6][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(250000,res[6][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(541666.6666666667,res[6][9],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[6][11],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333331,res[7][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(333333.3333333333,res[7][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(624999.9999999997,res[7][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333333,res[7][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333331,res[7][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333333,res[7][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333333,res[7][9],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(83333.33333333331,res[7][10],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(479166.6666666667,res[7][11],1e-7);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -987,30 +993,36 @@ void MEDCouplingBasicsTest::test3DInterpP0P0PL_1()
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
   myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1031,30 +1043,36 @@ void MEDCouplingBasicsTest::test3DInterpP0P0PL_2()
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
   myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1075,30 +1093,36 @@ void MEDCouplingBasicsTest::test3DInterpP0P0PL_3()
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
   myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1123,30 +1147,36 @@ void MEDCouplingBasicsTest::test3DInterpP0P0PL_4()
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
   myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][10],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][9],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][4],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][5],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1162,41 +1192,47 @@ void MEDCouplingBasicsTest::test3DInterpP0P1_1()
   INTERP_KERNEL::Interpolation3D myInterpolator;
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
-  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444445,res[0][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[0][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666666,res[0][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[0][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[1][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(140277.7777777778,res[1][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444444,res[1][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[1][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444444,res[1][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[1][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888889,res[1][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(348611.1111111111,res[2][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888888,res[2][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444444,res[3][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333334,res[3][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666666,res[3][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[3][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.111111111,res[4][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222221,res[4][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(223611.1111111111,res[5][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[5][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[5][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888892,res[5][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[6][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.1111111109,res[7][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222221,res[7][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.1111111111,res[8][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[8][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666666,res[8][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[8][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[8][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[8][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1466666.666666668,res[8][7],1e-7);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
+    CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444445,res[0][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[0][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666666,res[0][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[0][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[1][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(140277.7777777778,res[1][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444444,res[1][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[1][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444444,res[1][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[1][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888889,res[1][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(348611.1111111111,res[2][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888888,res[2][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444444,res[3][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333334,res[3][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666666,res[3][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[3][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.111111111,res[4][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222221,res[4][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(223611.1111111111,res[5][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[5][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[5][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888892,res[5][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[6][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.1111111109,res[7][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222221,res[7][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.1111111111,res[8][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[8][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666666,res[8][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[8][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[8][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[8][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1466666.666666668,res[8][7],1e-7);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1213,18 +1249,24 @@ void MEDCouplingBasicsTest::test3DInterpP0P1PL_1()
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
   myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
-  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(9.,sumAll(res),1e-12);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
+    CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][4],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][2],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][5],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(9.,sumAll(res),1e-12);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1240,41 +1282,47 @@ void MEDCouplingBasicsTest::test3DInterpP1P0_1()
   INTERP_KERNEL::Interpolation3D myInterpolator;
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[0][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(140277.7777777778,res[1][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(223611.1111111111,res[1][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.1111111111,res[1][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444444,res[2][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444445,res[2][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[2][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[3][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[3][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[3][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.1111111109,res[3][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[3][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444445,res[4][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444445,res[4][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[4][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[5][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[5][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.1111111109,res[5][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[5][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666666,res[5][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666666,res[6][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888889,res[6][1],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(348611.1111111112,res[6][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666667,res[6][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666666,res[6][8],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[7][0],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[7][2],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[7][3],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222221,res[7][4],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888892,res[7][5],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[7][6],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222222,res[7][7],1e-7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1466666.666666668,res[7][8],1e-7);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[0][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(140277.7777777778,res[1][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(223611.1111111111,res[1][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.1111111111,res[1][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444444,res[2][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444445,res[2][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[2][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[3][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[3][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[3][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.1111111109,res[3][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666667,res[3][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(244444.4444444445,res[4][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(119444.4444444445,res[4][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(11111.11111111111,res[4][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(145833.3333333333,res[5][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[5][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(536111.1111111109,res[5][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(125000,res[5][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666666,res[5][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666666,res[6][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888889,res[6][1],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(348611.1111111112,res[6][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(291666.6666666667,res[6][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(166666.6666666666,res[6][8],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[7][0],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[7][2],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(151388.8888888889,res[7][3],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222221,res[7][4],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(26388.88888888892,res[7][5],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[7][6],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(297222.2222222222,res[7][7],1e-7);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1466666.666666668,res[7][8],1e-7);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();
@@ -1291,32 +1339,38 @@ void MEDCouplingBasicsTest::test3DInterpP1P0PL_1()
   std::vector<std::map<int,double> > res;
   myInterpolator.setPrecision(1e-12);
   myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(3.75,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25,res[0][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[5][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[5][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25,res[7][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(3.75,res[7][8],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  INTERP_KERNEL::SplittingPolicy sp[] = { INTERP_KERNEL::PLANAR_FACE_5, INTERP_KERNEL::PLANAR_FACE_6, INTERP_KERNEL::GENERAL_24, INTERP_KERNEL::GENERAL_48 };
+  for ( int i = 0; i < 4; ++i )
+  {
+    myInterpolator.setSplittingPolicy( sp[i] );
+    res.clear();
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+    CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(3.75,res[0][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25,res[0][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][5],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][7],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[5][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][4],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[5][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][2],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][3],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[6][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25,res[7][6],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(3.75,res[7][8],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(21.,sumAll(res),1e-12);
+  }
   //clean up
   sourceMesh->decrRef();
   targetMesh->decrRef();