1 // Copyright (C) 2007-2012 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.
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=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=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=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->reverse(),INTERP_KERNEL::Exception);
841 CPPUNIT_ASSERT_THROW(dbl2->iota(10.),INTERP_KERNEL::Exception);
843 DataArrayDouble *dbl=DataArrayDouble::New();
844 //DataArrayDouble not allocated yet
845 CPPUNIT_ASSERT_THROW(dbl->iota(10.),INTERP_KERNEL::Exception);
846 CPPUNIT_ASSERT_THROW(dbl->isUniform(10.,1e-15),INTERP_KERNEL::Exception);
847 CPPUNIT_ASSERT_THROW(dbl->sort(),INTERP_KERNEL::Exception);
848 CPPUNIT_ASSERT_THROW(dbl->reverse(),INTERP_KERNEL::Exception);
849 CPPUNIT_ASSERT_THROW(dbl->fromNoInterlace(),INTERP_KERNEL::Exception);
850 CPPUNIT_ASSERT_THROW(dbl->toNoInterlace(),INTERP_KERNEL::Exception);
854 CPPUNIT_ASSERT(!dbl->isUniform(10.,1e-15));
856 CPPUNIT_ASSERT(dbl->isMonotonic(true, .99));
857 CPPUNIT_ASSERT(dbl->isMonotonic(true, -.99));
858 CPPUNIT_ASSERT(!dbl->isMonotonic(true, 1.1));
859 CPPUNIT_ASSERT(!dbl->isMonotonic(true, -1.1));
861 CPPUNIT_ASSERT(dbl->isMonotonic(false, .99));
862 CPPUNIT_ASSERT(!dbl->isMonotonic(false, 1.1));
863 CPPUNIT_ASSERT(!dbl->isMonotonic(false, -1.1));
865 DataArrayInt *dc=DataArrayInt::New();
868 DataArrayDouble *dd=DataArrayDouble::New();
869 CPPUNIT_ASSERT_THROW(dd->checkAllocated(),INTERP_KERNEL::Exception);
870 CPPUNIT_ASSERT_THROW(dd->fillWithValue(1.),INTERP_KERNEL::Exception);
871 CPPUNIT_ASSERT_THROW(dd->iota(1.),INTERP_KERNEL::Exception);
872 CPPUNIT_ASSERT(!((dd->repr().find("No data"))==std::string::npos));
874 dd->alloc(0,1); //Allocated but nbOfElements==0!
875 CPPUNIT_ASSERT(!((dd->repr().find("Number of tuples : 0"))==std::string::npos));
876 CPPUNIT_ASSERT(!((dd->repr().find("Empty Data"))==std::string::npos));
877 dd->fillWithValue(11); //?!...
878 dd->iota(10); //?!...
879 CPPUNIT_ASSERT(dd->isMonotonic(true, 1.));
880 CPPUNIT_ASSERT(dd->isMonotonic(false, 1.));
882 CPPUNIT_ASSERT_THROW(db->copyStringInfoFrom(*da),INTERP_KERNEL::Exception);
883 CPPUNIT_ASSERT_THROW(db->copyStringInfoFrom(*da),INTERP_KERNEL::Exception);
884 std::vector<int> cIds(2,2);
885 CPPUNIT_ASSERT_THROW(da->copyPartOfStringInfoFrom(*db,cIds),INTERP_KERNEL::Exception);
888 CPPUNIT_ASSERT_THROW(da->copyPartOfStringInfoFrom(*db,cIds),INTERP_KERNEL::Exception);
890 std::vector<std::string> info(2,"infoOfOneComponent");
891 CPPUNIT_ASSERT_THROW(da->setInfoOnComponents(info),INTERP_KERNEL::Exception);
892 CPPUNIT_ASSERT_THROW(da->setInfoOnComponent(1,info[0].c_str()),INTERP_KERNEL::Exception);
893 db->setInfoOnComponents(info);
895 CPPUNIT_ASSERT_THROW(da->getInfoOnComponent(-1),INTERP_KERNEL::Exception);
896 CPPUNIT_ASSERT_THROW(da->getInfoOnComponent(2),INTERP_KERNEL::Exception);
897 CPPUNIT_ASSERT(db->getInfoOnComponent(1)==db->getInfoOnComponent(0));
898 CPPUNIT_ASSERT_THROW(db->getVarOnComponent(-1),INTERP_KERNEL::Exception);
899 CPPUNIT_ASSERT_THROW(db->getVarOnComponent(2),INTERP_KERNEL::Exception);
900 CPPUNIT_ASSERT_THROW(db->getUnitOnComponent(-1),INTERP_KERNEL::Exception);
901 CPPUNIT_ASSERT_THROW(db->getUnitOnComponent(2),INTERP_KERNEL::Exception);
903 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("varname unit "))==std::string("varname unit "));
904 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("varname]unit["))==std::string("varname]unit["));
905 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("[unit]"))==std::string());
906 CPPUNIT_ASSERT(da->GetVarNameFromInfo(std::string("varname [unit]"))==std::string("varname"));
908 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("varname unit "))==std::string());
909 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("varname]unit["))==std::string());
910 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("[unit]"))==std::string("unit"));
911 CPPUNIT_ASSERT(da->GetUnitFromInfo(std::string("varname [unit]"))==std::string("unit"));
913 CPPUNIT_ASSERT_THROW(da->checkNbOfTuplesAndComp(*db,"theMessageInThrow"),INTERP_KERNEL::Exception);
914 CPPUNIT_ASSERT_THROW(da->checkNbOfTuplesAndComp(*dc,"theMessageInThrow"),INTERP_KERNEL::Exception);
915 CPPUNIT_ASSERT_THROW(db->checkNbOfTuplesAndComp(*dc,"theMessageInThrow"),INTERP_KERNEL::Exception);
917 CPPUNIT_ASSERT_THROW(da->checkNbOfTuplesAndComp(7,2,"theMessageInThrow"),INTERP_KERNEL::Exception);
918 da->checkNbOfTuplesAndComp(7,1,"theMessageInThrow");
920 CPPUNIT_ASSERT_THROW(db->checkNbOfElems(7*2+1,"theMessageInThrow"),INTERP_KERNEL::Exception);
921 db->checkNbOfElems(7*2,"theMessageInThrow");
923 CPPUNIT_ASSERT_THROW(db->GetNumberOfItemGivenBES(10,9,1,"theMessageInThrow"),INTERP_KERNEL::Exception);
924 CPPUNIT_ASSERT_THROW(db->GetNumberOfItemGivenBES(0,1,-1,"theMessageInThrow"),INTERP_KERNEL::Exception);
925 CPPUNIT_ASSERT_EQUAL(10,db->GetNumberOfItemGivenBES(0,10,1,"theMessageInThrow"));
926 CPPUNIT_ASSERT_EQUAL(5,db->GetNumberOfItemGivenBES(0,10,2,"theMessageInThrow"));
927 CPPUNIT_ASSERT_EQUAL(6,db->GetNumberOfItemGivenBES(0,11,2,"theMessageInThrow"));
929 //std::cout<<"\n!!!!!!!!!\n"<<dd->repr()<<"\n!!!!!!!!!\n";
930 CPPUNIT_ASSERT(!((da->repr().find("Number of components : 1"))==std::string::npos));
931 CPPUNIT_ASSERT(!((dd->repr().find("Number of components : 1"))==std::string::npos));
932 CPPUNIT_ASSERT(!((dbl->repr().find("Number of components : 1"))==std::string::npos));
934 CPPUNIT_ASSERT(!((da->reprZip().find("Number of components : 1"))==std::string::npos));
935 CPPUNIT_ASSERT(!((dd->reprZip().find("Number of components : 1"))==std::string::npos));
936 CPPUNIT_ASSERT(!((dbl->reprZip().find("Number of components : 1"))==std::string::npos));
938 std::ostringstream ret;
939 dbl->writeVTK(ret,2,"file.tmp");
940 CPPUNIT_ASSERT(!((ret.str().find("<DataArray"))==std::string::npos));
941 CPPUNIT_ASSERT(!((ret.str().find("Float32"))==std::string::npos));
942 CPPUNIT_ASSERT(!((ret.str().find("16 15 14 13 12 11 10"))==std::string::npos));
944 CPPUNIT_ASSERT_THROW(dbl->selectByTupleId2(0,1,-1),INTERP_KERNEL::Exception);
945 CPPUNIT_ASSERT_THROW(dbl->substr(-1,1),INTERP_KERNEL::Exception);
946 CPPUNIT_ASSERT_THROW(dbl->substr(8,1),INTERP_KERNEL::Exception);
947 CPPUNIT_ASSERT_THROW(dbl->substr(0,8),INTERP_KERNEL::Exception);
948 CPPUNIT_ASSERT_THROW(dbl->meldWith(dd),INTERP_KERNEL::Exception);
950 CPPUNIT_ASSERT_THROW(dbl->setPartOfValuesAdv(dbl2,da),INTERP_KERNEL::Exception); //dbl dbl2 not have the same number of components
951 CPPUNIT_ASSERT_THROW(dbl->setPartOfValuesAdv(dd,da),INTERP_KERNEL::Exception); //da tuple selector DataArrayInt instance not have exactly 2 components
953 DataArrayDouble *dbl3=DataArrayDouble::New();
955 dbl3->fillWithValue(11.);
957 //bad number of components
958 CPPUNIT_ASSERT_THROW(dbl3->getMaxValue(tupleId),INTERP_KERNEL::Exception);
959 CPPUNIT_ASSERT_THROW(dd->getMaxValue(tupleId),INTERP_KERNEL::Exception);
960 CPPUNIT_ASSERT_THROW(dbl3->getMinValue(tupleId),INTERP_KERNEL::Exception);
961 CPPUNIT_ASSERT_THROW(dd->getMinValue(tupleId),INTERP_KERNEL::Exception);
962 CPPUNIT_ASSERT_THROW(dbl3->getAverageValue(),INTERP_KERNEL::Exception);
963 CPPUNIT_ASSERT_THROW(dd->getAverageValue(),INTERP_KERNEL::Exception);
964 CPPUNIT_ASSERT_THROW(dd->accumulate(100),INTERP_KERNEL::Exception);
965 CPPUNIT_ASSERT_THROW(dbl->fromPolarToCart(),INTERP_KERNEL::Exception);
966 CPPUNIT_ASSERT_THROW(dbl3->fromCylToCart(),INTERP_KERNEL::Exception);
967 CPPUNIT_ASSERT_THROW(dbl3->fromSpherToCart(),INTERP_KERNEL::Exception);
968 CPPUNIT_ASSERT_THROW(dbl3->doublyContractedProduct(),INTERP_KERNEL::Exception);
969 CPPUNIT_ASSERT_THROW(dbl3->determinant(),INTERP_KERNEL::Exception);
970 CPPUNIT_ASSERT_THROW(dbl3->eigenValues(),INTERP_KERNEL::Exception);
971 CPPUNIT_ASSERT_THROW(dbl3->eigenVectors(),INTERP_KERNEL::Exception);
972 CPPUNIT_ASSERT_THROW(dbl3->inverse(),INTERP_KERNEL::Exception);
973 CPPUNIT_ASSERT_THROW(dbl3->trace(),INTERP_KERNEL::Exception);
974 CPPUNIT_ASSERT_THROW(dbl3->deviator(),INTERP_KERNEL::Exception);
976 dbl3->setIJ(5,1,12.);
977 CPPUNIT_ASSERT(dbl3->getMaxValueInArray()==12.);
978 CPPUNIT_ASSERT(dbl3->getMinValueInArray()==11.);
980 db->fillWithValue(100); //bad Ids
981 CPPUNIT_ASSERT_THROW(dbl3->setPartOfValuesAdv(dbl2,db),INTERP_KERNEL::Exception);
982 db->fillWithValue(-1); //bad Ids
983 CPPUNIT_ASSERT_THROW(dbl3->setPartOfValuesAdv(dbl2,db),INTERP_KERNEL::Exception);
984 db->fillWithValue(6); //bad Ids for dbl3
985 CPPUNIT_ASSERT_THROW(dbl3->setPartOfValuesAdv(dbl2,db),INTERP_KERNEL::Exception);
987 DataArrayDouble::SetArrayIn(dbl,dbl3); //dbl->dbl3 memLeaks?
988 dbl3->checkNoNullValues();
990 CPPUNIT_ASSERT_THROW(dbl3->checkNoNullValues(),INTERP_KERNEL::Exception);
991 CPPUNIT_ASSERT_THROW(dbl3->applyInv(1.),INTERP_KERNEL::Exception); //div by zero
992 CPPUNIT_ASSERT_THROW(dbl2->getIdsInRange(1.,2.),INTERP_KERNEL::Exception);
993 std::vector<const DataArrayDouble *> a(0); //input list must be NON EMPTY
994 CPPUNIT_ASSERT_THROW(DataArrayDouble::Aggregate(a),INTERP_KERNEL::Exception);
995 CPPUNIT_ASSERT_THROW(DataArrayDouble::Meld(a),INTERP_KERNEL::Exception);
998 a.push_back(dbl); //Nb of components mismatch
999 CPPUNIT_ASSERT_THROW(DataArrayDouble::Aggregate(a),INTERP_KERNEL::Exception);
1001 CPPUNIT_ASSERT_THROW(DataArrayDouble::Dot(dbl2,dbl),INTERP_KERNEL::Exception);
1003 CPPUNIT_ASSERT_THROW(DataArrayDouble::CrossProduct(dbl2,dbl),INTERP_KERNEL::Exception); //Nb of components mismatch
1004 CPPUNIT_ASSERT_THROW(DataArrayDouble::CrossProduct(dbl2,dbl2),INTERP_KERNEL::Exception); //Nb of components must be equal to 3
1005 DataArrayDouble *dbl4=DataArrayDouble::New();
1007 DataArrayDouble *dbl5=DataArrayDouble::New();
1009 CPPUNIT_ASSERT_THROW(DataArrayDouble::CrossProduct(dbl4,dbl5),INTERP_KERNEL::Exception); //Nb of tuples mismatch
1011 a[0]=dbl4; //Nb of tuple mismatch
1012 a[1]=dbl5; //Nb of tuple mismatch
1013 CPPUNIT_ASSERT_THROW(DataArrayDouble::Meld(a),INTERP_KERNEL::Exception);
1014 CPPUNIT_ASSERT_THROW(DataArrayDouble::Dot(dbl4,dbl5),INTERP_KERNEL::Exception);
1027 void MEDCouplingBasicsTest3::testDAIGetIdsEqual1()
1029 const int tab1[7]={5,-2,-4,-2,3,2,-2};
1030 DataArrayInt *da=DataArrayInt::New();
1032 std::copy(tab1,tab1+7,da->getPointer());
1033 DataArrayInt *da2=da->getIdsEqual(-2);
1034 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfTuples());
1035 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
1036 const int expected1[3]={1,3,6};
1037 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,da2->getConstPointer()));
1042 void MEDCouplingBasicsTest3::testDAIGetIdsEqualList1()
1044 const int tab1[7]={5,-2,-4,-2,3,2,-2};
1045 DataArrayInt *da=DataArrayInt::New();
1047 std::copy(tab1,tab1+7,da->getPointer());
1048 const int tab2[3]={3,-2,0};
1049 std::vector<int> tab2V(tab2,tab2+3);
1050 DataArrayInt *da2=da->getIdsEqualList(&tab2V[0],&tab2V[0]+tab2V.size());
1051 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfTuples());
1052 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
1053 const int expected1[4]={1,3,4,6};
1054 CPPUNIT_ASSERT(std::equal(expected1,expected1+4,da2->getConstPointer()));
1059 void MEDCouplingBasicsTest3::testDAFromNoInterlace1()
1061 const int tab1[15]={1,11,21,31,41,2,12,22,32,42,3,13,23,33,43};
1062 DataArrayInt *da=DataArrayInt::New();
1064 std::copy(tab1,tab1+15,da->getPointer());
1065 DataArrayInt *da2=da->fromNoInterlace();
1066 const int expected1[15]={1,2,3,11,12,13,21,22,23,31,32,33,41,42,43};
1067 CPPUNIT_ASSERT_EQUAL(5,da2->getNumberOfTuples());
1068 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1069 CPPUNIT_ASSERT(std::equal(expected1,expected1+15,da2->getConstPointer()));
1070 DataArrayDouble *da3=da->convertToDblArr();
1071 DataArrayDouble *da4=da3->fromNoInterlace();
1072 CPPUNIT_ASSERT_EQUAL(5,da4->getNumberOfTuples());
1073 CPPUNIT_ASSERT_EQUAL(3,da4->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1074 for(int i=0;i<15;i++)
1075 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)expected1[i],da4->getIJ(0,i),1e-14);
1082 void MEDCouplingBasicsTest3::testDAToNoInterlace1()
1084 const int tab1[15]={1,2,3,11,12,13,21,22,23,31,32,33,41,42,43};
1085 DataArrayInt *da=DataArrayInt::New();
1087 std::copy(tab1,tab1+15,da->getPointer());
1088 DataArrayInt *da2=da->toNoInterlace();
1089 const int expected1[15]={1,11,21,31,41,2,12,22,32,42,3,13,23,33,43};
1090 CPPUNIT_ASSERT_EQUAL(5,da2->getNumberOfTuples());
1091 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1092 CPPUNIT_ASSERT(std::equal(expected1,expected1+15,da2->getConstPointer()));
1093 DataArrayDouble *da3=da->convertToDblArr();
1094 DataArrayDouble *da4=da3->toNoInterlace();
1095 CPPUNIT_ASSERT_EQUAL(5,da4->getNumberOfTuples());
1096 CPPUNIT_ASSERT_EQUAL(3,da4->getNumberOfComponents());// it's not a bug. Avoid to have 1 million components !
1097 for(int i=0;i<15;i++)
1098 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)expected1[i],da4->getIJ(0,i),1e-14);
1105 void MEDCouplingBasicsTest3::testDAIsUniform1()
1107 const int tab1[5]={1,1,1,1,1};
1108 DataArrayInt *da=DataArrayInt::New();
1110 std::copy(tab1,tab1+5,da->getPointer());
1111 CPPUNIT_ASSERT(da->isUniform(1));
1113 CPPUNIT_ASSERT(!da->isUniform(1));
1115 CPPUNIT_ASSERT(da->isUniform(1));
1116 DataArrayDouble *da2=da->convertToDblArr();
1117 CPPUNIT_ASSERT(da2->isUniform(1.,1e-12));
1118 da2->setIJ(1,0,1.+1.e-13);
1119 CPPUNIT_ASSERT(da2->isUniform(1.,1e-12));
1120 da2->setIJ(1,0,1.+1.e-11);
1121 CPPUNIT_ASSERT(!da2->isUniform(1.,1e-12));
1126 void MEDCouplingBasicsTest3::testDADFromPolarToCart1()
1128 const double tab1[4]={2.,0.2,2.5,0.7};
1129 DataArrayDouble *da=DataArrayDouble::New();
1131 std::copy(tab1,tab1+4,da->getPointer());
1132 DataArrayDouble *da2=da->fromPolarToCart();
1133 const double expected1[4]={1.9601331556824833,0.39733866159012243, 1.9121054682112213,1.6105442180942275};
1134 for(int i=0;i<4;i++)
1135 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-13);
1140 void MEDCouplingBasicsTest3::testDADFromCylToCart1()
1142 const double tab1[6]={2.,0.2,4.,2.5,0.7,9.};
1143 DataArrayDouble *da=DataArrayDouble::New();
1145 std::copy(tab1,tab1+6,da->getPointer());
1146 DataArrayDouble *da2=da->fromCylToCart();
1147 const double expected1[6]={1.9601331556824833,0.39733866159012243,4., 1.9121054682112213,1.6105442180942275,9.};
1148 for(int i=0;i<6;i++)
1149 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-13);
1154 void MEDCouplingBasicsTest3::testDADFromSpherToCart1()
1156 const double tab1[6]={2.,0.2,0.3,2.5,0.7,0.8};
1157 DataArrayDouble *da=DataArrayDouble::New();
1159 std::copy(tab1,tab1+6,da->getPointer());
1160 DataArrayDouble *da2=da->fromSpherToCart();
1161 const double expected1[6]={0.37959212195737485,0.11742160338765303,1.9601331556824833, 1.1220769624465328,1.1553337045129035,1.9121054682112213};
1162 for(int i=0;i<6;i++)
1163 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-13);
1168 void MEDCouplingBasicsTest3::testUnPolyze1()
1170 const int elts[8]={0,1,2,3,4,5,6,7};
1171 std::vector<int> eltsV(elts,elts+8);
1172 MEDCouplingUMesh *mesh=build3DTargetMesh_1();
1173 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1175 MEDCouplingUMesh *mesh2=build3DTargetMesh_1();
1176 mesh->checkCoherency();
1177 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1178 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1179 CPPUNIT_ASSERT(!mesh->isEqual(mesh2,1e-12));
1180 mesh->getNodalConnectivity()->setIJ(0,6,10);
1181 mesh->getNodalConnectivity()->setIJ(0,7,9);
1182 mesh->getNodalConnectivity()->setIJ(0,8,12);
1183 mesh->getNodalConnectivity()->setIJ(0,9,13);
1185 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1186 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1187 mesh->getNodalConnectivity()->setIJ(0,6,12);
1188 mesh->getNodalConnectivity()->setIJ(0,7,13);
1189 mesh->getNodalConnectivity()->setIJ(0,8,10);
1190 mesh->getNodalConnectivity()->setIJ(0,9,9);
1192 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1193 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1194 mesh->getNodalConnectivity()->setIJ(0,6,12);
1195 mesh->getNodalConnectivity()->setIJ(0,7,10);
1196 mesh->getNodalConnectivity()->setIJ(0,8,13);
1197 mesh->getNodalConnectivity()->setIJ(0,9,9);
1199 CPPUNIT_ASSERT(!mesh->isEqual(mesh2,1e-12));
1203 mesh=build2DTargetMesh_1();
1204 mesh2=build2DTargetMesh_1();
1206 mesh->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
1207 CPPUNIT_ASSERT(!mesh->isEqual(mesh2,1e-12));
1209 CPPUNIT_ASSERT(mesh->isEqual(mesh2,1e-12));
1214 void MEDCouplingBasicsTest3::testConvertDegeneratedCells1()
1216 MEDCouplingUMesh *mesh=build3DTargetMesh_1();
1217 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};
1218 mesh->allocateCells(4);
1219 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn);
1220 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+8);
1221 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+16);
1222 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+24);
1223 mesh->finishInsertingCells();
1224 mesh->checkCoherency();
1225 CPPUNIT_ASSERT_EQUAL(4,mesh->getNumberOfCells());
1226 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(0));
1227 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(1));
1228 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(2));
1229 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_HEXA8,mesh->getTypeOfCell(3));
1230 MEDCouplingFieldDouble *f1=mesh->getMeasureField(true);
1231 mesh->convertDegeneratedCells();
1232 mesh->checkCoherency();
1233 MEDCouplingFieldDouble *f2=mesh->getMeasureField(true);
1234 CPPUNIT_ASSERT_EQUAL(4,mesh->getNumberOfCells());
1235 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_PENTA6,mesh->getTypeOfCell(0));
1236 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_PYRA5,mesh->getTypeOfCell(1));
1237 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TETRA4,mesh->getTypeOfCell(2));
1238 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_PYRA5,mesh->getTypeOfCell(3));
1239 for(int i=0;i<4;i++)
1240 CPPUNIT_ASSERT_DOUBLES_EQUAL(f1->getArray()->getIJ(0,i),f2->getArray()->getIJ(0,i),1e-5);
1246 void MEDCouplingBasicsTest3::testGetNodeIdsNearPoints1()
1248 MEDCouplingUMesh *mesh=build2DTargetMesh_1();
1249 DataArrayDouble *coords=mesh->getCoords();
1250 DataArrayDouble *tmp=DataArrayDouble::New();
1252 const double vals[6]={0.2,0.2,0.1,0.2,0.2,0.2};
1253 std::copy(vals,vals+6,tmp->getPointer());
1254 DataArrayDouble *tmp2=DataArrayDouble::Aggregate(coords,tmp);
1256 mesh->setCoords(tmp2);
1258 const double pts[6]={0.2,0.2,0.1,0.3,-0.3,0.7};
1259 std::vector<int> c=mesh->getNodeIdsNearPoint(pts,1e-7);
1260 CPPUNIT_ASSERT_EQUAL(3,(int)c.size());
1261 CPPUNIT_ASSERT_EQUAL(4,c[0]);
1262 CPPUNIT_ASSERT_EQUAL(9,c[1]);
1263 CPPUNIT_ASSERT_EQUAL(11,c[2]);
1265 std::vector<int> cI;
1266 mesh->getNodeIdsNearPoints(pts,3,1e-7,c,cI);
1267 CPPUNIT_ASSERT_EQUAL(4,(int)cI.size());
1268 CPPUNIT_ASSERT_EQUAL(4,(int)c.size());
1269 CPPUNIT_ASSERT_EQUAL(4,c[0]);
1270 CPPUNIT_ASSERT_EQUAL(9,c[1]);
1271 CPPUNIT_ASSERT_EQUAL(11,c[2]);
1272 CPPUNIT_ASSERT_EQUAL(6,c[3]);
1273 CPPUNIT_ASSERT_EQUAL(0,cI[0]);
1274 CPPUNIT_ASSERT_EQUAL(3,cI[1]);
1275 CPPUNIT_ASSERT_EQUAL(3,cI[2]);
1276 CPPUNIT_ASSERT_EQUAL(4,cI[3]);
1280 void MEDCouplingBasicsTest3::testFieldCopyTinyAttrFrom1()
1282 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1284 f1->setTimeTolerance(1.e-5);
1285 f1->setDescription("f1Desc");
1286 f1->setTime(1.23,4,5);
1287 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1289 f2->setDescription("f2Desc");
1290 f2->setTime(6.78,9,10);
1291 f2->setTimeTolerance(4.556e-12);
1294 f1->copyTinyAttrFrom(f2);
1295 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1296 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.78,f1->getTime(dt,it),1e-12);
1297 CPPUNIT_ASSERT_EQUAL(9,dt);
1298 CPPUNIT_ASSERT_EQUAL(10,it);
1299 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1300 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1304 f1=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
1306 f1->setTimeTolerance(1.e-5);
1307 f1->setDescription("f1Desc");
1308 f2=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
1310 f2->setDescription("f2Desc");
1311 f2->setTimeTolerance(4.556e-12);
1313 f1->copyTinyAttrFrom(f2);
1314 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1315 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1316 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1320 f1=MEDCouplingFieldDouble::New(ON_CELLS,CONST_ON_TIME_INTERVAL);
1322 f1->setTimeTolerance(1.e-5);
1323 f1->setDescription("f1Desc");
1324 f1->setTime(1.23,4,5);
1325 f1->setEndTime(5.43,2,1);
1326 f2=MEDCouplingFieldDouble::New(ON_CELLS,CONST_ON_TIME_INTERVAL);
1328 f2->setDescription("f2Desc");
1329 f2->setTimeTolerance(4.556e-12);
1330 f2->setTime(6.78,9,10);
1331 f2->setEndTime(10.98,7,6);
1333 f1->copyTinyAttrFrom(f2);
1334 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1335 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1336 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1337 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.78,f1->getTime(dt,it),1e-12);
1338 CPPUNIT_ASSERT_EQUAL(9,dt);
1339 CPPUNIT_ASSERT_EQUAL(10,it);
1340 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.98,f1->getEndTime(dt,it),1e-12);
1341 CPPUNIT_ASSERT_EQUAL(7,dt);
1342 CPPUNIT_ASSERT_EQUAL(6,it);
1346 f1=MEDCouplingFieldDouble::New(ON_CELLS,LINEAR_TIME);
1348 f1->setTimeTolerance(1.e-5);
1349 f1->setDescription("f1Desc");
1350 f1->setTime(1.23,4,5);
1351 f1->setEndTime(5.43,2,1);
1352 f2=MEDCouplingFieldDouble::New(ON_CELLS,LINEAR_TIME);
1354 f2->setDescription("f2Desc");
1355 f2->setTimeTolerance(4.556e-12);
1356 f2->setTime(6.78,9,10);
1357 f2->setEndTime(10.98,7,6);
1359 f1->copyTinyAttrFrom(f2);
1360 CPPUNIT_ASSERT_DOUBLES_EQUAL(4.556e-12,f1->getTimeTolerance(),1e-24);
1361 CPPUNIT_ASSERT(std::string(f1->getName())=="f1");//name unchanged
1362 CPPUNIT_ASSERT(std::string(f1->getDescription())=="f1Desc");//description unchanged
1363 CPPUNIT_ASSERT_DOUBLES_EQUAL(6.78,f1->getTime(dt,it),1e-12);
1364 CPPUNIT_ASSERT_EQUAL(9,dt);
1365 CPPUNIT_ASSERT_EQUAL(10,it);
1366 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.98,f1->getEndTime(dt,it),1e-12);
1367 CPPUNIT_ASSERT_EQUAL(7,dt);
1368 CPPUNIT_ASSERT_EQUAL(6,it);
1374 * 1D -> 2D extrusion with rotation
1376 void MEDCouplingBasicsTest3::testExtrudedMesh5()
1378 const double coo1[4]={0.,1.,2.,3.5};
1379 DataArrayDouble *a=DataArrayDouble::New();
1381 std::copy(coo1,coo1+4,a->getPointer());
1382 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
1383 b->setCoordsAt(0,a);
1384 MEDCouplingUMesh *c=b->buildUnstructured();
1385 CPPUNIT_ASSERT_EQUAL(1,c->getSpaceDimension());
1386 c->changeSpaceDimension(2);
1388 DataArrayDouble *d=DataArrayDouble::New();
1391 MEDCouplingCMesh *ee=MEDCouplingCMesh::New();
1392 ee->setCoordsAt(0,d);
1393 MEDCouplingUMesh *f=ee->buildUnstructured();
1394 DataArrayDouble *g=f->getCoords()->applyFunc(2,"3.5*IVec+x/6*3.14159265359*JVec");
1395 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 !
1396 DataArrayDouble *h=g->fromPolarToCart();
1398 MEDCouplingUMesh *i=c->buildExtrudedMesh(f,1);
1399 CPPUNIT_ASSERT_EQUAL(52,i->getNumberOfNodes());
1402 DataArrayInt *tmp=i->mergeNodes(1e-9,tmp2,tmp3);
1403 CPPUNIT_ASSERT(tmp2);
1404 CPPUNIT_ASSERT_EQUAL(37,tmp3);
1406 i->convertDegeneratedCells();
1407 i->checkCoherency();
1408 CPPUNIT_ASSERT_EQUAL(36,i->getNumberOfCells());
1409 CPPUNIT_ASSERT_EQUAL(37,i->getNumberOfNodes());
1410 CPPUNIT_ASSERT_EQUAL(12,i->getNumberOfCellsWithType(INTERP_KERNEL::NORM_TRI3));
1411 CPPUNIT_ASSERT_EQUAL(24,i->getNumberOfCellsWithType(INTERP_KERNEL::NORM_QUAD4));
1412 const double expected1[3]={0.25,0.75,2.0625};
1413 MEDCouplingFieldDouble *j=i->getMeasureField(true);
1414 for(int ii=0;ii<12;ii++)
1415 for(int k=0;k<3;k++)
1416 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[k],j->getIJ(0,ii*3+k),1e-10);
1417 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};
1418 DataArrayDouble *m=i->getBarycenterAndOwner();
1419 for(int ii=0;ii<72;ii++)
1420 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[ii],m->getIJ(0,ii),1e-10);
1436 * 1D -> 2D extrusion without rotation
1438 void MEDCouplingBasicsTest3::testExtrudedMesh6()
1440 const double coo1[4]={0.,1.,2.,3.5};
1441 DataArrayDouble *a=DataArrayDouble::New();
1443 std::copy(coo1,coo1+4,a->getPointer());
1444 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
1445 b->setCoordsAt(0,a);
1446 MEDCouplingUMesh *c=b->buildUnstructured();
1447 CPPUNIT_ASSERT_EQUAL(1,c->getSpaceDimension());
1448 c->changeSpaceDimension(2);
1450 DataArrayDouble *d=DataArrayDouble::New();
1453 MEDCouplingCMesh *e=MEDCouplingCMesh::New();
1454 e->setCoordsAt(0,d);
1455 MEDCouplingUMesh *f=e->buildUnstructured();
1456 DataArrayDouble *d2=f->getCoords()->applyFunc("x*x/2");
1458 f->changeSpaceDimension(2);
1460 const double center[2]={0.,0.};
1461 f->rotate(center,0,M_PI/3);
1462 MEDCouplingUMesh *g=c->buildExtrudedMesh(f,0);
1463 g->checkCoherency();
1464 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 };
1465 MEDCouplingFieldDouble *f1=g->getMeasureField(true);
1466 for(int i=0;i<12;i++)
1467 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getIJ(0,i),1e-12);
1469 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};
1470 DataArrayDouble *f2=g->getBarycenterAndOwner();
1471 for(int i=0;i<24;i++)
1472 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],f2->getIJ(0,i),1e-12);
1487 * 2D -> 3D extrusion with rotation
1489 void MEDCouplingBasicsTest3::testExtrudedMesh7()
1491 const double coo1[4]={0.,1.,2.,3.5};
1492 DataArrayDouble *a=DataArrayDouble::New();
1494 std::copy(coo1,coo1+4,a->getPointer());
1495 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
1496 b->setCoordsAt(0,a);
1497 MEDCouplingUMesh *c=b->buildUnstructured();
1498 CPPUNIT_ASSERT_EQUAL(1,c->getSpaceDimension());
1499 c->changeSpaceDimension(2);
1501 DataArrayDouble *d=DataArrayDouble::New();
1504 MEDCouplingCMesh *e=MEDCouplingCMesh::New();
1505 e->setCoordsAt(0,d);
1506 MEDCouplingUMesh *f=e->buildUnstructured();
1507 DataArrayDouble *g=f->getCoords()->applyFunc(2,"3.5*IVec+x/6*3.14159265359*JVec");
1508 DataArrayDouble *h=g->fromPolarToCart();
1510 MEDCouplingUMesh *i=c->buildExtrudedMesh(f,1);
1511 CPPUNIT_ASSERT_EQUAL(52,i->getNumberOfNodes());
1514 DataArrayInt *tmp=i->mergeNodes(1e-9,tmp2,tmp3);
1515 CPPUNIT_ASSERT(tmp2);
1516 CPPUNIT_ASSERT_EQUAL(37,tmp3);
1518 i->convertDegeneratedCells();
1519 const double vec1[3]={10.,0.,0.};
1521 DataArrayDouble *g2=h->applyFunc(3,"13.5/3.5*x*IVec+0*JVec+13.5/3.5*y*KVec");
1523 i->changeSpaceDimension(3);
1524 MEDCouplingUMesh *i3=i->buildExtrudedMesh(f,1);
1525 MEDCouplingFieldDouble *f2=i3->getMeasureField(true);
1526 tmp=i->mergeNodes(1e-9,tmp2,tmp3);
1527 CPPUNIT_ASSERT(tmp2);
1528 CPPUNIT_ASSERT_EQUAL(444,tmp3);
1530 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};
1532 for(int ii=0;ii<12;ii++)
1533 for(int jj=0;jj<36;jj++,kk++)
1534 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[jj],f2->getIJ(0,kk),1e-9);
1550 void MEDCouplingBasicsTest3::testSimplexize1()
1552 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1553 std::vector<int> v(1);
1555 m->convertToPolyTypes(&v[0],&v[0]+v.size());
1556 DataArrayInt *da=m->simplexize(0);
1557 CPPUNIT_ASSERT_EQUAL(7,da->getNumberOfTuples());
1558 CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1559 const int expected2[7]={0,0,1,2,3,4,4};
1560 for(int i=0;i<7;i++)
1561 CPPUNIT_ASSERT_EQUAL(expected2[i],da->getIJ(i,0));
1562 m->checkCoherency();
1563 CPPUNIT_ASSERT_EQUAL(7,m->getNumberOfCells());
1564 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(0));
1565 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(1));
1566 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(2));
1567 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(3));
1568 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,m->getTypeOfCell(4));
1569 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(5));
1570 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(6));
1571 const double expected1[7]={0.125,0.125,0.125,0.125,0.25,0.125,0.125};
1572 MEDCouplingFieldDouble *f=m->getMeasureField(false);
1573 for(int i=0;i<7;i++)
1574 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i]*sqrt(2.),f->getIJ(i,0),1e-10);
1575 std::set<INTERP_KERNEL::NormalizedCellType> types=m->getAllTypes();
1576 CPPUNIT_ASSERT_EQUAL(2,(int)types.size());
1577 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*(types.begin()));
1578 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,*(++(types.begin())));
1583 m=build3DSurfTargetMesh_1();
1585 m->convertToPolyTypes(&v[0],&v[0]+v.size());
1586 da=m->simplexize(1);
1587 CPPUNIT_ASSERT_EQUAL(7,da->getNumberOfTuples());
1588 CPPUNIT_ASSERT_EQUAL(1,da->getNumberOfComponents());
1589 for(int i=0;i<7;i++)
1590 CPPUNIT_ASSERT_EQUAL(expected2[i],da->getIJ(i,0));
1591 m->checkCoherency();
1592 types=m->getAllTypes();
1593 CPPUNIT_ASSERT_EQUAL(2,(int)types.size());
1594 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,*(types.begin()));
1595 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,*(++(types.begin())));
1596 CPPUNIT_ASSERT_EQUAL(7,m->getNumberOfCells());
1597 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(0));
1598 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(1));
1599 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(2));
1600 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(3));
1601 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POLYGON,m->getTypeOfCell(4));
1602 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(5));
1603 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_TRI3,m->getTypeOfCell(6));
1604 f=m->getMeasureField(false);
1605 for(int i=0;i<7;i++)
1606 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i]*sqrt(2.),f->getIJ(i,0),1e-10);
1612 void MEDCouplingBasicsTest3::testSimplexize2()
1614 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1615 std::vector<int> v(1);
1617 m->convertToPolyTypes(&v[0],&v[0]+v.size());
1618 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1620 DataArrayDouble *arr=DataArrayDouble::New();
1621 const double arr1[10]={10.,110.,20.,120.,30.,130.,40.,140.,50.,150.};
1623 std::copy(arr1,arr1+10,arr->getPointer());
1627 f1->checkCoherency();
1628 CPPUNIT_ASSERT(f1->simplexize(0));
1629 f1->checkCoherency();
1630 const double expected1[14]={10.,110.,10.,110.,20.,120.,30.,130.,40.,140.,50.,150.,50.,150.};
1631 for(int i=0;i<14;i++)
1632 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getIJ(0,i),1e-10);
1633 CPPUNIT_ASSERT(!f1->simplexize(0));
1634 for(int i=0;i<14;i++)
1635 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getIJ(0,i),1e-10);
1641 void MEDCouplingBasicsTest3::testDAMeld1()
1643 DataArrayDouble *da1=DataArrayDouble::New();
1645 DataArrayDouble *da2=DataArrayDouble::New();
1648 da1->fillWithValue(7.);
1650 DataArrayDouble *da3=da2->applyFunc(3,"10*x*IVec+100*x*JVec+1000*x*KVec");
1652 da1->setInfoOnComponent(0,"c0da1");
1653 da1->setInfoOnComponent(1,"c1da1");
1654 da3->setInfoOnComponent(0,"c0da3");
1655 da3->setInfoOnComponent(1,"c1da3");
1656 da3->setInfoOnComponent(2,"c2da3");
1658 DataArrayDouble *da1C=da1->deepCpy();
1660 CPPUNIT_ASSERT_EQUAL(5,da1->getNumberOfComponents());
1661 CPPUNIT_ASSERT_EQUAL(7,da1->getNumberOfTuples());
1662 CPPUNIT_ASSERT(da1->getInfoOnComponent(0)=="c0da1");
1663 CPPUNIT_ASSERT(da1->getInfoOnComponent(1)=="c1da1");
1664 CPPUNIT_ASSERT(da1->getInfoOnComponent(2)=="c0da3");
1665 CPPUNIT_ASSERT(da1->getInfoOnComponent(3)=="c1da3");
1666 CPPUNIT_ASSERT(da1->getInfoOnComponent(4)=="c2da3");
1668 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.};
1669 for(int i=0;i<35;i++)
1670 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da1->getIJ(0,i),1e-10);
1672 DataArrayInt *dai1=da1C->convertToIntArr();
1673 DataArrayInt *dai3=da3->convertToIntArr();
1674 dai1->meldWith(dai3);
1675 CPPUNIT_ASSERT_EQUAL(5,dai1->getNumberOfComponents());
1676 CPPUNIT_ASSERT_EQUAL(7,dai1->getNumberOfTuples());
1677 CPPUNIT_ASSERT(dai1->getInfoOnComponent(0)=="c0da1");
1678 CPPUNIT_ASSERT(dai1->getInfoOnComponent(1)=="c1da1");
1679 CPPUNIT_ASSERT(dai1->getInfoOnComponent(2)=="c0da3");
1680 CPPUNIT_ASSERT(dai1->getInfoOnComponent(3)=="c1da3");
1681 CPPUNIT_ASSERT(dai1->getInfoOnComponent(4)=="c2da3");
1682 for(int i=0;i<35;i++)
1683 CPPUNIT_ASSERT_EQUAL((int)expected1[i],dai1->getIJ(0,i));
1684 // test of static method DataArrayDouble::meld
1685 DataArrayDouble *da4=DataArrayDouble::Meld(da1C,da3);
1686 CPPUNIT_ASSERT_EQUAL(5,da4->getNumberOfComponents());
1687 CPPUNIT_ASSERT_EQUAL(7,da4->getNumberOfTuples());
1688 CPPUNIT_ASSERT(da4->getInfoOnComponent(0)=="c0da1");
1689 CPPUNIT_ASSERT(da4->getInfoOnComponent(1)=="c1da1");
1690 CPPUNIT_ASSERT(da4->getInfoOnComponent(2)=="c0da3");
1691 CPPUNIT_ASSERT(da4->getInfoOnComponent(3)=="c1da3");
1692 CPPUNIT_ASSERT(da4->getInfoOnComponent(4)=="c2da3");
1693 for(int i=0;i<35;i++)
1694 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da4->getIJ(0,i),1e-10);
1695 // test of static method DataArrayInt::meld
1697 dai1=da1C->convertToIntArr();
1698 DataArrayInt *dai4=DataArrayInt::Meld(dai1,dai3);
1699 CPPUNIT_ASSERT_EQUAL(5,dai4->getNumberOfComponents());
1700 CPPUNIT_ASSERT_EQUAL(7,dai4->getNumberOfTuples());
1701 CPPUNIT_ASSERT(dai4->getInfoOnComponent(0)=="c0da1");
1702 CPPUNIT_ASSERT(dai4->getInfoOnComponent(1)=="c1da1");
1703 CPPUNIT_ASSERT(dai4->getInfoOnComponent(2)=="c0da3");
1704 CPPUNIT_ASSERT(dai4->getInfoOnComponent(3)=="c1da3");
1705 CPPUNIT_ASSERT(dai4->getInfoOnComponent(4)=="c2da3");
1706 for(int i=0;i<35;i++)
1707 CPPUNIT_ASSERT_EQUAL((int)expected1[i],dai4->getIJ(0,i));
1719 void MEDCouplingBasicsTest3::testFieldMeld1()
1721 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1722 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1724 DataArrayDouble *da1=DataArrayDouble::New();
1725 const double arr1[5]={12.,23.,34.,45.,56.};
1727 std::copy(arr1,arr1+5,da1->getPointer());
1728 da1->setInfoOnComponent(0,"aaa");
1730 f1->setTime(3.4,2,1);
1731 f1->checkCoherency();
1733 MEDCouplingFieldDouble *f2=f1->deepCpy();
1734 f2->setMesh(f1->getMesh());
1735 f2->checkCoherency();
1736 f2->changeNbOfComponents(2,5.);
1738 f2->getArray()->setInfoOnComponent(0,"bbb");
1739 f2->getArray()->setInfoOnComponent(1,"ccc");
1740 f2->checkCoherency();
1742 MEDCouplingFieldDouble *f3=MEDCouplingFieldDouble::MeldFields(f2,f1);
1743 f3->checkCoherency();
1744 CPPUNIT_ASSERT_EQUAL(5,f3->getNumberOfTuples());
1745 CPPUNIT_ASSERT_EQUAL(3,f3->getNumberOfComponents());
1746 CPPUNIT_ASSERT(f3->getArray()->getInfoOnComponent(0)=="bbb");
1747 CPPUNIT_ASSERT(f3->getArray()->getInfoOnComponent(1)=="ccc");
1748 CPPUNIT_ASSERT(f3->getArray()->getInfoOnComponent(2)=="aaa");
1749 const double expected1[15]={5.,5.,12.,5.,5.,23.,5.,5.,34.,5.,5.,45.,5.,5.,56.};
1750 for(int i=0;i<15;i++)
1751 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f3->getIJ(0,i),1e-12);
1753 double time=f3->getTime(dt,it);
1754 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.4,time,1e-14);
1755 CPPUNIT_ASSERT_EQUAL(2,dt);
1756 CPPUNIT_ASSERT_EQUAL(1,it);
1758 MEDCouplingFieldDouble *f4=f2->buildNewTimeReprFromThis(NO_TIME,false);
1759 MEDCouplingFieldDouble *f5=f1->buildNewTimeReprFromThis(NO_TIME,false);
1760 MEDCouplingFieldDouble *f6=MEDCouplingFieldDouble::MeldFields(f4,f5);
1761 f6->checkCoherency();
1762 CPPUNIT_ASSERT_EQUAL(5,f6->getNumberOfTuples());
1763 CPPUNIT_ASSERT_EQUAL(3,f6->getNumberOfComponents());
1764 CPPUNIT_ASSERT(f6->getArray()->getInfoOnComponent(0)=="bbb");
1765 CPPUNIT_ASSERT(f6->getArray()->getInfoOnComponent(1)=="ccc");
1766 CPPUNIT_ASSERT(f6->getArray()->getInfoOnComponent(2)=="aaa");
1767 for(int i=0;i<15;i++)
1768 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f6->getIJ(0,i),1e-12);
1780 void MEDCouplingBasicsTest3::testMergeNodes2()
1782 MEDCouplingUMesh *m1=build2DTargetMesh_1();
1783 MEDCouplingUMesh *m2=build2DTargetMesh_1();
1784 const double vec[2]={0.002,0.};
1787 std::vector<const MEDCouplingUMesh *> tmp(2);
1790 MEDCouplingUMesh *m3=MEDCouplingUMesh::MergeUMeshes(tmp);
1793 DataArrayInt *da=m3->mergeNodes2(0.01,b,newNbOfNodes);
1794 CPPUNIT_ASSERT_EQUAL(9,m3->getNumberOfNodes());
1795 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};
1796 for(int i=0;i<18;i++)
1797 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],m3->getCoords()->getIJ(0,i),1e-13);
1805 void MEDCouplingBasicsTest3::testMergeField2()
1807 MEDCouplingUMesh *m=build2DTargetMesh_1();
1808 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1810 DataArrayDouble *arr=DataArrayDouble::New();
1812 arr->fillWithValue(2.);
1815 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1817 arr=DataArrayDouble::New();
1819 arr->fillWithValue(5.);
1822 MEDCouplingFieldDouble *f3=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1824 arr=DataArrayDouble::New();
1826 arr->fillWithValue(7.);
1830 std::vector<const MEDCouplingFieldDouble *> tmp(3);
1831 tmp[0]=f1; tmp[1]=f2; tmp[2]=f3;
1832 MEDCouplingFieldDouble *f4=MEDCouplingFieldDouble::MergeFields(tmp);
1833 CPPUNIT_ASSERT_EQUAL(15,f4->getMesh()->getNumberOfCells());
1834 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.};
1835 for(int i=0;i<30;i++)
1836 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f4->getIJ(0,i),1.e-13);
1845 void MEDCouplingBasicsTest3::testDAIBuildComplement1()
1847 DataArrayInt *a=DataArrayInt::New();
1848 const int tab[4]={3,1,7,8};
1850 std::copy(tab,tab+4,a->getPointer());
1851 DataArrayInt *b=a->buildComplement(12);
1852 CPPUNIT_ASSERT_EQUAL(8,b->getNumberOfTuples());
1853 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1854 const int expected1[8]={0,2,4,5,6,9,10,11};
1855 for(int i=0;i<8;i++)
1856 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1861 void MEDCouplingBasicsTest3::testDAIBuildUnion1()
1863 DataArrayInt *a=DataArrayInt::New();
1864 const int tab1[4]={3,1,7,8};
1866 std::copy(tab1,tab1+4,a->getPointer());
1867 DataArrayInt *c=DataArrayInt::New();
1868 const int tab2[5]={5,3,0,18,8};
1870 std::copy(tab2,tab2+5,c->getPointer());
1871 DataArrayInt *b=a->buildUnion(c);
1872 CPPUNIT_ASSERT_EQUAL(7,b->getNumberOfTuples());
1873 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1874 const int expected1[7]={0,1,3,5,7,8,18};
1875 for(int i=0;i<7;i++)
1876 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1882 void MEDCouplingBasicsTest3::testDAIBuildIntersection1()
1884 DataArrayInt *a=DataArrayInt::New();
1885 const int tab1[4]={3,1,7,8};
1887 std::copy(tab1,tab1+4,a->getPointer());
1888 DataArrayInt *c=DataArrayInt::New();
1889 const int tab2[5]={5,3,0,18,8};
1891 std::copy(tab2,tab2+5,c->getPointer());
1892 DataArrayInt *b=a->buildIntersection(c);
1893 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfTuples());
1894 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1895 const int expected1[2]={3,8};
1896 for(int i=0;i<2;i++)
1897 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1903 void MEDCouplingBasicsTest3::testDAIDeltaShiftIndex1()
1905 DataArrayInt *a=DataArrayInt::New();
1906 const int tab[7]={1,3,6,7,7,9,15};
1908 std::copy(tab,tab+7,a->getPointer());
1909 DataArrayInt *b=a->deltaShiftIndex();
1910 CPPUNIT_ASSERT_EQUAL(6,b->getNumberOfTuples());
1911 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
1912 const int expected1[6]={2,3,1,0,2,6};
1913 for(int i=0;i<6;i++)
1914 CPPUNIT_ASSERT_EQUAL(expected1[i],b->getIJ(0,i));
1919 void MEDCouplingBasicsTest3::testDaDoubleSelectByTupleIdSafe1()
1921 DataArrayDouble *a=DataArrayDouble::New();
1923 a->setInfoOnComponent(0,"toto");
1924 a->setInfoOnComponent(1,"tata");
1925 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};
1926 std::copy(arr1,arr1+14,a->getPointer());
1928 const int arr2[7]={4,2,0,6,5};
1929 DataArrayDouble *b=a->selectByTupleIdSafe(arr2,arr2+5);
1930 CPPUNIT_ASSERT_EQUAL(5,b->getNumberOfTuples());
1931 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
1932 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(0))=="toto");
1933 CPPUNIT_ASSERT(std::string(b->getInfoOnComponent(1))=="tata");
1934 const double expected1[10]={5.1,15.1,3.1,13.1,1.1,11.1,7.1,17.1,6.1,16.1};
1935 for(int i=0;i<10;i++)
1936 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
1937 const int arr4[5]={4,-1,0,6,5};
1938 CPPUNIT_ASSERT_THROW(a->selectByTupleIdSafe(arr4,arr4+5),INTERP_KERNEL::Exception);
1939 const int arr5[5]={4,2,0,6,7};
1940 CPPUNIT_ASSERT_THROW(a->selectByTupleIdSafe(arr5,arr5+5),INTERP_KERNEL::Exception);
1944 DataArrayInt *c=DataArrayInt::New();
1946 c->setInfoOnComponent(0,"toto");
1947 c->setInfoOnComponent(1,"tata");
1948 const int arr3[14]={1,11,2,12,3,13,4,14,5,15,6,16,7,17};
1949 std::copy(arr3,arr3+14,c->getPointer());
1950 DataArrayInt *d=c->selectByTupleIdSafe(arr2,arr2+5);
1951 CPPUNIT_ASSERT_EQUAL(5,d->getNumberOfTuples());
1952 CPPUNIT_ASSERT_EQUAL(2,d->getNumberOfComponents());
1953 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(0))=="toto");
1954 CPPUNIT_ASSERT(std::string(d->getInfoOnComponent(1))=="tata");
1955 const int expected2[10]={5,15,3,13,1,11,7,17,6,16};
1956 for(int i=0;i<10;i++)
1957 CPPUNIT_ASSERT_EQUAL(expected2[i],d->getIJ(0,i));
1958 CPPUNIT_ASSERT_THROW(c->selectByTupleIdSafe(arr4,arr4+5),INTERP_KERNEL::Exception);
1959 CPPUNIT_ASSERT_THROW(c->selectByTupleIdSafe(arr5,arr5+5),INTERP_KERNEL::Exception);
1964 void MEDCouplingBasicsTest3::testAreCellsIncludedIn1()
1966 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1967 const int pt[2]={1,3};
1968 MEDCouplingUMesh *m2=(MEDCouplingUMesh *)m->buildPartOfMySelf(pt,pt+2,true);
1970 CPPUNIT_ASSERT(m->areCellsIncludedIn(m2,0,tmp));
1971 CPPUNIT_ASSERT_EQUAL(2,tmp->getNumberOfTuples());
1972 CPPUNIT_ASSERT_EQUAL(1,tmp->getNumberOfComponents());
1973 CPPUNIT_ASSERT_EQUAL(pt[0],tmp->getIJ(0,0));
1974 CPPUNIT_ASSERT_EQUAL(pt[1],tmp->getIJ(0,1));
1976 CPPUNIT_ASSERT(!m2->areCellsIncludedIn(m,0,tmp));
1982 void MEDCouplingBasicsTest3::testDAIBuildSubstraction1()
1984 DataArrayInt *a=DataArrayInt::New();
1985 const int aa[]={2,3,6,8,9};
1987 std::copy(aa,aa+5,a->getPointer());
1988 DataArrayInt *b=DataArrayInt::New();
1989 const int bb[]={1,3,5,9,11};
1991 std::copy(bb,bb+5,b->getPointer());
1993 DataArrayInt *c=a->buildSubstraction(b);
1994 CPPUNIT_ASSERT_EQUAL(3,c->getNumberOfTuples());
1995 CPPUNIT_ASSERT_EQUAL(1,c->getNumberOfComponents());
1996 const int expected1[3]={2,6,8};
1997 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,c->getConstPointer()));
2004 void MEDCouplingBasicsTest3::testBuildOrthogonalField2()
2006 MEDCouplingUMesh *m=build2DTargetMesh_1();
2007 DataArrayInt *d1=DataArrayInt::New();
2008 DataArrayInt *d2=DataArrayInt::New();
2009 DataArrayInt *d3=DataArrayInt::New();
2010 DataArrayInt *d4=DataArrayInt::New();
2011 MEDCouplingUMesh *m1=m->buildDescendingConnectivity(d1,d2,d3,d4);
2013 MEDCouplingFieldDouble *f1=m1->buildOrthogonalField();
2014 DataArrayDouble *da1=f1->getArray();
2015 CPPUNIT_ASSERT_EQUAL(2,da1->getNumberOfComponents());
2016 CPPUNIT_ASSERT_EQUAL(13,da1->getNumberOfTuples());
2018 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.};
2019 for(int i=0;i<26;i++)
2020 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da1->getIJ(0,i),1e-14);
2031 void MEDCouplingBasicsTest3::testUMInsertNextCell1()
2033 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 };
2034 int targetConn[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
2035 MEDCouplingUMesh *targetMesh=MEDCouplingUMesh::New();
2036 targetMesh->allocateCells(5);
2037 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn),INTERP_KERNEL::Exception);
2038 targetMesh->setMeshDimension(2);
2039 targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn);
2040 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,targetConn),INTERP_KERNEL::Exception);
2041 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_SEG2,2,targetConn),INTERP_KERNEL::Exception);
2042 CPPUNIT_ASSERT_THROW(targetMesh->insertNextCell(INTERP_KERNEL::NORM_POINT1,1,targetConn),INTERP_KERNEL::Exception);
2043 targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+4);
2044 targetMesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,targetConn+7);
2045 targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+10);
2046 targetMesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,targetConn+14);
2047 targetMesh->finishInsertingCells();
2048 DataArrayDouble *myCoords=DataArrayDouble::New();
2049 myCoords->alloc(9,2);
2050 std::copy(targetCoords,targetCoords+18,myCoords->getPointer());
2051 targetMesh->setCoords(myCoords);
2052 myCoords->decrRef();
2053 targetMesh->checkCoherency();
2054 targetMesh->decrRef();
2057 void MEDCouplingBasicsTest3::testFieldOperatorDivDiffComp1()
2059 MEDCouplingUMesh *m=build2DTargetMesh_1();
2060 DataArrayInt *d1=DataArrayInt::New();
2061 DataArrayInt *d2=DataArrayInt::New();
2062 DataArrayInt *d3=DataArrayInt::New();
2063 DataArrayInt *d4=DataArrayInt::New();
2064 MEDCouplingUMesh *m1=m->buildDescendingConnectivity(d1,d2,d3,d4);
2066 MEDCouplingFieldDouble *f1=m1->buildOrthogonalField();
2067 const double arr1[13]={2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.};
2068 DataArrayDouble *arr=DataArrayDouble::New();
2070 std::copy(arr1,arr1+13,arr->getPointer());
2071 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::New(ON_CELLS);
2074 f2->checkCoherency();
2076 MEDCouplingFieldDouble *f3=(*f1)/(*f2);
2077 CPPUNIT_ASSERT_THROW((*f2)/(*f1),INTERP_KERNEL::Exception);
2078 f3->checkCoherency();
2080 CPPUNIT_ASSERT(f1->isEqual(f3,1e-10,1e-10));
2081 CPPUNIT_ASSERT_THROW((*f2)/=(*f1),INTERP_KERNEL::Exception);
2082 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};
2083 for(int i=0;i<26;i++)
2084 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f3->getIJ(0,i),1e-10);
2098 void MEDCouplingBasicsTest3::testDARearrange1()
2100 DataArrayInt *da1=DataArrayInt::New();
2103 const int *ptr=da1->getConstPointer();
2105 CPPUNIT_ASSERT_EQUAL(12,da1->getNbOfElems());
2106 CPPUNIT_ASSERT_EQUAL(1,da1->getNumberOfComponents());
2107 CPPUNIT_ASSERT_EQUAL(12,da1->getNumberOfTuples());
2109 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2110 CPPUNIT_ASSERT_EQUAL(12,da1->getNbOfElems());
2111 CPPUNIT_ASSERT_EQUAL(4,da1->getNumberOfComponents());
2112 CPPUNIT_ASSERT_EQUAL(3,da1->getNumberOfTuples());
2113 for(int i=0;i<12;i++)
2114 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2117 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2118 CPPUNIT_ASSERT_EQUAL(12,da1->getNbOfElems());
2119 CPPUNIT_ASSERT_EQUAL(6,da1->getNumberOfComponents());
2120 CPPUNIT_ASSERT_EQUAL(2,da1->getNumberOfTuples());
2121 for(int i=0;i<12;i++)
2122 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2124 CPPUNIT_ASSERT_THROW(da1->rearrange(7),INTERP_KERNEL::Exception);
2127 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2128 CPPUNIT_ASSERT_EQUAL(12,da1->getNbOfElems());
2129 CPPUNIT_ASSERT_EQUAL(12,da1->getNumberOfComponents());
2130 CPPUNIT_ASSERT_EQUAL(1,da1->getNumberOfTuples());
2131 for(int i=0;i<12;i++)
2132 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2135 CPPUNIT_ASSERT(ptr==da1->getConstPointer());
2136 CPPUNIT_ASSERT_EQUAL(12,da1->getNbOfElems());
2137 CPPUNIT_ASSERT_EQUAL(3,da1->getNumberOfComponents());
2138 CPPUNIT_ASSERT_EQUAL(4,da1->getNumberOfTuples());
2139 for(int i=0;i<12;i++)
2140 CPPUNIT_ASSERT_EQUAL(i,da1->getIJ(0,i));
2142 DataArrayDouble *da2=da1->convertToDblArr();
2144 const double *ptr2=da2->getConstPointer();
2146 CPPUNIT_ASSERT_EQUAL(12,da2->getNbOfElems());
2147 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());
2148 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfTuples());
2150 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2151 CPPUNIT_ASSERT_EQUAL(12,da2->getNbOfElems());
2152 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfComponents());
2153 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfTuples());
2154 for(int i=0;i<12;i++)
2155 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2158 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2159 CPPUNIT_ASSERT_EQUAL(12,da2->getNbOfElems());
2160 CPPUNIT_ASSERT_EQUAL(6,da2->getNumberOfComponents());
2161 CPPUNIT_ASSERT_EQUAL(2,da2->getNumberOfTuples());
2162 for(int i=0;i<12;i++)
2163 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2165 CPPUNIT_ASSERT_THROW(da2->rearrange(7),INTERP_KERNEL::Exception);
2168 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2169 CPPUNIT_ASSERT_EQUAL(12,da2->getNbOfElems());
2170 CPPUNIT_ASSERT_EQUAL(1,da2->getNumberOfComponents());
2171 CPPUNIT_ASSERT_EQUAL(12,da2->getNumberOfTuples());
2172 for(int i=0;i<12;i++)
2173 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2176 CPPUNIT_ASSERT(ptr2==da2->getConstPointer());
2177 CPPUNIT_ASSERT_EQUAL(12,da2->getNbOfElems());
2178 CPPUNIT_ASSERT_EQUAL(3,da2->getNumberOfComponents());
2179 CPPUNIT_ASSERT_EQUAL(4,da2->getNumberOfTuples());
2180 for(int i=0;i<12;i++)
2181 CPPUNIT_ASSERT_DOUBLES_EQUAL((double)i,da2->getIJ(0,i),1e-14);
2185 void MEDCouplingBasicsTest3::testGetDifferentValues1()
2187 DataArrayInt *da1=DataArrayInt::New();
2188 const int arr[12]={1,2,3,2,2,3,5,1,5,5,2,2};
2190 std::copy(arr,arr+12,da1->getPointer());
2191 std::set<int> s=da1->getDifferentValues();
2192 const int expected1[4]={1,2,3,5};
2193 CPPUNIT_ASSERT_EQUAL(4,(int)s.size());
2194 CPPUNIT_ASSERT(std::equal(expected1,expected1+4,s.begin()));
2198 void MEDCouplingBasicsTest3::testDAIBuildPermutationArr1()
2200 DataArrayInt *a=DataArrayInt::New();
2201 const int vala[5]={4,5,6,7,8};
2203 std::copy(vala,vala+5,a->getPointer());
2204 DataArrayInt *b=DataArrayInt::New();
2205 const int valb[5]={5,4,8,6,7};
2207 std::copy(valb,valb+5,b->getPointer());
2208 DataArrayInt *c=a->buildPermutationArr(*b);
2209 const int expect1[5]={1,0,4,2,3};
2210 CPPUNIT_ASSERT_EQUAL(5,c->getNumberOfTuples());
2211 CPPUNIT_ASSERT_EQUAL(1,c->getNumberOfComponents());
2212 CPPUNIT_ASSERT(std::equal(expect1,expect1+5,c->getConstPointer()));
2213 CPPUNIT_ASSERT(a->isEqualWithoutConsideringStrAndOrder(*b));
2215 CPPUNIT_ASSERT(!a->isEqualWithoutConsideringStrAndOrder(*b));
2216 CPPUNIT_ASSERT_THROW(a->buildPermutationArr(*b),INTERP_KERNEL::Exception);
2219 b->setIJ(4,0,4);//;a==[4,5,6,4,8] and b==[5,4,8,6,4]
2220 CPPUNIT_ASSERT(a->isEqualWithoutConsideringStrAndOrder(*b));
2222 c=a->buildPermutationArr(*b);
2223 const int expect2[5]={1,3,4,2,3};
2224 CPPUNIT_ASSERT(std::equal(expect2,expect2+5,c->getConstPointer()));
2225 DataArrayDouble *d=b->convertToDblArr();
2227 const int expect3[5]={4,4,5,6,8};
2228 CPPUNIT_ASSERT(std::equal(expect3,expect3+5,b->getConstPointer()));
2230 CPPUNIT_ASSERT_EQUAL(5,d->getNumberOfTuples());
2231 CPPUNIT_ASSERT_EQUAL(1,d->getNumberOfComponents());
2232 for(int i=0;i<5;i++)
2233 CPPUNIT_ASSERT_DOUBLES_EQUAL(double(expect3[i]),d->getIJ(i,0),1e-14);
2241 void MEDCouplingBasicsTest3::testAreCellsIncludedIn2()
2243 const char myName[]="Vitoo";
2244 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
2245 MEDCouplingUMesh *m2=(MEDCouplingUMesh *)m->buildPartOfMySelf(0,0,true);
2246 CPPUNIT_ASSERT_EQUAL(0,m2->getNumberOfCells());
2247 CPPUNIT_ASSERT_EQUAL(3,m2->getSpaceDimension());
2248 CPPUNIT_ASSERT_EQUAL(2,m2->getMeshDimension());
2249 m2->setName(myName);
2251 CPPUNIT_ASSERT(m->areCellsIncludedIn(m2,0,tmp));
2252 CPPUNIT_ASSERT(std::string(myName)==tmp->getName());
2253 CPPUNIT_ASSERT_EQUAL(0,tmp->getNumberOfTuples());
2254 CPPUNIT_ASSERT_EQUAL(1,tmp->getNumberOfComponents());
2260 void MEDCouplingBasicsTest3::testUMeshGetPartBarycenterAndOwner1()
2262 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2263 const int part[3]={1,0,4};
2264 DataArrayDouble *b=m1->getPartBarycenterAndOwner(part,part+3);
2265 CPPUNIT_ASSERT_EQUAL(2,b->getNumberOfComponents());
2266 CPPUNIT_ASSERT_EQUAL(3,b->getNumberOfTuples());
2267 const double expected1[6]={0.36666666666666665,-0.13333333333333333,-0.05,-0.05,0.45,0.45};
2268 for(int i=0;i<6;i++)
2269 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
2274 void MEDCouplingBasicsTest3::testUMeshGetPartMeasureField1()
2276 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2277 const int part[3]={1,0,4};
2278 DataArrayDouble *b=m1->getPartMeasureField(true,part,part+3);
2279 CPPUNIT_ASSERT_EQUAL(1,b->getNumberOfComponents());
2280 CPPUNIT_ASSERT_EQUAL(3,b->getNumberOfTuples());
2281 const double expected1[3]={0.125,0.25,0.25};
2282 for(int i=0;i<3;i++)
2283 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getIJ(0,i),1e-14);
2288 void MEDCouplingBasicsTest3::testUMeshBuildPartOrthogonalField1()
2290 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2291 m1->changeSpaceDimension(3);
2292 const int part[3]={1,0,4};
2293 MEDCouplingFieldDouble *b=m1->buildPartOrthogonalField(part,part+3);
2294 CPPUNIT_ASSERT_EQUAL(3,b->getArray()->getNumberOfComponents());
2295 CPPUNIT_ASSERT_EQUAL(3,b->getArray()->getNumberOfTuples());
2296 const double expected1[9]={0.,0.,-1.,0.,0.,-1.,0.,0.,-1.};
2297 for(int i=0;i<9;i++)
2298 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],b->getArray()->getIJ(0,i),1e-14);
2303 void MEDCouplingBasicsTest3::testUMeshGetTypesOfPart1()
2305 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2306 const int part1[]={0,3,4};
2307 std::set<INTERP_KERNEL::NormalizedCellType> s;
2308 s=m1->getTypesOfPart(part1,part1+3);
2309 CPPUNIT_ASSERT(s.size()==1);
2310 CPPUNIT_ASSERT(*s.begin()==INTERP_KERNEL::NORM_QUAD4);
2311 const int part2[]={2,2,2,1};
2312 s=m1->getTypesOfPart(part2,part2+4);
2313 CPPUNIT_ASSERT(s.size()==1);
2314 CPPUNIT_ASSERT(*s.begin()==INTERP_KERNEL::NORM_TRI3);
2315 const int part3[]={3,2,1};
2316 s=m1->getTypesOfPart(part3,part3+3);
2317 CPPUNIT_ASSERT(s.size()==2);
2318 CPPUNIT_ASSERT(*s.begin()==INTERP_KERNEL::NORM_TRI3);
2319 CPPUNIT_ASSERT(*(++s.begin())==INTERP_KERNEL::NORM_QUAD4);
2323 void MEDCouplingBasicsTest3::testUMeshKeepCellIdsByType1()
2325 MEDCouplingUMesh *m1=build2DTargetMesh_1();
2326 const int part1[3]={0,3,4};
2327 DataArrayInt *a=m1->keepCellIdsByType(INTERP_KERNEL::NORM_TRI3,part1,part1+3);
2328 CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
2329 CPPUNIT_ASSERT_EQUAL(0,a->getNumberOfTuples());
2332 const int part2[5]={3,2,0,2,4};
2333 a=m1->keepCellIdsByType(INTERP_KERNEL::NORM_TRI3,part2,part2+5);
2334 CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
2335 CPPUNIT_ASSERT_EQUAL(2,a->getNumberOfTuples());
2336 CPPUNIT_ASSERT_EQUAL(2,a->getIJ(0,0));
2337 CPPUNIT_ASSERT_EQUAL(2,a->getIJ(1,0));
2340 a=m1->keepCellIdsByType(INTERP_KERNEL::NORM_QUAD4,part2,part2+5);
2341 CPPUNIT_ASSERT_EQUAL(1,a->getNumberOfComponents());
2342 CPPUNIT_ASSERT_EQUAL(3,a->getNumberOfTuples());
2343 CPPUNIT_ASSERT_EQUAL(3,a->getIJ(0,0));
2344 CPPUNIT_ASSERT_EQUAL(0,a->getIJ(1,0));
2345 CPPUNIT_ASSERT_EQUAL(4,a->getIJ(2,0));
2351 void MEDCouplingBasicsTest3::testDAIAggregateMulti1()
2353 DataArrayInt *a=DataArrayInt::New();
2358 DataArrayInt *b=DataArrayInt::New();
2364 std::vector<const DataArrayInt *> v(2);
2366 DataArrayInt *c=DataArrayInt::Aggregate(v);
2367 CPPUNIT_ASSERT_EQUAL(5,c->getNumberOfTuples());
2368 CPPUNIT_ASSERT_EQUAL(2,c->getNumberOfComponents());
2369 CPPUNIT_ASSERT(c->getName()=="aa");
2370 const int expect1[10]={0,1,2,3,0,1,2,3,4,5};
2371 for(int i=0;i<10;i++)
2372 CPPUNIT_ASSERT_EQUAL(expect1[i],c->getIJ(0,i));
2379 void MEDCouplingBasicsTest3::testMergeUMeshes2()
2381 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
2382 MEDCouplingUMesh *m2=build3DSurfTargetMesh_1();
2383 MEDCouplingUMesh *m3=build3DSurfTargetMesh_1();
2385 const int vec1[3]={0,2,3};
2386 MEDCouplingUMesh *m2_2=(MEDCouplingUMesh *)m2->buildPartOfMySelf(vec1,vec1+3,false);
2387 const int vec2[2]={1,1};
2388 MEDCouplingUMesh *m3_2=(MEDCouplingUMesh *)m3->buildPartOfMySelf(vec2,vec2+2,false);
2390 std::vector<const MEDCouplingUMesh *> ms(3);
2391 std::vector<const MEDCouplingMesh *> ms2(3);
2392 ms[0]=m1; ms[1]=m2_2; ms[2]=m3_2;
2393 ms2[0]=m1; ms2[1]=m2_2; ms2[2]=m3_2;
2395 MEDCouplingUMesh *m4=MEDCouplingUMesh::MergeUMeshes(ms);
2396 m4->checkCoherency();
2397 CPPUNIT_ASSERT_EQUAL(10,m4->getNumberOfCells());
2398 CPPUNIT_ASSERT_EQUAL(20,m4->getNumberOfNodes());
2399 CPPUNIT_ASSERT_EQUAL(45,m4->getMeshLength());
2401 MEDCouplingMesh *m4bis=MEDCouplingMesh::MergeMeshes(ms2);
2402 CPPUNIT_ASSERT(m4->isEqual(m4bis,1e-12));
2405 const int vec3[5]={0,1,2,3,4};
2406 MEDCouplingUMesh *m4_1=(MEDCouplingUMesh *)m4->buildPartOfMySelf(vec3,vec3+5,false);
2407 m4_1->setName(m1->getName());
2408 CPPUNIT_ASSERT(m4_1->isEqual(m1,1e-12));
2411 const int vec4[3]={5,6,7};
2412 MEDCouplingUMesh *m4_2=(MEDCouplingUMesh *)m4->buildPartOfMySelf(vec4,vec4+3,false);
2413 DataArrayInt *cellCor=0;
2414 DataArrayInt *nodeCor=0;
2415 m4_2->checkGeoEquivalWith(m2_2,10,1e-12,cellCor,nodeCor);
2416 CPPUNIT_ASSERT(cellCor==0);
2417 CPPUNIT_ASSERT(nodeCor==0);
2420 const int vec5[2]={8,9};
2421 MEDCouplingUMesh *m4_3=(MEDCouplingUMesh *)m4->buildPartOfMySelf(vec5,vec5+2,false);
2422 CPPUNIT_ASSERT_EQUAL(2,m4_3->getNumberOfCells());
2423 CPPUNIT_ASSERT_EQUAL(3,m4_3->getNumberOfNodes());
2425 m4_3->setName(m3_2->getName());
2426 CPPUNIT_ASSERT(m4_3->isEqual(m3_2,1e-12));
2437 void MEDCouplingBasicsTest3::testBuild0DMeshFromCoords1()
2439 const double sourceCoords[12]={-0.3,-0.3,0., 0.7,-0.3,0., -0.3,0.7,0., 0.7,0.7,0.};
2440 DataArrayDouble *coo=DataArrayDouble::New();
2442 coo->setName("My0D");
2443 std::copy(sourceCoords,sourceCoords+12,coo->getPointer());
2444 MEDCouplingUMesh *m=MEDCouplingUMesh::Build0DMeshFromCoords(coo);
2445 m->checkCoherency();
2446 CPPUNIT_ASSERT_EQUAL(4,m->getNumberOfNodes());
2447 CPPUNIT_ASSERT_EQUAL(4,m->getNumberOfCells());
2448 CPPUNIT_ASSERT_EQUAL(3,m->getSpaceDimension());
2449 CPPUNIT_ASSERT_EQUAL(0,m->getMeshDimension());
2450 const std::set<INTERP_KERNEL::NormalizedCellType>& types=m->getAllTypes();
2451 CPPUNIT_ASSERT_EQUAL(1,(int)types.size());
2452 CPPUNIT_ASSERT_EQUAL(INTERP_KERNEL::NORM_POINT1,*types.begin());
2453 for(int i=0;i<4;i++)
2455 std::vector<int> conn;
2456 m->getNodeIdsOfCell(i,conn);
2457 CPPUNIT_ASSERT_EQUAL(1,(int)conn.size());
2458 CPPUNIT_ASSERT_EQUAL(i,conn[0]);
2459 CPPUNIT_ASSERT(INTERP_KERNEL::NORM_POINT1==m->getTypeOfCell(i));
2461 CPPUNIT_ASSERT(std::string(m->getName())=="My0D");