1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2022 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 if sys.platform == "win32":
24 from MEDCouplingCompat import *
26 from medcoupling import *
28 from math import pi,e,sqrt,cos,sin
29 from datetime import datetime
30 from MEDCouplingDataForTest import MEDCouplingDataForTest
31 import rlcompleter,readline # this line has to be here,to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@cea.fr
33 class MEDCouplingBasicsTest7(unittest.TestCase):
35 def testDAIGetIdsEqual1(self):
36 tab1=[5,-2,-4,-2,3,2,-2];
37 da=DataArrayInt64.New();
38 da.setValues(tab1,7,1);
39 da2=da.findIdsEqual(-2);
40 self.assertEqual(3,da2.getNumberOfTuples());
41 self.assertEqual(1,da2.getNumberOfComponents());
43 self.assertEqual(expected1,da2.getValues());
46 def testDAIGetIdsEqualList1(self):
47 tab1=[5,-2,-4,-2,3,2,-2];
48 da=DataArrayInt64.New();
49 da.setValues(tab1,7,1);
50 da2=da.findIdsEqualList([3,-2,0]);
51 self.assertEqual(4,da2.getNumberOfTuples());
52 self.assertEqual(1,da2.getNumberOfComponents());
54 self.assertEqual(expected1,da2.getValues());
57 def testDAIsUniform1(self):
59 da=DataArrayInt64.New();
60 da.setValues(tab1,5,1);
61 self.assertTrue(da.isUniform(1));
63 self.assertTrue(not da.isUniform(1));
65 self.assertTrue(da.isUniform(1));
66 da2=da.convertToDblArr();
67 self.assertTrue(da2.isUniform(1.,1.e-12));
68 da2.setIJ(1,0,1.+1.e-13);
69 self.assertTrue(da2.isUniform(1.,1.e-12));
70 da2.setIJ(1,0,1.+1.e-11);
71 self.assertTrue(not da2.isUniform(1.,1.e-12));
74 def testDAIBuildComplement1(self):
75 a=DataArrayInt64.New();
78 b=a.buildComplement(12);
79 self.assertEqual(8,b.getNumberOfTuples());
80 self.assertEqual(1,b.getNumberOfComponents());
81 expected1=[0,2,4,5,6,9,10,11]
83 self.assertEqual(expected1[i],b.getIJ(0,i));
87 def testDAIBuildUnion1(self):
88 a=DataArrayInt64.New();
90 a.setValues(tab1,4,1);
91 c=DataArrayInt64.New();
93 c.setValues(tab2,5,1);
95 self.assertEqual(7,b.getNumberOfTuples());
96 self.assertEqual(1,b.getNumberOfComponents());
97 expected1=[0,1,3,5,7,8,18]
99 self.assertEqual(expected1[i],b.getIJ(0,i));
101 b=DataArrayInt64.BuildUnion([a,c]);
102 self.assertEqual(7,b.getNumberOfTuples());
103 self.assertEqual(1,b.getNumberOfComponents());
104 expected1=[0,1,3,5,7,8,18]
106 self.assertEqual(expected1[i],b.getIJ(0,i));
110 def testDAIBuildIntersection1(self):
111 a=DataArrayInt64.New();
113 a.setValues(tab1,4,1);
114 c=DataArrayInt64.New();
116 c.setValues(tab2,5,1);
117 b=a.buildIntersection(c);
118 self.assertEqual(2,b.getNumberOfTuples());
119 self.assertEqual(1,b.getNumberOfComponents());
122 self.assertEqual(expected1[i],b.getIJ(0,i));
124 b=DataArrayInt64.BuildIntersection([a,c]);
125 self.assertEqual(2,b.getNumberOfTuples());
126 self.assertEqual(1,b.getNumberOfComponents());
129 self.assertEqual(expected1[i],b.getIJ(0,i));
133 def testDAIDeltaShiftIndex1(self):
134 a=DataArrayInt64.New();
136 a.setValues(tab,7,1);
137 b=a.deltaShiftIndex();
138 self.assertEqual(6,b.getNumberOfTuples());
139 self.assertEqual(1,b.getNumberOfComponents());
140 expected1=[2,3,1,0,2,6]
142 self.assertEqual(expected1[i],b.getIJ(0,i));
146 def testDAIBuildSubstraction1(self):
147 a=DataArrayInt64.New()
150 b=DataArrayInt64.New()
153 self.assertEqual([2,6,8],a.buildSubstraction(b).getValues())
156 def testDAIBuildPermutationArr1(self):
157 a=DataArrayInt64.New()
158 a.setValues([4,5,6,7,8],5,1)
159 b=DataArrayInt64.New()
160 b.setValues([5,4,8,6,7],5,1)
161 c=a.buildPermutationArr(b)
162 self.assertEqual([1,0,4,2,3],c.getValues())
163 self.assertTrue(a.isEqualWithoutConsideringStrAndOrder(b))
165 self.assertTrue(not a.isEqualWithoutConsideringStrAndOrder(b))
166 self.assertRaises(InterpKernelException,a.buildPermutationArr,b)
169 b.setIJ(4,0,4)#a==[4,5,6,4,8] and b==[5,4,8,6,4]
170 self.assertTrue(a.isEqualWithoutConsideringStrAndOrder(b))
171 c=a.buildPermutationArr(b)
172 self.assertEqual([1,3,4,2,3],c.getValues())
173 d=b.convertToDblArr()
176 self.assertEqual(expect3,b.getValues())
178 self.assertEqual(5,d.getNumberOfTuples());
179 self.assertEqual(1,d.getNumberOfComponents());
181 self.assertAlmostEqual(float(expect3[i]),d.getIJ(i,0),14);
185 def testDAIAggregateMulti1(self):
186 a=DataArrayInt64.New()
187 a.setValues(list(range(4)),2, 2)
189 b=DataArrayInt64.New()
190 b.setValues(list(range(6)), 3, 2)
191 c=DataArrayInt64.Aggregate([a,b])
192 self.assertEqual(list(range(4)) + list(range(6)), c.getValues())
193 self.assertEqual("aa",c.getName())
194 self.assertEqual(5,c.getNumberOfTuples())
195 self.assertEqual(2,c.getNumberOfComponents())
198 def testDAICheckAndPreparePermutation1(self):
199 vals1=[9,10,0,6,4,11,3,7];
200 expect1=[5,6,0,3,2,7,1,4];
201 vals2=[9,10,0,6,10,11,3,7];
202 da=DataArrayInt64.New();
203 da.setValues(vals1,8,1);
204 da2=da.checkAndPreparePermutation();
205 self.assertEqual(8,da2.getNumberOfTuples());
206 self.assertEqual(1,da2.getNumberOfComponents());
208 self.assertEqual(expect1[i],da2.getIJ(i,0));
211 da=DataArrayInt64.New();
214 da2=da.checkAndPreparePermutation();
215 self.assertEqual(1,da2.getNumberOfComponents());
216 self.assertTrue(da2.isIota(8));
218 da=DataArrayInt64.New();
220 da.setValues(vals2,8,1);
221 self.assertRaises(InterpKernelException,da.checkAndPreparePermutation);
224 def testDAIChangeSurjectiveFormat1(self):
225 vals1=[0,3,2,3,2,2,1,2]
226 expected1=[0,1,2,6,8]
227 expected2=[0, 6, 2,4,5,7, 1,3]
228 da=DataArrayInt64.New();
229 da.setValues(vals1,8,1);
231 da2,da2I=da.changeSurjectiveFormat(4);
232 self.assertEqual(5,da2I.getNumberOfTuples());
233 self.assertEqual(8,da2.getNumberOfTuples());
234 self.assertEqual(expected1,da2I.getValues());
235 self.assertEqual(expected2,da2.getValues());
237 self.assertRaises(InterpKernelException,da.changeSurjectiveFormat,3);
241 def testDAIGetIdsNotEqual1(self):
242 d=DataArrayInt64.New();
243 vals1=[2,3,5,6,8,5,5,6,1,-5]
244 d.setValues(vals1,10,1);
245 d2=d.findIdsNotEqual(5);
246 self.assertEqual(7,d2.getNumberOfTuples());
247 self.assertEqual(1,d2.getNumberOfComponents());
248 expected1=[0,1,3,4,7,8,9]
250 self.assertEqual(expected1[i],d2.getIJ(0,i));
253 self.assertRaises(InterpKernelException,d.findIdsNotEqual,5);
257 d3=d.findIdsNotEqualList(vals3);
258 self.assertEqual(5,d3.getNumberOfTuples());
259 self.assertEqual(1,d3.getNumberOfComponents());
260 expected2=[0,1,4,8,9]
262 self.assertEqual(expected2[i],d3.getIJ(0,i));
266 def testDAIComputeOffsets1(self):
267 d=DataArrayInt64.New();
269 expected1=[0,3,8,9,11,11]
270 d.setValues(vals1,6,1);
272 self.assertEqual(6,d.getNumberOfTuples());
273 self.assertEqual(1,d.getNumberOfComponents());
275 self.assertEqual(expected1[i],d.getIJ(0,i));
279 def testDAITransformWithIndArr1(self):
280 if not MEDCouplingUse64BitIDs():
283 tab2=[0,1,1,3,3,0,1,3,2,2,3,0]
284 expected=[17,18,18,19,19,17,18,19,22,22,19,17]
285 d=DataArrayInt64.New();
286 d.setValues(tab1,4,1);
287 d1=DataArrayInt64.New();
288 d1.setValues(tab2,12,1);
291 d1.transformWithIndArr(d);
292 self.assertEqual(12,d1.getNumberOfTuples());
293 self.assertEqual(1,d1.getNumberOfComponents());
295 self.assertEqual(expected[i],d1.getIJ(i,0));
299 d1.transformWithIndArr(tab1)
300 self.assertEqual(12,d1.getNumberOfTuples());
301 self.assertEqual(1,d1.getNumberOfComponents());
303 self.assertEqual(expected[i],d1.getIJ(i,0));
307 def testDAIBuildPermArrPerLevel1(self):
308 arr=[2,0,1,1,0,1,2,0,1,1,0,0]
309 expected1=[10,0,5,6,1,7,11,2,8,9,3,4]
310 da=DataArrayInt64.New();
311 da.setValues(arr,12,1);
312 da2=da.buildPermArrPerLevel();
313 self.assertEqual(12,da2.getNumberOfTuples());
314 self.assertEqual(1,da2.getNumberOfComponents());
316 self.assertEqual(expected1[i],da2.getIJ(i,0));
320 def testDAIOperations1(self):
321 arr1=[-1,-2,4,7,3,2,6,6,4,3,0,1]
322 da=DataArrayInt64.New();
323 da.setValues(arr1,4,3);
324 da1=DataArrayInt64.New();
327 self.assertRaises(InterpKernelException,DataArrayInt64.Add,da,da1);#not same number of tuples/Components
329 da2=DataArrayInt64.Add(da,da1);
330 self.assertEqual(4,da2.getNumberOfTuples());
331 self.assertEqual(3,da2.getNumberOfComponents());
332 expected1=[1,1,8,12,9,9,14,15,14,14,12,14]
334 self.assertEqual(expected1[i],da2.getIJ(0,i));
336 da1.substractEqual(da);
337 expected2=[3,5,0,-2,3,5,2,3,6,8,12,12]
339 self.assertEqual(expected2[i],da1.getIJ(0,i));
341 da1.rearrange(1); da1.iota(2); da1.rearrange(3);
344 self.assertEqual(expected1[i],da1.getIJ(0,i));
346 da1.rearrange(1); da1.iota(2); da1.rearrange(3);
347 da2=DataArrayInt64.Multiply(da,da1);
348 self.assertEqual(4,da2.getNumberOfTuples());
349 self.assertEqual(3,da2.getNumberOfComponents());
350 expected3=[-2,-6,16,35,18,14,48,54,40,33,0,13]
352 self.assertEqual(expected3[i],da2.getIJ(0,i));
355 self.assertEqual(4,da.getNumberOfTuples());
356 self.assertEqual(3,da.getNumberOfComponents());
357 expected4=[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
359 self.assertEqual(expected4[i],da.getIJ(0,i));
361 da.setValues(arr1,4,3);
362 da1.multiplyEqual(da);
363 self.assertEqual(4,da1.getNumberOfTuples());
364 self.assertEqual(3,da1.getNumberOfComponents());
366 self.assertEqual(expected3[i],da1.getIJ(0,i));
368 da1.rearrange(1); da1.iota(2); da1.rearrange(3);
369 da2=DataArrayInt64.Divide(da,da1);
370 self.assertEqual(4,da2.getNumberOfTuples());
371 self.assertEqual(3,da2.getNumberOfComponents());
373 self.assertEqual(expected4[i],da2.getIJ(0,i));
376 self.assertEqual(4,da1.getNumberOfTuples());
377 self.assertEqual(3,da1.getNumberOfComponents());
378 expected5=[160,107,80,64,53,45,40,35,32,29,26,24]
380 self.assertEqual(expected5[i],da1.getIJ(0,i));
382 da1.applyDivideBy(2);
383 self.assertEqual(4,da1.getNumberOfTuples());
384 self.assertEqual(3,da1.getNumberOfComponents());
385 expected6=[80,53,40,32,26,22,20,17,16,14,13,12]
387 self.assertEqual(expected6[i],da1.getIJ(0,i));
389 expected7=[3,4,5,4,5,1,6,3,2,0,6,5]
392 self.assertEqual(expected7[i],da1.getIJ(0,i));
395 expected8=[3,3,3,3,3,1,3,3,0,0,3,3]
396 da1.applyRModulus(3);
398 self.assertEqual(expected8[i],da1.getIJ(0,i));
402 def testDAITransformWithIndArrR1(self):
404 tab2=[-1,-1,0,1,2,3,4,5,-1,-1,-1,-1]
405 expected=[0,3,1,2,4,5]
406 d=DataArrayInt64.New();
407 d.setValues(tab1,6,1);
408 d1=DataArrayInt64.New();
409 d1.setValues(tab2,12,1);
412 d3=d.transformWithIndArrR(d1);
413 self.assertEqual(6,d3.getNumberOfTuples());
414 self.assertEqual(1,d3.getNumberOfComponents());
416 self.assertEqual(expected[i],d3.getIJ(i,0));
420 d3=d.transformWithIndArrR(tab2)
421 self.assertEqual(6,d3.getNumberOfTuples());
422 self.assertEqual(1,d3.getNumberOfComponents());
424 self.assertEqual(expected[i],d3.getIJ(i,0));
428 def testDAISplitByValueRange1(self):
429 val1=[6,5,0,3,2,7,8,1,4]
431 d=DataArrayInt64.New();
432 d.setValues(val1,9,1);
433 e,f,g=d.splitByValueRange(val2);
434 self.assertEqual(9,e.getNumberOfTuples());
435 self.assertEqual(1,e.getNumberOfComponents());
436 self.assertEqual(9,f.getNumberOfTuples());
437 self.assertEqual(1,f.getNumberOfComponents());
438 self.assertEqual(2,g.getNumberOfTuples());
439 self.assertEqual(1,g.getNumberOfComponents());
441 expected1=[1,1,0,0,0,1,1,0,1]
442 expected2=[2,1,0,3,2,3,4,1,0]
444 self.assertEqual(expected1[i],e.getIJ(i,0));
445 self.assertEqual(expected2[i],f.getIJ(i,0));
447 self.assertEqual(0,g.getIJ(0,0));
448 self.assertEqual(1,g.getIJ(1,0));
451 self.assertRaises(InterpKernelException,d.splitByValueRange,val2);
452 # non regression test in python wrapping
453 rg=DataArrayInt64([0,10,29,56,75,102,121,148,167,194,213,240,259,286,305,332,351,378,397,424,443,470,489,516])
454 a,b,c=DataArrayInt64([75]).splitByValueRange(rg)
455 assert(a.isEqual(DataArrayInt64([4])))
456 assert(b.isEqual(DataArrayInt64([0])))
457 assert(c.isEqual(DataArrayInt64([4])))
460 def testDAIBuildExplicitArrByRanges1(self):
461 d=DataArrayInt64.New();
463 d.setValues(vals1,3,1);
464 e=DataArrayInt64.New();
465 vals2=[0,3,6,10,14,20]
466 e.setValues(vals2,6,1);
468 f=d.buildExplicitArrByRanges(e);
469 self.assertEqual(11,f.getNumberOfTuples());
470 self.assertEqual(1,f.getNumberOfComponents());
471 expected1=[0,1,2,6,7,8,9,10,11,12,13]
473 self.assertEqual(expected1[i],f.getIJ(i,0));
477 def testDAIComputeOffsets2(self):
478 d=DataArrayInt64.New();
480 expected1=[0,3,8,9,11,11,19]
481 d.setValues(vals1,6,1);
482 d.computeOffsetsFull();
483 self.assertEqual(7,d.getNumberOfTuples());
484 self.assertEqual(1,d.getNumberOfComponents());
486 self.assertEqual(expected1[i],d.getIJ(0,i));
490 def testDAIBuildOld2NewArrayFromSurjectiveFormat2(self):
493 a=DataArrayInt.New();
494 a.setValues(arr,5,1);
495 b=DataArrayInt.New();
496 b.setValues(arrI,3,1);
497 ret,newNbTuple=DataArrayInt64.ConvertIndexArrayToO2N(10,a,b);
498 expected=[0,1,2,0,3,4,5,4,6,4]
499 self.assertEqual(10,ret.getNbOfElems());
500 self.assertEqual(7,newNbTuple);
501 self.assertEqual(1,ret.getNumberOfComponents());
502 self.assertEqual(expected,ret.getValues());
503 self.assertRaises(InterpKernelException,DataArrayInt64.ConvertIndexArrayToO2N,9,a,b);
506 def testDAIBuildUnique1(self):
507 d=DataArrayInt64([1,2,2,3,3,3,3,4,5,5,7,7,7,19])
509 self.assertTrue(e.isEqual(DataArrayInt64([1,2,3,4,5,7,19])))
512 def testDAIPartitionByDifferentValues1(self):
513 d=DataArrayInt64([1,0,1,2,0,2,2,-3,2])
514 expected=[[-3,[7]],[0,[1,4]],[1,[0,2]],[2,[3,5,6,8]]]
515 for i,elt in enumerate(zip(*d.partitionByDifferentValues())):
516 self.assertEqual(expected[i][0],elt[1])
517 self.assertEqual(expected[i][1],elt[0].getValues())
521 def testDAICheckMonotonic1(self):
523 data2=[6,2,0,-8,-9,-56]
526 d=DataArrayInt64.New(data1);
527 self.assertTrue(d.isMonotonic(True));
528 self.assertTrue(not d.isMonotonic(False));
529 d.checkMonotonic(True);
530 self.assertRaises(InterpKernelException,d.checkMonotonic,False)
531 d=DataArrayInt64.New(data2);
532 self.assertTrue(d.isMonotonic(False));
533 self.assertTrue(not d.isMonotonic(True));
534 d.checkMonotonic(False);
535 self.assertRaises(InterpKernelException,d.checkMonotonic,True)
536 d=DataArrayInt64.New(data3);
537 self.assertTrue(not d.isMonotonic(False));
538 self.assertTrue(not d.isMonotonic(True));
539 self.assertRaises(InterpKernelException,d.checkMonotonic,True)
540 self.assertRaises(InterpKernelException,d.checkMonotonic,False)
541 d=DataArrayInt64.New(data4);
542 self.assertTrue(not d.isMonotonic(False));
543 self.assertTrue(not d.isMonotonic(True));
544 self.assertRaises(InterpKernelException,d.checkMonotonic,True)
545 self.assertRaises(InterpKernelException,d.checkMonotonic,False)
546 d=DataArrayInt64.New(0,1)
547 self.assertTrue(d.isMonotonic(True));
548 self.assertTrue(d.isMonotonic(False));
549 d.checkMonotonic(True);
550 d.checkMonotonic(False);
551 d=DataArrayInt64.New(data4,3,2);#throw because nbComp!=1
552 self.assertRaises(InterpKernelException,d.isMonotonic,True)
553 self.assertRaises(InterpKernelException,d.isMonotonic,False)
554 self.assertRaises(InterpKernelException,d.checkMonotonic,True)
555 self.assertRaises(InterpKernelException,d.checkMonotonic,False)
558 def testDAIBuildSubstractionOptimized1(self):
559 da1=DataArrayInt64.New([1,3,5,6,7,9,13])
560 da2=DataArrayInt64.New([3,5,9])
561 da3=DataArrayInt64.New([1,3,5])
562 da4=DataArrayInt64.New([1,3,5,6,7,9,13])
564 a=da1.buildSubstractionOptimized(da2);
565 self.assertTrue(a.isEqual(DataArrayInt64([1,6,7,13])));
567 a=da1.buildSubstractionOptimized(da3);
568 self.assertTrue(a.isEqual(DataArrayInt64([6,7,9,13])));
570 a=da1.buildSubstractionOptimized(da4);
571 self.assertTrue(a.isEqual(DataArrayInt64([])));
574 def testDAIIsStrictlyMonotonic1(self):
575 da1=DataArrayInt64.New([1,3,5,6,7,9,13])
576 self.assertTrue(da1.isStrictlyMonotonic(True));
577 da1.checkStrictlyMonotonic(True);
578 self.assertTrue(da1.isMonotonic(True));
579 da1.checkMonotonic(True);
580 self.assertTrue(not da1.isStrictlyMonotonic(False));
581 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,False)
582 self.assertTrue(not da1.isMonotonic(False));
583 self.assertRaises(InterpKernelException,da1.checkMonotonic,False)
585 da1=DataArrayInt64.New([1,3,5,6,6,9,13])
586 self.assertTrue(not da1.isStrictlyMonotonic(True));
587 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,True)
588 self.assertTrue(da1.isMonotonic(True));
589 da1.checkMonotonic(True);
590 self.assertTrue(not da1.isStrictlyMonotonic(False));
591 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,False)
592 self.assertTrue(not da1.isMonotonic(False));
593 self.assertRaises(InterpKernelException,da1.checkMonotonic,False)
595 da1=DataArrayInt64.New([1,3,5,6,5,9,13])
596 self.assertTrue(not da1.isStrictlyMonotonic(True));
597 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,True)
598 self.assertTrue(not da1.isMonotonic(True));
599 self.assertRaises(InterpKernelException,da1.checkMonotonic,True)
600 self.assertTrue(not da1.isStrictlyMonotonic(False));
601 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,False)
602 self.assertTrue(not da1.isMonotonic(False));
603 self.assertRaises(InterpKernelException,da1.checkMonotonic,False)
605 da1=DataArrayInt64.New([13,9,7,6,5,3,1])
606 self.assertTrue(not da1.isStrictlyMonotonic(True));
607 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,True)
608 self.assertTrue(not da1.isMonotonic(True));
609 self.assertRaises(InterpKernelException,da1.checkMonotonic,True)
610 self.assertTrue(da1.isStrictlyMonotonic(False));
611 da1.checkStrictlyMonotonic(False);
612 self.assertTrue(da1.isMonotonic(False));
613 da1.checkMonotonic(False);
615 da1=DataArrayInt64.New([13,9,6,6,5,3,1])
616 self.assertTrue(not da1.isStrictlyMonotonic(True));
617 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,True)
618 self.assertTrue(not da1.isMonotonic(True));
619 self.assertRaises(InterpKernelException,da1.checkMonotonic,True)
620 self.assertTrue(not da1.isStrictlyMonotonic(False));
621 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,False)
622 self.assertTrue(da1.isMonotonic(False));
623 da1.checkMonotonic(False);
625 da1=DataArrayInt64.New([13,9,5,6,5,3,1])
626 self.assertTrue(not da1.isStrictlyMonotonic(True));
627 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,True)
628 self.assertTrue(not da1.isMonotonic(True));
629 self.assertRaises(InterpKernelException,da1.checkMonotonic,True)
630 self.assertTrue(not da1.isStrictlyMonotonic(False));
631 self.assertRaises(InterpKernelException,da1.checkStrictlyMonotonic,False)
632 self.assertTrue(not da1.isMonotonic(False));
633 self.assertRaises(InterpKernelException,da1.checkMonotonic,False)
635 da1=DataArrayInt64.New([])
636 self.assertTrue(da1.isStrictlyMonotonic(True));
637 da1.checkStrictlyMonotonic(True);
638 self.assertTrue(da1.isMonotonic(True));
639 da1.checkMonotonic(True);
640 self.assertTrue(da1.isStrictlyMonotonic(False));
641 da1.checkStrictlyMonotonic(False);
642 self.assertTrue(da1.isMonotonic(False));
643 da1.checkMonotonic(False);
645 da1=DataArrayInt64.New([13])
646 self.assertTrue(da1.isStrictlyMonotonic(True));
647 da1.checkStrictlyMonotonic(True);
648 self.assertTrue(da1.isMonotonic(True));
649 da1.checkMonotonic(True);
650 self.assertTrue(da1.isStrictlyMonotonic(False));
651 da1.checkStrictlyMonotonic(False);
652 self.assertTrue(da1.isMonotonic(False));
653 da1.checkMonotonic(False);
656 def testDAIIndicesOfSubPart(self):
657 a=DataArrayInt64([9,10,0,6,4,11,3,8])
658 b=DataArrayInt64([6,0,11,8])
659 c=a.indicesOfSubPart(b)
660 self.assertTrue(c.isEqual(DataArrayInt([3,2,5,7])))
662 d=DataArrayInt64([9,10,0,6,4,11,0,8])
663 self.assertRaises(InterpKernelException,d.indicesOfSubPart,b) # 0 appears twice in the d array
664 f=DataArrayInt64([6,0,11,8,12])
665 self.assertRaises(InterpKernelException,a.indicesOfSubPart,f) # 12 in f does not exist in a
668 def testDAIsortToHaveConsecutivePairs(self):
669 dref=DataArrayInt64([(6, 216), (216, 218), (218, 220), (220, 222), (222, 224), (224, 226)])
670 dtest=DataArrayInt64([(6, 216), (218, 216), (224, 226), (222, 220), (218, 220), (222, 224)])
671 dtest.sortToHaveConsecutivePairs()
672 self.assertTrue(dtest.isEqual(dref))
674 def testDAIFromLinkedListOfPairToList1(self):
675 d=DataArrayInt64([(5,7),(7,3),(3,12),(12,17)])
676 zeRes=DataArrayInt64([5,7,3,12,17])
677 self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
679 self.assertRaises(InterpKernelException,d.fromLinkedListOfPairToList)
681 self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
682 d2=DataArrayInt64([(5,7)])
683 self.assertTrue(d2.fromLinkedListOfPairToList().isEqual(DataArrayInt64([5,7])))
684 d3=DataArrayInt64([(5,7),(7,3),(4,12),(12,17)])
685 self.assertRaises(InterpKernelException,d3.fromLinkedListOfPairToList) # not a linked list of pair
686 d4=DataArrayInt64([(5,7),(7,3),(12,3),(12,17)])
687 self.assertRaises(InterpKernelException,d4.fromLinkedListOfPairToList) # not a linked list of pair, but can be repaired !
688 d4.sortEachPairToMakeALinkedList()
689 self.assertTrue(d4.fromLinkedListOfPairToList().isEqual(zeRes))
692 def testDAIfindIdsExt1(self):
693 d=DataArrayInt64([4,6,-2,3,7,0,10])
694 self.assertTrue(d.findIdsGreaterOrEqualTo(3).isEqual(DataArrayInt([0,1,3,4,6])))
695 self.assertTrue(d.findIdsGreaterThan(3).isEqual(DataArrayInt([0,1,4,6])))
696 self.assertTrue(d.findIdsLowerThan(3).isEqual(DataArrayInt([2,5])))
697 self.assertTrue(d.findIdsLowerOrEqualTo(3).isEqual(DataArrayInt([2,3,5])))
700 def testDAICheckUniformAndGuess1(self):
701 d=DataArrayInt64([3,3],1,2)
702 self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non single compo
704 self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# empty
706 self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non allocated
707 d=DataArrayInt64([3,3,3])
708 self.assertEqual(3,d.checkUniformAndGuess())
709 d=DataArrayInt64([7])
710 self.assertEqual(7,d.checkUniformAndGuess())
711 d=DataArrayInt64([3,4,3])
712 self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non uniform
715 def testDAIFindIdForEach1(self):
716 a1=DataArrayInt64([17,27,2,10,-4,3,12,27,16])
717 b1=DataArrayInt64([3,16,-4,27,17])
718 ret=a1.findIdForEach(b1)
719 self.assertTrue(ret.isEqual(DataArrayInt([5,8,4,7,0])))
720 self.assertTrue(a1[ret].isEqual(b1))
721 b2=DataArrayInt64([3,16,22,27,17])
722 self.assertRaises(InterpKernelException,a1.findIdForEach,b2) # 22 not in a1 !
724 self.assertRaises(InterpKernelException,a1.findIdForEach,b1) # a1 is not single component
727 def testGlobalHelpers(self):
728 arr0 = vtk2med_cell_types()
729 self.assertEqual(len(arr0),43)
730 arr1 = med2vtk_cell_types()
731 self.assertEqual(len(arr1),34)
732 arr2 = AllGeometricTypes()
733 self.assertEqual(len(arr2),25)
735 MEDCouplingUMesh.GetReprOfGeometricType(elt)
736 self.assertNotEqual(MEDCouplingUMesh.GetDimensionOfGeometricType(elt),-1)
739 def testVoronoi2D_3(self):
741 Non regression test for EDF20418 : After 8.5.0 MEDCouplingUMesh.Interset2DMeshes method (called by voronoize) is sensible to cell orientation of 2 input meshes. This test check correct behavior in
742 case of non standard orientation input cell.
744 coo = DataArrayDouble([0.018036113896685007,0.030867224641316506,0.019000000000000003,0.030833333333333407,0.018518056948342503,0.030850278987324904,0.018773068345659904,0.031180320157635305,0.018546136691319805,0.031527306981937307,0.018291125294002404,0.031197265811626906],6,2)
745 m = MEDCouplingUMesh("mesh",2)
748 m.insertNextCell(NORM_TRI3,[0,1,4])
749 f=MEDCouplingFieldDouble(ON_GAUSS_PT)
751 f.setArray(DataArrayDouble([12613576.708019681, 18945164.734307285, 22385248.637775388, 17074219.938821714, 19361929.467164982, 19258841.562907547]))
752 f.setGaussLocalizationOnType(NORM_TRI3,[0, 0, 1, 0, 0, 1],[0.0915762, 0.0915762, 0.816848, 0.0915762, 0.0915762, 0.816848, 0.445948, 0.108103, 0.445948, 0.445948, 0.108103, 0.445948],[0.0549759, 0.0549759, 0.0549759, 0.111691, 0.111691, 0.111691])
754 f_voro = f.voronoize(1e-13)
755 ref_area = DataArrayDouble([4.6679303278867127, 4.2514546761810138, 4.2514546761809337, 6.6206415950989804, 6.2643538685231039, 6.6206415950989884])
756 area = f_voro.buildMeasureField(True).getArray()*1e8
757 self.assertTrue(ref_area.isEqual(area,1e-6))
758 ref_bary = DataArrayDouble([(0.018231625096313969, 0.030950287685553721), (0.018826045778781105, 0.030916927013719033), (0.018533397739746087, 0.031364396601025746), (0.018541498169815956, 0.030944333493252929), (0.018660195622447071, 0.031132366117047686), (0.018400646702087166, 0.031159700554391174)])
759 bary = f_voro.getMesh().computeCellCenterOfMass()
760 self.assertTrue(ref_bary.isEqual(bary,1e-8))
761 self.assertTrue(f_voro.getArray().isEqual(f.getArray(),1e-8))
764 def testDAIOccurenceRankInThis(self):
765 arr=DataArrayInt([5,3,2,1,4,5,2,1,0,11,5,4])
766 self.assertTrue(arr.occurenceRankInThis().isEqual(DataArrayInt([0,0,0,0,0,1,1,1,0,0,2,1])))
768 def testDAIFindPermutationFromFirstToSecondDuplicate(self):
769 arr0 = DataArrayInt([5,3,2,1,4,5,2,1,0,11,5,4])
770 arr1 = DataArrayInt([0,1,1,2,2,3,4,4,5,5,5,11])
771 self.assertTrue(DataArrayInt.FindPermutationFromFirstToSecondDuplicate(arr0,arr1).isEqual(DataArrayInt([8,5,3,1,6,9,4,2,0,11,10,7])))
772 self.assertTrue(DataArrayInt.FindPermutationFromFirstToSecondDuplicate(arr1,arr0).isEqual(DataArrayInt([8,3,7,2,6,1,4,11,0,5,10,9])))
774 def testDAIIndexOfSameConsecutiveValueGroups(self):
775 arr = DataArrayInt([0,1,1,2,2,3,4,4,5,5,5,11])
776 self.assertTrue(arr.indexOfSameConsecutiveValueGroups().isEqual(DataArrayInt([0,1,3,5,6,8,11,12])))
778 def testSkyLineGroupPacks(self):
779 arr = DataArrayInt([1,4,5,0,2,4,5,6,1,3,5,6,7,2,6,7,0,1,5,8,9,0,1,2,4,6,8,9,10,1,2,3,5,7,9,10,11,2,3,6,10,11,4,5,9,12,13,4,5,6,8,10,12,13,14,5,6,7,9,11,13,14,15,6,7,10,14,15,8,9,13,8,9,10,12,14,9,10,11,13,15,10,11,14])
780 arrI = DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84])
781 sk = MEDCouplingSkyLineArray(arrI,arr)
782 part = DataArrayInt([0,3,4,7,16])
783 sk2 = sk.groupPacks(part)
784 self.assertTrue(sk2.getValuesArray().isEqual(arr))
785 self.assertTrue(sk2.getIndexArray().isEqual(DataArrayInt([0,13,16,37,84])))
787 def testSkyLineUniqueNotSortedByPack(self):
788 arrI = DataArrayInt([0,3,9,15,18,24,36,48,54])
789 arr = DataArrayInt([1,4,5,0,4,5,2,5,6,3,6,7,1,5,6,2,6,7,0,1,5,5,8,9,0,1,4,6,9,10,1,2,4,6,8,9,2,3,5,7,9,10,1,2,5,7,10,11,2,3,6,6,10,11])
790 sk = MEDCouplingSkyLineArray(arrI,arr)
791 sk2 = sk.uniqueNotSortedByPack()
792 self.assertTrue(sk2.getIndexArray().isEqual(DataArrayInt([0,3,8,13,16,21,29,37,42])))
793 self.assertTrue(sk2.getValuesArray().isEqual(DataArrayInt([1,4,5,0,2,4,5,6,1,3,5,6,7,2,6,7,0,1,5,8,9,0,1,2,4,6,8,9,10,1,2,3,5,7,9,10,11,2,3,6,10,11])))
795 def testSkyLineAggregatePacks1(self):
796 arr = DataArrayDouble(3) ; arr.iota()
797 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m = m.buildUnstructured()
798 a,b = m.computeEnlargedNeighborsOfNodes()
799 sk = MEDCouplingSkyLineArray(b,a)
801 sk1.getValuesArray()[:] *= 2
803 sk2.getValuesArray()[:] *= 3
804 skOut = MEDCouplingSkyLineArray.AggregatePacks([sk,sk1,sk2])
805 self.assertTrue(skOut.getIndexArray().isEqual(DataArrayInt([0,9,24,33,48,72,87,96,111,120])))
806 self.assertTrue(skOut.getValuesArray().isEqual(DataArrayInt([1,3,4,2,6,8,3,9,12,0,2,3,4,5,0,4,6,8,10,0,6,9,12,15,1,4,5,2,8,10,3,12,15,0,1,4,6,7,0,2,8,12,14,0,3,12,18,21,0,1,2,3,5,6,7,8,0,2,4,6,10,12,14,16,0,3,6,9,15,18,21,24,1,2,4,7,8,2,4,8,14,16,3,6,12,21,24,3,4,7,6,8,14,9,12,21,3,4,5,6,8,6,8,10,12,16,9,12,15,18,24,4,5,7,8,10,14,12,15,21])))
808 def testDACopySorted1(self):
809 d = DataArrayInt32([5,1,100,20])
810 self.assertTrue(d.copySorted().isEqual(DataArrayInt32([1,5,20,100])))
811 d = DataArrayInt64([5,1,100,20])
812 self.assertTrue(d.copySorted().isEqual(DataArrayInt64([1,5,20,100])))
813 d = DataArrayInt([5,1,100,20])
814 self.assertTrue(d.copySorted().isEqual(DataArrayInt([1,5,20,100])))
815 d = DataArrayDouble([5,1,100,20])
816 self.assertTrue(d.copySorted().isEqual(DataArrayDouble([1,5,20,100]),1e-10))
818 def testFieldAreStrictlyCompatible(self):
819 arr=DataArrayDouble(10) ; arr.iota()
820 m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
821 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(m)
822 f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m)
823 self.assertTrue(f.areStrictlyCompatible(f2))
824 self.assertTrue(f.areStrictlyCompatibleForMulDiv(f2))
825 f2.setMesh(f2.getMesh().deepCopy())
826 self.assertTrue(not f.areStrictlyCompatible(f2))
827 self.assertTrue(not f.areStrictlyCompatibleForMulDiv(f2))
828 f3=MEDCouplingFieldDouble(ON_NODES) ; f3.setMesh(m)
829 self.assertTrue(not f.areStrictlyCompatible(f3))
830 self.assertTrue(not f.areStrictlyCompatibleForMulDiv(f3))
832 def testBugZipConnectivityTraducer(self):
834 Non regression test : here cell #1 and cell #2 are nearly the same but not the same. zipConnectivityTraducer called by areCellsIncludedIn
835 failed to capture that.
837 coo = DataArrayDouble([0,1,2,3],4,1)
838 m = MEDCouplingUMesh("",1)
841 m.insertNextCell(NORM_SEG2,[0,1])
842 m.insertNextCell(NORM_SEG2,[1,2])
843 m.insertNextCell(NORM_SEG2,[2,1])
845 a,b = m.areCellsIncludedIn(m,0)
847 self.assertTrue(b.isIota(3))
849 self.assertTrue(m.deepCopy().zipConnectivityTraducer(0).isIota(3))
850 self.assertTrue(m.deepCopy().zipConnectivityTraducer(1).isIota(3))
851 self.assertTrue(m.deepCopy().zipConnectivityTraducer(2).isEqual(DataArrayInt([0,1,1])))
853 def testBugAreCellsIncludedIn1(self):
855 Non regression test: a.areCellsIncludedIn(b) was buggy when some cells in b were duplicated into a following specified policy.
857 coo = DataArrayDouble([0,1,2,3,4],5,1)
858 m = MEDCouplingUMesh("",1)
861 # m contains several duplicated cells - some of those duplicated cells will be in m1
863 m.insertNextCell(NORM_SEG2,[0,1])
865 m.insertNextCell(NORM_SEG2,[1,2])
867 m.insertNextCell(NORM_SEG2,[2,3])
869 m.insertNextCell(NORM_SEG2,[3,4])
871 bexp = DataArrayInt([0,1,2, 3,4,5,6, 9,10])
874 a,b = m.areCellsIncludedIn(m1,0)
876 self.assertTrue(b.isEqual(DataArrayInt([2,2,2, 6,6,6,6, 10,10])))
878 bexp2 = DataArrayInt([0,1,2, 3,4,0, 6, 9,10])
880 a,b = m.areCellsIncludedIn(m2,0)
882 self.assertTrue(b.isEqual(DataArrayInt([2,2,2,6,6,2,6,10,10])))
884 def testSkyLineArrayThreshold(self):
885 x = DataArrayInt([0, 1, 2, 11, 12, 13, 3, 4, 5, 6, 14, 15, 16, 17, 9, 10, 18, 19])
886 xi = DataArrayInt([0, 6, 14, 18])
887 sk = MEDCouplingSkyLineArray(xi,x)
888 lsk,rsk = sk.thresholdPerPack(11)
889 self.assertTrue(lsk.getValuesArray().isEqual(DataArrayInt([0, 1, 2, 3, 4, 5, 6, 9, 10])))
890 self.assertTrue(lsk.getIndexArray().isEqual(DataArrayInt([0, 3, 7, 9])))
891 self.assertTrue(rsk.getValuesArray().isEqual(DataArrayInt([11, 12, 13, 14, 15, 16, 17, 18, 19])))
892 self.assertTrue(rsk.getIndexArray().isEqual(DataArrayInt([0, 3, 7, 9])))
894 def testPenta18GaussNE(self):
895 conn = [1,0,2,4,3,5,6,7,8,9,13,14,11,10,15,12,17,16]
896 coo = DataArrayDouble([(27.237499999999997, 9.8, 0.0), (26.974999999999994, 9.8, 0.0), (27.111517409545634, 9.532083869948877, 0.0), (27.237499999999997, 9.8, 0.5000000000000001), (26.974999999999994, 9.8, 0.5000000000000002), (27.111517409545634, 9.532083869948877, 0.5), (27.106249999999996, 9.8, 0.0), (27.17450870477282, 9.666041934974439, 0.0), (27.04325870477281, 9.666041934974439, 0.0), (27.106249999999996, 9.8, 0.5000000000000001), (27.237499999999997, 9.8, 0.25), (26.974999999999994, 9.8, 0.2500000000000001), (27.106249999999996, 9.8, 0.2500000000000001), (27.174508704772816, 9.666041934974439, 0.5), (27.043258704772814, 9.666041934974439, 0.5000000000000001), (27.111517409545634, 9.532083869948877, 0.25), (27.043258704772818, 9.666041934974436, 0.25000000000000006), (27.174508704772816, 9.666041934974436, 0.25)])
897 m = MEDCouplingUMesh("mesh",3)
900 m.insertNextCell(NORM_PENTA18,conn)
901 f = MEDCouplingFieldDouble(ON_GAUSS_NE)
903 f.setArray(DataArrayDouble(18*[0.]))
904 self.assertTrue(f.getLocalizationOfDiscr().isEqual(coo[conn],1e-10))
906 def testDADEigenValuesPb(self):
907 """EDF22126 : eigen values with Identity matrix returned nan. Now it returns correct eigen values 1.0 """
908 valuesExp = DataArrayDouble([(1.,1.,1.),(2.,-1.,0.),(2.,0.,1.),(3.,0.,0.)])
909 d = DataArrayDouble(4, 6)
910 for i,(v0, v1, v2, v3, v4, v5,) in enumerate([
914 (1, 1, 1, 1, 1, 1)]):
915 d[i] = [v0, v1, v2, v3, v4, v5]
916 self.assertTrue(d.eigenValues().isEqual(valuesExp,1e-12))
919 def testBugOnReprOf1SGTUMesh(self):
920 """ Non reg bug on repr of empty MEDCoupling1SGTUMesh instance """
921 m = MEDCoupling1SGTUMesh()
926 m = MEDCoupling1DGTUMesh()
932 def testCheckGeomConsistency0(self):
933 """Test of MEDCouplingUMesh.checkGeomConsistency"""
934 m = MEDCouplingUMesh("",2)
935 m.setCoords(DataArrayDouble([(0,0),(1,0),(2,0),(0,1),(1,1),(2,1)]))
937 m.insertNextCell(NORM_TRI6,[0,1,2,3,4,5])
938 m.insertNextCell(NORM_TRI6,[0,1,3,3,4,5])
940 self.assertRaises(InterpKernelException,m.checkGeomConsistency) # cell1 is incorrect because node 3 is repeated twice
941 m.getNodalConnectivity()[10]=2 # replace 3 by 2 for cell#1 to fix the problem
943 m.checkGeomConsistency() # now m is OK
945 def testInt32Int64Arr0(self):
947 arr = DataArrayInt32(n)
948 arr.iota() ; arr.rearrange(3)
949 comps = ["a","bb","ccc"]
951 arr.setName(name) ; arr.setInfoOnComponents(comps)
952 self.assertEqual(arr.accumulate(),[135, 145, 155])
953 arr2 = arr.convertToInt64Arr() # test is here
954 self.assertEqual(arr2.accumulate(),[135, 145, 155])
955 self.assertTrue(isinstance(arr2,DataArrayInt64))
956 self.assertEqual(arr2.getName(),name)
957 self.assertEqual(arr2.getInfoOnComponents(),comps)
958 arr3 = arr2.convertToInt32Arr() # test is here
959 self.assertEqual(arr3.accumulate(),[135, 145, 155])
960 self.assertTrue(isinstance(arr3,DataArrayInt32))
961 self.assertEqual(arr3.getName(),name)
962 self.assertEqual(arr3.getInfoOnComponents(),comps)
963 self.assertTrue(arr3.isEqual(arr))
965 def testComputeMeshCenterOfMass0(self):
967 arr = DataArrayDouble(5) ; arr.iota()
968 m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
969 self.assertTrue( m.computeMeshCenterOfMass().isEqual(DataArrayDouble([2,2],1,2),1e-12) )
971 m = MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured()
972 self.assertTrue( m.computeMeshCenterOfMass().isEqual(DataArrayDouble([2,2,2],1,3),1e-12) )
974 def testBugPenta15_0(self):
976 Non regression test from Roberto Da Via pointing error in connectivity of 5th sub face of penta15 cell.
978 coo=DataArrayDouble([
979 (0,1,1),(0,0,1),(1,0,1),
980 (0,1,0),(0,0,0),(1,0,0),
981 (0,0.5,1),(0.5,0,1),(0.5,0.5,1),
982 (0,0.5,0),(0.5,0,0),(0.5,0.5,0),
983 (0,1,0.5),(0,0,0.5),(1,0,0.5)
986 m = MEDCouplingUMesh("penta15",3)
989 m.insertNextCell(NORM_PENTA15,list(range(15)))
990 bm = m.buildBoundaryMesh(True)
991 bm.writeVTK("boundary.vtu")
993 [6, 0, 1, 2, 6, 7, 8],
994 [6, 3, 5, 4, 11, 10, 9],
995 [8, 0, 3, 4, 1, 12, 9, 13, 6],
996 [8, 1, 4, 5, 2, 13, 10, 14, 7],
997 [8, 2, 5, 3, 0, 14, 11, 12, 8] # old = [8, 2, 4, 5, 0, 14, 11, 12, 8]
999 self.assertTrue( bm.getNodalConnectivity().isEqual(DataArrayInt(sum(conn_expected,[]))) )
1001 def testBugWithPolyhedInterpWithMoreThan255Nodes(self):
1003 [EDF25207] : Check interpolation containing polyhedron with more than 255 nodes is OK at bbox computation stage
1006 arr = DataArrayDouble(n) ; arr.iota()
1007 m = MEDCouplingCMesh()
1008 m.setCoords(arr,arr,arr)
1009 m = m.buildUnstructured()
1010 skin = m.computeSkin()
1012 # check that skin contains more than 2**8-1 node to reveal bug
1013 self.assertTrue(skin.getNumberOfNodes()>255)
1014 # Build a single polyhedron cell from skin
1015 skin1 = MEDCoupling1SGTUMesh(skin)
1016 conn = skin1.getNodalConnectivity()
1017 conn.rearrange( MEDCouplingUMesh.GetNumberOfNodesOfGeometricType(skin1.getCellModelEnum()) )
1018 connPolyhed = conn.changeNbOfComponents(MEDCouplingUMesh.GetNumberOfNodesOfGeometricType(skin1.getCellModelEnum())+1,-1)
1019 connPolyhed.rearrange(1)
1020 connPolyhed.popBackSilent()
1021 meshSinglePolyhed = MEDCouplingUMesh("",3)
1022 meshSinglePolyhed.allocateCells()
1023 meshSinglePolyhed.insertNextCell(NORM_POLYHED,connPolyhed.getValues())
1024 meshSinglePolyhed.setCoords( skin1.getCoords() )
1026 rem = MEDCouplingRemapper()
1027 rem.prepare(meshSinglePolyhed,m,"P0P0")
1028 res = rem.getCrudeMatrix()
1029 self.assertTrue( all([len(elt)==1 for elt in res]) )
1030 self.assertTrue( all([elt[0]>0.99 and elt[0]<1.01 for elt in res]) )
1032 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
1033 def testShapeFuncAndDerivative0(self):
1035 Test values returned by MEDCoupling on HEXA27 element of shape function and its derivatives.
1036 See https://www.code-aster.org/V2/doc/v10/fr/man_r/r3/r3.01.01.pdf
1040 ref_coords_hexa27_med = [[-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], [-1.0, 0.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], [0.0, 1.0, 1.0], [1.0, 0.0, 1.0], [0.0, -1.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, 0.0, -1.0], [-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.0, 0.0, 0.0]]
1042 def coor2index(coor):
1043 zeMap = {-1.0 : 0, 0.0 : 2 , 1.0 : 1}
1046 vcoor2index = np.vectorize( coor2index )
1047 node2ijk_hexa27_med = vcoor2index( np.array(ref_coords_hexa27_med) )
1050 return np.array([-0.5*x*(1-x), 0.5*x*(x+1), 1.-x*x])
1052 def N_3d_hexa27(x, i, j, k):
1053 return N_1d_quad(x[0])[i]*N_1d_quad(x[1])[j]*N_1d_quad(x[2])[k]
1056 return np.array([N_3d_hexa27(x, *node2ijk_hexa27_med[node,:]) for node in range(27)])
1058 # Implementing shape function derivatives
1059 def diff_N_1d_quad(x):
1060 return np.array([x-0.5, x+0.5, -2.*x])
1062 def diff_N_3d_hexa27(x, i, j, k):
1063 return np.array([diff_N_1d_quad(x[0])[i]*N_1d_quad(x[1])[j] *N_1d_quad(x[2])[k],
1064 N_1d_quad(x[0])[i] *diff_N_1d_quad(x[1])[j]*N_1d_quad(x[2])[k],
1065 N_1d_quad(x[0])[i] *N_1d_quad(x[1])[j] *diff_N_1d_quad(x[2])[k]])
1067 def diff_N_hexa27(x):
1068 return np.array([diff_N_3d_hexa27(x, *node2ijk_hexa27_med[node,:]) for node in range(27)])
1069 # computation of ref values
1070 posInRefCoord = [-0.85685375,-0.90643355,-0.90796825]
1071 ref = N_hexa27( np.array(posInRefCoord) )
1072 ref2 = diff_N_hexa27( np.array(posInRefCoord) )
1073 # computation using MEDCoupling
1074 gl = MEDCouplingGaussLocalization(NORM_HEXA27,sum(ref_coords_hexa27_med,[]),posInRefCoord,[1])
1075 mcShapeFunc = gl.getShapeFunctionValues()
1076 mcShapeFunc.rearrange(1)
1077 self.assertTrue( mcShapeFunc.isEqual(DataArrayDouble(ref),1e-12) )
1079 mvDevOfShapeFunc = gl.getDerivativeOfShapeFunctionValues()
1080 mvDevOfShapeFunc.rearrange(1)
1081 ref2_mc = DataArrayDouble(ref2) ; ref2_mc.rearrange(1)
1082 self.assertTrue( mvDevOfShapeFunc.isEqual( ref2_mc, 1e-12) )
1086 if __name__ == '__main__':