1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D
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, or (at your option) any later version.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (CEA/DEN)
21 #include "MEDCouplingBasicsTest3.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"
33 using namespace ParaMEDMEM;
35 void MEDCouplingBasicsTest3::testGetMeasureFieldCMesh1()
37 MEDCouplingCMesh *m=MEDCouplingCMesh::New();
38 DataArrayDouble *da=DataArrayDouble::New();
39 const double discX[4]={2.3,3.4,5.8,10.2};
40 const double discY[3]={12.3,23.4,45.8};
41 const double discZ[5]={-0.7,1.2,1.25,2.13,2.67};
43 std::copy(discX,discX+4,da->getPointer());
47 CPPUNIT_ASSERT_EQUAL(4,m->getNumberOfNodes());
48 CPPUNIT_ASSERT_EQUAL(3,m->getNumberOfCells());
49 CPPUNIT_ASSERT_EQUAL(1,m->getSpaceDimension());
50 MEDCouplingFieldDouble *f=m->getMeasureField(true);
51 CPPUNIT_ASSERT_EQUAL(3,f->getNumberOfTuples());
52 CPPUNIT_ASSERT_EQUAL(1,f->getNumberOfComponents());
53 const double expected1[3]={1.1,2.4,4.4};
55 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f->getIJ(i,0),1e-12);
57 DataArrayDouble *coords=m->getCoordinatesAndOwner();
58 CPPUNIT_ASSERT_EQUAL(4,coords->getNumberOfTuples());
59 CPPUNIT_ASSERT_EQUAL(1,coords->getNumberOfComponents());
61 CPPUNIT_ASSERT_DOUBLES_EQUAL(discX[i],coords->getIJ(i,0),1e-12);
63 coords=m->getBarycenterAndOwner();
64 CPPUNIT_ASSERT_EQUAL(3,coords->getNumberOfTuples());
65 CPPUNIT_ASSERT_EQUAL(1,coords->getNumberOfComponents());
66 const double expected1_3[3]={2.85,4.6,8.};
68 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1_3[i],coords->getIJ(i,0),1e-12);
71 da=DataArrayDouble::New();
73 std::copy(discY,discY+3,da->getPointer());
77 CPPUNIT_ASSERT_EQUAL(12,m->getNumberOfNodes());
78 CPPUNIT_ASSERT_EQUAL(6,m->getNumberOfCells());
79 CPPUNIT_ASSERT_EQUAL(2,m->getSpaceDimension());
80 f=m->getMeasureField(true);
81 CPPUNIT_ASSERT_EQUAL(6,f->getNumberOfTuples());
82 CPPUNIT_ASSERT_EQUAL(1,f->getNumberOfComponents());
83 const double expected2[6]={12.21,26.64,48.84,24.64,53.76,98.56};
85 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f->getIJ(i,0),1e-12);
87 coords=m->getCoordinatesAndOwner();
88 CPPUNIT_ASSERT_EQUAL(12,coords->getNumberOfTuples());
89 CPPUNIT_ASSERT_EQUAL(2,coords->getNumberOfComponents());
90 const double expected2_2[24]={2.3,12.3,3.4,12.3,5.8,12.3,10.2,12.3, 2.3,23.4,3.4,23.4,5.8,23.4,10.2,23.4, 2.3,45.8,3.4,45.8,5.8,45.8,10.2,45.8};
92 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2_2[i],coords->getIJ(0,i),1e-12);
94 coords=m->getBarycenterAndOwner();
95 CPPUNIT_ASSERT_EQUAL(6,coords->getNumberOfTuples());
96 CPPUNIT_ASSERT_EQUAL(2,coords->getNumberOfComponents());
97 const double expected2_3[12]={2.85,17.85,4.6,17.85,8.,17.85, 2.85,34.6,4.6,34.6,8.,34.6};
99 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2_3[i],coords->getIJ(0,i),1e-12);
102 da=DataArrayDouble::New();
104 std::copy(discZ,discZ+5,da->getPointer());
105 m->setCoordsAt(2,da);
108 CPPUNIT_ASSERT_EQUAL(60,m->getNumberOfNodes());
109 CPPUNIT_ASSERT_EQUAL(24,m->getNumberOfCells());
110 CPPUNIT_ASSERT_EQUAL(3,m->getSpaceDimension());
111 f=m->getMeasureField(true);
112 CPPUNIT_ASSERT_EQUAL(24,f->getNumberOfTuples());
113 CPPUNIT_ASSERT_EQUAL(1,f->getNumberOfComponents());
114 const double expected3[24]={23.199, 50.616, 92.796, 46.816, 102.144, 187.264, 0.6105, 1.332, 2.442, 1.232, 2.688, 4.928, 10.7448, 23.4432, 42.9792, 21.6832, 47.3088, 86.7328, 6.5934, 14.3856, 26.3736, 13.3056, 29.0304, 53.2224};
115 for(int i=0;i<24;i++)
116 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],f->getIJ(i,0),1e-12);
118 coords=m->getCoordinatesAndOwner();
119 CPPUNIT_ASSERT_EQUAL(60,coords->getNumberOfTuples());
120 CPPUNIT_ASSERT_EQUAL(3,coords->getNumberOfComponents());
121 const double expected3_2[180]={
122 2.3,12.3,-0.7, 3.4,12.3,-0.7, 5.8,12.3,-0.7, 10.2,12.3,-0.7, 2.3,23.4,-0.7, 3.4,23.4,-0.7, 5.8,23.4,-0.7, 10.2,23.4,-0.7, 2.3,45.8,-0.7, 3.4,45.8,-0.7, 5.8,45.8,-0.7, 10.2,45.8,-0.7,
123 2.3,12.3,1.2, 3.4,12.3,1.2, 5.8,12.3,1.2, 10.2,12.3,1.2, 2.3,23.4,1.2, 3.4,23.4,1.2, 5.8,23.4,1.2, 10.2,23.4,1.2, 2.3,45.8,1.2, 3.4,45.8,1.2, 5.8,45.8,1.2, 10.2,45.8,1.2,
124 2.3,12.3,1.25, 3.4,12.3,1.25, 5.8,12.3,1.25, 10.2,12.3,1.25, 2.3,23.4,1.25, 3.4,23.4,1.25, 5.8,23.4,1.25, 10.2,23.4,1.25, 2.3,45.8,1.25, 3.4,45.8,1.25, 5.8,45.8,1.25, 10.2,45.8,1.25,
125 2.3,12.3,2.13, 3.4,12.3,2.13, 5.8,12.3,2.13, 10.2,12.3,2.13, 2.3,23.4,2.13, 3.4,23.4,2.13, 5.8,23.4,2.13, 10.2,23.4,2.13, 2.3,45.8,2.13, 3.4,45.8,2.13, 5.8,45.8,2.13, 10.2,45.8,2.13,
126 2.3,12.3,2.67, 3.4,12.3,2.67, 5.8,12.3,2.67, 10.2,12.3,2.67, 2.3,23.4,2.67, 3.4,23.4,2.67, 5.8,23.4,2.67, 10.2,23.4,2.67, 2.3,45.8,2.67, 3.4,45.8,2.67, 5.8,45.8,2.67, 10.2,45.8,2.67
128 for(int i=0;i<180;i++)
129 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3_2[i],coords->getIJ(0,i),1e-12);
131 coords=m->getBarycenterAndOwner();
132 CPPUNIT_ASSERT_EQUAL(24,coords->getNumberOfTuples());
133 CPPUNIT_ASSERT_EQUAL(3,coords->getNumberOfComponents());
134 const double expected3_3[72]={
135 2.85,17.85,0.25,4.6,17.85,0.25,8.,17.85,0.25, 2.85,34.6,0.25,4.6,34.6,0.25,8.,34.6,0.25,
136 2.85,17.85,1.225,4.6,17.85,1.225,8.,17.85,1.225, 2.85,34.6,1.225,4.6,34.6,1.225,8.,34.6,1.225,
137 2.85,17.85,1.69,4.6,17.85,1.69,8.,17.85,1.69, 2.85,34.6,1.69,4.6,34.6,1.69,8.,34.6,1.69,
138 2.85,17.85,2.4,4.6,17.85,2.4,8.,17.85,2.4, 2.85,34.6,2.4,4.6,34.6,2.4,8.,34.6,2.4
140 for(int i=0;i<72;i++)
141 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3_3[i],coords->getIJ(0,i),1e-12);
147 void MEDCouplingBasicsTest3::testFieldDoubleZipCoords1()
149 MEDCouplingUMesh *m=build2DTargetMeshMergeNode_1();
150 MEDCouplingFieldDouble *f=m->fillFromAnalytic(ON_NODES,2,"x*2.");
151 f->getArray()->setInfoOnComponent(0,"titi");
152 f->getArray()->setInfoOnComponent(1,"tutu");
154 CPPUNIT_ASSERT_EQUAL(18,f->getNumberOfTuples());
155 CPPUNIT_ASSERT_EQUAL(2,f->getNumberOfComponents());
156 const double expected1[36]={-0.6, -0.6, 0.4, 0.4, 1.4, 1.4, -0.6, -0.6, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 1.4, 1.4, -0.6, -0.6, 0.4, 0.4, 1.4, 1.4, -0.6, -0.6, 1.4, 1.4, -0.6, -0.6, 0.4, 0.4, 1.4, 1.4, 0.4, 0.4};
157 for(int i=0;i<36;i++)
158 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f->getIJ(0,i),1e-12);
159 CPPUNIT_ASSERT(f->zipCoords());
161 const double expected2[30]={-0.6, -0.6, 1.4, 1.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 1.4, 1.4, -0.6, -0.6, 0.4, 0.4, 1.4, 1.4, 1.4, 1.4, -0.6, -0.6, 0.4, 0.4, 1.4, 1.4, 0.4, 0.4};
162 for(int i=0;i<30;i++)
163 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f->getIJ(0,i),1e-12);
164 CPPUNIT_ASSERT(!f->zipCoords());
166 for(int i=0;i<30;i++)
167 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f->getIJ(0,i),1e-12);
168 CPPUNIT_ASSERT(std::string(f->getArray()->getInfoOnComponent(0))=="titi");
169 CPPUNIT_ASSERT(std::string(f->getArray()->getInfoOnComponent(1))=="tutu");
174 void MEDCouplingBasicsTest3::testFieldDoubleZipConnectivity1()
176 MEDCouplingUMesh *m1=build2DTargetMesh_1();
177 MEDCouplingUMesh *m2=build2DTargetMesh_1();
178 const int cells1[3]={2,3,4};
179 MEDCouplingPointSet *m3_1=m2->buildPartOfMySelf(cells1,cells1+3,true);
180 MEDCouplingUMesh *m3=dynamic_cast<MEDCouplingUMesh *>(m3_1);
183 MEDCouplingUMesh *m4=build2DSourceMesh_1();
184 MEDCouplingUMesh *m5=MEDCouplingUMesh::MergeUMeshes(m1,m3);
187 MEDCouplingUMesh *m6=MEDCouplingUMesh::MergeUMeshes(m5,m4);
191 CPPUNIT_ASSERT_EQUAL(10,m6->getNumberOfCells());
192 CPPUNIT_ASSERT_EQUAL(22,m6->getNumberOfNodes());
195 DataArrayInt *arr=m6->mergeNodes(1e-13,areNodesMerged,newNbOfNodes);
196 CPPUNIT_ASSERT_EQUAL(9,m6->getNumberOfNodes());
198 MEDCouplingFieldDouble *f=m6->fillFromAnalytic(ON_CELLS,2,"x");
199 MEDCouplingFieldDouble *f2=m6->fillFromAnalytic(ON_NODES,2,"x");
200 CPPUNIT_ASSERT_EQUAL(10,f->getNumberOfTuples());
201 CPPUNIT_ASSERT_EQUAL(2,f->getNumberOfComponents());
202 const double expected1[20]={-0.05, -0.05, 0.3666666666666667, 0.3666666666666667, 0.53333333333333321, 0.53333333333333321,
203 -0.05, -0.05, 0.45, 0.45, 0.53333333333333321, 0.53333333333333321, -0.05, -0.05, 0.45, 0.45,
204 0.36666666666666659, 0.36666666666666659, 0.033333333333333326, 0.033333333333333326};
205 for(int i=0;i<20;i++)
206 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f->getIJ(0,i),1e-12);
207 f->getArray()->setInfoOnComponent(0,"titi");
208 f->getArray()->setInfoOnComponent(1,"tutu");
210 CPPUNIT_ASSERT(f->zipConnectivity(0));
211 const double expected2[14]={-0.05, -0.05, 0.3666666666666667, 0.3666666666666667, 0.53333333333333321, 0.53333333333333321,
212 -0.05, -0.05, 0.45, 0.45, 0.36666666666666659, 0.36666666666666659, 0.033333333333333326, 0.033333333333333326};
213 CPPUNIT_ASSERT_EQUAL(7,f->getNumberOfTuples());
214 CPPUNIT_ASSERT_EQUAL(2,f->getNumberOfComponents());
215 for(int i=0;i<14;i++)
216 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f->getIJ(0,i),1e-12);
217 CPPUNIT_ASSERT(std::string(f->getArray()->getInfoOnComponent(0))=="titi");
218 CPPUNIT_ASSERT(std::string(f->getArray()->getInfoOnComponent(1))=="tutu");
219 CPPUNIT_ASSERT(!f->zipConnectivity(0));
222 const double expected3[18]={-0.3, -0.3, 0.2, 0.2, 0.7, 0.7, -0.3, -0.3, 0.2, 0.2, 0.7, 0.7,
223 -0.3, -0.3, 0.2, 0.2, 0.7, 0.7};
224 CPPUNIT_ASSERT_EQUAL(9,f2->getNumberOfTuples());
225 CPPUNIT_ASSERT_EQUAL(2,f2->getNumberOfComponents());
226 for(int i=0;i<18;i++)
227 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],f2->getIJ(0,i),1e-12);
228 CPPUNIT_ASSERT(f2->zipConnectivity(0));
229 CPPUNIT_ASSERT_EQUAL(9,f2->getNumberOfTuples());
230 CPPUNIT_ASSERT_EQUAL(2,f2->getNumberOfComponents());
231 for(int i=0;i<18;i++)
232 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],f2->getIJ(0,i),1e-12);
238 void MEDCouplingBasicsTest3::testDaDoubleRenumber1()
240 DataArrayDouble *a=DataArrayDouble::New();
242 a->setInfoOnComponent(0,"toto");
243 a->setInfoOnComponent(1,"tata");
244 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
245 std::copy(arr1,arr1+14,a->getPointer());
247 const int arr2[7]={3,1,0,6,5,4,2};
248 DataArrayDouble *b=a->renumber(arr2);
249 CPPUNIT_ASSERT_EQUAL(7,b->getNumberOfTuples());
250 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
251 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(0))=="toto");
252 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(1))=="tata");
253 const double expected1[14]={3.1, 13.1, 2.1, 12.1, 7.1, 17.1, 1.1, 11.1, 6.1, 16.1, 5.1, 15.1, 4.1, 14.1};
254 for(int i=0;i<14;i++)
255 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
259 DataArrayInt *c=DataArrayInt::New();
261 c->setInfoOnComponent(0,"toto");
262 c->setInfoOnComponent(1,"tata");
263 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
264 std::copy(arr3,arr3+14,c->getPointer());
265 DataArrayInt *d=c->renumber(arr2);
266 CPPUNIT_ASSERT_EQUAL(7,d->getNumberOfTuples());
267 CPPUNIT_ASSERT_EQUAL(2,d->getNumberOfComponents());
268 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(0))=="toto");
269 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(1))=="tata");
270 const int expected2[14]={3, 13, 2, 12, 7, 17, 1, 11, 6, 16, 5, 15, 4, 14};
271 for(int i=0;i<14;i++)
272 CPPUNIT_ASSERT_EQUAL(expected2[i],d->getIJ(0,i));
277 void MEDCouplingBasicsTest3::testDaDoubleRenumberAndReduce1()
279 DataArrayDouble *a=DataArrayDouble::New();
281 a->setInfoOnComponent(0,"toto");
282 a->setInfoOnComponent(1,"tata");
283 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
284 std::copy(arr1,arr1+14,a->getPointer());
286 const int arr2[7]={2,-1,1,-1,0,4,3};
287 DataArrayDouble *b=a->renumberAndReduce(arr2,5);
288 CPPUNIT_ASSERT_EQUAL(5,b->getNumberOfTuples());
289 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
290 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(0))=="toto");
291 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(1))=="tata");
292 const double expected1[10]={5.1,15.1,3.1,13.1,1.1,11.1,7.1,17.1,6.1,16.1};
293 for(int i=0;i<10;i++)
294 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
298 DataArrayInt *c=DataArrayInt::New();
300 c->setInfoOnComponent(0,"toto");
301 c->setInfoOnComponent(1,"tata");
302 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
303 std::copy(arr3,arr3+14,c->getPointer());
304 DataArrayInt *d=c->renumberAndReduce(arr2,5);
305 CPPUNIT_ASSERT_EQUAL(5,d->getNumberOfTuples());
306 CPPUNIT_ASSERT_EQUAL(2,d->getNumberOfComponents());
307 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(0))=="toto");
308 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(1))=="tata");
309 const int expected2[10]={5,15,3,13,1,11,7,17,6,16};
310 for(int i=0;i<10;i++)
311 CPPUNIT_ASSERT_EQUAL(expected2[i],d->getIJ(0,i));
316 void MEDCouplingBasicsTest3::testDaDoubleRenumberInPlace1()
318 DataArrayDouble *a=DataArrayDouble::New();
320 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
321 std::copy(arr1,arr1+14,a->getPointer());
323 const int arr2[7]={3,1,0,6,5,4,2};
324 a->renumberInPlace(arr2);
325 CPPUNIT_ASSERT_EQUAL(7,a->getNumberOfTuples());
326 CPPUNIT_ASSERT_EQUAL(2,a->getNumberOfComponents());
327 const double expected1[14]={3.1, 13.1, 2.1, 12.1, 7.1, 17.1, 1.1, 11.1, 6.1, 16.1, 5.1, 15.1, 4.1, 14.1};
328 for(int i=0;i<14;i++)
329 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],a->getIJ(0,i),1e-14);
332 DataArrayInt *c=DataArrayInt::New();
334 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
335 std::copy(arr3,arr3+14,c->getPointer());
336 c->renumberInPlace(arr2);
337 CPPUNIT_ASSERT_EQUAL(7,c->getNumberOfTuples());
338 CPPUNIT_ASSERT_EQUAL(2,c->getNumberOfComponents());
339 const int expected2[14]={3, 13, 2, 12, 7, 17, 1, 11, 6, 16, 5, 15, 4, 14};
340 for(int i=0;i<14;i++)
341 CPPUNIT_ASSERT_EQUAL(expected2[i],c->getIJ(0,i));
345 void MEDCouplingBasicsTest3::testDaDoubleRenumberR1()
347 DataArrayDouble *a=DataArrayDouble::New();
349 a->setInfoOnComponent(0,"toto");
350 a->setInfoOnComponent(1,"tata");
351 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
352 std::copy(arr1,arr1+14,a->getPointer());
354 const int arr2[7]={3,1,0,6,5,4,2};
355 DataArrayDouble *b=a->renumberR(arr2);
356 CPPUNIT_ASSERT_EQUAL(7,b->getNumberOfTuples());
357 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
358 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(0))=="toto");
359 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(1))=="tata");
360 const double expected1[14]={4.1, 14.1, 2.1, 12.1, 1.1, 11.1, 7.1, 17.1, 6.1, 16.1, 5.1, 15.1, 3.1, 13.1};
361 for(int i=0;i<14;i++)
362 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
366 DataArrayInt *c=DataArrayInt::New();
368 c->setInfoOnComponent(0,"toto");
369 c->setInfoOnComponent(1,"tata");
370 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
371 std::copy(arr3,arr3+14,c->getPointer());
372 DataArrayInt *d=c->renumberR(arr2);
373 CPPUNIT_ASSERT_EQUAL(7,d->getNumberOfTuples());
374 CPPUNIT_ASSERT_EQUAL(2,d->getNumberOfComponents());
375 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(0))=="toto");
376 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(1))=="tata");
377 const int expected2[14]={4, 14, 2, 12, 1, 11, 7, 17, 6, 16, 5, 15, 3, 13};
378 for(int i=0;i<14;i++)
379 CPPUNIT_ASSERT_EQUAL(expected2[i],d->getIJ(0,i));
384 void MEDCouplingBasicsTest3::testDaDoubleRenumberInPlaceR1()
386 DataArrayDouble *a=DataArrayDouble::New();
388 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
389 std::copy(arr1,arr1+14,a->getPointer());
391 const int arr2[7]={3,1,0,6,5,4,2};
392 a->renumberInPlaceR(arr2);
393 CPPUNIT_ASSERT_EQUAL(7,a->getNumberOfTuples());
394 CPPUNIT_ASSERT_EQUAL(2,a->getNumberOfComponents());
395 const double expected1[14]={4.1, 14.1, 2.1, 12.1, 1.1, 11.1, 7.1, 17.1, 6.1, 16.1, 5.1, 15.1, 3.1, 13.1};
396 for(int i=0;i<14;i++)
397 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],a->getIJ(0,i),1e-14);
400 DataArrayInt *c=DataArrayInt::New();
402 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
403 std::copy(arr3,arr3+14,c->getPointer());
404 c->renumberInPlaceR(arr2);
405 CPPUNIT_ASSERT_EQUAL(7,c->getNumberOfTuples());
406 CPPUNIT_ASSERT_EQUAL(2,c->getNumberOfComponents());
407 const int expected2[14]={4, 14, 2, 12, 1, 11, 7, 17, 6, 16, 5, 15, 3, 13};
408 for(int i=0;i<14;i++)
409 CPPUNIT_ASSERT_EQUAL(expected2[i],c->getIJ(0,i));
413 void MEDCouplingBasicsTest3::testDaDoubleSelectByTupleId1()
415 DataArrayDouble *a=DataArrayDouble::New();
417 a->setInfoOnComponent(0,"toto");
418 a->setInfoOnComponent(1,"tata");
419 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
420 std::copy(arr1,arr1+14,a->getPointer());
422 const int arr2[7]={4,2,0,6,5};
423 DataArrayDouble *b=a->selectByTupleId(arr2,arr2+5);
424 CPPUNIT_ASSERT_EQUAL(5,b->getNumberOfTuples());
425 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
426 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(0))=="toto");
427 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(1))=="tata");
428 const double expected1[10]={5.1,15.1,3.1,13.1,1.1,11.1,7.1,17.1,6.1,16.1};
429 for(int i=0;i<10;i++)
430 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
434 DataArrayInt *c=DataArrayInt::New();
436 c->setInfoOnComponent(0,"toto");
437 c->setInfoOnComponent(1,"tata");
438 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
439 std::copy(arr3,arr3+14,c->getPointer());
440 DataArrayInt *d=c->selectByTupleId(arr2,arr2+5);
441 CPPUNIT_ASSERT_EQUAL(5,d->getNumberOfTuples());
442 CPPUNIT_ASSERT_EQUAL(2,d->getNumberOfComponents());
443 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(0))=="toto");
444 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(1))=="tata");
445 const int expected2[10]={5,15,3,13,1,11,7,17,6,16};
446 for(int i=0;i<10;i++)
447 CPPUNIT_ASSERT_EQUAL(expected2[i],d->getIJ(0,i));
452 void MEDCouplingBasicsTest3::testDaDoubleGetMinMaxValues1()
454 DataArrayDouble *a=DataArrayDouble::New();
456 const double arr1[9]={2.34,4.56,-6.77,4.55,4.56,2.24,2.34,1.02,4.56};
457 std::copy(arr1,arr1+9,a->getPointer());
459 double m=a->getMaxValue(where);
460 CPPUNIT_ASSERT_EQUAL(1,where);
461 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.56,m,1e-12);
463 m=a->getMaxValue2(ws);
464 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.56,m,1e-12);
465 CPPUNIT_ASSERT_EQUAL(3,ws->getNumberOfTuples());
466 CPPUNIT_ASSERT_EQUAL(1,ws->getNumberOfComponents());
467 const int expected1[3]={1,4,8};
469 CPPUNIT_ASSERT_EQUAL(expected1[i],ws->getIJ(i,0));
472 a=DataArrayDouble::New();
473 const double arr2[9]={-2.34,-4.56,6.77,-4.55,-4.56,-2.24,-2.34,-1.02,-4.56};
475 std::copy(arr2,arr2+9,a->getPointer());
477 m=a->getMinValue(where);
478 CPPUNIT_ASSERT_EQUAL(1,where);
479 CPPUNIT_ASSERT_DOUBLES_EQUAL(-4.56,m,1e-12);
480 m=a->getMinValue2(ws);
481 CPPUNIT_ASSERT_DOUBLES_EQUAL(-4.56,m,1e-12);
482 CPPUNIT_ASSERT_EQUAL(3,ws->getNumberOfTuples());
483 CPPUNIT_ASSERT_EQUAL(1,ws->getNumberOfComponents());
485 CPPUNIT_ASSERT_EQUAL(expected1[i],ws->getIJ(i,0));
490 void MEDCouplingBasicsTest3::testFieldDoubleGetMinMaxValues2()
492 MEDCouplingUMesh *m1=0;
493 MEDCouplingUMesh *m2=build3DExtrudedUMesh_1(m1);
495 CPPUNIT_ASSERT_EQUAL(18,m2->getNumberOfCells());
496 const double arr1[18]={8.71,4.53,-12.41,8.71,-8.71,8.7099,4.55,8.71,5.55,6.77,-1e-200,4.55,8.7099,0.,1.23,0.,2.22,8.71};
497 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
498 DataArrayDouble *a=DataArrayDouble::New();
500 std::copy(arr1,arr1+18,a->getPointer());
506 double m=f->getMaxValue();
507 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.71,m,1e-12);
509 m=f->getMaxValue2(ws);
510 CPPUNIT_ASSERT_DOUBLES_EQUAL(8.71,m,1e-12);
511 CPPUNIT_ASSERT_EQUAL(4,ws->getNumberOfTuples());
512 CPPUNIT_ASSERT_EQUAL(1,ws->getNumberOfComponents());
513 const int expected1[4]={0,3,7,17};
515 CPPUNIT_ASSERT_EQUAL(expected1[i],ws->getIJ(i,0));
518 const double arr2[18]={-8.71,-4.53,12.41,-8.71,8.71,-8.7099,-4.55,-8.71,-5.55,-6.77,1e-200,-4.55,-8.7099,0.,-1.23,0.,-2.22,-8.71};
519 std::copy(arr2,arr2+18,a->getPointer());
522 CPPUNIT_ASSERT_DOUBLES_EQUAL(-8.71,m,1e-12);
523 m=f->getMinValue2(ws);
524 CPPUNIT_ASSERT_DOUBLES_EQUAL(-8.71,m,1e-12);
525 CPPUNIT_ASSERT_EQUAL(4,ws->getNumberOfTuples());
526 CPPUNIT_ASSERT_EQUAL(1,ws->getNumberOfComponents());
528 CPPUNIT_ASSERT_EQUAL(expected1[i],ws->getIJ(i,0));
535 void MEDCouplingBasicsTest3::testBuildUnstructuredCMesh1()
537 MEDCouplingCMesh *m=MEDCouplingCMesh::New();
538 DataArrayDouble *da=DataArrayDouble::New();
539 const double discX[4]={2.3,3.4,5.8,10.2};
540 const double discY[3]={12.3,23.4,45.8};
541 const double discZ[5]={-0.7,1.2,1.25,2.13,2.67};
543 std::copy(discX,discX+4,da->getPointer());
544 m->setCoordsAt(0,da);
548 CPPUNIT_ASSERT_EQUAL(0,m->getCellContainingPoint(&pos,1e-12));
550 CPPUNIT_ASSERT_EQUAL(1,m->getCellContainingPoint(&pos,1e-12));
552 CPPUNIT_ASSERT_EQUAL(2,m->getCellContainingPoint(&pos,1e-12));
554 CPPUNIT_ASSERT_EQUAL(-1,m->getCellContainingPoint(&pos,1e-12));
556 CPPUNIT_ASSERT_EQUAL(-1,m->getCellContainingPoint(&pos,1e-12));
558 MEDCouplingUMesh *m2=m->buildUnstructured();
559 m2->checkCoherency();
560 MEDCouplingFieldDouble *f1=m->getMeasureField(false);
561 MEDCouplingFieldDouble *f2=m2->getMeasureField(false);
562 CPPUNIT_ASSERT_EQUAL(f1->getNumberOfTuples(),3);
563 CPPUNIT_ASSERT_EQUAL(f2->getNumberOfTuples(),3);
564 CPPUNIT_ASSERT_EQUAL(1,m2->getMeshDimension());
565 CPPUNIT_ASSERT_EQUAL(1,m2->getSpaceDimension());
567 CPPUNIT_ASSERT_DOUBLES_EQUAL(f1->getIJ(i,0),f2->getIJ(i,0),1e-10);
568 da=DataArrayDouble::New();
570 std::copy(discY,discY+3,da->getPointer());
571 m->setCoordsAt(1,da);
577 m2=m->buildUnstructured();
578 m2->checkCoherency();
579 f1=m->getMeasureField(false);
580 f2=m2->getMeasureField(false);
581 CPPUNIT_ASSERT_EQUAL(f1->getNumberOfTuples(),6);
582 CPPUNIT_ASSERT_EQUAL(f2->getNumberOfTuples(),6);
583 CPPUNIT_ASSERT_EQUAL(2,m2->getMeshDimension());
584 CPPUNIT_ASSERT_EQUAL(2,m2->getSpaceDimension());
586 CPPUNIT_ASSERT_DOUBLES_EQUAL(f1->getIJ(i,0),f2->getIJ(i,0),1e-10);
591 da=DataArrayDouble::New();
593 std::copy(discZ,discZ+5,da->getPointer());
594 m->setCoordsAt(2,da);
596 m2=m->buildUnstructured();
597 m2->checkCoherency();
598 f1=m->getMeasureField(false);
599 f2=m2->getMeasureField(false);
600 CPPUNIT_ASSERT_EQUAL(f1->getNumberOfTuples(),24);
601 CPPUNIT_ASSERT_EQUAL(f2->getNumberOfTuples(),24);
602 CPPUNIT_ASSERT_EQUAL(3,m2->getMeshDimension());
603 CPPUNIT_ASSERT_EQUAL(3,m2->getSpaceDimension());
604 for(int i=0;i<24;i++)
605 CPPUNIT_ASSERT_DOUBLES_EQUAL(f1->getIJ(i,0),f2->getIJ(i,0),1e-10);
609 double pos1[3]={5.,30.,2.};
610 CPPUNIT_ASSERT_EQUAL(16,m->getCellContainingPoint(pos1,1e-12));
612 const double pt[3]={2.4,12.7,-3.4};
614 MEDCouplingUMesh *m3=m->buildUnstructured();
616 CPPUNIT_ASSERT(m3->isEqual(m2,1e-12));
623 void MEDCouplingBasicsTest3::testDataArrayIntInvertO2NNO21()
625 const int arr1[6]={2,0,4,1,5,3};
626 DataArrayInt *da=DataArrayInt::New();
628 std::copy(arr1,arr1+6,da->getPointer());
629 DataArrayInt *da2=da->invertArrayO2N2N2O(6);
630 CPPUNIT_ASSERT_EQUAL(6,da2->getNumberOfTuples());
631 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
632 const int expected1[6]={1,3,0,5,2,4};
634 CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(i,0));
635 DataArrayInt *da3=da2->invertArrayN2O2O2N(6);
637 CPPUNIT_ASSERT_EQUAL(arr1[i],da3->getIJ(i,0));
642 const int arr2[10]={3,-1,5,4,-1,0,-1,1,2,-1};
643 da=DataArrayInt::New();
645 std::copy(arr2,arr2+10,da->getPointer());
646 da2=da->invertArrayO2N2N2O(6);
647 CPPUNIT_ASSERT_EQUAL(6,da2->getNumberOfTuples());
648 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
649 const int expected2[10]={5,7,8,0,3,2};
651 CPPUNIT_ASSERT_EQUAL(expected2[i],da2->getIJ(i,0));
652 da3=da2->invertArrayN2O2O2N(10);
653 for(int i=0;i<10;i++)
654 CPPUNIT_ASSERT_EQUAL(arr2[i],da3->getIJ(i,0));
660 void MEDCouplingBasicsTest3::testKeepSetSelectedComponent1()
662 const double arr1[20]={1.,2.,3.,4., 11.,12.,13.,14., 21.,22.,23.,24., 31.,32.,33.,34., 41.,42.,43.,44.};
663 DataArrayDouble *a1=DataArrayDouble::New();
665 std::copy(arr1,arr1+20,a1->getPointer());
666 a1->setInfoOnComponent(0,"aaaa");
667 a1->setInfoOnComponent(1,"bbbb");
668 a1->setInfoOnComponent(2,"cccc");
669 a1->setInfoOnComponent(3,"dddd");
670 const int arr2[6]={1,2,1,2,0,0};
671 std::vector<int> arr2V(arr2,arr2+6);
672 DataArrayDouble *a2=static_cast<DataArrayDouble *>(a1->keepSelectedComponents(arr2V));
673 CPPUNIT_ASSERT_EQUAL(6,a2->getNumberOfComponents());
674 CPPUNIT_ASSERT_EQUAL(5,a2->getNumberOfTuples());
675 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(0))=="bbbb");
676 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(1))=="cccc");
677 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(2))=="bbbb");
678 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(3))=="cccc");
679 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(4))=="aaaa");
680 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(5))=="aaaa");
681 const double expected1[30]={2.,3.,2.,3.,1.,1., 12.,13.,12.,13.,11.,11., 22.,23.,22.,23.,21.,21., 32.,33.,32.,33.,31.,31., 42.,43.,42.,43.,41.,41.};
682 for(int i=0;i<30;i++)
683 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],a2->getIJ(0,i),1e-14);
684 DataArrayInt *a3=a1->convertToIntArr();
685 DataArrayInt *a4=static_cast<DataArrayInt *>(a3->keepSelectedComponents(arr2V));
686 CPPUNIT_ASSERT_EQUAL(6,a4->getNumberOfComponents());
687 CPPUNIT_ASSERT_EQUAL(5,a4->getNumberOfTuples());
688 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(0))=="bbbb");
689 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(1))=="cccc");
690 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(2))=="bbbb");
691 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(3))=="cccc");
692 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(4))=="aaaa");
693 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(5))=="aaaa");
694 for(int i=0;i<30;i++)
695 CPPUNIT_ASSERT_EQUAL(int(expected1[i]),a4->getIJ(0,i));
696 // setSelectedComponents
697 const int arr3[2]={3,2};
698 std::vector<int> arr3V(arr3,arr3+2);
699 DataArrayDouble *a5=static_cast<DataArrayDouble *>(a1->keepSelectedComponents(arr3V));
700 a5->setInfoOnComponent(0,"eeee");
701 a5->setInfoOnComponent(1,"ffff");
702 const int arr4[2]={1,2};
703 std::vector<int> arr4V(arr4,arr4+2);
704 a2->setSelectedComponents(a5,arr4V);
705 CPPUNIT_ASSERT_EQUAL(6,a2->getNumberOfComponents());
706 CPPUNIT_ASSERT_EQUAL(5,a2->getNumberOfTuples());
707 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(0))=="bbbb");
708 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(1))=="eeee");
709 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(2))=="ffff");
710 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(3))=="cccc");
711 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(4))=="aaaa");
712 CPPUNIT_ASSERT(std::string(a2->getInfoOnComponent(5))=="aaaa");
713 const double expected2[30]={2.,4.,3.,3.,1.,1., 12.,14.,13.,13.,11.,11., 22.,24.,23.,23.,21.,21., 32.,34.,33.,33.,31.,31., 42.,44.,43.,43.,41.,41.};
714 for(int i=0;i<30;i++)
715 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],a2->getIJ(0,i),1e-14);
716 DataArrayInt *a6=a5->convertToIntArr();
717 a6->setInfoOnComponent(0,"eeee");
718 a6->setInfoOnComponent(1,"ffff");
719 a4->setSelectedComponents(a6,arr4V);
720 CPPUNIT_ASSERT_EQUAL(6,a4->getNumberOfComponents());
721 CPPUNIT_ASSERT_EQUAL(5,a4->getNumberOfTuples());
722 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(0))=="bbbb");
723 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(1))=="eeee");
724 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(2))=="ffff");
725 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(3))=="cccc");
726 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(4))=="aaaa");
727 CPPUNIT_ASSERT(std::string(a4->getInfoOnComponent(5))=="aaaa");
728 for(int i=0;i<30;i++)
729 CPPUNIT_ASSERT_EQUAL(int(expected2[i]),a4->getIJ(0,i));
731 const int arr5[3]={2,3,6};
732 const int arr6[3]={2,7,5};
733 const int arr7[4]={2,1,4,6};
734 std::vector<int> arr5V(arr5,arr5+3);
735 std::vector<int> arr6V(arr6,arr6+3);
736 std::vector<int> arr7V(arr7,arr7+4);
737 CPPUNIT_ASSERT_THROW(a2->keepSelectedComponents(arr5V),INTERP_KERNEL::Exception);
738 CPPUNIT_ASSERT_THROW(a2->keepSelectedComponents(arr6V),INTERP_KERNEL::Exception);
739 CPPUNIT_ASSERT_THROW(a2->setSelectedComponents(a1,arr7V),INTERP_KERNEL::Exception);
741 CPPUNIT_ASSERT_THROW(a2->setSelectedComponents(a1,arr7V),INTERP_KERNEL::Exception);
751 void MEDCouplingBasicsTest3::testKeepSetSelectedComponent2()
753 MEDCouplingUMesh *m1=build2DTargetMesh_1();
754 const double arr1[20]={1.,2.,3.,4., 11.,12.,13.,14., 21.,22.,23.,24., 31.,32.,33.,34., 41.,42.,43.,44.};
755 DataArrayDouble *a1=DataArrayDouble::New();
757 std::copy(arr1,arr1+20,a1->getPointer());
758 a1->setInfoOnComponent(0,"aaaa");
759 a1->setInfoOnComponent(1,"bbbb");
760 a1->setInfoOnComponent(2,"cccc");
761 a1->setInfoOnComponent(3,"dddd");
762 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
763 f1->setTime(2.3,4,5);
767 f1->checkCoherency();
769 const int arr2[6]={1,2,1,2,0,0};
770 std::vector<int> arr2V(arr2,arr2+6);
771 MEDCouplingFieldDouble *f2=f1->keepSelectedComponents(arr2V);
772 CPPUNIT_ASSERT(f2->getMesh()==f1->getMesh());
773 CPPUNIT_ASSERT(f2->getTimeDiscretization()==ONE_TIME);
775 CPPUNIT_ASSERT_DOUBLES_EQUAL(2.3,f2->getTime(dt,it),1e-13);
776 CPPUNIT_ASSERT_EQUAL(4,dt);
777 CPPUNIT_ASSERT_EQUAL(5,it);
778 f2->checkCoherency();
779 CPPUNIT_ASSERT_EQUAL(6,f2->getNumberOfComponents());
780 CPPUNIT_ASSERT_EQUAL(5,f2->getNumberOfTuples());
781 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(0))=="bbbb");
782 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(1))=="cccc");
783 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(2))=="bbbb");
784 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(3))=="cccc");
785 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(4))=="aaaa");
786 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(5))=="aaaa");
787 const double expected1[30]={2.,3.,2.,3.,1.,1., 12.,13.,12.,13.,11.,11., 22.,23.,22.,23.,21.,21., 32.,33.,32.,33.,31.,31., 42.,43.,42.,43.,41.,41.};
788 for(int i=0;i<30;i++)
789 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f2->getIJ(0,i),1e-14);
790 //setSelectedComponents
791 const int arr3[2]={3,2};
792 std::vector<int> arr3V(arr3,arr3+2);
793 MEDCouplingFieldDouble *f5=f1->keepSelectedComponents(arr3V);
794 f5->setTime(6.7,8,9);
795 f5->getArray()->setInfoOnComponent(0,"eeee");
796 f5->getArray()->setInfoOnComponent(1,"ffff");
797 f5->checkCoherency();
798 const int arr4[2]={1,2};
799 std::vector<int> arr4V(arr4,arr4+2);
800 f2->setSelectedComponents(f5,arr4V);
801 CPPUNIT_ASSERT_EQUAL(6,f2->getNumberOfComponents());
802 CPPUNIT_ASSERT_EQUAL(5,f2->getNumberOfTuples());
803 f2->checkCoherency();
804 CPPUNIT_ASSERT_DOUBLES_EQUAL(2.3,f2->getTime(dt,it),1e-13);
805 CPPUNIT_ASSERT_EQUAL(4,dt);
806 CPPUNIT_ASSERT_EQUAL(5,it);
807 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(0))=="bbbb");
808 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(1))=="eeee");
809 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(2))=="ffff");
810 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(3))=="cccc");
811 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(4))=="aaaa");
812 CPPUNIT_ASSERT(std::string(f2->getArray()->getInfoOnComponent(5))=="aaaa");
813 const double expected2[30]={2.,4.,3.,3.,1.,1., 12.,14.,13.,13.,11.,11., 22.,24.,23.,23.,21.,21., 32.,34.,33.,33.,31.,31., 42.,44.,43.,43.,41.,41.};
814 for(int i=0;i<30;i++)
815 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f2->getIJ(0,i),1e-14);
823 void MEDCouplingBasicsTest3::testElementaryDAThrowAndSpecialCases()
825 DataArrayInt *da=DataArrayInt::New();
826 CPPUNIT_ASSERT_THROW(da->checkAllocated(),INTERP_KERNEL::Exception);
827 CPPUNIT_ASSERT_THROW(da->fillWithValue(1),INTERP_KERNEL::Exception);
828 CPPUNIT_ASSERT_THROW(da->iota(1),INTERP_KERNEL::Exception);
830 da->fillWithValue(11); //11,11,11,11...
831 da->iota(10); //10,11,12,13...
833 DataArrayInt *db=DataArrayInt::New();
836 DataArrayDouble *dbl2=DataArrayDouble::New();
838 CPPUNIT_ASSERT_THROW(dbl2->isUniform(10.,1e-15),INTERP_KERNEL::Exception);
839 CPPUNIT_ASSERT_THROW(dbl2->sort(),INTERP_KERNEL::Exception);
840 CPPUNIT_ASSERT_THROW(dbl2->iota(10.),INTERP_KERNEL::Exception);
842 DataArrayDouble *dbl=DataArrayDouble::New();
843 //DataArrayDouble not allocated yet
844 CPPUNIT_ASSERT_THROW(dbl->iota(10.),INTERP_KERNEL::Exception);
845 CPPUNIT_ASSERT_THROW(dbl->isUniform(10.,1e-15),INTERP_KERNEL::Exception);
846 CPPUNIT_ASSERT_THROW(dbl->sort(),INTERP_KERNEL::Exception);
847 CPPUNIT_ASSERT_THROW(dbl->reverse(),INTERP_KERNEL::Exception);
848 CPPUNIT_ASSERT_THROW(dbl->fromNoInterlace(),INTERP_KERNEL::Exception);
849 CPPUNIT_ASSERT_THROW(dbl->toNoInterlace(),INTERP_KERNEL::Exception);
853 CPPUNIT_ASSERT(!dbl->isUniform(10.,1e-15));
855 CPPUNIT_ASSERT(dbl->isMonotonic(true, .99));
856 CPPUNIT_ASSERT(dbl->isMonotonic(true, -.99));
857 CPPUNIT_ASSERT(!dbl->isMonotonic(true, 1.1));
858 CPPUNIT_ASSERT(!dbl->isMonotonic(true, -1.1));
860 CPPUNIT_ASSERT(dbl->isMonotonic(false, .99));
861 CPPUNIT_ASSERT(!dbl->isMonotonic(false, 1.1));
862 CPPUNIT_ASSERT(!dbl->isMonotonic(false, -1.1));
864 DataArrayInt *dc=DataArrayInt::New();
867 DataArrayDouble *dd=DataArrayDouble::New();
868 CPPUNIT_ASSERT_THROW(dd->checkAllocated(),INTERP_KERNEL::Exception);
869 CPPUNIT_ASSERT_THROW(dd->fillWithValue(1.),INTERP_KERNEL::Exception);
870 CPPUNIT_ASSERT_THROW(dd->iota(1.),INTERP_KERNEL::Exception);
871 CPPUNIT_ASSERT(!((dd->repr().find("No data"))==std::string::npos));
873 dd->alloc(0,1); //Allocated but nbOfElements==0!
874 CPPUNIT_ASSERT(!((dd->repr().find("Number of tuples : 0"))==std::string::npos));
875 CPPUNIT_ASSERT(!((dd->repr().find("Empty Data"))==std::string::npos));
876 dd->fillWithValue(11); //?!...
877 dd->iota(10); //?!...
878 CPPUNIT_ASSERT(dd->isMonotonic(true, 1.));
879 CPPUNIT_ASSERT(dd->isMonotonic(false, 1.));
881 CPPUNIT_ASSERT_THROW(db->copyStringInfoFrom(*da),INTERP_KERNEL::Exception);
882 CPPUNIT_ASSERT_THROW(db->copyStringInfoFrom(*da),INTERP_KERNEL::Exception);
883 std::vector<int> cIds(2,2);
884 CPPUNIT_ASSERT_THROW(da->copyPartOfStringInfoFrom(*db,cIds),INTERP_KERNEL::Exception);
887 CPPUNIT_ASSERT_THROW(da->copyPartOfStringInfoFrom(*db,cIds),INTERP_KERNEL::Exception);
889 std::vector<std::string> info(2,"infoOfOneComponent");
890 CPPUNIT_ASSERT_THROW(da->setInfoOnComponents(info),INTERP_KERNEL::Exception);
891 CPPUNIT_ASSERT_THROW(da->setInfoOnComponent(1,info[0].c_str()),INTERP_KERNEL::Exception);
892 db->setInfoOnComponents(info);
894 CPPUNIT_ASSERT_THROW(da->getInfoOnComponent(-1),INTERP_KERNEL::Exception);
895 CPPUNIT_ASSERT_THROW(da->getInfoOnComponent(2),INTERP_KERNEL::Exception);
896 CPPUNIT_ASSERT(db->getInfoOnComponent(1)==db->getInfoOnComponent(0));
897 CPPUNIT_ASSERT_THROW(db->getVarOnComponent(-1),INTERP_KERNEL::Exception);
898 CPPUNIT_ASSERT_THROW(db->getVarOnComponent(2),INTERP_KERNEL::Exception);
899 CPPUNIT_ASSERT_THROW(db->getUnitOnComponent(-1),INTERP_KERNEL::Exception);
900 CPPUNIT_ASSERT_THROW(db->getUnitOnComponent(2),INTERP_KERNEL::Exception);
902 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("varname unit "))==std::string("varname unit "));
903 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("varname]unit["))==std::string("varname]unit["));
904 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("[unit]"))==std::string());
905 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("varname [unit]"))==std::string("varname"));
907 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("varname unit "))==std::string());
908 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("varname]unit["))==std::string());
909 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("[unit]"))==std::string("unit"));
910 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("varname [unit]"))==std::string("unit"));
912 CPPUNIT_ASSERT_THROW(da->checkNbOfTuplesAndComp(*db,"theMessageInThrow"),INTERP_KERNEL::Exception);
913 CPPUNIT_ASSERT_THROW(da->checkNbOfTuplesAndComp(*dc,"theMessageInThrow"),INTERP_KERNEL::Exception);
914 CPPUNIT_ASSERT_THROW(db->checkNbOfTuplesAndComp(*dc,"theMessageInThrow"),INTERP_KERNEL::Exception);
916 CPPUNIT_ASSERT_THROW(da->checkNbOfTuplesAndComp(7,2,"theMessageInThrow"),INTERP_KERNEL::Exception);
917 da->checkNbOfTuplesAndComp(7,1,"theMessageInThrow");
919 CPPUNIT_ASSERT_THROW(db->checkNbOfElems(7*2+1,"theMessageInThrow"),INTERP_KERNEL::Exception);
920 db->checkNbOfElems(7*2,"theMessageInThrow");
922 CPPUNIT_ASSERT_THROW(db->GetNumberOfItemGivenBES(10,9,1,"theMessageInThrow"),INTERP_KERNEL::Exception);
923 CPPUNIT_ASSERT_THROW(db->GetNumberOfItemGivenBES(0,1,-1,"theMessageInThrow"),INTERP_KERNEL::Exception);
924 CPPUNIT_ASSERT_EQUAL(10,db->GetNumberOfItemGivenBES(0,10,1,"theMessageInThrow"));
925 CPPUNIT_ASSERT_EQUAL(5,db->GetNumberOfItemGivenBES(0,10,2,"theMessageInThrow"));
926 CPPUNIT_ASSERT_EQUAL(6,db->GetNumberOfItemGivenBES(0,11,2,"theMessageInThrow"));
928 //std::cout<<"\n!!!!!!!!!\n"<<dd->repr()<<"\n!!!!!!!!!\n";
929 CPPUNIT_ASSERT(!((da->repr().find("Number of components : 1"))==std::string::npos));
930 CPPUNIT_ASSERT(!((dd->repr().find("Number of components : 1"))==std::string::npos));
931 CPPUNIT_ASSERT(!((dbl->repr().find("Number of components : 1"))==std::string::npos));
933 CPPUNIT_ASSERT(!((da->reprZip().find("Number of components : 1"))==std::string::npos));
934 CPPUNIT_ASSERT(!((dd->reprZip().find("Number of components : 1"))==std::string::npos));
935 CPPUNIT_ASSERT(!((dbl->reprZip().find("Number of components : 1"))==std::string::npos));
937 std::ostringstream ret;
938 dbl->writeVTK(ret,2,"file.tmp",0);
939 CPPUNIT_ASSERT(!((ret.str().find("<DataArray"))==std::string::npos));
940 CPPUNIT_ASSERT(!((ret.str().find("Float32"))==std::string::npos));
941 CPPUNIT_ASSERT(!((ret.str().find("16 15 14 13 12 11 10"))==std::string::npos));
943 CPPUNIT_ASSERT_THROW(dbl->selectByTupleId2(0,1,-1),INTERP_KERNEL::Exception);
944 CPPUNIT_ASSERT_THROW(dbl->substr(-1,1),INTERP_KERNEL::Exception);
945 CPPUNIT_ASSERT_THROW(dbl->substr(8,1),INTERP_KERNEL::Exception);
946 CPPUNIT_ASSERT_THROW(dbl->substr(0,8),INTERP_KERNEL::Exception);
947 CPPUNIT_ASSERT_THROW(dbl->meldWith(dd),INTERP_KERNEL::Exception);
949 CPPUNIT_ASSERT_THROW(dbl->setPartOfValuesAdv(dbl2,da),INTERP_KERNEL::Exception); //dbl dbl2 not have the same number of components
950 CPPUNIT_ASSERT_THROW(dbl->setPartOfValuesAdv(dd,da),INTERP_KERNEL::Exception); //da tuple selector DataArrayInt instance not have exactly 2 components
952 DataArrayDouble *dbl3=DataArrayDouble::New();
954 dbl3->fillWithValue(11.);
956 //bad number of components
957 CPPUNIT_ASSERT_THROW(dbl3->getMaxValue(tupleId),INTERP_KERNEL::Exception);
958 CPPUNIT_ASSERT_THROW(dd->getMaxValue(tupleId),INTERP_KERNEL::Exception);
959 CPPUNIT_ASSERT_THROW(dbl3->getMinValue(tupleId),INTERP_KERNEL::Exception);
960 CPPUNIT_ASSERT_THROW(dd->getMinValue(tupleId),INTERP_KERNEL::Exception);
961 CPPUNIT_ASSERT_THROW(dbl3->getAverageValue(),INTERP_KERNEL::Exception);
962 CPPUNIT_ASSERT_THROW(dd->getAverageValue(),INTERP_KERNEL::Exception);
963 CPPUNIT_ASSERT_THROW(dd->accumulate(100),INTERP_KERNEL::Exception);
964 CPPUNIT_ASSERT_THROW(dbl->fromPolarToCart(),INTERP_KERNEL::Exception);
965 CPPUNIT_ASSERT_THROW(dbl3->fromCylToCart(),INTERP_KERNEL::Exception);
966 CPPUNIT_ASSERT_THROW(dbl3->fromSpherToCart(),INTERP_KERNEL::Exception);
967 CPPUNIT_ASSERT_THROW(dbl3->doublyContractedProduct(),INTERP_KERNEL::Exception);
968 CPPUNIT_ASSERT_THROW(dbl3->determinant(),INTERP_KERNEL::Exception);
969 CPPUNIT_ASSERT_THROW(dbl3->eigenValues(),INTERP_KERNEL::Exception);
970 CPPUNIT_ASSERT_THROW(dbl3->eigenVectors(),INTERP_KERNEL::Exception);
971 CPPUNIT_ASSERT_THROW(dbl3->inverse(),INTERP_KERNEL::Exception);
972 CPPUNIT_ASSERT_THROW(dbl3->trace(),INTERP_KERNEL::Exception);
973 CPPUNIT_ASSERT_THROW(dbl3->deviator(),INTERP_KERNEL::Exception);
975 dbl3->setIJ(5,1,12.);
976 CPPUNIT_ASSERT(dbl3->getMaxValueInArray()==12.);
977 CPPUNIT_ASSERT(dbl3->getMinValueInArray()==11.);
979 db->fillWithValue(100); //bad Ids
980 CPPUNIT_ASSERT_THROW(dbl3->setPartOfValuesAdv(dbl2,db),INTERP_KERNEL::Exception);
981 db->fillWithValue(-1); //bad Ids
982 CPPUNIT_ASSERT_THROW(dbl3->setPartOfValuesAdv(dbl2,db),INTERP_KERNEL::Exception);
983 db->fillWithValue(6); //bad Ids for dbl3
984 CPPUNIT_ASSERT_THROW(dbl3->setPartOfValuesAdv(dbl2,db),INTERP_KERNEL::Exception);
986 DataArrayDouble::SetArrayIn(dbl,dbl3); //dbl->dbl3 memLeaks?
987 dbl3->checkNoNullValues();
989 CPPUNIT_ASSERT_THROW(dbl3->checkNoNullValues(),INTERP_KERNEL::Exception);
990 CPPUNIT_ASSERT_THROW(dbl3->applyInv(1.),INTERP_KERNEL::Exception); //div by zero
991 CPPUNIT_ASSERT_THROW(dbl2->getIdsInRange(1.,2.),INTERP_KERNEL::Exception);
992 std::vector<const DataArrayDouble *> a(0); //input list must be NON EMPTY
993 CPPUNIT_ASSERT_THROW(DataArrayDouble::Aggregate(a),INTERP_KERNEL::Exception);
994 CPPUNIT_ASSERT_THROW(DataArrayDouble::Meld(a),INTERP_KERNEL::Exception);
997 a.push_back(dbl); //Nb of components mismatch
998 CPPUNIT_ASSERT_THROW(DataArrayDouble::Aggregate(a),INTERP_KERNEL::Exception);
1000 CPPUNIT_ASSERT_THROW(DataArrayDouble::Dot(dbl2,dbl),INTERP_KERNEL::Exception);
1002 CPPUNIT_ASSERT_THROW(DataArrayDouble::CrossProduct(dbl2,dbl),INTERP_KERNEL::Exception); //Nb of components mismatch
1003 CPPUNIT_ASSERT_THROW(DataArrayDouble::CrossProduct(dbl2,dbl2),INTERP_KERNEL::Exception); //Nb of components must be equal to 3
1004 DataArrayDouble *dbl4=DataArrayDouble::New();
1006 DataArrayDouble *dbl5=DataArrayDouble::New();
1008 CPPUNIT_ASSERT_THROW(DataArrayDouble::CrossProduct(dbl4,dbl5),INTERP_KERNEL::Exception); //Nb of tuples mismatch
1010 a[0]=dbl4; //Nb of tuple mismatch
1011 a[1]=dbl5; //Nb of tuple mismatch
1012 CPPUNIT_ASSERT_THROW(DataArrayDouble::Meld(a),INTERP_KERNEL::Exception);
1013 CPPUNIT_ASSERT_THROW(DataArrayDouble::Dot(dbl4,dbl5),INTERP_KERNEL::Exception);
1026 void MEDCouplingBasicsTest3::testDAIGetIdsEqual1()
1028 const int tab1[7]={5,-2,-4,-2,3,2,-2};
1029 DataArrayInt *da=DataArrayInt::New();
1031 std::copy(tab1,tab1+7,da->getPointer());
1032 DataArrayInt *da2=da->getIdsEqual(-2);
1033 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfTuples());
1034 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
1035 const int expected1[3]={1,3,6};
1036 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,da2->getConstPointer()));
1041 void MEDCouplingBasicsTest3::testDAIGetIdsEqualList1()
1043 const int tab1[7]={5,-2,-4,-2,3,2,-2};
1044 DataArrayInt *da=DataArrayInt::New();
1046 std::copy(tab1,tab1+7,da->getPointer());
1047 const int tab2[3]={3,-2,0};
1048 std::vector<int> tab2V(tab2,tab2+3);
1049 DataArrayInt *da2=da->getIdsEqualList(&tab2V[0],&tab2V[0]+tab2V.size());
1050 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfTuples());
1051 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
1052 const int expected1[4]={1,3,4,6};
1053 CPPUNIT_ASSERT(std::equal(expected1,expected1+4,da2->getConstPointer()));
1058 void MEDCouplingBasicsTest3::testDAFromNoInterlace1()
1060 const int tab1[15]={1,11,21,31,41,2,12,22,32,42,3,13,23,33,43};
1061 DataArrayInt *da=DataArrayInt::New();
1063 std::copy(tab1,tab1+15,da->getPointer());
1064 DataArrayInt *da2=da->fromNoInterlace();
1065 const int expected1[15]={1,2,3,11,12,13,21,22,23,31,32,33,41,42,43};
1066 CPPUNIT_ASSERT_EQUAL(5,da2->getNumberOfTuples());
1067 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1068 CPPUNIT_ASSERT(std::equal(expected1,expected1+15,da2->getConstPointer()));
1069 DataArrayDouble *da3=da->convertToDblArr();
1070 DataArrayDouble *da4=da3->fromNoInterlace();
1071 CPPUNIT_ASSERT_EQUAL(5,da4->getNumberOfTuples());
1072 CPPUNIT_ASSERT_EQUAL(3,da4->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1073 for(int i=0;i<15;i++)
1074 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)expected1[i],da4->getIJ(0,i),1e-14);
1081 void MEDCouplingBasicsTest3::testDAToNoInterlace1()
1083 const int tab1[15]={1,2,3,11,12,13,21,22,23,31,32,33,41,42,43};
1084 DataArrayInt *da=DataArrayInt::New();
1086 std::copy(tab1,tab1+15,da->getPointer());
1087 DataArrayInt *da2=da->toNoInterlace();
1088 const int expected1[15]={1,11,21,31,41,2,12,22,32,42,3,13,23,33,43};
1089 CPPUNIT_ASSERT_EQUAL(5,da2->getNumberOfTuples());
1090 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1091 CPPUNIT_ASSERT(std::equal(expected1,expected1+15,da2->getConstPointer()));
1092 DataArrayDouble *da3=da->convertToDblArr();
1093 DataArrayDouble *da4=da3->toNoInterlace();
1094 CPPUNIT_ASSERT_EQUAL(5,da4->getNumberOfTuples());
1095 CPPUNIT_ASSERT_EQUAL(3,da4->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1096 for(int i=0;i<15;i++)
1097 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)expected1[i],da4->getIJ(0,i),1e-14);
1104 void MEDCouplingBasicsTest3::testDAIsUniform1()
1106 const int tab1[5]={1,1,1,1,1};
1107 DataArrayInt *da=DataArrayInt::New();
1109 std::copy(tab1,tab1+5,da->getPointer());
1110 CPPUNIT_ASSERT(da->isUniform(1));
1112 CPPUNIT_ASSERT(!da->isUniform(1));
1114 CPPUNIT_ASSERT(da->isUniform(1));
1115 DataArrayDouble *da2=da->convertToDblArr();
1116 CPPUNIT_ASSERT(da2->isUniform(1.,1e-12));
1117 da2->setIJ(1,0,1.+1.e-13);
1118 CPPUNIT_ASSERT(da2->isUniform(1.,1e-12));
1119 da2->setIJ(1,0,1.+1.e-11);
1120 CPPUNIT_ASSERT(!da2->isUniform(1.,1e-12));
1125 void MEDCouplingBasicsTest3::testDADFromPolarToCart1()
1127 const double tab1[4]={2.,0.2,2.5,0.7};
1128 DataArrayDouble *da=DataArrayDouble::New();
1130 std::copy(tab1,tab1+4,da->getPointer());
1131 DataArrayDouble *da2=da->fromPolarToCart();
1132 const double expected1[4]={1.9601331556824833,0.39733866159012243, 1.9121054682112213,1.6105442180942275};
1133 for(int i=0;i<4;i++)
1134 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-13);
1139 void MEDCouplingBasicsTest3::testDADFromCylToCart1()
1141 const double tab1[6]={2.,0.2,4.,2.5,0.7,9.};
1142 DataArrayDouble *da=DataArrayDouble::New();
1144 std::copy(tab1,tab1+6,da->getPointer());
1145 DataArrayDouble *da2=da->fromCylToCart();
1146 const double expected1[6]={1.9601331556824833,0.39733866159012243,4., 1.9121054682112213,1.6105442180942275,9.};
1147 for(int i=0;i<6;i++)
1148 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-13);
1153 void MEDCouplingBasicsTest3::testDADFromSpherToCart1()
1155 const double tab1[6]={2.,0.2,0.3,2.5,0.7,0.8};
1156 DataArrayDouble *da=DataArrayDouble::New();
1158 std::copy(tab1,tab1+6,da->getPointer());
1159 DataArrayDouble *da2=da->fromSpherToCart();
1160 const double expected1[6]={0.37959212195737485,0.11742160338765303,1.9601331556824833, 1.1220769624465328,1.1553337045129035,1.9121054682112213};
1161 for(int i=0;i<6;i++)
1162 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-13);
1167 void MEDCouplingBasicsTest3::testUnPolyze1()
1169 const int elts[8]={0,1,2,3,4,5,6,7};
1170 std::vector<int> eltsV(elts,elts+8);
1171 MEDCouplingUMesh *mesh=build3DTargetMesh_1();
1172 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1174 MEDCouplingUMesh *mesh2=build3DTargetMesh_1();
1175 mesh->checkCoherency();
1176 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1177 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1178 CPPUNIT_ASSERT(!mesh->isEqual(mesh2,1e-12));
1179 mesh->getNodalConnectivity()->setIJ(0,6,10);
1180 mesh->getNodalConnectivity()->setIJ(0,7,9);
1181 mesh->getNodalConnectivity()->setIJ(0,8,12);
1182 mesh->getNodalConnectivity()->setIJ(0,9,13);
1184 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1185 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1186 mesh->getNodalConnectivity()->setIJ(0,6,12);
1187 mesh->getNodalConnectivity()->setIJ(0,7,13);
1188 mesh->getNodalConnectivity()->setIJ(0,8,10);
1189 mesh->getNodalConnectivity()->setIJ(0,9,9);
1191 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1192 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1193 mesh->getNodalConnectivity()->setIJ(0,6,12);
1194 mesh->getNodalConnectivity()->setIJ(0,7,10);
1195 mesh->getNodalConnectivity()->setIJ(0,8,13);
1196 mesh->getNodalConnectivity()->setIJ(0,9,9);
1198 CPPUNIT_ASSERT(!mesh->isEqual(mesh2,1e-12));
1202 mesh=build2DTargetMesh_1();
1203 mesh2=build2DTargetMesh_1();
1205 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1206 CPPUNIT_ASSERT(!mesh->isEqual(mesh2,1e-12));
1208 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1213 void MEDCouplingBasicsTest3::testConvertDegeneratedCells1()
1215 MEDCouplingUMesh *mesh=build3DTargetMesh_1();
1216 int conn[32]={0,1,3,3,9,10,12,12, 0,1,3,4,9,9,9,9, 1,1,1,1,10,12,9,10, 10,11,12,9,1,1,1,1};
1217 mesh->allocateCells(4);
1218 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn);
1219 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+8);
1220 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+16);
1221 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+24);
1222 mesh->finishInsertingCells();
1223 mesh->checkCoherency();
1224 CPPUNIT_ASSERT_EQUAL(4,mesh->getNumberOfCells());
1225 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(0));
1226 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(1));
1227 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(2));
1228 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(3));
1229 MEDCouplingFieldDouble *f1=mesh->getMeasureField(true);
1230 mesh->convertDegeneratedCells();
1231 mesh->checkCoherency();
1232 MEDCouplingFieldDouble *f2=mesh->getMeasureField(true);
1233 CPPUNIT_ASSERT_EQUAL(4,mesh->getNumberOfCells());
1234 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_PENTA6,mesh->getTypeOfCell(0));
1235 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_PYRA5,mesh->getTypeOfCell(1));
1236 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TETRA4,mesh->getTypeOfCell(2));
1237 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_PYRA5,mesh->getTypeOfCell(3));
1238 for(int i=0;i<4;i++)
1239 CPPUNIT_ASSERT_DOUBLES_EQUAL(f1->getArray()->getIJ(0,i),f2->getArray()->getIJ(0,i),1e-5);
1245 void MEDCouplingBasicsTest3::testGetNodeIdsNearPoints1()
1247 MEDCouplingUMesh *mesh=build2DTargetMesh_1();
1248 DataArrayDouble *coords=mesh->getCoords();
1249 DataArrayDouble *tmp=DataArrayDouble::New();
1251 const double vals[6]={0.2,0.2,0.1,0.2,0.2,0.2};
1252 std::copy(vals,vals+6,tmp->getPointer());
1253 DataArrayDouble *tmp2=DataArrayDouble::Aggregate(coords,tmp);
1255 mesh->setCoords(tmp2);
1257 const double pts[6]={0.2,0.2,0.1,0.3,-0.3,0.7};
1258 DataArrayInt *c=mesh->getNodeIdsNearPoint(pts,1e-7);
1259 CPPUNIT_ASSERT_EQUAL(3,c->getNumberOfTuples());
1260 CPPUNIT_ASSERT_EQUAL(4,c->getIJ(0,0));
1261 CPPUNIT_ASSERT_EQUAL(9,c->getIJ(1,0));
1262 CPPUNIT_ASSERT_EQUAL(11,c->getIJ(2,0));
1265 mesh->getNodeIdsNearPoints(pts,3,1e-7,c,cI);
1266 CPPUNIT_ASSERT_EQUAL(4,cI->getNumberOfTuples());
1267 CPPUNIT_ASSERT_EQUAL(4,c->getNumberOfTuples());
1268 CPPUNIT_ASSERT_EQUAL(4,c->getIJ(0,0));
1269 CPPUNIT_ASSERT_EQUAL(9,c->getIJ(1,0));
1270 CPPUNIT_ASSERT_EQUAL(11,c->getIJ(2,0));
1271 CPPUNIT_ASSERT_EQUAL(6,c->getIJ(3,0));
1272 CPPUNIT_ASSERT_EQUAL(0,cI->getIJ(0,0));
1273 CPPUNIT_ASSERT_EQUAL(3,cI->getIJ(1,0));
1274 CPPUNIT_ASSERT_EQUAL(3,cI->getIJ(2,0));
1275 CPPUNIT_ASSERT_EQUAL(4,cI->getIJ(3,0));
1281 void MEDCouplingBasicsTest3::testFieldCopyTinyAttrFrom1()
1283 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1285 f1->setTimeTolerance(1.e-5);
1286 f1->setDescription("f1Desc");
1287 f1->setTime(1.23,4,5);
1288 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1290 f2->setDescription("f2Desc");
1291 f2->setTime(6.78,9,10);
1292 f2->setTimeTolerance(4.556e-12);
1295 f1->copyTinyAttrFrom(f2);
1296 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1297 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.78,f1->getTime(dt,it),1e-12);
1298 CPPUNIT_ASSERT_EQUAL(9,dt);
1299 CPPUNIT_ASSERT_EQUAL(10,it);
1300 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1301 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1305 f1=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
1307 f1->setTimeTolerance(1.e-5);
1308 f1->setDescription("f1Desc");
1309 f2=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
1311 f2->setDescription("f2Desc");
1312 f2->setTimeTolerance(4.556e-12);
1314 f1->copyTinyAttrFrom(f2);
1315 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1316 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1317 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1321 f1=MEDCouplingFieldDouble::New(ON_CELLS,CONST_ON_TIME_INTERVAL);
1323 f1->setTimeTolerance(1.e-5);
1324 f1->setDescription("f1Desc");
1325 f1->setTime(1.23,4,5);
1326 f1->setEndTime(5.43,2,1);
1327 f2=MEDCouplingFieldDouble::New(ON_CELLS,CONST_ON_TIME_INTERVAL);
1329 f2->setDescription("f2Desc");
1330 f2->setTimeTolerance(4.556e-12);
1331 f2->setTime(6.78,9,10);
1332 f2->setEndTime(10.98,7,6);
1334 f1->copyTinyAttrFrom(f2);
1335 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1336 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1337 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1338 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.78,f1->getTime(dt,it),1e-12);
1339 CPPUNIT_ASSERT_EQUAL(9,dt);
1340 CPPUNIT_ASSERT_EQUAL(10,it);
1341 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.98,f1->getEndTime(dt,it),1e-12);
1342 CPPUNIT_ASSERT_EQUAL(7,dt);
1343 CPPUNIT_ASSERT_EQUAL(6,it);
1347 f1=MEDCouplingFieldDouble::New(ON_CELLS,LINEAR_TIME);
1349 f1->setTimeTolerance(1.e-5);
1350 f1->setDescription("f1Desc");
1351 f1->setTime(1.23,4,5);
1352 f1->setEndTime(5.43,2,1);
1353 f2=MEDCouplingFieldDouble::New(ON_CELLS,LINEAR_TIME);
1355 f2->setDescription("f2Desc");
1356 f2->setTimeTolerance(4.556e-12);
1357 f2->setTime(6.78,9,10);
1358 f2->setEndTime(10.98,7,6);
1360 f1->copyTinyAttrFrom(f2);
1361 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1362 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1363 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1364 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.78,f1->getTime(dt,it),1e-12);
1365 CPPUNIT_ASSERT_EQUAL(9,dt);
1366 CPPUNIT_ASSERT_EQUAL(10,it);
1367 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.98,f1->getEndTime(dt,it),1e-12);
1368 CPPUNIT_ASSERT_EQUAL(7,dt);
1369 CPPUNIT_ASSERT_EQUAL(6,it);
1375 * 1D -> 2D extrusion with rotation
1377 void MEDCouplingBasicsTest3::testExtrudedMesh5()
1379 const double coo1[4]={0.,1.,2.,3.5};
1380 DataArrayDouble *a=DataArrayDouble::New();
1382 std::copy(coo1,coo1+4,a->getPointer());
1383 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
1384 b->setCoordsAt(0,a);
1385 MEDCouplingUMesh *c=b->buildUnstructured();
1386 CPPUNIT_ASSERT_EQUAL(1,c->getSpaceDimension());
1387 c->changeSpaceDimension(2);
1389 DataArrayDouble *d=DataArrayDouble::New();
1392 MEDCouplingCMesh *ee=MEDCouplingCMesh::New();
1393 ee->setCoordsAt(0,d);
1394 MEDCouplingUMesh *f=ee->buildUnstructured();
1395 DataArrayDouble *g=f->getCoords()->applyFunc(2,"3.5*IVec+x/6*3.14159265359*JVec");
1396 CPPUNIT_ASSERT_THROW(f->getCoords()->applyFunc(2,"3.5*IVec+x/6*3.14159265359*KVec"),INTERP_KERNEL::Exception); // KVec refers to component #2 and there is only 2 components !
1397 DataArrayDouble *h=g->fromPolarToCart();
1399 MEDCouplingUMesh *i=c->buildExtrudedMesh(f,1);
1400 CPPUNIT_ASSERT_EQUAL(52,i->getNumberOfNodes());
1403 DataArrayInt *tmp=i->mergeNodes(1e-9,tmp2,tmp3);
1404 CPPUNIT_ASSERT(tmp2);
1405 CPPUNIT_ASSERT_EQUAL(37,tmp3);
1407 i->convertDegeneratedCells();
1408 i->checkCoherency();
1409 CPPUNIT_ASSERT_EQUAL(36,i->getNumberOfCells());
1410 CPPUNIT_ASSERT_EQUAL(37,i->getNumberOfNodes());
1411 CPPUNIT_ASSERT_EQUAL(12,i->getNumberOfCellsWithType(INTERP_KERNEL::NORM_TRI3));
1412 CPPUNIT_ASSERT_EQUAL(24,i->getNumberOfCellsWithType(INTERP_KERNEL::NORM_QUAD4));
1413 const double expected1[3]={0.25,0.75,2.0625};
1414 MEDCouplingFieldDouble *j=i->getMeasureField(true);
1415 for(int ii=0;ii<12;ii++)
1416 for(int k=0;k<3;k++)
1417 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[k],j->getIJ(0,ii*3+k),1e-10);
1418 const double expected2[72]={0.62200846792814113, 0.16666666666681595, 1.4513530918323276, 0.38888888888923495, 2.6293994326053212, 0.7045454545460802, 0.45534180126145435, 0.45534180126150181, 1.0624642029433926, 1.0624642029435025, 1.9248539780597826, 1.9248539780599816, 0.16666666666661334, 0.62200846792815856, 0.38888888888876294, 1.4513530918323678, 0.70454545454522521, 2.629399432605394, -0.16666666666674007, 0.62200846792812436, -0.38888888888906142, 1.4513530918322881, -0.70454545454576778, 2.6293994326052488, -0.45534180126154766, 0.45534180126140844, -1.0624642029436118, 1.0624642029432834, -1.9248539780601803, 1.9248539780595841, -0.62200846792817499, 0.1666666666665495, -1.451353091832408, 0.388888888888613, -2.6293994326054668, 0.70454545454495332, -0.62200846792810593, -0.16666666666680507, -1.451353091832247, -0.38888888888921297, -2.6293994326051746, -0.70454545454604123, -0.45534180126135926, -0.45534180126159562, -1.0624642029431723, -1.0624642029437235, -1.9248539780593836, -1.9248539780603811, -0.1666666666664828, -0.62200846792819242, -0.38888888888846079, -1.4513530918324489, -0.70454545454467987, -2.6293994326055397, 0.16666666666687083, -0.62200846792808862, 0.38888888888936374, -1.4513530918322073, 0.70454545454631357, -2.6293994326051022, 0.45534180126164348, -0.45534180126131207, 1.0624642029438327, -1.0624642029430627, 1.9248539780605791, -1.9248539780591853, 0.62200846792821063, -0.16666666666641802, 1.4513530918324888, -0.38888888888831086, 2.6293994326056125, -0.70454545454440853};
1419 DataArrayDouble *m=i->getBarycenterAndOwner();
1420 for(int ii=0;ii<72;ii++)
1421 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[ii],m->getIJ(0,ii),1e-10);
1437 * 1D -> 2D extrusion without rotation
1439 void MEDCouplingBasicsTest3::testExtrudedMesh6()
1441 const double coo1[4]={0.,1.,2.,3.5};
1442 DataArrayDouble *a=DataArrayDouble::New();
1444 std::copy(coo1,coo1+4,a->getPointer());
1445 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
1446 b->setCoordsAt(0,a);
1447 MEDCouplingUMesh *c=b->buildUnstructured();
1448 CPPUNIT_ASSERT_EQUAL(1,c->getSpaceDimension());
1449 c->changeSpaceDimension(2);
1451 DataArrayDouble *d=DataArrayDouble::New();
1454 MEDCouplingCMesh *e=MEDCouplingCMesh::New();
1455 e->setCoordsAt(0,d);
1456 MEDCouplingUMesh *f=e->buildUnstructured();
1457 DataArrayDouble *d2=f->getCoords()->applyFunc("x*x/2");
1459 f->changeSpaceDimension(2);
1461 const double center[2]={0.,0.};
1462 f->rotate(center,0,M_PI/3);
1463 MEDCouplingUMesh *g=c->buildExtrudedMesh(f,0);
1464 g->checkCoherency();
1465 const double expected1[]={ 0.4330127018922193, 0.4330127018922193, 0.649519052838329, 1.2990381056766578, 1.299038105676658, 1.948557158514987, 2.1650635094610955, 2.1650635094610964, 3.2475952641916446, 3.031088913245533, 3.0310889132455352, 4.546633369868303 };
1466 MEDCouplingFieldDouble *f1=g->getMeasureField(true);
1467 for(int i=0;i<12;i++)
1468 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getIJ(0,i),1e-12);
1470 const double expected2[]={0.625, 0.21650635094610962, 1.625, 0.21650635094610959, 2.8750000000000004, 0.21650635094610965, 1.1250000000000002, 1.0825317547305482, 2.125, 1.0825317547305482, 3.3750000000000004, 1.0825317547305484, 2.125, 2.8145825622994254, 3.125, 2.8145825622994254, 4.375, 2.8145825622994254, 3.6250000000000009, 5.4126587736527414, 4.625, 5.4126587736527414, 5.875, 5.4126587736527414};
1471 DataArrayDouble *f2=g->getBarycenterAndOwner();
1472 for(int i=0;i<24;i++)
1473 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f2->getIJ(0,i),1e-12);
1488 * 2D -> 3D extrusion with rotation
1490 void MEDCouplingBasicsTest3::testExtrudedMesh7()
1492 const double coo1[4]={0.,1.,2.,3.5};
1493 DataArrayDouble *a=DataArrayDouble::New();
1495 std::copy(coo1,coo1+4,a->getPointer());
1496 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
1497 b->setCoordsAt(0,a);
1498 MEDCouplingUMesh *c=b->buildUnstructured();
1499 CPPUNIT_ASSERT_EQUAL(1,c->getSpaceDimension());
1500 c->changeSpaceDimension(2);
1502 DataArrayDouble *d=DataArrayDouble::New();
1505 MEDCouplingCMesh *e=MEDCouplingCMesh::New();
1506 e->setCoordsAt(0,d);
1507 MEDCouplingUMesh *f=e->buildUnstructured();
1508 DataArrayDouble *g=f->getCoords()->applyFunc(2,"3.5*IVec+x/6*3.14159265359*JVec");
1509 DataArrayDouble *h=g->fromPolarToCart();
1511 MEDCouplingUMesh *i=c->buildExtrudedMesh(f,1);
1512 CPPUNIT_ASSERT_EQUAL(52,i->getNumberOfNodes());
1515 DataArrayInt *tmp=i->mergeNodes(1e-9,tmp2,tmp3);
1516 CPPUNIT_ASSERT(tmp2);
1517 CPPUNIT_ASSERT_EQUAL(37,tmp3);
1519 i->convertDegeneratedCells();
1520 const double vec1[3]={10.,0.,0.};
1522 DataArrayDouble *g2=h->applyFunc(3,"13.5/3.5*x*IVec+0*JVec+13.5/3.5*y*KVec");
1524 i->changeSpaceDimension(3);
1525 MEDCouplingUMesh *i3=i->buildExtrudedMesh(f,1);
1526 MEDCouplingFieldDouble *f2=i3->getMeasureField(true);
1527 tmp=i->mergeNodes(1e-9,tmp2,tmp3);
1528 CPPUNIT_ASSERT(tmp2);
1529 CPPUNIT_ASSERT_EQUAL(444,tmp3);
1531 const double expected1[36]={1.327751058489274, 4.2942574094314701, 13.024068164857139, 1.3069177251569044, 4.1484240761012954, 12.297505664866796, 1.270833333332571, 3.8958333333309674, 11.039062499993179, 1.2291666666659207, 3.6041666666644425, 9.585937499993932, 1.1930822748415895, 3.3515759238941376, 8.3274943351204556, 1.1722489415082769, 3.2057425905609289, 7.6009318351210622, 1.1722489415082862, 3.2057425905609884, 7.6009318351213713, 1.1930822748416161, 3.3515759238943001, 8.3274943351212727, 1.2291666666659564, 3.6041666666646734, 9.5859374999950777, 1.2708333333326081, 3.8958333333311868, 11.039062499994293, 1.3069177251569224, 4.1484240761014384, 12.297505664867627, 1.3277510584902354, 4.2942574094346071, 13.024068164866796};
1533 for(int ii=0;ii<12;ii++)
1534 for(int jj=0;jj<36;jj++,kk++)
1535 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[jj],f2->getIJ(0,kk),1e-9);
1551 void MEDCouplingBasicsTest3::testSimplexize1()
1553 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1554 std::vector<int> v(1);
1556 m->convertToPolyTypes(&v[0],&v[0]+v.size());
1557 DataArrayInt *da=m->simplexize(0);
1558 CPPUNIT_ASSERT_EQUAL(7,da->getNumberOfTuples());
1559 CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1560 const int expected2[7]={0,0,1,2,3,4,4};
1561 for(int i=0;i<7;i++)
1562 CPPUNIT_ASSERT_EQUAL(expected2[i],da->getIJ(i,0));
1563 m->checkCoherency();
1564 CPPUNIT_ASSERT_EQUAL(7,m->getNumberOfCells());
1565 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(0));
1566 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(1));
1567 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(2));
1568 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(3));
1569 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,m->getTypeOfCell(4));
1570 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(5));
1571 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(6));
1572 const double expected1[7]={0.125,0.125,0.125,0.125,0.25,0.125,0.125};
1573 MEDCouplingFieldDouble *f=m->getMeasureField(false);
1574 for(int i=0;i<7;i++)
1575 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i]*sqrt(2.),f->getIJ(i,0),1e-10);
1576 std::set<INTERP_KERNEL::NormalizedCellType> types=m->getAllGeoTypes();
1577 CPPUNIT_ASSERT_EQUAL(2,(int)types.size());
1578 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*(types.begin()));
1579 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,*(++(types.begin())));
1584 m=build3DSurfTargetMesh_1();
1586 m->convertToPolyTypes(&v[0],&v[0]+v.size());
1587 da=m->simplexize(1);
1588 CPPUNIT_ASSERT_EQUAL(7,da->getNumberOfTuples());
1589 CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1590 for(int i=0;i<7;i++)
1591 CPPUNIT_ASSERT_EQUAL(expected2[i],da->getIJ(i,0));
1592 m->checkCoherency();
1593 types=m->getAllGeoTypes();
1594 CPPUNIT_ASSERT_EQUAL(2,(int)types.size());
1595 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*(types.begin()));
1596 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,*(++(types.begin())));
1597 CPPUNIT_ASSERT_EQUAL(7,m->getNumberOfCells());
1598 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(0));
1599 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(1));
1600 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(2));
1601 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(3));
1602 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,m->getTypeOfCell(4));
1603 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(5));
1604 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(6));
1605 f=m->getMeasureField(false);
1606 for(int i=0;i<7;i++)
1607 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i]*sqrt(2.),f->getIJ(i,0),1e-10);
1613 void MEDCouplingBasicsTest3::testSimplexize2()
1615 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1616 std::vector<int> v(1);
1618 m->convertToPolyTypes(&v[0],&v[0]+v.size());
1619 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1621 DataArrayDouble *arr=DataArrayDouble::New();
1622 const double arr1[10]={10.,110.,20.,120.,30.,130.,40.,140.,50.,150.};
1624 std::copy(arr1,arr1+10,arr->getPointer());
1628 f1->checkCoherency();
1629 CPPUNIT_ASSERT(f1->simplexize(0));
1630 f1->checkCoherency();
1631 const double expected1[14]={10.,110.,10.,110.,20.,120.,30.,130.,40.,140.,50.,150.,50.,150.};
1632 for(int i=0;i<14;i++)
1633 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getIJ(0,i),1e-10);
1634 CPPUNIT_ASSERT(!f1->simplexize(0));
1635 for(int i=0;i<14;i++)
1636 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getIJ(0,i),1e-10);
1642 void MEDCouplingBasicsTest3::testDAMeld1()
1644 DataArrayDouble *da1=DataArrayDouble::New();
1646 DataArrayDouble *da2=DataArrayDouble::New();
1649 da1->fillWithValue(7.);
1651 DataArrayDouble *da3=da2->applyFunc(3,"10*x*IVec+100*x*JVec+1000*x*KVec");
1653 da1->setInfoOnComponent(0,"c0da1");
1654 da1->setInfoOnComponent(1,"c1da1");
1655 da3->setInfoOnComponent(0,"c0da3");
1656 da3->setInfoOnComponent(1,"c1da3");
1657 da3->setInfoOnComponent(2,"c2da3");
1659 DataArrayDouble *da1C=da1->deepCpy();
1661 CPPUNIT_ASSERT_EQUAL(5,da1->getNumberOfComponents());
1662 CPPUNIT_ASSERT_EQUAL(7,da1->getNumberOfTuples());
1663 CPPUNIT_ASSERT(da1->getInfoOnComponent(0)=="c0da1");
1664 CPPUNIT_ASSERT(da1->getInfoOnComponent(1)=="c1da1");
1665 CPPUNIT_ASSERT(da1->getInfoOnComponent(2)=="c0da3");
1666 CPPUNIT_ASSERT(da1->getInfoOnComponent(3)=="c1da3");
1667 CPPUNIT_ASSERT(da1->getInfoOnComponent(4)=="c2da3");
1669 const double expected1[35]={7.,7.,0.,0.,0., 7.,7.,10.,100.,1000., 7.,7.,20.,200.,2000., 7.,7.,30.,300.,3000., 7.,7.,40.,400.,4000.,7.,7.,50.,500.,5000.,7.,7.,60.,600.,6000.};
1670 for(int i=0;i<35;i++)
1671 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da1->getIJ(0,i),1e-10);
1673 DataArrayInt *dai1=da1C->convertToIntArr();
1674 DataArrayInt *dai3=da3->convertToIntArr();
1675 dai1->meldWith(dai3);
1676 CPPUNIT_ASSERT_EQUAL(5,dai1->getNumberOfComponents());
1677 CPPUNIT_ASSERT_EQUAL(7,dai1->getNumberOfTuples());
1678 CPPUNIT_ASSERT(dai1->getInfoOnComponent(0)=="c0da1");
1679 CPPUNIT_ASSERT(dai1->getInfoOnComponent(1)=="c1da1");
1680 CPPUNIT_ASSERT(dai1->getInfoOnComponent(2)=="c0da3");
1681 CPPUNIT_ASSERT(dai1->getInfoOnComponent(3)=="c1da3");
1682 CPPUNIT_ASSERT(dai1->getInfoOnComponent(4)=="c2da3");
1683 for(int i=0;i<35;i++)
1684 CPPUNIT_ASSERT_EQUAL((int)expected1[i],dai1->getIJ(0,i));
1685 // test of static method DataArrayDouble::meld
1686 DataArrayDouble *da4=DataArrayDouble::Meld(da1C,da3);
1687 CPPUNIT_ASSERT_EQUAL(5,da4->getNumberOfComponents());
1688 CPPUNIT_ASSERT_EQUAL(7,da4->getNumberOfTuples());
1689 CPPUNIT_ASSERT(da4->getInfoOnComponent(0)=="c0da1");
1690 CPPUNIT_ASSERT(da4->getInfoOnComponent(1)=="c1da1");
1691 CPPUNIT_ASSERT(da4->getInfoOnComponent(2)=="c0da3");
1692 CPPUNIT_ASSERT(da4->getInfoOnComponent(3)=="c1da3");
1693 CPPUNIT_ASSERT(da4->getInfoOnComponent(4)=="c2da3");
1694 for(int i=0;i<35;i++)
1695 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da4->getIJ(0,i),1e-10);
1696 // test of static method DataArrayInt::meld
1698 dai1=da1C->convertToIntArr();
1699 DataArrayInt *dai4=DataArrayInt::Meld(dai1,dai3);
1700 CPPUNIT_ASSERT_EQUAL(5,dai4->getNumberOfComponents());
1701 CPPUNIT_ASSERT_EQUAL(7,dai4->getNumberOfTuples());
1702 CPPUNIT_ASSERT(dai4->getInfoOnComponent(0)=="c0da1");
1703 CPPUNIT_ASSERT(dai4->getInfoOnComponent(1)=="c1da1");
1704 CPPUNIT_ASSERT(dai4->getInfoOnComponent(2)=="c0da3");
1705 CPPUNIT_ASSERT(dai4->getInfoOnComponent(3)=="c1da3");
1706 CPPUNIT_ASSERT(dai4->getInfoOnComponent(4)=="c2da3");
1707 for(int i=0;i<35;i++)
1708 CPPUNIT_ASSERT_EQUAL((int)expected1[i],dai4->getIJ(0,i));
1720 void MEDCouplingBasicsTest3::testFieldMeld1()
1722 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1723 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1725 DataArrayDouble *da1=DataArrayDouble::New();
1726 const double arr1[5]={12.,23.,34.,45.,56.};
1728 std::copy(arr1,arr1+5,da1->getPointer());
1729 da1->setInfoOnComponent(0,"aaa");
1731 f1->setTime(3.4,2,1);
1732 f1->checkCoherency();
1734 MEDCouplingFieldDouble *f2=f1->deepCpy();
1735 f2->setMesh(f1->getMesh());
1736 f2->checkCoherency();
1737 f2->changeNbOfComponents(2,5.);
1739 f2->getArray()->setInfoOnComponent(0,"bbb");
1740 f2->getArray()->setInfoOnComponent(1,"ccc");
1741 f2->checkCoherency();
1743 MEDCouplingFieldDouble *f3=MEDCouplingFieldDouble::MeldFields(f2,f1);
1744 f3->checkCoherency();
1745 CPPUNIT_ASSERT_EQUAL(5,f3->getNumberOfTuples());
1746 CPPUNIT_ASSERT_EQUAL(3,f3->getNumberOfComponents());
1747 CPPUNIT_ASSERT(f3->getArray()->getInfoOnComponent(0)=="bbb");
1748 CPPUNIT_ASSERT(f3->getArray()->getInfoOnComponent(1)=="ccc");
1749 CPPUNIT_ASSERT(f3->getArray()->getInfoOnComponent(2)=="aaa");
1750 const double expected1[15]={5.,5.,12.,5.,5.,23.,5.,5.,34.,5.,5.,45.,5.,5.,56.};
1751 for(int i=0;i<15;i++)
1752 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f3->getIJ(0,i),1e-12);
1754 double time=f3->getTime(dt,it);
1755 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.4,time,1e-14);
1756 CPPUNIT_ASSERT_EQUAL(2,dt);
1757 CPPUNIT_ASSERT_EQUAL(1,it);
1759 MEDCouplingFieldDouble *f4=f2->buildNewTimeReprFromThis(NO_TIME,false);
1760 MEDCouplingFieldDouble *f5=f1->buildNewTimeReprFromThis(NO_TIME,false);
1761 MEDCouplingFieldDouble *f6=MEDCouplingFieldDouble::MeldFields(f4,f5);
1762 f6->checkCoherency();
1763 CPPUNIT_ASSERT_EQUAL(5,f6->getNumberOfTuples());
1764 CPPUNIT_ASSERT_EQUAL(3,f6->getNumberOfComponents());
1765 CPPUNIT_ASSERT(f6->getArray()->getInfoOnComponent(0)=="bbb");
1766 CPPUNIT_ASSERT(f6->getArray()->getInfoOnComponent(1)=="ccc");
1767 CPPUNIT_ASSERT(f6->getArray()->getInfoOnComponent(2)=="aaa");
1768 for(int i=0;i<15;i++)
1769 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f6->getIJ(0,i),1e-12);
1781 void MEDCouplingBasicsTest3::testMergeNodes2()
1783 MEDCouplingUMesh *m1=build2DTargetMesh_1();
1784 MEDCouplingUMesh *m2=build2DTargetMesh_1();
1785 const double vec[2]={0.002,0.};
1788 std::vector<const MEDCouplingUMesh *> tmp(2);
1791 MEDCouplingUMesh *m3=MEDCouplingUMesh::MergeUMeshes(tmp);
1794 DataArrayInt *da=m3->mergeNodes2(0.01,b,newNbOfNodes);
1795 CPPUNIT_ASSERT_EQUAL(9,m3->getNumberOfNodes());
1796 const double expected1[18]={-0.299,-0.3, 0.201,-0.3, 0.701,-0.3, -0.299,0.2, 0.201,0.2, 0.701,0.2, -0.299,0.7, 0.201,0.7, 0.701,0.7};
1797 for(int i=0;i<18;i++)
1798 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],m3->getCoords()->getIJ(0,i),1e-13);
1806 void MEDCouplingBasicsTest3::testMergeField2()
1808 MEDCouplingUMesh *m=build2DTargetMesh_1();
1809 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1811 DataArrayDouble *arr=DataArrayDouble::New();
1813 arr->fillWithValue(2.);
1816 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1818 arr=DataArrayDouble::New();
1820 arr->fillWithValue(5.);
1823 MEDCouplingFieldDouble *f3=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1825 arr=DataArrayDouble::New();
1827 arr->fillWithValue(7.);
1831 std::vector<const MEDCouplingFieldDouble *> tmp(3);
1832 tmp[0]=f1; tmp[1]=f2; tmp[2]=f3;
1833 MEDCouplingFieldDouble *f4=MEDCouplingFieldDouble::MergeFields(tmp);
1834 CPPUNIT_ASSERT_EQUAL(15,f4->getMesh()->getNumberOfCells());
1835 const double expected1[30]={2.,2.,2.,2.,2.,2.,2.,2.,2.,2., 5.,5.,5.,5.,5.,5.,5.,5.,5.,5., 7.,7.,7.,7.,7.,7.,7.,7.,7.,7.};
1836 for(int i=0;i<30;i++)
1837 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f4->getIJ(0,i),1.e-13);
1846 void MEDCouplingBasicsTest3::testDAIBuildComplement1()
1848 DataArrayInt *a=DataArrayInt::New();
1849 const int tab[4]={3,1,7,8};
1851 std::copy(tab,tab+4,a->getPointer());
1852 DataArrayInt *b=a->buildComplement(12);
1853 CPPUNIT_ASSERT_EQUAL(8,b->getNumberOfTuples());
1854 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1855 const int expected1[8]={0,2,4,5,6,9,10,11};
1856 for(int i=0;i<8;i++)
1857 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1862 void MEDCouplingBasicsTest3::testDAIBuildUnion1()
1864 DataArrayInt *a=DataArrayInt::New();
1865 const int tab1[4]={3,1,7,8};
1867 std::copy(tab1,tab1+4,a->getPointer());
1868 DataArrayInt *c=DataArrayInt::New();
1869 const int tab2[5]={5,3,0,18,8};
1871 std::copy(tab2,tab2+5,c->getPointer());
1872 DataArrayInt *b=a->buildUnion(c);
1873 CPPUNIT_ASSERT_EQUAL(7,b->getNumberOfTuples());
1874 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1875 const int expected1[7]={0,1,3,5,7,8,18};
1876 for(int i=0;i<7;i++)
1877 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1883 void MEDCouplingBasicsTest3::testDAIBuildIntersection1()
1885 DataArrayInt *a=DataArrayInt::New();
1886 const int tab1[4]={3,1,7,8};
1888 std::copy(tab1,tab1+4,a->getPointer());
1889 DataArrayInt *c=DataArrayInt::New();
1890 const int tab2[5]={5,3,0,18,8};
1892 std::copy(tab2,tab2+5,c->getPointer());
1893 DataArrayInt *b=a->buildIntersection(c);
1894 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfTuples());
1895 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1896 const int expected1[2]={3,8};
1897 for(int i=0;i<2;i++)
1898 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1904 void MEDCouplingBasicsTest3::testDAIDeltaShiftIndex1()
1906 DataArrayInt *a=DataArrayInt::New();
1907 const int tab[7]={1,3,6,7,7,9,15};
1909 std::copy(tab,tab+7,a->getPointer());
1910 DataArrayInt *b=a->deltaShiftIndex();
1911 CPPUNIT_ASSERT_EQUAL(6,b->getNumberOfTuples());
1912 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1913 const int expected1[6]={2,3,1,0,2,6};
1914 for(int i=0;i<6;i++)
1915 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1920 void MEDCouplingBasicsTest3::testDaDoubleSelectByTupleIdSafe1()
1922 DataArrayDouble *a=DataArrayDouble::New();
1924 a->setInfoOnComponent(0,"toto");
1925 a->setInfoOnComponent(1,"tata");
1926 const double arr1[14]={1.1,11.1,2.1,12.1,3.1,13.1,4.1,14.1,5.1,15.1,6.1,16.1,7.1,17.1};
1927 std::copy(arr1,arr1+14,a->getPointer());
1929 const int arr2[7]={4,2,0,6,5};
1930 DataArrayDouble *b=a->selectByTupleIdSafe(arr2,arr2+5);
1931 CPPUNIT_ASSERT_EQUAL(5,b->getNumberOfTuples());
1932 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
1933 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(0))=="toto");
1934 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(1))=="tata");
1935 const double expected1[10]={5.1,15.1,3.1,13.1,1.1,11.1,7.1,17.1,6.1,16.1};
1936 for(int i=0;i<10;i++)
1937 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
1938 const int arr4[5]={4,-1,0,6,5};
1939 CPPUNIT_ASSERT_THROW(a->selectByTupleIdSafe(arr4,arr4+5),INTERP_KERNEL::Exception);
1940 const int arr5[5]={4,2,0,6,7};
1941 CPPUNIT_ASSERT_THROW(a->selectByTupleIdSafe(arr5,arr5+5),INTERP_KERNEL::Exception);
1945 DataArrayInt *c=DataArrayInt::New();
1947 c->setInfoOnComponent(0,"toto");
1948 c->setInfoOnComponent(1,"tata");
1949 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
1950 std::copy(arr3,arr3+14,c->getPointer());
1951 DataArrayInt *d=c->selectByTupleIdSafe(arr2,arr2+5);
1952 CPPUNIT_ASSERT_EQUAL(5,d->getNumberOfTuples());
1953 CPPUNIT_ASSERT_EQUAL(2,d->getNumberOfComponents());
1954 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(0))=="toto");
1955 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(1))=="tata");
1956 const int expected2[10]={5,15,3,13,1,11,7,17,6,16};
1957 for(int i=0;i<10;i++)
1958 CPPUNIT_ASSERT_EQUAL(expected2[i],d->getIJ(0,i));
1959 CPPUNIT_ASSERT_THROW(c->selectByTupleIdSafe(arr4,arr4+5),INTERP_KERNEL::Exception);
1960 CPPUNIT_ASSERT_THROW(c->selectByTupleIdSafe(arr5,arr5+5),INTERP_KERNEL::Exception);
1965 void MEDCouplingBasicsTest3::testAreCellsIncludedIn1()
1967 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1968 const int pt[2]={1,3};
1969 MEDCouplingUMesh *m2=(MEDCouplingUMesh *)m->buildPartOfMySelf(pt,pt+2,true);
1971 CPPUNIT_ASSERT(m->areCellsIncludedIn(m2,0,tmp));
1972 CPPUNIT_ASSERT_EQUAL(2,tmp->getNumberOfTuples());
1973 CPPUNIT_ASSERT_EQUAL(1,tmp->getNumberOfComponents());
1974 CPPUNIT_ASSERT_EQUAL(pt[0],tmp->getIJ(0,0));
1975 CPPUNIT_ASSERT_EQUAL(pt[1],tmp->getIJ(0,1));
1977 CPPUNIT_ASSERT(!m2->areCellsIncludedIn(m,0,tmp));
1983 void MEDCouplingBasicsTest3::testDAIBuildSubstraction1()
1985 DataArrayInt *a=DataArrayInt::New();
1986 const int aa[]={2,3,6,8,9};
1988 std::copy(aa,aa+5,a->getPointer());
1989 DataArrayInt *b=DataArrayInt::New();
1990 const int bb[]={1,3,5,9,11};
1992 std::copy(bb,bb+5,b->getPointer());
1994 DataArrayInt *c=a->buildSubstraction(b);
1995 CPPUNIT_ASSERT_EQUAL(3,c->getNumberOfTuples());
1996 CPPUNIT_ASSERT_EQUAL(1,c->getNumberOfComponents());
1997 const int expected1[3]={2,6,8};
1998 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,c->getConstPointer()));
2005 void MEDCouplingBasicsTest3::testBuildOrthogonalField2()
2007 MEDCouplingUMesh *m=build2DTargetMesh_1();
2008 DataArrayInt *d1=DataArrayInt::New();
2009 DataArrayInt *d2=DataArrayInt::New();
2010 DataArrayInt *d3=DataArrayInt::New();
2011 DataArrayInt *d4=DataArrayInt::New();
2012 MEDCouplingUMesh *m1=m->buildDescendingConnectivity(d1,d2,d3,d4);
2014 MEDCouplingFieldDouble *f1=m1->buildOrthogonalField();
2015 DataArrayDouble *da1=f1->getArray();
2016 CPPUNIT_ASSERT_EQUAL(2,da1->getNumberOfComponents());
2017 CPPUNIT_ASSERT_EQUAL(13,da1->getNumberOfTuples());
2019 const double expected1[26]={-1.,0.,0.,1.,1.,0.,0.,-1.,0.707106781186548,0.707106781186548,0.,-1.,0.,1.,1.,0.,0.,1.,1.,0.,-1.,0.,0.,1.,1.,0.};
2020 for(int i=0;i<26;i++)
2021 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da1->getIJ(0,i),1e-14);
2032 void MEDCouplingBasicsTest3::testUMInsertNextCell1()
2034 double targetCoords[18]={-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 };
2035 int targetConn[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
2036 MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
2037 targetMesh->allocateCells(5);
2038 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn),INTERP_KERNEL::Exception);
2039 targetMesh->setMeshDimension(2);
2040 targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
2041 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,targetConn),INTERP_KERNEL::Exception);
2042 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,targetConn),INTERP_KERNEL::Exception);
2043 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT1,1,targetConn),INTERP_KERNEL::Exception);
2044 targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
2045 targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
2046 targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
2047 targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
2048 targetMesh->finishInsertingCells();
2049 DataArrayDouble *myCoords=DataArrayDouble::New();
2050 myCoords->alloc(9,2);
2051 std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
2052 targetMesh->setCoords(myCoords);
2053 myCoords->decrRef();
2054 targetMesh->checkCoherency();
2055 targetMesh->decrRef();
2058 void MEDCouplingBasicsTest3::testFieldOperatorDivDiffComp1()
2060 MEDCouplingUMesh *m=build2DTargetMesh_1();
2061 DataArrayInt *d1=DataArrayInt::New();
2062 DataArrayInt *d2=DataArrayInt::New();
2063 DataArrayInt *d3=DataArrayInt::New();
2064 DataArrayInt *d4=DataArrayInt::New();
2065 MEDCouplingUMesh *m1=m->buildDescendingConnectivity(d1,d2,d3,d4);
2067 MEDCouplingFieldDouble *f1=m1->buildOrthogonalField();
2068 const double arr1[13]={2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.};
2069 DataArrayDouble *arr=DataArrayDouble::New();
2071 std::copy(arr1,arr1+13,arr->getPointer());
2072 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::New(ON_CELLS);
2075 f2->checkCoherency();
2077 MEDCouplingFieldDouble *f3=(*f1)/(*f2);
2078 CPPUNIT_ASSERT_THROW((*f2)/(*f1),INTERP_KERNEL::Exception);
2079 f3->checkCoherency();
2081 CPPUNIT_ASSERT(f1->isEqual(f3,1e-10,1e-10));
2082 CPPUNIT_ASSERT_THROW((*f2)/=(*f1),INTERP_KERNEL::Exception);
2083 const double expected1[26]={-0.5, 0.0, 0.0, 0.33333333333333331, 0.25, 0.0, 0.0, -0.20000000000000001, 0.117851130197758, 0.117851130197758, 0.0, -0.14285714285714285, 0.0, 0.125, 0.1111111111111111, 0.0, 0.0, 0.10000000000000001, 0.090909090909090912, 0.0, -0.083333333333333329, 0.0, 0.0, 0.076923076923076927, 0.071428571428571425, 0.0};
2084 for(int i=0;i<26;i++)
2085 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f3->getIJ(0,i),1e-10);
2099 void MEDCouplingBasicsTest3::testDARearrange1()
2101 DataArrayInt *da1=DataArrayInt::New();
2104 const int *ptr=da1->getConstPointer();
2106 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da1->getNbOfElems());
2107 CPPUNIT_ASSERT_EQUAL(1,da1->getNumberOfComponents());
2108 CPPUNIT_ASSERT_EQUAL(12,da1->getNumberOfTuples());
2110 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2111 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da1->getNbOfElems());
2112 CPPUNIT_ASSERT_EQUAL(4,da1->getNumberOfComponents());
2113 CPPUNIT_ASSERT_EQUAL(3,da1->getNumberOfTuples());
2114 for(int i=0;i<12;i++)
2115 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2118 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2119 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da1->getNbOfElems());
2120 CPPUNIT_ASSERT_EQUAL(6,da1->getNumberOfComponents());
2121 CPPUNIT_ASSERT_EQUAL(2,da1->getNumberOfTuples());
2122 for(int i=0;i<12;i++)
2123 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2125 CPPUNIT_ASSERT_THROW(da1->rearrange(7),INTERP_KERNEL::Exception);
2128 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2129 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da1->getNbOfElems());
2130 CPPUNIT_ASSERT_EQUAL(12,da1->getNumberOfComponents());
2131 CPPUNIT_ASSERT_EQUAL(1,da1->getNumberOfTuples());
2132 for(int i=0;i<12;i++)
2133 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2136 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2137 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da1->getNbOfElems());
2138 CPPUNIT_ASSERT_EQUAL(3,da1->getNumberOfComponents());
2139 CPPUNIT_ASSERT_EQUAL(4,da1->getNumberOfTuples());
2140 for(int i=0;i<12;i++)
2141 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2143 DataArrayDouble *da2=da1->convertToDblArr();
2145 const double *ptr2=da2->getConstPointer();
2147 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da2->getNbOfElems());
2148 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());
2149 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfTuples());
2151 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2152 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da2->getNbOfElems());
2153 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfComponents());
2154 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfTuples());
2155 for(int i=0;i<12;i++)
2156 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2159 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2160 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da2->getNbOfElems());
2161 CPPUNIT_ASSERT_EQUAL(6,da2->getNumberOfComponents());
2162 CPPUNIT_ASSERT_EQUAL(2,da2->getNumberOfTuples());
2163 for(int i=0;i<12;i++)
2164 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2166 CPPUNIT_ASSERT_THROW(da2->rearrange(7),INTERP_KERNEL::Exception);
2169 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2170 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da2->getNbOfElems());
2171 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
2172 CPPUNIT_ASSERT_EQUAL(12,da2->getNumberOfTuples());
2173 for(int i=0;i<12;i++)
2174 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2177 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2178 CPPUNIT_ASSERT_EQUAL((std::size_t)12,da2->getNbOfElems());
2179 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());
2180 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfTuples());
2181 for(int i=0;i<12;i++)
2182 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2186 void MEDCouplingBasicsTest3::testGetDifferentValues1()
2188 DataArrayInt *da1=DataArrayInt::New();
2189 const int arr[12]={1,2,3,2,2,3,5,1,5,5,2,2};
2191 std::copy(arr,arr+12,da1->getPointer());
2192 DataArrayInt *s=da1->getDifferentValues();
2193 const int expected1[4]={1,2,3,5};
2194 CPPUNIT_ASSERT_EQUAL(4,s->getNumberOfTuples());
2195 CPPUNIT_ASSERT(std::equal(expected1,expected1+4,s->begin()));
2200 void MEDCouplingBasicsTest3::testDAIBuildPermutationArr1()
2202 DataArrayInt *a=DataArrayInt::New();
2203 const int vala[5]={4,5,6,7,8};
2205 std::copy(vala,vala+5,a->getPointer());
2206 DataArrayInt *b=DataArrayInt::New();
2207 const int valb[5]={5,4,8,6,7};
2209 std::copy(valb,valb+5,b->getPointer());
2210 DataArrayInt *c=a->buildPermutationArr(*b);
2211 const int expect1[5]={1,0,4,2,3};
2212 CPPUNIT_ASSERT_EQUAL(5,c->getNumberOfTuples());
2213 CPPUNIT_ASSERT_EQUAL(1,c->getNumberOfComponents());
2214 CPPUNIT_ASSERT(std::equal(expect1,expect1+5,c->getConstPointer()));
2215 CPPUNIT_ASSERT(a->isEqualWithoutConsideringStrAndOrder(*b));
2217 CPPUNIT_ASSERT(!a->isEqualWithoutConsideringStrAndOrder(*b));
2218 CPPUNIT_ASSERT_THROW(a->buildPermutationArr(*b),INTERP_KERNEL::Exception);
2221 b->setIJ(4,0,4);//;a==[4,5,6,4,8] and b==[5,4,8,6,4]
2222 CPPUNIT_ASSERT(a->isEqualWithoutConsideringStrAndOrder(*b));
2224 c=a->buildPermutationArr(*b);
2225 const int expect2[5]={1,3,4,2,3};
2226 CPPUNIT_ASSERT(std::equal(expect2,expect2+5,c->getConstPointer()));
2227 DataArrayDouble *d=b->convertToDblArr();
2229 const int expect3[5]={4,4,5,6,8};
2230 CPPUNIT_ASSERT(std::equal(expect3,expect3+5,b->getConstPointer()));
2232 CPPUNIT_ASSERT_EQUAL(5,d->getNumberOfTuples());
2233 CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
2234 for(int i=0;i<5;i++)
2235 CPPUNIT_ASSERT_DOUBLES_EQUAL(double(expect3[i]),d->getIJ(i,0),1e-14);
2243 void MEDCouplingBasicsTest3::testAreCellsIncludedIn2()
2245 const char myName[]="Vitoo";
2246 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
2247 MEDCouplingUMesh *m2=(MEDCouplingUMesh *)m->buildPartOfMySelf(0,0,true);
2248 CPPUNIT_ASSERT_EQUAL(0,m2->getNumberOfCells());
2249 CPPUNIT_ASSERT_EQUAL(3,m2->getSpaceDimension());
2250 CPPUNIT_ASSERT_EQUAL(2,m2->getMeshDimension());
2251 m2->setName(myName);
2253 CPPUNIT_ASSERT(m->areCellsIncludedIn(m2,0,tmp));
2254 CPPUNIT_ASSERT(std::string(myName)==tmp->getName());
2255 CPPUNIT_ASSERT_EQUAL(0,tmp->getNumberOfTuples());
2256 CPPUNIT_ASSERT_EQUAL(1,tmp->getNumberOfComponents());
2262 void MEDCouplingBasicsTest3::testUMeshGetPartBarycenterAndOwner1()
2264 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2265 const int part[3]={1,0,4};
2266 DataArrayDouble *b=m1->getPartBarycenterAndOwner(part,part+3);
2267 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
2268 CPPUNIT_ASSERT_EQUAL(3,b->getNumberOfTuples());
2269 const double expected1[6]={0.36666666666666665,-0.13333333333333333,-0.05,-0.05,0.45,0.45};
2270 for(int i=0;i<6;i++)
2271 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
2276 void MEDCouplingBasicsTest3::testUMeshGetPartMeasureField1()
2278 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2279 const int part[3]={1,0,4};
2280 DataArrayDouble *b=m1->getPartMeasureField(true,part,part+3);
2281 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
2282 CPPUNIT_ASSERT_EQUAL(3,b->getNumberOfTuples());
2283 const double expected1[3]={0.125,0.25,0.25};
2284 for(int i=0;i<3;i++)
2285 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
2290 void MEDCouplingBasicsTest3::testUMeshBuildPartOrthogonalField1()
2292 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2293 m1->changeSpaceDimension(3);
2294 const int part[3]={1,0,4};
2295 MEDCouplingFieldDouble *b=m1->buildPartOrthogonalField(part,part+3);
2296 CPPUNIT_ASSERT_EQUAL(3,b->getArray()->getNumberOfComponents());
2297 CPPUNIT_ASSERT_EQUAL(3,b->getArray()->getNumberOfTuples());
2298 const double expected1[9]={0.,0.,-1.,0.,0.,-1.,0.,0.,-1.};
2299 for(int i=0;i<9;i++)
2300 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getArray()->getIJ(0,i),1e-14);
2305 void MEDCouplingBasicsTest3::testUMeshGetTypesOfPart1()
2307 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2308 const int part1[]={0,3,4};
2309 std::set<INTERP_KERNEL::NormalizedCellType> s;
2310 s=m1->getTypesOfPart(part1,part1+3);
2311 CPPUNIT_ASSERT(s.size()==1);
2312 CPPUNIT_ASSERT(*s.begin()==INTERP_KERNEL::NORM_QUAD4);
2313 const int part2[]={2,2,2,1};
2314 s=m1->getTypesOfPart(part2,part2+4);
2315 CPPUNIT_ASSERT(s.size()==1);
2316 CPPUNIT_ASSERT(*s.begin()==INTERP_KERNEL::NORM_TRI3);
2317 const int part3[]={3,2,1};
2318 s=m1->getTypesOfPart(part3,part3+3);
2319 CPPUNIT_ASSERT(s.size()==2);
2320 CPPUNIT_ASSERT(*s.begin()==INTERP_KERNEL::NORM_TRI3);
2321 CPPUNIT_ASSERT(*(++s.begin())==INTERP_KERNEL::NORM_QUAD4);
2325 void MEDCouplingBasicsTest3::testUMeshKeepCellIdsByType1()
2327 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2328 const int part1[3]={0,3,4};
2329 DataArrayInt *a=m1->keepCellIdsByType(INTERP_KERNEL::NORM_TRI3,part1,part1+3);
2330 CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
2331 CPPUNIT_ASSERT_EQUAL(0,a->getNumberOfTuples());
2334 const int part2[5]={3,2,0,2,4};
2335 a=m1->keepCellIdsByType(INTERP_KERNEL::NORM_TRI3,part2,part2+5);
2336 CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
2337 CPPUNIT_ASSERT_EQUAL(2,a->getNumberOfTuples());
2338 CPPUNIT_ASSERT_EQUAL(2,a->getIJ(0,0));
2339 CPPUNIT_ASSERT_EQUAL(2,a->getIJ(1,0));
2342 a=m1->keepCellIdsByType(INTERP_KERNEL::NORM_QUAD4,part2,part2+5);
2343 CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
2344 CPPUNIT_ASSERT_EQUAL(3,a->getNumberOfTuples());
2345 CPPUNIT_ASSERT_EQUAL(3,a->getIJ(0,0));
2346 CPPUNIT_ASSERT_EQUAL(0,a->getIJ(1,0));
2347 CPPUNIT_ASSERT_EQUAL(4,a->getIJ(2,0));
2353 void MEDCouplingBasicsTest3::testDAIAggregateMulti1()
2355 DataArrayInt *a=DataArrayInt::New();
2360 DataArrayInt *b=DataArrayInt::New();
2366 std::vector<const DataArrayInt *> v(2);
2368 DataArrayInt *c=DataArrayInt::Aggregate(v);
2369 CPPUNIT_ASSERT_EQUAL(5,c->getNumberOfTuples());
2370 CPPUNIT_ASSERT_EQUAL(2,c->getNumberOfComponents());
2371 CPPUNIT_ASSERT(c->getName()=="aa");
2372 const int expect1[10]={0,1,2,3,0,1,2,3,4,5};
2373 for(int i=0;i<10;i++)
2374 CPPUNIT_ASSERT_EQUAL(expect1[i],c->getIJ(0,i));
2381 void MEDCouplingBasicsTest3::testMergeUMeshes2()
2383 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
2384 MEDCouplingUMesh *m2=build3DSurfTargetMesh_1();
2385 MEDCouplingUMesh *m3=build3DSurfTargetMesh_1();
2387 const int vec1[3]={0,2,3};
2388 MEDCouplingUMesh *m2_2=(MEDCouplingUMesh *)m2->buildPartOfMySelf(vec1,vec1+3,false);
2389 const int vec2[2]={1,1};
2390 MEDCouplingUMesh *m3_2=(MEDCouplingUMesh *)m3->buildPartOfMySelf(vec2,vec2+2,false);
2392 std::vector<const MEDCouplingUMesh *> ms(3);
2393 std::vector<const MEDCouplingMesh *> ms2(3);
2394 ms[0]=m1; ms[1]=m2_2; ms[2]=m3_2;
2395 ms2[0]=m1; ms2[1]=m2_2; ms2[2]=m3_2;
2397 MEDCouplingUMesh *m4=MEDCouplingUMesh::MergeUMeshes(ms);
2398 m4->checkCoherency();
2399 CPPUNIT_ASSERT_EQUAL(10,m4->getNumberOfCells());
2400 CPPUNIT_ASSERT_EQUAL(20,m4->getNumberOfNodes());
2401 CPPUNIT_ASSERT_EQUAL(45,m4->getMeshLength());
2403 MEDCouplingMesh *m4bis=MEDCouplingMesh::MergeMeshes(ms2);
2404 CPPUNIT_ASSERT(m4->isEqual(m4bis,1e-12));
2407 const int vec3[5]={0,1,2,3,4};
2408 MEDCouplingUMesh *m4_1=(MEDCouplingUMesh *)m4->buildPartOfMySelf(vec3,vec3+5,false);
2409 m4_1->setName(m1->getName().c_str());
2410 CPPUNIT_ASSERT(m4_1->isEqual(m1,1e-12));
2413 const int vec4[3]={5,6,7};
2414 MEDCouplingUMesh *m4_2=(MEDCouplingUMesh *)m4->buildPartOfMySelf(vec4,vec4+3,false);
2415 DataArrayInt *cellCor=0;
2416 DataArrayInt *nodeCor=0;
2417 m4_2->checkGeoEquivalWith(m2_2,10,1e-12,cellCor,nodeCor);
2418 CPPUNIT_ASSERT(cellCor==0);
2419 CPPUNIT_ASSERT(nodeCor==0);
2422 const int vec5[2]={8,9};
2423 MEDCouplingUMesh *m4_3=(MEDCouplingUMesh *)m4->buildPartOfMySelf(vec5,vec5+2,false);
2424 CPPUNIT_ASSERT_EQUAL(2,m4_3->getNumberOfCells());
2425 CPPUNIT_ASSERT_EQUAL(3,m4_3->getNumberOfNodes());
2427 m4_3->setName(m3_2->getName().c_str());
2428 CPPUNIT_ASSERT(m4_3->isEqual(m3_2,1e-12));
2439 void MEDCouplingBasicsTest3::testBuild0DMeshFromCoords1()
2441 const double sourceCoords[12]={-0.3,-0.3,0., 0.7,-0.3,0., -0.3,0.7,0., 0.7,0.7,0.};
2442 DataArrayDouble *coo=DataArrayDouble::New();
2444 coo->setName("My0D");
2445 std::copy(sourceCoords,sourceCoords+12,coo->getPointer());
2446 MEDCouplingUMesh *m=MEDCouplingUMesh::Build0DMeshFromCoords(coo);
2447 m->checkCoherency();
2448 CPPUNIT_ASSERT_EQUAL(4,m->getNumberOfNodes());
2449 CPPUNIT_ASSERT_EQUAL(4,m->getNumberOfCells());
2450 CPPUNIT_ASSERT_EQUAL(3,m->getSpaceDimension());
2451 CPPUNIT_ASSERT_EQUAL(0,m->getMeshDimension());
2452 std::set<INTERP_KERNEL::NormalizedCellType> types=m->getAllGeoTypes();
2453 CPPUNIT_ASSERT_EQUAL(1,(int)types.size());
2454 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POINT1,*types.begin());
2455 for(int i=0;i<4;i++)
2457 std::vector<int> conn;
2458 m->getNodeIdsOfCell(i,conn);
2459 CPPUNIT_ASSERT_EQUAL(1,(int)conn.size());
2460 CPPUNIT_ASSERT_EQUAL(i,conn[0]);
2461 CPPUNIT_ASSERT(INTERP_KERNEL::NORM_POINT1==m->getTypeOfCell(i));
2463 CPPUNIT_ASSERT(std::string(m->getName())=="My0D");