1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (CEA/DEN)
21 #include "MEDCouplingBasicsTest4.hxx"
22 #include "MEDCouplingUMesh.hxx"
23 #include "MEDCouplingCMesh.hxx"
24 #include "MEDCouplingMappedExtrudedMesh.hxx"
25 #include "MEDCouplingFieldDouble.hxx"
26 #include "MEDCouplingMemArray.hxx"
27 #include "MEDCouplingGaussLocalization.hxx"
28 #include "MEDCouplingMultiFields.hxx"
29 #include "MEDCouplingFieldOverTime.hxx"
35 using namespace MEDCoupling;
37 void MEDCouplingBasicsTest4::testDescriptionInMeshTimeUnit1()
39 static const char text1[]="totoTTEDD";
40 MEDCouplingUMesh *m=build2DTargetMesh_1();
41 m->setDescription(text1);
42 CPPUNIT_ASSERT(std::string(m->getDescription())==text1);
43 MEDCouplingUMesh *m2=(MEDCouplingUMesh *)m->deepCopy();
44 CPPUNIT_ASSERT(m->isEqual(m2,1e-12));
45 CPPUNIT_ASSERT(std::string(m2->getDescription())==text1);
46 m2->setDescription("ggg");
47 CPPUNIT_ASSERT(!m->isEqual(m2,1e-12));
50 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
51 f->setTimeUnit(text1);
52 CPPUNIT_ASSERT(std::string(f->getTimeUnit())==text1);
53 MEDCouplingFieldDouble *f2=f->deepCopy();
54 CPPUNIT_ASSERT(std::string(f2->getTimeUnit())==text1);
61 void MEDCouplingBasicsTest4::testMultiFields1()
63 MEDCouplingMultiFields *mfs=buildMultiFields_1();
64 std::vector<MEDCouplingMesh *> ms=mfs->getMeshes();
65 std::vector<int> refs;
66 std::vector<MEDCouplingMesh *> dms=mfs->getDifferentMeshes(refs);
67 std::vector<DataArrayDouble *> das=mfs->getArrays();
68 std::vector< std::vector<int> > refs2;
69 std::vector<DataArrayDouble *> das2=mfs->getDifferentArrays(refs2);
71 CPPUNIT_ASSERT_EQUAL(5,(int)ms.size());
72 CPPUNIT_ASSERT_EQUAL(2,(int)dms.size());
73 CPPUNIT_ASSERT_EQUAL(6,(int)das.size());
74 CPPUNIT_ASSERT_EQUAL(5,(int)das2.size());
76 MEDCouplingMultiFields *mfs2=mfs->deepCopy();
77 CPPUNIT_ASSERT(mfs->isEqual(mfs2,1e-12,1e-12));
83 void MEDCouplingBasicsTest4::testFieldOverTime1()
85 std::vector<MEDCouplingFieldDouble *> fs=buildMultiFields_2();
86 CPPUNIT_ASSERT_THROW(MEDCouplingFieldOverTime::New(fs),INTERP_KERNEL::Exception);
87 MEDCouplingFieldDouble *f4bis=fs[4]->buildNewTimeReprFromThis(ONE_TIME,false);
90 CPPUNIT_ASSERT_THROW(MEDCouplingFieldOverTime::New(fs),INTERP_KERNEL::Exception);
91 f4bis->setTime(2.7,20,21);
92 MEDCouplingFieldOverTime *fot=MEDCouplingFieldOverTime::New(fs);
93 MEDCouplingDefinitionTime dt=fot->getDefinitionTimeZone();
94 std::vector<double> hs=dt.getHotSpotsTime();
95 CPPUNIT_ASSERT_EQUAL(6,(int)hs.size());
96 const double expected1[]={0.2,0.7,1.2,1.35,1.7,2.7};
98 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],hs[i],1e-12);
99 int meshId,arrId,arrIdInField,fieldId;
100 dt.getIdsOnTimeRight(0.2,meshId,arrId,arrIdInField,fieldId);
101 CPPUNIT_ASSERT_EQUAL(0,meshId);
102 CPPUNIT_ASSERT_EQUAL(0,arrId);
103 CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
104 CPPUNIT_ASSERT_EQUAL(0,fieldId);
106 dt.getIdsOnTimeRight(0.7,meshId,arrId,arrIdInField,fieldId);
107 CPPUNIT_ASSERT_EQUAL(0,meshId);
108 CPPUNIT_ASSERT_EQUAL(1,arrId);
109 CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
110 CPPUNIT_ASSERT_EQUAL(1,fieldId);
112 dt.getIdsOnTimeLeft(1.2,meshId,arrId,arrIdInField,fieldId);//**** WARNING left here
113 CPPUNIT_ASSERT_EQUAL(0,meshId);
114 CPPUNIT_ASSERT_EQUAL(2,arrId);
115 CPPUNIT_ASSERT_EQUAL(1,arrIdInField);
116 CPPUNIT_ASSERT_EQUAL(1,fieldId);
118 dt.getIdsOnTimeRight(1.2,meshId,arrId,arrIdInField,fieldId);//**** WARNING right again here
119 CPPUNIT_ASSERT_EQUAL(1,meshId);
120 CPPUNIT_ASSERT_EQUAL(3,arrId);
121 CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
122 CPPUNIT_ASSERT_EQUAL(2,fieldId);
124 dt.getIdsOnTimeRight(1.35,meshId,arrId,arrIdInField,fieldId);
125 CPPUNIT_ASSERT_EQUAL(1,meshId);
126 CPPUNIT_ASSERT_EQUAL(3,arrId);
127 CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
128 CPPUNIT_ASSERT_EQUAL(2,fieldId);
130 dt.getIdsOnTimeRight(1.7,meshId,arrId,arrIdInField,fieldId);
131 CPPUNIT_ASSERT_EQUAL(0,meshId);
132 CPPUNIT_ASSERT_EQUAL(3,arrId);
133 CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
134 CPPUNIT_ASSERT_EQUAL(3,fieldId);
136 dt.getIdsOnTimeRight(2.7,meshId,arrId,arrIdInField,fieldId);
137 CPPUNIT_ASSERT_EQUAL(1,meshId);
138 CPPUNIT_ASSERT_EQUAL(4,arrId);
139 CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
140 CPPUNIT_ASSERT_EQUAL(4,fieldId);
142 MEDCouplingDefinitionTime dt2;
143 CPPUNIT_ASSERT(!dt2.isEqual(dt));
145 dt2.assign(dt);//to check memory management
146 CPPUNIT_ASSERT(dt2.isEqual(dt));
148 MEDCouplingDefinitionTime dt3;
149 std::vector<int> tmp1;
150 std::vector<double> tmp2;
151 CPPUNIT_ASSERT(!dt2.isEqual(dt3));
152 dt2.getTinySerializationInformation(tmp1,tmp2);
153 dt3.unserialize(tmp1,tmp2);
154 CPPUNIT_ASSERT(dt2.isEqual(dt3));
156 for(std::vector<MEDCouplingFieldDouble *>::iterator it=fs.begin();it!=fs.end();it++)
161 void MEDCouplingBasicsTest4::testDAICheckAndPreparePermutation1()
163 const int vals1[]={9,10,0,6,4,11,3,7};
164 const int expect1[]={5,6,0,3,2,7,1,4};
165 const int vals2[]={9,10,0,6,10,11,3,7};
166 DataArrayInt *da=DataArrayInt::New();
168 std::copy(vals1,vals1+8,da->getPointer());
169 DataArrayInt *da2=da->checkAndPreparePermutation();
170 CPPUNIT_ASSERT_EQUAL(8,(int)da2->getNumberOfTuples());
171 CPPUNIT_ASSERT_EQUAL(1,(int)da2->getNumberOfComponents());
173 CPPUNIT_ASSERT_EQUAL(expect1[i],da2->getIJ(i,0));
177 da=DataArrayInt::New();
180 da2=da->checkAndPreparePermutation();
181 CPPUNIT_ASSERT_EQUAL(1,(int)da2->getNumberOfComponents());
182 CPPUNIT_ASSERT(da2->isIota(8));
186 da=DataArrayInt::New();
188 std::copy(vals2,vals2+8,da->getPointer());
189 CPPUNIT_ASSERT_THROW(da->checkAndPreparePermutation(),INTERP_KERNEL::Exception);
193 void MEDCouplingBasicsTest4::testDAIChangeSurjectiveFormat1()
195 const int vals1[8]={0,3,2,3,2,2,1,2};
196 const int expected1[5]={0,1,2,6,8};
197 const int expected2[8]={0, 6, 2,4,5,7, 1,3};
198 DataArrayInt *da=DataArrayInt::New();
200 std::copy(vals1,vals1+8,da->getPointer());
202 DataArrayInt *da2,*da2I;
203 da->changeSurjectiveFormat(4,da2,da2I);
204 CPPUNIT_ASSERT_EQUAL(5,(int)da2I->getNumberOfTuples());
205 CPPUNIT_ASSERT_EQUAL(8,(int)da2->getNumberOfTuples());
206 CPPUNIT_ASSERT(std::equal(expected1,expected1+5,da2I->getConstPointer()));
207 CPPUNIT_ASSERT(std::equal(expected2,expected2+8,da2->getConstPointer()));
211 CPPUNIT_ASSERT_THROW(da->changeSurjectiveFormat(3,da2,da2I),INTERP_KERNEL::Exception);
216 void MEDCouplingBasicsTest4::testUMeshGetCellIdsLyingOnNodes1()
218 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
219 const int nodeIds1[5]={1,2,3,4,6};
220 const int nodeIds2[2]={6,7};
221 DataArrayInt *da=m->getCellIdsLyingOnNodes(nodeIds1,nodeIds1+5,true);
222 CPPUNIT_ASSERT_EQUAL(1,(int)da->getNumberOfTuples());
223 CPPUNIT_ASSERT_EQUAL(1,(int)da->getNumberOfComponents());
224 CPPUNIT_ASSERT_EQUAL(1,da->getIJ(0,0));
226 da=m->getCellIdsLyingOnNodes(nodeIds2,nodeIds2+2,false);
227 CPPUNIT_ASSERT_EQUAL(2,(int)da->getNumberOfTuples());
228 CPPUNIT_ASSERT_EQUAL(1,(int)da->getNumberOfComponents());
229 CPPUNIT_ASSERT_EQUAL(3,da->getIJ(0,0));
230 CPPUNIT_ASSERT_EQUAL(4,da->getIJ(1,0));
236 void MEDCouplingBasicsTest4::testUMeshFindCellIdsOnBoundary1()
238 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
239 DataArrayInt *da5=m->findCellIdsOnBoundary();
240 CPPUNIT_ASSERT(da5->isIota(5));
246 void MEDCouplingBasicsTest4::testMeshSetTime1()
248 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
249 MEDCouplingUMesh *m2=build3DSurfTargetMesh_1();
251 CPPUNIT_ASSERT(m1->isEqual(m2,1e-12));
252 m1->setTime(3.14,6,7);
254 double tmp3=m1->getTime(tmp1,tmp2);
255 CPPUNIT_ASSERT_EQUAL(6,tmp1);
256 CPPUNIT_ASSERT_EQUAL(7,tmp2);
257 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.14,tmp3,1e-12);
258 CPPUNIT_ASSERT(!m1->isEqual(m2,1e-12));
259 m2->setTime(3.14,6,7);
260 CPPUNIT_ASSERT(m1->isEqual(m2,1e-12));
261 m1->setTimeUnit("ms");
262 CPPUNIT_ASSERT(std::string(m1->getTimeUnit())=="ms");
263 m1->setTimeUnit("us");
264 CPPUNIT_ASSERT(std::string(m1->getTimeUnit())=="us");
265 CPPUNIT_ASSERT(!m1->isEqual(m2,1e-12));
266 m2->setTimeUnit("us");
267 CPPUNIT_ASSERT(m1->isEqual(m2,1e-12));
268 m2->setTime(3.14,6,8);
269 CPPUNIT_ASSERT(!m1->isEqual(m2,1e-12));
270 m2->setTime(3.14,7,7);
271 CPPUNIT_ASSERT(!m1->isEqual(m2,1e-12));
272 m2->setTime(3.15,6,7);
273 CPPUNIT_ASSERT(!m1->isEqual(m2,1e-12));
275 m1->setTime(10.34,55,12);
276 MEDCouplingUMesh *m3=(MEDCouplingUMesh *)m1->deepCopy();
277 CPPUNIT_ASSERT(m1->isEqual(m3,1e-12));
278 tmp3=m3->getTime(tmp1,tmp2);
279 CPPUNIT_ASSERT_EQUAL(55,tmp1);
280 CPPUNIT_ASSERT_EQUAL(12,tmp2);
281 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.34,tmp3,1e-12);
287 const double coo1[4]={0.,1.,2.,3.5};
288 DataArrayDouble *a=DataArrayDouble::New();
290 std::copy(coo1,coo1+4,a->getPointer());
291 MEDCouplingCMesh *b=MEDCouplingCMesh::New();
295 b->setTime(5.67,8,100);
296 tmp3=b->getTime(tmp1,tmp2);
297 CPPUNIT_ASSERT_EQUAL(8,tmp1);
298 CPPUNIT_ASSERT_EQUAL(100,tmp2);
299 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.67,tmp3,1e-12);
300 MEDCouplingCMesh *c=(MEDCouplingCMesh *)b->deepCopy();
301 CPPUNIT_ASSERT(c->isEqual(b,1e-12));
302 tmp3=c->getTime(tmp1,tmp2);
303 CPPUNIT_ASSERT_EQUAL(8,tmp1);
304 CPPUNIT_ASSERT_EQUAL(100,tmp2);
305 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.67,tmp3,1e-12);
310 void MEDCouplingBasicsTest4::testApplyFuncTwo1()
312 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
313 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
316 const double vals[15]={1.,11.,21.,2.,12.,22.,3.,13.,23.,4.,14.,24.,5.,15.,25.};
317 DataArrayDouble *da=DataArrayDouble::New();
319 std::copy(vals,vals+15,da->getPointer());
322 CPPUNIT_ASSERT_THROW(da->applyFuncCompo(1,"y+z"),INTERP_KERNEL::Exception);
323 da->setInfoOnComponent(0,"x [m]");
324 da->setInfoOnComponent(1,"y [mm]");
325 da->setInfoOnComponent(2,"z [km]");
327 CPPUNIT_ASSERT_THROW(da->applyFuncCompo(1,"x+y+zz+zzz"),INTERP_KERNEL::Exception);
328 CPPUNIT_ASSERT_THROW(da->applyFuncCompo(1,"toto(x+y)"),INTERP_KERNEL::Exception);
329 CPPUNIT_ASSERT_THROW(da->applyFuncCompo(1,"x/0"),INTERP_KERNEL::Exception);
331 DataArrayDouble *da2=da->applyFuncCompo(1,"y+z");
332 CPPUNIT_ASSERT_EQUAL(1,(int)da2->getNumberOfComponents());
333 CPPUNIT_ASSERT_EQUAL(5,(int)da2->getNumberOfTuples());
334 const double expected1[5]={32.,34.,36.,38.,40.};
336 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-12);
338 da2=da->applyFunc(1,"y+z");
339 const double expected2[5]={12.,14.,16.,18.,20.};
341 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],da2->getIJ(0,i),1e-12);
344 CPPUNIT_ASSERT_EQUAL(3,(int)f1->getNumberOfComponents());
345 CPPUNIT_ASSERT_EQUAL(5,(int)f1->getNumberOfTuples());
346 f1->applyFuncCompo(1,"y+z");
347 CPPUNIT_ASSERT_EQUAL(1,(int)f1->getNumberOfComponents());
348 CPPUNIT_ASSERT_EQUAL(5,(int)f1->getNumberOfTuples());
350 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getArray()->getIJ(0,i),1e-12);
357 void MEDCouplingBasicsTest4::testApplyFuncThree1()
359 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
360 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
363 const double vals[15]={1.,11.,21.,2.,12.,22.,3.,13.,23.,4.,14.,24.,5.,15.,25.};
364 DataArrayDouble *da=DataArrayDouble::New();
366 std::copy(vals,vals+15,da->getPointer());
369 std::vector<std::string> vs(3);
370 vs[0]="x"; vs[1]="Y"; vs[2]="z";
371 CPPUNIT_ASSERT_THROW(da->applyFuncNamedCompo(1,vs,"y+z"),INTERP_KERNEL::Exception);
372 CPPUNIT_ASSERT_THROW(da->applyFuncNamedCompo(1,vs,"x+Y+z+zz+zzz"),INTERP_KERNEL::Exception);
373 CPPUNIT_ASSERT_THROW(da->applyFuncNamedCompo(1,vs,"x/0."),INTERP_KERNEL::Exception);
375 DataArrayDouble *da2=da->applyFuncNamedCompo(1,vs,"y+z");
376 const double expected1[5]={32.,34.,36.,38.,40.};
378 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],da2->getIJ(0,i),1e-12);
380 std::vector<std::string> vs2(4); vs2[0]="x"; vs2[1]="y"; vs2[2]="z"; vs2[3]="a";
381 CPPUNIT_ASSERT_THROW(da->applyFuncNamedCompo(1,vs2,"x+a"),INTERP_KERNEL::Exception);
383 CPPUNIT_ASSERT_EQUAL(3,(int)f1->getNumberOfComponents());
384 CPPUNIT_ASSERT_EQUAL(5,(int)f1->getNumberOfTuples());
385 f1->applyFuncNamedCompo(1,vs,"y+z");
386 CPPUNIT_ASSERT_EQUAL(1,(int)f1->getNumberOfComponents());
387 CPPUNIT_ASSERT_EQUAL(5,(int)f1->getNumberOfTuples());
389 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getArray()->getIJ(0,i),1e-12);
396 void MEDCouplingBasicsTest4::testFillFromAnalyticTwo1()
398 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
399 m1->setTime(3.4,5,6); m1->setTimeUnit("us");
401 CPPUNIT_ASSERT_THROW(m1->fillFromAnalyticCompo(ON_NODES,1,"y+z"),INTERP_KERNEL::Exception);
402 m1->getCoords()->setInfoOnComponent(0,"x [m]");
403 m1->getCoords()->setInfoOnComponent(1,"y");
404 m1->getCoords()->setInfoOnComponent(2,"z");
405 MEDCouplingFieldDouble *f1=m1->fillFromAnalyticCompo(ON_NODES,1,"y+z");
406 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.4,f1->getTime(a,b),1.e-14);
407 CPPUNIT_ASSERT_EQUAL(5,a); CPPUNIT_ASSERT_EQUAL(6,b);
408 CPPUNIT_ASSERT_EQUAL(std::string(f1->getTimeUnit()),std::string("us"));
409 CPPUNIT_ASSERT_EQUAL(1,(int)f1->getNumberOfComponents());
410 CPPUNIT_ASSERT_EQUAL(9,(int)f1->getNumberOfTuples());
411 const double expected1[9]={0.2, 0.7, 1.2, 0.7, 1.2, 1.7, 1.2, 1.7, 2.2};
413 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getArray()->getIJ(0,i),1e-12);
418 void MEDCouplingBasicsTest4::testFillFromAnalyticThree1()
420 MEDCouplingUMesh *m1=build3DSurfTargetMesh_1();
421 m1->setTime(3.4,5,6); m1->setTimeUnit("us");
423 std::vector<std::string> vs(3);
424 vs[0]="x"; vs[1]="Y"; vs[2]="z";
425 CPPUNIT_ASSERT_THROW(m1->fillFromAnalyticNamedCompo(ON_NODES,1,vs,"y+z"),INTERP_KERNEL::Exception);
427 MEDCouplingFieldDouble *f1=m1->fillFromAnalyticNamedCompo(ON_NODES,1,vs,"y+z");
428 CPPUNIT_ASSERT_DOUBLES_EQUAL(3.4,f1->getTime(a,b),1.e-14);
429 CPPUNIT_ASSERT_EQUAL(5,a); CPPUNIT_ASSERT_EQUAL(6,b);
430 CPPUNIT_ASSERT_EQUAL(std::string(f1->getTimeUnit()),std::string("us"));
431 CPPUNIT_ASSERT_EQUAL(1,(int)f1->getNumberOfComponents());
432 CPPUNIT_ASSERT_EQUAL(9,(int)f1->getNumberOfTuples());
433 const double expected1[9]={0.2, 0.7, 1.2, 0.7, 1.2, 1.7, 1.2, 1.7, 2.2};
435 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],f1->getArray()->getIJ(0,i),1e-12);
440 void MEDCouplingBasicsTest4::testDAUnitVar1()
442 DataArrayDouble *da=DataArrayDouble::New();
444 da->setInfoOnComponent(0,"XPS [m]");
446 st1=da->getVarOnComponent(0);
447 CPPUNIT_ASSERT(st1=="XPS");
448 st2=da->getUnitOnComponent(0);
449 CPPUNIT_ASSERT(st2=="m");
451 da->setInfoOnComponent(0,"XPS [m]");
452 st1=da->getVarOnComponent(0);
453 CPPUNIT_ASSERT(st1=="XPS");
454 st2=da->getUnitOnComponent(0);
455 CPPUNIT_ASSERT(st2=="m");
457 da->setInfoOnComponent(0,"XPP [m]");
458 st1=da->getVarOnComponent(0);
459 CPPUNIT_ASSERT(st1=="XPP");
460 st2=da->getUnitOnComponent(0);
461 CPPUNIT_ASSERT(st2=="m");
463 da->setInfoOnComponent(0,"XPP kdep kefer [ m ]");
464 st1=da->getVarOnComponent(0);
465 CPPUNIT_ASSERT(st1=="XPP kdep kefer");
466 st2=da->getUnitOnComponent(0);
467 CPPUNIT_ASSERT(st2==" m ");
469 da->setInfoOnComponent(0," XPP k[ dep k]efer [ m^ 2/s^3*kJ ]");
470 st1=da->getVarOnComponent(0);
471 CPPUNIT_ASSERT(st1==" XPP k[ dep k]efer");
472 st2=da->getUnitOnComponent(0);
473 CPPUNIT_ASSERT(st2==" m^ 2/s^3*kJ ");
475 da->setInfoOnComponent(0," XPP kefer ");
476 st1=da->getVarOnComponent(0);
477 CPPUNIT_ASSERT(st1==" XPP kefer ");
478 st2=da->getUnitOnComponent(0);
479 CPPUNIT_ASSERT(st2=="");
481 da->setInfoOnComponent(0,"temperature( bof)");
482 st1=da->getVarOnComponent(0);
483 CPPUNIT_ASSERT(st1=="temperature( bof)");
484 st2=da->getUnitOnComponent(0);
485 CPPUNIT_ASSERT(st2=="");
487 da->setInfoOnComponent(0,"kkk [m]");
488 da->setInfoOnComponent(1,"ppp [m^2/kJ]");
489 da->setInfoOnComponent(2,"abcde [MW/s]");
491 std::vector<std::string> vs;
492 vs=da->getVarsOnComponent();
493 CPPUNIT_ASSERT_EQUAL(3,(int)vs.size());
494 CPPUNIT_ASSERT(vs[0]=="kkk");
495 CPPUNIT_ASSERT(vs[1]=="ppp");
496 CPPUNIT_ASSERT(vs[2]=="abcde");
497 vs=da->getUnitsOnComponent();
498 CPPUNIT_ASSERT_EQUAL(3,(int)vs.size());
499 CPPUNIT_ASSERT(vs[0]=="m");
500 CPPUNIT_ASSERT(vs[1]=="m^2/kJ");
501 CPPUNIT_ASSERT(vs[2]=="MW/s");
506 void MEDCouplingBasicsTest4::testGaussCoordinates1()
508 //Testing 1D cell types
509 MEDCouplingUMesh *m1=build1DMultiTypes_1();
510 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_GAUSS_PT,ONE_TIME);
512 std::vector<double> wg1(1); wg1[0]=0.3;
513 std::vector<double> gsCoo1(1); gsCoo1[0]=0.2;
514 std::vector<double> refCoo1(2); refCoo1[0]=-1.0; refCoo1[1]=1.0;
515 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_SEG2,refCoo1,gsCoo1,wg1);
516 std::vector<double> wg2(wg1);
517 std::vector<double> gsCoo2(1); gsCoo2[0]=0.2;
518 std::vector<double> refCoo2(3); refCoo2[0]=-1.0; refCoo2[1]=1.0; refCoo2[2]=0.0;
519 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_SEG3,refCoo2,gsCoo2,wg2);
521 DataArrayDouble *resToTest=f->getLocalizationOfDiscr();
522 CPPUNIT_ASSERT_EQUAL(3,(int)resToTest->getNumberOfComponents());
523 CPPUNIT_ASSERT_EQUAL(2,(int)resToTest->getNumberOfTuples());
524 const double expected1[6]={0.6,0.6,0.6, 0.6,0.6,0.6};
526 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],resToTest->getIJ(0,i),1e-14);
527 resToTest->decrRef();
531 //Testing 2D cell types
532 MEDCouplingUMesh *m2=build2DMultiTypes_1();
533 f=MEDCouplingFieldDouble::New(ON_GAUSS_PT,ONE_TIME);
535 std::vector<double> wg3(2); wg3[0]=0.3; wg3[1]=0.3;
536 const double tria3CooGauss[4]={ 0.1, 0.8, 0.2, 0.7 };
537 std::vector<double> gsCoo3(tria3CooGauss,tria3CooGauss+4);
538 const double tria3CooRef[6]={ 0.0, 0.0, 1.0 , 0.0, 0.0, 1.0 };
539 std::vector<double> refCoo3(tria3CooRef,tria3CooRef+6);
540 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_TRI3,refCoo3,gsCoo3,wg3);
541 std::vector<double> wg4(3); wg4[0]=0.3; wg4[1]=0.3; wg4[2]=0.3;
542 const double tria6CooGauss[6]={ 0.3, 0.2, 0.2, 0.1, 0.2, 0.4 };
543 std::vector<double> gsCoo4(tria6CooGauss,tria6CooGauss+6);
544 const double tria6CooRef[12]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5};
545 std::vector<double> refCoo4(tria6CooRef,tria6CooRef+12);
546 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_TRI6,refCoo4,gsCoo4,wg4);
547 std::vector<double> wg5(4); wg5[0]=0.3; wg5[1]=0.3; wg5[2]=0.3; wg5[3]=0.3;
548 const double quad4CooGauss[8]={ 0.3, 0.2, 0.2, 0.1, 0.2, 0.4, 0.15, 0.27 };
549 std::vector<double> gsCoo5(quad4CooGauss,quad4CooGauss+8);
550 const double quad4CooRef[8]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0};
551 std::vector<double> refCoo5(quad4CooRef,quad4CooRef+8);
552 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_QUAD4,refCoo5,gsCoo5,wg5);
553 std::vector<double> wg6(4); wg6[0]=0.3; wg6[1]=0.3; wg6[2]=0.3; wg6[3]=0.3;
554 const double quad8CooGauss[8]={ 0.34, 0.16, 0.21, 0.3, 0.23, 0.4, 0.14, 0.37 };
555 std::vector<double> gsCoo6(quad8CooGauss,quad8CooGauss+8);
556 const double quad8CooRef[16]={ -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0};
557 std::vector<double> refCoo6(quad8CooRef,quad8CooRef+16);
558 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_QUAD8,refCoo6,gsCoo6,wg6);
560 resToTest=f->getLocalizationOfDiscr();
561 CPPUNIT_ASSERT_EQUAL(3,(int)resToTest->getNumberOfComponents());
562 CPPUNIT_ASSERT_EQUAL(13,(int)resToTest->getNumberOfTuples());//2+3+4+4 gauss points for resp TRI3,TRI6,QUAD4,QUAD8
563 const double expected2[39]={5.1,1.55,0.0, 4.7,1.65,0.0, //TRI3
564 2.32,1.52,0.0, 1.6,1.32,0.0, 3.52,1.26,0.0,//TRI6
565 2.6,1.6,0.0, 2.4,1.8,0.0, 2.4,1.2,0.0, 2.3,1.46,0.0,//QUAD4
566 2.32,2.68,0.0, 2.6,2.42,0.0, 2.8,2.46,0.0, 2.74,2.28,0.0 };//QUAD8
567 for(int i=0;i<39;i++)
568 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],resToTest->getIJ(0,i),1e-14);
569 resToTest->decrRef();
573 //Testing 3D cell types
574 MEDCouplingUMesh *m3=build3DMultiTypes_1();
575 f=MEDCouplingFieldDouble::New(ON_GAUSS_PT,ONE_TIME);
578 std::vector<double> wg7(1); wg7[0]=0.3;
579 const double tetra4CooGauss[3]={0.34, 0.16, 0.21};
580 std::vector<double> gsCoo7(tetra4CooGauss,tetra4CooGauss+3);
581 const double tetra4CooRef[12]={0.0,1.0,0.0, 0.0,0.0,1.0, 0.0,0.0,0.0, 1.0,0.0,0.0};
582 std::vector<double> refCoo7(tetra4CooRef,tetra4CooRef+12);
583 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_TETRA4,refCoo7,gsCoo7,wg7);
584 std::vector<double> wg8(1); wg8[0]=0.3;
585 const double tetra10CooGauss[3]={0.2, 0.3, 0.1};
586 std::vector<double> gsCoo8(tetra10CooGauss,tetra10CooGauss+3);
587 const double tetra10CooRef[30]={0.0,1.0,0.0, 0.0,0.0,0.0, 0.0,0.0,1.0, 1.0,0.0,0.0, 0.0,0.5,0.0, 0.0,0.0,0.5, 0.0,0.5,0.5, 0.5,0.5,0.0, 0.5,0.0,0.0, 0.5,0.0,0.5};
588 std::vector<double> refCoo8(tetra10CooRef,tetra10CooRef+30);
589 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_TETRA10,refCoo8,gsCoo8,wg8);
590 std::vector<double> wg9(1); wg9[0]=0.3;
591 const double pyra5CooGauss[3]={0.2, 0.3, 0.1};
592 std::vector<double> gsCoo9(pyra5CooGauss,pyra5CooGauss+3);
593 const double pyra5CooRef[15]={1.0,0.0,0.0, 0.0,1.0,0.0, -1.0,0.0,0.0, 0.0,-1.0,0.0, 0.0,0.0,1.0};
594 std::vector<double> refCoo9(pyra5CooRef,pyra5CooRef+15);
595 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_PYRA5,refCoo9,gsCoo9,wg9);
596 std::vector<double> wg10(1); wg10[0]=0.3;
597 const double pyra13CooGauss[3]={0.1, 0.2, 0.7};
598 std::vector<double> gsCoo10(pyra13CooGauss,pyra13CooGauss+3);
599 const double pyra13CooRef[39]={1.0,0.0,0.0, 0.0,1.0,0.0,-1.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,1.0,0.5,0.5,0.0,-0.5,0.5,0.0,-0.5,-0.5,0.0,0.5,-0.5,0.0,0.5,0.0,0.5,0.0,0.5,0.5,-0.5,0.0,0.5,0.0,-0.5,0.5};
600 std::vector<double> refCoo10(pyra13CooRef,pyra13CooRef+39);
601 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_PYRA13,refCoo10,gsCoo10,wg10);
602 std::vector<double> wg11(1); wg11[0]=0.3;
603 const double penta6CooGauss[3]={0.2, 0.3, 0.1};
604 std::vector<double> gsCoo11(penta6CooGauss,penta6CooGauss+3);
605 const double penta6CooRef[18]={-1.0,1.0,0.0,-1.0,-0.0,1.0,-1.0,0.0,0.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,0.0,0.0};
606 std::vector<double> refCoo11(penta6CooRef,penta6CooRef+18);
607 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_PENTA6,refCoo11,gsCoo11,wg11);
608 std::vector<double> wg12(1); wg12[0]=0.3;
609 const double penta15CooGauss[3]={0.2, 0.3,0.15};
610 std::vector<double> gsCoo12(penta15CooGauss,penta15CooGauss+3);
611 const double penta15CooRef[45]={-1.0,1.0,0.0,-1.0,0.0,1.0,-1.0,0.0,0.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,0.0,0.0,-1.0,0.5,0.5,-1.0,0.0,0.5,-1.0,0.5,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.5,0.5,1.0,0.0, 0.5,1.0,0.5,0.0};
612 std::vector<double> refCoo12(penta15CooRef,penta15CooRef+45);
613 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_PENTA15,refCoo12,gsCoo12,wg12);
614 std::vector<double> wg13(1); wg13[0]=0.3;
615 const double hexa8CooGauss[3]={0.2,0.3,0.15};
616 std::vector<double> gsCoo13(hexa8CooGauss,hexa8CooGauss+3);
617 const double hexa8CooRef[24]={-1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,1.0};
618 std::vector<double> refCoo13(hexa8CooRef,hexa8CooRef+24);
619 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_HEXA8,refCoo13,gsCoo13,wg13);
620 std::vector<double> wg14(1); wg14[0]=0.3;
621 const double hexa20CooGauss[3]={0.11,0.3,0.55};
622 std::vector<double> gsCoo14(hexa20CooGauss,hexa20CooGauss+3);
623 const double hexa20CooRef[60]={-1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,1.0,0.0,-1.0,-1.0,1.0,0.0,-1.0,0.0,1.0,-1.0,-1.0,0.0,-1.0,-1.0,-1.0,0.0,1.0,-1.0,0.0,1.0,1.0,0.0,-1.0,1.0,0.0,0.0,-1.0,1.0,1.0,0.0,1.0,0.0,1.0,1.0,-1.0,0.0,1.0};
624 std::vector<double> refCoo14(hexa20CooRef,hexa20CooRef+60);
625 f->setGaussLocalizationOnType(INTERP_KERNEL::NORM_HEXA20,refCoo14,gsCoo14,wg14);
627 resToTest=f->getLocalizationOfDiscr();
628 CPPUNIT_ASSERT_EQUAL(3,(int)resToTest->getNumberOfComponents());
629 CPPUNIT_ASSERT_EQUAL(8,(int)resToTest->getNumberOfTuples());//2+3+4+4 gauss points for resp TRI3,TRI6,QUAD4,QUAD8
630 const double expected3[24]={1.312,3.15,1.02, 0.56,3.3,0.6, 2.18,1.1,0.2, 1.18,1.54,0.98, 1.56,0.3,3.6, 1.613,0.801,4.374, 2.6,2.4,2.3, 2.31232,2.3933985,1.553255};
631 for(int i=0;i<24;i++)
632 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected3[i],resToTest->getIJ(0,i),1e-14);
633 resToTest->decrRef();
640 * Not activated test ! To be implemented !
642 void MEDCouplingBasicsTest4::testQ1Localization1()
644 MEDCouplingUMesh *m=buildHexa8Mesh_1();
645 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_NODES,ONE_TIME);
646 DataArrayDouble *da=DataArrayDouble::New();
647 const double vals1[27]={1.0,3.0,4.0,1.0,3.0,4.0,3.0,2.0,5.0,1.0,3.0,4.0,1.0,3.0,4.0,3.0,2.0,5.0,1.0,3.0,4.0,1.0,3.0,4.0,3.0,2.0,5.0};
649 std::copy(vals1,vals1+27,da->getPointer());
654 const double point1[3]={0.25,0.75,0.25};
655 //const double points1[6]={0.25,0.75,0.25,1.0,1.0,1.0};
657 f->getValueOn(point1,res1);
663 void MEDCouplingBasicsTest4::testP2Localization1()
665 MEDCouplingUMesh *m=MEDCouplingUMesh::New("testP2",2);
666 const double coords[12]={0.,2.,3.5,0.,4.5,1.5,1.2,0.32,3.4,1.,2.1,2.4};
667 const int conn[6]={0,1,2,3,4,5};
668 DataArrayDouble *coo=DataArrayDouble::New();
670 std::copy(coords,coords+12,coo->getPointer());
674 m->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,conn);
675 m->finishInsertingCells();
677 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_NODES,ONE_TIME);
679 DataArrayDouble *da=DataArrayDouble::New();
681 const double vals1[18]={1.2,2.3,3.4, 2.2,3.3,4.4, 3.2,4.3,5.4, 4.2,5.3,6.4, 5.2,6.3,7.4, 6.2,7.3,8.4};
682 std::copy(vals1,vals1+18,da->getPointer());
686 const double loc[2]={2.27,1.3};
687 DataArrayDouble *locs=f->getValueOnMulti(loc,1);
688 const double expected1[3]={6.0921164547752236, 7.1921164547752232, 8.2921164547752255};
690 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],locs->getIJ(0,i),1e-12);
697 void MEDCouplingBasicsTest4::testP2Localization2()
699 MEDCouplingUMesh *m=MEDCouplingUMesh::New("testP2_2",3);
700 const double coords[30]={0.33312787792955395, -0.35155740179580952, -0.03567564825034563, 1.307146326477638, -0.57234557776250305, -0.08608044208272235, 0.5551834466499993, 0.62324964668794192, -0.014638951108536295, 0.37761817224442129, -0.38324019806913578, 0.96283164472856886, 0.79494856035658679, -0.40628057809270046, 0.0021004190225864614, 1.023740446371799, 0.07665912970471335, -0.072889657161871096, 0.54564584619517376, 0.11132872093429744, 0.039647326652013051, 0.27164784387819052, -0.42018012100866675, 0.46563376500745146, 0.89501965094896418, -0.56148455362735061, 0.43337469695473035, 0.49118025152924394, 0.093884938060727313, 0.47216346905220891};
701 const int conn[10]={0,1,2,3,4,5,6,7,8,9};
702 DataArrayDouble *coo=DataArrayDouble::New();
704 std::copy(coords,coords+30,coo->getPointer());
708 m->insertNextCell(INTERP_KERNEL::NORM_TETRA10,10,conn);
709 m->finishInsertingCells();
711 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_NODES,ONE_TIME);
713 DataArrayDouble *da=DataArrayDouble::New();
715 const double vals1[10]={1.1,2.1,3.1,4.1,5.2,6.2,7.2,8.2,9.2,10.2};
716 std::copy(vals1,vals1+10,da->getPointer());
720 const double loc[3]={0.64637931739890486, -0.16185896817550552, 0.22678966365273748};
721 DataArrayDouble *locs=f->getValueOnMulti(loc,1);
722 const double expected1[1]={10.0844021968047};
724 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],locs->getIJ(0,i),1e-12);
731 void MEDCouplingBasicsTest4::testGetValueOn2()
733 MEDCouplingUMesh *m=build2DTargetMesh_1();
734 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_CELLS,NO_TIME);
736 DataArrayDouble *arr=DataArrayDouble::New();
737 int nbOfCells=m->getNumberOfCells();
738 arr->alloc(nbOfCells,3);
741 const double values1[15]={7.,107.,10007.,8.,108.,10008.,9.,109.,10009.,10.,110.,10010.,11.,111.,10011.};
742 std::copy(values1,values1+15,arr->getPointer());
743 const double loc[10]={-0.05,-0.05, 0.55,-0.25, 0.55,0.15, -0.05,0.45, 0.45,0.45};
744 f->checkConsistencyLight();
745 DataArrayDouble *locs=f->getValueOnMulti(loc,5);
746 CPPUNIT_ASSERT_EQUAL(5,(int)locs->getNumberOfTuples());
747 CPPUNIT_ASSERT_EQUAL(3,(int)locs->getNumberOfComponents());
748 for(int j=0;j<15;j++)
749 CPPUNIT_ASSERT_DOUBLES_EQUAL(values1[j],locs->getIJ(0,j),1e-12);
753 f=MEDCouplingFieldDouble::New(ON_NODES,NO_TIME);
755 arr=DataArrayDouble::New();
756 int nbOfNodes=m->getNumberOfNodes();
757 arr->alloc(nbOfNodes,3);
760 const double values2[27]={7.,107.,10007.,8.,108.,10008.,9.,109.,10009.,10.,110.,10010.,11.,111.,10011.,12.,112.,10012.,13.,113.,10013.,14.,114.,10014.,15.,115.,10015.};
761 std::copy(values2,values2+27,arr->getPointer());
762 const double loc2[8]={0.5432,-0.2432, 0.5478,0.1528, 0.5432,-0.2432, 0.5432,-0.2432};
763 const double expected2[12]={9.0272, 109.0272, 10009.0272, 11.4124,111.4124,10011.4124, 9.0272, 109.0272, 10009.0272, 9.0272, 109.0272, 10009.0272};
764 f->checkConsistencyLight();
765 locs=f->getValueOnMulti(loc2,4);
766 CPPUNIT_ASSERT_EQUAL(4,(int)locs->getNumberOfTuples());
767 CPPUNIT_ASSERT_EQUAL(3,(int)locs->getNumberOfComponents());
768 for(int i=0;i<12;i++)
769 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],locs->getIJ(0,i),1e-12);
776 void MEDCouplingBasicsTest4::testDAIGetIdsNotEqual1()
778 DataArrayInt *d=DataArrayInt::New();
779 const int vals1[10]={2,3,5,6,8,5,5,6,1,-5};
781 std::copy(vals1,vals1+10,d->getPointer());
782 DataArrayInt *d2=d->findIdsNotEqual(5);
783 CPPUNIT_ASSERT_EQUAL(7,(int)d2->getNumberOfTuples());
784 CPPUNIT_ASSERT_EQUAL(1,(int)d2->getNumberOfComponents());
785 const int expected1[7]={0,1,3,4,7,8,9};
787 CPPUNIT_ASSERT_EQUAL(expected1[i],d2->getIJ(0,i));
789 CPPUNIT_ASSERT_THROW(d->findIdsNotEqual(5),INTERP_KERNEL::Exception);
790 const int vals2[3]={-4,5,6};
791 std::vector<int> vals3(vals2,vals2+3);
793 DataArrayInt *d3=d->findIdsNotEqualList(&vals3[0],&vals3[0]+vals3.size());
794 CPPUNIT_ASSERT_EQUAL(5,(int)d3->getNumberOfTuples());
795 CPPUNIT_ASSERT_EQUAL(1,(int)d3->getNumberOfComponents());
796 const int expected2[5]={0,1,4,8,9};
798 CPPUNIT_ASSERT_EQUAL(expected2[i],d3->getIJ(0,i));
804 void MEDCouplingBasicsTest4::testDAIComputeOffsets1()
806 DataArrayInt *d=DataArrayInt::New();
807 const int vals1[6]={3,5,1,2,0,8};
808 const int expected1[6]={0,3,8,9,11,11};
810 std::copy(vals1,vals1+6,d->getPointer());
812 CPPUNIT_ASSERT_EQUAL(6,(int)d->getNumberOfTuples());
813 CPPUNIT_ASSERT_EQUAL(1,(int)d->getNumberOfComponents());
815 CPPUNIT_ASSERT_EQUAL(expected1[i],d->getIJ(0,i));
819 void MEDCouplingBasicsTest4::testUMeshHexagonPrism1()
821 const double coords[36]={
822 0.8660254037844386, 0.5, 0.0, 0.0, 1.0, 0.0, -0.8660254037844386, 0.5, 0.0, -0.8660254037844386, -0.5, 0.0, 0.0, -1.0, 0.0, 0.8660254037844386, -0.5, 0.0,
823 0.8660254037844386, 0.5, 2.0, 0.0, 1.0, 2.0, -0.8660254037844386, 0.5, 2.0, -0.8660254037844386, -0.5, 2.0, 0.0, -1.0, 2.0, 0.8660254037844386, -0.5, 2.0
825 const int conn[12]={1,2,3,4,5,0,7,8,9,10,11,6};
826 MEDCouplingUMesh *mesh=MEDCouplingUMesh::New("MyFirstHexagonalPrism",3);
827 DataArrayDouble *coo=DataArrayDouble::New();
829 std::copy(coords,coords+36,coo->getPointer());
830 mesh->setCoords(coo);
831 mesh->allocateCells(1);
832 mesh->insertNextCell(INTERP_KERNEL::NORM_HEXGP12,12,conn);
833 mesh->finishInsertingCells();
836 mesh->checkConsistencyLight();
837 MEDCouplingFieldDouble *vols=mesh->getMeasureField(false);
838 CPPUNIT_ASSERT_EQUAL(1,(int)vols->getNumberOfTuples());
839 CPPUNIT_ASSERT_EQUAL(1,(int)vols->getNumberOfComponents());
840 CPPUNIT_ASSERT_DOUBLES_EQUAL(-5.196152422706632,vols->getIJ(0,0),1e-12);
841 DataArrayDouble *bary=mesh->computeCellCenterOfMass();
842 CPPUNIT_ASSERT_EQUAL(1,(int)bary->getNumberOfTuples());
843 CPPUNIT_ASSERT_EQUAL(3,(int)bary->getNumberOfComponents());
844 const double expected1[3]={0.,0.,1.};
846 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],bary->getIJ(0,i),1e-12);
847 DataArrayInt *d1=DataArrayInt::New();
848 DataArrayInt *d2=DataArrayInt::New();
849 DataArrayInt *d3=DataArrayInt::New();
850 DataArrayInt *d4=DataArrayInt::New();
851 MEDCouplingUMesh *m2=mesh->buildDescendingConnectivity(d1,d2,d3,d4);
852 CPPUNIT_ASSERT_EQUAL(8,(int)m2->getNumberOfCells());
853 const int expected4[8][6]={{1,2,3,4,5,0},{7,6,11,10,9,8},{1,7,8,2},{2,8,9,3},{3,9,10,4},{4,10,11,5},{5,11,6,0},{0,6,7,1}};
854 const INTERP_KERNEL::NormalizedCellType expected2[8]={INTERP_KERNEL::NORM_POLYGON, INTERP_KERNEL::NORM_POLYGON, INTERP_KERNEL::NORM_QUAD4, INTERP_KERNEL::NORM_QUAD4, INTERP_KERNEL::NORM_QUAD4, INTERP_KERNEL::NORM_QUAD4, INTERP_KERNEL::NORM_QUAD4, INTERP_KERNEL::NORM_QUAD4};
855 const int expected3[8]={6,6,4,4,4,4,4,4};
858 CPPUNIT_ASSERT(m2->getTypeOfCell(i)==expected2[i]);
860 m2->getNodeIdsOfCell(i,v);
861 CPPUNIT_ASSERT((int)v.size()==expected3[i]);
862 CPPUNIT_ASSERT(std::equal(expected4[i],expected4[i]+expected3[i],v.begin()));
870 mesh->convertAllToPoly();
871 CPPUNIT_ASSERT(INTERP_KERNEL::NORM_POLYHED==mesh->getTypeOfCell(0));
873 CPPUNIT_ASSERT(INTERP_KERNEL::NORM_HEXGP12==mesh->getTypeOfCell(0));
874 CPPUNIT_ASSERT_EQUAL(13,mesh->getNodalConnectivityArrayLen());
881 void MEDCouplingBasicsTest4::testDADCheckIsMonotonic()
883 DataArrayDouble *da=DataArrayDouble::New();
884 const double vals[4]={-1.,1.01,2.03,6.};
886 std::copy(vals,vals+4,da->getPointer());
887 CPPUNIT_ASSERT_THROW(da->isMonotonic(true, 1e-12),INTERP_KERNEL::Exception);
889 CPPUNIT_ASSERT(da->isMonotonic(true, 1e-12));
890 da->checkMonotonic(true, 1e-12);
892 CPPUNIT_ASSERT(!da->isMonotonic(true, 1e-12));
893 CPPUNIT_ASSERT_THROW(da->checkMonotonic(true, 1e-12),INTERP_KERNEL::Exception);
894 CPPUNIT_ASSERT_THROW(da->checkMonotonic(false, 1e-12),INTERP_KERNEL::Exception);
896 CPPUNIT_ASSERT(da->isMonotonic(true, 1e-12));
897 CPPUNIT_ASSERT(!da->isMonotonic(true, 1e-1));
901 void MEDCouplingBasicsTest4::testCheckCoherencyDeeper1()
903 MEDCouplingUMesh *m=build3DSourceMesh_1();
904 m->checkConsistencyLight();
905 m->checkConsistency();
906 m->getNodalConnectivity()->setIJ(8,0,-1);
907 m->checkConsistencyLight();
908 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);
909 m->getNodalConnectivity()->setIJ(8,0,-6);
910 m->checkConsistencyLight();
911 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);
912 m->getNodalConnectivity()->setIJ(8,0,9);//9>=NbOfNodes
913 m->checkConsistencyLight();
914 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);
915 m->getNodalConnectivity()->setIJ(8,0,8);//OK
916 m->checkConsistencyLight();
917 m->checkConsistency();
918 const int elts[2]={1,5};
919 std::vector<int> eltsV(elts,elts+2);
920 m->convertToPolyTypes(&eltsV[0],&eltsV[0]+eltsV.size());
921 m->checkConsistencyLight();
922 m->checkConsistency();
923 m->getNodalConnectivity()->setIJ(2,0,9);//9>=NbOfNodes
924 m->checkConsistencyLight();
925 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);
926 m->getNodalConnectivity()->setIJ(2,0,-3);
927 m->checkConsistencyLight();
928 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);
929 m->getNodalConnectivity()->setIJ(2,0,-1);
930 m->checkConsistencyLight();
931 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);//Throw because cell#0 is not a polyhedron
932 m->getNodalConnectivity()->setIJ(2,0,4);
933 m->checkConsistencyLight();
934 m->checkConsistency();
935 m->getNodalConnectivity()->setIJ(7,0,-1);
936 m->checkConsistencyLight();
937 m->checkConsistency();//OK because we are in polyhedron connec
938 m->getNodalConnectivity()->setIJ(36,0,14);
939 m->checkConsistencyLight();
940 CPPUNIT_ASSERT_THROW(m->checkConsistency(),INTERP_KERNEL::Exception);//Throw beacause now cell 5 is a TETRA4 (14) so mimatch of number index and static type.
944 void MEDCouplingBasicsTest4::testUnPolyze2()
946 MEDCouplingUMesh *m=MEDCouplingUMesh::New("jjj",3);
947 DataArrayDouble *coo=DataArrayDouble::New();
955 const int conn[4]={0,1,2,3};
956 m->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,conn);
957 m->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,conn);
958 m->finishInsertingCells();
959 std::vector<const MEDCouplingUMesh *> ms(4,m);
960 MEDCouplingUMesh *m2=MEDCouplingUMesh::MergeUMeshesOnSameCoords(ms);
961 std::vector<int> temp(1,2);
962 m2->convertToPolyTypes(&temp[0],&temp[0]+temp.size());
964 CPPUNIT_ASSERT(INTERP_KERNEL::NORM_TETRA4==m2->getTypeOfCell(2));
965 CPPUNIT_ASSERT_EQUAL(40,m2->getNodalConnectivityArrayLen());
966 std::vector<int> temp2;
967 m2->getNodeIdsOfCell(2,temp2);
968 CPPUNIT_ASSERT(4==(int)temp2.size());
969 CPPUNIT_ASSERT(std::equal(conn,conn+4,temp2.begin()));
970 m2->checkConsistency();
971 MEDCouplingMesh *m3=m2->deepCopy();
973 CPPUNIT_ASSERT(m3->isEqual(m2,1e-12));
979 void MEDCouplingBasicsTest4::testDACpyFrom1()
981 DataArrayDouble *d=DataArrayDouble::New();
986 d->setInfoOnComponent(0,"X [m]");
987 d->setInfoOnComponent(1,"Y [m]");
988 d->setInfoOnComponent(2,"Z [m]");
990 DataArrayDouble *d1=DataArrayDouble::New();
991 CPPUNIT_ASSERT(!d->isEqual(*d1,1e-12));
992 d1->deepCopyFrom(*d);
993 CPPUNIT_ASSERT(d->isEqual(*d1,1e-12));
994 d1->deepCopyFrom(*d);
995 CPPUNIT_ASSERT(d->isEqual(*d1,1e-12));
997 CPPUNIT_ASSERT(!d->isEqual(*d1,1e-12));
998 d1->deepCopyFrom(*d);
999 CPPUNIT_ASSERT(d->isEqual(*d1,1e-12));
1001 MCAuto<DataArrayInt> d2=d->convertToIntArr();
1002 DataArrayInt *d4=DataArrayInt::New();
1003 CPPUNIT_ASSERT(!d2->isEqual(*d4));
1004 d4->deepCopyFrom(*d2);
1005 CPPUNIT_ASSERT(d2->isEqual(*d4));
1006 d4->deepCopyFrom(*d2);
1007 CPPUNIT_ASSERT(d2->isEqual(*d4));
1009 CPPUNIT_ASSERT(!d2->isEqual(*d4));
1010 d4->deepCopyFrom(*d2);
1011 CPPUNIT_ASSERT(d2->isEqual(*d4));
1018 void MEDCouplingBasicsTest4::testDAITransformWithIndArr1()
1020 const int tab1[4]={17,18,22,19};
1021 const int tab2[12]={0,1,1,3,3,0,1,3,2,2,3,0};
1022 const int expected[12]={17,18,18,19,19,17,18,19,22,22,19,17};
1023 DataArrayInt *d=DataArrayInt::New();
1025 std::copy(tab1,tab1+4,d->getPointer());
1026 DataArrayInt *d1=DataArrayInt::New();
1028 std::copy(tab2,tab2+12,d1->getPointer());
1030 d1->transformWithIndArr(d->getConstPointer(),d->getConstPointer()+d->getNbOfElems());
1031 CPPUNIT_ASSERT_EQUAL(12,(int)d1->getNumberOfTuples());
1032 CPPUNIT_ASSERT_EQUAL(1,(int)d1->getNumberOfComponents());
1033 for(int i=0;i<12;i++)
1034 CPPUNIT_ASSERT_EQUAL(expected[i],d1->getIJ(i,0));
1040 void MEDCouplingBasicsTest4::testDAIBuildPermArrPerLevel1()
1042 const int arr[12]={2,0,1,1,0,1,2,0,1,1,0,0};
1043 const int expected1[12]={10,0,5,6,1,7,11,2,8,9,3,4};
1044 DataArrayInt *da=DataArrayInt::New();
1046 std::copy(arr,arr+12,da->getPointer());
1047 DataArrayInt *da2=da->buildPermArrPerLevel();
1048 CPPUNIT_ASSERT_EQUAL(12,(int)da2->getNumberOfTuples());
1049 CPPUNIT_ASSERT_EQUAL(1,(int)da2->getNumberOfComponents());
1050 for(int i=0;i<12;i++)
1051 CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(i,0));
1056 void MEDCouplingBasicsTest4::testDAIOperations1()
1058 const int arr1[12]={-1,-2,4,7,3,2,6,6,4,3,0,1};
1059 DataArrayInt *da=DataArrayInt::New();
1061 std::copy(arr1,arr1+12,da->getPointer());
1062 DataArrayInt *da1=DataArrayInt::New();
1065 CPPUNIT_ASSERT_THROW(DataArrayInt::Add(da,da1),INTERP_KERNEL::Exception);//not same number of tuples/Components
1067 DataArrayInt *da2=DataArrayInt::Add(da,da1);
1068 CPPUNIT_ASSERT_EQUAL(4,(int)da2->getNumberOfTuples());
1069 CPPUNIT_ASSERT_EQUAL(3,(int)da2->getNumberOfComponents());
1070 const int expected1[12]={1,1,8,12,9,9,14,15,14,14,12,14};
1071 for(int i=0;i<12;i++)
1072 CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(0,i));
1074 da1->substractEqual(da);
1075 const int expected2[12]={3,5,0,-2,3,5,2,3,6,8,12,12};
1076 for(int i=0;i<12;i++)
1077 CPPUNIT_ASSERT_EQUAL(expected2[i],da1->getIJ(0,i));
1078 da1->rearrange(1); da1->iota(2); da1->rearrange(3);
1080 for(int i=0;i<12;i++)
1081 CPPUNIT_ASSERT_EQUAL(expected1[i],da1->getIJ(0,i));
1082 da1->rearrange(1); da1->iota(2); da1->rearrange(3);
1083 da2=DataArrayInt::Multiply(da,da1);
1084 CPPUNIT_ASSERT_EQUAL(4,(int)da2->getNumberOfTuples());
1085 CPPUNIT_ASSERT_EQUAL(3,(int)da2->getNumberOfComponents());
1086 const int expected3[12]={-2,-6,16,35,18,14,48,54,40,33,0,13};
1087 for(int i=0;i<12;i++)
1088 CPPUNIT_ASSERT_EQUAL(expected3[i],da2->getIJ(0,i));
1090 da->divideEqual(da1);
1091 CPPUNIT_ASSERT_EQUAL(4,(int)da->getNumberOfTuples());
1092 CPPUNIT_ASSERT_EQUAL(3,(int)da->getNumberOfComponents());
1093 const int expected4[12]={0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
1094 for(int i=0;i<12;i++)
1095 CPPUNIT_ASSERT_EQUAL(expected4[i],da->getIJ(0,i));
1096 std::copy(arr1,arr1+12,da->getPointer());
1097 da1->multiplyEqual(da);
1098 CPPUNIT_ASSERT_EQUAL(4,(int)da1->getNumberOfTuples());
1099 CPPUNIT_ASSERT_EQUAL(3,(int)da1->getNumberOfComponents());
1100 for(int i=0;i<12;i++)
1101 CPPUNIT_ASSERT_EQUAL(expected3[i],da1->getIJ(0,i));
1102 da1->rearrange(1); da1->iota(2); da1->rearrange(3);
1103 da2=DataArrayInt::Divide(da,da1);
1104 CPPUNIT_ASSERT_EQUAL(4,(int)da2->getNumberOfTuples());
1105 CPPUNIT_ASSERT_EQUAL(3,(int)da2->getNumberOfComponents());
1106 for(int i=0;i<12;i++)
1107 CPPUNIT_ASSERT_EQUAL(expected4[i],da2->getIJ(0,i));
1110 CPPUNIT_ASSERT_EQUAL(4,(int)da1->getNumberOfTuples());
1111 CPPUNIT_ASSERT_EQUAL(3,(int)da1->getNumberOfComponents());
1112 const int expected5[12]={160,107,80,64,53,45,40,35,32,29,26,24};
1113 for(int i=0;i<12;i++)
1114 CPPUNIT_ASSERT_EQUAL(expected5[i],da1->getIJ(0,i));
1115 da1->applyDivideBy(2);
1116 CPPUNIT_ASSERT_EQUAL(4,(int)da1->getNumberOfTuples());
1117 CPPUNIT_ASSERT_EQUAL(3,(int)da1->getNumberOfComponents());
1118 const int expected6[12]={80,53,40,32,26,22,20,17,16,14,13,12};
1119 for(int i=0;i<12;i++)
1120 CPPUNIT_ASSERT_EQUAL(expected6[i],da1->getIJ(0,i));
1121 const int expected7[12]={3,4,5,4,5,1,6,3,2,0,6,5};
1122 da1->applyModulus(7);
1123 for(int i=0;i<12;i++)
1124 CPPUNIT_ASSERT_EQUAL(expected7[i],da1->getIJ(0,i));
1126 const int expected8[12]={3,3,3,3,3,1,3,3,0,0,3,3};
1127 da1->applyRModulus(3);
1128 for(int i=0;i<12;i++)
1129 CPPUNIT_ASSERT_EQUAL(expected8[i],da1->getIJ(0,i));
1135 void MEDCouplingBasicsTest4::testEmulateMEDMEMBDC1()
1137 MEDCouplingUMesh *m1=0;
1138 MEDCouplingUMesh *m=buildPointe_1(m1);
1139 DataArrayInt *da1=DataArrayInt::New();
1140 DataArrayInt *da2=DataArrayInt::New();
1141 DataArrayInt *da3=0;
1142 DataArrayInt *da4=0;
1143 DataArrayInt *da5=0;
1144 DataArrayInt *da0=0;
1145 MEDCouplingUMesh *m2=m->emulateMEDMEMBDC(m1,da1,da2,da3,da4,da5,da0);
1146 const int expected0[47]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,36,37,32,33,34,35,38,39,40,41,42,43,44,45,46};
1147 const int expected1[6]={1,32,29,23,41,36};
1148 CPPUNIT_ASSERT_EQUAL(47,(int)da0->getNumberOfTuples());
1149 CPPUNIT_ASSERT_EQUAL(1,(int)da0->getNumberOfComponents());
1150 for(int i=0;i<47;i++)
1151 CPPUNIT_ASSERT_EQUAL(expected0[i],da0->getIJ(0,i));
1152 CPPUNIT_ASSERT_EQUAL(6,(int)da5->getNumberOfTuples());
1153 CPPUNIT_ASSERT_EQUAL(1,(int)da5->getNumberOfComponents());
1154 for(int i=0;i<6;i++)
1155 CPPUNIT_ASSERT_EQUAL(expected1[i],da5->getIJ(0,i));
1156 const int expected2[70]={0,1,2,3,4,0,5,6,7,4,8,9,1,7,10,11,12,13,14,5,15,16,17,8,18,19,20,10,21,22,23,2,13,24,25,21,16,26,27,12,19,28,29,15,22,30,31,18,36,26,28,30,24,37,32,33,34,35,38,36,39,40,41,42,37,38,43,44,45,46};
1157 CPPUNIT_ASSERT_EQUAL(70,(int)da1->getNumberOfTuples());
1158 CPPUNIT_ASSERT_EQUAL(1,(int)da1->getNumberOfComponents());
1159 for(int i=0;i<70;i++)
1160 CPPUNIT_ASSERT_EQUAL(expected2[i],da1->getIJ(0,i));
1161 const int expected3[17]={0,4,8,12,16,20,24,28,32,36,40,44,48,53,58,64,70};
1162 CPPUNIT_ASSERT_EQUAL(17,(int)da2->getNumberOfTuples());
1163 CPPUNIT_ASSERT_EQUAL(1,(int)da2->getNumberOfComponents());
1164 for(int i=0;i<17;i++)
1165 CPPUNIT_ASSERT_EQUAL(expected3[i],da2->getIJ(0,i));
1166 const int expected4[48]={0,2,4,6,7,9,11,12,14,16,17,19,20,22,24,25,27,29,30,32,34,35,37,39,40,42,43,45,46,48,49,51,52,53,54,55,56,58,60,62,63,64,65,66,67,68,69,70};
1167 //const int expected4[48]={0,2,4,6,7,9,11,12,14,16,17,19,20,22,24,25,27,29,30,32,34,35,37,39,40,42,43,45,46,48,49,51,52,54,56,57,58,59,60,62,63,64,65,66,67,68,69,70};
1168 CPPUNIT_ASSERT_EQUAL(48,(int)da4->getNumberOfTuples());
1169 CPPUNIT_ASSERT_EQUAL(1,(int)da4->getNumberOfComponents());
1170 for(int i=0;i<48;i++)
1171 CPPUNIT_ASSERT_EQUAL(expected4[i],da4->getIJ(0,i));
1172 const int expected5[70]={0,1,0,3,0,7,0,1,2,1,4,1,2,3,2,5,2,3,6,3,4,9,4,8,4,5,10,5,9,5,6,11,6,10,6,7,8,7,11,7,8,12,8,9,12,9,10,12,10,11,12,11,13,13,13,13,12,14,13,15,14,15,14,14,14,14,15,15,15,15};
1173 CPPUNIT_ASSERT_EQUAL(70,(int)da3->getNumberOfTuples());
1174 CPPUNIT_ASSERT_EQUAL(1,(int)da3->getNumberOfComponents());
1175 for(int i=0;i<70;i++)
1176 CPPUNIT_ASSERT_EQUAL(expected5[i],da3->getIJ(0,i));
1190 void MEDCouplingBasicsTest4::testGetLevArrPerCellTypes1()
1192 MEDCouplingUMesh *m1=0;
1193 MEDCouplingUMesh *m=buildPointe_1(m1);
1195 DataArrayInt *d0=DataArrayInt::New();
1196 DataArrayInt *d1=DataArrayInt::New();
1197 DataArrayInt *d2=DataArrayInt::New();
1198 DataArrayInt *d3=DataArrayInt::New();
1199 m1=m->buildDescendingConnectivity(d0,d1,d2,d3);
1200 d0->decrRef(); d1->decrRef(); d2->decrRef(); d3->decrRef();
1201 INTERP_KERNEL::NormalizedCellType order[2]={INTERP_KERNEL::NORM_TRI3,INTERP_KERNEL::NORM_QUAD4};
1202 DataArrayInt *da1=0;
1203 DataArrayInt *da0=m1->getLevArrPerCellTypes(order,order+2,da1);
1204 const int expected0[47]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1};
1205 const int expected1[47]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,36,37,32,33,34,35,38,39,40,41,42,43,44,45,46};
1206 CPPUNIT_ASSERT_EQUAL(47,(int)da0->getNumberOfTuples());
1207 CPPUNIT_ASSERT_EQUAL(1,(int)da0->getNumberOfComponents());
1208 for(int i=0;i<47;i++)
1209 CPPUNIT_ASSERT_EQUAL(expected0[i],da0->getIJ(0,i));
1210 CPPUNIT_ASSERT_EQUAL(2,(int)da1->getNumberOfTuples());
1211 CPPUNIT_ASSERT_EQUAL(1,(int)da1->getNumberOfComponents());
1212 CPPUNIT_ASSERT_EQUAL(36,da1->getIJ(0,0));//36 TRI3
1213 CPPUNIT_ASSERT_EQUAL(11,da1->getIJ(1,0));//11 QUAD4
1215 DataArrayInt *da2=da0->buildPermArrPerLevel();
1217 CPPUNIT_ASSERT_EQUAL(47,(int)da2->getNumberOfTuples());
1218 CPPUNIT_ASSERT_EQUAL(1,(int)da2->getNumberOfComponents());
1219 for(int i=0;i<47;i++)
1220 CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(0,i));
1229 void MEDCouplingBasicsTest4::testSortCellsInMEDFileFrmt1()
1231 MEDCouplingUMesh *m1=0;
1232 MEDCouplingUMesh *m=buildPointe_1(m1);
1233 MEDCouplingUMesh *m2=(MEDCouplingUMesh *)m->deepCopy();
1235 const int vals[16]={0,1,2,14,3,12,4,5,15,6,7,8,9,10,11,13};
1236 DataArrayInt *da=DataArrayInt::New();
1238 std::copy(vals,vals+16,da->getPointer());
1239 DataArrayInt *daa=da->invertArrayN2O2O2N(16);
1240 m->renumberCells(daa->getConstPointer(),false);
1242 DataArrayInt *da2=m->sortCellsInMEDFileFrmt();
1243 CPPUNIT_ASSERT(m2->isEqual(m2,1e-12));
1244 CPPUNIT_ASSERT(da->isEqual(*da2));
1252 void MEDCouplingBasicsTest4::testBuildPartAndReduceNodes1()
1254 MEDCouplingMesh *m=build2DTargetMesh_1();
1255 const int arr[2]={1,0};
1257 MEDCouplingMesh *m2=m->buildPartAndReduceNodes(arr,arr+2,da);
1258 CPPUNIT_ASSERT_EQUAL(5,m2->getNumberOfNodes());
1259 CPPUNIT_ASSERT_EQUAL(2,(int)m2->getNumberOfCells());
1260 MEDCouplingFieldDouble *f=m2->getMeasureField(true);
1261 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.125,f->getArray()->getIJ(0,0),1e-12);
1262 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.25,f->getArray()->getIJ(1,0),1e-12);
1269 void MEDCouplingBasicsTest4::testDAITransformWithIndArrR1()
1271 const int tab1[6]={2,4,5,3,6,7};
1272 const int tab2[12]={-1,-1,0,1,2,3,4,5,-1,-1,-1,-1};
1273 const int expected[6]={0,3,1,2,4,5};
1274 DataArrayInt *d=DataArrayInt::New();
1276 std::copy(tab1,tab1+6,d->getPointer());
1277 DataArrayInt *d1=DataArrayInt::New();
1279 std::copy(tab2,tab2+12,d1->getPointer());
1281 DataArrayInt *d3=d->transformWithIndArrR(d1->getConstPointer(),d1->getConstPointer()+d1->getNbOfElems());
1282 CPPUNIT_ASSERT_EQUAL(6,(int)d3->getNumberOfTuples());
1283 CPPUNIT_ASSERT_EQUAL(1,(int)d3->getNumberOfComponents());
1284 for(int i=0;i<6;i++)
1285 CPPUNIT_ASSERT_EQUAL(expected[i],d3->getIJ(i,0));
1292 void MEDCouplingBasicsTest4::testDAISplitByValueRange1()
1294 const int val1[9]={6,5,0,3,2,7,8,1,4};
1295 const int val2[3]={0,4,9};
1296 DataArrayInt *d=DataArrayInt::New();
1298 std::copy(val1,val1+9,d->getPointer());
1299 DataArrayInt *ee=0,*f=0,*g=0;
1300 d->splitByValueRange(val2,val2+3,ee,f,g);
1301 CPPUNIT_ASSERT_EQUAL(9,(int)ee->getNumberOfTuples());
1302 CPPUNIT_ASSERT_EQUAL(1,(int)ee->getNumberOfComponents());
1303 CPPUNIT_ASSERT_EQUAL(9,(int)f->getNumberOfTuples());
1304 CPPUNIT_ASSERT_EQUAL(1,(int)f->getNumberOfComponents());
1305 CPPUNIT_ASSERT_EQUAL(2,(int)g->getNumberOfTuples());
1306 CPPUNIT_ASSERT_EQUAL(1,(int)g->getNumberOfComponents());
1308 const int expected1[9]={1,1,0,0,0,1,1,0,1};
1309 const int expected2[9]={2,1,0,3,2,3,4,1,0};
1310 for(int i=0;i<9;i++)
1312 CPPUNIT_ASSERT_EQUAL(expected1[i],ee->getIJ(i,0));
1313 CPPUNIT_ASSERT_EQUAL(expected2[i],f->getIJ(i,0));
1315 CPPUNIT_ASSERT_EQUAL(0,g->getIJ(0,0));
1316 CPPUNIT_ASSERT_EQUAL(1,g->getIJ(1,0));
1323 CPPUNIT_ASSERT_THROW(d->splitByValueRange(val2,val2+3,ee,f,g),INTERP_KERNEL::Exception);
1328 void MEDCouplingBasicsTest4::testUMeshSplitProfilePerType1()
1330 const int val0[5]={2,0,1,3,4};
1331 MEDCouplingUMesh *m=build2DTargetMesh_1();
1332 m->renumberCells(val0,false);
1333 std::vector<int> code;
1334 std::vector<DataArrayInt *> idsInPflPerType;
1335 std::vector<DataArrayInt *> pfls;
1337 const int val1[3]={0,2,3};
1338 DataArrayInt *d=DataArrayInt::New();
1341 std::copy(val1,val1+3,d->getPointer());
1342 m->splitProfilePerType(d,code,idsInPflPerType,pfls);
1343 CPPUNIT_ASSERT_EQUAL(6,(int)code.size());
1344 CPPUNIT_ASSERT_EQUAL(2,(int)idsInPflPerType.size());
1345 const int expected1[6]={3,1,0, 4,2,1};
1346 for(int i=0;i<6;i++)
1347 CPPUNIT_ASSERT_EQUAL(expected1[i],code[i]);
1348 CPPUNIT_ASSERT_EQUAL(1,(int)idsInPflPerType[0]->getNumberOfTuples());
1349 CPPUNIT_ASSERT_EQUAL(0,idsInPflPerType[0]->getIJ(0,0));
1350 CPPUNIT_ASSERT_EQUAL(2,(int)idsInPflPerType[1]->getNumberOfTuples());
1351 CPPUNIT_ASSERT_EQUAL(1,idsInPflPerType[1]->getIJ(0,0));
1352 CPPUNIT_ASSERT_EQUAL(2,idsInPflPerType[1]->getIJ(1,0));
1353 idsInPflPerType[0]->decrRef();
1354 idsInPflPerType[1]->decrRef();
1355 CPPUNIT_ASSERT_EQUAL(2,(int)pfls.size());
1356 CPPUNIT_ASSERT(std::string("sup")==pfls[0]->getName());
1357 CPPUNIT_ASSERT_EQUAL(1,(int)pfls[0]->getNumberOfTuples());
1358 CPPUNIT_ASSERT_EQUAL(0,pfls[0]->getIJ(0,0));
1359 CPPUNIT_ASSERT(std::string("sup")==pfls[1]->getName());
1360 CPPUNIT_ASSERT_EQUAL(2,(int)pfls[1]->getNumberOfTuples());
1361 CPPUNIT_ASSERT_EQUAL(0,pfls[1]->getIJ(0,0));
1362 CPPUNIT_ASSERT_EQUAL(1,pfls[1]->getIJ(1,0));
1366 idsInPflPerType.clear();
1370 const int val2[4]={0,2,3,4};// all quad4 are selected here ! So no profile for Quads
1371 d=DataArrayInt::New();
1373 std::copy(val2,val2+4,d->getPointer());
1374 m->splitProfilePerType(d,code,idsInPflPerType,pfls);
1375 CPPUNIT_ASSERT_EQUAL(6,(int)code.size());
1376 CPPUNIT_ASSERT_EQUAL(2,(int)idsInPflPerType.size());
1377 const int expected2[6]={3,1,0, 4,3,-1};
1378 for(int i=0;i<6;i++)
1379 CPPUNIT_ASSERT_EQUAL(expected2[i],code[i]);
1380 CPPUNIT_ASSERT_EQUAL(1,(int)idsInPflPerType[0]->getNumberOfTuples());
1381 CPPUNIT_ASSERT_EQUAL(0,idsInPflPerType[0]->getIJ(0,0));
1382 CPPUNIT_ASSERT_EQUAL(3,(int)idsInPflPerType[1]->getNumberOfTuples());
1383 CPPUNIT_ASSERT_EQUAL(1,idsInPflPerType[1]->getIJ(0,0));
1384 CPPUNIT_ASSERT_EQUAL(2,idsInPflPerType[1]->getIJ(1,0));
1385 CPPUNIT_ASSERT_EQUAL(3,idsInPflPerType[1]->getIJ(2,0));
1386 idsInPflPerType[0]->decrRef();
1387 idsInPflPerType[1]->decrRef();
1388 CPPUNIT_ASSERT_EQUAL(1,(int)pfls.size());
1389 CPPUNIT_ASSERT_EQUAL(1,(int)pfls[0]->getNumberOfTuples());
1390 CPPUNIT_ASSERT_EQUAL(0,pfls[0]->getIJ(0,0));
1393 idsInPflPerType.clear();
1397 const int val3[3]={1,0,2};// all tri3 are selected here but not in the same order ! Profile requested for Tri3
1398 d=DataArrayInt::New();
1400 std::copy(val3,val3+3,d->getPointer());
1401 m->splitProfilePerType(d,code,idsInPflPerType,pfls);
1402 CPPUNIT_ASSERT_EQUAL(6,(int)code.size());
1403 CPPUNIT_ASSERT_EQUAL(2,(int)idsInPflPerType.size());
1404 const int expected3[6]={3,2,0, 4,1,1};
1405 for(int i=0;i<6;i++)
1406 CPPUNIT_ASSERT_EQUAL(expected3[i],code[i]);
1407 CPPUNIT_ASSERT_EQUAL(2,(int)idsInPflPerType[0]->getNumberOfTuples());
1408 CPPUNIT_ASSERT_EQUAL(0,idsInPflPerType[0]->getIJ(0,0));
1409 CPPUNIT_ASSERT_EQUAL(1,idsInPflPerType[0]->getIJ(1,0));
1410 CPPUNIT_ASSERT_EQUAL(1,(int)idsInPflPerType[1]->getNumberOfTuples());
1411 CPPUNIT_ASSERT_EQUAL(2,idsInPflPerType[1]->getIJ(0,0));
1412 idsInPflPerType[0]->decrRef();
1413 idsInPflPerType[1]->decrRef();
1414 CPPUNIT_ASSERT_EQUAL(2,(int)pfls.size());
1415 CPPUNIT_ASSERT_EQUAL(2,(int)pfls[0]->getNumberOfTuples());
1416 CPPUNIT_ASSERT_EQUAL(1,pfls[0]->getIJ(0,0));
1417 CPPUNIT_ASSERT_EQUAL(0,pfls[0]->getIJ(1,0));
1418 CPPUNIT_ASSERT_EQUAL(0,pfls[1]->getIJ(0,0));
1422 idsInPflPerType.clear();
1426 const int val4[2]={3,4};// all tri3 are selected here but not in the same order ! Profile requested for Tri3
1427 d=DataArrayInt::New();
1429 std::copy(val4,val4+2,d->getPointer());
1430 m->splitProfilePerType(d,code,idsInPflPerType,pfls);
1431 CPPUNIT_ASSERT_EQUAL(3,(int)code.size());
1432 CPPUNIT_ASSERT_EQUAL(1,(int)idsInPflPerType.size());
1433 const int expected4[3]={4,2,0};
1434 for(int i=0;i<3;i++)
1435 CPPUNIT_ASSERT_EQUAL(expected4[i],code[i]);
1436 CPPUNIT_ASSERT_EQUAL(2,(int)idsInPflPerType[0]->getNumberOfTuples());
1437 CPPUNIT_ASSERT_EQUAL(0,idsInPflPerType[0]->getIJ(0,0));
1438 CPPUNIT_ASSERT_EQUAL(1,idsInPflPerType[0]->getIJ(1,0));
1439 idsInPflPerType[0]->decrRef();
1440 CPPUNIT_ASSERT_EQUAL(1,(int)pfls.size());
1441 CPPUNIT_ASSERT_EQUAL(2,(int)pfls[0]->getNumberOfTuples());
1442 CPPUNIT_ASSERT_EQUAL(1,pfls[0]->getIJ(0,0));
1443 CPPUNIT_ASSERT_EQUAL(2,pfls[0]->getIJ(1,0));
1446 idsInPflPerType.clear();
1453 void MEDCouplingBasicsTest4::testDAIBuildExplicitArrByRanges1()
1455 DataArrayInt *d=DataArrayInt::New();
1457 const int vals1[3]={0,2,3};
1458 std::copy(vals1,vals1+3,d->getPointer());
1459 DataArrayInt *e=DataArrayInt::New();
1461 const int vals2[6]={0,3,6,10,14,20};
1462 std::copy(vals2,vals2+6,e->getPointer());
1464 DataArrayInt *f=d->buildExplicitArrByRanges(e);
1465 CPPUNIT_ASSERT_EQUAL(11,(int)f->getNumberOfTuples());
1466 CPPUNIT_ASSERT_EQUAL(1,(int)f->getNumberOfComponents());
1467 const int expected1[11]={0,1,2,6,7,8,9,10,11,12,13};
1468 for(int i=0;i<11;i++)
1469 CPPUNIT_ASSERT_EQUAL(expected1[i],f->getIJ(i,0));
1476 void MEDCouplingBasicsTest4::testDAIComputeOffsets2()
1478 DataArrayInt *d=DataArrayInt::New();
1479 const int vals1[6]={3,5,1,2,0,8};
1480 const int expected1[7]={0,3,8,9,11,11,19};
1482 std::copy(vals1,vals1+6,d->getPointer());
1483 d->computeOffsetsFull();
1484 CPPUNIT_ASSERT_EQUAL(7,(int)d->getNumberOfTuples());
1485 CPPUNIT_ASSERT_EQUAL(1,(int)d->getNumberOfComponents());
1486 for(int i=0;i<7;i++)
1487 CPPUNIT_ASSERT_EQUAL(expected1[i],d->getIJ(0,i));
1491 void MEDCouplingBasicsTest4::testMergeField3()
1493 MEDCouplingUMesh *m=build2DTargetMesh_1();
1494 m->getCoords()->setInfoOnComponent(0,"x [m]");
1495 m->getCoords()->setInfoOnComponent(1,"z [km]");
1497 m->setDescription("desc");
1498 MEDCouplingFieldDouble *f1=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1501 DataArrayDouble *arr=DataArrayDouble::New();
1503 arr->setInfoOnComponent(0,"X [m]");
1504 arr->setInfoOnComponent(1,"YY [mm]");
1505 arr->fillWithValue(2.);
1510 std::vector<const MEDCouplingFieldDouble *> tmp(1);
1512 MEDCouplingFieldDouble *f2=MEDCouplingFieldDouble::MergeFields(tmp);
1513 CPPUNIT_ASSERT(f1->isEqual(f2,1e-12,1e-12));
1519 void MEDCouplingBasicsTest4::testGetDistributionOfTypes1()
1521 MEDCouplingUMesh *m=build2DTargetMesh_1();
1522 const int tab1[5]={2,0,1,3,4};
1523 CPPUNIT_ASSERT_THROW(m->getDistributionOfTypes(),INTERP_KERNEL::Exception);
1524 m->renumberCells(tab1,false);
1525 std::vector<int> code=m->getDistributionOfTypes();
1526 CPPUNIT_ASSERT_EQUAL(6,(int)code.size());
1527 CPPUNIT_ASSERT_EQUAL(3,code[0]);
1528 CPPUNIT_ASSERT_EQUAL(2,code[1]);
1529 CPPUNIT_ASSERT_EQUAL(-1,code[2]);
1530 CPPUNIT_ASSERT_EQUAL(4,code[3]);
1531 CPPUNIT_ASSERT_EQUAL(3,code[4]);
1532 CPPUNIT_ASSERT_EQUAL(-1,code[5]);
1536 void MEDCouplingBasicsTest4::testNorm2_1()
1538 MEDCouplingUMesh *m=build2DTargetMesh_1();
1539 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1543 DataArrayDouble *d=DataArrayDouble::New();
1544 const double tab[10]={1.2,1.3,2.2,2.3,3.2,3.3,4.2,4.3,5.2,5.3};
1546 std::copy(tab,tab+10,d->getPointer());
1549 f->checkConsistencyLight();
1551 CPPUNIT_ASSERT_DOUBLES_EQUAL(11.209371079592289,f->norm2(),1e-14);
1556 void MEDCouplingBasicsTest4::testNormMax1()
1558 MEDCouplingUMesh *m=build2DTargetMesh_1();
1559 MEDCouplingFieldDouble *f=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME);
1563 DataArrayDouble *d=DataArrayDouble::New();
1564 const double tab[10]={2.3,-1.2,6.3,-7.8,2.9,7.7,2.1,0.,3.6,-7.6};
1566 std::copy(tab,tab+10,d->getPointer());
1569 f->checkConsistencyLight();
1571 CPPUNIT_ASSERT_DOUBLES_EQUAL(7.8,f->normMax(),1e-14);
1576 void MEDCouplingBasicsTest4::testFindAndCorrectBadOriented3DExtrudedCells1()
1578 const double coords[38*3]={0.0011180339887498999, -0.0011755705045849499, 0.0, -0.0012331070204200001, -0.0011755705045849499, 0.0, -0.00067557050458494599, -0.00145964954842536, 0.0, -0.00050000000000000001, -0.00086602540378443902, 0.0, 0.00140211303259031, -0.00061803398874989504, 0.0, 0.00086602540378443902, -0.00050000000000000001, 0.0, 0.001, 0.0, 0.0, 0.00034561537182258202, 0.000269164072574575, 0.0, 0.0, 0.001, 0.0, -0.00050000000000000001, 0.00086602540378443902, 0.0, -0.000269164072574575, 0.00034561537182258202, 0.0, -0.001, 0.0, 0.0, -0.00086602540378443902, -0.00050000000000000001, 0.0, -0.00034561537182258202, -0.000269164072574575, 0.0, 0.0, -0.001, 0.0, 0.00050000000000000001, -0.00086602540378443902, 0.0, 0.000269164072574575, -0.00034561537182258202, 0.0, 0.0015, -6.01853107621011e-36, 0.0, 0.00056049747291484397, -0.00145964954842536, 0.0, 0.0011180339887498999, -0.0011755705045849499, 0.00050000000000000001, -0.0012331070204200001, -0.0011755705045849499, 0.00050000000000000001, -0.00067557050458494599, -0.00145964954842536, 0.00050000000000000001, -0.00050000000000000001, -0.00086602540378443902, 0.00050000000000000001, 0.00140211303259031, -0.00061803398874989504, 0.00050000000000000001, 0.00086602540378443902, -0.00050000000000000001, 0.00050000000000000001, 0.001, 0.0, 0.00050000000000000001, 0.00034561537182258202, 0.000269164072574575, 0.00050000000000000001, 0.0, 0.001, 0.00050000000000000001, -0.00050000000000000001, 0.00086602540378443902, 0.00050000000000000001, -0.000269164072574575, 0.00034561537182258202, 0.00050000000000000001, -0.001, 0.0, 0.00050000000000000001, -0.00086602540378443902, -0.00050000000000000001, 0.00050000000000000001, -0.00034561537182258202, -0.000269164072574575, 0.00050000000000000001, 0.0, -0.001, 0.00050000000000000001, 0.00050000000000000001, -0.00086602540378443902, 0.00050000000000000001, 0.000269164072574575, -0.00034561537182258202, 0.00050000000000000001, 0.0015, -6.01853107621011e-36, 0.00050000000000000001, 0.00056049747291484397, -0.00145964954842536, 0.00050000000000000001};
1579 const int conn[56]={2, 1, 3, 21, 20, 22, 4, 0, 5, 23, 19, 24, 8, 9, 10, 27, 28, 29, 11, 12, 13, 30, 31, 32, 0, 18, 15, 5, 19, 37, 34, 24, 6, 17, 4, 5, 25, 36, 23, 24, 3, 14, 16, 13, 22, 33, 35, 32, 13, 16, 7, 10, 32, 35, 26, 29};
1580 const int connExp[64]={16, 2, 1, 3, 21, 20, 22, 16, 4, 0, 5, 23, 19, 24, 16, 8, 10, 9, 27, 29, 28, 16, 11, 13, 12, 30, 32, 31, 18, 0, 18, 15, 5, 19, 37, 34, 24,18, 6, 17, 4, 5, 25, 36, 23, 24, 18, 3, 13, 16, 14, 22, 32, 35, 33, 18, 13, 10, 7, 16, 32, 29, 26, 35};
1581 const int invalidCells[4]={2,3,6,7};
1582 MEDCouplingUMesh *m=MEDCouplingUMesh::New("Example",3);
1583 DataArrayDouble *coo=DataArrayDouble::New();
1585 std::copy(coords,coords+114,coo->getPointer());
1588 m->allocateCells(8);
1589 m->insertNextCell(INTERP_KERNEL::NORM_PENTA6,6,conn);
1590 m->insertNextCell(INTERP_KERNEL::NORM_PENTA6,6,conn+6);
1591 m->insertNextCell(INTERP_KERNEL::NORM_PENTA6,6,conn+12);
1592 m->insertNextCell(INTERP_KERNEL::NORM_PENTA6,6,conn+18);
1593 m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+24);
1594 m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+32);
1595 m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+40);
1596 m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+48);
1597 m->finishInsertingCells();
1599 DataArrayInt *v=m->findAndCorrectBadOriented3DExtrudedCells();
1600 CPPUNIT_ASSERT_EQUAL(4,(int)v->getNumberOfTuples());
1601 CPPUNIT_ASSERT(std::equal(v->begin(),v->end(),invalidCells));
1602 CPPUNIT_ASSERT(std::equal(connExp,connExp+64,m->getNodalConnectivity()->getConstPointer()));
1608 void MEDCouplingBasicsTest4::testConvertExtrudedPolyhedra1()
1610 const int conn[72]={1,2,3,4, 5,6,7,8,9,10,11,12, 13,14,15,16, 17,18,19,20,21,22, 23,24,25,26,27,28, 29,30,31,32,33,34,35,36,37,38, 39,40,41,42,43,44,45,46, 47,48,49,50,51,52,53,54,55,56,57,58, 59,60,61,62,63,64,65,66,67,68,69,70,71,72};
1611 MEDCouplingUMesh *m=MEDCouplingUMesh::New("Example",3);
1612 DataArrayDouble *coo=DataArrayDouble::New();
1614 coo->rearrange(1); coo->iota(0); coo->rearrange(3);
1617 m->allocateCells(9);
1618 m->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,conn);
1619 m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+4);
1620 m->insertNextCell(INTERP_KERNEL::NORM_TETRA4,4,conn+12);
1621 m->insertNextCell(INTERP_KERNEL::NORM_POLYHED,6,conn+16);
1622 m->insertNextCell(INTERP_KERNEL::NORM_PENTA6,6,conn+22);
1623 m->insertNextCell(INTERP_KERNEL::NORM_POLYHED,10,conn+28);
1624 m->insertNextCell(INTERP_KERNEL::NORM_HEXA8,8,conn+38);
1625 m->insertNextCell(INTERP_KERNEL::NORM_HEXGP12,12,conn+46);
1626 m->insertNextCell(INTERP_KERNEL::NORM_POLYHED,14,conn+58);
1627 m->finishInsertingCells();
1629 m->convertExtrudedPolyhedra();
1630 DataArrayInt *da=m->getNodalConnectivity();
1631 DataArrayInt *dai=m->getNodalConnectivityIndex();
1632 CPPUNIT_ASSERT_EQUAL((std::size_t)10,dai->getNbOfElems());
1633 CPPUNIT_ASSERT_EQUAL((std::size_t)159,da->getNbOfElems());
1635 const int expected1[159]={14,1,2,3,4,
1636 18,5,6,7,8,9,10,11,12,
1638 31,17,18,19,-1,20,22,21,-1,17,20,21,18,-1,18,21,22,19,-1,19,22,20,17,
1639 16,23,24,25,26,27,28,
1640 31,29,30,31,32,33,-1,34,38,37,36,35,-1,29,34,35,30,-1,30,35,36,31,-1,31,36,37,32,-1,32,37,38,33,-1,33,38,34,29,
1641 18,39,40,41,42,43,44,45,46,
1642 22,47,48,49,50,51,52,53,54,55,56,57,58,
1643 31,59,60,61,62,63,64,65,-1,66,72,71,70,69,68,67,-1,59,66,67,60,-1,60,67,68,61,-1,61,68,69,62,-1,62,69,70,63,-1,63,70,71,64,-1,64,71,72,65,-1,65,72,66,59};
1644 const int expected2[10]={0,5,14,19,42,49,86,95,108,159};
1645 CPPUNIT_ASSERT(std::equal(expected1,expected1+159,da->getConstPointer()));
1646 CPPUNIT_ASSERT(std::equal(expected2,expected2+10,dai->getConstPointer()));
1647 m->checkConsistency();
1652 void MEDCouplingBasicsTest4::testNonRegressionCopyTinyStrings()
1654 MEDCouplingUMesh *m=build2DTargetMesh_1();
1655 MEDCouplingFieldDouble *f1=m->getMeasureField(true);
1656 f1->getArray()->setInfoOnComponent(0,"P [N/m^2]");
1657 DataArrayDouble *bary=m->computeCellCenterOfMass();
1658 MEDCouplingFieldDouble *f2=f1->buildNewTimeReprFromThis(NO_TIME,false);
1660 CPPUNIT_ASSERT_THROW(f1->copyTinyAttrFrom(f2),INTERP_KERNEL::Exception);
1667 void MEDCouplingBasicsTest4::testDaDSetPartOfValuesAdv1()
1669 const double tab1[18]={3.,4.,5., 13.,14.,15., 23.,24.,25., 33.,34.,35., 43.,44.,45., 53.,54.,55.};
1670 const double tab2[9]={6.,7.,8., 16.,17.,18., 26.,27.,28.};
1671 const int tab3[6]={4,1, 2,2, 3,0};
1672 DataArrayDouble *a=DataArrayDouble::New();
1674 std::copy(tab1,tab1+18,a->getPointer());
1675 DataArrayDouble *b=DataArrayDouble::New();
1677 std::copy(tab2,tab2+9,b->getPointer());
1678 DataArrayInt *c=DataArrayInt::New();
1680 std::copy(tab3,tab3+6,c->getPointer());
1682 a->setPartOfValuesAdv(b,c);
1683 const double expected1[18]={3.,4.,5., 13.,14.,15., 26.,27.,28., 6.,7.,8., 16.,17.,18., 53.,54.,55.};
1684 std::equal(expected1,expected1+18,a->getConstPointer());
1691 void MEDCouplingBasicsTest4::testUMeshBuildSetInstanceFromThis1()
1693 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1694 MEDCouplingUMesh *m2=m->buildSetInstanceFromThis(3);
1695 CPPUNIT_ASSERT_EQUAL(m->getNodalConnectivity(),m2->getNodalConnectivity());
1696 CPPUNIT_ASSERT_EQUAL(m->getNodalConnectivityIndex(),m2->getNodalConnectivityIndex());
1697 CPPUNIT_ASSERT_EQUAL(m->getCoords(),m2->getCoords());
1701 m=MEDCouplingUMesh::New("toto",2);
1702 m2=m->buildSetInstanceFromThis(3);
1703 CPPUNIT_ASSERT_EQUAL(0,m2->getNumberOfNodes());
1704 CPPUNIT_ASSERT_EQUAL(0,(int)m2->getNumberOfCells());
1709 void MEDCouplingBasicsTest4::testUMeshMergeMeshesCVW1()
1711 MEDCouplingUMesh *m=build3DSurfTargetMesh_1();
1712 MEDCouplingUMesh *m2=MEDCouplingUMesh::New("toto",2);
1713 MEDCouplingUMesh *m3=MEDCouplingUMesh::MergeUMeshes(m,m2);
1714 m3->setName(m->getName().c_str());
1715 CPPUNIT_ASSERT(m->isEqual(m3,1e-12));
1721 void MEDCouplingBasicsTest4::testChangeUnderlyingMeshWithCMesh1()
1723 MEDCouplingCMesh* mesh=MEDCouplingCMesh::New();
1724 DataArrayDouble* coordsX=DataArrayDouble::New();
1725 double arrX[4] = { -1., 1., 2., 4. };
1726 coordsX->useArray(arrX,false, CPP_DEALLOC,4,1);
1727 DataArrayDouble* coordsY=DataArrayDouble::New();
1728 double arrY[4] = { -2., 2., 4., 8. };
1729 coordsY->useArray(arrY,false, CPP_DEALLOC,4,1);
1730 DataArrayDouble* coordsZ=DataArrayDouble::New();
1731 double arrZ[4] = { -3., 3., 6., 12. };
1732 coordsZ->useArray(arrZ,false, CPP_DEALLOC,4,1);
1733 mesh->setCoords(coordsX,coordsY,coordsZ);
1737 MEDCouplingMesh *mesh2=mesh->deepCopy();
1739 static const int ids1[9]={0,1,2,10,11,12,20,21,22};
1740 for(const int *myId=ids1;myId!=ids1+9;myId++)
1742 MEDCouplingFieldDouble *f=mesh->getMeasureField(true);
1743 f->changeUnderlyingMesh(mesh2,*myId,1e-12);
1746 mesh2->setName("uuuu");
1747 for(const int *myId=ids1+1;myId!=ids1+9;myId++)
1749 MEDCouplingFieldDouble *f=mesh->getMeasureField(true);
1750 f->changeUnderlyingMesh(mesh2,*myId,1e-12);
1758 void MEDCouplingBasicsTest4::testDADFindCommonTuples1()
1760 DataArrayDouble *da=DataArrayDouble::New();
1762 const double array1[6]={2.3,1.2,1.3,2.3,2.301,0.8};
1763 std::copy(array1,array1+6,da->getPointer());
1764 DataArrayInt *c=0,*cI=0;
1766 da->findCommonTuples(1e-2,-1,c,cI);
1767 const int expected1[3]={0,3,4};
1768 const int expected2[2]={0,3};
1769 CPPUNIT_ASSERT_EQUAL((std::size_t)3,c->getNbOfElems());
1770 CPPUNIT_ASSERT_EQUAL((std::size_t)2,cI->getNbOfElems());
1771 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,c->getConstPointer()));
1772 CPPUNIT_ASSERT(std::equal(expected2,expected2+2,cI->getConstPointer()));
1776 da->findCommonTuples(2e-1,-1,c,cI);
1777 const int expected3[5]={0,3,4,1,2};
1778 const int expected4[3]={0,3,5};
1779 CPPUNIT_ASSERT_EQUAL((std::size_t)5,c->getNbOfElems());
1780 CPPUNIT_ASSERT_EQUAL((std::size_t)3,cI->getNbOfElems());
1781 CPPUNIT_ASSERT(std::equal(expected3,expected3+5,c->getConstPointer()));
1782 CPPUNIT_ASSERT(std::equal(expected4,expected4+3,cI->getConstPointer()));
1787 const double array2[12]={2.3,2.3,1.2,1.2,1.3,1.3,2.3,2.3,2.301,2.301,0.8,0.8};
1788 std::copy(array2,array2+12,da->getPointer());
1789 da->findCommonTuples(1e-2,-1,c,cI);
1790 CPPUNIT_ASSERT_EQUAL((std::size_t)3,c->getNbOfElems());
1791 CPPUNIT_ASSERT_EQUAL((std::size_t)2,cI->getNbOfElems());
1792 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,c->getConstPointer()));
1793 CPPUNIT_ASSERT(std::equal(expected2,expected2+2,cI->getConstPointer()));
1797 da->findCommonTuples(2e-1,-1,c,cI);
1798 CPPUNIT_ASSERT_EQUAL((std::size_t)5,c->getNbOfElems());
1799 CPPUNIT_ASSERT_EQUAL((std::size_t)3,cI->getNbOfElems());
1800 CPPUNIT_ASSERT(std::equal(expected3,expected3+5,c->getConstPointer()));
1801 CPPUNIT_ASSERT(std::equal(expected4,expected4+3,cI->getConstPointer()));
1806 const double array3[18]={2.3,2.3,2.3,1.2,1.2,1.2,1.3,1.3,1.3,2.3,2.3,2.3,2.301,2.301,2.301,0.8,0.8,0.8};
1807 std::copy(array3,array3+18,da->getPointer());
1808 da->findCommonTuples(1e-2,-1,c,cI);
1809 CPPUNIT_ASSERT_EQUAL((std::size_t)3,c->getNbOfElems());
1810 CPPUNIT_ASSERT_EQUAL((std::size_t)2,cI->getNbOfElems());
1811 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,c->getConstPointer()));
1812 CPPUNIT_ASSERT(std::equal(expected2,expected2+2,cI->getConstPointer()));
1816 da->findCommonTuples(2e-1,-1,c,cI);
1817 CPPUNIT_ASSERT_EQUAL((std::size_t)5,c->getNbOfElems());
1818 CPPUNIT_ASSERT_EQUAL((std::size_t)3,cI->getNbOfElems());
1819 CPPUNIT_ASSERT(std::equal(expected3,expected3+5,c->getConstPointer()));
1820 CPPUNIT_ASSERT(std::equal(expected4,expected4+3,cI->getConstPointer()));
1824 const double array11[6]={2.3,1.2,1.3,2.4,2.5,0.8};
1826 std::copy(array11,array11+6,da->getPointer());
1827 // nbOftuples=1, no common groups
1828 da->findCommonTuples(1e-2,-1,c,cI);
1829 CPPUNIT_ASSERT_EQUAL((std::size_t)0,c->getNbOfElems());
1830 CPPUNIT_ASSERT_EQUAL((std::size_t)1,cI->getNbOfElems());
1831 CPPUNIT_ASSERT_EQUAL(0,cI->getIJ(0,0));
1833 da->alloc(6,5); //bad NumberOfComponents
1834 CPPUNIT_ASSERT_THROW(da->findCommonTuples(1e-2,-1,c,cI),INTERP_KERNEL::Exception);
1841 void MEDCouplingBasicsTest4::testDABack1()
1843 DataArrayDouble *da=DataArrayDouble::New();
1845 const double array1[6]={2.3,1.2,1.3,2.3,2.301,0.8};
1846 std::copy(array1,array1+6,da->getPointer());
1847 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.8,da->back(),1e-14);
1849 CPPUNIT_ASSERT_THROW(da->back(),INTERP_KERNEL::Exception);
1851 CPPUNIT_ASSERT_THROW(da->back(),INTERP_KERNEL::Exception);
1854 DataArrayInt *da2=DataArrayInt::New();
1856 const int array2[4]={4,7,8,2};
1857 std::copy(array2,array2+4,da2->getPointer());
1858 CPPUNIT_ASSERT_EQUAL(2,da2->back());
1860 CPPUNIT_ASSERT_THROW(da2->back(),INTERP_KERNEL::Exception);
1862 CPPUNIT_ASSERT_THROW(da2->back(),INTERP_KERNEL::Exception);
1866 void MEDCouplingBasicsTest4::testDADGetDifferentValues1()
1868 DataArrayDouble *da=DataArrayDouble::New();
1870 const double array1[6]={2.3,1.2,1.3,2.3,2.301,0.8};
1871 std::copy(array1,array1+6,da->getPointer());
1873 const double expected1[4]={2.301,1.2,1.3,0.8};
1874 DataArrayDouble *dv=da->getDifferentValues(1e-2);
1875 CPPUNIT_ASSERT_EQUAL((std::size_t)4,dv->getNbOfElems());
1876 for(int i=0;i<4;i++)
1877 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],dv->getIJ(i,0),1e-14);
1880 dv=da->getDifferentValues(2e-1);
1881 const double expected2[3]={2.301,1.3,0.8};
1882 CPPUNIT_ASSERT_EQUAL((std::size_t)3,dv->getNbOfElems());
1883 for(int i=0;i<3;i++)
1884 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],dv->getIJ(i,0),1e-14);
1889 void MEDCouplingBasicsTest4::testDAIBuildOld2NewArrayFromSurjectiveFormat2()
1891 const int arr[5]={0,3, 5,7,9};
1892 const int arrI[3]={0,2,5};
1893 DataArrayInt *a=DataArrayInt::New();
1895 std::copy(arr,arr+5,a->getPointer());
1896 DataArrayInt *b=DataArrayInt::New();
1898 std::copy(arrI,arrI+3,b->getPointer());
1900 DataArrayInt *ret=DataArrayInt::ConvertIndexArrayToO2N(10,a->begin(),b->begin(),b->end(),newNbTuple);
1901 const int expected[10]={0,1,2,0,3,4,5,4,6,4};
1902 CPPUNIT_ASSERT_EQUAL((std::size_t)10,ret->getNbOfElems());
1903 CPPUNIT_ASSERT_EQUAL(7,newNbTuple);
1904 CPPUNIT_ASSERT_EQUAL(1,(int)ret->getNumberOfComponents());
1905 CPPUNIT_ASSERT(std::equal(expected,expected+10,ret->getConstPointer()));
1906 CPPUNIT_ASSERT_THROW(DataArrayInt::ConvertIndexArrayToO2N(9,a->begin(),b->begin(),b->end(),newNbTuple),INTERP_KERNEL::Exception);
1912 void MEDCouplingBasicsTest4::testDADIReverse1()
1914 const int arr[6]={0,3,5,7,9,2};
1915 DataArrayInt *a=DataArrayInt::New();
1917 std::copy(arr,arr+6,a->getPointer());
1918 CPPUNIT_ASSERT_EQUAL(2,a->back());
1920 for(int i=0;i<6;i++)
1921 CPPUNIT_ASSERT_EQUAL(arr[5-i],a->getIJ(i,0));
1923 std::copy(arr,arr+5,a->getPointer());
1925 for(int i=0;i<5;i++)
1926 CPPUNIT_ASSERT_EQUAL(arr[4-i],a->getIJ(i,0));
1929 const double arr2[6]={0.,3.,5.,7.,9.,2.};
1930 DataArrayDouble *b=DataArrayDouble::New();
1932 std::copy(arr2,arr2+6,b->getPointer());
1934 for(int i=0;i<6;i++)
1935 CPPUNIT_ASSERT_DOUBLES_EQUAL(arr2[5-i],b->getIJ(i,0),1e-14);
1937 std::copy(arr,arr+5,b->getPointer());
1938 CPPUNIT_ASSERT_DOUBLES_EQUAL(9.,b->back(),1e-14);
1940 for(int i=0;i<5;i++)
1941 CPPUNIT_ASSERT_DOUBLES_EQUAL(arr2[4-i],b->getIJ(i,0),1e-14);
1945 void MEDCouplingBasicsTest4::testGetNodeIdsInUse1()
1947 MEDCouplingUMesh *m0=build2DTargetMesh_1();
1948 const int CellIds[2]={1,2};
1949 MEDCouplingUMesh *m1=static_cast<MEDCouplingUMesh *>(m0->buildPartOfMySelf(CellIds,CellIds+2,true));
1950 int newNbOfNodes=-1;
1951 DataArrayInt *arr=m1->getNodeIdsInUse(newNbOfNodes);
1952 const int expected[9]={-1,0,1,-1,2,3,-1,-1,-1};
1953 CPPUNIT_ASSERT_EQUAL(4,newNbOfNodes);
1954 CPPUNIT_ASSERT_EQUAL((std::size_t)9,arr->getNbOfElems());
1955 CPPUNIT_ASSERT(std::equal(expected,expected+9,arr->getConstPointer()));
1956 DataArrayInt *arr2=arr->invertArrayO2N2N2O(newNbOfNodes);
1957 CPPUNIT_ASSERT_EQUAL((std::size_t)4,arr2->getNbOfElems());
1958 const int expected2[4]={1,2,4,5};
1959 CPPUNIT_ASSERT(std::equal(expected2,expected2+4,arr2->getConstPointer()));
1966 void MEDCouplingBasicsTest4::testBuildDescendingConnec2()
1968 MEDCouplingUMesh *mesh=build2DTargetMesh_1();
1969 DataArrayInt *desc=DataArrayInt::New();
1970 DataArrayInt *descIndx=DataArrayInt::New();
1971 DataArrayInt *revDesc=DataArrayInt::New();
1972 DataArrayInt *revDescIndx=DataArrayInt::New();
1974 MEDCouplingUMesh *mesh2=mesh->buildDescendingConnectivity2(desc,descIndx,revDesc,revDescIndx);
1975 mesh2->checkConsistencyLight();
1976 CPPUNIT_ASSERT_EQUAL(1,mesh2->getMeshDimension());
1977 CPPUNIT_ASSERT_EQUAL(13,(int)mesh2->getNumberOfCells());
1978 CPPUNIT_ASSERT_EQUAL((std::size_t)14,revDescIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(14,(int)revDescIndx->getNumberOfTuples());
1979 CPPUNIT_ASSERT_EQUAL((std::size_t)6,descIndx->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(6,(int)descIndx->getNumberOfTuples());
1980 CPPUNIT_ASSERT_EQUAL((std::size_t)18,desc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,(int)desc->getNumberOfTuples());
1981 CPPUNIT_ASSERT_EQUAL((std::size_t)18,revDesc->getNbOfElems()); CPPUNIT_ASSERT_EQUAL(18,(int)revDesc->getNumberOfTuples());
1982 const int expected1[18]={1,2,3,4,-3,5,6, 7,8,-5,9,10,-2,11, 12,13,-7,-10};
1983 CPPUNIT_ASSERT(std::equal(expected1,expected1+18,desc->getConstPointer()));
1984 const int expected2[6]={0,4,7,10,14,18};
1985 CPPUNIT_ASSERT(std::equal(expected2,expected2+6,descIndx->getConstPointer()));
1986 const int expected3[14]={0,1,3,5,6,8,9,11,12,13,15,16,17,18};
1987 CPPUNIT_ASSERT(std::equal(expected3,expected3+14,revDescIndx->getConstPointer()));
1988 const int expected4[18]={0, 0,3, 0,1, 0, 1,2, 1, 2,4, 2, 3, 3,4, 3, 4, 4};
1989 CPPUNIT_ASSERT(std::equal(expected4,expected4+18,revDesc->getConstPointer()));
1990 DataArrayInt *conn=mesh2->getNodalConnectivity();
1991 DataArrayInt *connIndex=mesh2->getNodalConnectivityIndex();
1992 const int expected5[14]={0,3,6,9,12,15,18,21,24,27,30,33,36,39};
1993 CPPUNIT_ASSERT(std::equal(expected5,expected5+14,connIndex->getConstPointer()));
1994 const int expected6[39]={1, 0, 3, 1, 3, 4, 1, 4, 1, 1, 1, 0, 1, 4, 2, 1, 2, 1, 1, 4, 5, 1, 5, 2, 1, 6, 7, 1, 7, 4, 1, 3, 6, 1, 7, 8, 1, 8, 5};
1995 CPPUNIT_ASSERT(std::equal(expected6,expected6+39,conn->getConstPointer()));
1998 descIndx->decrRef();
2000 revDescIndx->decrRef();
2005 void MEDCouplingBasicsTest4::testIntersect2DMeshesTmp1()
2007 MEDCouplingCMesh *m1c=MEDCouplingCMesh::New();
2008 DataArrayDouble *coordX=DataArrayDouble::New();
2009 const double arrX[4]={-1., 1., 2., 4.};
2011 std::copy(arrX,arrX+4,coordX->getPointer());
2012 m1c->setCoordsAt(0,coordX);
2013 DataArrayDouble *coordY=DataArrayDouble::New();
2014 const double arrY[4]={-2., 2., 4., 8.};
2016 std::copy(arrY,arrY+4,coordY->getPointer());
2017 m1c->setCoordsAt(1,coordY);
2018 MEDCouplingUMesh *m1=m1c->buildUnstructured();
2019 const int subPart1[3]={3,4,5};
2020 MEDCouplingUMesh *m1bis=static_cast<MEDCouplingUMesh *>(m1->buildPartOfMySelf(subPart1,subPart1+3,false));
2021 MEDCouplingUMesh *m2tmp=static_cast<MEDCouplingUMesh *>(m1->deepCopy());
2022 const int subPart2[3]={0,1,2};
2023 MEDCouplingUMesh *m2=static_cast<MEDCouplingUMesh *>(m2tmp->buildPartOfMySelf(subPart2,subPart2+3,false));
2024 const double vec[2]={0.5,0.5};
2026 // End of construction of input meshes m1bis and m2 -> start of specific part of the test
2027 DataArrayInt *d1=0,*d2=0;
2028 MEDCouplingUMesh *m3=MEDCouplingUMesh::Intersect2DMeshes(m1bis,m2,1e-10,d1,d2);
2029 const int expected1[8]={0,0,1,1,1,2,2,2};
2030 const int expected2[8]={0,-1,0,1,-1,1,2,-1};
2031 CPPUNIT_ASSERT_EQUAL(8,(int)d1->getNumberOfTuples());
2032 CPPUNIT_ASSERT_EQUAL(8,(int)d2->getNumberOfTuples());
2033 CPPUNIT_ASSERT_EQUAL(8,(int)m3->getNumberOfCells());
2034 CPPUNIT_ASSERT_EQUAL(22,m3->getNumberOfNodes());
2035 CPPUNIT_ASSERT_EQUAL(2,m3->getSpaceDimension());
2036 CPPUNIT_ASSERT(std::equal(expected1,expected1+8,d1->getConstPointer()));
2037 CPPUNIT_ASSERT(std::equal(expected2,expected2+8,d2->getConstPointer()));
2038 const int expected3[44]={5,17,1,16,12,5,16,0,4,5,17,12,5,18,1,17,13,5,19,2,18,13,5,17,5,6,19,13,5,20,2,19,14,5,21,3,20,14,5,19,6,7,21,14};
2039 const int expected4[9]={0,5,12,17,22,28,33,38,44};
2040 const double expected5[44]={-1.0,2.0,1.0,2.0,2.0,2.0,4.0,2.0,-1.0,4.0,1.0,4.0,2.0,4.0,4.0,4.0,-0.5,-1.5,1.5,-1.5,2.5,-1.5,4.5,-1.5,-0.5,2.5,1.5,2.5,2.5,2.5,4.5,2.5,-0.5,2.0,1.0,2.5,1.5,2.0,2.0,2.5,2.5,2.0,4.0,2.5};
2041 CPPUNIT_ASSERT_EQUAL(44,(int)m3->getNodalConnectivity()->getNumberOfTuples());
2042 CPPUNIT_ASSERT_EQUAL(9,(int)m3->getNodalConnectivityIndex()->getNumberOfTuples());
2043 CPPUNIT_ASSERT(std::equal(expected3,expected3+44,m3->getNodalConnectivity()->getConstPointer()));
2044 CPPUNIT_ASSERT(std::equal(expected4,expected4+9,m3->getNodalConnectivityIndex()->getConstPointer()));
2045 for(int i=0;i<44;i++)
2046 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],m3->getCoords()->getIJ(0,i),1e-12);
2060 void MEDCouplingBasicsTest4::testFindNodesOnLine1()
2062 MEDCouplingUMesh *mesh=build2DTargetMesh_1();
2063 const double pt[2]={-0.3,-0.3};
2064 const double pt2[3]={0.,0.,0.};
2065 const double pt3[3]={-0.3,0.,0.};
2066 const double vec[2]={0.,1.};
2067 const double vec2[3]={1.,0.,0.};
2068 const double vec3[3]={0.,1.,1.};
2069 const int expected1[3]={0,3,6};
2070 std::vector<int> res;
2071 mesh->findNodesOnLine(pt,vec,1e-12,res);
2072 CPPUNIT_ASSERT_EQUAL(3,(int)res.size());
2073 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,res.begin()));
2076 mesh->changeSpaceDimension(3);
2077 mesh->rotate(pt2,vec2,M_PI/4.);
2078 mesh->findNodesOnLine(pt3,vec3,1e-12,res);
2079 CPPUNIT_ASSERT_EQUAL(3,(int)res.size());
2080 CPPUNIT_ASSERT(std::equal(expected1,expected1+3,res.begin()));
2085 void MEDCouplingBasicsTest4::testIntersect2DMeshesTmp2()
2087 MEDCouplingCMesh *m1c=MEDCouplingCMesh::New();
2088 DataArrayDouble *coordsX1=DataArrayDouble::New();
2089 const double arrX1[4]={ 0., 1., 1.5, 2. };
2090 coordsX1->alloc(4,1);
2091 std::copy(arrX1,arrX1+4,coordsX1->getPointer());
2092 m1c->setCoordsAt(0,coordsX1);
2093 DataArrayDouble *coordsY1=DataArrayDouble::New();
2094 const double arrY1[3]={ 0., 1.5, 3.};
2095 coordsY1->alloc(3,1);
2096 std::copy(arrY1,arrY1+3,coordsY1->getPointer());
2097 m1c->setCoordsAt(1,coordsY1);
2098 MEDCouplingUMesh *m1=m1c->buildUnstructured();
2100 MEDCouplingCMesh *m2c=MEDCouplingCMesh::New();
2101 DataArrayDouble *coordsX2=DataArrayDouble::New();
2102 const double arrX2[3]={ 0., 1., 2. };
2103 coordsX2->alloc(3,1);
2104 std::copy(arrX2,arrX2+3,coordsX2->getPointer());
2105 m2c->setCoordsAt(0,coordsX2);
2106 DataArrayDouble *coordsY2=DataArrayDouble::New();
2107 coordsY2->alloc(3,1);
2108 const double arrY2[3]={ 0., 1., 3.};
2109 std::copy(arrY2,arrY2+3,coordsY2->getPointer());
2110 m2c->setCoordsAt(1,coordsY2);
2111 MEDCouplingUMesh *m2=m2c->buildUnstructured();
2113 DataArrayInt *d1=0,*d2=0;
2114 MEDCouplingUMesh *m3=MEDCouplingUMesh::Intersect2DMeshes(m1,m2,1e-10,d1,d2);
2115 const int expected1[9]={0,0,1,1,2,2,3,4,5};
2116 const int expected2[9]={0,2,1,3,1,3,2,3,3};
2117 CPPUNIT_ASSERT_EQUAL(9,(int)d1->getNumberOfTuples());
2118 CPPUNIT_ASSERT_EQUAL(9,(int)d2->getNumberOfTuples());
2119 CPPUNIT_ASSERT_EQUAL(9,(int)m3->getNumberOfCells());
2120 CPPUNIT_ASSERT_EQUAL(22,m3->getNumberOfNodes());
2121 CPPUNIT_ASSERT_EQUAL(2,m3->getSpaceDimension());
2122 CPPUNIT_ASSERT(std::equal(expected1,expected1+9,d1->getConstPointer()));
2123 CPPUNIT_ASSERT(std::equal(expected2,expected2+9,d2->getConstPointer()));
2124 const int expected3[45]={5,16,13,12,15,5,15,4,5,16,5,21,2,13,16,5,16,5,6,21,5,17,14,2,21,5,21,6,7,17,5,4,18,19,5,5,5,19,10,6,5,6,10,20,7};
2125 const int expected4[10]={0,5,10,15,20,25,30,35,40,45};
2126 const double expected5[44]={0.0,0.0,1.0,0.0,1.5,0.0,2.0,0.0,0.0,1.5,1.0,1.5,1.5,1.5,2.0,1.5,0.0,3.0,1.0,3.0,1.5,3.0,2.0,3.0,0.0,0.0,1.0,0.0,2.0,0.0,0.0,1.0,1.0,1.0,2.0,1.0,0.0,3.0,1.0,3.0,2.0,3.0,1.5,1.0};
2127 CPPUNIT_ASSERT_EQUAL(45,(int)m3->getNodalConnectivity()->getNumberOfTuples());
2128 CPPUNIT_ASSERT_EQUAL(10,(int)m3->getNodalConnectivityIndex()->getNumberOfTuples());
2129 CPPUNIT_ASSERT(std::equal(expected3,expected3+45,m3->getNodalConnectivity()->getConstPointer()));
2130 CPPUNIT_ASSERT(std::equal(expected4,expected4+10,m3->getNodalConnectivityIndex()->getConstPointer()));
2131 for(int i=0;i<44;i++)
2132 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],m3->getCoords()->getIJ(0,i),1e-12);
2138 coordsX1->decrRef();
2139 coordsY1->decrRef();
2142 coordsX2->decrRef();
2143 coordsY2->decrRef();
2147 void MEDCouplingBasicsTest4::testBuildPartOfMySelfSafe1()
2149 MEDCouplingUMesh *mesh=build2DTargetMesh_1();
2150 const int input1[4]={0,-1,4,2};
2151 const int input2[4]={0,4,5,4};
2152 CPPUNIT_ASSERT_THROW(mesh->buildPartOfMySelf(input1,input1+4,true),INTERP_KERNEL::Exception);
2153 CPPUNIT_ASSERT_THROW(mesh->buildPartOfMySelf(input2,input2+4,true),INTERP_KERNEL::Exception);
2157 void MEDCouplingBasicsTest4::testIntersect2DMeshesTmp3()
2159 double m1Coords[50]={0.,0.,1.,0.,1.5,0.,0.,1.,0.,1.5,-1.,0.,-1.5,0.,0.,-1,0.,-1.5,0.5,0.,1.25,0.,0.70710678118654757,0.70710678118654757,1.0606601717798214,1.0606601717798214,0.,0.5,0.,1.25,-0.70710678118654757,0.70710678118654757,-1.0606601717798214,1.0606601717798214,-0.5,0.,-1.25,0.,-0.70710678118654757,-0.70710678118654757,-1.0606601717798214,-1.0606601717798214,0.,-0.5,0.,-1.25,0.70710678118654757,-0.70710678118654757,1.0606601717798214,-1.0606601717798214};
2160 int m1Conn[56]={0,3,1,13,11,9, 3,4,2,1,14,12,10,11, 5,3,0,15,13,17, 6,4,3,5,16,14,15,18, 5,0,7,17,21,19, 6,5,7,8,18,19,22,20, 0,1,7,9,23,21, 1,2,8,7,10,24,22,23};
2161 MEDCouplingUMesh *m1=MEDCouplingUMesh::New();
2162 m1->setMeshDimension(2);
2163 m1->allocateCells(8);
2164 m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn);
2165 m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+6);
2166 m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+14);
2167 m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+20);
2168 m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+28);
2169 m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+34);
2170 m1->insertNextCell(INTERP_KERNEL::NORM_TRI6,6,m1Conn+42);
2171 m1->insertNextCell(INTERP_KERNEL::NORM_QUAD8,8,m1Conn+48);
2172 m1->finishInsertingCells();
2173 DataArrayDouble *myCoords1=DataArrayDouble::New();
2174 myCoords1->alloc(25,2);
2175 std::copy(m1Coords,m1Coords+50,myCoords1->getPointer());
2176 m1->setCoords(myCoords1);
2177 myCoords1->decrRef();
2179 double m2Coords[30]={0.,0.,1.1,0.,1.1,1.,0.,1.,1.7,0.,1.7,1.,-1.1,1.,-1.1,0.,-1.7,0.,-1.7,1.,-1.7,-1,-1.1,-1.,0.,-1.,1.1,-1,1.7,-1.};
2180 int m2Conn[32]={0,3,2,1, 1,2,5,4, 7,6,3,0, 8,9,6,7, 7,0,12,11, 8,7,11,10, 0,1,13,12, 1,4,14,13};
2181 MEDCouplingUMesh *m2=MEDCouplingUMesh::New();
2182 m2->setMeshDimension(2);
2183 m2->allocateCells(8);
2184 for(int i=0;i<8;i++)
2185 m2->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,m2Conn+4*i);
2186 m2->finishInsertingCells();
2187 DataArrayDouble *myCoords2=DataArrayDouble::New();
2188 myCoords2->alloc(15,2);
2189 std::copy(m2Coords,m2Coords+30,myCoords2->getPointer());
2190 m2->setCoords(myCoords2);
2191 myCoords2->decrRef();
2193 DataArrayInt *d1=0,*d2=0;
2194 MEDCouplingUMesh *m3=MEDCouplingUMesh::Intersect2DMeshes(m1,m2,1e-10,d1,d2);
2196 const int expected1[16]={0,1,1,1,2,3,3,3,4,5,5,5,6,7,7,7};
2197 const int expected2[16]={0,0,1,-1,2,2,3,-1,4,4,5,-1,6,6,7,-1};
2198 CPPUNIT_ASSERT_EQUAL(16,(int)d1->getNumberOfTuples());
2199 CPPUNIT_ASSERT_EQUAL(16,(int)d2->getNumberOfTuples());
2200 CPPUNIT_ASSERT_EQUAL(16,(int)m3->getNumberOfCells());
2201 CPPUNIT_ASSERT_EQUAL(104,m3->getNumberOfNodes());
2202 CPPUNIT_ASSERT_EQUAL(2,m3->getSpaceDimension());
2203 CPPUNIT_ASSERT(std::equal(expected1,expected1+16,d1->getConstPointer()));
2204 CPPUNIT_ASSERT(std::equal(expected2,expected2+16,d2->getConstPointer()));
2205 const int expected3[136]={6,28,1,25,44,45,46,8,26,1,28,27,47,48,49,50,8,40,2,26,27,51,52,53,54,8,28,4,40,27,55,56,57,58,6,28,25,5,59,60,61,8,28,5,32,31,62,63,64,65,8,32,6,41,31,66,67,68,69,8,41,4,28,31,70,71,72,73,6,25,37,5,74,75,76,8,32,5,37,36,77,78,79,80,8,42,6,32,36,81,82,83,84,8,37,8,42,36,85,86,87,88,6,1,37,25,89,90,91,8,37,1,26,38,92,93,94,95,8,26,2,43,38,96,97,98,99,8,43,8,37,38,100,101,102,103};
2206 const int expected4[17]={0,7,16,25,34,41,50,59,68,75,84,93,102,109,118,127,136};
2207 const double expected5[208]={0.,0.,1.,0.,1.5,0.,0.,1.,0.,1.5,-1.,0.,-1.5,0.,0.,-1.,0.,-1.5,0.5,0.,1.25,0.,0.7071067811865476,0.7071067811865476,1.0606601717798214,1.0606601717798214,0.,0.5,0.,1.25,-0.7071067811865476,0.7071067811865476,-1.0606601717798214,1.0606601717798214,-0.5,0.,-1.25,0.,-0.7071067811865476,-0.7071067811865476,-1.0606601717798214,-1.0606601717798214,0.,-0.5,0.,-1.25,0.7071067811865476,-0.7071067811865476,1.0606601717798214,-1.0606601717798214,0.,0.,1.1,0.,1.1,1.,0.,1.,1.7,0.,1.7,1.,-1.1,1.,-1.1,0.,-1.7,0.,-1.7,1.,-1.7,-1.,-1.1,-1.,0.,-1.,1.1,-1.,1.7,-1.,1.118033988749895,1.,-1.118033988749895,1.,-1.118033988749895,-1.,1.118033988749895,-1.,0.7071067811865477,0.7071067811865476,0.5,0.,0.,0.5,1.05,0.,0.7071067811865475,0.7071067811865477,0.55,1.,1.1,0.5,1.4012585384440737,0.535233134659635,1.3,0.,1.1,0.5,1.1090169943749475,1.,0.,1.25,0.6123724356957946,1.369306393762915,1.1090169943749475,1.,0.55,1.,0.,0.5,-0.5,0.,-0.7071067811865477,0.7071067811865476,-0.7071067811865475,0.7071067811865477,-1.05,0.,-1.1,0.5,-0.55,1.,-1.3,0.,-1.4012585384440737,0.5352331346596344,-1.1090169943749475,1.,-1.1,0.5,-0.6123724356957941,1.3693063937629155,0.,1.25,-0.55,1.,-1.1090169943749475,1.,0.,-0.5,-0.7071067811865475,-0.7071067811865477,-0.5,0.,-1.05,0.,-0.7071067811865478,-0.7071067811865475,-0.55,-1.,-1.1,-0.5,-1.4012585384440734,-0.5352331346596354,-1.3,0.,-1.1,-0.5,-1.1090169943749475,-1.,0.,-1.25,-0.6123724356957945,-1.369306393762915,-1.1090169943749475,-1.,-0.55,-1.,0.7071067811865475,-0.7071067811865477,0.,-0.5,0.5,0.,0.7071067811865477,-0.7071067811865475,1.05,0.,1.1,-0.5,0.55,-1.,1.3,0.,1.4012585384440737,-0.535233134659635,1.1090169943749475,-1.,1.1,-0.5,0.6123724356957946,-1.369306393762915,0.,-1.25,0.55,-1.,1.1090169943749475,-1.0};
2208 CPPUNIT_ASSERT_EQUAL(136,(int)m3->getNodalConnectivity()->getNumberOfTuples());
2209 CPPUNIT_ASSERT_EQUAL(17,(int)m3->getNodalConnectivityIndex()->getNumberOfTuples());
2210 CPPUNIT_ASSERT(std::equal(expected3,expected3+136,m3->getNodalConnectivity()->getConstPointer()));
2211 CPPUNIT_ASSERT(std::equal(expected4,expected4+17,m3->getNodalConnectivityIndex()->getConstPointer()));
2212 for(int i=0;i<208;i++)
2213 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected5[i],m3->getCoords()->getIJ(0,i),1e-12);