]> SALOME platform Git repositories - tools/medcoupling.git/blob - src/MEDCoupling/Test/MEDCouplingBasicsTest5.cxx
Salome HOME
Bug fix: bounding box for quadratic elements spaceDim=2/meshDim=1 (i.e. SEG3)
[tools/medcoupling.git] / src / MEDCoupling / Test / MEDCouplingBasicsTest5.cxx
1 // Copyright (C) 2007-2013  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 // Author : Anthony Geay (CEA/DEN)
20
21 #include "MEDCouplingBasicsTest5.hxx"
22 #include "MEDCouplingUMesh.hxx"
23 #include "MEDCouplingCMesh.hxx"
24 #include "MEDCouplingExtrudedMesh.hxx"
25 #include "MEDCouplingFieldDouble.hxx"
26 #include "MEDCouplingMemArray.hxx"
27 #include "MEDCouplingGaussLocalization.hxx"
28 #include "MEDCouplingMultiFields.hxx"
29 #include "MEDCouplingFieldOverTime.hxx"
30
31 #include <cmath>
32 #include <functional>
33 #include <iterator>
34
35 using namespace ParaMEDMEM;
36
37 void MEDCouplingBasicsTest5::testUMeshTessellate2D1()
38 {
39   double m1Coords[50]={0.,0.,1.,0.,1.5,0.,0.,1.,0.,1.5,-1.,0.,-1.5,0.,0.,-1,0.,-1.5,0.5,0.,1.25,0.,0.70710678118654757,0.70710678118654757,1.0606601717798214,1.0606601717798214,0.,0.5,0.,1.25,-0.70710678118654757,0.70710678118654757,-1.0606601717798214,1.0606601717798214,-0.5,0.,-1.25,0.,-0.70710678118654757,-0.70710678118654757,-1.0606601717798214,-1.0606601717798214,0.,-0.5,0.,-1.25,0.70710678118654757,-0.70710678118654757,1.0606601717798214,-1.0606601717798214};
40   int m1Conn[56]={0,3,1,13,11,9, 3,4,2,1,14,12,10,11, 5,3,0,15,13,17, 6,4,3,5,16,14,15,18, 5,0,7,17,21,19, 6,5,7,8,18,19,22,20, 0,1,7,9,23,21, 1,2,8,7,10,24,22,23};
41   MEDCouplingUMesh *m1=MEDCouplingUMesh::New();
42   m1->setMeshDimension(2);
43   m1->allocateCells(8);
44   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn);
45   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+6);
46   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+14);
47   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+20);
48   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+28);
49   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+34);
50   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+42);
51   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+48);
52   m1->finishInsertingCells();
53   DataArrayDouble *myCoords1=DataArrayDouble::New();
54   myCoords1->alloc(25,2);
55   std::copy(m1Coords,m1Coords+50,myCoords1->getPointer());
56   m1->setCoords(myCoords1);
57   myCoords1->decrRef();
58   //
59   MEDCouplingUMesh *m11=static_cast<MEDCouplingUMesh *>(m1->deepCpy());
60   m11->tessellate2D(1.);
61   CPPUNIT_ASSERT(m11->getCoords()->isEqual(*m11->getCoords(),1e-12));
62   const int expected1[48]={5,0,3,11,1,5,3,4,12,2,1,11,5,5,15,3,0,5,6,16,4,3,15,5,5,5,0,7,19,5,6,5,19,7,8,20,5,0,1,23,7,5,1,2,24,8,7,23};
63   const int expected2[9]={0,5,12,17,24,29,36,41,48};
64   CPPUNIT_ASSERT_EQUAL(48,m11->getNodalConnectivity()->getNumberOfTuples());
65   CPPUNIT_ASSERT_EQUAL(9,m11->getNodalConnectivityIndex()->getNumberOfTuples());
66   CPPUNIT_ASSERT(std::equal(expected1,expected1+48,m11->getNodalConnectivity()->getConstPointer()));
67   CPPUNIT_ASSERT(std::equal(expected2,expected2+9,m11->getNodalConnectivityIndex()->getConstPointer()));
68   m11->decrRef();
69   //
70   MEDCouplingUMesh *m12=static_cast<MEDCouplingUMesh *>(m1->deepCpy());
71   m12->tessellate2D(0.5);
72   CPPUNIT_ASSERT_EQUAL(41,m12->getNumberOfNodes());
73   const int expected3[60]={5,0,3,25,26,1,5,3,4,27,28,2,1,26,25,5,5,29,30,3,0,5,6,31,32,4,3,30,29,5,5,5,0,7,33,34,5,6,5,34,33,7,8,35,36,5,0,1,37,38,7,5,1,2,39,40,8,7,38,37};
74   const int expected4[9]={0,6,15,21,30,36,45,51,60};
75   const double expected5[82]={0.,0.,1.,0.,1.5,0.,0.,1.,0.,1.5,-1.,0.,-1.5,0.,0.,-1.,0.,-1.5,0.5,0.,1.25,0.,0.7071067811865476,0.7071067811865476,1.0606601717798214,1.0606601717798214,0.,0.5,0.,1.25,-0.7071067811865476,0.7071067811865476,-1.0606601717798214,1.0606601717798214,-0.5,0.,-1.25,0.,-0.7071067811865476,-0.7071067811865476,-1.0606601717798214,-1.0606601717798214,0.,-0.5,0.,-1.25,0.7071067811865476,-0.7071067811865476,1.0606601717798214,-1.0606601717798214,0.479425538604203,0.8775825618903728,0.8414709848078964,0.54030230586814,0.7191383079063044,1.3163738428355591,1.2622064772118446,0.8104534588022099,-0.877582561890373,0.4794255386042027,-0.5403023058681399,0.8414709848078964,-1.3163738428355596,0.7191383079063038,-0.8104534588022098,1.2622064772118446,-0.4794255386042031,-0.8775825618903728,-0.8414709848078965,-0.5403023058681399,-0.7191383079063045,-1.3163738428355591,-1.2622064772118449,-0.8104534588022098,0.8775825618903729,-0.47942553860420295,0.54030230586814,-0.8414709848078964,1.3163738428355594,-0.7191383079063043,0.8104534588022099,-1.2622064772118446};
76   for(int i=0;i<82;i++)
77     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],m12->getCoords()->getIJ(0,i),1e-12);
78   CPPUNIT_ASSERT_EQUAL(60,m12->getNodalConnectivity()->getNumberOfTuples());
79   CPPUNIT_ASSERT_EQUAL(9,m12->getNodalConnectivityIndex()->getNumberOfTuples());
80   CPPUNIT_ASSERT(std::equal(expected3,expected3+60,m12->getNodalConnectivity()->getConstPointer()));
81   CPPUNIT_ASSERT(std::equal(expected4,expected4+9,m12->getNodalConnectivityIndex()->getConstPointer()));
82   m12->decrRef();
83   //
84   m1->decrRef();
85 }
86
87 void MEDCouplingBasicsTest5::testUMeshTessellate2DCurve1()
88 {
89   // A quarter of circle:
90   double mcoords[6] = {0.4,0.0,   0.0,-0.4,   0.283,-0.283};
91   int mconnec[3] = {0,1,2};
92
93   MEDCouplingUMesh *m1 = MEDCouplingUMesh::New();
94   m1->setMeshDimension(1);
95   m1->allocateCells(1);
96   m1->insertNextCell(INTERP_KERNEL::NORM_SEG3, 3, mconnec);
97
98   DataArrayDouble *myCoords = DataArrayDouble::New();
99   myCoords->alloc(3,2);
100   std::copy(mcoords,mcoords+6,myCoords->getPointer());
101   m1->setCoords(myCoords);
102   myCoords->decrRef();
103
104   MEDCouplingUMesh *m2 = static_cast<MEDCouplingUMesh *>(m1->deepCpy());
105   m2->tessellate2DCurve(0.1);
106   CPPUNIT_ASSERT_NO_THROW(m2->checkCoherency1(0.0)); // eps param not used
107   m1->decrRef();
108   m2->decrRef();
109 }
110
111 /*!
112  * idem MEDCouplingBasicsTest4::testIntersect2DMeshesTmp3 except that m1 and m2 are permuted on call to MEDCouplingUMesh::Intersect2DMeshes
113  */
114 void MEDCouplingBasicsTest5::testIntersect2DMeshesTmp4()
115 {
116   double m1Coords[50]={0.,0.,1.,0.,1.5,0.,0.,1.,0.,1.5,-1.,0.,-1.5,0.,0.,-1,0.,-1.5,0.5,0.,1.25,0.,0.70710678118654757,0.70710678118654757,1.0606601717798214,1.0606601717798214,0.,0.5,0.,1.25,-0.70710678118654757,0.70710678118654757,-1.0606601717798214,1.0606601717798214,-0.5,0.,-1.25,0.,-0.70710678118654757,-0.70710678118654757,-1.0606601717798214,-1.0606601717798214,0.,-0.5,0.,-1.25,0.70710678118654757,-0.70710678118654757,1.0606601717798214,-1.0606601717798214};
117   int m1Conn[56]={0,3,1,13,11,9, 3,4,2,1,14,12,10,11, 5,3,0,15,13,17, 6,4,3,5,16,14,15,18, 5,0,7,17,21,19, 6,5,7,8,18,19,22,20, 0,1,7,9,23,21, 1,2,8,7,10,24,22,23};
118   MEDCouplingUMesh *m1=MEDCouplingUMesh::New();
119   m1->setMeshDimension(2);
120   m1->allocateCells(8);
121   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn);
122   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+6);
123   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+14);
124   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+20);
125   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+28);
126   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+34);
127   m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+42);
128   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+48);
129   m1->finishInsertingCells();
130   DataArrayDouble *myCoords1=DataArrayDouble::New();
131   myCoords1->alloc(25,2);
132   std::copy(m1Coords,m1Coords+50,myCoords1->getPointer());
133   m1->setCoords(myCoords1);
134   myCoords1->decrRef();
135   //
136   double m2Coords[30]={0.,0.,1.1,0.,1.1,1.,0.,1.,1.7,0.,1.7,1.,-1.1,1.,-1.1,0.,-1.7,0.,-1.7,1.,-1.7,-1,-1.1,-1.,0.,-1.,1.1,-1,1.7,-1.};
137   int m2Conn[32]={0,3,2,1, 1,2,5,4, 7,6,3,0, 8,9,6,7, 7,0,12,11, 8,7,11,10, 0,1,13,12, 1,4,14,13};
138   MEDCouplingUMesh *m2=MEDCouplingUMesh::New();
139   m2->setMeshDimension(2);
140   m2->allocateCells(8);
141   for(int i=0;i<8;i++)
142     m2->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,m2Conn+4*i);
143   m2->finishInsertingCells();
144   DataArrayDouble *myCoords2=DataArrayDouble::New();
145   myCoords2->alloc(15,2);
146   std::copy(m2Coords,m2Coords+30,myCoords2->getPointer());
147   m2->setCoords(myCoords2);
148   myCoords2->decrRef();
149   //
150   DataArrayInt *d1=0,*d2=0;
151   MEDCouplingUMesh *m3=MEDCouplingUMesh::Intersect2DMeshes(m2,m1,1e-10,d1,d2);
152   m3->unPolyze();
153   const int expected1[16]={0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7};
154   const int expected2[16]={0,1,1,-1,2,3,3,-1,4,5,5,-1,6,7,7,-1};
155   CPPUNIT_ASSERT_EQUAL(16,d1->getNumberOfTuples());
156   CPPUNIT_ASSERT_EQUAL(16,d2->getNumberOfTuples());
157   CPPUNIT_ASSERT_EQUAL(16,m3->getNumberOfCells());
158   CPPUNIT_ASSERT_EQUAL(104,m3->getNumberOfNodes());
159   CPPUNIT_ASSERT_EQUAL(2,m3->getSpaceDimension());
160   CPPUNIT_ASSERT(std::equal(expected1,expected1+16,d1->getConstPointer()));
161   CPPUNIT_ASSERT(std::equal(expected2,expected2+16,d2->getConstPointer()));
162   const int expected3[136]={6,16,15,18,44,45,46,8,18,2,1,16,47,48,49,50,8,17,1,2,40,51,52,53,54,8,40,5,4,17,55,56,57,58,6,18,15,20,59,60,61,8,20,7,6,18,62,63,64,65,8,41,6,7,21,66,67,68,69,8,21,8,9,41,70,71,72,73,6,20,15,22,74,75,76,8,22,11,7,20,77,78,79,80,8,21,7,11,42,81,82,83,84,8,42,10,8,21,85,86,87,88,6,22,15,16,89,90,91,8,16,1,13,22,92,93,94,95,8,43,13,1,17,96,97,98,99,8,17,4,14,43,100,101,102,103};
163   const int expected4[17]={0,7,16,25,34,41,50,59,68,75,84,93,102,109,118,127,136};
164   const double expected5[208]={0.,0.,1.1, 0.,1.1,1.,0.,1.,1.7,0.,1.7,1.,-1.1,1.,-1.1,0.,-1.7,0.,-1.7,1.,-1.7,-1.,-1.1,-1.,0.,-1.,1.1,-1.,1.7,-1.,0.,0.,1.,0.,1.5,0.,0.,1.,0.,1.5,-1.,0.,-1.5,0.,0.,-1.,0.,-1.5,0.5,0.,1.25,0.,0.7071067811865476,0.7071067811865476,1.0606601717798214,1.0606601717798214,0.,0.5,0.,1.25,-0.7071067811865476,0.7071067811865476,-1.0606601717798214,1.0606601717798214,-0.5,0.,-1.25,0.,-0.7071067811865476,-0.7071067811865476,-1.0606601717798214,-1.0606601717798214,0.,-0.5,0.,-1.25,0.7071067811865476,-0.7071067811865476,1.0606601717798214,-1.0606601717798214,1.1180339887498951,1.,-1.1180339887498951,1.,-1.1180339887498951,-1.,1.1180339887498951,-1.,0.5,0.,0.,0.5,0.7071067811865477,0.7071067811865476,0.55,1.,1.1,0.5,1.05,0.,0.7071067811865477,0.7071067811865475,1.3,0.,1.1,0.5,1.1090169943749475,1.,1.4012585384440737,0.535233134659635,1.4090169943749475,1.,1.7,0.5,1.6,0.,1.4012585384440737,0.535233134659635,0.,0.5,-0.5,0.,-0.7071067811865477,0.7071067811865476,-1.05,0.,-1.1,0.5,-0.55,1.,-0.7071067811865478,0.7071067811865475,-1.1090169943749475,1.,-1.1,0.5,-1.3,0.,-1.4012585384440737,0.5352331346596344,-1.6,0.,-1.7,0.5,-1.4090169943749475,1.,-1.4012585384440737,0.5352331346596344,-0.5,0.,0.,-0.5,-0.7071067811865475,-0.7071067811865477,-0.55,-1.,-1.1,-0.5,-1.05,0.,-0.7071067811865475,-0.7071067811865477,-1.3,0.,-1.1,-0.5,-1.1090169943749475,-1.,-1.4012585384440734,-0.5352331346596354,-1.4090169943749475,-1.,-1.7,-0.5,-1.6,0.,-1.4012585384440732,-0.5352331346596354,0.,-0.5,0.5,0.,0.7071067811865475,-0.7071067811865477,1.05,0.,1.1,-0.5,0.55,-1.,0.7071067811865475,-0.7071067811865477,1.1090169943749475,-1.,1.1,-0.5,1.3,0.,1.4012585384440737,-0.535233134659635,1.6,0.,1.7,-0.5,1.4090169943749475,-1.,1.4012585384440737,-0.535233134659635};
165   CPPUNIT_ASSERT_EQUAL(136,m3->getNodalConnectivity()->getNumberOfTuples());
166   CPPUNIT_ASSERT_EQUAL(17,m3->getNodalConnectivityIndex()->getNumberOfTuples());
167   CPPUNIT_ASSERT(std::equal(expected3,expected3+136,m3->getNodalConnectivity()->getConstPointer()));
168   CPPUNIT_ASSERT(std::equal(expected4,expected4+17,m3->getNodalConnectivityIndex()->getConstPointer()));
169   for(int i=0;i<208;i++)
170     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],m3->getCoords()->getIJ(0,i),1e-12);
171   d1->decrRef();
172   d2->decrRef();
173   m3->decrRef();
174   //
175   m1->decrRef();
176   m2->decrRef();
177 }
178
179 void MEDCouplingBasicsTest5::testGetCellIdsCrossingPlane1()
180 {
181   MEDCouplingUMesh *mesh2D=0;
182   MEDCouplingUMesh *mesh3D=build3DExtrudedUMesh_1(mesh2D);
183   const double vec[3]={-0.07,1.,0.07};
184   const double origin[3]={1.524,1.4552,1.74768};
185   DataArrayInt *ids1=mesh3D->getCellIdsCrossingPlane(origin,vec,1e-10);
186   CPPUNIT_ASSERT_EQUAL(9,ids1->getNumberOfTuples());
187   const int expected1[9]={1,3,4,7,9,10,13,15,16};
188   CPPUNIT_ASSERT(std::equal(expected1,expected1+9,ids1->getConstPointer()));
189   const double vec2[3]={0.,0.,1.};
190   DataArrayInt *ids2=mesh3D->getCellIdsCrossingPlane(origin,vec2,1e-10);
191   const int expected2[6]={6,7,8,9,10,11};
192   CPPUNIT_ASSERT_EQUAL(6,ids2->getNumberOfTuples());
193   CPPUNIT_ASSERT(std::equal(expected2,expected2+6,ids2->getConstPointer()));
194   ids1->decrRef();
195   ids2->decrRef();
196   mesh3D->decrRef();
197   mesh2D->decrRef();
198 }
199
200 void MEDCouplingBasicsTest5::testBuildSlice3D1()
201 {
202   MEDCouplingUMesh *mesh2D=0;
203   MEDCouplingUMesh *mesh3D=build3DExtrudedUMesh_1(mesh2D);
204   mesh2D->decrRef();
205   // First slice in the middle of 3D cells
206   const double vec1[3]={-0.07,1.,0.07};
207   const double origin1[3]={1.524,1.4552,1.74768};
208   DataArrayInt *ids=0;
209   MEDCouplingUMesh *slice1=mesh3D->buildSlice3D(origin1,vec1,1e-10,ids);
210   const int expected1[9]={1,3,4,7,9,10,13,15,16};
211   const int expected2[47]={5,42,41,40,43,44,5,42,46,45,41,5,44,43,40,47,48,5,49,42,44,50,5,49,51,46,42,5,50,44,48,52,5,53,49,50,54,5,53,55,51,49,5,54,50,52,56};
212   const int expected3[10]={0,6,11,17,22,27,32,37,42,47};
213   const double expected4[171]={1.,1.,0.,1.,1.25,0.,1.,1.5,0.,2.,1.,0.,1.,2.,0.,0.,2.,0.,3.,1.,0.,3.,2.,0.,0.,1.,0.,2.,2.,0.,1.,1.,1.,1.,1.25,1.,1.,1.5,1.,2.,1.,1.,1.,2.,1.,0.,2.,1.,3.,1.,1.,3.,2.,1.,0.,1.,1.,2.,2.,1.,1.,1.,2.,1.,1.25,2.,1.,1.5,2.,2.,1.,2.,1.,2.,2.,0.,2.,2.,3.,1.,2.,3.,2.,2.,0.,1.,2.,2.,2.,2.,1.,1.,3.,1.,1.25,3.,1.,1.5,3.,2.,1.,3.,1.,2.,3.,0.,2.,3.,3.,1.,3.,3.,2.,3.,0.,1.,3.,2.,2.,3.,1.,1.5408576,0.,2.,1.6108576000000001,0.,2.,1.5408576,1.,1.,1.5,0.5836800000000008,1.,1.4708576,1.,3.,1.6808576,0.,3.,1.6108576000000001,1.,0.,1.4708576,0.,0.,1.4008576,1.,2.,1.4708576,2.,1.,1.4008576000000001,2.,3.,1.5408575999999998,2.,0.,1.3308575999999999,2.,2.,1.4008576,3.,1.,1.3308576,3.,3.,1.4708576,3.,0.,1.2608576,3.};
214   CPPUNIT_ASSERT_EQUAL(2,slice1->getMeshDimension());
215   CPPUNIT_ASSERT_EQUAL(3,slice1->getSpaceDimension());
216   CPPUNIT_ASSERT_EQUAL(57,slice1->getNumberOfNodes());
217   CPPUNIT_ASSERT_EQUAL(9,slice1->getNumberOfCells());
218   CPPUNIT_ASSERT_EQUAL(9,ids->getNumberOfTuples());
219   CPPUNIT_ASSERT_EQUAL(47,slice1->getNodalConnectivity()->getNumberOfTuples());
220   CPPUNIT_ASSERT_EQUAL(10,slice1->getNodalConnectivityIndex()->getNumberOfTuples());
221   CPPUNIT_ASSERT(std::equal(expected1,expected1+9,ids->getConstPointer()));
222   CPPUNIT_ASSERT(std::equal(expected2,expected2+47,slice1->getNodalConnectivity()->getConstPointer()));
223   CPPUNIT_ASSERT(std::equal(expected3,expected3+10,slice1->getNodalConnectivityIndex()->getConstPointer()));
224   for(int i=0;i<171;i++)
225     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected4[i],slice1->getCoords()->getIJ(0,i),1e-12);
226   ids->decrRef();
227   slice1->decrRef();
228   // 2nd slice based on already existing nodes of mesh3D.
229   const double vec2[3]={0.,3.,1.};
230   const double origin2[3]={2.5,1.,3.};
231   slice1=mesh3D->buildSlice3D(origin2,vec2,1e-10,ids);
232   const int expected5[49]={5,50,10,4,51,5,50,52,7,10,5,51,4,5,53,5,54,50,51,55,56,5,54,57,52,50,5,56,55,51,53,58,5,38,59,56,54,43,5,54,57,46,43,5,38,59,56,58,48};
233   const int expected6[10]={0,5,10,15,21,26,32,38,43,49};
234   const double expected7[180]={1.,1.,0.,1.,1.25,0.,1.,1.5,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.,1.,1.,1.,1.,1.25,1.,1.,1.5,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.,1.,0.,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.,2.,2.,2.,0.,0.,3.,1.,1.,3.,1.,1.25,3.,1.,0.,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.,2.,2.,3.,2.,1.6666666666666667,1.,1.,1.6666666666666667,1.,3.,1.6666666666666667,1.,0.,1.6666666666666667,1.,2.,1.3333333333333335,2.,1.,1.5,1.5,1.,1.3333333333333333,2.,3.,1.3333333333333335,2.,0.,1.3333333333333335,2.,1.,1.25,2.25};
235   CPPUNIT_ASSERT_EQUAL(2,slice1->getMeshDimension());
236   CPPUNIT_ASSERT_EQUAL(3,slice1->getSpaceDimension());
237   CPPUNIT_ASSERT_EQUAL(60,slice1->getNumberOfNodes());
238   CPPUNIT_ASSERT_EQUAL(9,slice1->getNumberOfCells());
239   CPPUNIT_ASSERT_EQUAL(9,ids->getNumberOfTuples());
240   CPPUNIT_ASSERT_EQUAL(49,slice1->getNodalConnectivity()->getNumberOfTuples());
241   CPPUNIT_ASSERT_EQUAL(10,slice1->getNodalConnectivityIndex()->getNumberOfTuples());
242   CPPUNIT_ASSERT(std::equal(expected1,expected1+9,ids->getConstPointer()));
243   CPPUNIT_ASSERT(std::equal(expected5,expected5+49,slice1->getNodalConnectivity()->getConstPointer()));
244   CPPUNIT_ASSERT(std::equal(expected6,expected6+10,slice1->getNodalConnectivityIndex()->getConstPointer()));
245   for(int i=0;i<180;i++)
246     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected7[i],slice1->getCoords()->getIJ(0,i),1e-12);
247   ids->decrRef();
248   slice1->decrRef();
249   // 3rd slice based on shared face of mesh3D.
250   const double vec3[3]={0.,0.,1.};
251   const double origin3[3]={2.5,1.,2.};
252   slice1=mesh3D->buildSlice3D(origin3,vec3,1e-10,ids);
253   const int expected8[12]={6,7,8,9,10,11,12,13,14,15,16,17};
254   const int expected9[68]={5,15,26,16,18,5,16,21,28,22,19,17,5,18,20,21,16,5,21,24,25,28,5,26,16,17,19,22,23,5,22,27,29,28,5,15,26,16,18,5,16,21,28,22,19,17,5,18,20,21,16,5,21,24,25,28,5,26,16,17,19,22,23,5,22,27,29,28};
255   const int expected10[13]={0,5,12,17,22,29,34,39,46,51,56,63,68};
256   const double expected11[135]={0.,0.,1.,1.,1.,1.,1.,1.25, 1.,1.,0.,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.,1.,0.,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.,1.,0.,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.};
257   CPPUNIT_ASSERT_EQUAL(2,slice1->getMeshDimension());
258   CPPUNIT_ASSERT_EQUAL(3,slice1->getSpaceDimension());
259   CPPUNIT_ASSERT_EQUAL(45,slice1->getNumberOfNodes());
260   CPPUNIT_ASSERT_EQUAL(12,slice1->getNumberOfCells());
261   CPPUNIT_ASSERT_EQUAL(12,ids->getNumberOfTuples());
262   CPPUNIT_ASSERT_EQUAL(68,slice1->getNodalConnectivity()->getNumberOfTuples());
263   CPPUNIT_ASSERT_EQUAL(13,slice1->getNodalConnectivityIndex()->getNumberOfTuples());
264   CPPUNIT_ASSERT(std::equal(expected8,expected8+12,ids->getConstPointer()));
265   CPPUNIT_ASSERT(std::equal(expected9,expected9+68,slice1->getNodalConnectivity()->getConstPointer()));
266   CPPUNIT_ASSERT(std::equal(expected10,expected10+13,slice1->getNodalConnectivityIndex()->getConstPointer()));
267   for(int i=0;i<135;i++)
268     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected11[i],slice1->getCoords()->getIJ(0,i),1e-12);
269   ids->decrRef();
270   slice1->decrRef();
271   //
272   mesh3D->decrRef();
273 }
274
275 void MEDCouplingBasicsTest5::testBuildSlice3DSurf1()
276 {
277   MEDCouplingUMesh *mesh2D=0;
278   MEDCouplingUMesh *mesh3D=build3DExtrudedUMesh_1(mesh2D);
279   mesh2D->decrRef();
280   DataArrayInt *a=DataArrayInt::New(),*b=DataArrayInt::New(),*c=DataArrayInt::New(),*d=DataArrayInt::New();
281   mesh2D=mesh3D->buildDescendingConnectivity(a,b,c,d);
282   a->decrRef(); b->decrRef(); c->decrRef(); d->decrRef();
283   mesh3D->decrRef();
284   //
285   const double vec1[3]={-0.07,1.,0.07};
286   const double origin1[3]={1.524,1.4552,1.74768};
287   DataArrayInt *ids=0;
288   MEDCouplingUMesh *slice1=mesh2D->buildSlice3DSurf(origin1,vec1,1e-10,ids);
289   const int expected1[25]={6,8,10,11,13,18,19,21,23,25,26,38,41,43,47,49,52,53,64,67,69,73,75,78,79};
290   const int expected2[75]={1,40,41,1,42,41,1,40,43,1,44,43,1,42,44,1,45,41,1,42,46,1,46,45,1,47,40,1,47,48,1,44,48,1,49,42,1,44,50,1,49,50,1,49,51,1,51,46,1,48,52,1,50,52,1,53,49,1,50,54,1,53,54,1,53,55,1,55,51,1,52,56,1,54,56};
291   const int expected3[26]={0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75};
292   const double expected4[171]={1.,1.,0.,1.,1.25,0.,1.,1.5,0.,2.,1.,0.,1.,2.,0.,0.,2.,0.,3.,1.,0.,3.,2.,0.,0.,1.,0.,2.,2.,0.,1.,1.,1.,1.,1.25,1.,1.,1.5,1.,2.,1.,1.,1.,2.,1.,0.,2.,1.,3.,1.,1.,3.,2.,1.,0.,1.,1.,2.,2.,1.,1.,1.,2.,1.,1.25,2.,1.,1.5,2.,2.,1.,2.,1.,2.,2.,0.,2.,2.,3.,1.,2.,3.,2.,2.,0.,1.,2.,2.,2.,2.,1.,1.,3.,1.,1.25,3.,1.,1.5,3.,2.,1.,3.,1.,2.,3.,0.,2.,3.,3.,1.,3.,3.,2.,3.,0.,1.,3.,2.,2.,3.,1.,1.5408576,0.,2.,1.6108576000000001,0.,2.,1.5408576,1.,1.,1.5,0.5836800000000008,1.,1.4708576,1.,3.,1.6808576,0.,3.,1.6108576000000001,1.,0.,1.4708576,0.,0.,1.4008576,1.,2.,1.4708576,2.,1.,1.4008576000000001,2.,3.,1.5408575999999998,2.,0.,1.3308575999999999,2.,2.,1.4008576,3.,1.,1.3308576,3.,3.,1.4708576,3.,0.,1.2608576,3.};
293   CPPUNIT_ASSERT_EQUAL(1,slice1->getMeshDimension());
294   CPPUNIT_ASSERT_EQUAL(3,slice1->getSpaceDimension());
295   CPPUNIT_ASSERT_EQUAL(57,slice1->getNumberOfNodes());
296   CPPUNIT_ASSERT_EQUAL(25,slice1->getNumberOfCells());
297   CPPUNIT_ASSERT_EQUAL(25,ids->getNumberOfTuples());
298   CPPUNIT_ASSERT_EQUAL(75,slice1->getNodalConnectivity()->getNumberOfTuples());
299   CPPUNIT_ASSERT_EQUAL(26,slice1->getNodalConnectivityIndex()->getNumberOfTuples());
300   CPPUNIT_ASSERT(std::equal(expected1,expected1+25,ids->getConstPointer()));
301   CPPUNIT_ASSERT(std::equal(expected2,expected2+47,slice1->getNodalConnectivity()->getConstPointer()));
302   CPPUNIT_ASSERT(std::equal(expected3,expected3+26,slice1->getNodalConnectivityIndex()->getConstPointer()));
303   for(int i=0;i<171;i++)
304     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected4[i],slice1->getCoords()->getIJ(0,i),1e-12);
305   ids->decrRef();
306   slice1->decrRef();
307   //
308   const double vec2[3]={0.,0.,1.};
309   const double origin2[3]={2.5,1.,2.};
310   slice1=mesh2D->buildSlice3DSurf(origin2,vec2,1e-10,ids);
311   const int expected5[68]={32,32,32,32,33,34,35,36,37,38,39,40,41,42,43,43,43,43,43,43,44,44,44,44,45,46,47,47,47,47,48,49,50,51,52,53,53,53,53,53,53,54,54,54,54,55,56,57,59,60,61,62,63,64,65,66,67,68,71,72,74,75,76,77,78,81,82,83};
312   const int expected6[204]={1,15,18,1,18,16,1,16,26,1,26,15,1,26,15,1,16,26,1,18,16,1,15,18,1,16,21,1,21,28,1,22,28,1,19,22,1,17,19,1,16,17,1,16,21,1,21,28,1,28,22,1,22,19,1,19,17,1,17,16,1,16,18,1,18,20,1,20,21,1,21,16,1,20,21,1,18,20,1,28,21,1,21,24,1,24,25,1,25,28,1,25,28,1,24,25,1,21,24,1,23,22,1,26,23,1,26,16,1,16,17,1,17,19,1,19,22,1,22,23,1,23,26,1,22,28,1,28,29,1,29,27,1,27,22,1,27,22,1,29,27,1,28,29,1,26,15,1,16,26,1,18,16,1,15,18,1,16,21,1,21,28,1,22,28,1,19,22,1,17,19,1,16,17,1,20,21,1,18,20,1,25,28,1,24,25,1,21,24,1,23,22,1,26,23,1,27,22,1,29,27,1,28,29};
313   const int expected7[69]={0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204};
314   const double expected8[135]={0.,0.,1.,1.,1.,1.,1.,1.25, 1.,1.,0.,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.,1.,0.,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.,1.,0.,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.};
315   CPPUNIT_ASSERT_EQUAL(1,slice1->getMeshDimension());
316   CPPUNIT_ASSERT_EQUAL(3,slice1->getSpaceDimension());
317   CPPUNIT_ASSERT_EQUAL(45,slice1->getNumberOfNodes());
318   CPPUNIT_ASSERT_EQUAL(68,slice1->getNumberOfCells());
319   CPPUNIT_ASSERT_EQUAL(68,ids->getNumberOfTuples());
320   CPPUNIT_ASSERT_EQUAL(204,slice1->getNodalConnectivity()->getNumberOfTuples());
321   CPPUNIT_ASSERT_EQUAL(69,slice1->getNodalConnectivityIndex()->getNumberOfTuples());
322   CPPUNIT_ASSERT(std::equal(expected5,expected5+68,ids->getConstPointer()));
323   CPPUNIT_ASSERT(std::equal(expected6,expected6+171,slice1->getNodalConnectivity()->getConstPointer()));
324   CPPUNIT_ASSERT(std::equal(expected7,expected7+69,slice1->getNodalConnectivityIndex()->getConstPointer()));
325   for(int i=0;i<135;i++)
326     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected8[i],slice1->getCoords()->getIJ(0,i),1e-12);
327   ids->decrRef();
328   slice1->decrRef();
329   //
330   mesh2D->decrRef();
331 }
332
333 void MEDCouplingBasicsTest5::testDataArrayDoubleAdvSetting1()
334 {
335   const double data1[14]={1.,11.,2.,12.,3.,13.,4.,14.,5.,15.,6.,16.,7.,17.};
336   const double data2[10]={8.,38.,9.,39.,0.,30.,11.,41.,12.,42.};
337   const char *comps[2]={"comp1","comp2"};
338   std::vector<std::string> compsCpp(comps,comps+2);
339   DataArrayDouble *da=DataArrayDouble::New();
340   DataArrayDouble *tmp=0;
341   da->setInfoAndChangeNbOfCompo(compsCpp);
342   da->setName("da");
343   da->alloc(7,2);
344   compsCpp.pop_back();
345   CPPUNIT_ASSERT_THROW(da->setInfoAndChangeNbOfCompo(compsCpp),INTERP_KERNEL::Exception);
346   std::copy(data1,data1+14,da->getPointer());
347   //
348   std::vector<std::pair<int,int> > p(3);
349   p[0].first=0; p[0].second=3; p[1].first=3; p[1].second=5; p[2].first=5; p[2].second=7;
350   tmp=dynamic_cast<DataArrayDouble *>(da->selectByTupleRanges(p));
351   CPPUNIT_ASSERT(tmp->isEqual(*da,1e-14));
352   tmp->decrRef();
353   p[0].first=0; p[0].second=2; p[1].first=3; p[1].second=4; p[2].first=5; p[2].second=7;
354   tmp=dynamic_cast<DataArrayDouble *>(da->selectByTupleRanges(p));
355   const double expected1[10]={1.,11.,2.,12.,4.,14.,6.,16.,7.,17.};
356   CPPUNIT_ASSERT_EQUAL(5,tmp->getNumberOfTuples());
357   CPPUNIT_ASSERT_EQUAL(2,tmp->getNumberOfComponents());
358   for(int i=0;i<10;i++)
359     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],tmp->getIJ(0,i),1e-14);
360   tmp->decrRef();
361   p[0].first=0; p[0].second=2; p[1].first=0; p[1].second=2; p[2].first=5; p[2].second=6;
362   tmp=dynamic_cast<DataArrayDouble *>(da->selectByTupleRanges(p));
363   const double expected2[10]={1.,11.,2.,12.,1.,11.,2.,12.,6.,16.};
364   CPPUNIT_ASSERT_EQUAL(5,tmp->getNumberOfTuples());
365   CPPUNIT_ASSERT_EQUAL(2,tmp->getNumberOfComponents());
366   for(int i=0;i<10;i++)
367     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],tmp->getIJ(0,i),1e-14);
368   tmp->decrRef();
369   p[0].first=0; p[0].second=2; p[1].first=-1; p[1].second=2; p[2].first=5; p[2].second=6;
370   CPPUNIT_ASSERT_THROW(da->selectByTupleRanges(p),INTERP_KERNEL::Exception);
371   p[0].first=0; p[0].second=2; p[1].first=0; p[1].second=2; p[2].first=5; p[2].second=8;
372   CPPUNIT_ASSERT_THROW(da->selectByTupleRanges(p),INTERP_KERNEL::Exception);
373   //
374   DataArrayDouble *da2=DataArrayDouble::New();
375   da2->alloc(5,2);
376   std::copy(data2,data2+10,da2->getPointer());
377   //
378   DataArrayDouble *dac=da->deepCpy();
379   dac->setContigPartOfSelectedValues2(1,da2,2,4,1);
380   const double expected3[14]={1.,11.,0.,30.,11.,41.,4.,14.,5.,15.,6.,16.,7.,17.};
381   for(int i=0;i<14;i++)
382     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],dac->getIJ(0,i),1e-14);
383   dac->decrRef();
384   //
385   dac=da->deepCpy();
386   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues2(3,da2,0,5,1),INTERP_KERNEL::Exception);
387   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues2(0,da2,4,6,1),INTERP_KERNEL::Exception);
388   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues2(3,da2,5,0,1),INTERP_KERNEL::Exception);
389   dac->setContigPartOfSelectedValues2(3,da2,1,5,1);
390   const double expected4[14]={1.,11.,2.,12.,3.,13.,9.,39.,0.,30.,11.,41.,12.,42.};
391   for(int i=0;i<14;i++)
392     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected4[i],dac->getIJ(0,i),1e-14);
393   dac->decrRef();
394   //
395   DataArrayInt *ids=DataArrayInt::New();
396   ids->alloc(3,1);
397   dac=da->deepCpy();
398   ids->setIJ(0,0,2); ids->setIJ(1,0,0); ids->setIJ(2,0,4);
399   dac->setContigPartOfSelectedValues(2,da2,ids);
400   const double expected5[14]={1.,11.,2.,12.,0.,30.,8.,38.,12.,42.,6.,16.,7.,17.};
401   for(int i=0;i<14;i++)
402     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],dac->getIJ(0,i),1e-14);
403   dac->decrRef();
404   //
405   dac=da->deepCpy();
406   ids->setIJ(0,0,2); ids->setIJ(1,0,5); ids->setIJ(2,0,4);
407   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues(1,da2,ids),INTERP_KERNEL::Exception);
408   ids->setIJ(0,0,2); ids->setIJ(1,0,2); ids->setIJ(2,0,-1);
409   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues(1,da2,ids),INTERP_KERNEL::Exception);
410   ids->setIJ(0,0,2); ids->setIJ(1,0,2); ids->setIJ(2,0,1);
411   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues(5,da2,ids),INTERP_KERNEL::Exception);
412   dac->decrRef();
413   //
414   ids->setIJ(0,0,2); ids->setIJ(1,0,2); ids->setIJ(2,0,1);
415   dac=da->deepCpy();
416   dac->setContigPartOfSelectedValues(4,da2,ids);
417   const double expected6[14]={1.,11.,2.,12.,3.,13.,4.,14.,0.,30.,0.,30.,9.,39.};
418   for(int i=0;i<14;i++)
419     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected6[i],dac->getIJ(0,i),1e-14);
420   dac->decrRef();
421   ids->decrRef();
422   //
423   da2->decrRef();
424   da->decrRef();
425 }
426
427 void MEDCouplingBasicsTest5::testDataArrayIntAdvSetting1()
428 {
429   const int data1[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
430   const int data2[10]={8,38,9,39,0,30,11,41,12,42};
431   const char *comps[2]={"comp1","comp2"};
432   std::vector<std::string> compsCpp(comps,comps+2);
433   DataArrayInt *da=DataArrayInt::New();
434   DataArrayInt *tmp=0;
435   da->setInfoAndChangeNbOfCompo(compsCpp);
436   da->setName("da");
437   da->alloc(7,2);
438   compsCpp.pop_back();
439   CPPUNIT_ASSERT_THROW(da->setInfoAndChangeNbOfCompo(compsCpp),INTERP_KERNEL::Exception);
440   std::copy(data1,data1+14,da->getPointer());
441   //
442   std::vector<std::pair<int,int> > p(3);
443   p[0].first=0; p[0].second=3; p[1].first=3; p[1].second=5; p[2].first=5; p[2].second=7;
444   tmp=dynamic_cast<DataArrayInt *>(da->selectByTupleRanges(p));
445   CPPUNIT_ASSERT(tmp->isEqual(*da));
446   tmp->decrRef();
447   p[0].first=0; p[0].second=2; p[1].first=3; p[1].second=4; p[2].first=5; p[2].second=7;
448   tmp=dynamic_cast<DataArrayInt *>(da->selectByTupleRanges(p));
449   const int expected1[10]={1,11,2,12,4,14,6,16,7,17};
450   CPPUNIT_ASSERT_EQUAL(5,tmp->getNumberOfTuples());
451   CPPUNIT_ASSERT_EQUAL(2,tmp->getNumberOfComponents());
452   for(int i=0;i<10;i++)
453     CPPUNIT_ASSERT_EQUAL(expected1[i],tmp->getIJ(0,i));
454   tmp->decrRef();
455   p[0].first=0; p[0].second=2; p[1].first=0; p[1].second=2; p[2].first=5; p[2].second=6;
456   tmp=dynamic_cast<DataArrayInt *>(da->selectByTupleRanges(p));
457   const int expected2[10]={1,11,2,12,1,11,2,12,6,16};
458   CPPUNIT_ASSERT_EQUAL(5,tmp->getNumberOfTuples());
459   CPPUNIT_ASSERT_EQUAL(2,tmp->getNumberOfComponents());
460   for(int i=0;i<10;i++)
461     CPPUNIT_ASSERT_EQUAL(expected2[i],tmp->getIJ(0,i));
462   tmp->decrRef();
463   p[0].first=0; p[0].second=2; p[1].first=-1; p[1].second=2; p[2].first=5; p[2].second=6;
464   CPPUNIT_ASSERT_THROW(da->selectByTupleRanges(p),INTERP_KERNEL::Exception);
465   p[0].first=0; p[0].second=2; p[1].first=0; p[1].second=2; p[2].first=5; p[2].second=8;
466   CPPUNIT_ASSERT_THROW(da->selectByTupleRanges(p),INTERP_KERNEL::Exception);
467   //
468   DataArrayInt *da2=DataArrayInt::New();
469   da2->alloc(5,2);
470   std::copy(data2,data2+10,da2->getPointer());
471   //
472   DataArrayInt *dac=da->deepCpy();
473   dac->setContigPartOfSelectedValues2(1,da2,2,4,1);
474   const int expected3[14]={1,11,0,30,11,41,4,14,5,15,6,16,7,17};
475   for(int i=0;i<14;i++)
476     CPPUNIT_ASSERT_EQUAL(expected3[i],dac->getIJ(0,i));
477   dac->decrRef();
478   //
479   dac=da->deepCpy();
480   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues2(3,da2,0,5,1),INTERP_KERNEL::Exception);
481   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues2(0,da2,4,6,1),INTERP_KERNEL::Exception);
482   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues2(3,da2,5,0,1),INTERP_KERNEL::Exception);
483   dac->setContigPartOfSelectedValues2(3,da2,1,5,1);
484   const int expected4[14]={1,11,2,12,3,13,9,39,0,30,11,41,12,42};
485   for(int i=0;i<14;i++)
486     CPPUNIT_ASSERT_EQUAL(expected4[i],dac->getIJ(0,i));
487   dac->decrRef();
488   //
489   DataArrayInt *ids=DataArrayInt::New();
490   ids->alloc(3,1);
491   dac=da->deepCpy();
492   ids->setIJ(0,0,2); ids->setIJ(1,0,0); ids->setIJ(2,0,4);
493   dac->setContigPartOfSelectedValues(2,da2,ids);
494   const int expected5[14]={1,11,2,12,0,30,8,38,12,42,6,16,7,17};
495   for(int i=0;i<14;i++)
496     CPPUNIT_ASSERT_EQUAL(expected5[i],dac->getIJ(0,i));
497   dac->decrRef();
498   //
499   dac=da->deepCpy();
500   ids->setIJ(0,0,2); ids->setIJ(1,0,5); ids->setIJ(2,0,4);
501   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues(1,da2,ids),INTERP_KERNEL::Exception);
502   ids->setIJ(0,0,2); ids->setIJ(1,0,2); ids->setIJ(2,0,-1);
503   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues(1,da2,ids),INTERP_KERNEL::Exception);
504   ids->setIJ(0,0,2); ids->setIJ(1,0,2); ids->setIJ(2,0,1);
505   CPPUNIT_ASSERT_THROW(dac->setContigPartOfSelectedValues(5,da2,ids),INTERP_KERNEL::Exception);
506   dac->decrRef();
507   //
508   ids->setIJ(0,0,2); ids->setIJ(1,0,2); ids->setIJ(2,0,1);
509   dac=da->deepCpy();
510   dac->setContigPartOfSelectedValues(4,da2,ids);
511   const int expected6[14]={1,11,2,12,3,13,4,14,0,30,0,30,9,39};
512   for(int i=0;i<14;i++)
513     CPPUNIT_ASSERT_EQUAL(expected6[i],dac->getIJ(0,i));
514   dac->decrRef();
515   ids->decrRef();
516   //
517   da2->decrRef();
518   da->decrRef();
519 }
520
521 void MEDCouplingBasicsTest5::testBuildDescendingConnec2Of3DMesh1()
522 {
523   MEDCouplingUMesh *mesh=build3DSourceMesh_1();
524   DataArrayInt *desc=DataArrayInt::New();
525   DataArrayInt *descIndx=DataArrayInt::New();
526   DataArrayInt *revDesc=DataArrayInt::New();
527   DataArrayInt *revDescIndx=DataArrayInt::New();
528   //
529   MEDCouplingUMesh *mesh2=mesh->buildDescendingConnectivity2(desc,descIndx,revDesc,revDescIndx);
530   mesh2->checkCoherency();
531   CPPUNIT_ASSERT_EQUAL(2,mesh2->getMeshDimension());
532   CPPUNIT_ASSERT_EQUAL(30,mesh2->getNumberOfCells());
533   CPPUNIT_ASSERT_EQUAL((std::size_t)31,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(31,revDescIndx->getNumberOfTuples());
534   CPPUNIT_ASSERT_EQUAL((std::size_t)13,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(13,descIndx->getNumberOfTuples());
535   CPPUNIT_ASSERT_EQUAL((std::size_t)48,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,desc->getNumberOfTuples());
536   CPPUNIT_ASSERT_EQUAL((std::size_t)48,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(48,revDesc->getNumberOfTuples());
537   const int expected1[48]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,-10,15,-5,-13,16,17,-14,18,-4,19,-2,20,21,22,23,24,25,-11,26,-1,-12,-25,-22,27,28,-7,-20,-24,29,-16,-18,30,-8,-28};
538   CPPUNIT_ASSERT(std::equal(expected1,expected1+48,desc->getConstPointer()));
539   const int expected2[13]={0,4,8,12,16,20,24,28,32,36,40,44,48};
540   CPPUNIT_ASSERT(std::equal(expected2,expected2+13,descIndx->getConstPointer()));
541   const int expected3[31]={0,2,4,5,7,9,10,12,14,15,17,19,21,23,25,26,28,29,31,32,34,35,37,38,40,42,43,44,46,47,48};
542   CPPUNIT_ASSERT(std::equal(expected3,expected3+31,revDescIndx->getConstPointer()));
543   const int expected4[48]={0,8,0,6,0,0,5,1,4,1,1,9,1,11,2,2,3,2,7,2,8,3,4,3,5,3,4,10,4,5,11,5,6,10,6,6,9,7,7,10,7,8,8,9,9,11,10,11};
544   CPPUNIT_ASSERT(std::equal(expected4,expected4+48,revDesc->getConstPointer()));
545   DataArrayInt *conn=mesh2->getNodalConnectivity();
546   DataArrayInt *connIndex=mesh2->getNodalConnectivityIndex();
547   const int expected5[31]={0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120};
548   CPPUNIT_ASSERT(std::equal(expected5,expected5+31,connIndex->getConstPointer()));
549   const int expected6[120]={3,8,1,7,3,8,3,1,3,1,3,7,3,7,3,8,3,6,0,8,3,6,2,0,3,0,2,8,3,8,2,6,3,7,4,5,3,7,8,4,3,4,8,5,3,5,8,7,3,6,8,4,3,6,7,8,3,4,7,6,3,8,4,0,3,0,4,6,3,6,3,8,3,7,3,6,3,8,0,1,3,1,0,3,3,3,0,8,3,4,1,5,3,4,8,1,3,1,8,5,3,1,7,5,3,0,2,3,3,3,2,8,3,1,4,0,3,3,2,6};
550   CPPUNIT_ASSERT(std::equal(expected6,expected6+120,conn->getConstPointer()));
551   //
552   desc->decrRef();
553   descIndx->decrRef();
554   revDesc->decrRef();
555   revDescIndx->decrRef();
556   mesh2->decrRef();
557   mesh->decrRef();
558 }
559
560 void MEDCouplingBasicsTest5::testAre2DCellsNotCorrectlyOriented1()
561 {
562   double m1Coords[8]={1.,1.,-1.,-1.,-1.,-1.,1.,-1.};
563   int m1Conn[4]={0,3,1,2};
564   MEDCouplingUMesh *m1=MEDCouplingUMesh::New();
565   m1->setMeshDimension(2);
566   m1->allocateCells(1);
567   m1->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,m1Conn);
568   m1->finishInsertingCells();
569   DataArrayDouble *myCoords1=DataArrayDouble::New();
570   myCoords1->alloc(4,2);
571   std::copy(m1Coords,m1Coords+8,myCoords1->getPointer());
572   m1->setCoords(myCoords1);
573   myCoords1->decrRef();
574   //
575   double vec1[3]={0.,0.,1.};
576   double *vec2=new double[2];
577   for(int i=0;i<18;i++)
578     {
579       vec2[0]=3.*cos(M_PI/9.*i);
580       vec2[1]=3.*sin(M_PI/9.*i);
581       MEDCouplingUMesh *m1Cpy=static_cast<MEDCouplingUMesh *>(m1->deepCpy());
582       m1Cpy->translate(vec2);
583       std::vector<int> res;
584       CPPUNIT_ASSERT_THROW(m1Cpy->are2DCellsNotCorrectlyOriented(vec1,false,res),INTERP_KERNEL::Exception);
585       res.clear();
586       m1Cpy->changeSpaceDimension(3);
587       m1Cpy->are2DCellsNotCorrectlyOriented(vec1,false,res);
588       CPPUNIT_ASSERT_EQUAL(1,(int)res.size());
589       CPPUNIT_ASSERT_EQUAL(0,res[0]);
590       m1Cpy->decrRef();
591     }
592   delete [] vec2;
593   //
594   m1->decrRef();
595 }
596
597 void MEDCouplingBasicsTest5::testDataArrayAbs1()
598 {
599   DataArrayDouble *d1=DataArrayDouble::New();
600   const double val1[12]={2.,-3.,-5.,6.,-7.,-8.,9.,10.,-11.,-12.,-13.,-15.};
601   const double expected1[12]={2.,3.,5.,6.,7.,8.,9.,10.,11.,12.,13.,15.};
602   d1->alloc(6,2);
603   std::copy(val1,val1+12,d1->getPointer());
604   DataArrayInt *d2=d1->convertToIntArr();
605   //
606   d1->abs();
607   for(int i=0;i<12;i++)
608     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],d1->getIJ(0,i),1e-14);
609   //
610   const int expected2[12]={2,3,5,6,7,8,9,10,11,12,13,15};
611   d2->abs();
612   for(int i=0;i<12;i++)
613     CPPUNIT_ASSERT_EQUAL(expected2[i],d2->getIJ(0,i));
614   //
615   d2->decrRef();
616   d1->decrRef();
617 }
618
619 void MEDCouplingBasicsTest5::testGetValueOn3()
620 {
621   const double v[4]={0.,1.,1.5,2.};
622   const double v2[5]={0.7,1.25,0.,2.,1.5};
623   const double disp[12]={5.,50.,500.,6.,60.,600.,7.,70.,700.,8.,80.,800.};
624   MEDCouplingUMesh *m=MEDCouplingUMesh::New("myMesh",1);
625   const int nbNodes=4;
626   const int nbCells=nbNodes-1;
627   m->allocateCells(nbCells);
628   DataArrayDouble *coords=DataArrayDouble::New();
629   coords->alloc(nbNodes,1);
630   std::copy(v,v+nbNodes,coords->getPointer());
631   m->setCoords(coords);
632   coords->decrRef();
633   const int conn[6]={0,1,2,1,2,3};
634   m->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn);
635   m->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn+2);
636   m->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,conn+4);
637   m->finishInsertingCells();
638   MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_NODES);
639   f->setMesh(m);
640   DataArrayDouble *array=DataArrayDouble::New();
641   array->alloc(m->getNumberOfNodes(),3);
642   std::copy(disp,disp+12,array->getPointer());
643   f->setArray(array);
644   array->decrRef();
645   DataArrayDouble *arr1=f->getValueOnMulti(v2,5);
646   CPPUNIT_ASSERT_EQUAL(5,arr1->getNumberOfTuples());
647   CPPUNIT_ASSERT_EQUAL(3,arr1->getNumberOfComponents());
648   const double expected1[15]={5.7,57.,570.,6.5,65.,650.,5.,50.,500.,8.,80.,800.,7.,70.,700.};
649   for(int i=0;i<15;i++)
650     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],arr1->getIJ(0,i),1e-14);
651   arr1->decrRef();
652   f->decrRef();
653   m->decrRef();
654 }
655
656 void MEDCouplingBasicsTest5::testGetNodeIdsOfCell2()
657 {
658   MEDCouplingCMesh *m1c=MEDCouplingCMesh::New();
659   DataArrayDouble *coordsX=DataArrayDouble::New();
660   double arrX[5] = { -1., 1., 2., 4., 4.5 };
661   coordsX->useArray(arrX,false, CPP_DEALLOC,5,1);
662   DataArrayDouble *coordsY=DataArrayDouble::New();
663   double arrY[4] = { -2., 2., 4., 8. };
664   coordsY->useArray(arrY,false, CPP_DEALLOC,4,1);
665   DataArrayDouble *coordsZ=DataArrayDouble::New();
666   double arrZ[3] = { -2., 2., 4. };
667   coordsZ->useArray(arrZ,false, CPP_DEALLOC,3,1);  
668   // test in 1D
669   m1c->setCoordsAt(0,coordsX);
670   CPPUNIT_ASSERT_EQUAL(4,m1c->getNumberOfCells());
671   const int expected1[4][2]={{0,1},{1,2},{2,3},{3,4}};
672   for(int i=0;i<4;i++)
673     {
674       std::vector<int> v;
675       m1c->getNodeIdsOfCell(i,v);
676       CPPUNIT_ASSERT((int)v.size()==2);
677       std::equal(v.begin(),v.end(),expected1[i]);
678     }
679   // test in 2D
680   m1c->setCoordsAt(1,coordsY);
681   CPPUNIT_ASSERT_EQUAL(12,m1c->getNumberOfCells());
682   const int expected2[12][4]={{0,1,6,5},{1,2,7,6},{2,3,8,7},{3,4,9,8},{4,5,11,10},{5,6,12,11},{6,7,13,12},{7,8,14,13},{8,9,16,15},{9,10,17,16},{10,11,18,17},{11,12,19,18}};
683   for(int i=0;i<12;i++)
684     {
685       std::vector<int> v;
686       m1c->getNodeIdsOfCell(i,v);
687       CPPUNIT_ASSERT((int)v.size()==4);
688       std::equal(v.begin(),v.end(),expected2[i]);
689     }
690   // test in 3D
691   m1c->setCoordsAt(2,coordsZ);
692   CPPUNIT_ASSERT_EQUAL(24,m1c->getNumberOfCells());
693   const int expected3[24][8]={{0,1,6,5,20,21,26,25},{1,2,7,6,21,22,27,26},{2,3,8,7,22,23,28,27},{3,4,9,8,23,24,29,28},{4,5,11,10,24,25,31,30},{5,6,12,11,25,26,32,31},{6,7,13,12,26,27,33,32},{7,8,14,13,27,28,34,33},{8,9,16,15,28,29,36,35},{9,10,17,16,29,30,37,36},{10,11,18,17,30,31,38,37},{11,12,19,18,31,32,39,38},{20,21,26,25,40,41,46,45},{21,22,27,26,41,42,47,46},{22,23,28,27,42,43,48,47},{23,24,29,28,43,44,49,48},{24,25,31,30,44,45,51,50},{25,26,32,31,45,46,52,51},{26,27,33,32,46,47,53,52},{27,28,34,33,47,48,54,53},{28,29,36,35,48,49,56,55},{29,30,37,36,49,50,57,56},{30,31,38,37,50,51,58,57},{31,32,39,38,51,52,59,58}};
694   for(int i=0;i<12;i++)
695     {
696       std::vector<int> v;
697       m1c->getNodeIdsOfCell(i,v);
698       CPPUNIT_ASSERT((int)v.size()==8);
699       std::equal(v.begin(),v.end(),expected3[i]);
700     }
701   //
702   coordsX->decrRef();
703   coordsY->decrRef();
704   coordsZ->decrRef();
705   m1c->decrRef();
706 }
707
708 void MEDCouplingBasicsTest5::testRenumberNodesInConn1()
709 {
710   double mesh2DCoords[27]={-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. };
711   int mesh2DConn[18]={1,4,2, 4,5,2, 0,3,4,1, 6,7,4,3, 7,8,5,4};
712   MEDCouplingUMesh *mesh2D=MEDCouplingUMesh::New("mesh",2);
713   mesh2D->allocateCells(5);
714   mesh2D->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,mesh2DConn);
715   mesh2D->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,mesh2DConn+3);
716   mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,mesh2DConn+6);
717   mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,mesh2DConn+10);
718   mesh2D->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,mesh2DConn+14);
719   mesh2D->finishInsertingCells();
720   DataArrayDouble *myCoords=DataArrayDouble::New();
721   myCoords->alloc(9,3);
722   std::copy(mesh2DCoords,mesh2DCoords+27,myCoords->getPointer());
723   mesh2D->setCoords(myCoords);
724   myCoords->decrRef();
725   mesh2D->checkCoherency();
726   //
727   double mesh3DCoords[24]={-0.3,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.2,-0.3,0., -0.3,-0.3,1., -0.3,0.2,1., 0.2,0.2,1., 0.2,-0.3,1. };
728   int mesh3DConn[8]={0,1,2,3,4,5,6,7};
729   MEDCouplingUMesh *mesh3D=MEDCouplingUMesh::New("mesh",3);
730   mesh3D->allocateCells(1);
731   mesh3D->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,mesh3DConn);
732   mesh3D->finishInsertingCells();
733   DataArrayDouble *myCoords3D=DataArrayDouble::New();
734   myCoords3D->alloc(8,3);
735   std::copy(mesh3DCoords,mesh3DCoords+24,myCoords3D->getPointer());
736   mesh3D->setCoords(myCoords3D);
737   myCoords3D->decrRef();
738   mesh3D->checkCoherency();
739   //
740   MEDCouplingUMesh *mesh3D_2=dynamic_cast<MEDCouplingUMesh *>(mesh3D->deepCpy());
741   MEDCouplingUMesh *mesh2D_2=dynamic_cast<MEDCouplingUMesh *>(mesh2D->deepCpy());
742   MEDCouplingUMesh *mesh3D_4=dynamic_cast<MEDCouplingUMesh *>(mesh3D->deepCpy());
743   MEDCouplingUMesh *mesh2D_4=dynamic_cast<MEDCouplingUMesh *>(mesh2D->deepCpy());
744   DataArrayInt *renumNodes=DataArrayInt::New();
745   int oldNbOf3DNodes=mesh3D->getNumberOfNodes();
746   renumNodes->alloc(mesh2D->getNumberOfNodes(),1);
747   renumNodes->iota(oldNbOf3DNodes);
748   DataArrayDouble *coo=DataArrayDouble::Aggregate(mesh3D->getCoords(),mesh2D->getCoords());
749   mesh3D->setCoords(coo);
750   mesh2D->setCoords(coo);
751   coo->decrRef();
752   MEDCouplingUMesh *mesh2D_3=dynamic_cast<MEDCouplingUMesh *>(mesh2D->deepCpy());
753   mesh2D_3->shiftNodeNumbersInConn(oldNbOf3DNodes);
754   mesh2D->renumberNodesInConn(renumNodes->getConstPointer());
755   renumNodes->decrRef();
756   CPPUNIT_ASSERT(mesh2D_3->isEqual(mesh2D,1e-12));
757   mesh2D_3->decrRef();
758   //
759   DataArrayInt *da1,*da2;
760   mesh3D->checkGeoEquivalWith(mesh3D_2,10,1e-12,da1,da2);
761   CPPUNIT_ASSERT(da1==0);
762   CPPUNIT_ASSERT_EQUAL(8,da2->getNumberOfTuples());
763   CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
764   const int expected1[8]={8,11,12,9,4,5,6,7};
765   for(int i=0;i<8;i++)
766     CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(i,0));
767   da2->decrRef();
768   //
769   mesh2D->checkGeoEquivalWith(mesh2D_2,10,1e-12,da1,da2);
770   CPPUNIT_ASSERT(da1==0);
771   CPPUNIT_ASSERT_EQUAL(9,da2->getNumberOfTuples());
772   CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
773   for(int i=0;i<9;i++)
774     CPPUNIT_ASSERT_EQUAL(8+i,da2->getIJ(i,0));
775   da2->decrRef();
776   //
777   const double vect[3]={1.,0.,0.};
778   MEDCouplingUMesh *mesh2D_5=dynamic_cast<MEDCouplingUMesh *>(mesh2D_4->deepCpy());
779   mesh2D_5->translate(vect);
780   std::vector<MEDCouplingUMesh *> meshes(3);
781   meshes[0]=mesh3D_4; meshes[1]=mesh2D_4; meshes[2]=mesh2D_5;
782   MEDCouplingUMesh::PutUMeshesOnSameAggregatedCoords(meshes);
783   CPPUNIT_ASSERT(mesh3D_4->getCoords()==mesh2D_4->getCoords());
784   CPPUNIT_ASSERT(mesh2D_4->getCoords()==mesh2D_5->getCoords());
785   mesh3D_4->checkCoherency(); mesh2D_4->checkCoherency(); mesh2D_5->checkCoherency();
786   CPPUNIT_ASSERT_EQUAL(26,mesh3D_4->getNumberOfNodes());
787   CPPUNIT_ASSERT_EQUAL(3,mesh3D_4->getSpaceDimension());
788   CPPUNIT_ASSERT_EQUAL(9,mesh3D_4->getNodalConnectivity()->getNumberOfTuples());
789   CPPUNIT_ASSERT_EQUAL(23,mesh2D_4->getNodalConnectivity()->getNumberOfTuples());
790   CPPUNIT_ASSERT_EQUAL(23,mesh2D_5->getNodalConnectivity()->getNumberOfTuples());
791   const int expected2[9]={18,0,1,2,3,4,5,6,7};
792   const int expected3[23]={3,9,12,10, 3,12,13,10, 4,8,11,12,9, 4,14,15,12,11, 4,15,16,13,12};
793   const int expected4[23]={3,18,21,19, 3,21,22,19, 4,17,20,21,18, 4,23,24,21,20, 4,24,25,22,21};
794   const double expected5[78]={-0.3,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.2,-0.3,0., -0.3,-0.3,1., -0.3,0.2,1., 0.2,0.2,1., 0.2,-0.3,1., -0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0., 0.7, -0.3, 0.0, 1.2, -0.3, 0.0, 1.7, -0.3, 0.0, 0.7, 0.2, 0.0, 1.2, 0.2, 0.0, 1.7, 0.2, 0.0, 0.7, 0.7, 0.0, 1.2, 0.7, 0.0, 1.7, 0.7, 0.0};
795   CPPUNIT_ASSERT(std::equal(expected2,expected2+9,mesh3D_4->getNodalConnectivity()->getConstPointer()));
796   CPPUNIT_ASSERT(std::equal(expected3,expected3+23,mesh2D_4->getNodalConnectivity()->getConstPointer()));
797   CPPUNIT_ASSERT(std::equal(expected4,expected4+23,mesh2D_5->getNodalConnectivity()->getConstPointer()));
798   for(int i=0;i<78;i++)
799     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],mesh3D_4->getCoords()->getIJ(0,i),1e-12);
800   //
801   MEDCouplingUMesh::MergeNodesOnUMeshesSharingSameCoords(meshes,1e-12);
802   mesh3D_4->checkCoherency(); mesh2D_4->checkCoherency(); mesh2D_5->checkCoherency();
803   CPPUNIT_ASSERT(mesh3D_4->getCoords()==mesh2D_4->getCoords());
804   CPPUNIT_ASSERT(mesh2D_4->getCoords()==mesh2D_5->getCoords());
805   CPPUNIT_ASSERT_EQUAL(19,mesh3D_4->getNumberOfNodes());
806   CPPUNIT_ASSERT_EQUAL(3,mesh3D_4->getSpaceDimension());
807   CPPUNIT_ASSERT_EQUAL(9,mesh3D_4->getNodalConnectivity()->getNumberOfTuples());
808   CPPUNIT_ASSERT_EQUAL(23,mesh2D_4->getNodalConnectivity()->getNumberOfTuples());
809   CPPUNIT_ASSERT_EQUAL(23,mesh2D_5->getNodalConnectivity()->getNumberOfTuples());
810   const int expected6[9]={18,0,1,2,3,4,5,6,7};
811   const int expected7[23]={3,3,2,8, 3,2,9,8, 4,0,1,2,3, 4,10,11,2,1, 4,11,12,9,2};
812   const int expected8[23]={3,13,15,14, 3,15,16,14, 4,8,9,15,13, 4,12,17,15,9, 4,17,18,16,15};
813   const double expected9[57]={-0.3, -0.3, 0., -0.3, 0.2, 0., 0.2, 0.2, 0., 0.2, -0.3, 0., -0.3, -0.3, 1., -0.3, 0.2, 1., 
814                               0.2, 0.2, 1., 0.2, -0.3, 1., 0.7, -0.3, 0., 0.7, 0.2, 0., -0.3, 0.7, 0., 0.2, 0.7, 0., 
815                               0.7, 0.7, 0., 1.2, -0.3, 0., 1.7, -0.3, 0., 1.2, 0.2, 0., 1.7, 0.2, 0., 1.2, 0.7, 0., 1.7, 0.7, 0.};
816   CPPUNIT_ASSERT(std::equal(expected6,expected6+9,mesh3D_4->getNodalConnectivity()->getConstPointer()));
817   CPPUNIT_ASSERT(std::equal(expected7,expected7+23,mesh2D_4->getNodalConnectivity()->getConstPointer()));
818   CPPUNIT_ASSERT(std::equal(expected8,expected8+23,mesh2D_5->getNodalConnectivity()->getConstPointer()));
819   for(int i=0;i<57;i++)
820     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected9[i],mesh3D_4->getCoords()->getIJ(0,i),1e-12);
821   mesh2D_5->decrRef();
822   //
823   mesh3D_4->decrRef();
824   mesh2D_4->decrRef();
825   mesh3D_2->decrRef();
826   mesh2D_2->decrRef();
827   //
828   mesh3D->decrRef();
829   mesh2D->decrRef();
830 }
831
832 void MEDCouplingBasicsTest5::testComputeNeighborsOfCells1()
833 {
834   MEDCouplingUMesh *m=build2DTargetMesh_1();
835   DataArrayInt *d1=0,*d2=0;
836   m->computeNeighborsOfCells(d1,d2);
837   CPPUNIT_ASSERT_EQUAL(6,d2->getNumberOfTuples());
838   CPPUNIT_ASSERT_EQUAL(10,d1->getNumberOfTuples());
839   const int expected1[6]={0,2,4,6,8,10};
840   const int expected2[10]={3,1,0,2,4,1,4,0,2,3};
841   CPPUNIT_ASSERT(std::equal(expected1,expected1+6,d2->getConstPointer()));
842   CPPUNIT_ASSERT(std::equal(expected2,expected2+10,d1->getConstPointer()));
843   d1->decrRef();
844   d2->decrRef();
845   m->decrRef();
846 }
847
848 void MEDCouplingBasicsTest5::testCheckButterflyCellsBug1()
849 {
850   double mesh2DCoords[10]={323.85,120.983748908684,317.5,131.982271536747,336.55,120.983748908686,330.2,131.982271536751,323.85,142.98079416481};
851   int mesh2DConn[5]={4,1,0,2,3};
852   MEDCouplingUMesh *mesh2D=MEDCouplingUMesh::New("mesh",2);
853   mesh2D->allocateCells(1);
854   mesh2D->insertNextCell(INTERP_KERNEL::NORM_POLYGON,5,mesh2DConn);
855   mesh2D->finishInsertingCells();
856   DataArrayDouble *myCoords=DataArrayDouble::New();
857   myCoords->alloc(5,2);
858   std::copy(mesh2DCoords,mesh2DCoords+10,myCoords->getPointer());
859   mesh2D->setCoords(myCoords);
860   myCoords->decrRef();
861   mesh2D->checkCoherency();
862   //
863   std::vector<int> v;
864   mesh2D->checkButterflyCells(v);
865   CPPUNIT_ASSERT_EQUAL(0,(int)v.size());
866   //
867   mesh2D->decrRef();
868 }
869
870 void MEDCouplingBasicsTest5::testDataArrayIntRange1()
871 {
872   DataArrayInt *d=DataArrayInt::Range(2,17,7);
873   const int expected1[3]={2,9,16};
874   CPPUNIT_ASSERT_EQUAL(3,d->getNumberOfTuples());
875   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
876   CPPUNIT_ASSERT(std::equal(expected1,expected1+3,d->getConstPointer()));
877   d->decrRef();
878   //
879   d=DataArrayInt::Range(2,23,7);
880   CPPUNIT_ASSERT_EQUAL(3,d->getNumberOfTuples());
881   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
882   CPPUNIT_ASSERT(std::equal(expected1,expected1+3,d->getConstPointer()));
883   d->decrRef();
884   //
885   d=DataArrayInt::Range(2,24,7);
886   const int expected2[4]={2,9,16,23};
887   CPPUNIT_ASSERT_EQUAL(4,d->getNumberOfTuples());
888   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
889   CPPUNIT_ASSERT(std::equal(expected2,expected2+4,d->getConstPointer()));
890   d->decrRef();
891   //
892   d=DataArrayInt::Range(24,2,-7);
893   const int expected3[4]={24,17,10,3};
894   CPPUNIT_ASSERT_EQUAL(4,d->getNumberOfTuples());
895   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
896   CPPUNIT_ASSERT(std::equal(expected3,expected3+4,d->getConstPointer()));
897   d->decrRef();
898   //
899   d=DataArrayInt::Range(23,2,-7);
900   const int expected4[3]={23,16,9};
901   CPPUNIT_ASSERT_EQUAL(3,d->getNumberOfTuples());
902   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
903   CPPUNIT_ASSERT(std::equal(expected4,expected4+3,d->getConstPointer()));
904   d->decrRef();
905   //
906   d=DataArrayInt::Range(23,22,-7);
907   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfTuples());
908   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
909   CPPUNIT_ASSERT_EQUAL(23,d->getIJ(0,0));
910   d->decrRef();
911   //
912   d=DataArrayInt::Range(22,23,7);
913   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfTuples());
914   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
915   CPPUNIT_ASSERT_EQUAL(22,d->getIJ(0,0));
916   d->decrRef();
917   //
918   d=DataArrayInt::Range(22,22,7);
919   CPPUNIT_ASSERT_EQUAL(0,d->getNumberOfTuples());
920   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
921   d->decrRef();
922   //
923   d=DataArrayInt::Range(22,22,-7);
924   CPPUNIT_ASSERT_EQUAL(0,d->getNumberOfTuples());
925   CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
926   d->decrRef();
927   //
928   CPPUNIT_ASSERT_THROW(DataArrayInt::Range(22,23,-7),INTERP_KERNEL::Exception);
929   CPPUNIT_ASSERT_THROW(DataArrayInt::Range(23,22,7),INTERP_KERNEL::Exception);
930   CPPUNIT_ASSERT_THROW(DataArrayInt::Range(23,22,0),INTERP_KERNEL::Exception);
931   CPPUNIT_ASSERT_THROW(DataArrayInt::Range(22,23,0),INTERP_KERNEL::Exception);
932 }
933
934 void MEDCouplingBasicsTest5::testDataArrayDoubleGetMinMaxPerComponent1()
935 {
936   const double values1[12]={1.,2.,3.,-0.9,2.1,3.,1.3,1.7,3.,1.,1.8,3.};
937   DataArrayDouble *d1=DataArrayDouble::New();
938   double *res=new double[2*3];
939   CPPUNIT_ASSERT_THROW(d1->getMinMaxPerComponent(res),INTERP_KERNEL::Exception);
940   d1->alloc(4,3);
941   std::copy(values1,values1+12,d1->getPointer());
942   d1->getMinMaxPerComponent(res);
943   const double expected1[6]={-0.9,1.3,1.7,2.1,3.,3.};
944   for(int i=0;i<6;i++)
945     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],res[i],1e-14);
946   delete [] res;
947   //
948   d1->rearrange(2);
949   res=new double[2*2];
950   d1->getMinMaxPerComponent(res);
951   const double expected2[4]={1.,3.,-0.9,3.};
952   for(int i=0;i<4;i++)
953     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],res[i],1e-14);
954   delete [] res;
955   //
956   d1->rearrange(1);
957   res=new double[2*1];
958   d1->getMinMaxPerComponent(res);
959   const double expected3[2]={-0.9,3.};
960   for(int i=0;i<2;i++)
961     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],res[i],1e-14);
962   delete [] res;
963   d1->decrRef();
964 }
965
966 void MEDCouplingBasicsTest5::testDataArrayIntGetHashCode1()
967 {
968   DataArrayInt *d1=DataArrayInt::New(); d1->alloc(3545,1); d1->iota(0);
969   DataArrayInt *d2=DataArrayInt::New(); d2->alloc(3545,1); d2->iota(0);
970   //
971   CPPUNIT_ASSERT_EQUAL(d1->getHashCode(),d2->getHashCode());
972   CPPUNIT_ASSERT_EQUAL(232341068,d1->getHashCode());
973   d1->setIJ(886,0,6);
974   CPPUNIT_ASSERT_EQUAL(232340188,d1->getHashCode());
975   //
976   d1->decrRef();
977   d2->decrRef();
978 }
979
980 void MEDCouplingBasicsTest5::testZipConnectivityPol1()
981 {
982   MEDCouplingUMesh *m1=build2DTargetMesh_1();
983   const int cells1[3]={2,3,4};
984   MEDCouplingPointSet *m2_1=m1->buildPartOfMySelf(cells1,cells1+3,true);
985   MEDCouplingUMesh *m2=dynamic_cast<MEDCouplingUMesh *>(m2_1);
986   DataArrayInt *arr=0;
987   CPPUNIT_ASSERT(m2);
988   // no permutation policy 0
989   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,0,arr));
990   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
991   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
992   CPPUNIT_ASSERT(std::equal(cells1,cells1+3,arr->getConstPointer()));
993   arr->decrRef();
994   // no permutation policy 1
995   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,1,arr));
996   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
997   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
998   CPPUNIT_ASSERT(std::equal(cells1,cells1+3,arr->getConstPointer()));
999   arr->decrRef();
1000   // no permutation policy 2
1001   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,2,arr));
1002   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1003   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1004   CPPUNIT_ASSERT(std::equal(cells1,cells1+3,arr->getConstPointer()));
1005   arr->decrRef();
1006   // some modification into m2
1007   const int modif1[3]={2,4,5};
1008   std::copy(modif1,modif1+3,m2->getNodalConnectivity()->getPointer()+1);
1009   //policy 0 fails because cell0 in m2 has same orientation be not same connectivity
1010   const int expected1[3]={5,3,4};
1011   CPPUNIT_ASSERT(!m1->areCellsIncludedIn(m2,0,arr));
1012   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1013   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1014   CPPUNIT_ASSERT(std::equal(expected1,expected1+3,arr->getConstPointer()));
1015   arr->decrRef();
1016   //policy 1 succeeds because cell0 in m2 has not exactly the same conn
1017   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,1,arr));
1018   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1019   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1020   CPPUNIT_ASSERT(std::equal(cells1,cells1+3,arr->getConstPointer()));
1021   arr->decrRef();
1022   //policy 2 succeeds because cell0 in m2 has same nodes in connectivity
1023   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,2,arr));
1024   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1025   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1026   CPPUNIT_ASSERT(std::equal(cells1,cells1+3,arr->getConstPointer()));
1027   arr->decrRef();
1028   //some new modification into m2
1029   const int modif2[3]={2,5,4};
1030   std::copy(modif2,modif2+3,m2->getNodalConnectivity()->getPointer()+1);
1031   //policy 0 fails because cell0 in m2 has not exactly the same conn
1032   CPPUNIT_ASSERT(!m1->areCellsIncludedIn(m2,0,arr));
1033   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1034   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1035   CPPUNIT_ASSERT(std::equal(expected1,expected1+3,arr->getConstPointer()));
1036   arr->decrRef();
1037   //policy 1 fails too because cell0 in m2 has not same orientation
1038   CPPUNIT_ASSERT(!m1->areCellsIncludedIn(m2,1,arr));
1039   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1040   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1041   CPPUNIT_ASSERT(std::equal(expected1,expected1+3,arr->getConstPointer()));
1042   arr->decrRef();
1043   //policy 2 succeeds because cell0 in m2 has same nodes in connectivity
1044   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,2,arr));
1045   CPPUNIT_ASSERT_EQUAL(3,arr->getNumberOfTuples());
1046   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1047   CPPUNIT_ASSERT(std::equal(cells1,cells1+3,arr->getConstPointer()));
1048   arr->decrRef();
1049   m1->decrRef();
1050   m2->decrRef();
1051   // Now 1D
1052   const int cells2[2]={3,2};
1053   m1=build1DSourceMesh_2();
1054   m2_1=m1->buildPartOfMySelf(cells2,cells2+2,true);
1055   m2=dynamic_cast<MEDCouplingUMesh *>(m2_1);
1056   CPPUNIT_ASSERT(m2);
1057   arr=0;
1058   // no permutation policy 0
1059   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,0,arr));
1060   CPPUNIT_ASSERT_EQUAL(2,arr->getNumberOfTuples());
1061   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1062   CPPUNIT_ASSERT(std::equal(cells2,cells2+2,arr->getConstPointer()));
1063   arr->decrRef();
1064   // no permutation policy 1
1065   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,1,arr));
1066   CPPUNIT_ASSERT_EQUAL(2,arr->getNumberOfTuples());
1067   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1068   CPPUNIT_ASSERT(std::equal(cells2,cells2+2,arr->getConstPointer()));
1069   arr->decrRef();
1070   // no permutation policy 2
1071   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,2,arr));
1072   CPPUNIT_ASSERT_EQUAL(2,arr->getNumberOfTuples());
1073   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1074   CPPUNIT_ASSERT(std::equal(cells2,cells2+2,arr->getConstPointer()));
1075   arr->decrRef();
1076   // some modification into m2
1077   const int modif3[2]={4,3};
1078   std::copy(modif3,modif3+2,m2->getNodalConnectivity()->getPointer()+1);
1079   //policy 0 fails because cell0 in m2 has not exactly the same conn
1080   const int expected2[2]={4,2};
1081   CPPUNIT_ASSERT(!m1->areCellsIncludedIn(m2,0,arr));
1082   CPPUNIT_ASSERT_EQUAL(2,arr->getNumberOfTuples());
1083   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1084   CPPUNIT_ASSERT(std::equal(expected2,expected2+2,arr->getConstPointer()));
1085   arr->decrRef();
1086   //policy 1 fails too because cell0 in m2 has not same orientation
1087   CPPUNIT_ASSERT(!m1->areCellsIncludedIn(m2,1,arr));
1088   CPPUNIT_ASSERT_EQUAL(2,arr->getNumberOfTuples());
1089   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1090   CPPUNIT_ASSERT(std::equal(expected2,expected2+2,arr->getConstPointer()));
1091   arr->decrRef();
1092   //policy 2 succeeds because cell0 in m2 has same nodes in connectivity
1093   CPPUNIT_ASSERT(m1->areCellsIncludedIn(m2,2,arr));
1094   CPPUNIT_ASSERT_EQUAL(2,arr->getNumberOfTuples());
1095   CPPUNIT_ASSERT_EQUAL(1,arr->getNumberOfComponents());
1096   CPPUNIT_ASSERT(std::equal(cells2,cells2+2,arr->getConstPointer()));
1097   arr->decrRef();
1098   m1->decrRef();
1099   m2->decrRef();
1100 }
1101
1102 void MEDCouplingBasicsTest5::testConvexEnvelop2D1()
1103 {
1104   const double coords[662]={7.54758495819e-14,-1.12270326253e-12,8.43143594193,-1.02835845055e-12,4.21571797096,7.30183771609,-4.21571797097,7.30183771609,-8.43143594193,-1.09439981894e-12,-4.21571797097,-7.30183771609,4.21571797097,-7.30183771609,16.8628718839,-1.02835845055e-12,12.6471539129,7.30183771609,8.43143594193,14.6036754322,2.26427548746e-13,14.6036754322,-8.43143594193,14.6036754322,-12.6471539129,7.30183771609,-16.8628718839,-1.39630321727e-12,-12.6471539129,-7.30183771609,-8.43143594193,-14.6036754322,3.7737924791e-14,-14.6036754322,8.43143594193,-14.6036754322,12.6471539129,-7.30183771609,25.2943078258,-1.07553085654e-12,21.0785898548,7.30183771609,16.8628718839,14.6036754322,12.6471539129,21.9055131483,4.21571797096,21.9055131483,-4.21571797097,21.9055131483,-12.6471539129,21.9055131483,-16.8628718839,14.6036754322,-21.0785898548,7.30183771609,-25.2943078258,-1.02835845055e-12,-21.0785898548,-7.30183771609,-16.8628718839,-14.6036754322,-12.6471539129,-21.9055131483,-4.21571797097,-21.9055131483,4.21571797097,-21.9055131483,12.6471539129,-21.9055131483,16.8628718839,-14.6036754322,21.0785898548,-7.30183771609,33.7257437677,-7.45324014622e-13,29.5100257968,7.30183771609,25.2943078258,14.6036754322,21.0785898548,21.9055131483,16.8628718839,29.2073508644,8.43143594193,29.2073508644,-1.20761359331e-12,29.2073508644,-8.43143594193,29.2073508644,-16.8628718839,29.2073508644,-21.0785898548,21.9055131483,-25.2943078258,14.6036754322,-29.5100257968,7.30183771609,-33.7257437677,-7.26455052226e-13,-29.5100257968,-7.30183771609,-25.2943078258,-14.6036754322,-21.0785898548,-21.9055131483,-16.8628718839,-29.2073508644,-8.43143594193,-29.2073508644,4.15117172701e-13,-29.2073508644,8.43143594193,-29.2073508644,16.8628718839,-29.2073508644,21.0785898548,-21.9055131483,25.2943078258,-14.6036754322,29.5100257968,-7.30183771609,42.1571797097,-1.86802727715e-12,37.9414617387,7.30183771609,33.7257437677,14.6036754322,29.5100257968,21.9055131483,25.2943078258,29.2073508644,21.0785898548,36.5091885805,12.6471539129,36.5091885805,4.21571797096,36.5091885805,-4.21571797096,36.5091885805,-12.6471539129,36.5091885805,-21.0785898548,36.5091885805,-25.2943078258,29.2073508644,-29.5100257968,21.9055131483,-33.7257437677,14.6036754322,-37.9414617387,7.30183771609,-42.1571797097,-9.81186044565e-13,-37.9414617387,-7.30183771609,-33.7257437677,-14.6036754322,-29.5100257968,-21.9055131483,-25.2943078258,-29.2073508644,-21.0785898548,-36.5091885805,-12.6471539129,-36.5091885805,-4.21571797097,-36.5091885805,4.21571797097,-36.5091885805,12.6471539129,-36.5091885805,21.0785898548,-36.5091885805,25.2943078258,-29.2073508644,29.5100257968,-21.9055131483,33.7257437677,-14.6036754322,37.9414617387,-7.30183771609,50.5886156516,-6.98151608633e-13,46.3728976806,7.30183771609,42.1571797097,14.6036754322,37.9414617387,21.9055131483,33.7257437677,29.2073508644,29.5100257968,36.5091885805,25.2943078258,43.8110262966,16.8628718839,43.8110262966,8.43143594193,43.8110262966,-1.84915831476e-12,43.8110262966,-8.43143594193,43.8110262966,-16.8628718839,43.8110262966,-25.2943078258,43.8110262966,-29.5100257968,36.5091885805,-33.7257437677,29.2073508644,-37.9414617387,21.9055131483,-42.1571797097,14.6036754322,-46.3728976806,7.30183771609,-50.5886156516,-1.47177906685e-12,-46.3728976806,-7.30183771609,-42.1571797097,-14.6036754322,-37.9414617387,-21.9055131483,-33.7257437677,-29.2073508644,-29.5100257968,-36.5091885805,-25.2943078258,-43.8110262966,-16.8628718839,-43.8110262966,-8.43143594193,-43.8110262966,7.54758495819e-14,-43.8110262966,8.43143594193,-43.8110262966,16.8628718839,-43.8110262966,25.2943078258,-43.8110262966,29.5100257968,-36.5091885805,33.7257437677,-29.2073508644,37.9414617387,-21.9055131483,42.1571797097,-14.6036754322,46.3728976806,-7.30183771609,59.0200515935,-7.9249642061e-13,54.8043336225,7.30183771609,50.5886156516,14.6036754322,46.3728976806,21.9055131483,42.1571797097,29.2073508644,37.9414617387,36.5091885805,33.7257437677,43.8110262966,29.5100257968,51.1128640127,21.0785898548,51.1128640127,12.6471539129,51.1128640127,4.21571797096,51.1128640127,-4.21571797096,51.1128640127,-12.6471539129,51.1128640127,-21.0785898548,51.1128640127,-29.5100257968,51.1128640127,-33.7257437677,43.8110262966,-37.9414617387,36.5091885805,-42.1571797097,29.2073508644,-46.3728976806,21.9055131483,-50.5886156516,14.6036754322,-54.8043336226,7.30183771609,-59.0200515935,-1.31139288649e-12,-54.8043336226,-7.30183771609,-50.5886156516,-14.6036754322,-46.3728976806,-21.9055131483,-42.1571797097,-29.2073508644,-37.9414617387,-36.5091885805,-33.7257437677,-43.8110262966,-29.5100257968,-51.1128640127,-21.0785898548,-51.1128640127,-12.6471539129,-51.1128640127,-4.21571797097,-51.1128640127,4.21571797097,-51.1128640127,12.6471539129,-51.1128640127,21.0785898548,-51.1128640127,29.5100257968,-51.1128640127,33.7257437677,-43.8110262966,37.9414617387,-36.5091885805,42.1571797097,-29.2073508644,46.3728976806,-21.9055131483,50.5886156516,-14.6036754322,54.8043336225,-7.30183771609,67.4514875354,-2.14162723189e-12,63.2357695645,7.30183771609,59.0200515935,14.6036754322,54.8043336226,21.9055131483,50.5886156516,29.2073508644,46.3728976806,36.5091885805,42.1571797097,43.8110262966,37.9414617387,51.1128640127,33.7257437677,58.4147017287,25.2943078258,58.4147017287,16.8628718839,58.4147017287,8.43143594193,58.4147017287,6.79282646237e-13,58.4147017287,-8.43143594193,58.4147017287,-16.8628718839,58.4147017287,-25.2943078258,58.4147017287,-33.7257437677,58.4147017287,-37.9414617387,51.1128640127,-42.1571797097,43.8110262966,-46.3728976806,36.5091885805,-50.5886156516,29.2073508644,-54.8043336226,21.9055131483,-59.0200515935,14.6036754322,-63.2357695645,7.30183771609,-67.4514875354,-1.16044118732e-12,-63.2357695645,-7.30183771609,-59.0200515935,-14.6036754322,-54.8043336226,-21.9055131483,-50.5886156516,-29.2073508644,-46.3728976806,-36.5091885805,-42.1571797097,-43.8110262966,-37.9414617387,-51.1128640127,-33.7257437677,-58.4147017287,-25.2943078258,-58.4147017287,-16.8628718839,-58.4147017287,-8.43143594193,-58.4147017287,-5.66068871864e-14,-58.4147017287,8.43143594193,-58.4147017287,16.8628718839,-58.4147017287,25.2943078258,-58.4147017287,33.7257437677,-58.4147017287,37.9414617387,-51.1128640127,42.1571797097,-43.8110262966,46.3728976806,-36.5091885805,50.5886156516,-29.2073508644,54.8043336226,-21.9055131483,59.0200515935,-14.6036754322,63.2357695645,-7.30183771609,75.8829234774,-2.29257893105e-12,71.6672055064,7.30183771609,67.4514875354,14.6036754322,63.2357695645,21.9055131483,59.0200515935,29.2073508644,54.8043336226,36.5091885805,50.5886156516,43.8110262966,46.3728976806,51.1128640127,42.1571797097,58.4147017287,37.9414617387,65.7165394448,29.5100257968,65.7165394448,21.0785898548,65.7165394448,12.6471539129,65.7165394448,4.21571797097,65.7165394448,-4.21571797096,65.7165394448,-12.6471539129,65.7165394448,-21.0785898548,65.7165394448,-29.5100257968,65.7165394448,-37.9414617387,65.7165394448,-42.1571797097,58.4147017287,-46.3728976806,51.1128640127,-50.5886156516,43.8110262966,-54.8043336226,36.5091885805,-59.0200515935,29.2073508644,-63.2357695645,21.9055131483,-67.4514875354,14.6036754322,-71.6672055064,7.30183771609,-75.8829234774,-1.31139288649e-12,-71.6672055064,-7.30183771609,-67.4514875354,-14.6036754322,-63.2357695645,-21.9055131483,-59.0200515935,-29.2073508644,-54.8043336226,-36.5091885805,-50.5886156516,-43.8110262966,-46.3728976806,-51.1128640127,-42.1571797097,-58.4147017287,-37.9414617387,-65.7165394448,-29.5100257968,-65.7165394448,-21.0785898548,-65.7165394448,-12.6471539129,-65.7165394448,-4.21571797097,-65.7165394448,4.21571797097,-65.7165394448,12.6471539129,-65.7165394448,21.0785898548,-65.7165394448,29.5100257968,-65.7165394448,37.9414617387,-65.7165394448,42.1571797097,-58.4147017287,46.3728976806,-51.1128640127,50.5886156516,-43.8110262966,54.8043336226,-36.5091885805,59.0200515935,-29.2073508644,63.2357695645,-21.9055131483,67.4514875354,-14.6036754322,71.6672055064,-7.30183771609,84.3143594193,-1.49064802924e-12,80.0986414483,7.30183771609,75.8829234774,14.6036754322,71.6672055064,21.9055131483,67.4514875354,29.2073508644,63.2357695645,36.5091885805,59.0200515935,43.8110262966,54.8043336226,51.1128640127,50.5886156516,58.4147017287,46.3728976806,65.7165394448,42.1571797097,73.0183771609,33.7257437677,73.0183771609,25.2943078258,73.0183771609,16.8628718839,73.0183771609,8.43143594193,73.0183771609,2.0755858635e-12,73.0183771609,-8.43143594193,73.0183771609,-16.8628718839,73.0183771609,-25.2943078258,73.0183771609,-33.7257437677,73.0183771609,-42.1571797097,73.0183771609,-46.3728976806,65.7165394448,-50.5886156516,58.4147017287,-54.8043336226,51.1128640127,-59.0200515935,43.8110262966,-63.2357695645,36.5091885805,-67.4514875354,29.2073508644,-71.6672055064,21.9055131483,-75.8829234774,14.6036754322,-80.0986414483,7.30183771609,-84.3143594193,-1.11326878133e-12,-80.0986414483,-7.30183771609,-75.8829234774,-14.6036754322,-71.6672055064,-21.9055131483,-67.4514875354,-29.2073508644,-63.2357695645,-36.5091885805,-59.0200515935,-43.8110262966,-54.8043336226,-51.1128640127,-50.5886156516,-58.4147017287,-46.3728976806,-65.7165394448,-42.1571797097,-73.0183771609,-33.7257437677,-73.0183771609,-25.2943078258,-73.0183771609,-16.8628718839,-73.0183771609,-8.43143594193,-73.0183771609,-5.66068871864e-14,-73.0183771609,8.43143594193,-73.0183771609,16.8628718839,-73.0183771609,25.2943078258,-73.0183771609,33.7257437677,-73.0183771609,42.1571797097,-73.0183771609,46.3728976806,-65.7165394448,50.5886156516,-58.4147017287,54.8043336226,-51.1128640127,59.0200515935,-43.8110262966,63.2357695645,-36.5091885805,67.4514875354,-29.2073508644,71.6672055064,-21.9055131483,75.8829234774,-14.6036754322,80.0986414483,-7.3018377161};
1105   const int conn[2137]={0,2,3,4,5,6,1,1,8,2,0,6,18,7,2,9,10,3,0,1,8,3,10,11,12,4,0,2,4,3,12,13,14,5,0,5,0,4,14,15,16,6,6,1,0,5,16,17,18,7,20,8,1,18,36,19,8,21,9,2,1,7,20,9,22,23,10,2,8,21,10,23,24,11,3,2,9,11,24,25,26,12,3,10,12,11,26,27,13,4,3,13,12,27,28,29,14,4,14,4,13,29,30,15,5,15,5,14,30,31,32,16,16,6,5,15,32,33,17,17,18,6,16,33,34,35,18,7,1,6,17,35,36,19,38,20,7,36,60,37,20,39,21,8,7,19,38,21,40,22,9,8,20,39,22,41,42,23,9,21,40,23,42,43,24,10,9,22,24,43,44,25,11,10,23,25,44,45,46,26,11,24,26,25,46,47,27,12,11,27,26,47,48,28,13,12,28,27,48,49,50,29,13,29,13,28,50,51,30,14,30,14,29,51,52,31,15,31,15,30,52,53,54,32,32,16,15,31,54,55,33,33,17,16,32,55,56,34,34,35,17,33,56,57,58,35,36,18,17,34,58,59,36,19,7,18,35,59,60,37,62,38,19,60,90,61,38,63,39,20,19,37,62,39,64,40,21,20,38,63,40,65,41,22,21,39,64,41,66,67,42,22,40,65,42,67,68,43,23,22,41,43,68,69,44,24,23,42,44,69,70,45,25,24,43,45,70,71,72,46,25,44,46,45,72,73,47,26,25,47,46,73,74,48,27,26,48,47,74,75,49,28,27,49,48,75,76,77,50,28,50,28,49,77,78,51,29,51,29,50,78,79,52,30,52,30,51,79,80,53,31,53,31,52,80,81,82,54,54,32,31,53,82,83,55,55,33,32,54,83,84,56,56,34,33,55,84,85,57,57,58,34,56,85,86,87,58,59,35,34,57,87,88,59,60,36,35,58,88,89,60,37,19,36,59,89,90,61,92,62,37,90,126,91,62,93,63,38,37,61,92,63,94,64,39,38,62,93,64,95,65,40,39,63,94,65,96,66,41,40,64,95,66,97,98,67,41,65,96,67,98,99,68,42,41,66,68,99,100,69,43,42,67,69,100,101,70,44,43,68,70,101,102,71,45,44,69,71,102,103,104,72,45,70,72,71,104,105,73,46,45,73,72,105,106,74,47,46,74,73,106,107,75,48,47,75,74,107,108,76,49,48,76,75,108,109,110,77,49,77,49,76,110,111,78,50,78,50,77,111,112,79,51,79,51,78,112,113,80,52,80,52,79,113,114,81,53,81,53,80,114,115,116,82,82,54,53,81,116,117,83,83,55,54,82,117,118,84,84,56,55,83,118,119,85,85,57,56,84,119,120,86,86,87,57,85,120,121,122,87,88,58,57,86,122,123,88,89,59,58,87,123,124,89,90,60,59,88,124,125,90,61,37,60,89,125,126,91,128,92,61,126,168,127,92,129,93,62,61,91,128,93,130,94,63,62,92,129,94,131,95,64,63,93,130,95,132,96,65,64,94,131,96,133,97,66,65,95,132,97,134,135,98,66,96,133,98,135,136,99,67,66,97,99,136,137,100,68,67,98,100,137,138,101,69,68,99,101,138,139,102,70,69,100,102,139,140,103,71,70,101,103,140,141,142,104,71,102,104,103,142,143,105,72,71,105,104,143,144,106,73,72,106,105,144,145,107,74,73,107,106,145,146,108,75,74,108,107,146,147,109,76,75,109,108,147,148,149,110,76,110,76,109,149,150,111,77,111,77,110,150,151,112,78,112,78,111,151,152,113,79,113,79,112,152,153,114,80,114,80,113,153,154,115,81,115,81,114,154,155,156,116,116,82,81,115,156,157,117,117,83,82,116,157,158,118,118,84,83,117,158,159,119,119,85,84,118,159,160,120,120,86,85,119,160,161,121,121,122,86,120,161,162,163,122,123,87,86,121,163,164,123,124,88,87,122,164,165,124,125,89,88,123,165,166,125,126,90,89,124,166,167,126,91,61,90,125,167,168,127,170,128,91,168,216,169,128,171,129,92,91,127,170,129,172,130,93,92,128,171,130,173,131,94,93,129,172,131,174,132,95,94,130,173,132,175,133,96,95,131,174,133,176,134,97,96,132,175,134,177,178,135,97,133,176,135,178,179,136,98,97,134,136,179,180,137,99,98,135,137,180,181,138,100,99,136,138,181,182,139,101,100,137,139,182,183,140,102,101,138,140,183,184,141,103,102,139,141,184,185,186,142,103,140,142,141,186,187,143,104,103,143,142,187,188,144,105,104,144,143,188,189,145,106,105,145,144,189,190,146,107,106,146,145,190,191,147,108,107,147,146,191,192,148,109,108,148,147,192,193,194,149,109,149,109,148,194,195,150,110,150,110,149,195,196,151,111,151,111,150,196,197,152,112,152,112,151,197,198,153,113,153,113,152,198,199,154,114,154,114,153,199,200,155,115,155,115,154,200,201,202,156,156,116,115,155,202,203,157,157,117,116,156,203,204,158,158,118,117,157,204,205,159,159,119,118,158,205,206,160,160,120,119,159,206,207,161,161,121,120,160,207,208,162,162,163,121,161,208,209,210,163,164,122,121,162,210,211,164,165,123,122,163,211,212,165,166,124,123,164,212,213,166,167,125,124,165,213,214,167,168,126,125,166,214,215,168,127,91,126,167,215,216,169,218,170,127,216,270,217,170,219,171,128,127,169,218,171,220,172,129,128,170,219,172,221,173,130,129,171,220,173,222,174,131,130,172,221,174,223,175,132,131,173,222,175,224,176,133,132,174,223,176,225,177,134,133,175,224,177,226,227,178,134,176,225,178,227,228,179,135,134,177,179,228,229,180,136,135,178,180,229,230,181,137,136,179,181,230,231,182,138,137,180,182,231,232,183,139,138,181,183,232,233,184,140,139,182,184,233,234,185,141,140,183,185,234,235,236,186,141,184,186,185,236,237,187,142,141,187,186,237,238,188,143,142,188,187,238,239,189,144,143,189,188,239,240,190,145,144,190,189,240,241,191,146,145,191,190,241,242,192,147,146,192,191,242,243,193,148,147,193,192,243,244,245,194,148,194,148,193,245,246,195,149,195,149,194,246,247,196,150,196,150,195,247,248,197,151,197,151,196,248,249,198,152,198,152,197,249,250,199,153,199,153,198,250,251,200,154,200,154,199,251,252,201,155,201,155,200,252,253,254,202,202,156,155,201,254,255,203,203,157,156,202,255,256,204,204,158,157,203,256,257,205,205,159,158,204,257,258,206,206,160,159,205,258,259,207,207,161,160,206,259,260,208,208,162,161,207,260,261,209,209,210,162,208,261,262,263,210,211,163,162,209,263,264,211,212,164,163,210,264,265,212,213,165,164,211,265,266,213,214,166,165,212,266,267,214,215,167,166,213,267,268,215,216,168,167,214,268,269,216,169,127,168,215,269,270,217,272,218,169,270,330,271,218,273,219,170,169,217,272,219,274,220,171,170,218,273,220,275,221,172,171,219,274,221,276,222,173,172,220,275,222,277,223,174,173,221,276,223,278,224,175,174,222,277,224,279,225,176,175,223,278,225,280,226,177,176,224,279,226,281,282,227,177,225,280,227,282,283,228,178,177,226,228,283,284,229,179,178,227,229,284,285,230,180,179,228,230,285,286,231,181,180,229,231,286,287,232,182,181,230,232,287,288,233,183,182,231,233,288,289,234,184,183,232,234,289,290,235,185,184,233,235,290,291,292,236,185,234,236,235,292,293,237,186,185,237,236,293,294,238,187,186,238,237,294,295,239,188,187,239,238,295,296,240,189,188,240,239,296,297,241,190,189,241,240,297,298,242,191,190,242,241,298,299,243,192,191,243,242,299,300,244,193,192,244,243,300,301,302,245,193,245,193,244,302,303,246,194,246,194,245,303,304,247,195,247,195,246,304,305,248,196,248,196,247,305,306,249,197,249,197,248,306,307,250,198,250,198,249,307,308,251,199,251,199,250,308,309,252,200,252,200,251,309,310,253,201,253,201,252,310,311,312,254,254,202,201,253,312,313,255,255,203,202,254,313,314,256,256,204,203,255,314,315,257,257,205,204,256,315,316,258,258,206,205,257,316,317,259,259,207,206,258,317,318,260,260,208,207,259,318,319,261,261,209,208,260,319,320,262,262,263,209,261,320,321,322,263,264,210,209,262,322,323,264,265,211,210,263,323,324,265,266,212,211,264,324,325,266,267,213,212,265,325,326,267,268,214,213,266,326,327,268,269,215,214,267,327,328,269,270,216,215,268,328,329,270,217,169,216,269,329,330,271,272,217,330,273,218,217,271,274,219,218,272,275,220,219,273,276,221,220,274,277,222,221,275,278,223,222,276,279,224,223,277,280,225,224,278,281,226,225,279,281,282,226,280,283,227,226,281,284,228,227,282,285,229,228,283,286,230,229,284,287,231,230,285,288,232,231,286,289,233,232,287,290,234,233,288,291,235,234,289,291,292,235,290,291,293,236,235,292,294,237,236,293,295,238,237,294,296,239,238,295,297,240,239,296,298,241,240,297,299,242,241,298,300,243,242,299,301,244,243,301,300,302,244,244,301,303,245,245,302,304,246,246,303,305,247,247,304,306,248,248,305,307,249,249,306,308,250,250,307,309,251,251,308,310,252,252,309,311,253,311,253,310,312,254,253,311,313,255,254,312,314,256,255,313,315,257,256,314,316,258,257,315,317,259,258,316,318,260,259,317,319,261,260,318,320,262,261,319,321,321,322,262,320,323,263,262,321,324,264,263,322,325,265,264,323,326,266,265,324,327,267,266,325,328,268,267,326,329,269,268,327,330,270,269,328,271,217,270,329};
1106   const int connI[332]={0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,343,350,357,364,371,378,385,392,399,406,413,420,427,434,441,448,455,462,469,476,483,490,497,504,511,518,525,532,539,546,553,560,567,574,581,588,595,602,609,616,623,630,637,644,651,658,665,672,679,686,693,700,707,714,721,728,735,742,749,756,763,770,777,784,791,798,805,812,819,826,833,840,847,854,861,868,875,882,889,896,903,910,917,924,931,938,945,952,959,966,973,980,987,994,1001,1008,1015,1022,1029,1036,1043,1050,1057,1064,1071,1078,1085,1092,1099,1106,1113,1120,1127,1134,1141,1148,1155,1162,1169,1176,1183,1190,1197,1204,1211,1218,1225,1232,1239,1246,1253,1260,1267,1274,1281,1288,1295,1302,1309,1316,1323,1330,1337,1344,1351,1358,1365,1372,1379,1386,1393,1400,1407,1414,1421,1428,1435,1442,1449,1456,1463,1470,1477,1484,1491,1498,1505,1512,1519,1526,1533,1540,1547,1554,1561,1568,1575,1582,1589,1596,1603,1610,1617,1624,1631,1638,1645,1652,1659,1666,1673,1680,1687,1694,1701,1708,1715,1722,1729,1736,1743,1750,1757,1764,1771,1778,1785,1792,1799,1806,1813,1820,1827,1834,1841,1848,1855,1862,1869,1876,1883,1890,1897,1901,1905,1909,1913,1917,1921,1925,1929,1933,1937,1941,1945,1949,1953,1957,1961,1965,1969,1973,1977,1981,1985,1989,1993,1997,2001,2005,2009,2013,2017,2021,2025,2029,2033,2037,2041,2045,2049,2053,2057,2061,2065,2069,2073,2077,2081,2085,2089,2093,2097,2101,2105,2109,2113,2117,2121,2125,2129,2133,2137};
1107   //
1108   MEDCouplingUMesh *m=MEDCouplingUMesh::New("convexhull",2);
1109   m->allocateCells(331);
1110   for(int i=0;i<331;i++)
1111     m->insertNextCell(INTERP_KERNEL::NORM_POLYGON,connI[i+1]-connI[i],conn+connI[i]);
1112   m->finishInsertingCells();
1113   DataArrayDouble *coordsDa=DataArrayDouble::New();
1114   coordsDa->alloc(331,2);
1115   std::copy(coords,coords+662,coordsDa->getPointer());
1116   m->setCoords(coordsDa);
1117   coordsDa->decrRef();
1118   m->checkCoherency();
1119   //
1120   DataArrayInt *da=m->convexEnvelop2D();
1121   m->checkCoherency();
1122   CPPUNIT_ASSERT(coordsDa==m->getCoords());
1123   DataArrayInt *daC=da->buildComplement(331);
1124   da->decrRef();
1125   const int expected[58]={271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330};
1126   DataArrayInt *expected2=DataArrayInt::New();
1127   expected2->alloc(58,1);
1128   std::copy(expected,expected+58,expected2->getPointer());
1129   CPPUNIT_ASSERT(expected2->isEqual(*daC));
1130   //
1131   expected2->decrRef();
1132   daC->decrRef();
1133   //
1134   MEDCouplingFieldDouble *valsF=m->getMeasureField(ON_CELLS);
1135   DataArrayDouble *vals=valsF->getArray();
1136   const double ref[331]={184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,184.69493088478035,-61.564976961404426,-92.34746544254946,-92.34746544259811,-92.34746544253488,-92.3474654425349,-92.34746544180479,-92.34746544253493,-92.3474654419026,-92.34746544190256,-92.34746544253491,-61.564976961404426,-92.34746544254946,-92.34746544259811,-92.34746544253488,-92.3474654425349,-92.34746544180479,-92.34746544253493,-92.3474654419026,-92.34746544190256,-92.34746544253491,-61.564976961404426,-92.34746544254946,-92.34746544259811,-92.34746544253488,-92.3474654425349,-92.34746544180479,-92.34746544253493,-92.3474654419026,-92.34746544190256,-92.34746544253491,61.564976961404426,-92.34746544254946,-92.34746544259811,-92.34746544253488,-92.3474654425349,-92.34746544180479,-92.34746544253493,-92.3474654419026,-92.34746544190256,-92.34746544253491,61.564976961404426,-92.34746544254946,-92.34746544259811,-92.34746544253488,-92.3474654425349,-92.34746544180479,-92.34746544253493,-92.3474654419026,-92.34746544190256,-92.34746544253491,-61.564976961404426,-92.34746544254946,-92.34746544259811,-92.34746544253488,-92.3474654425349,-92.34746544180479,-92.34746544253493,-92.3474654419026,-92.34746544190256,-92.34746544253491};
1137   DataArrayDouble *ref2=DataArrayDouble::New(); ref2->alloc(331,1); std::copy(ref,ref+331,ref2->getPointer());
1138   vals->substractEqual(ref2);
1139   ref2->decrRef();
1140   vals->abs();
1141   DataArrayInt *theTest=vals->getIdsInRange(-1.,1e-7);
1142   CPPUNIT_ASSERT(theTest->isIdentity());
1143   CPPUNIT_ASSERT_EQUAL(331,theTest->getNumberOfTuples());
1144   theTest->decrRef();
1145   valsF->decrRef();
1146   //
1147   m->decrRef();
1148 }
1149
1150 void MEDCouplingBasicsTest5::testDataArraySort1()
1151 {
1152   DataArrayInt *arr=DataArrayInt::New();
1153   CPPUNIT_ASSERT_THROW(arr->sort(true),INTERP_KERNEL::Exception);//no allocation
1154   CPPUNIT_ASSERT_THROW(arr->sort(false),INTERP_KERNEL::Exception);//no allocation
1155   const int values[6]={2,1,6,5,4,7};
1156   arr->alloc(3,2);
1157   CPPUNIT_ASSERT_THROW(arr->sort(true),INTERP_KERNEL::Exception);//no one component
1158   CPPUNIT_ASSERT_THROW(arr->sort(false),INTERP_KERNEL::Exception);//no one component
1159   arr->rearrange(1);
1160   std::copy(values,values+6,arr->getPointer());
1161   DataArrayInt *arr1=arr->deepCpy();
1162   DataArrayInt *arr2=arr->deepCpy();
1163   arr1->sort(true);
1164   const int expected1[6]={1,2,4,5,6,7};
1165   CPPUNIT_ASSERT_EQUAL(6,arr1->getNumberOfTuples());
1166   CPPUNIT_ASSERT_EQUAL(1,arr1->getNumberOfComponents());
1167   CPPUNIT_ASSERT(std::equal(expected1,expected1+6,arr1->begin()));
1168   arr2->sort(false);
1169   const int expected2[6]={7,6,5,4,2,1};
1170   CPPUNIT_ASSERT_EQUAL(6,arr2->getNumberOfTuples());
1171   CPPUNIT_ASSERT_EQUAL(1,arr2->getNumberOfComponents());
1172   CPPUNIT_ASSERT(std::equal(expected2,expected2+6,arr2->begin()));
1173   arr1->decrRef();
1174   arr2->decrRef();
1175   arr->decrRef();
1176   //
1177   DataArrayDouble *ard=DataArrayDouble::New();
1178   CPPUNIT_ASSERT_THROW(ard->sort(true),INTERP_KERNEL::Exception);//no allocation
1179   CPPUNIT_ASSERT_THROW(ard->sort(false),INTERP_KERNEL::Exception);//no allocation
1180   const double valuesD[6]={2.,1.,6.,5.,4.,7.};
1181   ard->alloc(3,2);
1182   CPPUNIT_ASSERT_THROW(ard->sort(true),INTERP_KERNEL::Exception);//no one component
1183   CPPUNIT_ASSERT_THROW(ard->sort(false),INTERP_KERNEL::Exception);//no one component
1184   ard->rearrange(1);
1185   std::copy(valuesD,valuesD+6,ard->getPointer());
1186   DataArrayDouble *ard1=ard->deepCpy();
1187   DataArrayDouble *ard2=ard->deepCpy();
1188   ard1->sort(true);
1189   const double expected3[6]={1.,2.,4.,5.,6.,7.};
1190   CPPUNIT_ASSERT_EQUAL(6,ard1->getNumberOfTuples());
1191   CPPUNIT_ASSERT_EQUAL(1,ard1->getNumberOfComponents());
1192   for(int i=0;i<6;i++)
1193     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],ard1->getIJ(i,0),1e-12);
1194   ard2->sort(false);
1195   const double expected4[6]={7.,6.,5.,4.,2.,1.};
1196   CPPUNIT_ASSERT_EQUAL(6,ard2->getNumberOfTuples());
1197   CPPUNIT_ASSERT_EQUAL(1,ard2->getNumberOfComponents());
1198   for(int i=0;i<6;i++)
1199     CPPUNIT_ASSERT_DOUBLES_EQUAL(expected4[i],ard2->getIJ(i,0),1e-12);
1200   ard1->decrRef();
1201   ard2->decrRef();
1202   ard->decrRef();
1203 }
1204
1205 void MEDCouplingBasicsTest5::testPartitionBySpreadZone1()
1206 {
1207   MEDCouplingUMesh *m=build2DTargetMesh_1();
1208   const int part0[3]={2,3,4};
1209   const int part1[2]={0,1};
1210   MEDCouplingUMesh *m1=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf(part0,part0+3));
1211   MEDCouplingUMesh *m2=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf(part1,part1+2));
1212   std::vector<const MEDCouplingUMesh *> v(3); v[0]=m; v[1]=m1; v[2]=m2;
1213   MEDCouplingUMesh *m4=MEDCouplingUMesh::MergeUMeshes(v);
1214   const int renum[10]={5,2,9,6,4,7,0,1,3,8};
1215   m4->renumberCells(renum);
1216   //
1217   std::vector<DataArrayInt *> v2=m4->partitionBySpreadZone();
1218   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
1219   const int expected0[3]={0,1,7};
1220   const int expected1[5]={2,4,5,6,9};
1221   const int expected2[2]={3,8};
1222   CPPUNIT_ASSERT_EQUAL(3,v2[0]->getNumberOfTuples());
1223   CPPUNIT_ASSERT_EQUAL(1,v2[0]->getNumberOfComponents());
1224   CPPUNIT_ASSERT_EQUAL(5,v2[1]->getNumberOfTuples());
1225   CPPUNIT_ASSERT_EQUAL(1,v2[1]->getNumberOfComponents());
1226   CPPUNIT_ASSERT_EQUAL(2,v2[2]->getNumberOfTuples());
1227   CPPUNIT_ASSERT_EQUAL(1,v2[2]->getNumberOfComponents());
1228   //
1229   CPPUNIT_ASSERT(std::equal(expected0,expected0+3,v2[0]->getConstPointer()));
1230   CPPUNIT_ASSERT(std::equal(expected1,expected1+5,v2[1]->getConstPointer()));
1231   CPPUNIT_ASSERT(std::equal(expected2,expected2+2,v2[2]->getConstPointer()));
1232   v2[0]->decrRef();
1233   v2[1]->decrRef();
1234   v2[2]->decrRef();
1235   //
1236   MEDCouplingUMesh *m5=m4->buildSpreadZonesWithPoly();
1237   CPPUNIT_ASSERT_EQUAL(3,m5->getNumberOfCells());
1238   CPPUNIT_ASSERT(m5->getCoords()==m4->getCoords());
1239   const int expected3[23]={5,15,16,17,14,11,13,12,5,2,1,0,3,6,7,8,5,5,18,21,22,20,19};
1240   const int expected4[4]={0,8,17,23};
1241   CPPUNIT_ASSERT_EQUAL(23,m5->getNodalConnectivity()->getNumberOfTuples());
1242   CPPUNIT_ASSERT(std::equal(expected3,expected3+23,m5->getNodalConnectivity()->getConstPointer()));
1243   CPPUNIT_ASSERT_EQUAL(4,m5->getNodalConnectivityIndex()->getNumberOfTuples());
1244   CPPUNIT_ASSERT(std::equal(expected4,expected4+4,m5->getNodalConnectivityIndex()->getConstPointer()));
1245   //
1246   m->decrRef();
1247   m1->decrRef();
1248   m2->decrRef();
1249   m4->decrRef();
1250   m5->decrRef();
1251 }
1252
1253 void MEDCouplingBasicsTest5::testGiveCellsWithType1()
1254 {
1255   const int expected0[2]={1,2};
1256   const int expected1[3]={0,3,4};
1257   MEDCouplingUMesh *m=build2DTargetMesh_1();
1258   DataArrayInt *da=m->giveCellsWithType(INTERP_KERNEL::NORM_TRI3);
1259   CPPUNIT_ASSERT_EQUAL(2,da->getNumberOfTuples());
1260   CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1261   CPPUNIT_ASSERT(std::equal(expected0,expected0+2,da->getConstPointer()));
1262   da->decrRef();
1263   //
1264   da=m->giveCellsWithType(INTERP_KERNEL::NORM_QUAD4);
1265   CPPUNIT_ASSERT_EQUAL(3,da->getNumberOfTuples());
1266   CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1267   CPPUNIT_ASSERT(std::equal(expected1,expected1+3,da->getConstPointer()));
1268   da->decrRef();
1269   //
1270   da=m->giveCellsWithType(INTERP_KERNEL::NORM_TRI6);
1271   CPPUNIT_ASSERT_EQUAL(0,da->getNumberOfTuples());
1272   CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1273   da->decrRef();
1274   //
1275   CPPUNIT_ASSERT_THROW(m->giveCellsWithType(INTERP_KERNEL::NORM_SEG2),INTERP_KERNEL::Exception);
1276   CPPUNIT_ASSERT_THROW(m->giveCellsWithType(INTERP_KERNEL::NORM_HEXA8),INTERP_KERNEL::Exception);
1277   //
1278   m->decrRef();
1279 }
1280
1281 void MEDCouplingBasicsTest5::testBuildSlice3D2()
1282 {
1283   MEDCouplingUMesh *mesh2D=0;
1284   MEDCouplingUMesh *mesh3D=build3DExtrudedUMesh_1(mesh2D);
1285   mesh2D->decrRef();
1286   // First slice in the middle of 3D cells
1287   const double vec1[3]={-0.07,1.,0.07};
1288   const double origin1[3]={1.524,1.4552,1.74768};
1289   DataArrayInt *ids=0;
1290   MEDCouplingUMesh *slice1=mesh3D->buildSlice3D(origin1,vec1,1e-10,ids);
1291   //
1292   MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1293   f->setTime(4.5,6,7) ; f->setMesh(mesh3D);
1294   DataArrayDouble *arr=DataArrayDouble::New(); arr->alloc(mesh3D->getNumberOfCells(),2);
1295   arr->rearrange(1); arr->iota(2.); arr->rearrange(2);
1296   f->setArray(arr);
1297   f->checkCoherency();
1298   const int exp1[9]={1,3,4,7,9,10,13,15,16};
1299   DataArrayInt *expected1=DataArrayInt::New(); expected1->alloc(9,1); std::copy(exp1,exp1+9,expected1->getPointer());
1300   CPPUNIT_ASSERT(expected1->isEqual(*ids));
1301   DataArrayDouble *arr2=arr->selectByTupleIdSafe(expected1->begin(),expected1->end());
1302   //
1303   MEDCouplingFieldDouble *f2=f->extractSlice3D(origin1,vec1,1e-10);
1304   CPPUNIT_ASSERT(f2->getArray()->isEqual(*arr2,1e-12));
1305   CPPUNIT_ASSERT(slice1->isEqual(f2->getMesh(),1e-12));
1306   int a,b;
1307   double c=f2->getTime(a,b);
1308   CPPUNIT_ASSERT_EQUAL(6,a);
1309   CPPUNIT_ASSERT_EQUAL(7,b);
1310   CPPUNIT_ASSERT_DOUBLES_EQUAL(4.5,c,1e-12);
1311   //
1312   ids->decrRef();
1313   slice1->decrRef();
1314   arr2->decrRef();
1315   arr->decrRef();
1316   f2->decrRef();
1317   f->decrRef();
1318   mesh3D->decrRef();
1319   expected1->decrRef();
1320 }
1321
1322 void MEDCouplingBasicsTest5::testComputeTupleIdsToSelectFromCellIds1()
1323 {
1324   MEDCouplingUMesh *m=build2DTargetMesh_3();
1325   MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_GAUSS_NE,NO_TIME);
1326   f->setMesh(m);
1327   DataArrayDouble *arr=DataArrayDouble::New(); arr->alloc(52,2) ; arr->rearrange(1) ; arr->iota(7.); arr->rearrange(2);
1328   f->setArray(arr);
1329   //
1330   const int subPart1[3]={1,5,9};
1331   MEDCouplingFieldDouble *f2=f->buildSubPart(subPart1,subPart1+3);
1332   f2->checkCoherency();
1333   DataArrayInt *cI=m->computeNbOfNodesPerCell();
1334   cI->computeOffsets2();
1335   const int sel1[3]={1,5,9};
1336   DataArrayInt *sel=DataArrayInt::New(); sel->useArray(sel1,false,CPP_DEALLOC,3,1);
1337   DataArrayInt *res=sel->buildExplicitArrByRanges(cI);
1338   DataArrayDouble *arr2=arr->selectByTupleIdSafe(res->begin(),res->end());
1339   const double expected1[30]={13.,14.,15.,16.,17.,18.,19.,20.,59.,60.,61.,62.,63.,64.,95.,96.,97.,98.,99.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.};
1340   DataArrayDouble *arr3=DataArrayDouble::New(); arr3->useArray(expected1,false,CPP_DEALLOC,15,2);
1341   CPPUNIT_ASSERT(arr2->isEqual(*arr3,1e-12));
1342   CPPUNIT_ASSERT(arr2->isEqual(*f2->getArray(),1e-12));
1343   //
1344   cI->decrRef();
1345   arr3->decrRef();
1346   arr2->decrRef();
1347   arr->decrRef();
1348   m->decrRef();
1349   f->decrRef();
1350   f2->decrRef();
1351   sel->decrRef();
1352   res->decrRef();
1353 }
1354
1355 void MEDCouplingBasicsTest5::testComputeSkin1()
1356 {
1357   const double input1[5]={2.,3.4,5.6,7.7,8.0};
1358   const double input2[6]={2.,3.4,5.6,7.7,9.0,14.2};
1359   DataArrayDouble *arrX=DataArrayDouble::New(); arrX->alloc(5,1); std::copy(input1,input1+5,arrX->getPointer());
1360   DataArrayDouble *arrY=DataArrayDouble::New(); arrY->alloc(6,1); std::copy(input2,input2+6,arrY->getPointer());
1361   MEDCouplingCMesh *cmesh=MEDCouplingCMesh::New() ; cmesh->setCoordsAt(0,arrX) ; cmesh->setCoordsAt(1,arrY);
1362   MEDCouplingUMesh *umesh=cmesh->buildUnstructured();
1363   cmesh->decrRef(); arrX->decrRef(); arrY->decrRef();
1364   //
1365   MEDCouplingUMesh *skin=umesh->computeSkin();
1366   CPPUNIT_ASSERT_EQUAL(18,skin->getNumberOfCells());
1367   CPPUNIT_ASSERT_EQUAL(1,skin->getMeshDimension());
1368   CPPUNIT_ASSERT(skin->getCoords()==umesh->getCoords());
1369   const int expected1[19]={0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54};
1370   const int expected2[54]={1,1,0,1,0,5,1,2,1,1,3,2,1,4,3,1,9,4,1,5,10,1,14,9,1,10,15,1,19,14,1,15,20,1,24,19,1,20,25,1,25,26,1,26,27,1,27,28,1,28,29,1,29,24};
1371   CPPUNIT_ASSERT_EQUAL((std::size_t)19,skin->getNodalConnectivityIndex()->getNbOfElems());
1372   CPPUNIT_ASSERT(std::equal(expected1,expected1+19,skin->getNodalConnectivityIndex()->getConstPointer()));
1373   CPPUNIT_ASSERT_EQUAL((std::size_t)54,skin->getNodalConnectivity()->getNbOfElems());
1374   CPPUNIT_ASSERT(std::equal(expected2,expected2+54,skin->getNodalConnectivity()->getConstPointer()));
1375   DataArrayInt *ids=skin->computeFetchedNodeIds();
1376   const int expected3[18]={0,1,2,3,4,5,9,10,14,15,19,20,24,25,26,27,28,29};
1377   CPPUNIT_ASSERT_EQUAL((std::size_t)18,ids->getNbOfElems());
1378   CPPUNIT_ASSERT(std::equal(expected3,expected3+18,ids->getConstPointer()));
1379   MEDCouplingUMesh *part=dynamic_cast<MEDCouplingUMesh *>(umesh->buildFacePartOfMySelfNode(ids->begin(),ids->end(),true));
1380   part->setName(skin->getName().c_str());
1381   CPPUNIT_ASSERT(part->isEqual(skin,1e-12));
1382   MEDCouplingUMesh *part2=dynamic_cast<MEDCouplingUMesh *>(part->buildPartOfMySelf2(1,18,2,true));
1383   DataArrayInt *ids2=DataArrayInt::Range(0,18,2);
1384   part->setPartOfMySelf(ids2->begin(),ids2->end(),*part2);
1385   ids2->decrRef();
1386   CPPUNIT_ASSERT(!part->isEqual(skin,1e-12));
1387   DataArrayInt *trad=part->zipConnectivityTraducer(0);
1388   CPPUNIT_ASSERT_EQUAL(9,part->getNumberOfCells());
1389   const int expected4[18]={0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8};
1390   CPPUNIT_ASSERT(std::equal(expected4,expected4+18,trad->getConstPointer()));
1391   CPPUNIT_ASSERT_EQUAL((std::size_t)18,trad->getNbOfElems());
1392   trad->decrRef();
1393   part->decrRef();
1394   part2->decrRef();
1395   //
1396   ids->decrRef();
1397   umesh->decrRef();
1398   skin->decrRef();
1399 }
1400
1401 void MEDCouplingBasicsTest5::testUMeshSetPartOfMySelf2()
1402 {
1403   // resize with explicit ids list
1404   MEDCouplingUMesh *m=build2DTargetMesh_1();
1405   std::set<INTERP_KERNEL::NormalizedCellType> s; s.insert(INTERP_KERNEL::NORM_TRI3); s.insert(INTERP_KERNEL::NORM_QUAD4);
1406   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1407   const int ids1[3]={0,3,4};
1408   MEDCouplingUMesh *part=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf(ids1,ids1+3,true));
1409   part->simplexize(0)->decrRef();
1410   const int ids2[3]={1,2,5};
1411   MEDCouplingUMesh *part2=static_cast<MEDCouplingUMesh *>(part->buildPartOfMySelf(ids2,ids2+3,true));
1412   m->setPartOfMySelf(ids1,ids1+3,*part2);
1413   const int expected1[20]={3,0,4,1,3,1,4,2,3,4,5,2,3,6,7,4,3,7,5,4};
1414   CPPUNIT_ASSERT(std::equal(expected1,expected1+20,m->getNodalConnectivity()->getConstPointer()));
1415   CPPUNIT_ASSERT_EQUAL((std::size_t)20,m->getNodalConnectivity()->getNbOfElems());
1416   const int expected2[6]={0,4,8,12,16,20};
1417   CPPUNIT_ASSERT(std::equal(expected2,expected2+6,m->getNodalConnectivityIndex()->getConstPointer()));
1418   CPPUNIT_ASSERT_EQUAL((std::size_t)6,m->getNodalConnectivityIndex()->getNbOfElems());
1419   s.clear(); s.insert(INTERP_KERNEL::NORM_TRI3);
1420   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1421   m->decrRef(); part->decrRef(); part2->decrRef();
1422   // no resize with explicit ids list
1423   m=build2DTargetMesh_1();
1424   part=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf(ids1,ids1+2,true));
1425   part->convertAllToPoly();
1426   m->setPartOfMySelf(ids1+1,ids1+3,*part);
1427   const int expected3[23]={4,0,3,4,1,3,1,4,2,3,4,5,2,5,0,3,4,1,5,6,7,4,3};
1428   CPPUNIT_ASSERT(std::equal(expected3,expected3+23,m->getNodalConnectivity()->getConstPointer()));
1429   CPPUNIT_ASSERT_EQUAL((std::size_t)23,m->getNodalConnectivity()->getNbOfElems());
1430   const int expected4[6]={0,5,9,13,18,23};
1431   CPPUNIT_ASSERT(std::equal(expected4,expected4+6,m->getNodalConnectivityIndex()->getConstPointer()));
1432   CPPUNIT_ASSERT_EQUAL((std::size_t)6,m->getNodalConnectivityIndex()->getNbOfElems());
1433   s.clear(); s.insert(INTERP_KERNEL::NORM_TRI3); s.insert(INTERP_KERNEL::NORM_QUAD4); s.insert(INTERP_KERNEL::NORM_POLYGON);
1434   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1435   m->decrRef(); part->decrRef();
1436   // resize with range ids
1437   m=build2DTargetMesh_1();
1438   part=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf2(3,5,1,true));
1439   m->setPartOfMySelf2(1,3,1,*part);
1440   const int expected5[25]={4,0,3,4,1,4,6,7,4,3,4,7,8,5,4,4,6,7,4,3,4,7,8,5,4};
1441   CPPUNIT_ASSERT(std::equal(expected5,expected5+25,m->getNodalConnectivity()->getConstPointer()));
1442   CPPUNIT_ASSERT_EQUAL((std::size_t)25,m->getNodalConnectivity()->getNbOfElems());
1443   const int expected6[6]={0,5,10,15,20,25};
1444   CPPUNIT_ASSERT(std::equal(expected6,expected6+6,m->getNodalConnectivityIndex()->getConstPointer()));
1445   CPPUNIT_ASSERT_EQUAL((std::size_t)6,m->getNodalConnectivityIndex()->getNbOfElems());
1446   s.clear(); s.insert(INTERP_KERNEL::NORM_QUAD4);
1447   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1448   m->decrRef(); part->decrRef();
1449   // no resize with range ids
1450   m=build2DTargetMesh_1();
1451   part=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf2(0,5,3,true));
1452   part->convertAllToPoly();
1453   m->setPartOfMySelf2(3,5,1,*part);
1454   const int expected7[23]={4,0,3,4,1,3,1,4,2,3,4,5,2,5,0,3,4,1,5,6,7,4,3};
1455   CPPUNIT_ASSERT(std::equal(expected7,expected7+23,m->getNodalConnectivity()->getConstPointer()));
1456   CPPUNIT_ASSERT_EQUAL((std::size_t)23,m->getNodalConnectivity()->getNbOfElems());
1457   const int expected8[6]={0,5,9,13,18,23};
1458   CPPUNIT_ASSERT(std::equal(expected8,expected8+6,m->getNodalConnectivityIndex()->getConstPointer()));
1459   CPPUNIT_ASSERT_EQUAL((std::size_t)6,m->getNodalConnectivityIndex()->getNbOfElems());
1460 s.clear(); s.insert(INTERP_KERNEL::NORM_TRI3); s.insert(INTERP_KERNEL::NORM_QUAD4); s.insert(INTERP_KERNEL::NORM_POLYGON);
1461   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1462   m->decrRef(); part->decrRef();
1463   // no resize with range ids negative direction
1464   m=build2DTargetMesh_1();
1465   part=static_cast<MEDCouplingUMesh *>(m->buildPartOfMySelf2(3,-1,-3,true));
1466   part->convertAllToPoly();
1467   m->setPartOfMySelf2(4,2,-1,*part);
1468   const int expected9[23]={4,0,3,4,1,3,1,4,2,3,4,5,2,5,0,3,4,1,5,6,7,4,3};
1469   CPPUNIT_ASSERT(std::equal(expected9,expected9+23,m->getNodalConnectivity()->getConstPointer()));
1470   CPPUNIT_ASSERT_EQUAL((std::size_t)23,m->getNodalConnectivity()->getNbOfElems());
1471   const int expected10[6]={0,5,9,13,18,23};
1472   CPPUNIT_ASSERT(std::equal(expected10,expected10+6,m->getNodalConnectivityIndex()->getConstPointer()));
1473   CPPUNIT_ASSERT_EQUAL((std::size_t)6,m->getNodalConnectivityIndex()->getNbOfElems());
1474   s.clear(); s.insert(INTERP_KERNEL::NORM_TRI3); s.insert(INTERP_KERNEL::NORM_QUAD4); s.insert(INTERP_KERNEL::NORM_POLYGON);
1475   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1476   part->decrRef();
1477   m->decrRef();
1478 }
1479
1480 void MEDCouplingBasicsTest5::testUnPolyze3()
1481 {
1482   const double coord[18]={0.0,0.5,-0.5,-0.5,-0.5,-0.5,0.5,-0.5,-0.5,0.0,0.5,0.5,-0.5,-0.5,0.5,0.5,-0.5,0.5};
1483   const int conn[22]={1,2,5,4,-1,4,3,0,1,-1,2,0,3,5,-1,0,2,1,-1,4,5,3};
1484   MEDCouplingUMesh *m=MEDCouplingUMesh::New("a mesh",3);
1485   m->allocateCells(1);
1486   m->insertNextCell(INTERP_KERNEL::NORM_POLYHED,22,conn);
1487   m->finishInsertingCells();
1488   DataArrayDouble *coords=DataArrayDouble::New();
1489   coords->alloc(6,3);
1490   std::copy(coord,coord+18,coords->getPointer());
1491   m->setCoords(coords);
1492   coords->decrRef();
1493   m->checkCoherency();
1494   //
1495   MEDCouplingFieldDouble *vol=m->getMeasureField(ON_CELLS);
1496   CPPUNIT_ASSERT_EQUAL(1,vol->getArray()->getNumberOfTuples());
1497   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,vol->getArray()->getIJ(0,0),1e-12);
1498   vol->decrRef();
1499   //
1500   m->unPolyze();
1501   CPPUNIT_ASSERT_EQUAL(1,m->getNumberOfCells());
1502   std::set<INTERP_KERNEL::NormalizedCellType> s; s.insert(INTERP_KERNEL::NORM_PENTA6);
1503   CPPUNIT_ASSERT(s==m->getAllGeoTypes());
1504   //
1505   const int expected1[2]={0,7};
1506   const int expected2[7]={16,0,2,1,3,5,4};
1507   CPPUNIT_ASSERT_EQUAL(2,m->getNodalConnectivityIndex()->getNumberOfTuples());
1508   CPPUNIT_ASSERT(std::equal(expected1,expected1+2,m->getNodalConnectivityIndex()->getConstPointer()));
1509   CPPUNIT_ASSERT_EQUAL(7,m->getNodalConnectivity()->getNumberOfTuples());
1510   CPPUNIT_ASSERT(std::equal(expected2,expected2+7,m->getNodalConnectivity()->getConstPointer()));
1511   //
1512   vol=m->getMeasureField(ON_CELLS);
1513   CPPUNIT_ASSERT_EQUAL(1,vol->getArray()->getNumberOfTuples());
1514   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,vol->getArray()->getIJ(0,0),1e-12);
1515   vol->decrRef();
1516   //
1517   m->decrRef();
1518 }
1519
1520 void MEDCouplingBasicsTest5::testKrSpatialDiscretization1()
1521 {
1522   const double srcPointCoordsX[10]={0.8401877171547095, 0.7830992237586059, 0.9116473579367843, 0.335222755714889, 0.2777747108031878, 0.4773970518621602, 0.3647844727918433, 0.9522297251747128, 0.6357117279599009, 0.1416025553558034};
1523   const double srcFieldValsOnPoints[10]={2.129892434968836, 2.295320474540621, 1.931948594981134, 2.728013590937196, 2.715603240418478, 2.661778472822935, 2.695696990104364, 1.893710234970982, 2.529628016549284, 2.728432341300668};
1524   const double targetPointCoordsX[40]={-0.5,-0.45,-0.4,-0.35,-0.3,-0.25,-0.2,-0.15,-0.1,-0.05,-6.93889390391e-17,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.05,1.1,1.15,1.2,1.25,1.3,1.35,1.4,1.45};
1525   const double targetFieldValsExpected[40]={2.975379475824351, 2.95613491917003, 2.936890362515361, 2.917645805861018, 2.898401249206574, 2.879156692552137, 2.859912135897732, 2.840667579243201, 2.821423022588731, 2.802178465934342, 2.78293390927989, 2.763689352625457, 2.744444795971001, 2.725209522098197, 2.709077577124666, 2.706677252549218, 2.727467797847971, 2.713338094723676, 2.671342424824244, 2.664877370146978, 2.653840141412181, 2.619607861392791, 2.569777214476479, 2.513263929794591, 2.450732752808528, 2.368313560985155, 2.250909795670307, 2.098194272085416, 1.954257891732065, 1.895040660973802, 1.865256788315972, 1.835475248687992, 1.80569370905998, 1.775912169431971, 1.746130629803976, 1.716349090175918, 1.686567550547855, 1.656786010919941, 1.627004471291988, 1.597222931663817};
1526   //
1527   int nbOfInputPoints=10;
1528   MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_NODES_KR,ONE_TIME);
1529   DataArrayDouble *srcArrX=DataArrayDouble::New();
1530   srcArrX->alloc(nbOfInputPoints,1);
1531   std::copy(srcPointCoordsX,srcPointCoordsX+nbOfInputPoints,srcArrX->getPointer());
1532   MEDCouplingCMesh *cmesh=MEDCouplingCMesh::New("aMesh");
1533   cmesh->setCoordsAt(0,srcArrX);
1534   MEDCouplingUMesh *umesh=cmesh->buildUnstructured();
1535   f->setMesh(umesh);
1536   DataArrayDouble *srcVals=DataArrayDouble::New();
1537   srcVals->alloc(nbOfInputPoints,1);
1538   std::copy(srcFieldValsOnPoints,srcFieldValsOnPoints+nbOfInputPoints,srcVals->getPointer());
1539   f->setArray(srcVals);
1540   f->checkCoherency();
1541   //
1542   double *res0=new double[1];
1543   f->getValueOn(targetPointCoordsX,res0);
1544   CPPUNIT_ASSERT_DOUBLES_EQUAL(targetFieldValsExpected[0],res0[0],1e-10);
1545   delete [] res0;
1546   //
1547   DataArrayDouble *valuesToTest=f->getValueOnMulti(targetPointCoordsX,40);
1548   CPPUNIT_ASSERT_EQUAL(40,valuesToTest->getNumberOfTuples());
1549   CPPUNIT_ASSERT_EQUAL(1,valuesToTest->getNumberOfComponents());
1550   for(int i=0;i<40;i++)
1551     CPPUNIT_ASSERT_DOUBLES_EQUAL(targetFieldValsExpected[i],valuesToTest->getIJ(i,0),1e-10);
1552   valuesToTest->decrRef();
1553   //
1554   cmesh->decrRef();
1555   umesh->decrRef();
1556   srcArrX->decrRef();
1557   srcVals->decrRef();
1558   f->decrRef();
1559 }
1560
1561 void MEDCouplingBasicsTest5::testDuplicateEachTupleNTimes1()
1562 {
1563   const double vals0[4]={9.,8.,7.,6.};
1564   DataArrayDouble *d=DataArrayDouble::New(); d->useArray(vals0,false,CPP_DEALLOC,4,1); d->setInfoOnComponent(0,"mass [kg]"); d->setName("aname");
1565   DataArrayDouble *d2=d->duplicateEachTupleNTimes(3);
1566   const double vals1[12]={9.,9.,9.,8.,8.,8.,7.,7.,7.,6.,6.,6.};
1567   DataArrayDouble *d3=DataArrayDouble::New(); d3->useArray(vals1,false,CPP_DEALLOC,4*3,1); d3->setName("aname"); d3->setInfoOnComponent(0,"mass [kg]");
1568   CPPUNIT_ASSERT(d2->isEqual(*d2,1e-14)); d3->decrRef();
1569   d->decrRef();
1570   d2->decrRef();
1571   //
1572   const int vals2[4]={9,8,7,6};
1573   DataArrayInt *d4=DataArrayInt::New(); d4->useArray(vals2,false,CPP_DEALLOC,4,1); d4->setInfoOnComponent(0,"mass [kg]") ; d4->setName("aname");
1574   DataArrayInt *d5=d4->duplicateEachTupleNTimes(3);
1575   const int vals3[12]={9,9,9,8,8,8,7,7,7,6,6,6};
1576   DataArrayInt *d6=DataArrayInt::New(); d6->useArray(vals3,false,CPP_DEALLOC,4*3,1); d6->setName("aname"); d6->setInfoOnComponent(0,"mass [kg]");
1577   CPPUNIT_ASSERT(d5->isEqual(*d6)); d6->decrRef();
1578   d4->decrRef();
1579   d5->decrRef();
1580 }
1581
1582 void MEDCouplingBasicsTest5::testIntersect2DMeshesTmp5()
1583 {
1584   // coordinates
1585   DataArrayDouble *coords=DataArrayDouble::New();
1586   const double coordsData[376]={41,0,42,0,0,42,0,41,41.5,0,29.698484809834998,29.698484809834994,0,41.5,28.991378028648452,28.991378028648445,-42,0,-41,0,-29.698484809834994,29.698484809834998,-41.5,0,-28.991378028648445,28.991378028648452,0,-42,0,-41,-29.698484809835001,-29.698484809834994,0,-41.5,-28.991378028648455,-28.991378028648445,29.698484809834987,-29.698484809835001,28.991378028648441,-28.991378028648455,43,0,0,43,42.5,0,30.405591591021544,30.40559159102154,0,42.5,-43,0,-30.40559159102154,30.405591591021544,-42.5,0,0,-43,-30.405591591021551,-30.40559159102154,0,-42.5,30.405591591021537,-30.405591591021551,44,0,0,44,43.5,0,31.112698372208094,31.112698372208087,0,43.5,-44,0,-31.112698372208087,31.112698372208094,-43.5,0,0,-44,-31.112698372208097,-31.112698372208087,0,-43.5,31.112698372208083,-31.112698372208097,45,0,0,45,44.5,0,31.81980515339464,31.819805153394636,0,44.5,-45,0,-31.819805153394636,31.81980515339464,-44.5,0,0,-45,-31.819805153394647,-31.819805153394636,0,-44.5,31.819805153394629,-31.819805153394647,47,0,0,47,46,0,33.234018715767739,33.234018715767732,0,46,-47,0,-33.234018715767732,33.234018715767739,-46,0,0,-47,-33.234018715767739,-33.234018715767732,0,-46,33.234018715767725,-33.234018715767739,49,0,0,49,48,0,34.648232278140831,34.648232278140824,0,48,-49,0,-34.648232278140824,34.648232278140831,-48,0,0,-49,-34.648232278140839,-34.648232278140824,0,-48,34.648232278140817,-34.648232278140839,51,0,0,51,50,0,36.062445840513924,36.062445840513924,0,50,-51,0,-36.062445840513924,36.062445840513924,-50,0,0,-51,-36.062445840513931,-36.062445840513924,0,-50,36.062445840513917,-36.062445840513931,53,0,0,53,52,0,37.476659402887023,37.476659402887016,0,52,-53,0,-37.476659402887016,37.476659402887023,-52,0,0,-53,-37.47665940288703,-37.476659402887016,0,-52,37.476659402887009,-37.47665940288703,55,0,0,55,54,0,38.890872965260115,38.890872965260108,0,54,-55,0,-38.890872965260108,38.890872965260115,-54,0,0,-55,-38.890872965260122,-38.890872965260108,0,-54,38.890872965260101,-38.890872965260122,59,0,0,59,57,0,41.719300090006307,41.7193000900063,0,57,-59,0,-41.7193000900063,41.719300090006307,-57,0,0,-59,-41.719300090006314,-41.7193000900063,0,-57,41.719300090006293,-41.719300090006314,63,0,0,63,61,0,44.547727214752499,44.547727214752491,0,61,-63,0,-44.547727214752491,44.547727214752499,-61,0,0,-63,-44.547727214752506,-44.547727214752491,0,-61,44.547727214752484,-44.547727214752506,67,0,0,67,65,0,47.37615433949869,47.376154339498683,0,65,-67,0,-47.376154339498683,47.37615433949869,-65,0,0,-67,-47.376154339498697,-47.376154339498683,0,-65,47.376154339498676,-47.376154339498697,71,0,0,71,69,0,50.204581464244875,50.204581464244868,0,69,-71,0,-50.204581464244868,50.204581464244875,-69,0,0,-71,-50.204581464244889,-50.204581464244868,0,-69,50.20458146424486,-50.204581464244889,75,0,0,75,73,0,53.033008588991066,53.033008588991059,0,73,-75,0,-53.033008588991059,53.033008588991066,-73,0,0,-75,-53.033008588991073,-53.033008588991059,0,-73,53.033008588991052,-53.033008588991073,80,0,0,80,77.5,0,56.568542494923804,56.568542494923797,0,77.5,-80,0,-56.568542494923797,56.568542494923804,-77.5,0,0,-80,-56.568542494923818,-56.568542494923797,0,-77.5,56.56854249492379,-56.568542494923818};
1587   coords->useArray(coordsData,false,CPP_DEALLOC,188,2);
1588   coords->setName("");
1589   DataArrayInt *conn=DataArrayInt::New();
1590   const int connData[540]={8,0,1,2,3,4,5,6,7,8,3,2,8,9,6,10,11,12,8,9,8,13,14,11,15,16,17,8,14,13,1,0,16,18,4,19,8,1,20,21,2,22,23,24,5,8,2,21,25,8,24,26,27,10,8,8,25,28,13,27,29,30,15,8,13,28,20,1,30,31,22,18,8,20,32,33,21,34,35,36,23,8,21,33,37,25,36,38,39,26,8,25,37,40,28,39,41,42,29,8,28,40,32,20,42,43,34,31,8,32,44,45,33,46,47,48,35,8,33,45,49,37,48,50,51,38,8,37,49,52,40,51,53,54,41,8,40,52,44,32,54,55,46,43,8,44,56,57,45,58,59,60,47,8,45,57,61,49,60,62,63,50,8,49,61,64,52,63,65,66,53,8,52,64,56,44,66,67,58,55,8,56,68,69,57,70,71,72,59,8,57,69,73,61,72,74,75,62,8,61,73,76,64,75,77,78,65,8,64,76,68,56,78,79,70,67,8,68,80,81,69,82,83,84,71,8,69,81,85,73,84,86,87,74,8,73,85,88,76,87,89,90,77,8,76,88,80,68,90,91,82,79,8,80,92,93,81,94,95,96,83,8,81,93,97,85,96,98,99,86,8,85,97,100,88,99,101,102,89,8,88,100,92,80,102,103,94,91,8,92,104,105,93,106,107,108,95,8,93,105,109,97,108,110,111,98,8,97,109,112,100,111,113,114,101,8,100,112,104,92,114,115,106,103,8,104,116,117,105,118,119,120,107,8,105,117,121,109,120,122,123,110,8,109,121,124,112,123,125,126,113,8,112,124,116,104,126,127,118,115,8,116,128,129,117,130,131,132,119,8,117,129,133,121,132,134,135,122,8,121,133,136,124,135,137,138,125,8,124,136,128,116,138,139,130,127,8,128,140,141,129,142,143,144,131,8,129,141,145,133,144,146,147,134,8,133,145,148,136,147,149,150,137,8,136,148,140,128,150,151,142,139,8,140,152,153,141,154,155,156,143,8,141,153,157,145,156,158,159,146,8,145,157,160,148,159,161,162,149,8,148,160,152,140,162,163,154,151,8,152,164,165,153,166,167,168,155,8,153,165,169,157,168,170,171,158,8,157,169,172,160,171,173,174,161,8,160,172,164,152,174,175,166,163,8,164,176,177,165,178,179,180,167,8,165,177,181,169,180,182,183,170,8,169,181,184,172,183,185,186,173,8,172,184,176,164,186,187,178,175};
1591   conn->useArray(connData,false,CPP_DEALLOC,540,1);
1592   conn->setName("");
1593   DataArrayInt *connI=DataArrayInt::New();
1594   const int connIData[61]={0,9,18,27,36,45,54,63,72,81,90,99,108,117,126,135,144,153,162,171,180,189,198,207,216,225,234,243,252,261,270,279,288,297,306,315,324,333,342,351,360,369,378,387,396,405,414,423,432,441,450,459,468,477,486,495,504,513,522,531,540};
1595   connI->useArray(connIData,false,CPP_DEALLOC,61,1);
1596   connI->setName("");
1597   //
1598   MEDCouplingUMesh *m1=MEDCouplingUMesh::New("Fix",2);
1599   m1->setCoords(coords);
1600   m1->setConnectivity(conn,connI,true);
1601   coords->decrRef(); conn->decrRef(); connI->decrRef();
1602   //
1603   coords=DataArrayDouble::New();
1604   const double coordsData2[84]={46.5,-2.5,53.5,-2.5,53.5,2.5,46.5,2.5,50,-2.5,53.5,0,50,2.5,46.5,0,60.5,-2.5,60.5,2.5,57,-2.5,60.5,0,57,2.5,53.5,7.5,46.5,7.5,53.5,5,50,7.5,46.5,5,60.5,7.5,60.5,5,57,7.5,-2,47,2,47,2,53,-2,53,0,47,2,50,0,53,-2,50,6,47,6,53,4,47,6,50,4,53,2,59,-2,59,2,56,0,59,-2,56,6,59,6,56,4,59};
1605   coords->useArray(coordsData2,false,CPP_DEALLOC,42,2);  
1606   coords->setName("");
1607   // connectivity
1608   conn=DataArrayInt::New();
1609   const int connData2[72]={8,0,1,2,3,4,5,6,7,8,1,8,9,2,10,11,12,5,8,3,2,13,14,6,15,16,17,8,2,9,18,13,12,19,20,15,8,21,22,23,24,25,26,27,28,8,22,29,30,23,31,32,33,26,8,24,23,34,35,27,36,37,38,8,23,30,39,34,33,40,41,36};
1610   conn->useArray(connData2,false,CPP_DEALLOC,72,1);
1611   conn->setName("");
1612   connI=DataArrayInt::New();
1613   const int connIData2[9]={0,9,18,27,36,45,54,63,72};
1614   connI->useArray(connIData2,false,CPP_DEALLOC,9,1);
1615   connI->setName("");
1616   MEDCouplingUMesh *m2=MEDCouplingUMesh::New("Mobile",2);
1617   m2->setCoords(coords);
1618   m2->setConnectivity(conn,connI,true);
1619   coords->decrRef(); conn->decrRef(); connI->decrRef();
1620   //
1621   DataArrayInt *d1=0,*d2=0;
1622   MEDCouplingUMesh *m3=MEDCouplingUMesh::Intersect2DMeshes(m1,m2,1e-10,d1,d2);
1623   CPPUNIT_ASSERT_EQUAL(105,m3->getNumberOfCells());
1624   CPPUNIT_ASSERT_EQUAL(105,d1->getNumberOfTuples());
1625   CPPUNIT_ASSERT_EQUAL(105,d2->getNumberOfTuples());
1626   CPPUNIT_ASSERT_EQUAL(704,m3->getNumberOfNodes());
1627   //
1628   const double areaExpected[105]={-65.18804756198824,-65.18804756198824,-65.18804756198824,-65.18804756198824,-66.75884388878285,-66.75884388878285,-66.7588438887833,-66.75884388878308,-68.32964021557768,-68.32964021557768,-68.32964021557814,-68.32964021557791,-69.9004365423732,-69.9004365423732,-69.90043654237297,-69.90043654237297,-1.194568659706448,-1.0869994447159463,-142.2316939607081,-144.51326206513068,-144.5132620651309,-1.1945686597064424,-143.3186934054243,-5.002264310862817,-10.0261332846393,-3.9727823117092953,-7.290862524642649,-124.504404940456,-3.9727823117093237,-146.82366506060032,-150.79644737231024,-5.002264310862776,-145.79418306144626,-5.00208651738126,-10.054764051268958,-4.001067863263231,-8.027932154428669,-129.99378209314813,-4.001067863263216,-153.07856481622616,-157.0796326794898,-5.0020865173811915,-152.07754616210832,-5.001928880064381,-10.050590216368969,-4.00098721602491,-8.025810856794209,-136.28350081741684,-4.000987216024939,-159.36183077064402,-163.36281798667005,-5.0019288800643285,-158.36088910660442,-1.2991516319851801,-3.702636830195414,-3.7815130030068254,-6.265364371195623,-0.02516260900254963,-0.6553944641345026,-3.975752765070567,-7.368528340442765,-142.57249927881398,-0.02516260900254963,-3.9757527650706095,-165.64508791977525,-169.64600329384803,-1.299151631985167,-3.7026368301953885,-164.6442148316677,-10.00321285677458,-20.08414323176165,-8.001644468035863,-16.042954878437143,-304.0096070742277,-8.00164446803587,-350.1399180412005,-358.1415625092368,-10.003212856774468,-348.13834965246224,-3.794150313030109,-8.65049239704272,-0.02260276689354157,-0.5885167811200915,-370.2185414798688,-0.022602766893559393,-383.2517009710623,-383.2743037379555,-3.7941503130300576,-379.48015342492505,-408.40704496667513,-408.4070449666742,-408.4070449666742,-408.4070449666742,-433.53978619538975,-433.5397861953902,-433.5397861953911,-433.53978619539066,-458.67252742410983,-458.6725274241094,-458.67252742410983,-458.6725274241089,-608.6835766330232,-608.6835766330232,-608.6835766330232,-608.6835766330241};
1629   const int expected1[105]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,16,17,18,19,19,20,20,20,20,20,21,21,22,23,23,24,24,24,24,24,25,25,26,27,27,28,28,28,28,28,29,29,30,31,31,32,32,32,32,32,32,32,32,32,33,33,33,34,35,35,35,36,36,36,36,36,37,37,38,39,39,40,40,40,40,40,41,41,42,43,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59};
1630   const int expected2[105]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,2,-1,-1,-1,0,-1,0,2,4,5,-1,4,-1,-1,0,-1,0,2,4,5,-1,4,-1,-1,0,-1,0,2,4,5,-1,4,-1,-1,0,-1,0,1,2,3,4,5,6,7,-1,4,6,-1,-1,0,1,-1,1,3,6,7,-1,6,-1,-1,1,-1,1,3,6,7,-1,6,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
1631   MEDCouplingFieldDouble *f3f=m3->getMeasureField(ON_CELLS);
1632   const double *f3=f3f->getArray()->getConstPointer();
1633   for(int i=0;i<105;i++)
1634     {
1635       CPPUNIT_ASSERT_DOUBLES_EQUAL(areaExpected[i],f3[i],1e-10);
1636       CPPUNIT_ASSERT_EQUAL(expected1[i],d1->getIJ(i,0));
1637       CPPUNIT_ASSERT_EQUAL(expected2[i],d2->getIJ(i,0));
1638     }
1639   //
1640   f3f->decrRef();
1641   m3->decrRef();
1642   d1->decrRef();
1643   d2->decrRef();
1644   m2->decrRef();
1645   m1->decrRef();
1646 }
1647
1648 void MEDCouplingBasicsTest5::testDAIBuildUnique1()
1649 {
1650   DataArrayInt *d=DataArrayInt::New();
1651   const int dData[14]={1,2,2,3,3,3,3,4,5,5,7,7,7,19};
1652   d->useArray(dData,false,CPP_DEALLOC,14,1);
1653   const int expectedData[7]={1,2,3,4,5,7,19};
1654   //
1655   DataArrayInt *e=d->buildUnique();
1656   CPPUNIT_ASSERT_EQUAL(7,e->getNumberOfTuples());
1657   CPPUNIT_ASSERT_EQUAL(1,e->getNumberOfComponents());
1658   for(int i=0;i<7;i++)
1659     CPPUNIT_ASSERT_EQUAL(expectedData[i],e->getIJ(i,0));
1660   //
1661   e->decrRef();
1662   d->decrRef();
1663 }
1664
1665 void MEDCouplingBasicsTest5::testDAIPartitionByDifferentValues1()
1666 {
1667   const int data[9]={1,0,1,2,0,2,2,-3,2};
1668   const int expected1[4]={-3,0,1,2};
1669   const int expected2_0[1]={7};
1670   const int expected2_1[2]={1,4};
1671   const int expected2_2[2]={0,2};
1672   const int expected2_3[4]={3,5,6,8};
1673   DataArrayInt *d=DataArrayInt::New();
1674   d->useArray(data,false,CPP_DEALLOC,9,1);
1675   std::vector<int> f;
1676   static const int nbOfOutputsExpected=4;
1677   std::vector<DataArrayInt *> e=d->partitionByDifferentValues(f);
1678   d->decrRef();
1679   CPPUNIT_ASSERT_EQUAL(nbOfOutputsExpected,(int)e.size());
1680   CPPUNIT_ASSERT_EQUAL(nbOfOutputsExpected,(int)f.size());
1681   for(int i=0;i<nbOfOutputsExpected;i++)
1682     {
1683       CPPUNIT_ASSERT_EQUAL(expected1[i],f[i]);
1684     }
1685   CPPUNIT_ASSERT_EQUAL((std::size_t)1,e[0]->getNbOfElems());
1686   CPPUNIT_ASSERT_EQUAL((std::size_t)2,e[1]->getNbOfElems());
1687   CPPUNIT_ASSERT_EQUAL((std::size_t)2,e[2]->getNbOfElems());
1688   CPPUNIT_ASSERT_EQUAL((std::size_t)4,e[3]->getNbOfElems());
1689   CPPUNIT_ASSERT_EQUAL(1,e[0]->getNumberOfComponents());
1690   CPPUNIT_ASSERT_EQUAL(1,e[1]->getNumberOfComponents());
1691   CPPUNIT_ASSERT_EQUAL(1,e[2]->getNumberOfComponents());
1692   CPPUNIT_ASSERT_EQUAL(1,e[3]->getNumberOfComponents());
1693   CPPUNIT_ASSERT(std::equal(expected2_0,expected2_0+1,e[0]->begin()));
1694   CPPUNIT_ASSERT(std::equal(expected2_1,expected2_1+2,e[1]->begin()));
1695   CPPUNIT_ASSERT(std::equal(expected2_2,expected2_2+2,e[2]->begin()));
1696   CPPUNIT_ASSERT(std::equal(expected2_3,expected2_3+4,e[3]->begin()));
1697   e[0]->decrRef(); e[1]->decrRef(); e[2]->decrRef(); e[3]->decrRef();
1698 }
1699
1700 void MEDCouplingBasicsTest5::testDAICheckMonotonic1()
1701 {
1702   const int data1[6]={-1,0,2,2,4,5};
1703   const int data2[6]={6,2,0,-8,-9,-56};
1704   const int data3[6]={-1,0,3,2,4,6};
1705   const int data4[6]={7,5,2,3,0,-6};
1706   DataArrayInt *d=DataArrayInt::New();
1707   d->useArray(data1,false,CPP_DEALLOC,6,1);
1708   CPPUNIT_ASSERT(d->isMonotonic(true));
1709   CPPUNIT_ASSERT(!d->isMonotonic(false));
1710   d->checkMonotonic(true);
1711   CPPUNIT_ASSERT_THROW(d->checkMonotonic(false),INTERP_KERNEL::Exception);
1712   d->useArray(data2,false,CPP_DEALLOC,6,1);
1713   CPPUNIT_ASSERT(d->isMonotonic(false));
1714   CPPUNIT_ASSERT(!d->isMonotonic(true));
1715   d->checkMonotonic(false);
1716   CPPUNIT_ASSERT_THROW(d->checkMonotonic(true),INTERP_KERNEL::Exception);
1717   d->useArray(data3,false,CPP_DEALLOC,6,1);
1718   CPPUNIT_ASSERT(!d->isMonotonic(false));
1719   CPPUNIT_ASSERT(!d->isMonotonic(true));
1720   CPPUNIT_ASSERT_THROW(d->checkMonotonic(true),INTERP_KERNEL::Exception);
1721   CPPUNIT_ASSERT_THROW(d->checkMonotonic(false),INTERP_KERNEL::Exception);
1722   d->useArray(data4,false,CPP_DEALLOC,6,1);
1723   CPPUNIT_ASSERT(!d->isMonotonic(false));
1724   CPPUNIT_ASSERT(!d->isMonotonic(true));
1725   CPPUNIT_ASSERT_THROW(d->checkMonotonic(true),INTERP_KERNEL::Exception);
1726   CPPUNIT_ASSERT_THROW(d->checkMonotonic(false),INTERP_KERNEL::Exception);
1727   d->useArray(data4,false,CPP_DEALLOC,0,1);
1728   CPPUNIT_ASSERT(d->isMonotonic(true));
1729   CPPUNIT_ASSERT(d->isMonotonic(false));
1730   d->checkMonotonic(true);
1731   d->checkMonotonic(false);
1732   d->useArray(data4,false,CPP_DEALLOC,3,2);//throw because nbComp!=1
1733   CPPUNIT_ASSERT_THROW(d->isMonotonic(true),INTERP_KERNEL::Exception);
1734   CPPUNIT_ASSERT_THROW(d->isMonotonic(false),INTERP_KERNEL::Exception);
1735   CPPUNIT_ASSERT_THROW(d->checkMonotonic(true),INTERP_KERNEL::Exception);
1736   CPPUNIT_ASSERT_THROW(d->checkMonotonic(false),INTERP_KERNEL::Exception);
1737   d->decrRef();
1738 }
1739
1740 void MEDCouplingBasicsTest5::testIntersect2DMeshesTmp6()
1741 {
1742   // coordinates
1743   DataArrayDouble *coords=DataArrayDouble::New();
1744   const double coordsData[16]={2.7554552980815448e-15,45,-45,5.5109105961630896e-15,-31.819805153394636,31.81980515339464,2.8779199779962799e-15,47,2.8166876380389124e-15,46,-47,5.7558399559925599e-15,-33.234018715767732,33.234018715767739,-46,5.6333752760778247e-15};
1745   coords->useArray(coordsData,false,CPP_DEALLOC,8,2);
1746   // connectivity
1747   DataArrayInt *conn=DataArrayInt::New();
1748   const int connData[9]={8,0,3,5,1,4,6,7,2};
1749   conn->useArray(connData,false,CPP_DEALLOC,9,1);
1750   DataArrayInt *connI=DataArrayInt::New();
1751   const int connIData[2]={0,9};
1752   connI->useArray(connIData,false,CPP_DEALLOC,2,1);
1753   MEDCouplingUMesh *m1=MEDCouplingUMesh::New("Fixe",2);
1754   m1->setCoords(coords);
1755   m1->setConnectivity(conn,connI,true);
1756   coords->decrRef(); conn->decrRef(); connI->decrRef();
1757   //
1758   coords=DataArrayDouble::New();
1759   const double coordsData2[26]={-7.3800475508445391,41.854329503018846,-3.7041190667754655,42.338274668899189,-3.7041190667754655,45.338274668899189,-7.3800475508445382,44.854329503018839,-5.5473631693521845,42.136406608386956,-3.7041190667754655,43.838274668899189,-5.5420833088100014,45.09630208595901,-7.3800475508445382,43.354329503018839,-3.7041190667754651,52.338274668899189,-7.3800475508445382,51.854329503018839,-3.7041190667754655,48.838274668899189,-5.5420833088100014,52.09630208595901,-7.3800475508445382,48.354329503018839};
1760   coords->useArray(coordsData2,false,CPP_DEALLOC,13,2);
1761   // connectivity
1762   conn=DataArrayInt::New();
1763   const int connData2[18]={8,0,1,2,3,4,5,6,7,8,3,2,8,9,6,10,11,12};
1764   conn->useArray(connData2,false,CPP_DEALLOC,18,1);
1765   connI=DataArrayInt::New();
1766   const int connIData2[3]={0,9,18};
1767   connI->useArray(connIData2,false,CPP_DEALLOC,3,1);
1768   //
1769   MEDCouplingUMesh *m2=MEDCouplingUMesh::New("Mobile",2);
1770   m2->setCoords(coords);
1771   m2->setConnectivity(conn,connI,true);
1772   coords->decrRef(); conn->decrRef(); connI->decrRef();
1773   //
1774   DataArrayInt *d1=0,*d2=0;
1775   MEDCouplingUMesh *m3=MEDCouplingUMesh::Intersect2DMeshes(m1,m2,1e-10,d1,d2);
1776   CPPUNIT_ASSERT_EQUAL(4,m3->getNumberOfCells());
1777   CPPUNIT_ASSERT_EQUAL(4,d1->getNumberOfTuples());
1778   CPPUNIT_ASSERT_EQUAL(4,d2->getNumberOfTuples());
1779   CPPUNIT_ASSERT_EQUAL(43,m3->getNumberOfNodes());
1780   bool areMerged=false;
1781   int newNbOfNodes=-1;
1782   m3->mergeNodes(1e-12,areMerged,newNbOfNodes)->decrRef();
1783   CPPUNIT_ASSERT_EQUAL(35,m3->getNumberOfNodes());
1784   m3->zipCoords();
1785   CPPUNIT_ASSERT_EQUAL(23,m3->getNumberOfNodes());
1786   //
1787   MEDCouplingFieldDouble *f=m3->getMeasureField(true);
1788   const double *vals=f->getArray()->getConstPointer();
1789   const double valuesExpected[4]={1.6603638692585716,5.747555728471923,129.68907101754394,7.4162714498559694};
1790   for(int i=0;i<4;i++)
1791     CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesExpected[i],vals[i],1e-12);
1792   f->decrRef();
1793   //
1794   m1->decrRef();
1795   m2->decrRef();
1796   m3->decrRef();
1797   d1->decrRef();
1798   d2->decrRef();
1799 }
1800
1801 void MEDCouplingBasicsTest5::testIntersect2DMeshesTmp7()
1802 {
1803   double eps = 1.0e-8;
1804   // coordinates circle - SEE getCircle() on the Python side
1805   DataArrayDouble *coords1=DataArrayDouble::New();
1806   const double coordsData1[16]={0.5328427124746189, -0.08284271247461905, -0.03284271247461901, 0.4828427124746191, -0.03284271247461906, -0.082842712474619, 0.5328427124746191, 0.482842712474619};
1807   coords1->useArray(coordsData1,false,CPP_DEALLOC,8,2);
1808   // connectivity
1809   DataArrayInt *conn1=DataArrayInt::New();
1810   const int connData1[5]={INTERP_KERNEL::NORM_QPOLYG,0,1,2,3};
1811   conn1->useArray(connData1,false,CPP_DEALLOC,5,1);
1812   DataArrayInt *connI1=DataArrayInt::New();
1813   const int connIData1[2]={0,5};
1814   connI1->useArray(connIData1,false,CPP_DEALLOC,2,1);
1815   MEDCouplingUMesh *m1=MEDCouplingUMesh::New("circle",2);
1816   m1->setCoords(coords1);
1817   m1->setConnectivity(conn1,connI1,true);
1818   coords1->decrRef(); conn1->decrRef(); connI1->decrRef();
1819
1820   // square
1821   DataArrayDouble *coords2=DataArrayDouble::New();
1822   const double coordsData2[8]={-0.5,-0.5,   -0.5, 0.5, 0.5, 0.5,    0.5,-0.5};
1823   coords2->useArray(coordsData2,false,CPP_DEALLOC,4,2);
1824   // connectivity
1825   DataArrayInt *conn2=DataArrayInt::New();
1826   const int connData2[5]={INTERP_KERNEL::NORM_POLYGON, 0,1,2,3};
1827   conn2->useArray(connData2,false,CPP_DEALLOC,5,1);
1828   DataArrayInt *connI2=DataArrayInt::New();
1829   const int connIData2[2]={0,5};
1830   connI2->useArray(connIData2,false,CPP_DEALLOC,2,1);
1831   MEDCouplingUMesh *m2=MEDCouplingUMesh::New("square",2);
1832   m2->setCoords(coords2);
1833   m2->setConnectivity(conn2,connI2,true);
1834   coords2->decrRef(); conn2->decrRef(); connI2->decrRef();
1835
1836   DataArrayInt * resToM1 = 0, * resToM2 = 0;
1837   MEDCouplingUMesh *m_intersec=MEDCouplingUMesh::Intersect2DMeshes(m2, m1, eps, resToM1, resToM2);
1838   m_intersec->zipCoords();
1839
1840   const double coo_tgt[34]={-0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.03284271247461901, 0.4828427124746191, \
1841     -0.014575131106459124, 0.5000000000000001, 0.5, -0.11224989991991996, 0.24271243444677046, 0.5, 0.5, 0.19387505004004, \
1842     -0.04799910280454185, -0.06682678787499614, -0.023843325638122054, 0.4915644577163915, 0.5, -0.30612494995996, 0.0, -0.5,\
1843     -0.5, 0.0, -0.25728756555322957, 0.5, -0.023843325638122026, 0.49156445771639157, -0.04799910280454181, -0.06682678787499613};
1844   const int conn_tgt[22]={32, 5, 2, 6, 4, 7, 8, 9, 10, 32, 6, 3, 0, 1, 5, 4, 11, 12, 13, 14, 15, 16};
1845   const int connI_tgt[3]={0, 9, 22};
1846   const int res1_tgt[2] = {0, 0};
1847   const int res2_tgt[2] = {0, -1};
1848
1849   CPPUNIT_ASSERT(std::equal(conn_tgt,conn_tgt+22,m_intersec->getNodalConnectivity()->getConstPointer()));
1850   CPPUNIT_ASSERT(std::equal(connI_tgt,connI_tgt+3,m_intersec->getNodalConnectivityIndex()->getConstPointer()));
1851   CPPUNIT_ASSERT(std::equal(res1_tgt,res1_tgt+2,resToM1->getConstPointer()));
1852   CPPUNIT_ASSERT(std::equal(res2_tgt,res2_tgt+2,resToM2->getConstPointer()));
1853   for(int i=0;i<34;i++)
1854     CPPUNIT_ASSERT_DOUBLES_EQUAL(coo_tgt[i],m_intersec->getCoords()->getIJ(0,i),1e-12);
1855   m1->decrRef(); m2->decrRef(); m_intersec->decrRef();
1856   resToM1->decrRef(); resToM2->decrRef();
1857 }
1858
1859 void MEDCouplingBasicsTest5::testDAIBuildSubstractionOptimized1()
1860 {
1861   const int tab1[7]={1,3,5,6,7,9,13};
1862   const int tab2[3]={3,5,9};
1863   const int tab3[3]={1,3,5};
1864   DataArrayInt *da1=DataArrayInt::New(); da1->useArray(tab1,false,CPP_DEALLOC,7,1);
1865   DataArrayInt *da2=DataArrayInt::New(); da2->useArray(tab2,false,CPP_DEALLOC,3,1);
1866   DataArrayInt *da3=DataArrayInt::New(); da3->useArray(tab3,false,CPP_DEALLOC,3,1);
1867   DataArrayInt *da4=DataArrayInt::New(); da4->useArray(tab1,false,CPP_DEALLOC,7,1);
1868   //
1869   DataArrayInt *a=0;
1870   a=da1->buildSubstractionOptimized(da2);
1871   CPPUNIT_ASSERT_EQUAL(4,a->getNumberOfTuples());
1872   CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
1873   const int expected1_0[4]={1,6,7,13};
1874   CPPUNIT_ASSERT(std::equal(expected1_0,expected1_0+4,a->begin()));
1875   a->decrRef();
1876   //
1877   a=da1->buildSubstractionOptimized(da3);
1878   CPPUNIT_ASSERT_EQUAL(4,a->getNumberOfTuples());
1879   CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
1880   const int expected2_0[4]={6,7,9,13};
1881   CPPUNIT_ASSERT(std::equal(expected2_0,expected2_0+4,a->begin()));
1882   a->decrRef();
1883   //
1884   a=da1->buildSubstractionOptimized(da4);
1885   CPPUNIT_ASSERT_EQUAL(0,a->getNumberOfTuples());
1886   CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
1887   a->decrRef();
1888   //
1889   da1->decrRef();
1890   da2->decrRef();
1891   da3->decrRef();
1892   da4->decrRef();
1893 }
1894
1895 void MEDCouplingBasicsTest5::testDAIIsStrictlyMonotonic1()
1896 {
1897   const int tab1[7]={1,3,5,6,7,9,13};
1898   DataArrayInt *da1=DataArrayInt::New(); da1->useArray(tab1,false,CPP_DEALLOC,7,1);
1899   CPPUNIT_ASSERT(da1->isStrictlyMonotonic(true));
1900   da1->checkStrictlyMonotonic(true);
1901   CPPUNIT_ASSERT(da1->isMonotonic(true));
1902   da1->checkMonotonic(true);
1903   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(false));
1904   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(false),INTERP_KERNEL::Exception);
1905   CPPUNIT_ASSERT(!da1->isMonotonic(false));
1906   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(false),INTERP_KERNEL::Exception);
1907   da1->decrRef();
1908   //
1909   int tab2[7]={1,3,5,6,6,9,13};
1910   da1=DataArrayInt::New(); da1->useArray(tab2,false,CPP_DEALLOC,7,1);
1911   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(true));
1912   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(true),INTERP_KERNEL::Exception);
1913   CPPUNIT_ASSERT(da1->isMonotonic(true));
1914   da1->checkMonotonic(true);
1915   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(false));
1916   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(false),INTERP_KERNEL::Exception);
1917   CPPUNIT_ASSERT(!da1->isMonotonic(false));
1918   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(false),INTERP_KERNEL::Exception);
1919   da1->decrRef();
1920   //
1921   const int tab3[7]={1,3,5,6,5,9,13};
1922   da1=DataArrayInt::New(); da1->useArray(tab3,false,CPP_DEALLOC,7,1);
1923   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(true));
1924   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(true),INTERP_KERNEL::Exception);
1925   CPPUNIT_ASSERT(!da1->isMonotonic(true));
1926   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(true),INTERP_KERNEL::Exception);
1927   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(false));
1928   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(false),INTERP_KERNEL::Exception);
1929   CPPUNIT_ASSERT(!da1->isMonotonic(false));
1930   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(false),INTERP_KERNEL::Exception);
1931   da1->decrRef();
1932   //
1933   const int tab4[7]={13,9,7,6,5,3,1};
1934   da1=DataArrayInt::New(); da1->useArray(tab4,false,CPP_DEALLOC,7,1);
1935   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(true));
1936   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(true),INTERP_KERNEL::Exception);
1937   CPPUNIT_ASSERT(!da1->isMonotonic(true));
1938   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(true),INTERP_KERNEL::Exception);
1939   CPPUNIT_ASSERT(da1->isStrictlyMonotonic(false));
1940   da1->checkStrictlyMonotonic(false);
1941   CPPUNIT_ASSERT(da1->isMonotonic(false));
1942   da1->checkMonotonic(false);
1943   da1->decrRef();
1944   //
1945   const int tab5[7]={13,9,6,6,5,3,1};
1946   da1=DataArrayInt::New(); da1->useArray(tab5,false,CPP_DEALLOC,7,1);
1947   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(true));
1948   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(true),INTERP_KERNEL::Exception);
1949   CPPUNIT_ASSERT(!da1->isMonotonic(true));
1950   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(true),INTERP_KERNEL::Exception);
1951   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(false));
1952   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(false),INTERP_KERNEL::Exception);
1953   CPPUNIT_ASSERT(da1->isMonotonic(false));
1954   da1->checkMonotonic(false);
1955   da1->decrRef();
1956   //
1957   const int tab6[7]={13,9,5,6,5,3,1};
1958   da1=DataArrayInt::New(); da1->useArray(tab6,false,CPP_DEALLOC,7,1);
1959   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(true));
1960   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(true),INTERP_KERNEL::Exception);
1961   CPPUNIT_ASSERT(!da1->isMonotonic(true));
1962   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(true),INTERP_KERNEL::Exception);
1963   CPPUNIT_ASSERT(!da1->isStrictlyMonotonic(false));
1964   CPPUNIT_ASSERT_THROW(da1->checkStrictlyMonotonic(false),INTERP_KERNEL::Exception);
1965   CPPUNIT_ASSERT(!da1->isMonotonic(false));
1966   CPPUNIT_ASSERT_THROW(da1->checkMonotonic(false),INTERP_KERNEL::Exception);
1967   da1->decrRef();
1968   //
1969   da1=DataArrayInt::New(); da1->useArray(tab1,false,CPP_DEALLOC,0,1);
1970   CPPUNIT_ASSERT(da1->isStrictlyMonotonic(true));
1971   da1->checkStrictlyMonotonic(true);
1972   CPPUNIT_ASSERT(da1->isMonotonic(true));
1973   da1->checkMonotonic(true);
1974   CPPUNIT_ASSERT(da1->isStrictlyMonotonic(false));
1975   da1->checkStrictlyMonotonic(false);
1976   CPPUNIT_ASSERT(da1->isMonotonic(false));
1977   da1->checkMonotonic(false);
1978   da1->decrRef();
1979   //
1980   da1=DataArrayInt::New(); da1->useArray(tab1,false,CPP_DEALLOC,1,1);
1981   CPPUNIT_ASSERT(da1->isStrictlyMonotonic(true));
1982   da1->checkStrictlyMonotonic(true);
1983   CPPUNIT_ASSERT(da1->isMonotonic(true));
1984   da1->checkMonotonic(true);
1985   CPPUNIT_ASSERT(da1->isStrictlyMonotonic(false));
1986   da1->checkStrictlyMonotonic(false);
1987   CPPUNIT_ASSERT(da1->isMonotonic(false));
1988   da1->checkMonotonic(false);
1989   da1->decrRef();
1990 }
1991
1992 void MEDCouplingBasicsTest5::testSimplexize3()
1993 {
1994   const int conn[24]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};
1995   MEDCouplingUMesh *m=MEDCouplingUMesh::New("toto",3);
1996   m->allocateCells(0);
1997   m->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,conn+0);
1998   m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+4);
1999   m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+12);
2000   m->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,conn+20);
2001   const double coords[72]={0.,0.,0.,0.,1.,0.,1.,0.,0.,0.,0.,1.,2.,0.,0.,2.,1.,0.,3.,1.,0.,3.,0.,0.,2.,0.,1.,2.,1.,1.,3.,1.,1.,3.,0.,1.,4.,0.,0.,4.,1.,0.,5.,1.,0.,5.,0.,0.,4.,0.,1.,4.,1.,1.,5.,1.,1.,5.,0.,1.,6.,0.,0.,6.,1.,0.,7.,0.,0.,6.,0.,1.};
2002   DataArrayDouble *c=DataArrayDouble::New();
2003   c->useArray(coords,false,CPP_DEALLOC,24,3);
2004   m->setCoords(c);
2005   c->decrRef();
2006   m->checkCoherency2();
2007   //
2008   MEDCouplingUMesh *m1=static_cast<MEDCouplingUMesh *>(m->deepCpy());
2009   DataArrayInt *d1=m1->simplexize(INTERP_KERNEL::PLANAR_FACE_5);
2010   m1->checkCoherency2();
2011   MEDCouplingFieldDouble *f1=m1->getMeasureField(ON_CELLS);
2012   const double vol1Expected[12]={1./6, 1./6, 1./6,1./6, 1./6, 1./3,1./6, 1./6, 1./6, 1./6, 1./3, 1./6};
2013   CPPUNIT_ASSERT_EQUAL(1,f1->getArray()->getNumberOfComponents());
2014   CPPUNIT_ASSERT_EQUAL(12,f1->getArray()->getNumberOfTuples());
2015   for(int i=0;i<12;i++)
2016     CPPUNIT_ASSERT_DOUBLES_EQUAL(vol1Expected[i],f1->getIJ(i,0),1e-12);
2017   const int connExpected1[60]={14,0,1,2,3,14,4,9,5,6,14,4,8,9,11,14,4,7,11,6,14,9,11,10,6,14,4,9,6,11,14,12,17,13,14,14,12,16,17,19,14,12,15,19,14,14,17,19,18,14,14,12,17,14,19,14,20,21,22,23};
2018   const int connIExpected1[13]={0,5,10,15,20,25,30,35,40,45,50,55,60};
2019   const int n2o1[12]={0,1,1,1,1,1,2,2,2,2,2,3};
2020   CPPUNIT_ASSERT_EQUAL(1,m1->getNodalConnectivity()->getNumberOfComponents());
2021   CPPUNIT_ASSERT_EQUAL(60,m1->getNodalConnectivity()->getNumberOfTuples());
2022   CPPUNIT_ASSERT_EQUAL(1,m1->getNodalConnectivityIndex()->getNumberOfComponents());
2023   CPPUNIT_ASSERT_EQUAL(13,m1->getNodalConnectivityIndex()->getNumberOfTuples());
2024   CPPUNIT_ASSERT(std::equal(connExpected1,connExpected1+60,m1->getNodalConnectivity()->begin()));
2025   CPPUNIT_ASSERT(std::equal(connIExpected1,connIExpected1+13,m1->getNodalConnectivityIndex()->begin()));
2026   CPPUNIT_ASSERT_EQUAL(1,d1->getNumberOfComponents());
2027   CPPUNIT_ASSERT_EQUAL(12,d1->getNumberOfTuples());
2028   CPPUNIT_ASSERT(std::equal(n2o1,n2o1+12,d1->begin()));
2029   f1->decrRef();
2030   m1->decrRef();
2031   d1->decrRef();
2032   //
2033   MEDCouplingUMesh *m2=static_cast<MEDCouplingUMesh *>(m->deepCpy());
2034   DataArrayInt *d2=m2->simplexize(INTERP_KERNEL::PLANAR_FACE_6);
2035   m2->checkCoherency2();
2036   MEDCouplingFieldDouble *f2=m2->getMeasureField(ON_CELLS);
2037   const double vol2Expected[14]={1./6, 1./6, 1./6,1./6, 1./6, 1./6,1./6,1./6, 1./6, 1./6, 1./6, 1./6,1./6,1./6};
2038   CPPUNIT_ASSERT_EQUAL(1,f2->getArray()->getNumberOfComponents());
2039   CPPUNIT_ASSERT_EQUAL(14,f2->getArray()->getNumberOfTuples());
2040   for(int i=0;i<14;i++)
2041     CPPUNIT_ASSERT_DOUBLES_EQUAL(vol2Expected[i],f2->getIJ(i,0),1e-12);
2042   const int connExpected2[70]={14,0,1,2,3,14,4,9,5,10,14,4,5,6,10,14,4,8,9,10,14,4,11,8,10,14,4,6,7,10,14,4,7,11,10,14,12,17,13,18,14,12,13,14,18,14,12,16,17,18,14,12,19,16,18,14,12,14,15,18,14,12,15,19,18,14,20,21,22,23};
2043   const int connIExpected2[15]={0,5,10,15,20,25,30,35,40,45,50,55,60,65,70};
2044   const int n2o2[14]={0,1,1,1,1,1,1,2,2,2,2,2,2,3};
2045   CPPUNIT_ASSERT_EQUAL(1,m2->getNodalConnectivity()->getNumberOfComponents());
2046   CPPUNIT_ASSERT_EQUAL(70,m2->getNodalConnectivity()->getNumberOfTuples());
2047   CPPUNIT_ASSERT_EQUAL(1,m2->getNodalConnectivityIndex()->getNumberOfComponents());
2048   CPPUNIT_ASSERT_EQUAL(15,m2->getNodalConnectivityIndex()->getNumberOfTuples());
2049   CPPUNIT_ASSERT(std::equal(connExpected2,connExpected2+70,m2->getNodalConnectivity()->begin()));
2050   CPPUNIT_ASSERT(std::equal(connIExpected2,connIExpected2+15,m2->getNodalConnectivityIndex()->begin()));
2051   CPPUNIT_ASSERT_EQUAL(1,d2->getNumberOfComponents());
2052   CPPUNIT_ASSERT_EQUAL(14,d2->getNumberOfTuples());
2053   CPPUNIT_ASSERT(std::equal(n2o2,n2o2+14,d2->begin()));
2054   f2->decrRef();
2055   m2->decrRef();
2056   d2->decrRef();
2057   //
2058   m->decrRef();
2059 }