]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
*** empty log message ***
authorageay <ageay>
Mon, 8 Mar 2010 15:23:36 +0000 (15:23 +0000)
committerageay <ageay>
Mon, 8 Mar 2010 15:23:36 +0000 (15:23 +0000)
23 files changed:
src/INTERP_KERNEL/CellModel.cxx
src/INTERP_KERNEL/CellModel.hxx
src/MEDCoupling/MEDCouplingCMesh.cxx
src/MEDCoupling/MEDCouplingCMesh.hxx
src/MEDCoupling/MEDCouplingExtrudedMesh.cxx
src/MEDCoupling/MEDCouplingExtrudedMesh.hxx
src/MEDCoupling/MEDCouplingFieldDiscretization.cxx
src/MEDCoupling/MEDCouplingFieldDiscretization.hxx
src/MEDCoupling/MEDCouplingFieldDouble.cxx
src/MEDCoupling/MEDCouplingFieldDouble.hxx
src/MEDCoupling/MEDCouplingMesh.hxx
src/MEDCoupling/MEDCouplingPointSet.cxx
src/MEDCoupling/MEDCouplingPointSet.hxx
src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling/MEDCouplingUMesh.hxx
src/MEDCoupling/MEDCouplingUMeshDesc.cxx
src/MEDCoupling/MEDCouplingUMeshDesc.hxx
src/MEDCoupling/Test/MEDCouplingBasicsTest.cxx [deleted file]
src/MEDCoupling/Test/MEDCouplingBasicsTest.hxx
src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx [new file with mode: 0644]
src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx [new file with mode: 0644]
src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx [new file with mode: 0644]
src/MEDCoupling/Test/Makefile.am

index 77a64858287616da2df2711a941cc1a06ea7b4b2..4c367a115ae2f0c67df142e9da29d8be83d34127 100644 (file)
@@ -87,21 +87,22 @@ namespace INTERP_KERNEL
   {
     _quadratic=false;
     _dyn=false;
+    _extruded_type=NORM_ERROR;
     switch(type)
       {
       case NORM_POINT0:
         {
-          _nb_of_pts=0; _nb_of_sons=0; _dim=0;
+          _nb_of_pts=0; _nb_of_sons=0; _dim=0; _extruded_type=NORM_SEG2;
         }
         break;
       case NORM_SEG2:
         {
-          _nb_of_pts=2; _nb_of_sons=0; _dim=1;
+          _nb_of_pts=2; _nb_of_sons=0; _dim=1; _extruded_type=NORM_QUAD4;
         }
         break;
       case NORM_SEG3:
         {
-          _nb_of_pts=3; _nb_of_sons=0; _dim=1;
+          _nb_of_pts=3; _nb_of_sons=0; _dim=1; _extruded_type=NORM_QUAD8;
         }
         break;
       case NORM_TETRA4:
@@ -133,7 +134,7 @@ namespace INTERP_KERNEL
           _sons_con[0][0]=0; _sons_con[0][1]=1; _nb_of_sons_con[0]=2;
           _sons_con[1][0]=1; _sons_con[1][1]=2; _nb_of_sons_con[1]=2;
           _sons_con[2][0]=2; _sons_con[2][1]=3; _nb_of_sons_con[2]=2;
-          _sons_con[3][0]=3; _sons_con[3][1]=0; _nb_of_sons_con[3]=2;
+          _sons_con[3][0]=3; _sons_con[3][1]=0; _nb_of_sons_con[3]=2; _extruded_type=NORM_HEXA8;
         }
         break;
       case NORM_TRI3:
@@ -142,7 +143,7 @@ namespace INTERP_KERNEL
           _sons_type[0]=NORM_SEG2; _sons_type[1]=NORM_SEG2; _sons_type[2]=NORM_SEG2;
           _sons_con[0][0]=0; _sons_con[0][1]=1; _nb_of_sons_con[0]=2;
           _sons_con[1][0]=1; _sons_con[1][1]=2; _nb_of_sons_con[1]=2;
-          _sons_con[2][0]=2; _sons_con[2][1]=0; _nb_of_sons_con[2]=2;
+          _sons_con[2][0]=2; _sons_con[2][1]=0; _nb_of_sons_con[2]=2; _extruded_type=NORM_PENTA6;
         }
         break;
       case NORM_TRI6:
@@ -151,7 +152,7 @@ namespace INTERP_KERNEL
           _sons_type[0]=NORM_SEG3; _sons_type[1]=NORM_SEG3; _sons_type[2]=NORM_SEG3;
           _sons_con[0][0]=0; _sons_con[0][1]=1; _sons_con[0][2]=3; _nb_of_sons_con[0]=3;
           _sons_con[1][0]=1; _sons_con[1][1]=2; _sons_con[1][2]=4; _nb_of_sons_con[1]=3;
-          _sons_con[2][0]=2; _sons_con[2][1]=0; _sons_con[2][2]=5; _nb_of_sons_con[2]=3; _quadratic=true;
+          _sons_con[2][0]=2; _sons_con[2][1]=0; _sons_con[2][2]=5; _nb_of_sons_con[2]=3; _quadratic=true; _extruded_type=NORM_PENTA15;
         }
         break;
       case NORM_QUAD8:
@@ -161,7 +162,7 @@ namespace INTERP_KERNEL
           _sons_con[0][0]=0; _sons_con[0][1]=1; _sons_con[0][2]=4; _nb_of_sons_con[0]=3;
           _sons_con[1][0]=1; _sons_con[1][1]=2; _sons_con[1][2]=5; _nb_of_sons_con[1]=3;
           _sons_con[2][0]=2; _sons_con[2][1]=3; _sons_con[2][2]=6; _nb_of_sons_con[2]=3;
-          _sons_con[3][0]=3; _sons_con[3][1]=0; _sons_con[3][2]=7; _nb_of_sons_con[3]=3; _quadratic=true;
+          _sons_con[3][0]=3; _sons_con[3][1]=0; _sons_con[3][2]=7; _nb_of_sons_con[3]=3; _quadratic=true; _extruded_type=NORM_HEXA20;
         }
         break;
       case NORM_PYRA5:
@@ -232,7 +233,7 @@ namespace INTERP_KERNEL
         break;
       case NORM_POLYGON:
         {
-          _nb_of_pts=0; _nb_of_sons=0; _dim=2; _dyn=true;
+          _nb_of_pts=0; _nb_of_sons=0; _dim=2; _dyn=true; _extruded_type=NORM_POLYHED;
         }
         break;
       case NORM_POLYHED:
index 2acdc6ef64181cbea16f8f16956ede4700a806e3..998623010bb2843c2ac2e9ee9bbbda087dac27f2 100644 (file)
@@ -51,6 +51,7 @@ namespace INTERP_KERNEL
     unsigned getNumberOfSons2(const int *conn, int lgth) const;
     unsigned getNumberOfNodesConstituentTheSon(unsigned sonId) const { return _nb_of_sons_con[sonId]; }
     unsigned getNumberOfNodesConstituentTheSon2(unsigned sonId, const int *nodalConn, int lgth) const;
+    NormalizedCellType getExtrudedType() const { return _extruded_type; }
     NormalizedCellType getSonType(unsigned sonId) const { return _sons_type[sonId]; }
     NormalizedCellType getSonType2(unsigned sonId) const;
     unsigned fillSonCellNodalConnectivity(int sonId, const int *nodalConn, int *sonNodalConn) const;
@@ -62,6 +63,7 @@ namespace INTERP_KERNEL
     unsigned _nb_of_pts;
     unsigned _nb_of_sons;
     NormalizedCellType _type;
+    NormalizedCellType _extruded_type;
     unsigned _sons_con[MAX_NB_OF_SONS][MAX_NB_OF_NODES_PER_ELEM];
     unsigned _nb_of_sons_con[MAX_NB_OF_SONS];
     NormalizedCellType _sons_type[MAX_NB_OF_SONS];
index 4f4b5150f2937716882b0bcb5b20e768ce3e1e93..322a7c479b4ebe52730f0d880e02897c5f40d44b 100644 (file)
@@ -21,6 +21,8 @@
 #include "MEDCouplingFieldDouble.hxx"
 
 #include <functional>
+#include <algorithm>
+#include <numeric>
 
 using namespace ParaMEDMEM;
 
@@ -114,6 +116,61 @@ int MEDCouplingCMesh::getNumberOfNodes() const
   return ret;
 }
 
+void MEDCouplingCMesh::getSplitCellValues(int *res) const
+{
+  int spaceDim=getSpaceDimension();
+  for(int l=0;l<spaceDim;l++)
+    {
+      int val=1;
+      for(int p=l;p<spaceDim-1;p++)
+        val*=getCoordsAt(p)->getNbOfElems()-1;
+      res[spaceDim-l-1]=val;
+    }
+}
+
+void MEDCouplingCMesh::getSplitNodeValues(int *res) const
+{
+  int spaceDim=getSpaceDimension();
+  for(int l=0;l<spaceDim;l++)
+    {
+      int val=1;
+      for(int p=l;p<spaceDim-1;p++)
+        val*=getCoordsAt(p)->getNbOfElems();
+      res[spaceDim-l-1]=val;
+    }
+}
+
+int MEDCouplingCMesh::getCellIdFromPos(int i, int j, int k) const
+{
+  int tmp[3]={i,j,k};
+  int tmp2[3];
+  int spaceDim=getSpaceDimension();
+  getSplitCellValues(tmp2);
+  std::transform(tmp,tmp+spaceDim,tmp2,tmp,std::multiplies<int>());
+  return std::accumulate(tmp,tmp+spaceDim,0);
+}
+
+int MEDCouplingCMesh::getNodeIdFromPos(int i, int j, int k) const
+{
+  int tmp[3]={i,j,k};
+  int tmp2[3];
+  int spaceDim=getSpaceDimension();
+  getSplitNodeValues(tmp2);
+  std::transform(tmp,tmp+spaceDim,tmp2,tmp,std::multiplies<int>());
+  return std::accumulate(tmp,tmp+spaceDim,0);
+}
+
+void MEDCouplingCMesh::getPosFromId(int nodeId, int spaceDim, const int *split, int *res)
+{
+  int work=nodeId;
+  for(int i=spaceDim-1;i>=0;i--)
+    {
+      int pos=work/split[i];
+      work=work%split[i];
+      res[i]=pos;
+    }
+}
+
 int MEDCouplingCMesh::getSpaceDimension() const
 {
   int ret=0;
@@ -131,6 +188,31 @@ int MEDCouplingCMesh::getMeshDimension() const
   return getSpaceDimension();
 }
 
+INTERP_KERNEL::NormalizedCellType MEDCouplingCMesh::getTypeOfCell(int cellId) const
+{
+  switch(getMeshDimension())
+    {
+    case 3:
+      return INTERP_KERNEL::NORM_HEXA8;
+    case 2:
+      return INTERP_KERNEL::NORM_QUAD4;
+    case 1:
+      return INTERP_KERNEL::NORM_SEG2;
+    default:
+      throw INTERP_KERNEL::Exception("Unexpected dimension for MEDCouplingCMesh::getTypeOfCell !");
+    }
+}
+
+void MEDCouplingCMesh::getNodeIdsOfCell(int cellId, std::vector<int>& conn) const
+{
+  //not implemented yet
+}
+
+void MEDCouplingCMesh::getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const
+{
+  //not implemented yet
+}
+
 DataArrayDouble *MEDCouplingCMesh::getCoordsAt(int i) const throw(INTERP_KERNEL::Exception)
 {
   switch(i)
@@ -234,19 +316,21 @@ DataArrayDouble *MEDCouplingCMesh::getCoordinatesAndOwner() const
 {
   DataArrayDouble *ret=DataArrayDouble::New();
   int spaceDim=getSpaceDimension();
-  ret->alloc(getNumberOfNodes(),spaceDim);
+  int nbNodes=getNumberOfNodes();
+  ret->alloc(nbNodes,spaceDim);
   double *pt=ret->getPointer();
-  int pos=0;
-  int nbOfElem;
-  const double *cptr;
-  DataArrayDouble *tabs[3]={_x_array,_y_array,_z_array};
-  for(int j=0;j<3;j++)
+  int tmp[3];
+  getSplitNodeValues(tmp);
+  DataArrayDouble *tabs[3]={getCoordsAt(0),getCoordsAt(1),getCoordsAt(2)};
+  const double *tabsPtr[3];
+  for(int j=0;j<spaceDim;j++)
+    tabsPtr[j]=tabs[j]->getConstPointer();
+  int tmp2[3];
+  for(int i=0;i<nbNodes;i++)
     {
-      nbOfElem=tabs[j]->getNbOfElems();
-      cptr=tabs[j]->getConstPointer();
-      for(int i=0;i<nbOfElem;i++)
-        pt[i*spaceDim+pos]=cptr[i];
-      pos++;
+      getPosFromId(i,spaceDim,tmp,tmp2);
+      for(int j=0;j<spaceDim;j++)
+        pt[i*spaceDim+j]=tabsPtr[j][tmp2[j]];
     }
   return ret;
 }
@@ -255,19 +339,27 @@ DataArrayDouble *MEDCouplingCMesh::getBarycenterAndOwner() const
 {
   DataArrayDouble *ret=DataArrayDouble::New();
   int spaceDim=getSpaceDimension();
-  ret->alloc(getNumberOfCells(),spaceDim);
-  DataArrayDouble *tabs[3]={_x_array,_y_array,_z_array};
+  int nbCells=getNumberOfCells();
+  ret->alloc(nbCells,spaceDim);
   double *pt=ret->getPointer();
-  int pos=0;
-  int nbOfElem;
-  const double *cptr;
-  for(int j=0;j<3;j++)
+  int tmp[3];
+  getSplitCellValues(tmp);
+  DataArrayDouble *tabs[3]={getCoordsAt(0),getCoordsAt(1),getCoordsAt(2)};
+  std::vector<double> tabsPtr[3];
+  for(int j=0;j<spaceDim;j++)
+    {
+      int sz=tabs[j]->getNbOfElems()-1;
+      const double *srcPtr=tabs[j]->getConstPointer();
+      tabsPtr[j].insert(tabsPtr[j].end(),srcPtr,srcPtr+sz);
+      std::transform(tabsPtr[j].begin(),tabsPtr[j].end(),srcPtr+1,tabsPtr[j].begin(),std::plus<double>());
+      std::transform(tabsPtr[j].begin(),tabsPtr[j].end(),tabsPtr[j].begin(),std::bind2nd(std::multiplies<double>(),0.5));
+    }
+  int tmp2[3];
+  for(int i=0;i<nbCells;i++)
     {
-      nbOfElem=tabs[j]->getNbOfElems()-1;
-      cptr=tabs[j]->getConstPointer();
-      for(int i=0;i<nbOfElem;i++)
-        pt[i*spaceDim+pos]=(cptr[i]+cptr[i+1])/2.;
-      pos++;
+      getPosFromId(i,spaceDim,tmp,tmp2);
+      for(int j=0;j<spaceDim;j++)
+        pt[i*spaceDim+j]=tabsPtr[j][tmp2[j]];
     }
   return ret;
 }
index 201a828d5492dc9764d890e2174a7d9bbf6a9198..109d72cc253b938682d537a8f3804f0e239211fb 100644 (file)
@@ -39,6 +39,12 @@ namespace ParaMEDMEM
     int getNumberOfNodes() const;
     int getSpaceDimension() const;
     int getMeshDimension() const;
+    int getCellIdFromPos(int i, int j, int k) const;
+    int getNodeIdFromPos(int i, int j, int k) const;
+    static void getPosFromId(int nodeId, int spaceDim, const int *split, int *res);
+    INTERP_KERNEL::NormalizedCellType getTypeOfCell(int cellId) const;
+    void getNodeIdsOfCell(int cellId, std::vector<int>& conn) const;
+    void getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const;
     DataArrayDouble *getCoordsAt(int i) const throw(INTERP_KERNEL::Exception);
     void setCoords(DataArrayDouble *coordsX,
                    DataArrayDouble *coordsY=0,
@@ -54,6 +60,9 @@ namespace ParaMEDMEM
     MEDCouplingMesh *mergeMyselfWith(const MEDCouplingMesh *other) const;
     DataArrayDouble *getCoordinatesAndOwner() const;
     DataArrayDouble *getBarycenterAndOwner() const;
+    //some useful methods
+    void getSplitCellValues(int *res) const;
+    void getSplitNodeValues(int *res) const;
   private:
     MEDCouplingCMesh();
     ~MEDCouplingCMesh();
index 39e440fc25fa4cd11a8a2a8ef576cb68d030aea6..889a3ad714a4c306a6606157df5aacfa86da0cca 100644 (file)
@@ -19,6 +19,7 @@
 #include "MEDCouplingExtrudedMesh.hxx"
 #include "MEDCouplingUMesh.hxx"
 #include "MEDCouplingMemArray.hxx"
+#include "CellModel.hxx"
 
 #include <limits>
 #include <algorithm>
@@ -76,6 +77,45 @@ int MEDCouplingExtrudedMesh::getMeshDimension() const
   return 3;
 }
 
+INTERP_KERNEL::NormalizedCellType MEDCouplingExtrudedMesh::getTypeOfCell(int cellId) const
+{
+  int nbOfCells2D=_mesh2D->getNumberOfCells();
+  int locId=cellId%nbOfCells2D;
+  INTERP_KERNEL::NormalizedCellType tmp=_mesh2D->getTypeOfCell(locId);
+  return INTERP_KERNEL::CellModel::getCellModel(tmp).getExtrudedType();
+}
+
+void MEDCouplingExtrudedMesh::getNodeIdsOfCell(int cellId, std::vector<int>& conn) const
+{
+  int nbOfCells2D=_mesh2D->getNumberOfCells();
+  int nbOfNodes2D=_mesh2D->getNumberOfNodes();
+  int locId=cellId%nbOfCells2D;
+  int lev=cellId/nbOfCells2D;
+  std::vector<int> tmp,tmp2;
+  _mesh2D->getNodeIdsOfCell(locId,tmp);
+  tmp2=tmp;
+  std::transform(tmp.begin(),tmp.end(),tmp.begin(),std::bind2nd(std::plus<int>(),nbOfNodes2D*lev));
+  std::transform(tmp2.begin(),tmp2.end(),tmp2.begin(),std::bind2nd(std::plus<int>(),nbOfNodes2D*(lev+1)));
+  conn.insert(conn.end(),tmp.begin(),tmp.end());
+  conn.insert(conn.end(),tmp2.begin(),tmp2.end());
+}
+
+void MEDCouplingExtrudedMesh::getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const
+{
+  int nbOfNodes2D=_mesh2D->getNumberOfNodes();
+  int locId=nodeId%nbOfNodes2D;
+  int lev=nodeId/nbOfNodes2D;
+  std::vector<double> tmp,tmp2;
+  _mesh2D->getCoordinatesOfNode(locId,tmp);
+  tmp2=tmp;
+  int spaceDim=_mesh1D->getSpaceDimension();
+  const double *z=_mesh1D->getCoords()->getConstPointer();
+  std::transform(tmp.begin(),tmp.end(),z+lev*spaceDim,tmp.begin(),std::plus<double>());
+  std::transform(tmp2.begin(),tmp2.end(),z+(lev+1)*spaceDim,tmp2.begin(),std::plus<double>());
+  coo.insert(coo.end(),tmp.begin(),tmp.end());
+  coo.insert(coo.end(),tmp2.begin(),tmp2.end());
+}
+
 void MEDCouplingExtrudedMesh::checkCoherency() const throw (INTERP_KERNEL::Exception)
 {
 }
index ee3abeeef7c706ae6f54b4c4b09a22d0f93d1163..88564820e9b0e7951f257551062d6790ea92f060 100644 (file)
@@ -41,6 +41,9 @@ namespace ParaMEDMEM
     int getNumberOfNodes() const;
     int getSpaceDimension() const;
     int getMeshDimension() const;
+    INTERP_KERNEL::NormalizedCellType getTypeOfCell(int cellId) const;
+    void getNodeIdsOfCell(int cellId, std::vector<int>& conn) const;
+    void getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const;
     void checkCoherency() const throw (INTERP_KERNEL::Exception);
     void getBoundingBox(double *bbox) const;
     void updateTime();
index 266ee4bdd390bbc4e06cf82204017929d987f07b..4fbcfd6c35767ebdbc1410975228bd5a61a454dc 100644 (file)
 //
 #include "MEDCouplingFieldDiscretization.hxx"
 #include "MEDCouplingPointSet.hxx"
+#include "MEDCouplingCMesh.hxx"
 #include "MEDCouplingFieldDouble.hxx"
 
+#include "InterpolationUtils.hxx"
+
 #include <limits>
 #include <algorithm>
 #include  <functional>
@@ -117,6 +120,17 @@ MEDCouplingFieldDouble *MEDCouplingFieldDiscretizationP0::getWeightingField(cons
 void MEDCouplingFieldDiscretizationP0::getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const
 {
   int id=mesh->getElementContainingPoint(loc,_precision);
+  if(id==-1)
+    throw INTERP_KERNEL::Exception("Specified point is detected outside of mesh : unable to apply P0::getValueOn !");
+  arr->getTuple(id,res);
+}
+
+void MEDCouplingFieldDiscretizationP0::getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const
+{
+  const MEDCouplingCMesh *meshC=dynamic_cast<const MEDCouplingCMesh *>(mesh);
+  if(!meshC)
+    throw INTERP_KERNEL::Exception("P0::getValueOnPos is only accessible for structured meshes !");
+  int id=meshC->getCellIdFromPos(i,j,k);
   arr->getTuple(id,res);
 }
 
@@ -197,6 +211,44 @@ MEDCouplingFieldDouble *MEDCouplingFieldDiscretizationP1::getWeightingField(cons
 
 void MEDCouplingFieldDiscretizationP1::getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const
 {
+  int id=mesh->getElementContainingPoint(loc,_precision);
+  if(id==-1)
+    throw INTERP_KERNEL::Exception("Specified point is detected outside of mesh : unable to apply P1::getValueOn !");
+  INTERP_KERNEL::NormalizedCellType type=mesh->getTypeOfCell(id);
+  if(type!=INTERP_KERNEL::NORM_SEG2 && type!=INTERP_KERNEL::NORM_TRI3 && type!=INTERP_KERNEL::NORM_TETRA4)
+    throw INTERP_KERNEL::Exception("P1 getValueOn is not specified for not simplex cells !");
+  std::vector<int> conn;
+  std::vector<double> coo;
+  mesh->getNodeIdsOfCell(id,conn);
+  for(std::vector<int>::const_iterator iter=conn.begin();iter!=conn.end();iter++)
+    mesh->getCoordinatesOfNode(*iter,coo);
+  int spaceDim=mesh->getSpaceDimension();
+  int nbOfNodes=conn.size();
+  std::vector<const double *> vec(nbOfNodes);
+  for(int i=0;i<nbOfNodes;i++)
+    vec[i]=&coo[i*spaceDim];
+  double *tmp=new double[nbOfNodes];
+  INTERP_KERNEL::barycentric_coords(vec,loc,tmp);
+  int sz=arr->getNumberOfComponents();
+  double *tmp2=new double[sz];
+  std::fill(res,res+sz,0.);
+  for(int i=0;i<nbOfNodes;i++)
+    {
+      arr->getTuple(conn[i],tmp2);
+      std::transform(tmp2,tmp2+sz,tmp2,std::bind2nd(std::multiplies<double>(),tmp[i]));
+      std::transform(res,res+sz,tmp2,res,std::plus<double>());
+    }
+  delete [] tmp;
+  delete [] tmp2;
+}
+
+void MEDCouplingFieldDiscretizationP1::getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const
+{
+  const MEDCouplingCMesh *meshC=dynamic_cast<const MEDCouplingCMesh *>(mesh);
+  if(!meshC)
+    throw INTERP_KERNEL::Exception("P1::getValueOnPos is only accessible for structured meshes !");
+  int id=meshC->getNodeIdFromPos(i,j,k);
+  arr->getTuple(id,res);
 }
 
 void MEDCouplingFieldDiscretizationP1::renumberValuesOnNodes(const DataArrayInt *old2New, DataArrayDouble *arr) const
index 0d9b90c264092593fe0b6f3805e65cff432fc2fb..12b68f3cc185a1062256d76686e9125022f6860a 100644 (file)
@@ -48,6 +48,7 @@ namespace ParaMEDMEM
     virtual void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception) = 0;
     virtual MEDCouplingFieldDouble *getWeightingField(const MEDCouplingMesh *mesh, bool isAbs) const = 0;
     virtual void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const = 0;
+    virtual void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const = 0;
     virtual MEDCouplingMesh *buildSubMeshData(const int *start, const int *end, const MEDCouplingMesh *mesh, DataArrayInt *&di) const = 0;
     virtual void renumberValuesOnNodes(const DataArrayInt *old2New, DataArrayDouble *arr) const = 0;
   protected:
@@ -70,6 +71,7 @@ namespace ParaMEDMEM
     void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
     MEDCouplingFieldDouble *getWeightingField(const MEDCouplingMesh *mesh, bool isAbs) const;
     void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
+    void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const;
     void renumberValuesOnNodes(const DataArrayInt *old2New, DataArrayDouble *arr) const;
     MEDCouplingMesh *buildSubMeshData(const int *start, const int *end, const MEDCouplingMesh *mesh, DataArrayInt *&di) const;
   public:
@@ -90,6 +92,7 @@ namespace ParaMEDMEM
     void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
     MEDCouplingFieldDouble *getWeightingField(const MEDCouplingMesh *mesh, bool isAbs) const;
     void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
+    void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const;
     MEDCouplingMesh *buildSubMeshData(const int *start, const int *end, const MEDCouplingMesh *mesh, DataArrayInt *&di) const;
     void renumberValuesOnNodes(const DataArrayInt *old2New, DataArrayDouble *arr) const;
     static DataArrayInt *invertArrayO2N2N2O(const MEDCouplingMesh *mesh, const DataArrayInt *di);
index 45d04a2e084c73a05a067e57283979b880d1c2f1..5bf486d26b4ed699ec270fa42ba5d59c7bdd6c8d 100644 (file)
@@ -163,6 +163,12 @@ void MEDCouplingFieldDouble::measureAccumulate(bool isWAbs, double *res) const
   delete [] tmp;
 }
 
+void MEDCouplingFieldDouble::getValueOnPos(int i, int j, int k, double *res) const throw(INTERP_KERNEL::Exception)
+{
+  const DataArrayDouble *arr=_time_discr->getArray();
+  _type->getValueOnPos(arr,_mesh,i,j,k,res);
+}
+
 void MEDCouplingFieldDouble::getValueOn(const double *spaceLoc, double *res) const throw(INTERP_KERNEL::Exception)
 {
   const DataArrayDouble *arr=_time_discr->getArray();
@@ -343,8 +349,6 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::addFields(const MEDCouplingField
 {
   if(!f1->areCompatible(f2))
     throw INTERP_KERNEL::Exception("Fields are not compatible ; unable to apply addFields on them !");
-  if(f1->getMesh()!=f2->getMesh())
-    throw INTERP_KERNEL::Exception("Fields are not lying on same mesh ; addFields impossible !");
   MEDCouplingTimeDiscretization *td=f1->_time_discr->add(f2->_time_discr);
   MEDCouplingFieldDouble *ret=new MEDCouplingFieldDouble(f1->getNature(),td,f1->getTypeOfField());
   ret->setMesh(f1->getMesh());
@@ -355,8 +359,6 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::substractFields(const MEDCouplin
 {
   if(!f1->areCompatible(f2))
     throw INTERP_KERNEL::Exception("Fields are not compatible ; unable to apply substractFields on them !");
-  if(f1->getMesh()!=f2->getMesh())
-    throw INTERP_KERNEL::Exception("Fields are not lying on same mesh ; substractFields impossible !");
   MEDCouplingTimeDiscretization *td=f1->_time_discr->substract(f2->_time_discr);
   MEDCouplingFieldDouble *ret=new MEDCouplingFieldDouble(f1->getNature(),td,f1->getTypeOfField());
   ret->setMesh(f1->getMesh());
@@ -367,8 +369,6 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::multiplyFields(const MEDCoupling
 {
   if(!f1->areCompatible(f2))
     throw INTERP_KERNEL::Exception("Fields are not compatible ; unable to applymultiplyFields  on them !");
-  if(f1->getMesh()!=f2->getMesh())
-    throw INTERP_KERNEL::Exception("Fields are not lying on same mesh ; multiplyFields impossible !");
   MEDCouplingTimeDiscretization *td=f1->_time_discr->multiply(f2->_time_discr);
   MEDCouplingFieldDouble *ret=new MEDCouplingFieldDouble(f1->getNature(),td,f1->getTypeOfField());
   ret->setMesh(f1->getMesh());
@@ -379,8 +379,6 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::divideFields(const MEDCouplingFi
 {
   if(!f1->areCompatible(f2))
     throw INTERP_KERNEL::Exception("Fields are not compatible ; unable to apply divideFields on them !");
-  if(f1->getMesh()!=f2->getMesh())
-    throw INTERP_KERNEL::Exception("Fields are not lying on same mesh ; divideFields impossible !");
   MEDCouplingTimeDiscretization *td=f1->_time_discr->divide(f2->_time_discr);
   MEDCouplingFieldDouble *ret=new MEDCouplingFieldDouble(f1->getNature(),td,f1->getTypeOfField());
   ret->setMesh(f1->getMesh());
index edc97d769525af917f9ad3371d8861b00cd7d4bd..9c3525dcfb1d702e66dd634df79e0cfdc7db5ae0 100644 (file)
@@ -52,6 +52,7 @@ namespace ParaMEDMEM
     void accumulate(double *res) const;
     double measureAccumulate(int compId, bool isWAbs) const;
     void measureAccumulate(bool isWAbs, double *res) const;
+    void getValueOnPos(int i, int j, int k, double *res) const throw(INTERP_KERNEL::Exception);
     void getValueOn(const double *spaceLoc, double *res) const throw(INTERP_KERNEL::Exception);
     void getValueOn(const double *spaceLoc, double time, double *res) const throw(INTERP_KERNEL::Exception);
     //! \b temporary
index bd5491fb0e0d504f0829a31b05a51fd05bef0109..5d456b0c16b36522ae6116c0c1f3e6dbc143b9c2 100644 (file)
 #include "MEDCoupling.hxx"
 #include "MEDCouplingTimeLabel.hxx"
 #include "MEDCouplingRefCountObject.hxx"
+#include "NormalizedUnstructuredMesh.hxx"
 #include "InterpKernelException.hxx"
 
+#include <vector>
+
 namespace ParaMEDMEM
 {
   typedef enum
@@ -52,6 +55,9 @@ namespace ParaMEDMEM
     virtual int getMeshDimension() const = 0;
     virtual DataArrayDouble *getCoordinatesAndOwner() const = 0;
     virtual DataArrayDouble *getBarycenterAndOwner() const = 0;
+    virtual INTERP_KERNEL::NormalizedCellType getTypeOfCell(int cellId) const = 0;
+    virtual void getNodeIdsOfCell(int cellId, std::vector<int>& conn) const = 0;
+    virtual void getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const = 0;
     // tools
     virtual void getBoundingBox(double *bbox) const = 0;
     virtual MEDCouplingFieldDouble *getMeasureField(bool isAbs) const = 0;
index 3a4a4738ba64606320232fe558a5bd96a8c9d034..b48b6df4349badae32b2881a2d2f57c4e1305887 100644 (file)
@@ -266,6 +266,23 @@ void MEDCouplingPointSet::translate(const double *vector)
   updateTime();
 }
 
+void MEDCouplingPointSet::scale(const double *point, double factor)
+{
+  double *coords=_coords->getPointer();
+  int nbNodes=getNumberOfNodes();
+  int dim=getSpaceDimension();
+  double *tmp=new double[dim];
+  for(int i=0;i<nbNodes;i++)
+    {
+      std::transform(coords+i*dim,coords+(i+1)*dim,point,coords+i*dim,std::minus<double>());
+      std::transform(coords+i*dim,coords+(i+1)*dim,coords+i*dim,std::bind2nd(std::multiplies<double>(),factor));
+      std::transform(coords+i*dim,coords+(i+1)*dim,point,coords+i*dim,std::plus<double>());
+    }
+  delete [] tmp;
+  _coords->declareAsNew();
+  updateTime();
+}
+
 void MEDCouplingPointSet::tryToShareSameCoords(MEDCouplingPointSet& other, double epsilon) throw(INTERP_KERNEL::Exception)
 {
   if(_coords==other._coords)
index 1236cebb172718a6db988f9d31758e7a8030ab34..804dae5ae9062be15c54370db39e517119060597 100644 (file)
@@ -52,6 +52,7 @@ namespace ParaMEDMEM
     void zipCoords();
     void rotate(const double *center, const double *vector, double angle);
     void translate(const double *vector);
+    void scale(const double *point, double factor);
     void tryToShareSameCoords(MEDCouplingPointSet& other, double epsilon) throw(INTERP_KERNEL::Exception);
     static DataArrayDouble *mergeNodesArray(const MEDCouplingPointSet *m1, const MEDCouplingPointSet *m2);
     static MEDCouplingPointSet *buildInstanceFromMeshType(MEDCouplingMeshType type);
index e76f933e5260397db5b0fa9d54cc26a90605d4b9..bedf06065f7607ef9fe0483a005e6530887f882b 100644 (file)
@@ -610,6 +610,22 @@ INTERP_KERNEL::NormalizedCellType MEDCouplingUMesh::getTypeOfCell(int cellId) co
   return (INTERP_KERNEL::NormalizedCellType) pt[ptI[cellId]];
 }
 
+void MEDCouplingUMesh::getNodeIdsOfCell(int cellId, std::vector<int>& conn) const
+{
+  const int *ptI=_nodal_connec_index->getConstPointer();
+  const int *pt=_nodal_connec->getConstPointer();
+  for(const int *w=pt+ptI[cellId]+1;w!=pt+ptI[cellId+1];w++)
+    if(*w>=0)
+      conn.push_back(*w);
+}
+
+void MEDCouplingUMesh::getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const
+{
+  const double *cooPtr=_coords->getConstPointer();
+  int spaceDim=getSpaceDimension();
+  coo.insert(coo.end(),cooPtr+spaceDim*nodeId,cooPtr+spaceDim*(nodeId+1));
+}
+
 int MEDCouplingUMesh::getNumberOfNodesInCell(int cellId) const
 {
   const int *ptI=_nodal_connec_index->getConstPointer();
index e785cff54ef32c8a6d46c3e8b9d96a3561a5e455..8a33ee32ed42ee3c104b421d040d2c6f6c461a29 100644 (file)
@@ -46,6 +46,8 @@ namespace ParaMEDMEM
     DataArrayInt *getNodalConnectivity() const { return _nodal_connec; }
     DataArrayInt *getNodalConnectivityIndex() const { return _nodal_connec_index; }
     INTERP_KERNEL::NormalizedCellType getTypeOfCell(int cellId) const;
+    void getNodeIdsOfCell(int cellId, std::vector<int>& conn) const;
+    void getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const;
     int getNumberOfNodesInCell(int cellId) const;
     int getNumberOfCells() const;
     int getMeshDimension() const;
index feca3dc3cd089cdde52e3c73a494bd0f6dfa6130..53531fdf2f1eebd92379795c677654fc17480755 100644 (file)
@@ -99,6 +99,23 @@ int MEDCouplingUMeshDesc::getFaceMeshLength() const
   return _nodal_connec_face->getNbOfElems();
 }
 
+INTERP_KERNEL::NormalizedCellType MEDCouplingUMeshDesc::getTypeOfCell(int cellId) const
+{
+  const int *desc_connec=_desc_connec->getConstPointer();
+  const int *desc_connec_index=_desc_connec_index->getConstPointer();
+  return (INTERP_KERNEL::NormalizedCellType)desc_connec[desc_connec_index[cellId]+1];
+}
+
+void MEDCouplingUMeshDesc::getNodeIdsOfCell(int cellId, std::vector<int>& conn) const
+{
+  //not implemented yet.
+}
+
+void MEDCouplingUMeshDesc::getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const
+{
+  //not implemented yet.
+}
+
 void MEDCouplingUMeshDesc::setConnectivity(DataArrayInt *descConn, DataArrayInt *descConnIndex, DataArrayInt *nodalFaceConn, DataArrayInt *nodalFaceConnIndx)
 {
   DataArrayInt::setArrayIn(descConn,_desc_connec);
index 94876129b0b589c938e54081acb3c67bb9b821c5..ac1c533e7fcef5bdb68c857867ddc980ee806aad 100644 (file)
@@ -39,6 +39,9 @@ namespace ParaMEDMEM
     int getCellMeshLength() const;
     int getFaceMeshLength() const;
     int getMeshDimension() const { return _mesh_dim; }
+    INTERP_KERNEL::NormalizedCellType getTypeOfCell(int cellId) const;
+    void getNodeIdsOfCell(int cellId, std::vector<int>& conn) const;
+    void getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const;
     MEDCouplingMeshType getType() const { return UNSTRUCTURED_DESC; }
     void setConnectivity(DataArrayInt *descConn, DataArrayInt *descConnIndex, DataArrayInt *nodalFaceConn, DataArrayInt *nodalFaceConnIndx);
     //tools to overload
diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest.cxx
deleted file mode 100644 (file)
index 0b8f9b7..0000000
+++ /dev/null
@@ -1,4081 +0,0 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "MEDCouplingBasicsTest.hxx"
-#include "MEDCouplingUMesh.hxx"
-#include "MEDCouplingExtrudedMesh.hxx"
-#include "MEDCouplingFieldDouble.hxx"
-#include "MEDCouplingMemArray.hxx"
-#include "Interpolation2D.txx"
-#include "Interpolation3DSurf.txx"
-#include "Interpolation3D.txx"
-#include "InterpolationCC.txx"
-#include "InterpolationCU.txx"
-
-#include "MEDCouplingNormalizedUnstructuredMesh.txx"
-#include "MEDCouplingNormalizedCartesianMesh.txx"
-
-#include <cmath>
-#include <functional>
-
-using namespace std;
-using namespace ParaMEDMEM;
-
-void MEDCouplingBasicsTest::testArray()
-{
-  int tmp1[6]={7,6,5,4,3,2};
-  const int tmp2[3]={8,9,10};
-  {
-    MemArray<int> mem;
-    mem.useArray(tmp1,false,CPP_DEALLOC,6);
-    CPPUNIT_ASSERT(tmp1==mem.getConstPointer());
-    CPPUNIT_ASSERT_THROW(mem.getPointer(),INTERP_KERNEL::Exception);
-    CPPUNIT_ASSERT_THROW(mem[2]=7,INTERP_KERNEL::Exception);
-    CPPUNIT_ASSERT_THROW(mem.writeOnPlace(0,12,tmp2,3),INTERP_KERNEL::Exception);
-    mem.writeOnPlace(4,12,tmp2,3);
-  }
-  {
-    int *tmp3=new int[6];
-    std::copy(tmp1,tmp1+6,tmp3);
-    MemArray<int> mem2;
-    mem2.useArray(tmp3,true,CPP_DEALLOC,6);
-    CPPUNIT_ASSERT(tmp3==mem2.getConstPointer());
-    CPPUNIT_ASSERT(tmp3==mem2.getPointer());
-    CPPUNIT_ASSERT_EQUAL(5,mem2[2]);
-    mem2[2]=7;
-    CPPUNIT_ASSERT_EQUAL(7,mem2[2]);
-    mem2.writeOnPlace(0,12,tmp2,3);
-    CPPUNIT_ASSERT_EQUAL(9,mem2[2]);
-    CPPUNIT_ASSERT_EQUAL(12,mem2[0]);
-    mem2.writeOnPlace(4,12,tmp2,3);
-  }
-}
-
-void MEDCouplingBasicsTest::testMesh()
-{
-  const int nbOfCells=6;
-  const int nbOfNodes=12;
-  
-  double coords[3*nbOfNodes]={ 
-    0.024155, 0.04183768725682622, -0.305, 0.04831000000000001, -1.015761910347357e-17, -0.305, 0.09662000000000001, -1.832979297858306e-18, 
-    -0.305, 0.120775, 0.04183768725682623, -0.305, 0.09662000000000001, 0.08367537451365245, -0.305, 0.04831000000000001, 
-    0.08367537451365246, -0.305, 0.024155, 0.04183768725682622, -0.2863, 0.04831000000000001, -1.015761910347357e-17, -0.2863, 
-    0.09662000000000001, -1.832979297858306e-18, -0.2863, 0.120775, 0.04183768725682623, -0.2863, 0.09662000000000001, 0.08367537451365245, 
-    -0.2863, 0.04831000000000001, 0.08367537451365246, -0.2863, };
-  
-  int tab4[4*nbOfCells]={ 
-    1, 2, 8, 7, 2, 3, 9, 8, 3, 4, 10, 9, 4, 5, 11, 10, 5, 0, 6, 11, 
-    0, 1, 7, 6, };
-  
-  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
-  mesh->setMeshDimension(2);
-  mesh->allocateCells(8);
-  const int *curConn=tab4;
-  for(int i=0;i<nbOfCells;i++,curConn+=4)
-    mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,curConn);
-  mesh->finishInsertingCells();
-  CPPUNIT_ASSERT_EQUAL(30,mesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh->getNumberOfCells());
-  //test 0 - no copy no ownership
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->useArray(coords,false,CPP_DEALLOC,nbOfNodes,3);
-  mesh->setCoords(myCoords);
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh->getNumberOfCells());
-  mesh->checkCoherency();
-  //test 1 - no copy ownership C++
-  myCoords=DataArrayDouble::New();
-  double *tmp=new double[3*nbOfNodes];
-  copy(coords,coords+3*nbOfNodes,tmp);
-  myCoords->useArray(tmp,true,CPP_DEALLOC,nbOfNodes,3);
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh->getNumberOfCells());
-  mesh->checkCoherency();
-  //test 2 - no copy ownership C
-  myCoords=DataArrayDouble::New();
-  tmp=(double *)malloc(3*nbOfNodes*sizeof(double));
-  copy(coords,coords+3*nbOfNodes,tmp);
-  myCoords->useArray(tmp,true,C_DEALLOC,nbOfNodes,3);
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh->getNumberOfNodes());
-  mesh->checkCoherency();
-  //test 3 - copy.
-  myCoords=DataArrayDouble::New();
-  myCoords->alloc(nbOfNodes,3);
-  tmp=myCoords->getPointer();
-  copy(coords,coords+3*nbOfNodes,tmp);
-  // test 3 bis deepcopy
-  DataArrayDouble *myCoords2=DataArrayDouble::New();
-  *myCoords2=*myCoords;
-  myCoords2->decrRef();
-  //
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh->getNumberOfNodes());
-  mesh->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(3,mesh->getSpaceDimension());
-  // test clone not recursively
-  MEDCouplingUMesh *mesh2=mesh->clone(false);
-  CPPUNIT_ASSERT(mesh2!=mesh);
-  mesh2->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh2->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(3,mesh2->getSpaceDimension());
-  CPPUNIT_ASSERT(mesh!=mesh2);
-  CPPUNIT_ASSERT(mesh->getCoords()==mesh2->getCoords());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.2863,mesh2->getCoords()->getIJ(11,2),1e-14);
-  CPPUNIT_ASSERT(mesh->getNodalConnectivity()==mesh2->getNodalConnectivity());
-  CPPUNIT_ASSERT_EQUAL(3,mesh2->getNodalConnectivity()->getIJ(7,0));
-  CPPUNIT_ASSERT(mesh->getNodalConnectivityIndex()==mesh2->getNodalConnectivityIndex());
-  CPPUNIT_ASSERT_EQUAL(15,mesh2->getNodalConnectivityIndex()->getIJ(3,0));
-  mesh2->decrRef();
-  // test clone not recursively
-  MEDCouplingUMesh *mesh3=mesh->clone(true);
-  CPPUNIT_ASSERT(mesh3!=mesh);
-  mesh3->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh3->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh3->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(3,mesh3->getSpaceDimension());
-  CPPUNIT_ASSERT(mesh!=mesh3);
-  CPPUNIT_ASSERT(mesh->getCoords()!=mesh3->getCoords());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.2863,mesh3->getCoords()->getIJ(11,2),1e-14);
-  CPPUNIT_ASSERT(mesh->getNodalConnectivity()!=mesh3->getNodalConnectivity());
-  CPPUNIT_ASSERT_EQUAL(3,mesh3->getNodalConnectivity()->getIJ(7,0));
-  CPPUNIT_ASSERT(mesh->getNodalConnectivityIndex()!=mesh3->getNodalConnectivityIndex());
-  CPPUNIT_ASSERT_EQUAL(15,mesh3->getNodalConnectivityIndex()->getIJ(3,0));
-  mesh3->decrRef();
-  //test 4 - Field on cells
-  MEDCouplingFieldDouble *fieldOnCells=MEDCouplingFieldDouble::New(ON_CELLS);
-  fieldOnCells->setMesh(mesh);
-  DataArrayDouble *array=DataArrayDouble::New();
-  array->alloc(nbOfCells,9);
-  fieldOnCells->setArray(array);
-  tmp=array->getPointer();
-  array->decrRef();
-  fill(tmp,tmp+9*nbOfCells,7.);
-  //content of field changed -> declare it.
-  fieldOnCells->declareAsNew();
-  fieldOnCells->checkCoherency();
-  // testing clone of fields - no recursive
-  MEDCouplingFieldDouble *fieldOnCells2=fieldOnCells->clone(false);
-  CPPUNIT_ASSERT(fieldOnCells2!=fieldOnCells);
-  fieldOnCells2->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,fieldOnCells2->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(9,fieldOnCells2->getNumberOfComponents());
-  CPPUNIT_ASSERT(fieldOnCells2->getArray()==fieldOnCells->getArray());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,fieldOnCells2->getArray()->getIJ(3,7),1e-14);
-  CPPUNIT_ASSERT(fieldOnCells2->getMesh()==fieldOnCells->getMesh());
-  // testing clone of fields - recursive
-  MEDCouplingFieldDouble *fieldOnCells3=fieldOnCells->clone(true);
-  CPPUNIT_ASSERT(fieldOnCells3!=fieldOnCells);
-  fieldOnCells3->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(nbOfCells,fieldOnCells3->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(9,fieldOnCells3->getNumberOfComponents());
-  CPPUNIT_ASSERT(fieldOnCells3->getArray()!=fieldOnCells->getArray());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,fieldOnCells3->getArray()->getIJ(3,7),1e-14);
-  CPPUNIT_ASSERT(fieldOnCells3->getMesh()==fieldOnCells->getMesh());
-  fieldOnCells2->decrRef();
-  fieldOnCells3->decrRef();
-  //
-  fieldOnCells->decrRef();
-  //clean-up
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testMeshPointsCloud()
-{
-  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
-  int *targetConn=0;
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(0);
-  targetMesh->allocateCells(8);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,3);
-  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  //
-  targetMesh->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(3,targetMesh->getSpaceDimension());
-  CPPUNIT_ASSERT_EQUAL(8,targetMesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(9,targetMesh->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(0,targetMesh->getMeshDimension());
-  //
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testMeshM1D()
-{
-  MEDCouplingUMesh *meshM1D=MEDCouplingUMesh::New();
-  CPPUNIT_ASSERT_THROW(meshM1D->getMeshDimension(),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(meshM1D->getNumberOfNodes(),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(meshM1D->getNumberOfCells(),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(meshM1D->setMeshDimension(-2),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(meshM1D->setMeshDimension(-10),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(meshM1D->checkCoherency(),INTERP_KERNEL::Exception);
-  meshM1D->setMeshDimension(-1);
-  meshM1D->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(-1,meshM1D->getMeshDimension());
-  CPPUNIT_ASSERT_EQUAL(1,meshM1D->getNumberOfCells());
-  CPPUNIT_ASSERT_THROW(meshM1D->getNumberOfNodes(),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(meshM1D->getSpaceDimension(),INTERP_KERNEL::Exception);
-  MEDCouplingUMesh *cpy=meshM1D->clone(true);
-  CPPUNIT_ASSERT(cpy->isEqual(meshM1D,1e-12));
-  cpy->decrRef();
-  MEDCouplingFieldDouble *fieldOnCells=MEDCouplingFieldDouble::New(ON_CELLS);
-  fieldOnCells->setMesh(meshM1D);
-  DataArrayDouble *array=DataArrayDouble::New();
-  array->alloc(1,6);
-  fieldOnCells->setArray(array);
-  double *tmp=array->getPointer();
-  array->decrRef();
-  fill(tmp,tmp+6,7.);
-  fieldOnCells->checkCoherency();
-  //
-  fieldOnCells->decrRef();
-  meshM1D->decrRef();
-}
-
-void MEDCouplingBasicsTest::testDeepCopy()
-{
-  DataArrayDouble *array=DataArrayDouble::New();
-  array->alloc(5,3);
-  fill(array->getPointer(),array->getPointer()+5*3,7.);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,array->getIJ(3,2),1e-14);
-  double *tmp1=array->getPointer();
-  DataArrayDouble *array2=array->deepCopy();
-  double *tmp2=array2->getPointer();
-  CPPUNIT_ASSERT(tmp1!=tmp2);
-  array->decrRef();
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,array2->getIJ(3,2),1e-14);
-  array2->decrRef();
-  //
-  DataArrayInt *array3=DataArrayInt::New();
-  array3->alloc(5,3);
-  fill(array3->getPointer(),array3->getPointer()+5*3,17);
-  CPPUNIT_ASSERT_EQUAL(17,array3->getIJ(3,2));
-  int *tmp3=array3->getPointer();
-  DataArrayInt *array4=array3->deepCopy();
-  int *tmp4=array4->getPointer();
-  CPPUNIT_ASSERT(tmp3!=tmp4);
-  array3->decrRef();
-  CPPUNIT_ASSERT_EQUAL(17,array4->getIJ(3,2));
-  array4->decrRef();
-}
-
-void MEDCouplingBasicsTest::testRevNodal()
-{
-  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
-  DataArrayInt *revNodal=DataArrayInt::New();
-  DataArrayInt *revNodalIndx=DataArrayInt::New();
-  //
-  mesh->getReverseNodalConnectivity(revNodal,revNodalIndx);
-  const int revNodalExpected[18]={0,0,1,1,2,0,3,0,1,2,3,4,2,4,3,3,4,4};
-  const int revNodalIndexExpected[10]={0,1,3,5,7,12,14,15,17,18};
-  CPPUNIT_ASSERT_EQUAL(18,revNodal->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(10,revNodalIndx->getNbOfElems());
-  CPPUNIT_ASSERT(std::equal(revNodalExpected,revNodalExpected+18,revNodal->getPointer()));
-  CPPUNIT_ASSERT(std::equal(revNodalIndexExpected,revNodalIndexExpected+10,revNodalIndx->getPointer()));
-  //
-  revNodal->decrRef();
-  revNodalIndx->decrRef();
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testConvertToPolyTypes()
-{
-  ////// 2D
-  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
-  //
-  const int elts[2]={1,3};
-  std::vector<int> eltsV(elts,elts+2);
-  mesh->convertToPolyTypes(eltsV);
-  mesh->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(5,mesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(23,mesh->getNodalConnectivity()->getNumberOfTuples());
-  const int *pt=mesh->getNodalConnectivity()->getConstPointer();
-  const int expected1[23]={4, 0, 3, 4, 1, 5, 1, 4, 2, 3, 4, 5, 2, 5, 6, 7, 4, 3, 4, 7, 8, 5, 4};
-  CPPUNIT_ASSERT(std::equal(expected1,expected1+23,pt));
-  //
-  mesh->decrRef();
-  ////// 3D
-  mesh=build3DTargetMesh_1();
-  mesh->convertToPolyTypes(eltsV);
-  mesh->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(8,mesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(114,mesh->getNodalConnectivity()->getNumberOfTuples());
-  mesh->convertToPolyTypes(eltsV);
-  mesh->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(8,mesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(114,mesh->getNodalConnectivity()->getNumberOfTuples());
-  //
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testDescConn2D()
-{
-  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
-  DataArrayInt *desc=DataArrayInt::New();
-  DataArrayInt *descIndx=DataArrayInt::New();
-  DataArrayInt *revDesc=DataArrayInt::New();
-  DataArrayInt *revDescIndx=DataArrayInt::New();
-  //
-  MEDCouplingUMesh *mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
-  mesh2->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(1,mesh2->getMeshDimension());
-  CPPUNIT_ASSERT_EQUAL(13,mesh2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(6,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(6,descIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(18,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,desc->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(18,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,revDesc->getNumberOfTuples());
-  const int expected1[18]={0,1,2,3, 2,4,5, 6,7,4, 8,9,1,10, 11,12,6,9};
-  CPPUNIT_ASSERT(std::equal(expected1,expected1+18,desc->getConstPointer()));
-  const int expected2[6]={0,4,7,10,14,18};
-  CPPUNIT_ASSERT(std::equal(expected2,expected2+6,descIndx->getConstPointer()));
-  const int expected3[14]={0,1,3,5,6,8,9,11,12,13,15,16,17,18};
-  CPPUNIT_ASSERT(std::equal(expected3,expected3+14,revDescIndx->getConstPointer()));
-  const int expected4[18]={0, 0,3, 0,1, 0, 1,2, 1, 2,4, 2, 3, 3,4, 3, 4, 4};
-  CPPUNIT_ASSERT(std::equal(expected4,expected4+18,revDesc->getConstPointer()));
-  DataArrayInt *conn=mesh2->getNodalConnectivity();
-  DataArrayInt *connIndex=mesh2->getNodalConnectivityIndex();
-  const int expected5[14]={0,3,6,9,12,15,18,21,24,27,30,33,36,39};
-  CPPUNIT_ASSERT(std::equal(expected5,expected5+14,connIndex->getConstPointer()));
-  const int expected6[39]={1, 0, 3, 1, 3, 4, 1, 4, 1, 1, 1, 0, 1, 4, 2, 1, 2, 1, 1, 4, 5, 1, 5, 2, 1, 6, 7, 1, 7, 4, 1, 3, 6, 1, 7, 8, 1, 8, 5};
-  CPPUNIT_ASSERT(std::equal(expected6,expected6+39,conn->getConstPointer()));
-  //
-  desc->decrRef();
-  descIndx->decrRef();
-  revDesc->decrRef();
-  revDescIndx->decrRef();
-  mesh2->decrRef();
-  //
-  const int elts[2]={1,3};
-  std::vector<int> eltsV(elts,elts+2);
-  mesh->convertToPolyTypes(eltsV);
-  mesh->checkCoherency();
-  //
-  desc=DataArrayInt::New();
-  descIndx=DataArrayInt::New();
-  revDesc=DataArrayInt::New();
-  revDescIndx=DataArrayInt::New();
-  //
-  mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
-  mesh2->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(1,mesh2->getMeshDimension());
-  CPPUNIT_ASSERT_EQUAL(13,mesh2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(6,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(6,descIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(18,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,desc->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(18,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,revDesc->getNumberOfTuples());
-  CPPUNIT_ASSERT(std::equal(expected1,expected1+18,desc->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected2,expected2+6,descIndx->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected3,expected3+14,revDescIndx->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected4,expected4+18,revDesc->getConstPointer()));
-  conn=mesh2->getNodalConnectivity();
-  connIndex=mesh2->getNodalConnectivityIndex();
-  CPPUNIT_ASSERT(std::equal(expected5,expected5+14,connIndex->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected6,expected6+39,conn->getConstPointer()));
-  //
-  desc->decrRef();
-  descIndx->decrRef();
-  revDesc->decrRef();
-  revDescIndx->decrRef();
-  mesh2->decrRef();
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testDescConn3D()
-{
-  MEDCouplingUMesh *mesh=build3DTargetMesh_1();
-  DataArrayInt *desc=DataArrayInt::New();
-  DataArrayInt *descIndx=DataArrayInt::New();
-  DataArrayInt *revDesc=DataArrayInt::New();
-  DataArrayInt *revDescIndx=DataArrayInt::New();
-  //
-  MEDCouplingUMesh *mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
-  mesh2->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(2,mesh2->getMeshDimension());
-  CPPUNIT_ASSERT_EQUAL(36,mesh2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(9,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(9,descIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(48,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,desc->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(48,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,revDesc->getNumberOfTuples());
-  const int expected1[9]={0, 6, 12, 18, 24, 30, 36, 42, 48};
-  const int expected2[48]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 11, 12, 4, 13, 14, 15, 16, 17, 10, 18, 19, 13, 1, 20, 21, 22, 23, 24, 7, 25, 26, 27, 28, 22, 12, 29, 23, 30, 31, 32, 17, 33, 28, 34, 35, 30};
-  const int expected3[37]={0, 1, 3, 4, 6, 8, 9, 10, 12, 13, 14, 16, 17, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 41, 43, 44, 45, 46, 47, 48};
-  const int expected4[48]={0, 0, 4, 0, 0, 1, 0, 2, 0, 1, 1, 5, 1, 1, 1, 3, 2, 2, 6, 2, 3, 2, 2, 3, 3, 7, 3, 3, 4, 4, 4, 5, 4, 6, 4, 5, 5, 5, 5, 7, 6, 6, 7, 6, 6, 7, 7, 7};
-  const int expected5[37]={0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180};
-  const int expected6[180]={4, 0, 1, 4, 3, 4, 9, 12, 13, 10, 4, 0, 9, 10, 1, 4, 1, 10, 13, 4, 4, 4, 13, 12, 3, 4, 3, 12, 9, 0, 4, 1, 2, 5, 4, 4, 10, 13, 14, 11, 4, 1, 10, 11, 2, 4, 2, 11, 14,
-                            5, 4, 5, 14, 13, 4, 4, 3, 4, 7, 6, 4, 12, 15, 16, 13, 4, 4, 13, 16, 7, 4, 7, 16, 15, 6, 4, 6, 15, 12, 3, 4, 4, 5, 8, 7, 4, 13, 16, 17, 14, 4, 5, 14, 17, 8, 4, 8,
-                            17, 16, 7, 4, 18, 21, 22, 19, 4, 9, 18, 19, 10, 4, 10, 19, 22, 13, 4, 13, 22, 21, 12, 4, 12, 21, 18, 9, 4, 19, 22, 23, 20, 4, 10, 19, 20, 11, 4, 11, 20, 23, 14, 4,
-                            14, 23, 22, 13, 4, 21, 24, 25, 22, 4, 13, 22, 25, 16, 4, 16, 25, 24, 15, 4, 15, 24, 21, 12, 4, 22, 25, 26, 23, 4, 14, 23, 26, 17, 4, 17, 26, 25, 16};
-  const int expected7[180]={4, 0, 1, 4, 3, 4, 9, 12, 13, 10, 4, 0, 9, 10, 1, 4, 1, 10, 13, 4, 4, 4, 13, 12, 3, 4, 3, 12, 9, 0, 5, 1, 2, 5, 4, 5, 10, 13, 14, 11, 5, 1, 10, 11, 2, 5, 2, 11, 14,
-                            5, 5, 5, 14, 13, 4, 4, 3, 4, 7, 6, 4, 12, 15, 16, 13, 4, 4, 13, 16, 7, 4, 7, 16, 15, 6, 4, 6, 15, 12, 3, 5, 4, 5, 8, 7, 5, 13, 16, 17, 14, 5, 5, 14, 17, 8, 5, 8,
-                            17, 16, 7, 4, 18, 21, 22, 19, 4, 9, 18, 19, 10, 4, 10, 19, 22, 13, 4, 13, 22, 21, 12, 4, 12, 21, 18, 9, 4, 19, 22, 23, 20, 4, 10, 19, 20, 11, 4, 11, 20, 23, 14, 4,
-                            14, 23, 22, 13, 4, 21, 24, 25, 22, 4, 13, 22, 25, 16, 4, 16, 25, 24, 15, 4, 15, 24, 21, 12, 4, 22, 25, 26, 23, 4, 14, 23, 26, 17, 4, 17, 26, 25, 16};
-
-  CPPUNIT_ASSERT(std::equal(expected1,expected1+9,descIndx->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected2,expected2+48,desc->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected3,expected3+37,revDescIndx->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected4,expected4+48,revDesc->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected5,expected5+37,mesh2->getNodalConnectivityIndex()->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected6,expected6+180,mesh2->getNodalConnectivity()->getConstPointer()));
-  //
-  desc->decrRef();
-  descIndx->decrRef();
-  revDesc->decrRef();
-  revDescIndx->decrRef();
-  mesh2->decrRef();
-  //
-  const int elts[2]={1,3};
-  std::vector<int> eltsV(elts,elts+2);
-  mesh->convertToPolyTypes(eltsV);
-  mesh->checkCoherency();
-  desc=DataArrayInt::New();
-  descIndx=DataArrayInt::New();
-  revDesc=DataArrayInt::New();
-  revDescIndx=DataArrayInt::New();
-  mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
-  mesh2->checkCoherency();
-  CPPUNIT_ASSERT_EQUAL(2,mesh2->getMeshDimension());
-  CPPUNIT_ASSERT_EQUAL(36,mesh2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(9,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(9,descIndx->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(48,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,desc->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(48,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,revDesc->getNumberOfTuples());
-  CPPUNIT_ASSERT(std::equal(expected1,expected1+9,descIndx->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected2,expected2+48,desc->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected3,expected3+37,revDescIndx->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected4,expected4+48,revDesc->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected5,expected5+37,mesh2->getNodalConnectivityIndex()->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(expected7,expected7+180,mesh2->getNodalConnectivity()->getConstPointer()));
-  //
-  desc->decrRef();
-  descIndx->decrRef();
-  revDesc->decrRef();
-  revDescIndx->decrRef();
-  mesh2->decrRef();
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testFindBoundaryNodes()
-{
-  MEDCouplingUMesh *mesh=build3DTargetMesh_1();
-  std::vector<int> boundaryNodes;
-  mesh->findBoundaryNodes(boundaryNodes);
-  CPPUNIT_ASSERT_EQUAL(26,(int)boundaryNodes.size());
-  const int expected1[26]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
-  CPPUNIT_ASSERT(std::equal(expected1,expected1+26,boundaryNodes.begin()));
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testBoundaryMesh()
-{
-  MEDCouplingUMesh *mesh=build3DTargetMesh_1();
-  MEDCouplingPointSet *mesh2=mesh->buildBoundaryMesh(false);
-  CPPUNIT_ASSERT_EQUAL(24,mesh2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(26,mesh2->getNumberOfNodes());
-  mesh2->decrRef();
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testBuildPartOfMySelf()
-{
-  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
-  mesh->setName("Toto");
-  const int tab1[2]={0,4};
-  const int tab2[3]={0,2,3};
-  //
-  MEDCouplingPointSet *subMeshSimple=mesh->buildPartOfMySelf(tab1,tab1+2,true);
-  MEDCouplingUMesh *subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
-  CPPUNIT_ASSERT(subMesh);
-  std::string name(subMesh->getName());
-  CPPUNIT_ASSERT_EQUAL(2,(int)mesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*mesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++(mesh->getAllTypes().begin())));
-  CPPUNIT_ASSERT_EQUAL(1,(int)subMesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT(name=="PartOf_Toto");
-  CPPUNIT_ASSERT(mesh->getCoords()==subMesh->getCoords());
-  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNumberOfCells());
-  const int subConn[10]={4,0,3,4,1,4,7,8,5,4};
-  const int subConnIndex[3]={0,5,10};
-  CPPUNIT_ASSERT_EQUAL(10,subMesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNodalConnectivityIndex()->getNbOfElems());
-  CPPUNIT_ASSERT(std::equal(subConn,subConn+10,subMesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+3,subMesh->getNodalConnectivityIndex()->getPointer()));
-  subMesh->decrRef();
-  //
-  subMeshSimple=mesh->buildPartOfMySelf(tab2,tab2+3,true);
-  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
-  CPPUNIT_ASSERT(subMesh);
-  name=subMesh->getName();
-  CPPUNIT_ASSERT_EQUAL(2,(int)subMesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++(subMesh->getAllTypes().begin())));
-  CPPUNIT_ASSERT(name=="PartOf_Toto");
-  CPPUNIT_ASSERT(mesh->getCoords()==subMesh->getCoords());
-  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNumberOfCells());
-  const int subConn2[14]={4,0,3,4,1,3,4,5,2,4,6,7,4,3};
-  const int subConnIndex2[4]={0,5,9,14};
-  CPPUNIT_ASSERT_EQUAL(14,subMesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(4,subMesh->getNodalConnectivityIndex()->getNbOfElems());
-  CPPUNIT_ASSERT(std::equal(subConn2,subConn2+14,subMesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(subConnIndex2,subConnIndex2+4,subMesh->getNodalConnectivityIndex()->getPointer()));
-  subMesh->decrRef();
-  //
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testBuildPartOfMySelfNode()
-{
-  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
-  const int tab1[2]={5,7};
-  MEDCouplingPointSet *subMeshSimple=mesh->buildPartOfMySelfNode(tab1,tab1+2,true);
-  MEDCouplingUMesh *subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
-  CPPUNIT_ASSERT(subMesh);
-  CPPUNIT_ASSERT_EQUAL(1,(int)subMesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(1,subMesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(5,subMesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNodalConnectivityIndex()->getNbOfElems());
-  const int subConn[5]={4,7,8,5,4};
-  const int subConnIndex[3]={0,5};
-  CPPUNIT_ASSERT(std::equal(subConn,subConn+5,subMesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+2,subMesh->getNodalConnectivityIndex()->getPointer()));
-  CPPUNIT_ASSERT(subMesh->getCoords()==mesh->getCoords());
-  subMeshSimple->decrRef();
-  //
-  subMeshSimple=mesh->buildPartOfMySelfNode(tab1,tab1+2,false);
-  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
-  CPPUNIT_ASSERT(subMesh);
-  CPPUNIT_ASSERT_EQUAL(2,(int)subMesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++subMesh->getAllTypes().begin()));
-  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(14,subMesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(4,subMesh->getNodalConnectivityIndex()->getNbOfElems());
-  const int subConn2[14]={3,4,5,2,4,6,7,4,3,4,7,8,5,4};
-  const int subConnIndex2[4]={0,4,9,14};
-  CPPUNIT_ASSERT(std::equal(subConn2,subConn2+14,subMesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(subConnIndex2,subConnIndex2+4,subMesh->getNodalConnectivityIndex()->getPointer()));
-  CPPUNIT_ASSERT(subMesh->getCoords()==mesh->getCoords());
-  subMeshSimple->decrRef();
-  //testing the case where length of tab2 is greater than max number of node per cell.
-  const int tab2[7]={0,3,2,1,4,5,6};
-  subMeshSimple=mesh->buildPartOfMySelfNode(tab2,tab2+7,true);
-  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
-  CPPUNIT_ASSERT(subMesh);
-  CPPUNIT_ASSERT_EQUAL(2,(int)subMesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++subMesh->getAllTypes().begin()));
-  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNumberOfCells());
-  subMeshSimple->decrRef();
-  //
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testZipCoords()
-{
-  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
-  CPPUNIT_ASSERT_EQUAL(2,(int)mesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
-  CPPUNIT_ASSERT_EQUAL(9,mesh->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(5,mesh->getNumberOfCells());
-  std::vector<int> oldConn(mesh->getNodalConnectivity()->getNbOfElems());
-  std::vector<int> oldConnIndex(mesh->getNumberOfCells()+1);
-  std::copy(mesh->getNodalConnectivity()->getPointer(),mesh->getNodalConnectivity()->getPointer()+oldConn.size(),oldConn.begin());
-  std::copy(mesh->getNodalConnectivityIndex()->getPointer(),mesh->getNodalConnectivityIndex()->getPointer()+mesh->getNumberOfCells()+1,oldConnIndex.begin());
-  DataArrayDouble *oldCoords=mesh->getCoords();
-  oldCoords->incrRef();
-  mesh->zipCoords();
-  CPPUNIT_ASSERT_EQUAL(2,(int)mesh->getAllTypes().size());
-  CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
-  CPPUNIT_ASSERT_EQUAL(9,mesh->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(5,mesh->getNumberOfCells());
-  CPPUNIT_ASSERT(mesh->getCoords()!=oldCoords);
-  CPPUNIT_ASSERT(std::equal(mesh->getCoords()->getPointer(),mesh->getCoords()->getPointer()+2*9,oldCoords->getPointer()));
-  CPPUNIT_ASSERT(std::equal(oldConn.begin(),oldConn.end(),mesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(oldConnIndex.begin(),oldConnIndex.end(),mesh->getNodalConnectivityIndex()->getPointer()));
-  oldCoords->decrRef();
-  //
-  const int tab1[2]={0,4};
-  MEDCouplingPointSet *subMeshPtSet=mesh->buildPartOfMySelf(tab1,tab1+2,true);
-  MEDCouplingUMesh *subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshPtSet);
-  CPPUNIT_ASSERT(subMesh);
-  DataArrayInt *traducer=subMesh->zipCoordsTraducer();
-  const int expectedTraducer[9]={0,1,-1,2,3,4,-1,5,6};
-  CPPUNIT_ASSERT(std::equal(expectedTraducer,expectedTraducer+9,traducer->getPointer()));
-  traducer->decrRef();
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNumberOfCells());
-  const int subConn[10]={4,0,2,3,1,4,5,6,4,3};
-  const int subConnIndex[3]={0,5,10};
-  CPPUNIT_ASSERT_EQUAL(7,subMesh->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(10,subMesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNodalConnectivityIndex()->getNbOfElems());
-  CPPUNIT_ASSERT(std::equal(subConn,subConn+10,subMesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+3,subMesh->getNodalConnectivityIndex()->getPointer()));
-  subMesh->decrRef();
-  //
-  subMeshPtSet=mesh->buildPartOfMySelf(tab1,tab1+2,false);
-  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshPtSet);
-  CPPUNIT_ASSERT(subMesh);
-  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
-  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(7,subMesh->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(10,subMesh->getNodalConnectivity()->getNbOfElems());
-  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNodalConnectivityIndex()->getNbOfElems());
-  CPPUNIT_ASSERT(std::equal(subConn,subConn+10,subMesh->getNodalConnectivity()->getPointer()));
-  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+3,subMesh->getNodalConnectivityIndex()->getPointer()));
-  subMesh->decrRef();
-  //
-  mesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testEqualMesh()
-{
-  MEDCouplingUMesh *mesh1=build2DTargetMesh_1();
-  MEDCouplingUMesh *mesh2=build2DTargetMesh_1();
-  //
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh1,1e-12));
-  //
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
-  double *pt=mesh2->getCoords()->getPointer();
-  double tmp=pt[1];
-  pt[1]=5.999;
-  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
-  pt[1]=tmp;
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
-  //
-  int *pt2=mesh1->getNodalConnectivity()->getPointer();
-  pt2[5]++;
-  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
-  pt2[5]--;
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
-  //
-  pt2=mesh1->getNodalConnectivityIndex()->getPointer();
-  pt2[1]++;
-  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
-  pt2[1]--;
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
-  //
-  std::string tmp3=mesh1->getName();
-  mesh1->setName("lllll");
-  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
-  mesh1->setName(tmp3.c_str());
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
-  //
-  tmp3=mesh2->getCoords()->getInfoOnComponent(1);
-  mesh2->getCoords()->setInfoOnComponent(1,"kkkkkk");
-  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
-  mesh2->getCoords()->setInfoOnComponent(1,tmp3.c_str());
-  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
-  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
-  //
-  mesh1->decrRef();
-  mesh2->decrRef();
-}
-
-void MEDCouplingBasicsTest::testEqualFieldDouble()
-{
-  MEDCouplingUMesh *mesh1=build2DTargetMesh_1();
-  MEDCouplingUMesh *mesh2=build2DTargetMesh_1();
-  //
-  MEDCouplingFieldDouble *fieldOnCells1=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
-  fieldOnCells1->setMesh(mesh1);
-  MEDCouplingFieldDouble *fieldOnCells2=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
-  fieldOnCells2->setMesh(mesh2);
-  //
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells2->decrRef();
-  //
-  MEDCouplingFieldDouble *fieldOnNodes1=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnNodes1,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnNodes1->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnNodes1->decrRef();
-  //
-  fieldOnCells2=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells1->decrRef();
-  fieldOnCells1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells1->setTime(4.,6,7);
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells2->setTime(4.,6,7);
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells1->setName("Power");
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells2->setName("Power");
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  //
-  fieldOnCells1->setMesh(mesh1);
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells2->setMesh(mesh1);
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  DataArrayDouble *arr=DataArrayDouble::New();
-  arr->setName("popo");
-  arr->alloc(mesh1->getNumberOfCells(),3);
-  double *pt=arr->getPointer();
-  std::fill(pt,pt+mesh1->getNumberOfCells()*3,6.);
-  fieldOnCells1->setArray(arr);
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  fieldOnCells2->setArray(arr);
-  arr->decrRef();
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  //
-  DataArrayDouble *arr2=arr->deepCopy();
-  fieldOnCells2->setArray(arr2);
-  arr2->decrRef();
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  pt[4]=6.1;
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  pt[4]=6.;
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  arr2->setName("popo2");
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  //
-  arr2->setName("popo");
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  //
-  arr2->setInfoOnComponent(2,"jjj");
-  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  arr->setInfoOnComponent(2,"jjj");
-  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
-  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
-  //
-  fieldOnCells1->decrRef();
-  fieldOnCells2->decrRef();
-  //
-  mesh1->decrRef();
-  mesh2->decrRef();
-}
-
-void MEDCouplingBasicsTest::testNatureChecking()
-{
-  MEDCouplingFieldDouble *field=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
-  field->setNature(Integral);
-  field->setNature(ConservativeVolumic);
-  field->setNature(IntegralGlobConstraint);
-  field->decrRef();
-  field=MEDCouplingFieldDouble::New(ON_NODES,NO_TIME);
-  field->setNature(ConservativeVolumic);
-  CPPUNIT_ASSERT_THROW(field->setNature(Integral),INTERP_KERNEL::Exception);
-  CPPUNIT_ASSERT_THROW(field->setNature(IntegralGlobConstraint),INTERP_KERNEL::Exception);
-  field->decrRef();
-}
-
-void MEDCouplingBasicsTest::testBuildSubMeshData()
-{
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //check buildSubMesh on field on cells
-  MEDCouplingFieldDouble *fieldCells=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
-  fieldCells->setMesh(targetMesh);
-  const int elts[3]={1,2,4};
-  DataArrayInt *di;
-  MEDCouplingMesh *ret1=fieldCells->buildSubMeshData(elts,elts+3,di);
-  CPPUNIT_ASSERT_EQUAL(3,ret1->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(6,ret1->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(3,di->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(1,di->getNumberOfComponents());
-  const int *toCheck=di->getConstPointer();
-  CPPUNIT_ASSERT(std::equal(elts,elts+3,toCheck));
-  MEDCouplingUMesh *ret1DC=dynamic_cast<MEDCouplingUMesh *>(ret1);
-  CPPUNIT_ASSERT(ret1DC);
-  ret1->decrRef();
-  di->decrRef();
-  fieldCells->decrRef();
-  //check buildSubMesh on field on nodes
-  MEDCouplingFieldDouble *fieldNodes=MEDCouplingFieldDouble::New(ON_NODES,NO_TIME);
-  fieldNodes->setMesh(targetMesh);
-  MEDCouplingMesh *ret2=fieldNodes->buildSubMeshData(elts,elts+3,di);
-  MEDCouplingUMesh *ret2DC=dynamic_cast<MEDCouplingUMesh *>(ret2);
-  CPPUNIT_ASSERT(ret2DC);
-  CPPUNIT_ASSERT_EQUAL(3,ret2->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(6,ret2->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(6,di->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(1,di->getNumberOfComponents());
-  toCheck=di->getConstPointer();
-  const int expected[6]={1,2,4,5,7,8};
-  CPPUNIT_ASSERT(std::equal(expected,expected+6,toCheck));
-  ret2->decrRef();
-  di->decrRef();
-  fieldNodes->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testExtrudedMesh1()
-{
-  MEDCouplingUMesh *mesh2D=0;
-  MEDCouplingUMesh *mesh3D=build3DExtrudedUMesh_1(mesh2D);
-  MEDCouplingExtrudedMesh *ext=MEDCouplingExtrudedMesh::New(mesh3D,mesh2D,1);
-  CPPUNIT_ASSERT_EQUAL(18,ext->getNumberOfCells());
-  CPPUNIT_ASSERT_EQUAL(60,ext->getNumberOfNodes());
-  DataArrayInt *ids3D=ext->getMesh3DIds();
-  const int ids3DExpected[18]={5,4,3,2,1,0, 11,10,9,8,7,6, 17,16,15,14,13,12};
-  CPPUNIT_ASSERT_EQUAL(18,ids3D->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(1,ids3D->getNumberOfComponents());
-  CPPUNIT_ASSERT(std::equal(ids3DExpected,ids3DExpected+18,ids3D->getConstPointer()));
-  MEDCouplingUMesh *mesh1D=ext->getMesh1D();
-  CPPUNIT_ASSERT_EQUAL(4,mesh1D->getNumberOfNodes());
-  CPPUNIT_ASSERT_EQUAL(3,mesh1D->getNumberOfCells());
-  const double mesh1DExpected[12]={0.66666666666666663, 1.4583333333333333, 0, 0.66666666666666663, 1.4583333333333333, 1, 0.66666666666666663, 1.4583333333333333, 2, 0.66666666666666663, 1.4583333333333333, 3};
-  DataArrayDouble *mesh1DCoords=mesh1D->getCoords();
-  CPPUNIT_ASSERT_EQUAL(4,mesh1DCoords->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(3,mesh1DCoords->getNumberOfComponents());
-  CPPUNIT_ASSERT(std::equal(mesh1DExpected,mesh1DExpected+12,mesh1DCoords->getConstPointer()));
-  DataArrayInt *conn1D=mesh1D->getNodalConnectivity();
-  CPPUNIT_ASSERT_EQUAL(9,conn1D->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(1,conn1D->getNumberOfComponents());
-  const int conn1DExpected[9]={1,0,1,1,1,2,1,2,3};
-  CPPUNIT_ASSERT(std::equal(conn1DExpected,conn1DExpected+9,conn1D->getConstPointer()));
-  ext->decrRef();
-  mesh3D->decrRef();
-  mesh2D->decrRef();
-}
-
-void MEDCouplingBasicsTest::testFindCommonNodes()
-{
-  DataArrayInt *comm,*commI;
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  targetMesh->findCommonNodes(comm,commI,1e-10);
-  CPPUNIT_ASSERT_EQUAL(1,commI->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(0,comm->getNumberOfTuples());
-  int newNbOfNodes;
-  DataArrayInt *o2n=targetMesh->buildNewNumberingFromCommNodesFrmt(comm,commI,newNbOfNodes);
-  CPPUNIT_ASSERT_EQUAL(27,newNbOfNodes);
-  CPPUNIT_ASSERT_EQUAL(27,o2n->getNumberOfTuples());
-  const int o2nExp1[27]=
-    {
-      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
-      21,22,23,24,25,26
-    };
-  CPPUNIT_ASSERT(std::equal(o2nExp1,o2nExp1+27,o2n->getConstPointer()));
-  o2n->decrRef();
-  comm->decrRef();
-  commI->decrRef();
-  targetMesh->decrRef();
-  //
-  targetMesh=build3DTargetMeshMergeNode_1();
-  CPPUNIT_ASSERT_EQUAL(31,targetMesh->getNumberOfNodes());
-  targetMesh->findCommonNodes(comm,commI,1e-10);
-  CPPUNIT_ASSERT_EQUAL(3,commI->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(6,comm->getNumberOfTuples());
-  const int commExpected[6]={1,27,28,29,23,30};
-  const int commIExpected[3]={0,4,6};
-  CPPUNIT_ASSERT(std::equal(commExpected,commExpected+6,comm->getConstPointer()));
-  CPPUNIT_ASSERT(std::equal(commIExpected,commIExpected+3,commI->getConstPointer()));
-  o2n=targetMesh->buildNewNumberingFromCommNodesFrmt(comm,commI,newNbOfNodes);
-  CPPUNIT_ASSERT_EQUAL(31,o2n->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(27,newNbOfNodes);
-  const int o2nExp2[31]=
-    {
-      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
-      21,22,23,24,25,26,1,1,1,23
-    };
-  CPPUNIT_ASSERT(std::equal(o2nExp2,o2nExp2+31,o2n->getConstPointer()));
-  o2n->decrRef();
-  comm->decrRef();
-  commI->decrRef();
-  targetMesh->decrRef();
-  //
-  targetMesh=build3DTargetMesh_1();
-  bool areNodesMerged;
-  unsigned int time=targetMesh->getTimeOfThis();
-  o2n=targetMesh->mergeNodes(1e-10,areNodesMerged);
-  targetMesh->updateTime();
-  CPPUNIT_ASSERT(time==targetMesh->getTimeOfThis());
-  CPPUNIT_ASSERT(!areNodesMerged);
-  targetMesh->decrRef();
-  o2n->decrRef();
-  //
-  targetMesh=build3DTargetMeshMergeNode_1();
-  time=targetMesh->getTimeOfThis();
-  o2n=targetMesh->mergeNodes(1e-10,areNodesMerged);
-  targetMesh->updateTime();
-  CPPUNIT_ASSERT(time!=targetMesh->getTimeOfThis());
-  CPPUNIT_ASSERT(areNodesMerged);
-  int connExp[72]={18,0,1,4,3,9,10,13,12, 18,1,2,5,4,10,11,14,13, 18,3,4,7,6,12,13,16,15,
-                   18,4,5,8,7,13,14,17,16,
-                   18,9,10,13,12,18,19,22,21, 18,10,11,14,13,19,20,23,22, 18,12,13,16,15,21,22,25,24,
-                   18,13,14,17,16,22,23,26,25};
-  CPPUNIT_ASSERT_EQUAL(72,targetMesh->getNodalConnectivity()->getNumberOfTuples());
-  CPPUNIT_ASSERT(std::equal(connExp,connExp+72,targetMesh->getNodalConnectivity()->getConstPointer()));
-  CPPUNIT_ASSERT_EQUAL(27,targetMesh->getCoords()->getNumberOfTuples());
-  double coordsExp[81]={ 0., 0., 0., 50., 0., 0. , 200., 0., 0.  , 0., 50., 0., 50., 50., 0. ,
-                         200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
-                         0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50.,
-                         50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. ,
-                         200., 200., 50. , 0., 0., 200., 50., 0., 200. , 200., 0., 200.  
-                         , 0., 50., 200., 50., 50., 200. , 200., 50., 200., 
-                         0., 200., 200., 50., 200., 200. , 200., 200., 200. };
-  CPPUNIT_ASSERT(std::equal(coordsExp,coordsExp+81,targetMesh->getCoords()->getConstPointer()));
-  targetMesh->decrRef();
-  o2n->decrRef();
-  //2D
-  targetMesh=build2DTargetMeshMergeNode_1();
-  CPPUNIT_ASSERT_EQUAL(18,targetMesh->getNumberOfNodes());
-  time=targetMesh->getTimeOfThis();
-  o2n=targetMesh->mergeNodes(1e-10,areNodesMerged);
-  CPPUNIT_ASSERT(time!=targetMesh->getTimeOfThis());
-  CPPUNIT_ASSERT(areNodesMerged);
-  CPPUNIT_ASSERT_EQUAL(9,targetMesh->getNumberOfNodes());
-  int connExp2[23]={4,0,4,3,1, 3,1,3,2, 3,3,5,2, 4,4,6,7,3, 4,7,8,5,3};
-  CPPUNIT_ASSERT_EQUAL(23,targetMesh->getNodalConnectivity()->getNumberOfTuples());
-  CPPUNIT_ASSERT(std::equal(connExp2,connExp2+23,targetMesh->getNodalConnectivity()->getConstPointer()));
-  double coordsExp2[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, 0.2,0.2, -0.3,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7};
-  CPPUNIT_ASSERT_EQUAL(9,targetMesh->getCoords()->getNumberOfTuples());
-  CPPUNIT_ASSERT(std::equal(coordsExp2,coordsExp2+18,targetMesh->getCoords()->getConstPointer()));
-  targetMesh->decrRef();
-  o2n->decrRef();
-}
-
-void MEDCouplingBasicsTest::testCheckButterflyCells()
-{
-  std::vector<int> cells;
-  MEDCouplingUMesh *sourceMesh=build2DTargetMesh_1();
-  sourceMesh->checkButterflyCells(cells);
-  CPPUNIT_ASSERT(cells.empty());
-  int *pt=sourceMesh->getNodalConnectivity()->getPointer();
-  std::swap(pt[15],pt[16]);
-  sourceMesh->checkButterflyCells(cells);
-  CPPUNIT_ASSERT_EQUAL(1,(int)cells.size());
-  CPPUNIT_ASSERT_EQUAL(3,cells[0]);
-  cells.clear();
-  std::swap(pt[15],pt[16]);
-  sourceMesh->checkButterflyCells(cells);
-  CPPUNIT_ASSERT(cells.empty());
-  sourceMesh->decrRef();
-  // 3D surf
-  sourceMesh=build3DSurfTargetMesh_1();
-  sourceMesh->checkButterflyCells(cells);
-  CPPUNIT_ASSERT(cells.empty());
-  pt=sourceMesh->getNodalConnectivity()->getPointer();
-  std::swap(pt[15],pt[16]);
-  sourceMesh->checkButterflyCells(cells);
-  CPPUNIT_ASSERT_EQUAL(1,(int)cells.size());
-  CPPUNIT_ASSERT_EQUAL(3,cells[0]);
-  cells.clear();
-  std::swap(pt[15],pt[16]);
-  sourceMesh->checkButterflyCells(cells);
-  CPPUNIT_ASSERT(cells.empty());
-  sourceMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testMergeMesh1()
-{
-  MEDCouplingUMesh *m1=build2DTargetMesh_1();
-  MEDCouplingUMesh *m2=build2DSourceMesh_1();
-  const double vec[2]={1.,0.};
-  m2->translate(vec);
-  MEDCouplingMesh *m3=m1->mergeMyselfWith(m2);
-  MEDCouplingUMesh *m3C=dynamic_cast<MEDCouplingUMesh *>(m3);
-  CPPUNIT_ASSERT(m3C);
-  m3->checkCoherency();
-  MEDCouplingUMesh *m4=build2DTargetMeshMerged_1();
-  CPPUNIT_ASSERT(m3->isEqual(m4,1.e-12));
-  m4->decrRef();
-  bool isMerged;
-  DataArrayInt *da=m3C->mergeNodes(1.e-12,isMerged);
-  CPPUNIT_ASSERT_EQUAL(11,m3C->getNumberOfNodes());
-  CPPUNIT_ASSERT(isMerged);
-  da->decrRef();
-  m3->decrRef();
-  m1->decrRef();
-  m2->decrRef();
-}
-
-void MEDCouplingBasicsTest::testMergeField1()
-{
-  MEDCouplingUMesh *m1=build2DTargetMesh_1();
-  MEDCouplingUMesh *m2=build2DSourceMesh_1();
-  const double vec[2]={1.,0.};
-  m2->translate(vec);
-  MEDCouplingFieldDouble *f1=m1->getMeasureField(true);
-  MEDCouplingFieldDouble *f2=m2->getMeasureField(true);
-  MEDCouplingFieldDouble *f3=MEDCouplingFieldDouble::mergeFields(f1,f2);
-  f3->checkCoherency();
-  MEDCouplingUMesh *m4=build2DTargetMeshMerged_1();
-  CPPUNIT_ASSERT(f3->getMesh()->isEqual(m4,1.e-12));
-  std::string name=f3->getName();
-  CPPUNIT_ASSERT(name=="MeasureOfMesh_");
-  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_CELLS);
-  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f3->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(7,f3->getNumberOfTuples());
-  double values[7]={0.25,0.125,0.125,0.25,0.25,0.5,0.5};
-  const double *tmp=f3->getArray()->getConstPointer();
-  std::transform(tmp,tmp+7,values,values,std::minus<double>());
-  std::transform(values,values+7,values,std::ptr_fun<double,double>(fabs));
-  double max=*std::max_element(values,values+7);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  m4->decrRef();
-  f3->decrRef();
-  f1->decrRef();
-  f2->decrRef();
-  m1->decrRef();
-  m2->decrRef();
-}
-
-bool func1(const double *pt, double *res);
-bool func2(const double *pt, double *res);
-bool func3(const double *pt, double *res);
-bool func4(const double *pt, double *res);
-
-bool func1(const double *pt, double *res)
-{
-  res[0]=pt[0]+pt[1];
-  return true;
-}
-
-bool func2(const double *pt, double *res)
-{
-  res[0]=pt[0]+pt[1];
-  res[1]=2.*(pt[0]+pt[1]);
-  return true;
-}
-
-bool func3(const double *pt, double *res)
-{
-  if(fabs(pt[0]-0.2)<1e-12)
-    return false;
-  res[0]=1./(pt[0]-0.2);
-  return true;
-}
-
-void MEDCouplingBasicsTest::testFillFromAnalytic()
-{
-  MEDCouplingUMesh *m=build2DTargetMesh_1();
-  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_CELLS,1,func1);
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_CELLS);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(5,f1->getNumberOfTuples());
-  double values1[5]={-0.1,0.23333333333333336,0.56666666666666665,0.4,0.9};
-  const double *tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+5,values1,values1,std::minus<double>());
-  std::transform(values1,values1+5,values1,std::ptr_fun<double,double>(fabs));
-  double max=*std::max_element(values1,values1+5);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  //
-  f1=m->fillFromAnalytic(ON_NODES,1,func1);
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values2[9]={-0.6,-0.1,0.4,-0.1,0.4,0.9,0.4,0.9,1.4};
-  tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values2,values2,std::minus<double>());
-  std::transform(values2,values2+9,values2,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values2,values2+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  //
-  f1=m->fillFromAnalytic(ON_NODES,2,func2);
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values3[18]={-0.6,-1.2,-0.1,-0.2,0.4,0.8,-0.1,-0.2,0.4,0.8,0.9,1.8,0.4,0.8,0.9,1.8,1.4,2.8};
-  tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+18,values3,values3,std::minus<double>());
-  std::transform(values3,values3+18,values3,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values3,values3+18);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  double values4[2];
-  f1->accumulate(values4);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(3.6,values4[0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.2,values4[1],1.e-12);
-  f1->measureAccumulate(true,values4);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,values4[0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,values4[1],1.e-12);
-  f1->decrRef();
-  //
-  CPPUNIT_ASSERT_THROW(f1=m->fillFromAnalytic(ON_NODES,1,func3),INTERP_KERNEL::Exception);
-  //
-  m->decrRef();
-}
-
-void MEDCouplingBasicsTest::testFillFromAnalytic2()
-{
-  MEDCouplingUMesh *m=build2DTargetMesh_1();
-  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_CELLS,1,"y+x");
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_CELLS);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(5,f1->getNumberOfTuples());
-  double values1[5]={-0.1,0.23333333333333336,0.56666666666666665,0.4,0.9};
-  const double *tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+5,values1,values1,std::minus<double>());
-  std::transform(values1,values1+5,values1,std::ptr_fun<double,double>(fabs));
-  double max=*std::max_element(values1,values1+5);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  //
-  f1=m->fillFromAnalytic(ON_NODES,1,"y+2*x");
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values2[9]={-0.9,0.1,1.1,-0.4,0.6,1.6,0.1,1.1,2.1};
-  tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values2,values2,std::minus<double>());
-  std::transform(values2,values2+9,values2,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values2,values2+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  f1=m->fillFromAnalytic(ON_NODES,1,"2.*x+y");
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  tmp=f1->getArray()->getConstPointer();
-  double values2Bis[9]={-0.9,0.1,1.1,-0.4,0.6,1.6,0.1,1.1,2.1};
-  std::transform(tmp,tmp+9,values2Bis,values2Bis,std::minus<double>());
-  std::transform(values2,values2+9,values2Bis,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values2Bis,values2Bis+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  //
-  f1=m->fillFromAnalytic(ON_NODES,2,"(x+y)*IVec+2*(x+y)*JVec");
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values3[18]={-0.6,-1.2,-0.1,-0.2,0.4,0.8,-0.1,-0.2,0.4,0.8,0.9,1.8,0.4,0.8,0.9,1.8,1.4,2.8};
-  tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+18,values3,values3,std::minus<double>());
-  std::transform(values3,values3+18,values3,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values3,values3+18);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  double values4[2];
-  f1->accumulate(values4);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(3.6,values4[0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.2,values4[1],1.e-12);
-  f1->measureAccumulate(true,values4);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,values4[0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,values4[1],1.e-12);
-  f1->decrRef();
-  //
-  CPPUNIT_ASSERT_THROW(f1=m->fillFromAnalytic(ON_NODES,1,"1./(x-0.2)"),INTERP_KERNEL::Exception);
-  //
-  m->decrRef();
-}
-
-void MEDCouplingBasicsTest::testApplyFunc()
-{
-  MEDCouplingUMesh *m=build2DTargetMesh_1();
-  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,2,func2);
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  f1->applyFunc(1,func1);
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values1[9]={-1.8,-0.3,1.2,-0.3,1.2,2.7,1.2,2.7,4.2};
-  const double *tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values1,values1,std::minus<double>());
-  std::transform(values1,values1+9,values1,std::ptr_fun<double,double>(fabs));
-  double max=*std::max_element(values1,values1+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  m->decrRef();
-}
-
-void MEDCouplingBasicsTest::testApplyFunc2()
-{
-  MEDCouplingUMesh *m=build2DTargetMesh_1();
-  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,2,func2);
-  f1->checkCoherency();
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  //
-  MEDCouplingFieldDouble *f2=f1->clone(true);
-  f2->applyFunc("abs(u)^2.4+2*u");
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values2[18]={-0.9065304805418678, -0.85105859001709905, -0.19601892829446504, -0.37898777756476987,
-                      0.91090317490482353, 2.1853504664669781, -0.19601892829446504, -0.37898777756476987,
-                      0.91090317490482353, 2.1853504664669781, 2.5765725275664879, 7.6987743736515295,
-                      0.91090317490482353, 2.1853504664669781, 2.5765725275664879, 7.6987743736515295,
-                      5.0423700574830965, 17.435300118916864};
-  const double *tmp=f2->getArray()->getConstPointer();
-  std::transform(tmp,tmp+18,values2,values2,std::minus<double>());
-  std::transform(values2,values2+18,values2,std::ptr_fun<double,double>(fabs));
-  double max=*std::max_element(values2,values2+18);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f2->decrRef();
-  //
-  f1->applyFunc(1,"x+y");
-  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
-  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
-  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
-  double values1[9]={-1.8,-0.3,1.2,-0.3,1.2,2.7,1.2,2.7,4.2};
-  tmp=f1->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values1,values1,std::minus<double>());
-  std::transform(values1,values1+9,values1,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values1,values1+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f1->decrRef();
-  m->decrRef();
-}
-
-void MEDCouplingBasicsTest::testOperationsOnFields()
-{
-  MEDCouplingUMesh *m=build2DTargetMesh_1();
-  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,1,func1);
-  MEDCouplingFieldDouble *f2=m->fillFromAnalytic(ON_NODES,1,func1);
-  f1->checkCoherency();
-  f2->checkCoherency();
-  MEDCouplingFieldDouble *f3=(*f1)+(*f2);
-  f3->checkCoherency();
-  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
-  double values1[9]={-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8};
-  const double *tmp=f3->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values1,values1,std::minus<double>());
-  std::transform(values1,values1+9,values1,std::ptr_fun<double,double>(fabs));
-  double max=*std::max_element(values1,values1+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f3->decrRef();
-  //
-  f3=(*f1)*(*f2);
-  f3->checkCoherency();
-  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
-  double values2[9]={0.36,0.01,0.16,0.01,0.16,0.81,0.16,0.81,1.96};
-  tmp=f3->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values2,values2,std::minus<double>());
-  std::transform(values2,values2+9,values2,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values2,values2+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f3->decrRef();
-  //
-  f3=(*f1)+(*f2);
-  MEDCouplingFieldDouble *f4=(*f1)-(*f3);
-  f4->checkCoherency();
-  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f4->getTimeDiscretization()==NO_TIME);
-  double values3[9]={0.6,0.1,-0.4,0.1,-0.4,-0.9,-0.4,-0.9,-1.4};
-  tmp=f4->getArray()->getConstPointer();
-  std::transform(tmp,tmp+9,values3,values3,std::minus<double>());
-  std::transform(values3,values3+9,values3,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values3,values3+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f3->decrRef();
-  f4->decrRef();
-  //
-  f3=(*f1)+(*f2);
-  f4=(*f3)/(*f2);
-  f4->checkCoherency();
-  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f4->getTimeDiscretization()==NO_TIME);
-  tmp=f4->getArray()->getConstPointer();
-  for(int i=0;i<9;i++)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,tmp[i],1.e-12);
-  f3->decrRef();
-  f4->decrRef();
-  //
-  f4=f2->buildNewTimeReprFromThis(ONE_TIME,false);
-  f4->checkCoherency();
-  CPPUNIT_ASSERT(f4->getArray()==f2->getArray());
-  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f4->getTimeDiscretization()==ONE_TIME);
-  CPPUNIT_ASSERT_THROW(f3=(*f1)+(*f4),INTERP_KERNEL::Exception);
-  MEDCouplingFieldDouble *f5=f4->buildNewTimeReprFromThis(NO_TIME,false);
-  CPPUNIT_ASSERT(f4->getArray()==f5->getArray());
-  CPPUNIT_ASSERT(f5->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f5->getTimeDiscretization()==NO_TIME);
-  f3=(*f1)+(*f5);
-  tmp=f3->getArray()->getConstPointer();
-  double values4[9]={-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8};
-  std::transform(tmp,tmp+9,values4,values4,std::minus<double>());
-  std::transform(values4,values4+9,values4,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values4,values4+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f5->decrRef();
-  f4->decrRef();
-  f3->decrRef();
-  //
-  f4=f2->buildNewTimeReprFromThis(ONE_TIME,true);
-  f4->checkCoherency();
-  CPPUNIT_ASSERT(f4->getArray()!=f2->getArray());
-  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f4->getTimeDiscretization()==ONE_TIME);
-  CPPUNIT_ASSERT_THROW(f3=(*f1)+(*f4),INTERP_KERNEL::Exception);
-  f5=f4->buildNewTimeReprFromThis(NO_TIME,true);
-  CPPUNIT_ASSERT(f4->getArray()!=f5->getArray());
-  CPPUNIT_ASSERT(f2->getArray()!=f5->getArray());
-  CPPUNIT_ASSERT(f5->getTypeOfField()==ON_NODES);
-  CPPUNIT_ASSERT(f5->getTimeDiscretization()==NO_TIME);
-  f3=(*f1)+(*f5);
-  tmp=f3->getArray()->getConstPointer();
-  double values5[9]={-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8};
-  std::transform(tmp,tmp+9,values5,values5,std::minus<double>());
-  std::transform(values5,values5+9,values5,std::ptr_fun<double,double>(fabs));
-  max=*std::max_element(values5,values5+9);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
-  f5->decrRef();
-  f4->decrRef();
-  f3->decrRef();
-  //
-  f1->decrRef();
-  f2->decrRef();
-  m->decrRef();
-}
-
-bool func4(const double *pt, double *res)
-{
-  res[0]=pt[0]+pt[1]+pt[2];
-  return true;
-}
-
-void MEDCouplingBasicsTest::testMergeNodesOnField()
-{
-  double *tmp;
-  MEDCouplingUMesh *targetMesh=build3DTargetMeshMergeNode_1();
-  MEDCouplingFieldDouble *f1=targetMesh->fillFromAnalytic(ON_NODES,1,func4);
-  f1->mergeNodes(1e-10);
-  f1->decrRef();
-  targetMesh->decrRef();
-  //
-  targetMesh=build3DTargetMeshMergeNode_1();
-  f1=targetMesh->fillFromAnalytic(ON_NODES,1,func4);
-  tmp=f1->getArray()->getPointer();
-  tmp[0]=1000.;
-  f1->mergeNodes(1e-10);
-  f1->decrRef();
-  targetMesh->decrRef();
-  //
-  targetMesh=build3DTargetMeshMergeNode_1();
-  f1=targetMesh->fillFromAnalytic(ON_NODES,1,func4);
-  tmp=f1->getArray()->getPointer();
-  tmp[1]=1000.;
-  CPPUNIT_ASSERT_THROW(f1->mergeNodes(1e-10),INTERP_KERNEL::Exception);
-  f1->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testCheckConsecutiveCellTypes()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  CPPUNIT_ASSERT(sourceMesh->checkConsecutiveCellTypes());
-  CPPUNIT_ASSERT(!targetMesh->checkConsecutiveCellTypes());
-  targetMesh->decrRef();
-  sourceMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testBuildOrthogonalField()
-{
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  MEDCouplingFieldDouble *field=targetMesh->buildOrthogonalField();
-  double expected[3]={0.70710678118654746,0.,-0.70710678118654746};
-  CPPUNIT_ASSERT_EQUAL(5,field->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(3,field->getNumberOfComponents());
-  const double *vals=field->getArray()->getConstPointer();
-  for(int i=0;i<15;i++)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected[i%3],vals[i],1e-12);
-  field->decrRef();
-  targetMesh->decrRef();
-  // testing 
-  double targetCoords[12]={0.,0.,0.,0.5,0.,0.5,1.,0.,1.,0.,1.,0.};
-  int targetConn[4]={0,1,2,3};
-  targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(1);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(4,3);
-  std::copy(targetCoords,targetCoords+12,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  field=targetMesh->buildOrthogonalField();
-  CPPUNIT_ASSERT_EQUAL(1,field->getNumberOfTuples());
-  CPPUNIT_ASSERT_EQUAL(3,field->getNumberOfComponents());
-  vals=field->getArray()->getConstPointer();
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.70710678118654746,vals[0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,vals[1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.70710678118654746,vals[2],1e-12);
-  field->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testGetElementsContainingPoint()
-{
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  double pos[12]={0.,0.,0.4,0.4,0.,0.4,0.1,0.1,0.25,0.,0.65,0.};
-  std::vector<int> t1,t2;
-  //2D basic
-  targetMesh->getElementsContainingPoints(pos,6,1e-12,t1,t2);
-  CPPUNIT_ASSERT_EQUAL(6,(int)t1.size());
-  CPPUNIT_ASSERT_EQUAL(7,(int)t2.size());
-  const int expectedValues1[6]={0,4,3,0,1,2};
-  const int expectedValues2[7]={0,1,2,3,4,5,6};
-  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues1));
-  CPPUNIT_ASSERT(std::equal(t2.begin(),t2.end(),expectedValues2));
-  //2D with no help of bounding box.
-  double center[2]={0.2,0.2};
-  MEDCouplingPointSet::rotate2DAlg(center,0.78539816339744830962,6,pos);
-  targetMesh->rotate(center,0,0.78539816339744830962);
-  t1.clear(); t2.clear();
-  targetMesh->getElementsContainingPoints(pos,6,1e-12,t1,t2);
-  CPPUNIT_ASSERT_EQUAL(6,(int)t1.size());
-  CPPUNIT_ASSERT_EQUAL(7,(int)t2.size());
-  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues1));
-  CPPUNIT_ASSERT(std::equal(t2.begin(),t2.end(),expectedValues2));
-  //2D outside
-  const double pos1bis[2]={-0.3303300858899107,-0.11819805153394641};
-  CPPUNIT_ASSERT_EQUAL(-1,targetMesh->getElementContainingPoint(pos1bis,1e-12));
-  targetMesh->decrRef();
-  //test limits 2D
-  targetMesh=build2DTargetMesh_1();
-  const double pos2[2]={0.2,-0.05};
-  t1.clear();
-  targetMesh->getElementsContainingPoint(pos2,1e-12,t1);
-  CPPUNIT_ASSERT_EQUAL(2,(int)t1.size());
-  const int expectedValues3[2]={0,1};
-  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues3));
-  const double pos3[2]={0.2,0.2};
-  t1.clear();
-  targetMesh->getElementsContainingPoint(pos3,1e-12,t1);
-  CPPUNIT_ASSERT_EQUAL(5,(int)t1.size());
-  const int expectedValues4[5]={0,1,2,3,4};
-  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues4));
-  CPPUNIT_ASSERT_EQUAL(0,targetMesh->getElementContainingPoint(pos3,1e-12));
-  targetMesh->decrRef();
-  //3D
-  targetMesh=build3DTargetMesh_1();
-  const double pos4[3]={25.,25.,25.};
-  CPPUNIT_ASSERT_EQUAL(0,targetMesh->getElementContainingPoint(pos4,1e-12));
-  const double pos5[3]={50.,50.,50.};
-  t1.clear();
-  targetMesh->getElementsContainingPoint(pos5,1e-12,t1);
-  CPPUNIT_ASSERT_EQUAL(8,(int)t1.size());
-  const int expectedValues5[8]={0,1,2,3,4,5,6,7};
-  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues5));
-  const double pos6[3]={0., 50., 0.};
-  t1.clear();
-  targetMesh->getElementsContainingPoint(pos6,1e-12,t1);
-  CPPUNIT_ASSERT_EQUAL(2,(int)t1.size());
-  const int expectedValues6[2]={0,2};
-  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues6));
-  //3D outside
-  const double pos7[3]={-1.0,-1.0,0.};
-  CPPUNIT_ASSERT_EQUAL(-1,targetMesh->getElementContainingPoint(pos7,1e-12));
-  //3D outside 2
-  const double center2[3]={0.,0.,0.};
-  const double vec2[3]={0.,-1.,0.};
-  targetMesh->rotate(center2,vec2,0.78539816339744830962);
-  const double pos8[3]={-25,25.,12.};
-  CPPUNIT_ASSERT_EQUAL(-1,targetMesh->getElementContainingPoint(pos8,1e-12));
-  //
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testGetValueOn1()
-{
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  MEDCouplingFieldDouble *fieldOnCells=MEDCouplingFieldDouble::New(ON_CELLS);
-  int nbOfCells=targetMesh->getNumberOfCells();
-  fieldOnCells->setMesh(targetMesh);
-  DataArrayDouble *array=DataArrayDouble::New();
-  array->alloc(nbOfCells,2);
-  fieldOnCells->setArray(array);
-  double *tmp=array->getPointer();
-  for(int i=0;i<nbOfCells;i++)
-    { tmp[2*i]=7.+(double)i; tmp[2*i+1]=17.+(double)i; }
-  array->decrRef();
-  //
-  const double pos1[2]={0.25,0.};
-  double res[2];
-  fieldOnCells->getValueOn(pos1,res);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8.,res[0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(18.,res[1],1e-12);
-  //
-  fieldOnCells->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P0_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[3]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Convex, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<3;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[2][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[4][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[4][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  //
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  //
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P0PL_2()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  std::vector<int> cellsIds(targetMesh->getNumberOfCells());
-  for(int i=0;i<targetMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  targetMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  //
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  //
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P0PL_3()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
-  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  sourceMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  //
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  //
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P0PL_4()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
-  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  sourceMesh->convertToPolyTypes(cellsIds);
-  cellsIds.resize(targetMesh->getNumberOfCells());
-  for(int i=0;i<targetMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  targetMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  //
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  //
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P1_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[3]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Convex, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<3;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
-      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[0][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329,res[2][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[3][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[4][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[4][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[5][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329,res[6][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[7][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[8][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[8][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25,sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P1PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<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][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(12.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0P1PL_2()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
-  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  sourceMesh->convertToPolyTypes(cellsIds);
-  //
-  cellsIds.resize(targetMesh->getNumberOfCells());
-  for(int i=0;i<targetMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  targetMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<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][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(12.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1P0_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[3][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333,res[1][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333,res[2][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666667,res[3][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[2][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[3][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[4][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[1][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[2][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[4][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1P0PL_2()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  std::vector<int >cellsIds(targetMesh->getNumberOfCells());
-  for(int i=0;i<targetMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  targetMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[1][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[2][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[4][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1P1_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_2();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
-      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334,res[0][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665,res[1][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666,res[1][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334,res[2][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665,res[3][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666668,res[3][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.1416666666666666,res[4][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999,res[4][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999,res[4][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09999999999999999,res[4][3],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666,res[5][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333333,res[5][3],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333333,res[6][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666667,res[7][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333331,res[7][3],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.04166666666666668,res[8][3],1.e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1P1PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
-  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[0][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][1],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[2][1],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][2],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][1],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][2],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][2],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[8][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(25.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP0P0_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[3]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Convex, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<3;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP0P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP0P1_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
-      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[0][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329*sqrt(2.),res[2][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[3][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[4][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[4][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[5][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329*sqrt(2.),res[6][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[7][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[8][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[8][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25*sqrt(2.),sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP0P1PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<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][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(12.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP1P0_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[3][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333*sqrt(2.),res[1][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333*sqrt(2.),res[2][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666667*sqrt(2.),res[3][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[2][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[3][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[4][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP1P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[1][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[2][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[4][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP1P1_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_2();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
-      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334*sqrt(2.),res[0][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665*sqrt(2.),res[1][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666*sqrt(2.),res[1][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334*sqrt(2.),res[2][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665*sqrt(2.),res[3][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666668*sqrt(2.),res[3][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.1416666666666666*sqrt(2.),res[4][0],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999*sqrt(2.),res[4][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999*sqrt(2.),res[4][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09999999999999999*sqrt(2.),res[4][3],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666*sqrt(2.),res[5][1],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333333*sqrt(2.),res[5][3],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333333*sqrt(2.),res[6][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666667*sqrt(2.),res[7][2],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333331*sqrt(2.),res[7][3],1.e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.04166666666666668*sqrt(2.),res[8][3],1.e-12);
-      res.clear();
-    }
-  //
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP1P1PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
-  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[0][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][1],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[2][1],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][2],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][0],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][1],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][2],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][2],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[8][3],1.e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(25.,sumAll(res),1e-12);
-  res.clear();
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP0P0_2()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMeshPerm_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::Triangulation);
-  {
-    myInterpolator.setOrientation(2);
-    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
-    res.clear();
-  }
-  {
-    myInterpolator.setOrientation(0);
-    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.125*sqrt(2.),res[2][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.75*sqrt(2.),sumAll(res),1e-12);
-    res.clear();
-  }
-  {
-    myInterpolator.setOrientation(1);
-    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.875*sqrt(2.),sumAll(res),1e-12);
-    res.clear();
-  }
-  {
-    myInterpolator.setOrientation(-1);
-    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),sumAll(res),1e-12);
-    res.clear();
-  }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-/*!
- * Test of precision option implemented by Fabien that represents distance of "barycenter" to the other cell.
- */
-void MEDCouplingBasicsTest::test3DSurfInterpP0P0_3()
-{
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  vector<map<int,double> > res;
-  double vecTrans[3]={0.,0.,1.e-10};
-  double vec[3]={0.,-1.,0.};
-  double pt[3]={-0.3,-0.3,5.e-11};
-  const int N=32;
-  const double deltaA=M_PI/N;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::Triangulation);
-  myInterpolator.setMaxDistance3DSurfIntersect(1e-9);
-  for(int i=0;i<N;i++)
-    {
-      res.clear();
-      MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_2();
-      sourceMesh->rotate(pt,vec,i*deltaA);
-      MEDCouplingUMesh *targetMesh=build3DSurfSourceMesh_2();
-      targetMesh->translate(vecTrans);
-      targetMesh->rotate(pt,vec,i*deltaA);
-      MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-      MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-      CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-      sourceMesh->decrRef();
-      targetMesh->decrRef();
-    }
-  //
-  myInterpolator.setMaxDistance3DSurfIntersect(1e-11);
-  for(int i=0;i<N;i++)
-    {
-      res.clear();
-      MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_2();
-      sourceMesh->rotate(pt,vec,i*deltaA);
-      MEDCouplingUMesh *targetMesh=build3DSurfSourceMesh_2();
-      targetMesh->translate(vecTrans);
-      targetMesh->rotate(pt,vec,i*deltaA);
-      MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-      MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-      CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,sumAll(res),1e-12);
-      sourceMesh->decrRef();
-      targetMesh->decrRef();
-    }
-  //
-  res.clear();
-  myInterpolator.setMaxDistance3DSurfIntersect(-1.);//unactivate fabien lookup
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_2();
-  MEDCouplingUMesh *targetMesh=build3DSurfSourceMesh_2();
-  targetMesh->translate(vecTrans);
-  myInterpolator.setBoundingBoxAdjustment(1e-11);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper0(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper0(targetMesh);
-  myInterpolator.interpolateMeshes(sourceWrapper0,targetWrapper0,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,sumAll(res),1e-12);
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-  //
-  res.clear();
-  sourceMesh=build3DSurfSourceMesh_2();
-  targetMesh=build3DSurfSourceMesh_2();
-  targetMesh->translate(vecTrans);
-  myInterpolator.setBoundingBoxAdjustment(1e-9);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper1(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper1(targetMesh);
-  myInterpolator.interpolateMeshes(sourceWrapper1,targetWrapper1,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-  //keeping the same bbox adj == 1.e-11 but trying rotation
-  res.clear();
-  sourceMesh=build3DSurfSourceMesh_2();
-  sourceMesh->rotate(pt,vec,M_PI/4.);
-  targetMesh=build3DSurfSourceMesh_2();
-  targetMesh->translate(vecTrans);
-  targetMesh->rotate(pt,vec,M_PI/4.);
-  myInterpolator.setBoundingBoxAdjustment(1e-11);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper2(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper2(targetMesh);
-  myInterpolator.interpolateMeshes(sourceWrapper2,targetWrapper2,res,"P0P0");
-  CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P0_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P0PL_2()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  std::vector<int> cellsIds(targetMesh->getNumberOfCells());
-  for(int i=0;i<targetMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  targetMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P0PL_3()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
-  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  sourceMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P0PL_4()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
-  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
-    cellsIds[i]=i;
-  sourceMesh->convertToPolyTypes(cellsIds);
-  cellsIds.resize(targetMesh->getNumberOfCells());
-  for(int j=0;j<targetMesh->getNumberOfCells();j++)
-    cellsIds[j]=j;
-  targetMesh->convertToPolyTypes(cellsIds);
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P1_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DTargetMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSourceMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P1PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DTargetMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSourceMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP1P0_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP1P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP1P1_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_2();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_2();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  double res3D[8][28]= {{124999.999883775978, 245370.370390364464, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 203703.703634892299, 187500.000094145857, 0.0, 0.0, 4629.6296266718, 0.0, 215277.777751402784, 209722.222322299582, 0.0, 0.0, 0.0, 0.0, 104166.666590829205, 121296.296368812196, 0.0, 250000.000003472145},
-                        {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 120370.370368827047, 0.0, 0.0, 38888.888897777797, 0.0, 0.0, 45370.3703701697596, 0.0, 0.0, 45370.3703701697596, 83333.3333263888926, 0.0},
-                        {0.0, 0.0, 0.0, 97222.2222222221753, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 97222.2222222221608, 0.0, 97222.2222222222044, 41666.6666666666642, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
-                        {0.0, 277777.777787084982, 199074.074074073927, 0.0, 0.0, 0.0, 4629.62962962962774, 0.0, 321759.259254934732, 83333.3333333333139, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4629.62962667180363, 0.0, 0.0, 251388.88888319055, 194444.444454861077, 0.0, 79629.6296194135939, 250000.000003472145, 0.0, 0.0, 0.0, 0.0},
-                        {0.0, 0.0, 0.0, 0.0, 85185.1851851851534, 4629.62962962962774, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 118518.518518518511, 0.0, 41666.6666666666642, 83333.3333333333285, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
-                        {0.0, 324074.07407629228, 0.0, 0.0, 0.0, 247685.185185184964, 6481.48148148147993, 0.0, 173611.11111196311, 0.0, 164814.814814814832, 0.0, 4629.62962962962865, 208333.33333418527, 0.0, 83333.3333333333285, 203703.703697273799, 249999.999999999767, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
-                        {125000.000000000015, 423611.111111110775, 134259.259259259241, 194444.444444444351, 164814.814814814745, 164351.851851851825, 203703.703703703592, 249999.999999999825, 0.0, 0.0, 0.0, 0.0, 6481.48148148147902, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
-                        {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 118518.518518518453, 0.0, 4629.62962962962956, 83333.3333333333139, 85185.1851851851825, 41666.6666666666642, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}};
-  int i=0;
-  double sum = 0;
-  //cout.precision(18);
-  for(std::vector<std::map<int,double> >::const_iterator iter1=res.begin();iter1!=res.end();iter1++,i++)
-    {
-      //cout<< "res3D[" <<i<< "][]={";
-      for(int j=0;j<28;j++)
-        {
-          std::map<int,double>::const_iterator iter2=(*iter1).find(j);
-          if(iter2!=(*iter1).end())
-            {
-              //cout<< iter2->second<< ", ";
-              sum += iter2->second;
-              CPPUNIT_ASSERT_DOUBLES_EQUAL(res3D[i][j],(*iter2).second,1.e-5);
-            }
-          else
-            {
-              //cout << "0.0, ";
-              CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res3D[i][j],1e-14);
-            }
-        }
-      //cout << "}" << endl;
-    }
-  //cout << "Sum = " << sum << endl;
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000,sum,1.e-5);
-  //clean-up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP1P1PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_2();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_2();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(20.,res[0][24],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[1][26],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][21],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(24.,res[3][23],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][14],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(24.,res[5][17],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(24.,res[6][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(97.,sumAll(res),1e-12);
-  //clean-up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0P0Empty()
-{
-  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
-  sourceMesh->setMeshDimension(2);
-  sourceMesh->allocateCells(0);
-  sourceMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(0,0);
-  sourceMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(0);
-  targetMesh->finishInsertingCells();
-  myCoords=DataArrayDouble::New();
-  myCoords->alloc(0,2);
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::testInterpolationCC()
-{
-  double arr1[3] = { 0/2., 1/2., 2/2. };
-  double arr2[4] = { 0/3, 1/3., 2/3., 3/3. };
-  MEDCouplingCMesh* mesh[2];
-  for ( int i = 0; i < 2; ++i )
-    {
-      const double* arr = i ? arr1 : arr2;
-      const int nb_coord = i ? 3 : 4;
-      DataArrayDouble* coords = DataArrayDouble::New();
-      coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, nb_coord, 1 );
-
-      mesh[i] = MEDCouplingCMesh::New();
-      mesh[i]->setCoords( coords, coords, coords );
-      coords->decrRef();
-    }
-  MEDCouplingNormalizedCartesianMesh<3> targetWrapper(mesh[1]);
-  MEDCouplingNormalizedCartesianMesh<3> sourceWrapper(mesh[0]);
-  CPPUNIT_ASSERT_EQUAL( 27,int( sourceWrapper.getNumberOfElements()));
-  CPPUNIT_ASSERT_EQUAL( 3, int( sourceWrapper.nbCellsAlongAxis(0)));
-  CPPUNIT_ASSERT_EQUAL( 3, int( sourceWrapper.nbCellsAlongAxis(1)));
-  CPPUNIT_ASSERT_EQUAL( 3, int( sourceWrapper.nbCellsAlongAxis(2)));
-  CPPUNIT_ASSERT_THROW( sourceWrapper.nbCellsAlongAxis(3), INTERP_KERNEL::Exception);
-
-  INTERP_KERNEL::InterpolationCC myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-
-  CPPUNIT_ASSERT_EQUAL(8,int( res.size()));
-  CPPUNIT_ASSERT_EQUAL(8,int( res[0].size()));
-  const double precis = 1e-7;
-  set<double> vals;
-  double sum = 0;
-  for ( int i = 0; i < (int)res.size(); ++i )
-    for ( map<int,double>::iterator s_v = res[i].begin(); s_v != res[i].end(); ++s_v)
-      {
-        sum += s_v->second;
-        double vvv;
-#ifdef WNT
-        double vv = s_v->second / precis;
-        if(vv>=0.0)
-          {
-            vvv = floor(vv+0.5);
-          }
-        else
-          {
-            vvv = ceil(vv-0.5);
-          }
-#else
-        vvv = round( s_v->second / precis );
-#endif
-        vals.insert( precis * vvv );
-      }
-  //cout << "tgt: " << i << " src: " << s_v->first << " - w: " << s_v->second << endl;
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, sum, precis );
-
-  set<double>::iterator v = vals.begin();
-  CPPUNIT_ASSERT_EQUAL( 4, int( vals.size()) );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00462963, *v++, precis );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00925926, *v++, precis );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.01851850, *v++, precis );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703700, *v++, precis );
-
-  mesh[0]->decrRef();
-  mesh[1]->decrRef();
-}
-
-void MEDCouplingBasicsTest::testInterpolationCU1D()
-{
-  MEDCouplingCMesh* meshC = MEDCouplingCMesh::New();
-  DataArrayDouble* coords = DataArrayDouble::New();
-  double arr[4] = { -1/3., 1/3., 2/3., 4/3. };
-  coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, 4, 1 );
-  meshC->setCoords( coords );
-  coords->decrRef();
-
-  MEDCouplingUMesh * meshU = buildCU1DMesh_U();
-
-  MEDCouplingNormalizedCartesianMesh<1>      sourceWrapper(meshC);
-  MEDCouplingNormalizedUnstructuredMesh<1,1> targetWrapper(meshU);
-  INTERP_KERNEL::InterpolationCU myInterpolator;
-  vector<map<int,double> > res;
-  const double precis = 1e-13;
-  myInterpolator.setPrecision(precis);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-
-//   cout.precision(18);
-//   for ( int i = 0; i < (int)res.size(); ++i )
-//     for ( map<int,double>::iterator s_v = res[i].begin(); s_v != res[i].end(); ++s_v)
-//     {
-//       cout << "CPPUNIT_ASSERT_DOUBLES_EQUAL( "<<s_v->second<<" ,res["<<i<<"]["<<s_v->first<<"],precis);"<<endl;
-//     }
-
-  double sum = sumAll(res);
-  CPPUNIT_ASSERT_EQUAL(3,int( res.size()));
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, sum, precis );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[1][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.33333333333333 ,res[1][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.08333333333333 ,res[1][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.25000000000000 ,res[2][2],precis);
-
-  meshC->decrRef();
-  meshU->decrRef();
-}
-
-void MEDCouplingBasicsTest::testInterpolationCU2D()
-{
-  MEDCouplingCMesh* meshC = MEDCouplingCMesh::New();
-  DataArrayDouble* coords = DataArrayDouble::New();
-  double arr[4] = { -1/3., 1/3., 2/3., 4/3. };
-  coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, 4, 1 );
-  meshC->setCoords( coords, coords );
-  coords->decrRef();
-
-  MEDCouplingUMesh * meshU = buildCU2DMesh_U();
-
-  MEDCouplingNormalizedCartesianMesh<2>      sourceWrapper(meshC);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(meshU);
-  INTERP_KERNEL::InterpolationCU myInterpolator;
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-
-  const double precis = 1e-7;
-  double sum = sumAll(res);
-  CPPUNIT_ASSERT_EQUAL(5,int( res.size()));
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, sum, precis );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.1111111 ,res[0][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[0][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[0][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[0][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[1][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[1][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.1111111 ,res[1][6],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[1][7],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[2][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[2][5],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[2][7],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.1111111 ,res[2][8],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0416667 ,res[3][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0138889 ,res[3][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[3][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0416667 ,res[3][5],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0138889 ,res[4][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0972222 ,res[4][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0138889 ,res[4][5],precis);
-
-  vector<map<int,double> > resRev;
-  myInterpolator.interpolateMeshesRev(targetWrapper,sourceWrapper,resRev,"P0P0");
-
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][0] ,resRev[0][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][1] ,resRev[1][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][1] ,resRev[1][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[4][1] ,resRev[1][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][2] ,resRev[2][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[4][2] ,resRev[2][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][3] ,resRev[3][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][3] ,resRev[3][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][4] ,resRev[4][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][4] ,resRev[4][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][4] ,resRev[4][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][4] ,resRev[4][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][5] ,resRev[5][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][5] ,resRev[5][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[4][5] ,resRev[5][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][6] ,resRev[6][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][7] ,resRev[7][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][7] ,resRev[7][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][8] ,resRev[8][2],precis);
-
-  meshC->decrRef();
-  meshU->decrRef();
-}
-
-void MEDCouplingBasicsTest::testInterpolationCU3D()
-{
-  MEDCouplingCMesh* meshC = MEDCouplingCMesh::New();
-  DataArrayDouble* coords = DataArrayDouble::New();
-  double arr[4] = { -1/3., 1/3., 2/3., 4/3. };
-  coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, 4, 1 );
-  meshC->setCoords( coords, coords, coords );
-  coords->decrRef();
-
-  MEDCouplingUMesh * meshU = buildCU3DMesh_U();
-
-  MEDCouplingNormalizedCartesianMesh<3>      sourceWrapper(meshC);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(meshU);
-  INTERP_KERNEL::InterpolationCU myInterpolator;
-  vector<map<int,double> > res;
-  const double precis = 1e-13;
-  myInterpolator.setPrecision(precis);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
-
-  double sum = sumAll(res);
-  CPPUNIT_ASSERT_EQUAL(8,int( res.size()));
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, sum, precis );
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02700000000000 ,res[0][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00299999999999 ,res[1][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[1][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03000000000000 ,res[1][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00300000000000 ,res[2][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[2][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[2][6],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00033333333333 ,res[3][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][5],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][6],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][7],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][8],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00299999999999 ,res[4][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[4][9],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03000000000000 ,res[4][18],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00033333333333 ,res[5][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][9],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][10],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][11],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][18],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][19],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][20],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00033333333333 ,res[6][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][6],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][9],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][12],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][15],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][18],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][21],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][24],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.7037037037e-05 ,res[7][0],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][1],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][2],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][3],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][4],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][5],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][6],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][7],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][8],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][9],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][10],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][11],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][12],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][13],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][14],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][15],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][16],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][17],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][18],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][19],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][20],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][21],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][22],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][23],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][24],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][25],precis);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][26],precis);
-
-
-  meshC->decrRef();
-  meshU->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP0IntegralUniform()
-{
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  CPPUNIT_ASSERT_EQUAL(5,myInterpolator.toIntegralUniform(targetWrapper,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-  res.clear();
-  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-  res.clear();
-  targetMesh->decrRef();
-  //
-  targetMesh=build2DTargetMeshPerm_1();
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper2(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator2;
-  CPPUNIT_ASSERT(myInterpolator2.getMeasureAbsStatus());
-  CPPUNIT_ASSERT_EQUAL(5,myInterpolator2.toIntegralUniform(targetWrapper2,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-  res.clear();
-  myInterpolator2.setMeasureAbsStatus(false);
-  CPPUNIT_ASSERT(!myInterpolator2.getMeasureAbsStatus());
-  CPPUNIT_ASSERT_EQUAL(5,myInterpolator2.toIntegralUniform(targetWrapper2,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.125,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.75,sumAll(res),1e-12);
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP0IntegralUniform()
-{
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  vector<map<int,double> > res;
-  CPPUNIT_ASSERT_EQUAL(5,myInterpolator.toIntegralUniform(targetWrapper,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
-  res.clear();
-  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[4][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP0IntegralUniform()
-{
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  vector<map<int,double> > res;
-  CPPUNIT_ASSERT_EQUAL(8,myInterpolator.toIntegralUniform(targetWrapper,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000.,res[0][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[0][1],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[0][2],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[0][3],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[0][4],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[0][5],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[0][6],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(3375000.,res[0][7],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
-  res.clear();
-  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P0"));
-  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000.,res[0][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[1][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[2][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[3][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[4][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[5][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[6][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(3375000.,res[7][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
-  res.clear();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1IntegralUniform()
-{
-  MEDCouplingUMesh *targetMesh=build2DSourceMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  vector<map<int,double> > res;
-  CPPUNIT_ASSERT_EQUAL(4,myInterpolator.toIntegralUniform(targetWrapper,res,"P1"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[0][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[0][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[0][3],1e-12);
-  res.clear();
-  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P1"));
-  CPPUNIT_ASSERT_EQUAL(4,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[0][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[1][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[2][0],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[3][0],1e-12);
-  res.clear();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DInterpP1IntegralUniform()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(sourceMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<map<int,double> > res;
-  CPPUNIT_ASSERT_EQUAL(9,myInterpolator.toIntegralUniform(targetWrapper,res,"P1"));
-  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][1],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[0][2],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][3],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][4],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[0][5],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][6],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][7],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2000000.,res[0][8],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
-  res.clear();
-  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P1"));
-  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[1][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[2][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[3][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[4][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[5][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[6][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[7][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(2000000.,res[8][0],1e-6);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
-  sourceMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test2DInterpP1P0Bary_1()
-{
-  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation2D myInterpolator;
-  myInterpolator.setP1P0BaryMethod(true);
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666669,res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[0][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[0][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[0][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[1][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[1][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[2][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[2][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[2][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[3][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[3][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[3][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[4][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[4][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[4][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[4][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DSurfInterpP1P0Bary_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
-  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
-  myInterpolator.setP1P0BaryMethod(true);
-  vector<map<int,double> > res;
-  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
-  for(int i=0;i<2;i++)
-    {
-      myInterpolator.setPrecision(1e-12);
-      myInterpolator.setIntersectionType(types[i]);
-      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666669*sqrt(2.),res[0][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[0][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[0][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[0][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[1][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[1][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[1][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[2][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[2][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[2][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[3][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[3][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[3][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[4][0],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[4][1],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[4][2],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[4][3],1e-12);
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
-      res.clear();
-    }
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-#include <iomanip>
-void MEDCouplingBasicsTest::test3DInterpP1P0Bary_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_2();
-  MEDCouplingUMesh *targetMesh=build3DTargetMesh_2();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  myInterpolator.setP1P0BaryMethod(true);
-  vector<map<int,double> > res;
-  myInterpolator.setPrecision(1e-12);
-  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
-  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
-
-  double res3D[5][28]={{104166.66658918398, 885416.666685817763, 135416.666666666541, 36458.3333333335031, 31249.9999999999018, 145833.333333333256, 41666.6666666667516, 124999.999999999971, 177083.333326388849, 0.0, 31249.9999999999636, 0.0, 41666.666620792399, 159722.22229009436, 0.0, 0.0, 41666.6666631944681, 125000, 43499.2283723790752, 164351.851924000395, 36458.3333372396883, 0.0, 0.0, 125000.000001736029, 34722.2221800900952, 13599.5370788455439, 0.0, 167438.27159690368},
-                       {0.0, 41666.6664479170649, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 125000.000161457952, 0.0, 0.0, 0.0, 0.0, 111111.11112005508, 0.0, 0.0, 291666.666656249959, 41666.6666666666933, 6944.4444415638809, 270833.333520485845, 0.0, 0.0, 124999.999989583303, 41666.6665798612958, 20833.3333186342825, 145833.333354303701, 83333.3333263888198, 27777.7777501651799},
-                       {0.0, 93750.0000000000728, 125000.000000000058, 0.0, 0.0, 72916.666666666526, 291666.666666666628, 41666.6666666667152, 197916.66666666657, 166666.666666666802, 218750.000000000116, 41666.6666666665697, 0.0, 0.0, 0.0, 0.0, 0.0, 41666.6666666666861, 0.0, 0.0, 0.0, 0.0, 0.0, 41666.6666666666642, 0.0, 0.0, 0.0, 0.0},
-                       {72916.6666484848247, 82465.2777799315081, 0.0, 0.0, 217447.916666666686, 197916.666666666802, 0.0, 41666.6666666666715, 0.0, 0.0, 0.0, 0.0, 290364.583310396119, 125000.000018181803, 41666.6666666666351, 166666.666666666599, 0.0, 41666.6666666665551, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 27777.7777734705051, 0.0, 0.0, 27777.7778028684952},
-                       {72916.6666461071727, 172309.027782170655, 70312.5000000000437, 253906.250000000029, 0.0, 0.0, 0.0, 41666.666666666657, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 258246.527775988478, 71180.5555571812583, 253906.250006944378, 41666.6666666666861, 0.0, 41666.6666649305407, 20833.3333186342534, 6944.44445267237552, 0.0, 27777.7777953707919}};
-
-  double sum = 0;
-  int i=0;
-  for(std::vector<std::map<int,double> >::const_iterator iter1=res.begin();iter1!=res.end();iter1++,i++)
-    {
-      for(int j=0;j<28;j++)
-        {
-          std::map<int,double>::const_iterator iter2=(*iter1).find(j);
-          if(iter2!=(*iter1).end())
-            {
-              sum += iter2->second;
-              CPPUNIT_ASSERT_DOUBLES_EQUAL(res3D[i][j],(*iter2).second,1.e-5);
-            }
-          else
-            {
-              CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res3D[i][j],1e-14);
-            }
-        }
-    }
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000,sum,1.e-5);
-  //clean up
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-void MEDCouplingBasicsTest::test3DTo1DInterpP0P0PL_1()
-{
-  MEDCouplingUMesh *sourceMesh=build3DTargetMesh_1();
-  MEDCouplingUMesh *targetMesh=build1DTargetMesh_1();
-  //
-  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
-  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
-  INTERP_KERNEL::Interpolation3D myInterpolator;
-  vector<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[1][4],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][1],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][5],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][2],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][6],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][3],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][7],1e-12);
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(8.,sumAll(res),1e-12);
-  //
-  sourceMesh->decrRef();
-  targetMesh->decrRef();
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSourceMesh_2()
-{
-  double sourceCoords[84]={100.0, 100.0, 0.0, 100.0, 100.0, 100.0, 100.0, 0.0, 100.0, 100.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 100.0, 100.0, 0.0,
-                           0.0, 100.0, 0.0, 0.0, 0.0, 100.0, 100.0, 200.0, 100.0, 0.0, 200.0, 0.0, 100.0, 200.0, 0.0, 0.0, 200.0, 100.0, 200.0,
-                           0.0, 100.0, 200.0, 100.0, 0.0, 200.0, 0.0, 0.0, 200.0, 100.0, 100.0, 200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 100.0,
-                           0.0, 200.0, 100.00000000833332, 100.00000000833332, 200.0, 0.0, 100.0, 200.0, 0.0, 0.0, 200.0, 100.0, 200.0, 200.0,
-                           0.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 100.0, 200.0, 200.0, 200.0, 149.999999970343, 149.9999999874621, 49.999999881628682};
-  
-  
-  int sourceConn[212]={25, 27, 13, 19, 18, 3, 20, 21, 5, 10, 17, 1, 1, 3, 0, 7, 18, 1, 0, 27, 12, 27, 13, 24, 25, 19, 16, 26, 1, 2, 6, 8, 15, 13, 
-                       12, 5, 24, 13, 25, 27, 10, 11, 9, 6, 19, 8, 23, 1, 22, 8, 23, 19, 16, 13, 17, 1, 6, 9, 10, 8, 13, 17, 5, 15, 5, 4, 1, 12, 18,
-                       0, 24, 27, 19, 20, 18, 1, 7, 6, 5, 1, 4, 12, 15, 14, 25, 27, 19, 18, 1, 19, 16, 13, 20, 19, 23, 1, 27, 12, 1, 0, 6, 5, 1, 10,
-                       4, 5, 1, 7, 12, 27, 1, 13, 5, 15, 4, 12, 19, 16, 26, 22, 13, 5, 17, 1, 1, 3, 7, 2, 13, 5, 1, 12, 18, 1, 3, 0, 8, 23, 2, 9, 3,
-                       1, 18, 20, 1, 27, 19, 13, 24, 25, 18, 27, 25, 16, 19, 13, 7, 1, 2, 6, 3, 1, 20, 2, 8, 16, 17, 1, 7, 4, 0, 1, 18, 19, 1, 27,
-                       27, 12, 0, 24, 9, 6, 2, 8, 1, 4, 0, 12, 19, 16, 22, 8, 8, 2, 23, 1, 1, 16, 19, 8, 20, 2, 1, 23, 10, 1, 6, 8, 10, 8, 17, 1};
-  
-  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
-  sourceMesh->setMeshDimension(3);
-  sourceMesh->allocateCells(53);
-  for(int i=0;i<53;i++)
-    sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+4*i);
-  sourceMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(28,3);
-  std::copy(sourceCoords,sourceCoords+84,myCoords->getPointer());
-  sourceMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return sourceMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DTargetMesh_2()
-{
-  double targetCoords[24]={200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 0.0, 200.0, 0.0, 200.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0};
-  int targetConn[20]={5, 6, 3, 0, 1, 3, 0, 5, 3, 6, 5, 7, 6, 4, 0, 5, 6, 3, 0, 2};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(3);
-  targetMesh->allocateCells(5);
-  for(int i=0;i<5;i++)
-    targetMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,targetConn+4*i);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(8,3);
-  std::copy(targetCoords,targetCoords+24,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build1DTargetMesh_1()
-{
-  double targetCoords[36]={
-    25.,25.,0., 25.,25.,50., 25.,25.,200., 75.,25.,0., 75.,25.,50., 75.,25.,200.,
-    25.,125.,0., 25.,125.,50., 25.,125.,200., 125.,125.,0., 125.,125.,50., 125.,125.,200.
-  };
-  int targetConn[16]={0,1, 1,2, 3,4, 4,5, 6,7, 7,8, 9,10, 10,11};
-
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New("my name of mesh 1D",1);
-  targetMesh->allocateCells(8);
-  for(int i=0;i<8;i++)
-    targetMesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,targetConn+2*i);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(12,3);
-  std::copy(targetCoords,targetCoords+36,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build2DSourceMesh_1()
-{
-  double sourceCoords[8]={-0.3,-0.3, 0.7,-0.3, -0.3,0.7, 0.7,0.7};
-  int sourceConn[6]={0,3,1,0,2,3};
-  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New("my name of mesh 2D",2);
-  sourceMesh->allocateCells(2);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn+3);
-  sourceMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(4,2);
-  std::copy(sourceCoords,sourceCoords+8,myCoords->getPointer());
-  sourceMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return sourceMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMesh_1()
-{
-  double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
-  int targetConn[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(5);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,2);
-  std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMeshPerm_1()
-{
-  double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
-  int targetConn[18]={0,3,4,1, 1,2,4, 4,5,2, 6,7,4,3, 7,8,5,4};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(5);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,2);
-  std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMesh_2()
-{
-  double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
-  int targetConn[24]={0,3,4, 0,4,1, 1,4,2, 4,5,2, 3,6,4, 6,7,4, 4,7,5, 7,8,5 };
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(8);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+3);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+6);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+9);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+12);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+15);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+18);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+21);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,2);
-  std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::buildCU1DMesh_U()
-{
-  double coords[4]={ 0.0, 0.3, 0.75, 1.0 };
-  int conn[2*3]={ 0,1, 1,2, 2,3 };
-  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
-  mesh->setMeshDimension(1);
-  mesh->allocateCells(3);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn+2);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn+4);
-  mesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(4,1);
-  std::copy(coords,coords+4,myCoords->getPointer());
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return mesh;
-}
-MEDCouplingUMesh *MEDCouplingBasicsTest::buildCU2DMesh_U()
-{
-  double coords[18]={0.0,0.0, 0.5,0.0, 1.0,0.0, 0.0,0.5, 0.5,0.5, 1.0,0.5, 0.0,1.0, 0.5,1.0, 1.0,1.0 };
-  int conn[18]={0,1,4,3, 3,4,7,6, 4,5,8,7, 1,5,4, 1,2,5 };
-  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
-  mesh->setMeshDimension(2);
-  mesh->allocateCells(5);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn+4);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn+8);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,conn+12);
-  mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,conn+15);
-  mesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,2);
-  std::copy(coords,coords+18,myCoords->getPointer());
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return mesh;
-}
-MEDCouplingUMesh *MEDCouplingBasicsTest::buildCU3DMesh_U()
-{
-  double coords[27*3]=
-    {
-//   0.0,1.0,0.0 ,0.0,0.3,0.0 ,0.0,0.3,0.3 ,0.3,0.0,0.0 ,0.3,0.3,1.0 ,1.0,0.0,1.0 ,1.0,0.0,0.3 ,0.3,0.0,0.3 ,0.3,1.0,0.3 ,0.0,0.3,1.0 ,0.3,0.0,1.0 ,0.3,0.3,0.3 ,1.0,0.3,1.0 ,1.0,0.0,0.0 ,0.0,0.0,0.0 ,1.0,0.3,0.3 ,0.3,1.0,0.0 ,1.0,1.0,0.3 ,1.0,1.0,1.0 ,0.0,1.0,1.0 ,0.3,0.3,0.0 ,0.0,1.0,0.3 ,0.0,0.0,1.0 ,0.3,1.0,1.0 ,1.0,0.3,0.0 ,0.0,0.0,0.3 ,1.0,1.0,0.0
-      0.0,0.0,0.0, 0.3,0.0,0.0, 1.0,0.0,0.0, 0.0,0.3,0.0, 0.3,0.3,0.0, 1.0,0.3,0.0, 0.0,1.0,0.0, 0.3,1.0,0.0, 1.0,1.0,0.0, 0.0,0.0,0.3, 0.3,0.0,0.3, 1.0,0.0,0.3, 0.0,0.3,0.3, 0.3,0.3,0.3, 1.0,0.3,0.3, 0.0,1.0,0.3, 0.3,1.0,0.3, 1.0,1.0,0.3, 0.0,0.0,1.0, 0.3,0.0,1.0, 1.0,0.0,1.0, 0.0,0.3,1.0, 0.3,0.3,1.0, 1.0,0.3,1.0, 0.0,1.0,1.0, 0.3,1.0,1.0, 1.0,1.0,1.0,
-    };
-  int conn[8*8]=
-    {
-//       11,15,12,4,8,17,18,23,3,13,6,7,20,24,15,11,14,3,7,25,1,20,11,2,1,20,11,2,0,16,8,21,20,24,15,11,16,26,17,8,25,7,10,22,2,11,4,9,2,11,4,9,21,8,23,19,7,6,5,10,11,15,12,4
-      0,3,4,1,9,12,13,10, 1,4,5,2,10,13,14,11, 3,6,7,4,12,15,16,13, 4,7,8,5,13,16,17,14, 9,12,13,10,18,21,22,19, 10,13,14,11,19,22,23,20, 12,15,16,13,21,24,25,22, 13,16,17,14,22,25,26,23
-    };
-  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
-  mesh->setMeshDimension(3);
-  mesh->allocateCells(8);
-  for(int i=0;i<8;i++)
-    mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+8*i);
-  mesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(27,3);
-  std::copy(coords,coords+27*3,myCoords->getPointer());
-  mesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return mesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfSourceMesh_1()
-{
-  double sourceCoords[12]={-0.3,-0.3,0.5, 0.7,-0.3,1.5, -0.3,0.7,0.5, 0.7,0.7,1.5};
-  int sourceConn[6]={0,3,1,0,2,3};
-  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
-  sourceMesh->setMeshDimension(2);
-  sourceMesh->allocateCells(2);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn+3);
-  sourceMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(4,3);
-  std::copy(sourceCoords,sourceCoords+12,myCoords->getPointer());
-  sourceMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return sourceMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfSourceMesh_2()
-{
-  double sourceCoords[12]={-0.3,-0.3,0., 0.7,-0.3,0., -0.3,0.7,0., 0.7,0.7,0.};
-  int sourceConn[6]={0,3,1,0,2,3};
-  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
-  sourceMesh->setMeshDimension(2);
-  sourceMesh->allocateCells(2);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn+3);
-  sourceMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(4,3);
-  std::copy(sourceCoords,sourceCoords+12,myCoords->getPointer());
-  sourceMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return sourceMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfTargetMesh_1()
-{
-  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
-  int targetConn[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(5);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,3);
-  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-/*!
- * Idem build3DSurfTargetMesh_1 except that cell id 2 is not correctly numbered.
- */
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfTargetMeshPerm_1()
-{
-  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
-  int targetConn[18]={0,3,4,1, 1,4,2, 4,2,5, 6,7,4,3, 7,8,5,4};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(5);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,3);
-  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfTargetMesh_2()
-{
-  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
-  int targetConn[24]={0,3,4, 0,4,1, 1,4,2, 4,5,2, 3,6,4, 6,7,4, 4,7,5, 7,8,5 };
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(8);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+3);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+6);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+9);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+12);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+15);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+18);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+21);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,3);
-  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSourceMesh_1()
-{
-  double sourceCoords[27]={ 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 0.0, 200.0, 200.0, 0.0, 200.0, 0.0, 200.0, 0.0, 200.0,
-                            200.0, 0.0, 0.0, 200.0, 200.0, 200.0, 200.0, 200.0, 0.0, 100.0, 100.0, 100.0 };
-  int sourceConn[48]={8,1,7,3, 6,0,8,2, 7,4,5,8, 6,8,4,7, 6,8,0,4, 6,8,7,3, 8,1,3,0, 4,1,5,8, 1,7,5,8, 0,3,8,2, 8,1,0,4, 3,6,8,2};
-  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
-  sourceMesh->setMeshDimension(3);
-  sourceMesh->allocateCells(12);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+4);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+8);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+12);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+16);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+20);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+24);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+28);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+32);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+36);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+40);
-  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+44);
-  sourceMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(9,3);
-  std::copy(sourceCoords,sourceCoords+27,myCoords->getPointer());
-  sourceMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return sourceMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DTargetMesh_1()
-{
-  double targetCoords[81]={ 0., 0., 0., 50., 0., 0. , 200., 0., 0.  , 0., 50., 0., 50., 50., 0. , 200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
-                            0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50., 50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. , 200., 200., 50. ,
-                            0., 0., 200., 50., 0., 200. , 200., 0., 200.  , 0., 50., 200., 50., 50., 200. , 200., 50., 200.,   0., 200., 200., 50., 200., 200. , 200., 200., 200. };
-  int targetConn[64]={0,1,4,3,9,10,13,12, 1,2,5,4,10,11,14,13, 3,4,7,6,12,13,16,15, 4,5,8,7,13,14,17,16,
-                      9,10,13,12,18,19,22,21, 10,11,14,13,19,20,23,22, 12,13,16,15,21,22,25,24, 13,14,17,16,22,23,26,25};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(3);
-  targetMesh->allocateCells(12);
-  for(int i=0;i<8;i++)
-    targetMesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,targetConn+8*i);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(27,3);
-  std::copy(targetCoords,targetCoords+81,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMeshMergeNode_1()
-{
-  double targetCoords[36]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,-0.3, 0.2,-0.3, 0.2,-0.3, 0.2,0.2, 0.2,0.2, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7, 0.2,0.7 };
-  int targetConn[18]={0,9,7,5, 4,6,2, 10,11,8, 9,14,15,7, 17,16,13,6};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(5);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(18,2);
-  std::copy(targetCoords,targetCoords+36,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DTargetMeshMergeNode_1()
-{
-  double targetCoords[93]={ 0., 0., 0., 50., 0., 0. , 200., 0., 0.  , 0., 50., 0., 50., 50., 0. , 200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
-                            0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50., 50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. , 200., 200., 50. ,
-                            0., 0., 200., 50., 0., 200. , 200., 0., 200.  , 0., 50., 200., 50., 50., 200. , 200., 50., 200.,   0., 200., 200., 50., 200., 200. , 200., 200., 200., 50.,0.,0., 50.,0.,0., 50.,0.,0.,  200., 50., 200.};
-  int targetConn[64]={0,29,4,3,9,10,13,12, 28,2,5,4,10,11,14,13, 3,4,7,6,12,13,16,15, 4,5,8,7,13,14,17,16,
-                      9,10,13,12,18,19,22,21, 10,11,14,13,19,20,23,22, 12,13,16,15,21,22,25,24, 13,14,17,16,22,30,26,25};
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setMeshDimension(3);
-  targetMesh->allocateCells(12);
-  for(int i=0;i<8;i++)
-    targetMesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,targetConn+8*i);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(31,3);
-  std::copy(targetCoords,targetCoords+93,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build3DExtrudedUMesh_1(MEDCouplingUMesh *&mesh2D)
-{
-  double coords[180]={
-    0.,0.,0., 1.,1.,0., 1.,1.25,0., 0.,1.,0., 1.,1.5,0., 2.,0.,0., 2.,1.,0., 1.,2.,0., 0.,2.,0., 3.,1.,0.,
-    3.,2.,0., 0.,1.,0., 1.,3.,0., 2.,2.,0., 2.,3.,0.,
-    0.,0.,1., 1.,1.,1., 1.,1.25,1., 0.,1.,1., 1.,1.5,1., 2.,0.,1., 2.,1.,1., 1.,2.,1., 0.,2.,1., 3.,1.,1.,
-    3.,2.,1., 0.,1.,1., 1.,3.,1., 2.,2.,1., 2.,3.,1.,
-    0.,0.,2., 1.,1.,2., 1.,1.25,2., 0.,1.,2., 1.,1.5,2., 2.,0.,2., 2.,1.,2., 1.,2.,2., 0.,2.,2., 3.,1.,2.,
-    3.,2.,2., 0.,1.,2., 1.,3.,2., 2.,2.,2., 2.,3.,2.,
-    0.,0.,3., 1.,1.,3., 1.,1.25,3., 0.,1.,3., 1.,1.5,3., 2.,0.,3., 2.,1.,3., 1.,2.,3., 0.,2.,3., 3.,1.,3.,
-    3.,2.,3., 0.,1.,3., 1.,3.,3., 2.,2.,3., 2.,3.,3.};
-
-  int conn[354]={
-    // 0
-    0,11,1,3,15,26,16,18,   1,2,4,7,13,6,-1,1,16,21,6,-1,6,21,28,13,-1,13,7,22,28,-1,7,4,19,22,-1,4,2,17,19,-1,2,1,16,17,-1,16,21,28,22,19,17,
-    1,6,5,3,16,21,20,18,   13,10,9,6,28,25,24,21,
-    11,8,7,4,2,1,-1,11,26,16,1,-1,1,16,17,2,-1,2,17,19,4,-1,4,19,22,7,-1,7,8,23,22,-1,8,11,26,23,-1,26,16,17,19,22,23,
-    7,12,14,13,22,27,29,28,
-    // 1
-    15,26,16,18,30,41,31,33,   16,17,19,22,28,21,-1,16,31,36,21,-1,21,36,43,28,-1,28,22,37,43,-1,22,19,34,37,-1,19,17,32,34,-1,17,16,31,32,-1,31,36,43,37,34,32,
-    16,21,20,18,31,36,35,33,   28,25,24,21,43,40,39,36,
-    26,23,22,19,17,16,-1,26,41,31,16,-1,16,31,32,17,-1,17,32,34,19,-1,19,34,37,22,-1,22,23,38,37,-1,23,26,41,38,-1,41,31,32,34,37,38,
-    22,27,29,28,37,42,44,43,
-    // 2
-    30,41,31,33,45,56,46,48,  31,32,34,37,43,36,-1,31,46,51,36,-1,36,51,58,43,-1,43,37,52,58,-1,37,34,49,52,-1,34,32,47,49,-1,32,31,46,47,-1,46,51,58,52,49,47,
-    31,36,35,33,46,51,50,48,  43,40,39,36,58,55,54,51,
-    41,38,37,34,32,31,-1,41,56,46,31,-1,31,46,47,32,-1,32,47,49,34,-1,34,49,52,37,-1,37,38,53,52,-1,38,41,56,53,-1,56,46,47,49,52,53,
-    37,42,44,43,52,57,59,58
-  };
-  int conn2[28]={7,12,14,13, 11,8,7,4,2,1, 13,10,9,6, 1,6,5,3, 1,2,4,7,13,6, 0,11,1,3};
-  //
-  MEDCouplingUMesh *ret=MEDCouplingUMesh::New();
-  ret->setMeshDimension(3);
-  ret->allocateCells(18);
-  //
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn);
-  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+8);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+51);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+59);
-  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+67);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+110);
-  //
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+118);
-  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+126);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+169);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+177);
-  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+185);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+228);
-  //
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+236);
-  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+244);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+287);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+295);
-  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+303);
-  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+346);
-  //
-  ret->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(60,3);
-  std::copy(coords,coords+180,myCoords->getPointer());
-  ret->setCoords(myCoords);
-  //
-  mesh2D=MEDCouplingUMesh::New();
-  mesh2D->setMeshDimension(2);
-  mesh2D->allocateCells(6);
-  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2);
-  mesh2D->insertNextCell(INTERP_KERNEL::NORM_POLYGON,6,conn2+4);
-  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2+10);
-  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2+14);
-  mesh2D->insertNextCell(INTERP_KERNEL::NORM_POLYGON,6,conn2+18);
-  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2+24);
-  mesh2D->setCoords(myCoords);
-  myCoords->decrRef();
-  return ret;
-}
-
-MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMeshMerged_1()
-{
-  double targetCoords[26]={
-    -0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7,
-    0.7,-0.3, 1.7,-0.3, 0.7,0.7, 1.7,0.7
-  };
-  int targetConn[24]={
-    0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4,
-    9,12,10,9,11,12
-  };
-  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
-  targetMesh->setName("merge");
-  targetMesh->setMeshDimension(2);
-  targetMesh->allocateCells(10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+18);
-  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+21);
-  targetMesh->finishInsertingCells();
-  DataArrayDouble *myCoords=DataArrayDouble::New();
-  myCoords->alloc(13,2);
-  std::copy(targetCoords,targetCoords+26,myCoords->getPointer());
-  targetMesh->setCoords(myCoords);
-  myCoords->decrRef();
-  return targetMesh;
-}
-
-double MEDCouplingBasicsTest::sumAll(const std::vector< std::map<int,double> >& matrix)
-{
-  double ret=0.;
-  for(std::vector< std::map<int,double> >::const_iterator iter=matrix.begin();iter!=matrix.end();iter++)
-    for(std::map<int,double>::const_iterator iter2=(*iter).begin();iter2!=(*iter).end();iter2++)
-      ret+=(*iter2).second;
-  return ret;
-}
index d1a50bfea3a355135a42a4c3b7b4390444676343..2cd2040bdf07fb02c3de626b543cdfb3ceb860da 100644 (file)
@@ -59,11 +59,14 @@ namespace ParaMEDMEM
     CPPUNIT_TEST( testApplyFunc );
     CPPUNIT_TEST( testApplyFunc2 );
     CPPUNIT_TEST( testOperationsOnFields );
+    CPPUNIT_TEST( testOperationsOnFields2 );
     CPPUNIT_TEST( testMergeNodesOnField );
     CPPUNIT_TEST( testCheckConsecutiveCellTypes );
     CPPUNIT_TEST( testBuildOrthogonalField );
     CPPUNIT_TEST( testGetElementsContainingPoint );
     CPPUNIT_TEST( testGetValueOn1 );
+    CPPUNIT_TEST( testCMesh0 );
+    CPPUNIT_TEST( testScale );
     CPPUNIT_TEST( test2DInterpP0P0_1 );
     CPPUNIT_TEST( test2DInterpP0P0PL_1 );
     CPPUNIT_TEST( test2DInterpP0P0PL_2 );
@@ -142,11 +145,14 @@ namespace ParaMEDMEM
     void testApplyFunc();
     void testApplyFunc2();
     void testOperationsOnFields();
+    void testOperationsOnFields2();
     void testMergeNodesOnField();
     void testCheckConsecutiveCellTypes();
     void testBuildOrthogonalField();
     void testGetElementsContainingPoint();
     void testGetValueOn1();
+    void testCMesh0();
+    void testScale();
     void test2DInterpP0P0_1();
     void test2DInterpP0P0PL_1();
     void test2DInterpP0P0PL_2();
diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx
new file mode 100644 (file)
index 0000000..2e9f50d
--- /dev/null
@@ -0,0 +1,554 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "MEDCouplingBasicsTest.hxx"
+#include "MEDCouplingUMesh.hxx"
+#include "MEDCouplingExtrudedMesh.hxx"
+#include "MEDCouplingFieldDouble.hxx"
+#include "MEDCouplingMemArray.hxx"
+
+using namespace std;
+using namespace ParaMEDMEM;
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSourceMesh_2()
+{
+  double sourceCoords[84]={100.0, 100.0, 0.0, 100.0, 100.0, 100.0, 100.0, 0.0, 100.0, 100.0, 0.0, 0.0, 0.0, 100.0, 0.0, 0.0, 100.0, 100.0, 0.0,
+                           0.0, 100.0, 0.0, 0.0, 0.0, 100.0, 100.0, 200.0, 100.0, 0.0, 200.0, 0.0, 100.0, 200.0, 0.0, 0.0, 200.0, 100.0, 200.0,
+                           0.0, 100.0, 200.0, 100.0, 0.0, 200.0, 0.0, 0.0, 200.0, 100.0, 100.0, 200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 100.0,
+                           0.0, 200.0, 100.00000000833332, 100.00000000833332, 200.0, 0.0, 100.0, 200.0, 0.0, 0.0, 200.0, 100.0, 200.0, 200.0,
+                           0.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 100.0, 200.0, 200.0, 200.0, 149.999999970343, 149.9999999874621, 49.999999881628682};
+  
+  
+  int sourceConn[212]={25, 27, 13, 19, 18, 3, 20, 21, 5, 10, 17, 1, 1, 3, 0, 7, 18, 1, 0, 27, 12, 27, 13, 24, 25, 19, 16, 26, 1, 2, 6, 8, 15, 13, 
+                       12, 5, 24, 13, 25, 27, 10, 11, 9, 6, 19, 8, 23, 1, 22, 8, 23, 19, 16, 13, 17, 1, 6, 9, 10, 8, 13, 17, 5, 15, 5, 4, 1, 12, 18,
+                       0, 24, 27, 19, 20, 18, 1, 7, 6, 5, 1, 4, 12, 15, 14, 25, 27, 19, 18, 1, 19, 16, 13, 20, 19, 23, 1, 27, 12, 1, 0, 6, 5, 1, 10,
+                       4, 5, 1, 7, 12, 27, 1, 13, 5, 15, 4, 12, 19, 16, 26, 22, 13, 5, 17, 1, 1, 3, 7, 2, 13, 5, 1, 12, 18, 1, 3, 0, 8, 23, 2, 9, 3,
+                       1, 18, 20, 1, 27, 19, 13, 24, 25, 18, 27, 25, 16, 19, 13, 7, 1, 2, 6, 3, 1, 20, 2, 8, 16, 17, 1, 7, 4, 0, 1, 18, 19, 1, 27,
+                       27, 12, 0, 24, 9, 6, 2, 8, 1, 4, 0, 12, 19, 16, 22, 8, 8, 2, 23, 1, 1, 16, 19, 8, 20, 2, 1, 23, 10, 1, 6, 8, 10, 8, 17, 1};
+  
+  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
+  sourceMesh->setMeshDimension(3);
+  sourceMesh->allocateCells(53);
+  for(int i=0;i<53;i++)
+    sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+4*i);
+  sourceMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(28,3);
+  std::copy(sourceCoords,sourceCoords+84,myCoords->getPointer());
+  sourceMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return sourceMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DTargetMesh_2()
+{
+  double targetCoords[24]={200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 0.0, 200.0, 0.0, 200.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0};
+  int targetConn[20]={5, 6, 3, 0, 1, 3, 0, 5, 3, 6, 5, 7, 6, 4, 0, 5, 6, 3, 0, 2};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(3);
+  targetMesh->allocateCells(5);
+  for(int i=0;i<5;i++)
+    targetMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,targetConn+4*i);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(8,3);
+  std::copy(targetCoords,targetCoords+24,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build1DTargetMesh_1()
+{
+  double targetCoords[36]={
+    25.,25.,0., 25.,25.,50., 25.,25.,200., 75.,25.,0., 75.,25.,50., 75.,25.,200.,
+    25.,125.,0., 25.,125.,50., 25.,125.,200., 125.,125.,0., 125.,125.,50., 125.,125.,200.
+  };
+  int targetConn[16]={0,1, 1,2, 3,4, 4,5, 6,7, 7,8, 9,10, 10,11};
+
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New("my name of mesh 1D",1);
+  targetMesh->allocateCells(8);
+  for(int i=0;i<8;i++)
+    targetMesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,targetConn+2*i);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(12,3);
+  std::copy(targetCoords,targetCoords+36,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build2DSourceMesh_1()
+{
+  double sourceCoords[8]={-0.3,-0.3, 0.7,-0.3, -0.3,0.7, 0.7,0.7};
+  int sourceConn[6]={0,3,1,0,2,3};
+  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New("my name of mesh 2D",2);
+  sourceMesh->allocateCells(2);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn+3);
+  sourceMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(4,2);
+  std::copy(sourceCoords,sourceCoords+8,myCoords->getPointer());
+  sourceMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return sourceMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMesh_1()
+{
+  double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
+  int targetConn[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(5);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,2);
+  std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMeshPerm_1()
+{
+  double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
+  int targetConn[18]={0,3,4,1, 1,2,4, 4,5,2, 6,7,4,3, 7,8,5,4};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(5);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,2);
+  std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMesh_2()
+{
+  double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
+  int targetConn[24]={0,3,4, 0,4,1, 1,4,2, 4,5,2, 3,6,4, 6,7,4, 4,7,5, 7,8,5 };
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(8);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+3);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+6);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+9);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+12);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+15);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+18);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+21);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,2);
+  std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::buildCU1DMesh_U()
+{
+  double coords[4]={ 0.0, 0.3, 0.75, 1.0 };
+  int conn[2*3]={ 0,1, 1,2, 2,3 };
+  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
+  mesh->setMeshDimension(1);
+  mesh->allocateCells(3);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn+2);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn+4);
+  mesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(4,1);
+  std::copy(coords,coords+4,myCoords->getPointer());
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return mesh;
+}
+MEDCouplingUMesh *MEDCouplingBasicsTest::buildCU2DMesh_U()
+{
+  double coords[18]={0.0,0.0, 0.5,0.0, 1.0,0.0, 0.0,0.5, 0.5,0.5, 1.0,0.5, 0.0,1.0, 0.5,1.0, 1.0,1.0 };
+  int conn[18]={0,1,4,3, 3,4,7,6, 4,5,8,7, 1,5,4, 1,2,5 };
+  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
+  mesh->setMeshDimension(2);
+  mesh->allocateCells(5);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn+4);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn+8);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,conn+12);
+  mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,conn+15);
+  mesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,2);
+  std::copy(coords,coords+18,myCoords->getPointer());
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return mesh;
+}
+MEDCouplingUMesh *MEDCouplingBasicsTest::buildCU3DMesh_U()
+{
+  double coords[27*3]=
+    {
+//   0.0,1.0,0.0 ,0.0,0.3,0.0 ,0.0,0.3,0.3 ,0.3,0.0,0.0 ,0.3,0.3,1.0 ,1.0,0.0,1.0 ,1.0,0.0,0.3 ,0.3,0.0,0.3 ,0.3,1.0,0.3 ,0.0,0.3,1.0 ,0.3,0.0,1.0 ,0.3,0.3,0.3 ,1.0,0.3,1.0 ,1.0,0.0,0.0 ,0.0,0.0,0.0 ,1.0,0.3,0.3 ,0.3,1.0,0.0 ,1.0,1.0,0.3 ,1.0,1.0,1.0 ,0.0,1.0,1.0 ,0.3,0.3,0.0 ,0.0,1.0,0.3 ,0.0,0.0,1.0 ,0.3,1.0,1.0 ,1.0,0.3,0.0 ,0.0,0.0,0.3 ,1.0,1.0,0.0
+      0.0,0.0,0.0, 0.3,0.0,0.0, 1.0,0.0,0.0, 0.0,0.3,0.0, 0.3,0.3,0.0, 1.0,0.3,0.0, 0.0,1.0,0.0, 0.3,1.0,0.0, 1.0,1.0,0.0, 0.0,0.0,0.3, 0.3,0.0,0.3, 1.0,0.0,0.3, 0.0,0.3,0.3, 0.3,0.3,0.3, 1.0,0.3,0.3, 0.0,1.0,0.3, 0.3,1.0,0.3, 1.0,1.0,0.3, 0.0,0.0,1.0, 0.3,0.0,1.0, 1.0,0.0,1.0, 0.0,0.3,1.0, 0.3,0.3,1.0, 1.0,0.3,1.0, 0.0,1.0,1.0, 0.3,1.0,1.0, 1.0,1.0,1.0,
+    };
+  int conn[8*8]=
+    {
+//       11,15,12,4,8,17,18,23,3,13,6,7,20,24,15,11,14,3,7,25,1,20,11,2,1,20,11,2,0,16,8,21,20,24,15,11,16,26,17,8,25,7,10,22,2,11,4,9,2,11,4,9,21,8,23,19,7,6,5,10,11,15,12,4
+      0,3,4,1,9,12,13,10, 1,4,5,2,10,13,14,11, 3,6,7,4,12,15,16,13, 4,7,8,5,13,16,17,14, 9,12,13,10,18,21,22,19, 10,13,14,11,19,22,23,20, 12,15,16,13,21,24,25,22, 13,16,17,14,22,25,26,23
+    };
+  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
+  mesh->setMeshDimension(3);
+  mesh->allocateCells(8);
+  for(int i=0;i<8;i++)
+    mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+8*i);
+  mesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(27,3);
+  std::copy(coords,coords+27*3,myCoords->getPointer());
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return mesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfSourceMesh_1()
+{
+  double sourceCoords[12]={-0.3,-0.3,0.5, 0.7,-0.3,1.5, -0.3,0.7,0.5, 0.7,0.7,1.5};
+  int sourceConn[6]={0,3,1,0,2,3};
+  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
+  sourceMesh->setMeshDimension(2);
+  sourceMesh->allocateCells(2);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn+3);
+  sourceMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(4,3);
+  std::copy(sourceCoords,sourceCoords+12,myCoords->getPointer());
+  sourceMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return sourceMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfSourceMesh_2()
+{
+  double sourceCoords[12]={-0.3,-0.3,0., 0.7,-0.3,0., -0.3,0.7,0., 0.7,0.7,0.};
+  int sourceConn[6]={0,3,1,0,2,3};
+  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
+  sourceMesh->setMeshDimension(2);
+  sourceMesh->allocateCells(2);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,sourceConn+3);
+  sourceMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(4,3);
+  std::copy(sourceCoords,sourceCoords+12,myCoords->getPointer());
+  sourceMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return sourceMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfTargetMesh_1()
+{
+  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
+  int targetConn[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(5);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,3);
+  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+/*!
+ * Idem build3DSurfTargetMesh_1 except that cell id 2 is not correctly numbered.
+ */
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfTargetMeshPerm_1()
+{
+  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
+  int targetConn[18]={0,3,4,1, 1,4,2, 4,2,5, 6,7,4,3, 7,8,5,4};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(5);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,3);
+  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSurfTargetMesh_2()
+{
+  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
+  int targetConn[24]={0,3,4, 0,4,1, 1,4,2, 4,5,2, 3,6,4, 6,7,4, 4,7,5, 7,8,5 };
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(8);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+3);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+6);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+9);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+12);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+15);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+18);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+21);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,3);
+  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DSourceMesh_1()
+{
+  double sourceCoords[27]={ 0.0, 0.0, 200.0, 0.0, 0.0, 0.0, 0.0, 200.0, 200.0, 0.0, 200.0, 0.0, 200.0, 0.0, 200.0,
+                            200.0, 0.0, 0.0, 200.0, 200.0, 200.0, 200.0, 200.0, 0.0, 100.0, 100.0, 100.0 };
+  int sourceConn[48]={8,1,7,3, 6,0,8,2, 7,4,5,8, 6,8,4,7, 6,8,0,4, 6,8,7,3, 8,1,3,0, 4,1,5,8, 1,7,5,8, 0,3,8,2, 8,1,0,4, 3,6,8,2};
+  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
+  sourceMesh->setMeshDimension(3);
+  sourceMesh->allocateCells(12);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+4);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+8);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+12);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+16);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+20);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+24);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+28);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+32);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+36);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+40);
+  sourceMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,sourceConn+44);
+  sourceMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,3);
+  std::copy(sourceCoords,sourceCoords+27,myCoords->getPointer());
+  sourceMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return sourceMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DTargetMesh_1()
+{
+  double targetCoords[81]={ 0., 0., 0., 50., 0., 0. , 200., 0., 0.  , 0., 50., 0., 50., 50., 0. , 200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
+                            0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50., 50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. , 200., 200., 50. ,
+                            0., 0., 200., 50., 0., 200. , 200., 0., 200.  , 0., 50., 200., 50., 50., 200. , 200., 50., 200.,   0., 200., 200., 50., 200., 200. , 200., 200., 200. };
+  int targetConn[64]={0,1,4,3,9,10,13,12, 1,2,5,4,10,11,14,13, 3,4,7,6,12,13,16,15, 4,5,8,7,13,14,17,16,
+                      9,10,13,12,18,19,22,21, 10,11,14,13,19,20,23,22, 12,13,16,15,21,22,25,24, 13,14,17,16,22,23,26,25};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(3);
+  targetMesh->allocateCells(12);
+  for(int i=0;i<8;i++)
+    targetMesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,targetConn+8*i);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(27,3);
+  std::copy(targetCoords,targetCoords+81,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMeshMergeNode_1()
+{
+  double targetCoords[36]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,-0.3, 0.2,-0.3, 0.2,-0.3, 0.2,0.2, 0.2,0.2, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7, 0.2,0.7 };
+  int targetConn[18]={0,9,7,5, 4,6,2, 10,11,8, 9,14,15,7, 17,16,13,6};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(5);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(18,2);
+  std::copy(targetCoords,targetCoords+36,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DTargetMeshMergeNode_1()
+{
+  double targetCoords[93]={ 0., 0., 0., 50., 0., 0. , 200., 0., 0.  , 0., 50., 0., 50., 50., 0. , 200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
+                            0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50., 50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. , 200., 200., 50. ,
+                            0., 0., 200., 50., 0., 200. , 200., 0., 200.  , 0., 50., 200., 50., 50., 200. , 200., 50., 200.,   0., 200., 200., 50., 200., 200. , 200., 200., 200., 50.,0.,0., 50.,0.,0., 50.,0.,0.,  200., 50., 200.};
+  int targetConn[64]={0,29,4,3,9,10,13,12, 28,2,5,4,10,11,14,13, 3,4,7,6,12,13,16,15, 4,5,8,7,13,14,17,16,
+                      9,10,13,12,18,19,22,21, 10,11,14,13,19,20,23,22, 12,13,16,15,21,22,25,24, 13,14,17,16,22,30,26,25};
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(3);
+  targetMesh->allocateCells(12);
+  for(int i=0;i<8;i++)
+    targetMesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,targetConn+8*i);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(31,3);
+  std::copy(targetCoords,targetCoords+93,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build3DExtrudedUMesh_1(MEDCouplingUMesh *&mesh2D)
+{
+  double coords[180]={
+    0.,0.,0., 1.,1.,0., 1.,1.25,0., 0.,1.,0., 1.,1.5,0., 2.,0.,0., 2.,1.,0., 1.,2.,0., 0.,2.,0., 3.,1.,0.,
+    3.,2.,0., 0.,1.,0., 1.,3.,0., 2.,2.,0., 2.,3.,0.,
+    0.,0.,1., 1.,1.,1., 1.,1.25,1., 0.,1.,1., 1.,1.5,1., 2.,0.,1., 2.,1.,1., 1.,2.,1., 0.,2.,1., 3.,1.,1.,
+    3.,2.,1., 0.,1.,1., 1.,3.,1., 2.,2.,1., 2.,3.,1.,
+    0.,0.,2., 1.,1.,2., 1.,1.25,2., 0.,1.,2., 1.,1.5,2., 2.,0.,2., 2.,1.,2., 1.,2.,2., 0.,2.,2., 3.,1.,2.,
+    3.,2.,2., 0.,1.,2., 1.,3.,2., 2.,2.,2., 2.,3.,2.,
+    0.,0.,3., 1.,1.,3., 1.,1.25,3., 0.,1.,3., 1.,1.5,3., 2.,0.,3., 2.,1.,3., 1.,2.,3., 0.,2.,3., 3.,1.,3.,
+    3.,2.,3., 0.,1.,3., 1.,3.,3., 2.,2.,3., 2.,3.,3.};
+
+  int conn[354]={
+    // 0
+    0,11,1,3,15,26,16,18,   1,2,4,7,13,6,-1,1,16,21,6,-1,6,21,28,13,-1,13,7,22,28,-1,7,4,19,22,-1,4,2,17,19,-1,2,1,16,17,-1,16,21,28,22,19,17,
+    1,6,5,3,16,21,20,18,   13,10,9,6,28,25,24,21,
+    11,8,7,4,2,1,-1,11,26,16,1,-1,1,16,17,2,-1,2,17,19,4,-1,4,19,22,7,-1,7,8,23,22,-1,8,11,26,23,-1,26,16,17,19,22,23,
+    7,12,14,13,22,27,29,28,
+    // 1
+    15,26,16,18,30,41,31,33,   16,17,19,22,28,21,-1,16,31,36,21,-1,21,36,43,28,-1,28,22,37,43,-1,22,19,34,37,-1,19,17,32,34,-1,17,16,31,32,-1,31,36,43,37,34,32,
+    16,21,20,18,31,36,35,33,   28,25,24,21,43,40,39,36,
+    26,23,22,19,17,16,-1,26,41,31,16,-1,16,31,32,17,-1,17,32,34,19,-1,19,34,37,22,-1,22,23,38,37,-1,23,26,41,38,-1,41,31,32,34,37,38,
+    22,27,29,28,37,42,44,43,
+    // 2
+    30,41,31,33,45,56,46,48,  31,32,34,37,43,36,-1,31,46,51,36,-1,36,51,58,43,-1,43,37,52,58,-1,37,34,49,52,-1,34,32,47,49,-1,32,31,46,47,-1,46,51,58,52,49,47,
+    31,36,35,33,46,51,50,48,  43,40,39,36,58,55,54,51,
+    41,38,37,34,32,31,-1,41,56,46,31,-1,31,46,47,32,-1,32,47,49,34,-1,34,49,52,37,-1,37,38,53,52,-1,38,41,56,53,-1,56,46,47,49,52,53,
+    37,42,44,43,52,57,59,58
+  };
+  int conn2[28]={7,12,14,13, 11,8,7,4,2,1, 13,10,9,6, 1,6,5,3, 1,2,4,7,13,6, 0,11,1,3};
+  //
+  MEDCouplingUMesh *ret=MEDCouplingUMesh::New();
+  ret->setMeshDimension(3);
+  ret->allocateCells(18);
+  //
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn);
+  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+8);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+51);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+59);
+  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+67);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+110);
+  //
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+118);
+  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+126);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+169);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+177);
+  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+185);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+228);
+  //
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+236);
+  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+244);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+287);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+295);
+  ret->insertNextCell(INTERP_KERNEL::NORM_POLYHED,43,conn+303);
+  ret->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+346);
+  //
+  ret->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(60,3);
+  std::copy(coords,coords+180,myCoords->getPointer());
+  ret->setCoords(myCoords);
+  //
+  mesh2D=MEDCouplingUMesh::New();
+  mesh2D->setMeshDimension(2);
+  mesh2D->allocateCells(6);
+  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2);
+  mesh2D->insertNextCell(INTERP_KERNEL::NORM_POLYGON,6,conn2+4);
+  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2+10);
+  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2+14);
+  mesh2D->insertNextCell(INTERP_KERNEL::NORM_POLYGON,6,conn2+18);
+  mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,conn2+24);
+  mesh2D->setCoords(myCoords);
+  myCoords->decrRef();
+  return ret;
+}
+
+MEDCouplingUMesh *MEDCouplingBasicsTest::build2DTargetMeshMerged_1()
+{
+  double targetCoords[26]={
+    -0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7,
+    0.7,-0.3, 1.7,-0.3, 0.7,0.7, 1.7,0.7
+  };
+  int targetConn[24]={
+    0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4,
+    9,12,10,9,11,12
+  };
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setName("merge");
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+18);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+21);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(13,2);
+  std::copy(targetCoords,targetCoords+26,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  return targetMesh;
+}
+
+double MEDCouplingBasicsTest::sumAll(const std::vector< std::map<int,double> >& matrix)
+{
+  double ret=0.;
+  for(std::vector< std::map<int,double> >::const_iterator iter=matrix.begin();iter!=matrix.end();iter++)
+    for(std::map<int,double>::const_iterator iter2=(*iter).begin();iter2!=(*iter).end();iter2++)
+      ret+=(*iter2).second;
+  return ret;
+}
diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx
new file mode 100644 (file)
index 0000000..bd5d696
--- /dev/null
@@ -0,0 +1,1671 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "MEDCouplingBasicsTest.hxx"
+#include "MEDCouplingUMesh.hxx"
+#include "MEDCouplingCMesh.hxx"
+#include "MEDCouplingExtrudedMesh.hxx"
+#include "MEDCouplingFieldDouble.hxx"
+#include "MEDCouplingMemArray.hxx"
+
+#include <cmath>
+#include <functional>
+
+using namespace std;
+using namespace ParaMEDMEM;
+
+void MEDCouplingBasicsTest::testArray()
+{
+  int tmp1[6]={7,6,5,4,3,2};
+  const int tmp2[3]={8,9,10};
+  {
+    MemArray<int> mem;
+    mem.useArray(tmp1,false,CPP_DEALLOC,6);
+    CPPUNIT_ASSERT(tmp1==mem.getConstPointer());
+    CPPUNIT_ASSERT_THROW(mem.getPointer(),INTERP_KERNEL::Exception);
+    CPPUNIT_ASSERT_THROW(mem[2]=7,INTERP_KERNEL::Exception);
+    CPPUNIT_ASSERT_THROW(mem.writeOnPlace(0,12,tmp2,3),INTERP_KERNEL::Exception);
+    mem.writeOnPlace(4,12,tmp2,3);
+  }
+  {
+    int *tmp3=new int[6];
+    std::copy(tmp1,tmp1+6,tmp3);
+    MemArray<int> mem2;
+    mem2.useArray(tmp3,true,CPP_DEALLOC,6);
+    CPPUNIT_ASSERT(tmp3==mem2.getConstPointer());
+    CPPUNIT_ASSERT(tmp3==mem2.getPointer());
+    CPPUNIT_ASSERT_EQUAL(5,mem2[2]);
+    mem2[2]=7;
+    CPPUNIT_ASSERT_EQUAL(7,mem2[2]);
+    mem2.writeOnPlace(0,12,tmp2,3);
+    CPPUNIT_ASSERT_EQUAL(9,mem2[2]);
+    CPPUNIT_ASSERT_EQUAL(12,mem2[0]);
+    mem2.writeOnPlace(4,12,tmp2,3);
+  }
+}
+
+void MEDCouplingBasicsTest::testMesh()
+{
+  const int nbOfCells=6;
+  const int nbOfNodes=12;
+  
+  double coords[3*nbOfNodes]={ 
+    0.024155, 0.04183768725682622, -0.305, 0.04831000000000001, -1.015761910347357e-17, -0.305, 0.09662000000000001, -1.832979297858306e-18, 
+    -0.305, 0.120775, 0.04183768725682623, -0.305, 0.09662000000000001, 0.08367537451365245, -0.305, 0.04831000000000001, 
+    0.08367537451365246, -0.305, 0.024155, 0.04183768725682622, -0.2863, 0.04831000000000001, -1.015761910347357e-17, -0.2863, 
+    0.09662000000000001, -1.832979297858306e-18, -0.2863, 0.120775, 0.04183768725682623, -0.2863, 0.09662000000000001, 0.08367537451365245, 
+    -0.2863, 0.04831000000000001, 0.08367537451365246, -0.2863, };
+  
+  int tab4[4*nbOfCells]={ 
+    1, 2, 8, 7, 2, 3, 9, 8, 3, 4, 10, 9, 4, 5, 11, 10, 5, 0, 6, 11, 
+    0, 1, 7, 6, };
+  
+  MEDCouplingUMesh *mesh=MEDCouplingUMesh::New();
+  mesh->setMeshDimension(2);
+  mesh->allocateCells(8);
+  const int *curConn=tab4;
+  for(int i=0;i<nbOfCells;i++,curConn+=4)
+    mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,curConn);
+  mesh->finishInsertingCells();
+  CPPUNIT_ASSERT_EQUAL(30,mesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh->getNumberOfCells());
+  //test 0 - no copy no ownership
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->useArray(coords,false,CPP_DEALLOC,nbOfNodes,3);
+  mesh->setCoords(myCoords);
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh->getNumberOfCells());
+  mesh->checkCoherency();
+  //test 1 - no copy ownership C++
+  myCoords=DataArrayDouble::New();
+  double *tmp=new double[3*nbOfNodes];
+  copy(coords,coords+3*nbOfNodes,tmp);
+  myCoords->useArray(tmp,true,CPP_DEALLOC,nbOfNodes,3);
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh->getNumberOfCells());
+  mesh->checkCoherency();
+  //test 2 - no copy ownership C
+  myCoords=DataArrayDouble::New();
+  tmp=(double *)malloc(3*nbOfNodes*sizeof(double));
+  copy(coords,coords+3*nbOfNodes,tmp);
+  myCoords->useArray(tmp,true,C_DEALLOC,nbOfNodes,3);
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh->getNumberOfNodes());
+  mesh->checkCoherency();
+  //test 3 - copy.
+  myCoords=DataArrayDouble::New();
+  myCoords->alloc(nbOfNodes,3);
+  tmp=myCoords->getPointer();
+  copy(coords,coords+3*nbOfNodes,tmp);
+  // test 3 bis deepcopy
+  DataArrayDouble *myCoords2=DataArrayDouble::New();
+  *myCoords2=*myCoords;
+  myCoords2->decrRef();
+  //
+  mesh->setCoords(myCoords);
+  myCoords->decrRef();
+  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh->getNumberOfNodes());
+  mesh->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(3,mesh->getSpaceDimension());
+  // test clone not recursively
+  MEDCouplingUMesh *mesh2=mesh->clone(false);
+  CPPUNIT_ASSERT(mesh2!=mesh);
+  mesh2->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh2->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(3,mesh2->getSpaceDimension());
+  CPPUNIT_ASSERT(mesh!=mesh2);
+  CPPUNIT_ASSERT(mesh->getCoords()==mesh2->getCoords());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.2863,mesh2->getCoords()->getIJ(11,2),1e-14);
+  CPPUNIT_ASSERT(mesh->getNodalConnectivity()==mesh2->getNodalConnectivity());
+  CPPUNIT_ASSERT_EQUAL(3,mesh2->getNodalConnectivity()->getIJ(7,0));
+  CPPUNIT_ASSERT(mesh->getNodalConnectivityIndex()==mesh2->getNodalConnectivityIndex());
+  CPPUNIT_ASSERT_EQUAL(15,mesh2->getNodalConnectivityIndex()->getIJ(3,0));
+  mesh2->decrRef();
+  // test clone not recursively
+  MEDCouplingUMesh *mesh3=mesh->clone(true);
+  CPPUNIT_ASSERT(mesh3!=mesh);
+  mesh3->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,mesh3->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(nbOfNodes,mesh3->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(3,mesh3->getSpaceDimension());
+  CPPUNIT_ASSERT(mesh!=mesh3);
+  CPPUNIT_ASSERT(mesh->getCoords()!=mesh3->getCoords());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.2863,mesh3->getCoords()->getIJ(11,2),1e-14);
+  CPPUNIT_ASSERT(mesh->getNodalConnectivity()!=mesh3->getNodalConnectivity());
+  CPPUNIT_ASSERT_EQUAL(3,mesh3->getNodalConnectivity()->getIJ(7,0));
+  CPPUNIT_ASSERT(mesh->getNodalConnectivityIndex()!=mesh3->getNodalConnectivityIndex());
+  CPPUNIT_ASSERT_EQUAL(15,mesh3->getNodalConnectivityIndex()->getIJ(3,0));
+  mesh3->decrRef();
+  //test 4 - Field on cells
+  MEDCouplingFieldDouble *fieldOnCells=MEDCouplingFieldDouble::New(ON_CELLS);
+  fieldOnCells->setMesh(mesh);
+  DataArrayDouble *array=DataArrayDouble::New();
+  array->alloc(nbOfCells,9);
+  fieldOnCells->setArray(array);
+  tmp=array->getPointer();
+  array->decrRef();
+  fill(tmp,tmp+9*nbOfCells,7.);
+  //content of field changed -> declare it.
+  fieldOnCells->declareAsNew();
+  fieldOnCells->checkCoherency();
+  // testing clone of fields - no recursive
+  MEDCouplingFieldDouble *fieldOnCells2=fieldOnCells->clone(false);
+  CPPUNIT_ASSERT(fieldOnCells2!=fieldOnCells);
+  fieldOnCells2->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,fieldOnCells2->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(9,fieldOnCells2->getNumberOfComponents());
+  CPPUNIT_ASSERT(fieldOnCells2->getArray()==fieldOnCells->getArray());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,fieldOnCells2->getArray()->getIJ(3,7),1e-14);
+  CPPUNIT_ASSERT(fieldOnCells2->getMesh()==fieldOnCells->getMesh());
+  // testing clone of fields - recursive
+  MEDCouplingFieldDouble *fieldOnCells3=fieldOnCells->clone(true);
+  CPPUNIT_ASSERT(fieldOnCells3!=fieldOnCells);
+  fieldOnCells3->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(nbOfCells,fieldOnCells3->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(9,fieldOnCells3->getNumberOfComponents());
+  CPPUNIT_ASSERT(fieldOnCells3->getArray()!=fieldOnCells->getArray());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,fieldOnCells3->getArray()->getIJ(3,7),1e-14);
+  CPPUNIT_ASSERT(fieldOnCells3->getMesh()==fieldOnCells->getMesh());
+  fieldOnCells2->decrRef();
+  fieldOnCells3->decrRef();
+  //
+  fieldOnCells->decrRef();
+  //clean-up
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testMeshPointsCloud()
+{
+  double targetCoords[27]={-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5, -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5};
+  int *targetConn=0;
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(0);
+  targetMesh->allocateCells(8);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT0,0,targetConn);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(9,3);
+  std::copy(targetCoords,targetCoords+27,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  //
+  targetMesh->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(3,targetMesh->getSpaceDimension());
+  CPPUNIT_ASSERT_EQUAL(8,targetMesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(9,targetMesh->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(0,targetMesh->getMeshDimension());
+  //
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testMeshM1D()
+{
+  MEDCouplingUMesh *meshM1D=MEDCouplingUMesh::New();
+  CPPUNIT_ASSERT_THROW(meshM1D->getMeshDimension(),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(meshM1D->getNumberOfNodes(),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(meshM1D->getNumberOfCells(),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(meshM1D->setMeshDimension(-2),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(meshM1D->setMeshDimension(-10),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(meshM1D->checkCoherency(),INTERP_KERNEL::Exception);
+  meshM1D->setMeshDimension(-1);
+  meshM1D->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(-1,meshM1D->getMeshDimension());
+  CPPUNIT_ASSERT_EQUAL(1,meshM1D->getNumberOfCells());
+  CPPUNIT_ASSERT_THROW(meshM1D->getNumberOfNodes(),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(meshM1D->getSpaceDimension(),INTERP_KERNEL::Exception);
+  MEDCouplingUMesh *cpy=meshM1D->clone(true);
+  CPPUNIT_ASSERT(cpy->isEqual(meshM1D,1e-12));
+  cpy->decrRef();
+  MEDCouplingFieldDouble *fieldOnCells=MEDCouplingFieldDouble::New(ON_CELLS);
+  fieldOnCells->setMesh(meshM1D);
+  DataArrayDouble *array=DataArrayDouble::New();
+  array->alloc(1,6);
+  fieldOnCells->setArray(array);
+  double *tmp=array->getPointer();
+  array->decrRef();
+  fill(tmp,tmp+6,7.);
+  fieldOnCells->checkCoherency();
+  //
+  fieldOnCells->decrRef();
+  meshM1D->decrRef();
+}
+
+void MEDCouplingBasicsTest::testDeepCopy()
+{
+  DataArrayDouble *array=DataArrayDouble::New();
+  array->alloc(5,3);
+  fill(array->getPointer(),array->getPointer()+5*3,7.);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,array->getIJ(3,2),1e-14);
+  double *tmp1=array->getPointer();
+  DataArrayDouble *array2=array->deepCopy();
+  double *tmp2=array2->getPointer();
+  CPPUNIT_ASSERT(tmp1!=tmp2);
+  array->decrRef();
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,array2->getIJ(3,2),1e-14);
+  array2->decrRef();
+  //
+  DataArrayInt *array3=DataArrayInt::New();
+  array3->alloc(5,3);
+  fill(array3->getPointer(),array3->getPointer()+5*3,17);
+  CPPUNIT_ASSERT_EQUAL(17,array3->getIJ(3,2));
+  int *tmp3=array3->getPointer();
+  DataArrayInt *array4=array3->deepCopy();
+  int *tmp4=array4->getPointer();
+  CPPUNIT_ASSERT(tmp3!=tmp4);
+  array3->decrRef();
+  CPPUNIT_ASSERT_EQUAL(17,array4->getIJ(3,2));
+  array4->decrRef();
+}
+
+void MEDCouplingBasicsTest::testRevNodal()
+{
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  DataArrayInt *revNodal=DataArrayInt::New();
+  DataArrayInt *revNodalIndx=DataArrayInt::New();
+  //
+  mesh->getReverseNodalConnectivity(revNodal,revNodalIndx);
+  const int revNodalExpected[18]={0,0,1,1,2,0,3,0,1,2,3,4,2,4,3,3,4,4};
+  const int revNodalIndexExpected[10]={0,1,3,5,7,12,14,15,17,18};
+  CPPUNIT_ASSERT_EQUAL(18,revNodal->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(10,revNodalIndx->getNbOfElems());
+  CPPUNIT_ASSERT(std::equal(revNodalExpected,revNodalExpected+18,revNodal->getPointer()));
+  CPPUNIT_ASSERT(std::equal(revNodalIndexExpected,revNodalIndexExpected+10,revNodalIndx->getPointer()));
+  //
+  revNodal->decrRef();
+  revNodalIndx->decrRef();
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testConvertToPolyTypes()
+{
+  ////// 2D
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  //
+  const int elts[2]={1,3};
+  std::vector<int> eltsV(elts,elts+2);
+  mesh->convertToPolyTypes(eltsV);
+  mesh->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(5,mesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(23,mesh->getNodalConnectivity()->getNumberOfTuples());
+  const int *pt=mesh->getNodalConnectivity()->getConstPointer();
+  const int expected1[23]={4, 0, 3, 4, 1, 5, 1, 4, 2, 3, 4, 5, 2, 5, 6, 7, 4, 3, 4, 7, 8, 5, 4};
+  CPPUNIT_ASSERT(std::equal(expected1,expected1+23,pt));
+  //
+  mesh->decrRef();
+  ////// 3D
+  mesh=build3DTargetMesh_1();
+  mesh->convertToPolyTypes(eltsV);
+  mesh->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(8,mesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(114,mesh->getNodalConnectivity()->getNumberOfTuples());
+  mesh->convertToPolyTypes(eltsV);
+  mesh->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(8,mesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(114,mesh->getNodalConnectivity()->getNumberOfTuples());
+  //
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testDescConn2D()
+{
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  DataArrayInt *desc=DataArrayInt::New();
+  DataArrayInt *descIndx=DataArrayInt::New();
+  DataArrayInt *revDesc=DataArrayInt::New();
+  DataArrayInt *revDescIndx=DataArrayInt::New();
+  //
+  MEDCouplingUMesh *mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
+  mesh2->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(1,mesh2->getMeshDimension());
+  CPPUNIT_ASSERT_EQUAL(13,mesh2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(6,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(6,descIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(18,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,desc->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(18,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,revDesc->getNumberOfTuples());
+  const int expected1[18]={0,1,2,3, 2,4,5, 6,7,4, 8,9,1,10, 11,12,6,9};
+  CPPUNIT_ASSERT(std::equal(expected1,expected1+18,desc->getConstPointer()));
+  const int expected2[6]={0,4,7,10,14,18};
+  CPPUNIT_ASSERT(std::equal(expected2,expected2+6,descIndx->getConstPointer()));
+  const int expected3[14]={0,1,3,5,6,8,9,11,12,13,15,16,17,18};
+  CPPUNIT_ASSERT(std::equal(expected3,expected3+14,revDescIndx->getConstPointer()));
+  const int expected4[18]={0, 0,3, 0,1, 0, 1,2, 1, 2,4, 2, 3, 3,4, 3, 4, 4};
+  CPPUNIT_ASSERT(std::equal(expected4,expected4+18,revDesc->getConstPointer()));
+  DataArrayInt *conn=mesh2->getNodalConnectivity();
+  DataArrayInt *connIndex=mesh2->getNodalConnectivityIndex();
+  const int expected5[14]={0,3,6,9,12,15,18,21,24,27,30,33,36,39};
+  CPPUNIT_ASSERT(std::equal(expected5,expected5+14,connIndex->getConstPointer()));
+  const int expected6[39]={1, 0, 3, 1, 3, 4, 1, 4, 1, 1, 1, 0, 1, 4, 2, 1, 2, 1, 1, 4, 5, 1, 5, 2, 1, 6, 7, 1, 7, 4, 1, 3, 6, 1, 7, 8, 1, 8, 5};
+  CPPUNIT_ASSERT(std::equal(expected6,expected6+39,conn->getConstPointer()));
+  //
+  desc->decrRef();
+  descIndx->decrRef();
+  revDesc->decrRef();
+  revDescIndx->decrRef();
+  mesh2->decrRef();
+  //
+  const int elts[2]={1,3};
+  std::vector<int> eltsV(elts,elts+2);
+  mesh->convertToPolyTypes(eltsV);
+  mesh->checkCoherency();
+  //
+  desc=DataArrayInt::New();
+  descIndx=DataArrayInt::New();
+  revDesc=DataArrayInt::New();
+  revDescIndx=DataArrayInt::New();
+  //
+  mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
+  mesh2->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(1,mesh2->getMeshDimension());
+  CPPUNIT_ASSERT_EQUAL(13,mesh2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(14,revDescIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(6,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(6,descIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(18,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,desc->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(18,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,revDesc->getNumberOfTuples());
+  CPPUNIT_ASSERT(std::equal(expected1,expected1+18,desc->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected2,expected2+6,descIndx->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected3,expected3+14,revDescIndx->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected4,expected4+18,revDesc->getConstPointer()));
+  conn=mesh2->getNodalConnectivity();
+  connIndex=mesh2->getNodalConnectivityIndex();
+  CPPUNIT_ASSERT(std::equal(expected5,expected5+14,connIndex->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected6,expected6+39,conn->getConstPointer()));
+  //
+  desc->decrRef();
+  descIndx->decrRef();
+  revDesc->decrRef();
+  revDescIndx->decrRef();
+  mesh2->decrRef();
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testDescConn3D()
+{
+  MEDCouplingUMesh *mesh=build3DTargetMesh_1();
+  DataArrayInt *desc=DataArrayInt::New();
+  DataArrayInt *descIndx=DataArrayInt::New();
+  DataArrayInt *revDesc=DataArrayInt::New();
+  DataArrayInt *revDescIndx=DataArrayInt::New();
+  //
+  MEDCouplingUMesh *mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
+  mesh2->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(2,mesh2->getMeshDimension());
+  CPPUNIT_ASSERT_EQUAL(36,mesh2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(9,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(9,descIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(48,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,desc->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(48,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,revDesc->getNumberOfTuples());
+  const int expected1[9]={0, 6, 12, 18, 24, 30, 36, 42, 48};
+  const int expected2[48]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 11, 12, 4, 13, 14, 15, 16, 17, 10, 18, 19, 13, 1, 20, 21, 22, 23, 24, 7, 25, 26, 27, 28, 22, 12, 29, 23, 30, 31, 32, 17, 33, 28, 34, 35, 30};
+  const int expected3[37]={0, 1, 3, 4, 6, 8, 9, 10, 12, 13, 14, 16, 17, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 41, 43, 44, 45, 46, 47, 48};
+  const int expected4[48]={0, 0, 4, 0, 0, 1, 0, 2, 0, 1, 1, 5, 1, 1, 1, 3, 2, 2, 6, 2, 3, 2, 2, 3, 3, 7, 3, 3, 4, 4, 4, 5, 4, 6, 4, 5, 5, 5, 5, 7, 6, 6, 7, 6, 6, 7, 7, 7};
+  const int expected5[37]={0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180};
+  const int expected6[180]={4, 0, 1, 4, 3, 4, 9, 12, 13, 10, 4, 0, 9, 10, 1, 4, 1, 10, 13, 4, 4, 4, 13, 12, 3, 4, 3, 12, 9, 0, 4, 1, 2, 5, 4, 4, 10, 13, 14, 11, 4, 1, 10, 11, 2, 4, 2, 11, 14,
+                            5, 4, 5, 14, 13, 4, 4, 3, 4, 7, 6, 4, 12, 15, 16, 13, 4, 4, 13, 16, 7, 4, 7, 16, 15, 6, 4, 6, 15, 12, 3, 4, 4, 5, 8, 7, 4, 13, 16, 17, 14, 4, 5, 14, 17, 8, 4, 8,
+                            17, 16, 7, 4, 18, 21, 22, 19, 4, 9, 18, 19, 10, 4, 10, 19, 22, 13, 4, 13, 22, 21, 12, 4, 12, 21, 18, 9, 4, 19, 22, 23, 20, 4, 10, 19, 20, 11, 4, 11, 20, 23, 14, 4,
+                            14, 23, 22, 13, 4, 21, 24, 25, 22, 4, 13, 22, 25, 16, 4, 16, 25, 24, 15, 4, 15, 24, 21, 12, 4, 22, 25, 26, 23, 4, 14, 23, 26, 17, 4, 17, 26, 25, 16};
+  const int expected7[180]={4, 0, 1, 4, 3, 4, 9, 12, 13, 10, 4, 0, 9, 10, 1, 4, 1, 10, 13, 4, 4, 4, 13, 12, 3, 4, 3, 12, 9, 0, 5, 1, 2, 5, 4, 5, 10, 13, 14, 11, 5, 1, 10, 11, 2, 5, 2, 11, 14,
+                            5, 5, 5, 14, 13, 4, 4, 3, 4, 7, 6, 4, 12, 15, 16, 13, 4, 4, 13, 16, 7, 4, 7, 16, 15, 6, 4, 6, 15, 12, 3, 5, 4, 5, 8, 7, 5, 13, 16, 17, 14, 5, 5, 14, 17, 8, 5, 8,
+                            17, 16, 7, 4, 18, 21, 22, 19, 4, 9, 18, 19, 10, 4, 10, 19, 22, 13, 4, 13, 22, 21, 12, 4, 12, 21, 18, 9, 4, 19, 22, 23, 20, 4, 10, 19, 20, 11, 4, 11, 20, 23, 14, 4,
+                            14, 23, 22, 13, 4, 21, 24, 25, 22, 4, 13, 22, 25, 16, 4, 16, 25, 24, 15, 4, 15, 24, 21, 12, 4, 22, 25, 26, 23, 4, 14, 23, 26, 17, 4, 17, 26, 25, 16};
+
+  CPPUNIT_ASSERT(std::equal(expected1,expected1+9,descIndx->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected2,expected2+48,desc->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected3,expected3+37,revDescIndx->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected4,expected4+48,revDesc->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected5,expected5+37,mesh2->getNodalConnectivityIndex()->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected6,expected6+180,mesh2->getNodalConnectivity()->getConstPointer()));
+  //
+  desc->decrRef();
+  descIndx->decrRef();
+  revDesc->decrRef();
+  revDescIndx->decrRef();
+  mesh2->decrRef();
+  //
+  const int elts[2]={1,3};
+  std::vector<int> eltsV(elts,elts+2);
+  mesh->convertToPolyTypes(eltsV);
+  mesh->checkCoherency();
+  desc=DataArrayInt::New();
+  descIndx=DataArrayInt::New();
+  revDesc=DataArrayInt::New();
+  revDescIndx=DataArrayInt::New();
+  mesh2=mesh->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx);
+  mesh2->checkCoherency();
+  CPPUNIT_ASSERT_EQUAL(2,mesh2->getMeshDimension());
+  CPPUNIT_ASSERT_EQUAL(36,mesh2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(37,revDescIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(9,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(9,descIndx->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(48,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,desc->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(48,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,revDesc->getNumberOfTuples());
+  CPPUNIT_ASSERT(std::equal(expected1,expected1+9,descIndx->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected2,expected2+48,desc->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected3,expected3+37,revDescIndx->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected4,expected4+48,revDesc->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected5,expected5+37,mesh2->getNodalConnectivityIndex()->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(expected7,expected7+180,mesh2->getNodalConnectivity()->getConstPointer()));
+  //
+  desc->decrRef();
+  descIndx->decrRef();
+  revDesc->decrRef();
+  revDescIndx->decrRef();
+  mesh2->decrRef();
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testFindBoundaryNodes()
+{
+  MEDCouplingUMesh *mesh=build3DTargetMesh_1();
+  std::vector<int> boundaryNodes;
+  mesh->findBoundaryNodes(boundaryNodes);
+  CPPUNIT_ASSERT_EQUAL(26,(int)boundaryNodes.size());
+  const int expected1[26]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
+  CPPUNIT_ASSERT(std::equal(expected1,expected1+26,boundaryNodes.begin()));
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testBoundaryMesh()
+{
+  MEDCouplingUMesh *mesh=build3DTargetMesh_1();
+  MEDCouplingPointSet *mesh2=mesh->buildBoundaryMesh(false);
+  CPPUNIT_ASSERT_EQUAL(24,mesh2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(26,mesh2->getNumberOfNodes());
+  mesh2->decrRef();
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testBuildPartOfMySelf()
+{
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  mesh->setName("Toto");
+  const int tab1[2]={0,4};
+  const int tab2[3]={0,2,3};
+  //
+  MEDCouplingPointSet *subMeshSimple=mesh->buildPartOfMySelf(tab1,tab1+2,true);
+  MEDCouplingUMesh *subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
+  CPPUNIT_ASSERT(subMesh);
+  std::string name(subMesh->getName());
+  CPPUNIT_ASSERT_EQUAL(2,(int)mesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*mesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++(mesh->getAllTypes().begin())));
+  CPPUNIT_ASSERT_EQUAL(1,(int)subMesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT(name=="PartOf_Toto");
+  CPPUNIT_ASSERT(mesh->getCoords()==subMesh->getCoords());
+  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNumberOfCells());
+  const int subConn[10]={4,0,3,4,1,4,7,8,5,4};
+  const int subConnIndex[3]={0,5,10};
+  CPPUNIT_ASSERT_EQUAL(10,subMesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNodalConnectivityIndex()->getNbOfElems());
+  CPPUNIT_ASSERT(std::equal(subConn,subConn+10,subMesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+3,subMesh->getNodalConnectivityIndex()->getPointer()));
+  subMesh->decrRef();
+  //
+  subMeshSimple=mesh->buildPartOfMySelf(tab2,tab2+3,true);
+  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
+  CPPUNIT_ASSERT(subMesh);
+  name=subMesh->getName();
+  CPPUNIT_ASSERT_EQUAL(2,(int)subMesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++(subMesh->getAllTypes().begin())));
+  CPPUNIT_ASSERT(name=="PartOf_Toto");
+  CPPUNIT_ASSERT(mesh->getCoords()==subMesh->getCoords());
+  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNumberOfCells());
+  const int subConn2[14]={4,0,3,4,1,3,4,5,2,4,6,7,4,3};
+  const int subConnIndex2[4]={0,5,9,14};
+  CPPUNIT_ASSERT_EQUAL(14,subMesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(4,subMesh->getNodalConnectivityIndex()->getNbOfElems());
+  CPPUNIT_ASSERT(std::equal(subConn2,subConn2+14,subMesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(subConnIndex2,subConnIndex2+4,subMesh->getNodalConnectivityIndex()->getPointer()));
+  subMesh->decrRef();
+  //
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testBuildPartOfMySelfNode()
+{
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  const int tab1[2]={5,7};
+  MEDCouplingPointSet *subMeshSimple=mesh->buildPartOfMySelfNode(tab1,tab1+2,true);
+  MEDCouplingUMesh *subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
+  CPPUNIT_ASSERT(subMesh);
+  CPPUNIT_ASSERT_EQUAL(1,(int)subMesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(1,subMesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(5,subMesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNodalConnectivityIndex()->getNbOfElems());
+  const int subConn[5]={4,7,8,5,4};
+  const int subConnIndex[3]={0,5};
+  CPPUNIT_ASSERT(std::equal(subConn,subConn+5,subMesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+2,subMesh->getNodalConnectivityIndex()->getPointer()));
+  CPPUNIT_ASSERT(subMesh->getCoords()==mesh->getCoords());
+  subMeshSimple->decrRef();
+  //
+  subMeshSimple=mesh->buildPartOfMySelfNode(tab1,tab1+2,false);
+  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
+  CPPUNIT_ASSERT(subMesh);
+  CPPUNIT_ASSERT_EQUAL(2,(int)subMesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++subMesh->getAllTypes().begin()));
+  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(14,subMesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(4,subMesh->getNodalConnectivityIndex()->getNbOfElems());
+  const int subConn2[14]={3,4,5,2,4,6,7,4,3,4,7,8,5,4};
+  const int subConnIndex2[4]={0,4,9,14};
+  CPPUNIT_ASSERT(std::equal(subConn2,subConn2+14,subMesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(subConnIndex2,subConnIndex2+4,subMesh->getNodalConnectivityIndex()->getPointer()));
+  CPPUNIT_ASSERT(subMesh->getCoords()==mesh->getCoords());
+  subMeshSimple->decrRef();
+  //testing the case where length of tab2 is greater than max number of node per cell.
+  const int tab2[7]={0,3,2,1,4,5,6};
+  subMeshSimple=mesh->buildPartOfMySelfNode(tab2,tab2+7,true);
+  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshSimple);
+  CPPUNIT_ASSERT(subMesh);
+  CPPUNIT_ASSERT_EQUAL(2,(int)subMesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*(++subMesh->getAllTypes().begin()));
+  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNumberOfCells());
+  subMeshSimple->decrRef();
+  //
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testZipCoords()
+{
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  CPPUNIT_ASSERT_EQUAL(2,(int)mesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
+  CPPUNIT_ASSERT_EQUAL(9,mesh->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(5,mesh->getNumberOfCells());
+  std::vector<int> oldConn(mesh->getNodalConnectivity()->getNbOfElems());
+  std::vector<int> oldConnIndex(mesh->getNumberOfCells()+1);
+  std::copy(mesh->getNodalConnectivity()->getPointer(),mesh->getNodalConnectivity()->getPointer()+oldConn.size(),oldConn.begin());
+  std::copy(mesh->getNodalConnectivityIndex()->getPointer(),mesh->getNodalConnectivityIndex()->getPointer()+mesh->getNumberOfCells()+1,oldConnIndex.begin());
+  DataArrayDouble *oldCoords=mesh->getCoords();
+  oldCoords->incrRef();
+  mesh->zipCoords();
+  CPPUNIT_ASSERT_EQUAL(2,(int)mesh->getAllTypes().size());
+  CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
+  CPPUNIT_ASSERT_EQUAL(9,mesh->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(5,mesh->getNumberOfCells());
+  CPPUNIT_ASSERT(mesh->getCoords()!=oldCoords);
+  CPPUNIT_ASSERT(std::equal(mesh->getCoords()->getPointer(),mesh->getCoords()->getPointer()+2*9,oldCoords->getPointer()));
+  CPPUNIT_ASSERT(std::equal(oldConn.begin(),oldConn.end(),mesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(oldConnIndex.begin(),oldConnIndex.end(),mesh->getNodalConnectivityIndex()->getPointer()));
+  oldCoords->decrRef();
+  //
+  const int tab1[2]={0,4};
+  MEDCouplingPointSet *subMeshPtSet=mesh->buildPartOfMySelf(tab1,tab1+2,true);
+  MEDCouplingUMesh *subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshPtSet);
+  CPPUNIT_ASSERT(subMesh);
+  DataArrayInt *traducer=subMesh->zipCoordsTraducer();
+  const int expectedTraducer[9]={0,1,-1,2,3,4,-1,5,6};
+  CPPUNIT_ASSERT(std::equal(expectedTraducer,expectedTraducer+9,traducer->getPointer()));
+  traducer->decrRef();
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNumberOfCells());
+  const int subConn[10]={4,0,2,3,1,4,5,6,4,3};
+  const int subConnIndex[3]={0,5,10};
+  CPPUNIT_ASSERT_EQUAL(7,subMesh->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(10,subMesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNodalConnectivityIndex()->getNbOfElems());
+  CPPUNIT_ASSERT(std::equal(subConn,subConn+10,subMesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+3,subMesh->getNodalConnectivityIndex()->getPointer()));
+  subMesh->decrRef();
+  //
+  subMeshPtSet=mesh->buildPartOfMySelf(tab1,tab1+2,false);
+  subMesh=dynamic_cast<MEDCouplingUMesh *>(subMeshPtSet);
+  CPPUNIT_ASSERT(subMesh);
+  CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_QUAD4,*subMesh->getAllTypes().begin());
+  CPPUNIT_ASSERT_EQUAL(2,subMesh->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(7,subMesh->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(10,subMesh->getNodalConnectivity()->getNbOfElems());
+  CPPUNIT_ASSERT_EQUAL(3,subMesh->getNodalConnectivityIndex()->getNbOfElems());
+  CPPUNIT_ASSERT(std::equal(subConn,subConn+10,subMesh->getNodalConnectivity()->getPointer()));
+  CPPUNIT_ASSERT(std::equal(subConnIndex,subConnIndex+3,subMesh->getNodalConnectivityIndex()->getPointer()));
+  subMesh->decrRef();
+  //
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testEqualMesh()
+{
+  MEDCouplingUMesh *mesh1=build2DTargetMesh_1();
+  MEDCouplingUMesh *mesh2=build2DTargetMesh_1();
+  //
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh1,1e-12));
+  //
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
+  double *pt=mesh2->getCoords()->getPointer();
+  double tmp=pt[1];
+  pt[1]=5.999;
+  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
+  pt[1]=tmp;
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
+  //
+  int *pt2=mesh1->getNodalConnectivity()->getPointer();
+  pt2[5]++;
+  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
+  pt2[5]--;
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
+  //
+  pt2=mesh1->getNodalConnectivityIndex()->getPointer();
+  pt2[1]++;
+  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
+  pt2[1]--;
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
+  //
+  std::string tmp3=mesh1->getName();
+  mesh1->setName("lllll");
+  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
+  mesh1->setName(tmp3.c_str());
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
+  //
+  tmp3=mesh2->getCoords()->getInfoOnComponent(1);
+  mesh2->getCoords()->setInfoOnComponent(1,"kkkkkk");
+  CPPUNIT_ASSERT(!mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(!mesh2->isEqual(mesh1,1e-12));
+  mesh2->getCoords()->setInfoOnComponent(1,tmp3.c_str());
+  CPPUNIT_ASSERT(mesh1->isEqual(mesh2,1e-12));
+  CPPUNIT_ASSERT(mesh2->isEqual(mesh1,1e-12));
+  //
+  mesh1->decrRef();
+  mesh2->decrRef();
+}
+
+void MEDCouplingBasicsTest::testEqualFieldDouble()
+{
+  MEDCouplingUMesh *mesh1=build2DTargetMesh_1();
+  MEDCouplingUMesh *mesh2=build2DTargetMesh_1();
+  //
+  MEDCouplingFieldDouble *fieldOnCells1=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
+  fieldOnCells1->setMesh(mesh1);
+  MEDCouplingFieldDouble *fieldOnCells2=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
+  fieldOnCells2->setMesh(mesh2);
+  //
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells2->decrRef();
+  //
+  MEDCouplingFieldDouble *fieldOnNodes1=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnNodes1,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnNodes1->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnNodes1->decrRef();
+  //
+  fieldOnCells2=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells1->decrRef();
+  fieldOnCells1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells1->setTime(4.,6,7);
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells2->setTime(4.,6,7);
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells1->setName("Power");
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells2->setName("Power");
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  //
+  fieldOnCells1->setMesh(mesh1);
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells2->setMesh(mesh1);
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  DataArrayDouble *arr=DataArrayDouble::New();
+  arr->setName("popo");
+  arr->alloc(mesh1->getNumberOfCells(),3);
+  double *pt=arr->getPointer();
+  std::fill(pt,pt+mesh1->getNumberOfCells()*3,6.);
+  fieldOnCells1->setArray(arr);
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  fieldOnCells2->setArray(arr);
+  arr->decrRef();
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  //
+  DataArrayDouble *arr2=arr->deepCopy();
+  fieldOnCells2->setArray(arr2);
+  arr2->decrRef();
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  pt[4]=6.1;
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  pt[4]=6.;
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  arr2->setName("popo2");
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  //
+  arr2->setName("popo");
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  //
+  arr2->setInfoOnComponent(2,"jjj");
+  CPPUNIT_ASSERT(!fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(!fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  arr->setInfoOnComponent(2,"jjj");
+  CPPUNIT_ASSERT(fieldOnCells1->isEqual(fieldOnCells2,1e-12,1e-15));
+  CPPUNIT_ASSERT(fieldOnCells2->isEqual(fieldOnCells1,1e-12,1e-15));
+  //
+  fieldOnCells1->decrRef();
+  fieldOnCells2->decrRef();
+  //
+  mesh1->decrRef();
+  mesh2->decrRef();
+}
+
+void MEDCouplingBasicsTest::testNatureChecking()
+{
+  MEDCouplingFieldDouble *field=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
+  field->setNature(Integral);
+  field->setNature(ConservativeVolumic);
+  field->setNature(IntegralGlobConstraint);
+  field->decrRef();
+  field=MEDCouplingFieldDouble::New(ON_NODES,NO_TIME);
+  field->setNature(ConservativeVolumic);
+  CPPUNIT_ASSERT_THROW(field->setNature(Integral),INTERP_KERNEL::Exception);
+  CPPUNIT_ASSERT_THROW(field->setNature(IntegralGlobConstraint),INTERP_KERNEL::Exception);
+  field->decrRef();
+}
+
+void MEDCouplingBasicsTest::testBuildSubMeshData()
+{
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //check buildSubMesh on field on cells
+  MEDCouplingFieldDouble *fieldCells=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
+  fieldCells->setMesh(targetMesh);
+  const int elts[3]={1,2,4};
+  DataArrayInt *di;
+  MEDCouplingMesh *ret1=fieldCells->buildSubMeshData(elts,elts+3,di);
+  CPPUNIT_ASSERT_EQUAL(3,ret1->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(6,ret1->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(3,di->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(1,di->getNumberOfComponents());
+  const int *toCheck=di->getConstPointer();
+  CPPUNIT_ASSERT(std::equal(elts,elts+3,toCheck));
+  MEDCouplingUMesh *ret1DC=dynamic_cast<MEDCouplingUMesh *>(ret1);
+  CPPUNIT_ASSERT(ret1DC);
+  ret1->decrRef();
+  di->decrRef();
+  fieldCells->decrRef();
+  //check buildSubMesh on field on nodes
+  MEDCouplingFieldDouble *fieldNodes=MEDCouplingFieldDouble::New(ON_NODES,NO_TIME);
+  fieldNodes->setMesh(targetMesh);
+  MEDCouplingMesh *ret2=fieldNodes->buildSubMeshData(elts,elts+3,di);
+  MEDCouplingUMesh *ret2DC=dynamic_cast<MEDCouplingUMesh *>(ret2);
+  CPPUNIT_ASSERT(ret2DC);
+  CPPUNIT_ASSERT_EQUAL(3,ret2->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(6,ret2->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(6,di->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(1,di->getNumberOfComponents());
+  toCheck=di->getConstPointer();
+  const int expected[6]={1,2,4,5,7,8};
+  CPPUNIT_ASSERT(std::equal(expected,expected+6,toCheck));
+  ret2->decrRef();
+  di->decrRef();
+  fieldNodes->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testExtrudedMesh1()
+{
+  MEDCouplingUMesh *mesh2D=0;
+  MEDCouplingUMesh *mesh3D=build3DExtrudedUMesh_1(mesh2D);
+  MEDCouplingExtrudedMesh *ext=MEDCouplingExtrudedMesh::New(mesh3D,mesh2D,1);
+  CPPUNIT_ASSERT_EQUAL(18,ext->getNumberOfCells());
+  CPPUNIT_ASSERT_EQUAL(60,ext->getNumberOfNodes());
+  DataArrayInt *ids3D=ext->getMesh3DIds();
+  const int ids3DExpected[18]={5,4,3,2,1,0, 11,10,9,8,7,6, 17,16,15,14,13,12};
+  CPPUNIT_ASSERT_EQUAL(18,ids3D->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(1,ids3D->getNumberOfComponents());
+  CPPUNIT_ASSERT(std::equal(ids3DExpected,ids3DExpected+18,ids3D->getConstPointer()));
+  MEDCouplingUMesh *mesh1D=ext->getMesh1D();
+  CPPUNIT_ASSERT_EQUAL(4,mesh1D->getNumberOfNodes());
+  CPPUNIT_ASSERT_EQUAL(3,mesh1D->getNumberOfCells());
+  const double mesh1DExpected[12]={0.66666666666666663, 1.4583333333333333, 0, 0.66666666666666663, 1.4583333333333333, 1, 0.66666666666666663, 1.4583333333333333, 2, 0.66666666666666663, 1.4583333333333333, 3};
+  DataArrayDouble *mesh1DCoords=mesh1D->getCoords();
+  CPPUNIT_ASSERT_EQUAL(4,mesh1DCoords->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(3,mesh1DCoords->getNumberOfComponents());
+  CPPUNIT_ASSERT(std::equal(mesh1DExpected,mesh1DExpected+12,mesh1DCoords->getConstPointer()));
+  DataArrayInt *conn1D=mesh1D->getNodalConnectivity();
+  CPPUNIT_ASSERT_EQUAL(9,conn1D->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(1,conn1D->getNumberOfComponents());
+  const int conn1DExpected[9]={1,0,1,1,1,2,1,2,3};
+  CPPUNIT_ASSERT(std::equal(conn1DExpected,conn1DExpected+9,conn1D->getConstPointer()));
+  ext->decrRef();
+  mesh3D->decrRef();
+  mesh2D->decrRef();
+}
+
+void MEDCouplingBasicsTest::testFindCommonNodes()
+{
+  DataArrayInt *comm,*commI;
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  targetMesh->findCommonNodes(comm,commI,1e-10);
+  CPPUNIT_ASSERT_EQUAL(1,commI->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(0,comm->getNumberOfTuples());
+  int newNbOfNodes;
+  DataArrayInt *o2n=targetMesh->buildNewNumberingFromCommNodesFrmt(comm,commI,newNbOfNodes);
+  CPPUNIT_ASSERT_EQUAL(27,newNbOfNodes);
+  CPPUNIT_ASSERT_EQUAL(27,o2n->getNumberOfTuples());
+  const int o2nExp1[27]=
+    {
+      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
+      21,22,23,24,25,26
+    };
+  CPPUNIT_ASSERT(std::equal(o2nExp1,o2nExp1+27,o2n->getConstPointer()));
+  o2n->decrRef();
+  comm->decrRef();
+  commI->decrRef();
+  targetMesh->decrRef();
+  //
+  targetMesh=build3DTargetMeshMergeNode_1();
+  CPPUNIT_ASSERT_EQUAL(31,targetMesh->getNumberOfNodes());
+  targetMesh->findCommonNodes(comm,commI,1e-10);
+  CPPUNIT_ASSERT_EQUAL(3,commI->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(6,comm->getNumberOfTuples());
+  const int commExpected[6]={1,27,28,29,23,30};
+  const int commIExpected[3]={0,4,6};
+  CPPUNIT_ASSERT(std::equal(commExpected,commExpected+6,comm->getConstPointer()));
+  CPPUNIT_ASSERT(std::equal(commIExpected,commIExpected+3,commI->getConstPointer()));
+  o2n=targetMesh->buildNewNumberingFromCommNodesFrmt(comm,commI,newNbOfNodes);
+  CPPUNIT_ASSERT_EQUAL(31,o2n->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(27,newNbOfNodes);
+  const int o2nExp2[31]=
+    {
+      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
+      21,22,23,24,25,26,1,1,1,23
+    };
+  CPPUNIT_ASSERT(std::equal(o2nExp2,o2nExp2+31,o2n->getConstPointer()));
+  o2n->decrRef();
+  comm->decrRef();
+  commI->decrRef();
+  targetMesh->decrRef();
+  //
+  targetMesh=build3DTargetMesh_1();
+  bool areNodesMerged;
+  unsigned int time=targetMesh->getTimeOfThis();
+  o2n=targetMesh->mergeNodes(1e-10,areNodesMerged);
+  targetMesh->updateTime();
+  CPPUNIT_ASSERT(time==targetMesh->getTimeOfThis());
+  CPPUNIT_ASSERT(!areNodesMerged);
+  targetMesh->decrRef();
+  o2n->decrRef();
+  //
+  targetMesh=build3DTargetMeshMergeNode_1();
+  time=targetMesh->getTimeOfThis();
+  o2n=targetMesh->mergeNodes(1e-10,areNodesMerged);
+  targetMesh->updateTime();
+  CPPUNIT_ASSERT(time!=targetMesh->getTimeOfThis());
+  CPPUNIT_ASSERT(areNodesMerged);
+  int connExp[72]={18,0,1,4,3,9,10,13,12, 18,1,2,5,4,10,11,14,13, 18,3,4,7,6,12,13,16,15,
+                   18,4,5,8,7,13,14,17,16,
+                   18,9,10,13,12,18,19,22,21, 18,10,11,14,13,19,20,23,22, 18,12,13,16,15,21,22,25,24,
+                   18,13,14,17,16,22,23,26,25};
+  CPPUNIT_ASSERT_EQUAL(72,targetMesh->getNodalConnectivity()->getNumberOfTuples());
+  CPPUNIT_ASSERT(std::equal(connExp,connExp+72,targetMesh->getNodalConnectivity()->getConstPointer()));
+  CPPUNIT_ASSERT_EQUAL(27,targetMesh->getCoords()->getNumberOfTuples());
+  double coordsExp[81]={ 0., 0., 0., 50., 0., 0. , 200., 0., 0.  , 0., 50., 0., 50., 50., 0. ,
+                         200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
+                         0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50.,
+                         50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. ,
+                         200., 200., 50. , 0., 0., 200., 50., 0., 200. , 200., 0., 200.  
+                         , 0., 50., 200., 50., 50., 200. , 200., 50., 200., 
+                         0., 200., 200., 50., 200., 200. , 200., 200., 200. };
+  CPPUNIT_ASSERT(std::equal(coordsExp,coordsExp+81,targetMesh->getCoords()->getConstPointer()));
+  targetMesh->decrRef();
+  o2n->decrRef();
+  //2D
+  targetMesh=build2DTargetMeshMergeNode_1();
+  CPPUNIT_ASSERT_EQUAL(18,targetMesh->getNumberOfNodes());
+  time=targetMesh->getTimeOfThis();
+  o2n=targetMesh->mergeNodes(1e-10,areNodesMerged);
+  CPPUNIT_ASSERT(time!=targetMesh->getTimeOfThis());
+  CPPUNIT_ASSERT(areNodesMerged);
+  CPPUNIT_ASSERT_EQUAL(9,targetMesh->getNumberOfNodes());
+  int connExp2[23]={4,0,4,3,1, 3,1,3,2, 3,3,5,2, 4,4,6,7,3, 4,7,8,5,3};
+  CPPUNIT_ASSERT_EQUAL(23,targetMesh->getNodalConnectivity()->getNumberOfTuples());
+  CPPUNIT_ASSERT(std::equal(connExp2,connExp2+23,targetMesh->getNodalConnectivity()->getConstPointer()));
+  double coordsExp2[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, 0.2,0.2, -0.3,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7};
+  CPPUNIT_ASSERT_EQUAL(9,targetMesh->getCoords()->getNumberOfTuples());
+  CPPUNIT_ASSERT(std::equal(coordsExp2,coordsExp2+18,targetMesh->getCoords()->getConstPointer()));
+  targetMesh->decrRef();
+  o2n->decrRef();
+}
+
+void MEDCouplingBasicsTest::testCheckButterflyCells()
+{
+  std::vector<int> cells;
+  MEDCouplingUMesh *sourceMesh=build2DTargetMesh_1();
+  sourceMesh->checkButterflyCells(cells);
+  CPPUNIT_ASSERT(cells.empty());
+  int *pt=sourceMesh->getNodalConnectivity()->getPointer();
+  std::swap(pt[15],pt[16]);
+  sourceMesh->checkButterflyCells(cells);
+  CPPUNIT_ASSERT_EQUAL(1,(int)cells.size());
+  CPPUNIT_ASSERT_EQUAL(3,cells[0]);
+  cells.clear();
+  std::swap(pt[15],pt[16]);
+  sourceMesh->checkButterflyCells(cells);
+  CPPUNIT_ASSERT(cells.empty());
+  sourceMesh->decrRef();
+  // 3D surf
+  sourceMesh=build3DSurfTargetMesh_1();
+  sourceMesh->checkButterflyCells(cells);
+  CPPUNIT_ASSERT(cells.empty());
+  pt=sourceMesh->getNodalConnectivity()->getPointer();
+  std::swap(pt[15],pt[16]);
+  sourceMesh->checkButterflyCells(cells);
+  CPPUNIT_ASSERT_EQUAL(1,(int)cells.size());
+  CPPUNIT_ASSERT_EQUAL(3,cells[0]);
+  cells.clear();
+  std::swap(pt[15],pt[16]);
+  sourceMesh->checkButterflyCells(cells);
+  CPPUNIT_ASSERT(cells.empty());
+  sourceMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testMergeMesh1()
+{
+  MEDCouplingUMesh *m1=build2DTargetMesh_1();
+  MEDCouplingUMesh *m2=build2DSourceMesh_1();
+  const double vec[2]={1.,0.};
+  m2->translate(vec);
+  MEDCouplingMesh *m3=m1->mergeMyselfWith(m2);
+  MEDCouplingUMesh *m3C=dynamic_cast<MEDCouplingUMesh *>(m3);
+  CPPUNIT_ASSERT(m3C);
+  m3->checkCoherency();
+  MEDCouplingUMesh *m4=build2DTargetMeshMerged_1();
+  CPPUNIT_ASSERT(m3->isEqual(m4,1.e-12));
+  m4->decrRef();
+  bool isMerged;
+  DataArrayInt *da=m3C->mergeNodes(1.e-12,isMerged);
+  CPPUNIT_ASSERT_EQUAL(11,m3C->getNumberOfNodes());
+  CPPUNIT_ASSERT(isMerged);
+  da->decrRef();
+  m3->decrRef();
+  m1->decrRef();
+  m2->decrRef();
+}
+
+void MEDCouplingBasicsTest::testMergeField1()
+{
+  MEDCouplingUMesh *m1=build2DTargetMesh_1();
+  MEDCouplingUMesh *m2=build2DSourceMesh_1();
+  const double vec[2]={1.,0.};
+  m2->translate(vec);
+  MEDCouplingFieldDouble *f1=m1->getMeasureField(true);
+  MEDCouplingFieldDouble *f2=m2->getMeasureField(true);
+  MEDCouplingFieldDouble *f3=MEDCouplingFieldDouble::mergeFields(f1,f2);
+  f3->checkCoherency();
+  MEDCouplingUMesh *m4=build2DTargetMeshMerged_1();
+  CPPUNIT_ASSERT(f3->getMesh()->isEqual(m4,1.e-12));
+  std::string name=f3->getName();
+  CPPUNIT_ASSERT(name=="MeasureOfMesh_");
+  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_CELLS);
+  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f3->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(7,f3->getNumberOfTuples());
+  double values[7]={0.25,0.125,0.125,0.25,0.25,0.5,0.5};
+  const double *tmp=f3->getArray()->getConstPointer();
+  std::transform(tmp,tmp+7,values,values,std::minus<double>());
+  std::transform(values,values+7,values,std::ptr_fun<double,double>(fabs));
+  double max=*std::max_element(values,values+7);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  m4->decrRef();
+  f3->decrRef();
+  f1->decrRef();
+  f2->decrRef();
+  m1->decrRef();
+  m2->decrRef();
+}
+
+bool func1(const double *pt, double *res);
+bool func2(const double *pt, double *res);
+bool func3(const double *pt, double *res);
+bool func4(const double *pt, double *res);
+
+bool func1(const double *pt, double *res)
+{
+  res[0]=pt[0]+pt[1];
+  return true;
+}
+
+bool func2(const double *pt, double *res)
+{
+  res[0]=pt[0]+pt[1];
+  res[1]=2.*(pt[0]+pt[1]);
+  return true;
+}
+
+bool func3(const double *pt, double *res)
+{
+  if(fabs(pt[0]-0.2)<1e-12)
+    return false;
+  res[0]=1./(pt[0]-0.2);
+  return true;
+}
+
+void MEDCouplingBasicsTest::testFillFromAnalytic()
+{
+  MEDCouplingUMesh *m=build2DTargetMesh_1();
+  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_CELLS,1,func1);
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_CELLS);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(5,f1->getNumberOfTuples());
+  double values1[5]={-0.1,0.23333333333333336,0.56666666666666665,0.4,0.9};
+  const double *tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+5,values1,values1,std::minus<double>());
+  std::transform(values1,values1+5,values1,std::ptr_fun<double,double>(fabs));
+  double max=*std::max_element(values1,values1+5);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  //
+  f1=m->fillFromAnalytic(ON_NODES,1,func1);
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values2[9]={-0.6,-0.1,0.4,-0.1,0.4,0.9,0.4,0.9,1.4};
+  tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values2,values2,std::minus<double>());
+  std::transform(values2,values2+9,values2,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values2,values2+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  //
+  f1=m->fillFromAnalytic(ON_NODES,2,func2);
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values3[18]={-0.6,-1.2,-0.1,-0.2,0.4,0.8,-0.1,-0.2,0.4,0.8,0.9,1.8,0.4,0.8,0.9,1.8,1.4,2.8};
+  tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+18,values3,values3,std::minus<double>());
+  std::transform(values3,values3+18,values3,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values3,values3+18);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  double values4[2];
+  f1->accumulate(values4);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(3.6,values4[0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.2,values4[1],1.e-12);
+  f1->measureAccumulate(true,values4);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,values4[0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,values4[1],1.e-12);
+  f1->decrRef();
+  //
+  CPPUNIT_ASSERT_THROW(f1=m->fillFromAnalytic(ON_NODES,1,func3),INTERP_KERNEL::Exception);
+  //
+  m->decrRef();
+}
+
+void MEDCouplingBasicsTest::testFillFromAnalytic2()
+{
+  MEDCouplingUMesh *m=build2DTargetMesh_1();
+  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_CELLS,1,"y+x");
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_CELLS);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(5,f1->getNumberOfTuples());
+  double values1[5]={-0.1,0.23333333333333336,0.56666666666666665,0.4,0.9};
+  const double *tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+5,values1,values1,std::minus<double>());
+  std::transform(values1,values1+5,values1,std::ptr_fun<double,double>(fabs));
+  double max=*std::max_element(values1,values1+5);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  //
+  f1=m->fillFromAnalytic(ON_NODES,1,"y+2*x");
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values2[9]={-0.9,0.1,1.1,-0.4,0.6,1.6,0.1,1.1,2.1};
+  tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values2,values2,std::minus<double>());
+  std::transform(values2,values2+9,values2,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values2,values2+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  f1=m->fillFromAnalytic(ON_NODES,1,"2.*x+y");
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  tmp=f1->getArray()->getConstPointer();
+  double values2Bis[9]={-0.9,0.1,1.1,-0.4,0.6,1.6,0.1,1.1,2.1};
+  std::transform(tmp,tmp+9,values2Bis,values2Bis,std::minus<double>());
+  std::transform(values2,values2+9,values2Bis,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values2Bis,values2Bis+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  //
+  f1=m->fillFromAnalytic(ON_NODES,2,"(x+y)*IVec+2*(x+y)*JVec");
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values3[18]={-0.6,-1.2,-0.1,-0.2,0.4,0.8,-0.1,-0.2,0.4,0.8,0.9,1.8,0.4,0.8,0.9,1.8,1.4,2.8};
+  tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+18,values3,values3,std::minus<double>());
+  std::transform(values3,values3+18,values3,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values3,values3+18);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  double values4[2];
+  f1->accumulate(values4);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(3.6,values4[0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.2,values4[1],1.e-12);
+  f1->measureAccumulate(true,values4);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,values4[0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,values4[1],1.e-12);
+  f1->decrRef();
+  //
+  CPPUNIT_ASSERT_THROW(f1=m->fillFromAnalytic(ON_NODES,1,"1./(x-0.2)"),INTERP_KERNEL::Exception);
+  //
+  m->decrRef();
+}
+
+void MEDCouplingBasicsTest::testApplyFunc()
+{
+  MEDCouplingUMesh *m=build2DTargetMesh_1();
+  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,2,func2);
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  f1->applyFunc(1,func1);
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values1[9]={-1.8,-0.3,1.2,-0.3,1.2,2.7,1.2,2.7,4.2};
+  const double *tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values1,values1,std::minus<double>());
+  std::transform(values1,values1+9,values1,std::ptr_fun<double,double>(fabs));
+  double max=*std::max_element(values1,values1+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  m->decrRef();
+}
+
+void MEDCouplingBasicsTest::testApplyFunc2()
+{
+  MEDCouplingUMesh *m=build2DTargetMesh_1();
+  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,2,func2);
+  f1->checkCoherency();
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  //
+  MEDCouplingFieldDouble *f2=f1->clone(true);
+  f2->applyFunc("abs(u)^2.4+2*u");
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(2,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values2[18]={-0.9065304805418678, -0.85105859001709905, -0.19601892829446504, -0.37898777756476987,
+                      0.91090317490482353, 2.1853504664669781, -0.19601892829446504, -0.37898777756476987,
+                      0.91090317490482353, 2.1853504664669781, 2.5765725275664879, 7.6987743736515295,
+                      0.91090317490482353, 2.1853504664669781, 2.5765725275664879, 7.6987743736515295,
+                      5.0423700574830965, 17.435300118916864};
+  const double *tmp=f2->getArray()->getConstPointer();
+  std::transform(tmp,tmp+18,values2,values2,std::minus<double>());
+  std::transform(values2,values2+18,values2,std::ptr_fun<double,double>(fabs));
+  double max=*std::max_element(values2,values2+18);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f2->decrRef();
+  //
+  f1->applyFunc(1,"x+y");
+  CPPUNIT_ASSERT(f1->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f1->getTimeDiscretization()==NO_TIME);
+  CPPUNIT_ASSERT_EQUAL(1,f1->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f1->getNumberOfTuples());
+  double values1[9]={-1.8,-0.3,1.2,-0.3,1.2,2.7,1.2,2.7,4.2};
+  tmp=f1->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values1,values1,std::minus<double>());
+  std::transform(values1,values1+9,values1,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values1,values1+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f1->decrRef();
+  m->decrRef();
+}
+
+void MEDCouplingBasicsTest::testOperationsOnFields()
+{
+  MEDCouplingUMesh *m=build2DTargetMesh_1();
+  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,1,func1);
+  MEDCouplingFieldDouble *f2=m->fillFromAnalytic(ON_NODES,1,func1);
+  f1->checkCoherency();
+  f2->checkCoherency();
+  MEDCouplingFieldDouble *f3=(*f1)+(*f2);
+  f3->checkCoherency();
+  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
+  double values1[9]={-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8};
+  const double *tmp=f3->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values1,values1,std::minus<double>());
+  std::transform(values1,values1+9,values1,std::ptr_fun<double,double>(fabs));
+  double max=*std::max_element(values1,values1+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f3->decrRef();
+  //
+  f3=(*f1)*(*f2);
+  f3->checkCoherency();
+  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
+  double values2[9]={0.36,0.01,0.16,0.01,0.16,0.81,0.16,0.81,1.96};
+  tmp=f3->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values2,values2,std::minus<double>());
+  std::transform(values2,values2+9,values2,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values2,values2+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f3->decrRef();
+  //
+  f3=(*f1)+(*f2);
+  MEDCouplingFieldDouble *f4=(*f1)-(*f3);
+  f4->checkCoherency();
+  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f4->getTimeDiscretization()==NO_TIME);
+  double values3[9]={0.6,0.1,-0.4,0.1,-0.4,-0.9,-0.4,-0.9,-1.4};
+  tmp=f4->getArray()->getConstPointer();
+  std::transform(tmp,tmp+9,values3,values3,std::minus<double>());
+  std::transform(values3,values3+9,values3,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values3,values3+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f3->decrRef();
+  f4->decrRef();
+  //
+  f3=(*f1)+(*f2);
+  f4=(*f3)/(*f2);
+  f4->checkCoherency();
+  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f4->getTimeDiscretization()==NO_TIME);
+  tmp=f4->getArray()->getConstPointer();
+  for(int i=0;i<9;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,tmp[i],1.e-12);
+  f3->decrRef();
+  f4->decrRef();
+  //
+  f4=f2->buildNewTimeReprFromThis(ONE_TIME,false);
+  f4->checkCoherency();
+  CPPUNIT_ASSERT(f4->getArray()==f2->getArray());
+  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f4->getTimeDiscretization()==ONE_TIME);
+  CPPUNIT_ASSERT_THROW(f3=(*f1)+(*f4),INTERP_KERNEL::Exception);
+  MEDCouplingFieldDouble *f5=f4->buildNewTimeReprFromThis(NO_TIME,false);
+  CPPUNIT_ASSERT(f4->getArray()==f5->getArray());
+  CPPUNIT_ASSERT(f5->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f5->getTimeDiscretization()==NO_TIME);
+  f3=(*f1)+(*f5);
+  tmp=f3->getArray()->getConstPointer();
+  double values4[9]={-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8};
+  std::transform(tmp,tmp+9,values4,values4,std::minus<double>());
+  std::transform(values4,values4+9,values4,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values4,values4+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f5->decrRef();
+  f4->decrRef();
+  f3->decrRef();
+  //
+  f4=f2->buildNewTimeReprFromThis(ONE_TIME,true);
+  f4->checkCoherency();
+  CPPUNIT_ASSERT(f4->getArray()!=f2->getArray());
+  CPPUNIT_ASSERT(f4->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f4->getTimeDiscretization()==ONE_TIME);
+  CPPUNIT_ASSERT_THROW(f3=(*f1)+(*f4),INTERP_KERNEL::Exception);
+  f5=f4->buildNewTimeReprFromThis(NO_TIME,true);
+  CPPUNIT_ASSERT(f4->getArray()!=f5->getArray());
+  CPPUNIT_ASSERT(f2->getArray()!=f5->getArray());
+  CPPUNIT_ASSERT(f5->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f5->getTimeDiscretization()==NO_TIME);
+  f3=(*f1)+(*f5);
+  tmp=f3->getArray()->getConstPointer();
+  double values5[9]={-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8};
+  std::transform(tmp,tmp+9,values5,values5,std::minus<double>());
+  std::transform(values5,values5+9,values5,std::ptr_fun<double,double>(fabs));
+  max=*std::max_element(values5,values5+9);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,max,1.e-12);
+  f5->decrRef();
+  f4->decrRef();
+  f3->decrRef();
+  //
+  f1->decrRef();
+  f2->decrRef();
+  m->decrRef();
+}
+
+void MEDCouplingBasicsTest::testOperationsOnFields2()
+{
+  MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
+  MEDCouplingFieldDouble *f1=m->fillFromAnalytic(ON_NODES,1,"x+y+z");
+  MEDCouplingFieldDouble *f2=m->fillFromAnalytic(ON_NODES,1,"a*a+b+c*c");
+  MEDCouplingFieldDouble *f3=(*f1)/(*f2);
+  f3->checkCoherency();
+  CPPUNIT_ASSERT(f3->getTypeOfField()==ON_NODES);
+  CPPUNIT_ASSERT(f3->getTimeDiscretization()==NO_TIME);
+  const double expected1[9]={-2.4999999999999991, 1.2162162162162162, 0.77868852459016391,
+                             0.7407407407407407, 1.129032258064516, 0.81632653061224492,
+                             0.86538461538461531, 1.0919540229885056, 0.84302325581395343};
+  CPPUNIT_ASSERT_EQUAL(1,f3->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(9,f3->getNumberOfTuples());
+  const double *val=f3->getArray()->getConstPointer();
+  for(int i=0;i<9;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],val[i],1.e-12);
+  f3->decrRef();
+  f1->decrRef();
+  f2->decrRef();
+  m->decrRef();
+}
+
+bool func4(const double *pt, double *res)
+{
+  res[0]=pt[0]+pt[1]+pt[2];
+  return true;
+}
+
+void MEDCouplingBasicsTest::testMergeNodesOnField()
+{
+  double *tmp;
+  MEDCouplingUMesh *targetMesh=build3DTargetMeshMergeNode_1();
+  MEDCouplingFieldDouble *f1=targetMesh->fillFromAnalytic(ON_NODES,1,func4);
+  f1->mergeNodes(1e-10);
+  f1->decrRef();
+  targetMesh->decrRef();
+  //
+  targetMesh=build3DTargetMeshMergeNode_1();
+  f1=targetMesh->fillFromAnalytic(ON_NODES,1,func4);
+  tmp=f1->getArray()->getPointer();
+  tmp[0]=1000.;
+  f1->mergeNodes(1e-10);
+  f1->decrRef();
+  targetMesh->decrRef();
+  //
+  targetMesh=build3DTargetMeshMergeNode_1();
+  f1=targetMesh->fillFromAnalytic(ON_NODES,1,func4);
+  tmp=f1->getArray()->getPointer();
+  tmp[1]=1000.;
+  CPPUNIT_ASSERT_THROW(f1->mergeNodes(1e-10),INTERP_KERNEL::Exception);
+  f1->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testCheckConsecutiveCellTypes()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  CPPUNIT_ASSERT(sourceMesh->checkConsecutiveCellTypes());
+  CPPUNIT_ASSERT(!targetMesh->checkConsecutiveCellTypes());
+  targetMesh->decrRef();
+  sourceMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testBuildOrthogonalField()
+{
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  MEDCouplingFieldDouble *field=targetMesh->buildOrthogonalField();
+  double expected[3]={0.70710678118654746,0.,-0.70710678118654746};
+  CPPUNIT_ASSERT_EQUAL(5,field->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(3,field->getNumberOfComponents());
+  const double *vals=field->getArray()->getConstPointer();
+  for(int i=0;i<15;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected[i%3],vals[i],1e-12);
+  field->decrRef();
+  targetMesh->decrRef();
+  // testing 
+  double targetCoords[12]={0.,0.,0.,0.5,0.,0.5,1.,0.,1.,0.,1.,0.};
+  int targetConn[4]={0,1,2,3};
+  targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(1);
+  targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
+  targetMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(4,3);
+  std::copy(targetCoords,targetCoords+12,myCoords->getPointer());
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  field=targetMesh->buildOrthogonalField();
+  CPPUNIT_ASSERT_EQUAL(1,field->getNumberOfTuples());
+  CPPUNIT_ASSERT_EQUAL(3,field->getNumberOfComponents());
+  vals=field->getArray()->getConstPointer();
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.70710678118654746,vals[0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,vals[1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.70710678118654746,vals[2],1e-12);
+  field->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testGetElementsContainingPoint()
+{
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  double pos[12]={0.,0.,0.4,0.4,0.,0.4,0.1,0.1,0.25,0.,0.65,0.};
+  std::vector<int> t1,t2;
+  //2D basic
+  targetMesh->getElementsContainingPoints(pos,6,1e-12,t1,t2);
+  CPPUNIT_ASSERT_EQUAL(6,(int)t1.size());
+  CPPUNIT_ASSERT_EQUAL(7,(int)t2.size());
+  const int expectedValues1[6]={0,4,3,0,1,2};
+  const int expectedValues2[7]={0,1,2,3,4,5,6};
+  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues1));
+  CPPUNIT_ASSERT(std::equal(t2.begin(),t2.end(),expectedValues2));
+  //2D with no help of bounding box.
+  double center[2]={0.2,0.2};
+  MEDCouplingPointSet::rotate2DAlg(center,0.78539816339744830962,6,pos);
+  targetMesh->rotate(center,0,0.78539816339744830962);
+  t1.clear(); t2.clear();
+  targetMesh->getElementsContainingPoints(pos,6,1e-12,t1,t2);
+  CPPUNIT_ASSERT_EQUAL(6,(int)t1.size());
+  CPPUNIT_ASSERT_EQUAL(7,(int)t2.size());
+  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues1));
+  CPPUNIT_ASSERT(std::equal(t2.begin(),t2.end(),expectedValues2));
+  //2D outside
+  const double pos1bis[2]={-0.3303300858899107,-0.11819805153394641};
+  CPPUNIT_ASSERT_EQUAL(-1,targetMesh->getElementContainingPoint(pos1bis,1e-12));
+  targetMesh->decrRef();
+  //test limits 2D
+  targetMesh=build2DTargetMesh_1();
+  const double pos2[2]={0.2,-0.05};
+  t1.clear();
+  targetMesh->getElementsContainingPoint(pos2,1e-12,t1);
+  CPPUNIT_ASSERT_EQUAL(2,(int)t1.size());
+  const int expectedValues3[2]={0,1};
+  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues3));
+  const double pos3[2]={0.2,0.2};
+  t1.clear();
+  targetMesh->getElementsContainingPoint(pos3,1e-12,t1);
+  CPPUNIT_ASSERT_EQUAL(5,(int)t1.size());
+  const int expectedValues4[5]={0,1,2,3,4};
+  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues4));
+  CPPUNIT_ASSERT_EQUAL(0,targetMesh->getElementContainingPoint(pos3,1e-12));
+  targetMesh->decrRef();
+  //3D
+  targetMesh=build3DTargetMesh_1();
+  const double pos4[3]={25.,25.,25.};
+  CPPUNIT_ASSERT_EQUAL(0,targetMesh->getElementContainingPoint(pos4,1e-12));
+  const double pos5[3]={50.,50.,50.};
+  t1.clear();
+  targetMesh->getElementsContainingPoint(pos5,1e-12,t1);
+  CPPUNIT_ASSERT_EQUAL(8,(int)t1.size());
+  const int expectedValues5[8]={0,1,2,3,4,5,6,7};
+  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues5));
+  const double pos6[3]={0., 50., 0.};
+  t1.clear();
+  targetMesh->getElementsContainingPoint(pos6,1e-12,t1);
+  CPPUNIT_ASSERT_EQUAL(2,(int)t1.size());
+  const int expectedValues6[2]={0,2};
+  CPPUNIT_ASSERT(std::equal(t1.begin(),t1.end(),expectedValues6));
+  //3D outside
+  const double pos7[3]={-1.0,-1.0,0.};
+  CPPUNIT_ASSERT_EQUAL(-1,targetMesh->getElementContainingPoint(pos7,1e-12));
+  //3D outside 2
+  const double center2[3]={0.,0.,0.};
+  const double vec2[3]={0.,-1.,0.};
+  targetMesh->rotate(center2,vec2,0.78539816339744830962);
+  const double pos8[3]={-25,25.,12.};
+  CPPUNIT_ASSERT_EQUAL(-1,targetMesh->getElementContainingPoint(pos8,1e-12));
+  //
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testGetValueOn1()
+{
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  MEDCouplingFieldDouble *fieldOnCells=MEDCouplingFieldDouble::New(ON_CELLS);
+  int nbOfCells=targetMesh->getNumberOfCells();
+  fieldOnCells->setMesh(targetMesh);
+  DataArrayDouble *array=DataArrayDouble::New();
+  array->alloc(nbOfCells,2);
+  fieldOnCells->setArray(array);
+  double *tmp=array->getPointer();
+  for(int i=0;i<nbOfCells;i++)
+    { tmp[2*i]=7.+(double)i; tmp[2*i+1]=17.+(double)i; }
+  array->decrRef();
+  //
+  const double pos1[2]={0.25,0.};
+  double res[2];
+  fieldOnCells->getValueOn(pos1,res);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8.,res[0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(18.,res[1],1e-12);
+  //
+  fieldOnCells->decrRef();
+  targetMesh->decrRef();
+  //
+  targetMesh=build2DSourceMesh_1();
+  MEDCouplingFieldDouble *fieldOnNodes=MEDCouplingFieldDouble::New(ON_NODES);
+  int nbOfNodes=targetMesh->getNumberOfNodes();
+  fieldOnNodes->setMesh(targetMesh);
+  array=DataArrayDouble::New();
+  array->alloc(nbOfNodes,2);
+  fieldOnNodes->setArray(array);
+  tmp=array->getPointer();
+  for(int i=0;i<nbOfNodes;i++)
+    { tmp[2*i]=17.+(double)i; tmp[2*i+1]=27.+(double)i; }
+  array->decrRef();
+  //
+  const double pos2[2]={-0.13333333333333333,-0.13333333333333333};
+  fieldOnNodes->getValueOn(pos2,res);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(17.5,res[0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(27.5,res[1],1e-12);
+  const double pos3[2]={0.033333333333333326,0.36666666666666664};
+  fieldOnNodes->getValueOn(pos3,res);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(18.666666666666667,res[0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(28.666666666666667,res[1],1e-12);
+  //
+  fieldOnNodes->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testCMesh0()
+{
+  MEDCouplingCMesh* mesh=MEDCouplingCMesh::New();
+  DataArrayDouble* coordsX=DataArrayDouble::New();
+  double arrX[4] = { -1., 1., 2., 4. };
+  coordsX->useArray(arrX,false, CPP_DEALLOC,4,1);
+  DataArrayDouble* coordsY=DataArrayDouble::New();
+  double arrY[4] = { -2., 2., 4., 8. };
+  coordsY->useArray(arrY,false, CPP_DEALLOC,4,1);
+  DataArrayDouble* coordsZ=DataArrayDouble::New();
+  double arrZ[4] = { -3., 3., 6., 12. };
+  coordsZ->useArray(arrZ,false, CPP_DEALLOC,4,1);
+  mesh->setCoords(coordsX,coordsY,coordsZ);
+  coordsX->decrRef();
+  coordsY->decrRef();
+  coordsZ->decrRef();
+  //
+  MEDCouplingFieldDouble *fieldOnNodes=mesh->fillFromAnalytic(ON_NODES,1,"x+y/2.+z/3.");
+  CPPUNIT_ASSERT_EQUAL(1,fieldOnNodes->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(64,fieldOnNodes->getNumberOfTuples());
+  const double expected1[64]={-3., -1., 0., 2., -1., 1., 2., 4., 0., 2., 3., 5., 2., 4., 5., 7., -1., 1., 2.,
+                              4., 1., 3., 4., 6., 2., 4., 5., 7., 4., 6., 7., 9., 0., 2., 3., 5., 2., 4., 5.,
+                              7., 3., 5., 6., 8., 5., 7., 8., 10., 2., 4., 5.,
+                              7., 4., 6., 7., 9., 5., 7., 8., 10., 7., 9., 10., 12.};
+  const double *val=fieldOnNodes->getArray()->getConstPointer();
+  for(int i=0;i<64;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],val[i],1e-12);
+  double res;
+  fieldOnNodes->getValueOnPos(1,3,2,&res);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,res,1e-12);
+  fieldOnNodes->decrRef();
+  //
+  MEDCouplingFieldDouble *fieldOnCells=mesh->fillFromAnalytic(ON_CELLS,1,"x+y/2.+z/3.");
+  CPPUNIT_ASSERT_EQUAL(1,fieldOnCells->getNumberOfComponents());
+  CPPUNIT_ASSERT_EQUAL(27,fieldOnCells->getNumberOfTuples());
+  val=fieldOnCells->getArray()->getConstPointer();
+  const double expected2[27]={0, 1.5, 3, 1.5, 3, 4.5, 3, 4.5, 6, 1.5, 3, 4.5, 3, 4.5,
+                              6, 4.5, 6, 7.5, 3, 4.5, 6, 4.5, 6, 7.5, 6, 7.5, 9};
+  for(int i=0;i<27;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],val[i],1e-12);
+  fieldOnCells->getValueOnPos(1,2,1,&res);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(6.,res,1e-12);
+  fieldOnCells->decrRef();
+  //
+  mesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testScale()
+{
+  MEDCouplingUMesh *mesh=build2DTargetMesh_1();
+  const double pos[2]={0.2,0.2};
+  mesh->scale(pos,0.5);
+  const double expected1[18]={-0.05,-0.05, 0.2,-0.05, 0.45,-0.05, -0.05,0.2, 0.2,0.2, 0.45,0.2,
+                              -0.05,0.45, 0.2,0.45, 0.45,0.45};
+  const double *val=mesh->getCoords()->getConstPointer();
+  for(int i=0;i<18;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],val[i],1e-12);
+  //
+  mesh->decrRef();
+}
diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx
new file mode 100644 (file)
index 0000000..e6c03f0
--- /dev/null
@@ -0,0 +1,2020 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "MEDCouplingBasicsTest.hxx"
+#include "MEDCouplingUMesh.hxx"
+#include "MEDCouplingExtrudedMesh.hxx"
+#include "MEDCouplingFieldDouble.hxx"
+#include "MEDCouplingMemArray.hxx"
+#include "Interpolation2D.txx"
+#include "Interpolation3DSurf.txx"
+#include "Interpolation3D.txx"
+#include "InterpolationCC.txx"
+#include "InterpolationCU.txx"
+
+#include "MEDCouplingNormalizedUnstructuredMesh.txx"
+#include "MEDCouplingNormalizedCartesianMesh.txx"
+
+#include <cmath>
+#include <functional>
+
+using namespace std;
+using namespace ParaMEDMEM;
+
+void MEDCouplingBasicsTest::test2DInterpP0P0_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[3]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Convex, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<3;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[2][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[4][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[4][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  //
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  //
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P0PL_2()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  std::vector<int> cellsIds(targetMesh->getNumberOfCells());
+  for(int i=0;i<targetMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  targetMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  //
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  //
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P0PL_3()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
+  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  sourceMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  //
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  //
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P0PL_4()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
+  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  sourceMesh->convertToPolyTypes(cellsIds);
+  cellsIds.resize(targetMesh->getNumberOfCells());
+  for(int i=0;i<targetMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  targetMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  //
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  //
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P1_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[3]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Convex, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<3;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
+      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[0][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329,res[2][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[3][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[4][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[4][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[5][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329,res[6][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[7][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[8][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[8][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25,sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P1PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<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][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(12.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0P1PL_2()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
+  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  sourceMesh->convertToPolyTypes(cellsIds);
+  //
+  cellsIds.resize(targetMesh->getNumberOfCells());
+  for(int i=0;i<targetMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  targetMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<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][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(12.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1P0_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[3][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333,res[1][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333,res[2][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666667,res[3][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[2][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[3][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[4][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[1][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[2][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[4][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1P0PL_2()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  std::vector<int >cellsIds(targetMesh->getNumberOfCells());
+  for(int i=0;i<targetMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  targetMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[1][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[2][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[4][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1P1_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_2();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
+      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334,res[0][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665,res[1][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666,res[1][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334,res[2][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665,res[3][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666668,res[3][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.1416666666666666,res[4][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999,res[4][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999,res[4][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09999999999999999,res[4][3],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666,res[5][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333333,res[5][3],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333333,res[6][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666667,res[7][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333331,res[7][3],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.04166666666666668,res[8][3],1.e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1P1PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
+  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[0][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][1],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[2][1],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][2],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][1],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][2],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][2],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[8][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(25.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP0P0_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[3]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Convex, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<3;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP0P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP0P1_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P1");
+      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[0][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329*sqrt(2.),res[2][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[3][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[4][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[4][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[5][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333329*sqrt(2.),res[6][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[7][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[8][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[8][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.25*sqrt(2.),sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP0P1PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<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][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[8][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(12.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP1P0_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[3][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333*sqrt(2.),res[1][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.083333333333333333*sqrt(2.),res[2][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666667*sqrt(2.),res[3][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[2][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[3][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[4][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP1P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[1][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[1][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.166666666666666666,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[2][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.333333333333333333,res[2][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[3][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res[4][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.5,res[4][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(7.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP1P1_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_2();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
+      CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334*sqrt(2.),res[0][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665*sqrt(2.),res[1][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666*sqrt(2.),res[1][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333334*sqrt(2.),res[2][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.05416666666666665*sqrt(2.),res[3][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666668*sqrt(2.),res[3][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.1416666666666666*sqrt(2.),res[4][0],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999*sqrt(2.),res[4][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02499999999999999*sqrt(2.),res[4][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09999999999999999*sqrt(2.),res[4][3],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666666*sqrt(2.),res[5][1],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333333*sqrt(2.),res[5][3],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.08333333333333333*sqrt(2.),res[6][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.02916666666666667*sqrt(2.),res[7][2],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.09583333333333331*sqrt(2.),res[7][3],1.e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.04166666666666668*sqrt(2.),res[8][3],1.e-12);
+      res.clear();
+    }
+  //
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP1P1PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
+  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[0][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[1][1],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[2][1],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][2],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][0],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(5.,res[4][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][1],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][2],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][2],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[8][3],1.e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(25.,sumAll(res),1e-12);
+  res.clear();
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP0P0_2()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMeshPerm_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::Triangulation);
+  {
+    myInterpolator.setOrientation(2);
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
+    res.clear();
+  }
+  {
+    myInterpolator.setOrientation(0);
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.125*sqrt(2.),res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.75*sqrt(2.),sumAll(res),1e-12);
+    res.clear();
+  }
+  {
+    myInterpolator.setOrientation(1);
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[4][1],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.875*sqrt(2.),sumAll(res),1e-12);
+    res.clear();
+  }
+  {
+    myInterpolator.setOrientation(-1);
+    myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+    CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),sumAll(res),1e-12);
+    res.clear();
+  }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+/*!
+ * Test of precision option implemented by Fabien that represents distance of "barycenter" to the other cell.
+ */
+void MEDCouplingBasicsTest::test3DSurfInterpP0P0_3()
+{
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  vector<map<int,double> > res;
+  double vecTrans[3]={0.,0.,1.e-10};
+  double vec[3]={0.,-1.,0.};
+  double pt[3]={-0.3,-0.3,5.e-11};
+  const int N=32;
+  const double deltaA=M_PI/N;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::Triangulation);
+  myInterpolator.setMaxDistance3DSurfIntersect(1e-9);
+  for(int i=0;i<N;i++)
+    {
+      res.clear();
+      MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_2();
+      sourceMesh->rotate(pt,vec,i*deltaA);
+      MEDCouplingUMesh *targetMesh=build3DSurfSourceMesh_2();
+      targetMesh->translate(vecTrans);
+      targetMesh->rotate(pt,vec,i*deltaA);
+      MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+      MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+      CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+      sourceMesh->decrRef();
+      targetMesh->decrRef();
+    }
+  //
+  myInterpolator.setMaxDistance3DSurfIntersect(1e-11);
+  for(int i=0;i<N;i++)
+    {
+      res.clear();
+      MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_2();
+      sourceMesh->rotate(pt,vec,i*deltaA);
+      MEDCouplingUMesh *targetMesh=build3DSurfSourceMesh_2();
+      targetMesh->translate(vecTrans);
+      targetMesh->rotate(pt,vec,i*deltaA);
+      MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+      MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+      CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,sumAll(res),1e-12);
+      sourceMesh->decrRef();
+      targetMesh->decrRef();
+    }
+  //
+  res.clear();
+  myInterpolator.setMaxDistance3DSurfIntersect(-1.);//unactivate fabien lookup
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_2();
+  MEDCouplingUMesh *targetMesh=build3DSurfSourceMesh_2();
+  targetMesh->translate(vecTrans);
+  myInterpolator.setBoundingBoxAdjustment(1e-11);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper0(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper0(targetMesh);
+  myInterpolator.interpolateMeshes(sourceWrapper0,targetWrapper0,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,sumAll(res),1e-12);
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+  //
+  res.clear();
+  sourceMesh=build3DSurfSourceMesh_2();
+  targetMesh=build3DSurfSourceMesh_2();
+  targetMesh->translate(vecTrans);
+  myInterpolator.setBoundingBoxAdjustment(1e-9);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper1(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper1(targetMesh);
+  myInterpolator.interpolateMeshes(sourceWrapper1,targetWrapper1,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+  //keeping the same bbox adj == 1.e-11 but trying rotation
+  res.clear();
+  sourceMesh=build3DSurfSourceMesh_2();
+  sourceMesh->rotate(pt,vec,M_PI/4.);
+  targetMesh=build3DSurfSourceMesh_2();
+  targetMesh->translate(vecTrans);
+  targetMesh->rotate(pt,vec,M_PI/4.);
+  myInterpolator.setBoundingBoxAdjustment(1e-11);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper2(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper2(targetMesh);
+  myInterpolator.interpolateMeshes(sourceWrapper2,targetWrapper2,res,"P0P0");
+  CPPUNIT_ASSERT_EQUAL(2,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P0_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P0PL_2()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  std::vector<int> cellsIds(targetMesh->getNumberOfCells());
+  for(int i=0;i<targetMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  targetMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P0PL_3()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
+  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  sourceMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P0PL_4()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  std::vector<int> cellsIds(sourceMesh->getNumberOfCells());
+  for(int i=0;i<sourceMesh->getNumberOfCells();i++)
+    cellsIds[i]=i;
+  sourceMesh->convertToPolyTypes(cellsIds);
+  cellsIds.resize(targetMesh->getNumberOfCells());
+  for(int j=0;j<targetMesh->getNumberOfCells();j++)
+    cellsIds[j]=j;
+  targetMesh->convertToPolyTypes(cellsIds);
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P1_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DTargetMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSourceMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P1PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DTargetMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSourceMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP1P0_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP1P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP1P1_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_2();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_2();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
+  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+  double res3D[8][28]= {{124999.999883775978, 245370.370390364464, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 203703.703634892299, 187500.000094145857, 0.0, 0.0, 4629.6296266718, 0.0, 215277.777751402784, 209722.222322299582, 0.0, 0.0, 0.0, 0.0, 104166.666590829205, 121296.296368812196, 0.0, 250000.000003472145},
+                        {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 120370.370368827047, 0.0, 0.0, 38888.888897777797, 0.0, 0.0, 45370.3703701697596, 0.0, 0.0, 45370.3703701697596, 83333.3333263888926, 0.0},
+                        {0.0, 0.0, 0.0, 97222.2222222221753, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 97222.2222222221608, 0.0, 97222.2222222222044, 41666.6666666666642, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
+                        {0.0, 277777.777787084982, 199074.074074073927, 0.0, 0.0, 0.0, 4629.62962962962774, 0.0, 321759.259254934732, 83333.3333333333139, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4629.62962667180363, 0.0, 0.0, 251388.88888319055, 194444.444454861077, 0.0, 79629.6296194135939, 250000.000003472145, 0.0, 0.0, 0.0, 0.0},
+                        {0.0, 0.0, 0.0, 0.0, 85185.1851851851534, 4629.62962962962774, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 118518.518518518511, 0.0, 41666.6666666666642, 83333.3333333333285, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
+                        {0.0, 324074.07407629228, 0.0, 0.0, 0.0, 247685.185185184964, 6481.48148148147993, 0.0, 173611.11111196311, 0.0, 164814.814814814832, 0.0, 4629.62962962962865, 208333.33333418527, 0.0, 83333.3333333333285, 203703.703697273799, 249999.999999999767, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
+                        {125000.000000000015, 423611.111111110775, 134259.259259259241, 194444.444444444351, 164814.814814814745, 164351.851851851825, 203703.703703703592, 249999.999999999825, 0.0, 0.0, 0.0, 0.0, 6481.48148148147902, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
+                        {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 118518.518518518453, 0.0, 4629.62962962962956, 83333.3333333333139, 85185.1851851851825, 41666.6666666666642, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}};
+  int i=0;
+  double sum = 0;
+  //cout.precision(18);
+  for(std::vector<std::map<int,double> >::const_iterator iter1=res.begin();iter1!=res.end();iter1++,i++)
+    {
+      //cout<< "res3D[" <<i<< "][]={";
+      for(int j=0;j<28;j++)
+        {
+          std::map<int,double>::const_iterator iter2=(*iter1).find(j);
+          if(iter2!=(*iter1).end())
+            {
+              //cout<< iter2->second<< ", ";
+              sum += iter2->second;
+              CPPUNIT_ASSERT_DOUBLES_EQUAL(res3D[i][j],(*iter2).second,1.e-5);
+            }
+          else
+            {
+              //cout << "0.0, ";
+              CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res3D[i][j],1e-14);
+            }
+        }
+      //cout << "}" << endl;
+    }
+  //cout << "Sum = " << sum << endl;
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000,sum,1.e-5);
+  //clean-up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP1P1PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_2();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_2();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.setIntersectionType(INTERP_KERNEL::PointLocator);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P1");
+  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(20.,res[0][24],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2.,res[1][26],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][21],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(24.,res[3][23],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][14],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(24.,res[5][17],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(24.,res[6][7],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][11],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(97.,sumAll(res),1e-12);
+  //clean-up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0P0Empty()
+{
+  MEDCouplingUMesh *sourceMesh=MEDCouplingUMesh::New();
+  sourceMesh->setMeshDimension(2);
+  sourceMesh->allocateCells(0);
+  sourceMesh->finishInsertingCells();
+  DataArrayDouble *myCoords=DataArrayDouble::New();
+  myCoords->alloc(0,0);
+  sourceMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
+  targetMesh->setMeshDimension(2);
+  targetMesh->allocateCells(0);
+  targetMesh->finishInsertingCells();
+  myCoords=DataArrayDouble::New();
+  myCoords->alloc(0,2);
+  targetMesh->setCoords(myCoords);
+  myCoords->decrRef();
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::testInterpolationCC()
+{
+  double arr1[3] = { 0/2., 1/2., 2/2. };
+  double arr2[4] = { 0/3, 1/3., 2/3., 3/3. };
+  MEDCouplingCMesh* mesh[2];
+  for ( int i = 0; i < 2; ++i )
+    {
+      const double* arr = i ? arr1 : arr2;
+      const int nb_coord = i ? 3 : 4;
+      DataArrayDouble* coords = DataArrayDouble::New();
+      coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, nb_coord, 1 );
+
+      mesh[i] = MEDCouplingCMesh::New();
+      mesh[i]->setCoords( coords, coords, coords );
+      coords->decrRef();
+    }
+  MEDCouplingNormalizedCartesianMesh<3> targetWrapper(mesh[1]);
+  MEDCouplingNormalizedCartesianMesh<3> sourceWrapper(mesh[0]);
+  CPPUNIT_ASSERT_EQUAL( 27,int( sourceWrapper.getNumberOfElements()));
+  CPPUNIT_ASSERT_EQUAL( 3, int( sourceWrapper.nbCellsAlongAxis(0)));
+  CPPUNIT_ASSERT_EQUAL( 3, int( sourceWrapper.nbCellsAlongAxis(1)));
+  CPPUNIT_ASSERT_EQUAL( 3, int( sourceWrapper.nbCellsAlongAxis(2)));
+  CPPUNIT_ASSERT_THROW( sourceWrapper.nbCellsAlongAxis(3), INTERP_KERNEL::Exception);
+
+  INTERP_KERNEL::InterpolationCC myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+
+  CPPUNIT_ASSERT_EQUAL(8,int( res.size()));
+  CPPUNIT_ASSERT_EQUAL(8,int( res[0].size()));
+  const double precis = 1e-7;
+  set<double> vals;
+  double sum = 0;
+  for ( int i = 0; i < (int)res.size(); ++i )
+    for ( map<int,double>::iterator s_v = res[i].begin(); s_v != res[i].end(); ++s_v)
+      {
+        sum += s_v->second;
+        double vvv;
+#ifdef WNT
+        double vv = s_v->second / precis;
+        if(vv>=0.0)
+          {
+            vvv = floor(vv+0.5);
+          }
+        else
+          {
+            vvv = ceil(vv-0.5);
+          }
+#else
+        vvv = round( s_v->second / precis );
+#endif
+        vals.insert( precis * vvv );
+      }
+  //cout << "tgt: " << i << " src: " << s_v->first << " - w: " << s_v->second << endl;
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, sum, precis );
+
+  set<double>::iterator v = vals.begin();
+  CPPUNIT_ASSERT_EQUAL( 4, int( vals.size()) );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00462963, *v++, precis );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00925926, *v++, precis );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.01851850, *v++, precis );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703700, *v++, precis );
+
+  mesh[0]->decrRef();
+  mesh[1]->decrRef();
+}
+
+void MEDCouplingBasicsTest::testInterpolationCU1D()
+{
+  MEDCouplingCMesh* meshC = MEDCouplingCMesh::New();
+  DataArrayDouble* coords = DataArrayDouble::New();
+  double arr[4] = { -1/3., 1/3., 2/3., 4/3. };
+  coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, 4, 1 );
+  meshC->setCoords( coords );
+  coords->decrRef();
+
+  MEDCouplingUMesh * meshU = buildCU1DMesh_U();
+
+  MEDCouplingNormalizedCartesianMesh<1>      sourceWrapper(meshC);
+  MEDCouplingNormalizedUnstructuredMesh<1,1> targetWrapper(meshU);
+  INTERP_KERNEL::InterpolationCU myInterpolator;
+  vector<map<int,double> > res;
+  const double precis = 1e-13;
+  myInterpolator.setPrecision(precis);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+
+//   cout.precision(18);
+//   for ( int i = 0; i < (int)res.size(); ++i )
+//     for ( map<int,double>::iterator s_v = res[i].begin(); s_v != res[i].end(); ++s_v)
+//     {
+//       cout << "CPPUNIT_ASSERT_DOUBLES_EQUAL( "<<s_v->second<<" ,res["<<i<<"]["<<s_v->first<<"],precis);"<<endl;
+//     }
+
+  double sum = sumAll(res);
+  CPPUNIT_ASSERT_EQUAL(3,int( res.size()));
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, sum, precis );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[1][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.33333333333333 ,res[1][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.08333333333333 ,res[1][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.25000000000000 ,res[2][2],precis);
+
+  meshC->decrRef();
+  meshU->decrRef();
+}
+
+void MEDCouplingBasicsTest::testInterpolationCU2D()
+{
+  MEDCouplingCMesh* meshC = MEDCouplingCMesh::New();
+  DataArrayDouble* coords = DataArrayDouble::New();
+  double arr[4] = { -1/3., 1/3., 2/3., 4/3. };
+  coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, 4, 1 );
+  meshC->setCoords( coords, coords );
+  coords->decrRef();
+
+  MEDCouplingUMesh * meshU = buildCU2DMesh_U();
+
+  MEDCouplingNormalizedCartesianMesh<2>      sourceWrapper(meshC);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(meshU);
+  INTERP_KERNEL::InterpolationCU myInterpolator;
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+
+  const double precis = 1e-7;
+  double sum = sumAll(res);
+  CPPUNIT_ASSERT_EQUAL(5,int( res.size()));
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, sum, precis );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.1111111 ,res[0][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[0][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[0][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[0][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[1][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[1][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.1111111 ,res[1][6],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[1][7],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[2][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[2][5],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0555556 ,res[2][7],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.1111111 ,res[2][8],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0416667 ,res[3][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0138889 ,res[3][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0277778 ,res[3][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0416667 ,res[3][5],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0138889 ,res[4][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0972222 ,res[4][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0138889 ,res[4][5],precis);
+
+  vector<map<int,double> > resRev;
+  myInterpolator.interpolateMeshesRev(targetWrapper,sourceWrapper,resRev,"P0P0");
+
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][0] ,resRev[0][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][1] ,resRev[1][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][1] ,resRev[1][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[4][1] ,resRev[1][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][2] ,resRev[2][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[4][2] ,resRev[2][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][3] ,resRev[3][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][3] ,resRev[3][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[0][4] ,resRev[4][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][4] ,resRev[4][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][4] ,resRev[4][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][4] ,resRev[4][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][5] ,resRev[5][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[3][5] ,resRev[5][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[4][5] ,resRev[5][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][6] ,resRev[6][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[1][7] ,resRev[7][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][7] ,resRev[7][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( res[2][8] ,resRev[8][2],precis);
+
+  meshC->decrRef();
+  meshU->decrRef();
+}
+
+void MEDCouplingBasicsTest::testInterpolationCU3D()
+{
+  MEDCouplingCMesh* meshC = MEDCouplingCMesh::New();
+  DataArrayDouble* coords = DataArrayDouble::New();
+  double arr[4] = { -1/3., 1/3., 2/3., 4/3. };
+  coords->useArray( arr, /*ownership=*/false, CPP_DEALLOC, 4, 1 );
+  meshC->setCoords( coords, coords, coords );
+  coords->decrRef();
+
+  MEDCouplingUMesh * meshU = buildCU3DMesh_U();
+
+  MEDCouplingNormalizedCartesianMesh<3>      sourceWrapper(meshC);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(meshU);
+  INTERP_KERNEL::InterpolationCU myInterpolator;
+  vector<map<int,double> > res;
+  const double precis = 1e-13;
+  myInterpolator.setPrecision(precis);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P0P0");
+
+  double sum = sumAll(res);
+  CPPUNIT_ASSERT_EQUAL(8,int( res.size()));
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, sum, precis );
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02700000000000 ,res[0][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00299999999999 ,res[1][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[1][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03000000000000 ,res[1][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00300000000000 ,res[2][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[2][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[2][6],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00033333333333 ,res[3][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][5],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[3][6],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][7],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[3][8],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00299999999999 ,res[4][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.02999999999999 ,res[4][9],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03000000000000 ,res[4][18],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00033333333333 ,res[5][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][9],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][10],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][11],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[5][18],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][19],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[5][20],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00033333333333 ,res[6][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][6],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][9],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][12],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][15],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00333333333333 ,res[6][18],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][21],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03333333333333 ,res[6][24],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.7037037037e-05 ,res[7][0],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][1],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][2],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][3],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][4],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][5],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][6],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][7],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][8],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][9],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][10],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][11],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][12],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][13],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][14],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][15],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][16],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][17],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00037037037037 ,res[7][18],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][19],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][20],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][21],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][22],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][23],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.00370370370370 ,res[7][24],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][25],precis);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.03703703703703 ,res[7][26],precis);
+
+
+  meshC->decrRef();
+  meshU->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP0IntegralUniform()
+{
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  CPPUNIT_ASSERT_EQUAL(5,myInterpolator.toIntegralUniform(targetWrapper,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][4],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+  res.clear();
+  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[3][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+  res.clear();
+  targetMesh->decrRef();
+  //
+  targetMesh=build2DTargetMeshPerm_1();
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper2(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator2;
+  CPPUNIT_ASSERT(myInterpolator2.getMeasureAbsStatus());
+  CPPUNIT_ASSERT_EQUAL(5,myInterpolator2.toIntegralUniform(targetWrapper2,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][4],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+  res.clear();
+  myInterpolator2.setMeasureAbsStatus(false);
+  CPPUNIT_ASSERT(!myInterpolator2.getMeasureAbsStatus());
+  CPPUNIT_ASSERT_EQUAL(5,myInterpolator2.toIntegralUniform(targetWrapper2,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.125,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,res[0][4],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.75,sumAll(res),1e-12);
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP0IntegralUniform()
+{
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  vector<map<int,double> > res;
+  CPPUNIT_ASSERT_EQUAL(5,myInterpolator.toIntegralUniform(targetWrapper,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][4],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
+  res.clear();
+  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[3][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25*sqrt(2.),res[4][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP0IntegralUniform()
+{
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_1();
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  vector<map<int,double> > res;
+  CPPUNIT_ASSERT_EQUAL(8,myInterpolator.toIntegralUniform(targetWrapper,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000.,res[0][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[0][1],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[0][2],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[0][3],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[0][4],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[0][5],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[0][6],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(3375000.,res[0][7],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
+  res.clear();
+  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P0"));
+  CPPUNIT_ASSERT_EQUAL(8,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(125000.,res[0][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[1][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[2][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[3][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(375000.,res[4][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[5][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1125000.,res[6][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(3375000.,res[7][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
+  res.clear();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1IntegralUniform()
+{
+  MEDCouplingUMesh *targetMesh=build2DSourceMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  vector<map<int,double> > res;
+  CPPUNIT_ASSERT_EQUAL(4,myInterpolator.toIntegralUniform(targetWrapper,res,"P1"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[0][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[0][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[0][3],1e-12);
+  res.clear();
+  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P1"));
+  CPPUNIT_ASSERT_EQUAL(4,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[0][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[1][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[2][0],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(0.33333333333333331,res[3][0],1e-12);
+  res.clear();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DInterpP1IntegralUniform()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(sourceMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<map<int,double> > res;
+  CPPUNIT_ASSERT_EQUAL(9,myInterpolator.toIntegralUniform(targetWrapper,res,"P1"));
+  CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][1],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[0][2],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][3],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][4],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[0][5],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][6],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][7],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2000000.,res[0][8],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
+  res.clear();
+  CPPUNIT_ASSERT_EQUAL(1,myInterpolator.fromIntegralUniform(targetWrapper,res,"P1"));
+  CPPUNIT_ASSERT_EQUAL(9,(int)res.size());
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[0][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[1][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[2][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[3][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[4][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(500000.,res[5][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[6][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(833333.333333333,res[7][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(2000000.,res[8][0],1e-6);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000.,sumAll(res),1e-6);
+  sourceMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test2DInterpP1P0Bary_1()
+{
+  MEDCouplingUMesh *sourceMesh=build2DSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build2DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<2,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<2,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation2D myInterpolator;
+  myInterpolator.setP1P0BaryMethod(true);
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666669,res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[0][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[0][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[0][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[1][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[1][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[2][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[2][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[2][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[3][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,res[3][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625,res[3][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664,res[4][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[4][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343,res[4][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666,res[4][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DSurfInterpP1P0Bary_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSurfSourceMesh_1();
+  MEDCouplingUMesh *targetMesh=build3DSurfTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,2> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,2> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3DSurf myInterpolator;
+  myInterpolator.setP1P0BaryMethod(true);
+  vector<map<int,double> > res;
+  INTERP_KERNEL::IntersectionType types[2]={INTERP_KERNEL::Triangulation, INTERP_KERNEL::Geometric2D};
+  for(int i=0;i<2;i++)
+    {
+      myInterpolator.setPrecision(1e-12);
+      myInterpolator.setIntersectionType(types[i]);
+      myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+      CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666669*sqrt(2.),res[0][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[0][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[0][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[0][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[1][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[1][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[1][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[2][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[2][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[2][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[3][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125*sqrt(2.),res[3][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0625*sqrt(2.),res[3][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.041666666666666664*sqrt(2.),res[4][0],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[4][1],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.020833333333333343*sqrt(2.),res[4][2],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(0.16666666666666666*sqrt(2.),res[4][3],1e-12);
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.*sqrt(2.),sumAll(res),1e-12);
+      res.clear();
+    }
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+#include <iomanip>
+void MEDCouplingBasicsTest::test3DInterpP1P0Bary_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DSourceMesh_2();
+  MEDCouplingUMesh *targetMesh=build3DTargetMesh_2();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  myInterpolator.setP1P0BaryMethod(true);
+  vector<map<int,double> > res;
+  myInterpolator.setPrecision(1e-12);
+  myInterpolator.interpolateMeshes(sourceWrapper,targetWrapper,res,"P1P0");
+  CPPUNIT_ASSERT_EQUAL(5,(int)res.size());
+
+  double res3D[5][28]={{104166.66658918398, 885416.666685817763, 135416.666666666541, 36458.3333333335031, 31249.9999999999018, 145833.333333333256, 41666.6666666667516, 124999.999999999971, 177083.333326388849, 0.0, 31249.9999999999636, 0.0, 41666.666620792399, 159722.22229009436, 0.0, 0.0, 41666.6666631944681, 125000, 43499.2283723790752, 164351.851924000395, 36458.3333372396883, 0.0, 0.0, 125000.000001736029, 34722.2221800900952, 13599.5370788455439, 0.0, 167438.27159690368},
+                       {0.0, 41666.6664479170649, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 125000.000161457952, 0.0, 0.0, 0.0, 0.0, 111111.11112005508, 0.0, 0.0, 291666.666656249959, 41666.6666666666933, 6944.4444415638809, 270833.333520485845, 0.0, 0.0, 124999.999989583303, 41666.6665798612958, 20833.3333186342825, 145833.333354303701, 83333.3333263888198, 27777.7777501651799},
+                       {0.0, 93750.0000000000728, 125000.000000000058, 0.0, 0.0, 72916.666666666526, 291666.666666666628, 41666.6666666667152, 197916.66666666657, 166666.666666666802, 218750.000000000116, 41666.6666666665697, 0.0, 0.0, 0.0, 0.0, 0.0, 41666.6666666666861, 0.0, 0.0, 0.0, 0.0, 0.0, 41666.6666666666642, 0.0, 0.0, 0.0, 0.0},
+                       {72916.6666484848247, 82465.2777799315081, 0.0, 0.0, 217447.916666666686, 197916.666666666802, 0.0, 41666.6666666666715, 0.0, 0.0, 0.0, 0.0, 290364.583310396119, 125000.000018181803, 41666.6666666666351, 166666.666666666599, 0.0, 41666.6666666665551, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 27777.7777734705051, 0.0, 0.0, 27777.7778028684952},
+                       {72916.6666461071727, 172309.027782170655, 70312.5000000000437, 253906.250000000029, 0.0, 0.0, 0.0, 41666.666666666657, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 258246.527775988478, 71180.5555571812583, 253906.250006944378, 41666.6666666666861, 0.0, 41666.6666649305407, 20833.3333186342534, 6944.44445267237552, 0.0, 27777.7777953707919}};
+
+  double sum = 0;
+  int i=0;
+  for(std::vector<std::map<int,double> >::const_iterator iter1=res.begin();iter1!=res.end();iter1++,i++)
+    {
+      for(int j=0;j<28;j++)
+        {
+          std::map<int,double>::const_iterator iter2=(*iter1).find(j);
+          if(iter2!=(*iter1).end())
+            {
+              sum += iter2->second;
+              CPPUNIT_ASSERT_DOUBLES_EQUAL(res3D[i][j],(*iter2).second,1.e-5);
+            }
+          else
+            {
+              CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,res3D[i][j],1e-14);
+            }
+        }
+    }
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8000000,sum,1.e-5);
+  //clean up
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
+
+void MEDCouplingBasicsTest::test3DTo1DInterpP0P0PL_1()
+{
+  MEDCouplingUMesh *sourceMesh=build3DTargetMesh_1();
+  MEDCouplingUMesh *targetMesh=build1DTargetMesh_1();
+  //
+  MEDCouplingNormalizedUnstructuredMesh<3,3> sourceWrapper(sourceMesh);
+  MEDCouplingNormalizedUnstructuredMesh<3,3> targetWrapper(targetMesh);
+  INTERP_KERNEL::Interpolation3D myInterpolator;
+  vector<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[1][4],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[2][1],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[3][5],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[4][2],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[5][6],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[6][3],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,res[7][7],1e-12);
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(8.,sumAll(res),1e-12);
+  //
+  sourceMesh->decrRef();
+  targetMesh->decrRef();
+}
index b810f44dfbd33cbc1208bf6ff9597a8e35c03f48..35916acee79eed1be1d1ea98a4d05722be1418a3 100755 (executable)
@@ -24,7 +24,7 @@ TestMEDCoupling_CPPFLAGS=@CPPUNIT_INCLUDES@ @PTHREAD_CFLAGS@ -I$(srcdir)/.. -I$(
 
 TestMEDCoupling_LDFLAGS = @CPPUNIT_LIBS@ ../libmedcoupling.la ../../INTERP_KERNEL/libinterpkernel.la
 
-dist_TestMEDCoupling_SOURCES = TestMEDCoupling.cxx MEDCouplingBasicsTest.hxx MEDCouplingBasicsTest.cxx
+dist_TestMEDCoupling_SOURCES = TestMEDCoupling.cxx MEDCouplingBasicsTest.hxx MEDCouplingBasicsTest0.cxx MEDCouplingBasicsTest1.cxx MEDCouplingBasicsTestInterp.cxx
 
 TestMEDCouplingRemapper_CPPFLAGS=@CPPUNIT_INCLUDES@ @PTHREAD_CFLAGS@ -I$(srcdir)/.. -I$(srcdir)/../../INTERP_KERNEL/Bases -I$(srcdir)/../../INTERP_KERNELTest -I$(srcdir)/../../INTERP_KERNEL -I$(srcdir)/../../INTERP_KERNEL/Geometric2D