Salome HOME
Bug fix in colinearize2D(): last seg not handled properly.
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingBasicsTest5.py
1 #  -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 from MEDCoupling import *
21 import unittest
22 from math import pi,e,sqrt,cos,sin
23 from datetime import datetime
24 from MEDCouplingDataForTest import MEDCouplingDataForTest
25 import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@edf.fr
26
27 class MEDCouplingBasicsTest5(unittest.TestCase):
28     def testSwig2FieldDoubleBuildSubPartRange1(self):
29         #ON_CELLS
30         m=MEDCouplingDataForTest.build2DTargetMesh_1()
31         f=MEDCouplingFieldDouble(ON_CELLS)
32         f.setMesh(m)
33         arr = DataArrayDouble(5, 2) ; arr[:, 0] = list(range(7, 12)) ; arr[:, 1] = 100 + arr[:, 0]
34         f.setArray(arr)
35         f.checkConsistencyLight()
36         ff=f[1:-1:2]
37         ff.checkConsistencyLight()
38         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
39         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
40         self.assertTrue(2,ff.getMesh().getNumberOfCells())
41         self.assertTrue(ff.getArray().isEqual(arr[[1,3]],1e-12))
42         #
43         a,b=f.buildSubMeshDataRange(2,5,1)
44         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
45         self.assertEqual(b,slice(2,5,1))
46         ff=f[2:]
47         ff.checkConsistencyLight()
48         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
49         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
50         self.assertTrue(3,ff.getMesh().getNumberOfCells())
51         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4]],1e-12))
52         #
53         ff=f[-2:0:-1]
54         ff.checkConsistencyLight()
55         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
56         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
57         self.assertTrue(3,ff.getMesh().getNumberOfCells())
58         self.assertTrue(ff.getArray().isEqual(arr[[3,2,1]],1e-12))
59         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[3,2,1],1],1e-12))
60         #ON_NODES
61         f=MEDCouplingFieldDouble(ON_NODES)
62         f.setMesh(m)
63         arr = DataArrayDouble(9, 2) ; arr[:, 0] = list(range(7, 16)) ; arr[:, 1] = 100 + arr[:, 0]
64         f.setArray(arr)
65         f.checkConsistencyLight()
66         ff=f[1:-1:2]
67         ff.checkConsistencyLight()
68         self.assertTrue((m.buildPartOfMySelf([1,3],False)).isEqual(ff.getMesh(),1e-12))
69         self.assertTrue(6,ff.getMesh().getNumberOfNodes())
70         self.assertTrue(2,ff.getMesh().getNumberOfCells())
71         self.assertTrue(ff.getArray().isEqual(arr[[1,2,3,4,6,7]],1e-12))
72         #
73         m2=m.buildPartRange(2,5,1)
74         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(m2,1e-12))
75         m2,b=m.buildPartRangeAndReduceNodes(2,5,1)
76         self.assertTrue(m.buildPartOfMySelf([2,3,4],False).isEqual(m2,1e-12))
77         self.assertTrue(b.isEqual(DataArrayInt([-1,-1,0,1,2,3,4,5,6])))
78         a,b=f.buildSubMeshDataRange(2,5,1)
79         self.assertTrue(m.buildPartOfMySelf([2,3,4],False).isEqual(a,1e-12))
80         self.assertTrue(b.isEqual(DataArrayInt([2,3,4,5,6,7,8])))
81         ff=f[2:]
82         ff.checkConsistencyLight()
83         self.assertTrue((m.buildPartOfMySelf([2,3,4],False)).isEqual(ff.getMesh(),1e-12))
84         self.assertTrue(7,ff.getMesh().getNumberOfNodes())
85         self.assertTrue(3,ff.getMesh().getNumberOfCells())
86         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4,5,6,7,8]],1e-12))
87         #
88         ff=f[-2:0:-1]
89         ff.checkConsistencyLight()
90         self.assertTrue((m.buildPartOfMySelf([3,2,1],False)).isEqual(ff.getMesh(),1e-12))
91         self.assertTrue(7,ff.getMesh().getNumberOfNodes())
92         self.assertTrue(3,ff.getMesh().getNumberOfCells())
93         self.assertTrue(ff.getArray().isEqual(arr[[1,2,3,4,5,6,7]],1e-12))
94         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[1,2,3,4,5,6,7],1],1e-12))
95         #ON_GAUSS_NE
96         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
97         f.setMesh(m)
98         arr = DataArrayDouble(18, 2) ; arr[:, 0] = list(range(7, 25)) ; arr[:, 1] = 100 + arr[:, 0]
99         f.setArray(arr)
100         f.checkConsistencyLight()
101         ff=f[1:-1:2]
102         ff.checkConsistencyLight()
103         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
104         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
105         self.assertTrue(2,ff.getMesh().getNumberOfCells())
106         self.assertTrue(ff.getArray().isEqual(arr[[4,5,6,10,11,12,13]],1e-12))
107         #
108         a,b=f.buildSubMeshDataRange(2,5,1)
109         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
110         self.assertEqual(b,slice(7,18,1))
111         ff=f[2:]
112         ff.checkConsistencyLight()
113         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
114         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
115         self.assertTrue(3,ff.getMesh().getNumberOfCells())
116         self.assertTrue(ff.getArray().isEqual(arr[[7,8,9,10,11,12,13,14,15,16,17]],1e-12))
117         #
118         ff=f[-2:0:-1]
119         ff.checkConsistencyLight()
120         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
121         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
122         self.assertTrue(3,ff.getMesh().getNumberOfCells())
123         self.assertTrue(ff.getArray().isEqual(arr[[10,11,12,13,7,8,9,4,5,6]],1e-12))
124         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[10,11,12,13,7,8,9,4,5,6],1],1e-12))
125         #ON_GAUSS_PT
126         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
127         f.setMesh(m)
128         f.setGaussLocalizationOnCells([0,4],[0,0,1,0,1,1,1,0],[1.1,1.1,2.2,2.2],[0.2,0.8]);
129         f.setGaussLocalizationOnCells([3],[0,0,1,0,1,1,1,0],[1.1,1.1,2.2,2.2,3.,3.],[0.2,0.4,0.4]);
130         f.setGaussLocalizationOnCells([1],[0,0,1,0,1,0],[1.1,1.1,2.2,2.2,3.,3.,4.,4.],[0.1,0.1,0.4,0.4]);
131         f.setGaussLocalizationOnCells([2],[0,0,1,0,1,0],[1.1,1.1,2.2,2.2,3.,3.,4.,4.,5.,5.],[0.1,0.1,0.4,0.3,0.1]);
132         arr = DataArrayDouble(16, 2) ; arr[:, 0] = list(range(7, 23)) ; arr[:, 1] = 100 + arr[:, 0]
133         f.setArray(arr)
134         f.checkConsistencyLight()
135         ff=f[1:-1:2]
136         ff.checkConsistencyLight()
137         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
138         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
139         self.assertTrue(2,ff.getMesh().getNumberOfCells())
140         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4,5,11,12,13]],1e-12))
141         #
142         a,b=f.buildSubMeshDataRange(2,5,1)
143         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
144         self.assertEqual(b,slice(6,16,1))
145         ff=f[2:]
146         ff.checkConsistencyLight()
147         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
148         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
149         self.assertTrue(3,ff.getMesh().getNumberOfCells())
150         self.assertTrue(ff.getArray().isEqual(arr[[6,7,8,9,10,11,12,13,14,15]],1e-12))
151         #
152         ff=f[-2:0:-1]
153         ff.checkConsistencyLight()
154         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
155         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
156         self.assertTrue(3,ff.getMesh().getNumberOfCells())
157         self.assertTrue(ff.getArray().isEqual(arr[[11,12,13,6,7,8,9,10,2,3,4,5]],1e-12))
158         self.assertTrue(f[-2:0:-1,0].getArray().isEqual(arr[[11,12,13,6,7,8,9,10,2,3,4,5],0],1e-12))
159         pass
160
161     def testSwig2FieldDoubleApplyFuncBug1(self):
162         f=MEDCouplingFieldDouble(ON_CELLS)
163         f.setMesh(MEDCouplingDataForTest.build2DTargetMesh_1())
164         f.applyFunc(3,700.)
165         f.checkConsistencyLight()
166         self.assertEqual(3,f.getArray().getNumberOfComponents())
167         f.getArray().rearrange(1)
168         self.assertTrue(f.getArray().isUniform(700.,1e-10))
169         f.getArray().rearrange(3)
170         f.checkConsistencyLight()
171         f.applyFunc(4,800.)
172         f.checkConsistencyLight()
173         self.assertEqual(4,f.getArray().getNumberOfComponents())
174         f.getArray().rearrange(1)
175         self.assertTrue(f.getArray().isUniform(800.,1e-10))
176         f.getArray().rearrange(4)
177         f.checkConsistencyLight()
178         pass
179
180     def testSwig2ComputeTupleIdsNearTupleBug1(self):
181         coords=[1.1,0.0, 1.1,0.0 ];
182         coordsArr=DataArrayDouble(coords,2,2);
183         mesh=MEDCouplingUMesh();
184         mesh.setCoords(coordsArr);
185         points=[1.1, 0.002]
186         c,cI=mesh.getNodeIdsNearPoints(points,0.00185);
187         self.assertTrue(c.isEqual(DataArrayInt([])))
188         self.assertTrue(cI.isEqual(DataArrayInt([0,0])))
189         c,cI=mesh.getNodeIdsNearPoints(points,0.00200000000000001);
190         self.assertTrue(c.isEqual(DataArrayInt([0,1])))
191         self.assertTrue(cI.isEqual(DataArrayInt([0,2])))
192         pass
193
194     def testSwig2NonRegressionBugChangeUnderlyingWithZeroCells(self):
195         coords1=[0.,1.,2.,3.]
196         coords2=[2.,1.,0.,3.] #0 <==> #2
197         # mesh 1
198         mesh1=MEDCouplingUMesh.New();
199         coordsArr=DataArrayDouble.New(coords1,4,1);
200         mesh1.setCoords(coordsArr);
201         mesh1.setMeshDimension(0);
202         mesh1.allocateCells(0);
203         mesh1.finishInsertingCells();
204         # mesh 2
205         mesh2=mesh1.deepCopy();
206         coordsArr=DataArrayDouble.New(coords2,4,1);
207         mesh2.setCoords(coordsArr);
208         field = mesh1.fillFromAnalytic(ON_NODES,1,"x")
209         field.checkConsistencyLight()
210         levOfCheck = 10
211         field.changeUnderlyingMesh( mesh2, levOfCheck, 1e-13, 0 )
212         self.assertTrue( field.getArray().getValues() == coords2 )
213         pass
214
215     def testSwig2UMeshDistanceToMesh2(self):
216         sz=5
217         m=MEDCouplingCMesh()
218         arr=DataArrayDouble(sz+1) ; arr.iota() ; arr/=sz
219         m.setCoords(arr,arr,arr)
220         m=m.buildUnstructured()
221         m1=m.computeSkin()
222         m1.zipCoords()
223         c=m1.getCoords()[:]
224         d=2*(c-[0.5,0.5,0.5])+[0.5,0.5,0.5]
225         time_deb = datetime.now()
226         #print "go.."
227         a,b=m1.distanceToPoints(d)
228         #print 'time spent in distanceToPoints %s ' %str(datetime.now() - time_deb)
229         time_deb = datetime.now()
230         a1=DataArrayDouble(len(d))
231         b1=DataArrayInt(len(d))
232         m1s = [m1[i] for i in range(m1.getNumberOfCells())]
233         for j,pt in enumerate(d):
234             eter=1e308
235             fter=-1
236             for i,miter in enumerate(m1s):
237                 e,f=miter.distanceToPoint(pt)
238                 self.assertEqual(0,f)
239                 if e<eter:
240                     eter=e ; fter=i
241                     pass
242                 pass
243             a1[j]=eter
244             b1[j]=fter
245             pass
246         #print 'time spent in naive distanceToPoints  %s ' %str(datetime.now() - time_deb)
247         self.assertTrue(a.isEqual(a1,1e-12))
248         self.assertTrue(b.isEqual(b1))
249         self.assertTrue(a.isEqual(DataArrayDouble([0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706631,0.714142842854285,0.5196152422706631,0.5196152422706632,0.5099019513592784,0.5099019513592785,0.5099019513592784,0.5099019513592785,0.5196152422706631,0.5196152422706632,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592784,0.7071067811865475,0.5099019513592784,0.5099019513592785,0.5,0.5,0.5,0.5,0.5099019513592785,0.5099019513592785,0.7071067811865476,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592784,0.7071067811865475,0.5099019513592784,0.5099019513592785,0.5,0.5,0.5,0.5,0.5099019513592785,0.5099019513592785,0.7071067811865476,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706631,0.714142842854285,0.5196152422706631,0.5196152422706632,0.5099019513592784,0.5099019513592785,0.5099019513592784,0.5099019513592785,0.5196152422706631,0.5196152422706632,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386]),1e-12))
250         self.assertTrue(b.isEqual(DataArrayInt([0,0,3,7,9,9,0,0,3,7,9,9,12,12,14,16,17,17,26,26,28,30,31,31,33,33,36,40,42,42,33,33,36,40,42,42,0,0,3,7,11,9,0,9,12,17,26,31,33,42,33,33,36,40,42,42,45,45,47,49,51,51,45,50,52,53,56,57,58,63,58,58,60,62,63,63,85,85,87,89,91,91,85,90,92,93,96,97,98,103,98,98,100,102,103,103,105,105,108,112,116,114,105,114,117,122,131,136,138,147,138,138,141,145,147,147,105,105,108,112,114,114,105,105,108,112,114,114,117,117,119,121,122,122,131,131,133,135,136,136,138,138,141,145,147,147,138,138,141,145,147,147])))
251         pass
252
253     def testSwig2NonRegressionBugDistance1(self):
254         pt=DataArrayDouble([(8.8452994616207476,3.1547005383792515,3.1547005383792515)])
255         coo=DataArrayDouble([(8,0,0),(8,0,8),(8,8,8),(8,8,0),(16,0,0),(16,0,8),(16,8,8),(16,8,0),(8,0,4),(8,4,8),(8,8,4),(8,4,0),(16,0,4),(16,4,8),(16,8,4),(16,4,0),(12,0,0),(12,0,8),(12,8,8),(12,8,0),(8,4,4),(16,4,4),(12,0,4),(12,4,8),(12,8,4),(12,4,0)])
256         conn=DataArrayInt([4,15,21,12,4,16,25,15,12,22,16,4,0,8,20,11,16,0,11,25,22,8,0,16,15,7,14,21,15,25,19,7,7,19,24,14,11,20,10,3,25,11,3,19,19,3,10,24,12,21,13,5,13,23,17,5,5,17,22,12,8,1,9,20,23,9,1,17,17,1,8,22,21,14,6,13,14,24,18,6 ,6,18,23,13,20,9,2,10,24,10,2,18,18,2,9,23])
257         m=MEDCouplingUMesh("mesh",2)
258         m.setCoords(coo)
259         m.allocateCells()
260         for i in range(24):
261             m.insertNextCell(NORM_QUAD4,conn[4*i:4*i+4])
262             pass
263         m.checkConsistency()
264         m0=m[3] ; m0.zipCoords()
265         expectedDist=0.8452994616207476
266         a,b=m0.distanceToPoint(pt)
267         self.assertAlmostEqual(expectedDist,a,14)
268         self.assertEqual(0,b)
269         #
270         a,b=m.distanceToPoint(pt)
271         self.assertAlmostEqual(expectedDist,a,14)
272         self.assertEqual(3,b)
273         #
274         fd=MEDCouplingFieldDiscretization.New(ON_CELLS)
275         self.assertEqual(24,fd.getNumberOfTuples(m))
276         fd=MEDCouplingFieldDiscretization.New(ON_NODES)
277         self.assertEqual(26,fd.getNumberOfTuples(m))
278         pass
279
280     def testSwig2AreaBarySeg3Quad8Tri6QPolyg(self):
281         #QUAD8 representing a circle of center zeBary and radius zeRadius
282         zeBary=[5,6]
283         zeRadius=3
284         d=DataArrayDouble(8,2)
285         d[:,0]=zeRadius
286         d[:,1]=[87,-100,-170,110,5,-130,175,95] # angle in degree
287         d[:,1]*=pi/180. # angle in radian
288         d=d.fromPolarToCart()
289         d+=zeBary
290         m = MEDCouplingUMesh("quad8", 2) ; m.allocateCells() ; m.insertNextCell(NORM_QUAD8, list(range(8))) ; m.setCoords(d)
291         self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
292         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
293         tri32D=m.buildDescendingConnectivity()[0][0] ; tri32D.zipCoords()
294         # spaceDim=3 QUAD8 becomes QUAD4 ... for the moment
295         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
296         m2=m.deepCopy()
297         m2.convertQuadraticCellsToLinear()
298         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
299         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),1e-13))
300         #TRI6 representing a circle of center zeBary and radius zeRadius
301         zeBary=[5,6]
302         zeRadius=3
303         d=DataArrayDouble(6,2)
304         d[:,0]=zeRadius
305         d[:,1]=[87,-100,110,5,175,95] # angle in degree
306         d[:,1]*=pi/180. # angle in radian
307         d=d.fromPolarToCart()
308         d+=zeBary
309         m = MEDCouplingUMesh("tri6", 2) ; m.allocateCells() ; m.insertNextCell(NORM_TRI6, list(range(6))) ; m.setCoords(d)
310         self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
311         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
312         # spaceDim=3 TRI6 becomes TRI3 ... for the moment
313         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
314         m2=m.deepCopy()
315         m2.convertQuadraticCellsToLinear()
316         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
317         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),1e-13))
318         # QPOLYG representing a circle of center zeBary and radius zeRadius
319         zeBary=[5,6]
320         zeRadius=3
321         d=DataArrayDouble(10,2)
322         d[:,0]=zeRadius
323         d[:,1]=[87,-80,-100,-170,110,5,-90,-130,175,95] # angle in degree
324         d[:,1]*=pi/180. # angle in radian
325         d=d.fromPolarToCart()
326         d+=zeBary
327         m = MEDCouplingUMesh("qpolyg", 2) ; m.allocateCells() ; m.insertNextCell(NORM_QPOLYG, list(range(10))) ; m.setCoords(d)
328         self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
329         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
330         # spaceDim=3 QPOLYG becomes POLYG ... for the moment
331         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
332         m2=m.deepCopy()
333         m2.convertQuadraticCellsToLinear() ; m2.checkConsistency()
334         self.assertTrue(m2.getAllGeoTypes()==[NORM_POLYGON] and m2.getNodalConnectivity().getValues()==[5,0,1,2,3,4])
335         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
336         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),1e-13))
337         # TRI3
338         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),(87+100)*pi/180*zeRadius,13)
339         exp=DataArrayDouble(1,2) ; exp[:,0]=3 ; exp[:,1]=(87-100)/2. ; exp[:,1]*=pi/180. ;  exp=exp.fromPolarToCart() ; exp+=DataArrayDouble([5,6],1,2)
340         self.assertTrue(tri32D.computeCellCenterOfMass().isEqual(exp,1e-12))
341         # spaceDim=3 TRI3 becomes TRI2 ... for the moment
342         tri32D.changeSpaceDimension(3)
343         tri2=tri32D.deepCopy() ; tri2.convertQuadraticCellsToLinear()
344         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),float(tri2.getMeasureField(False).getArray()),13)
345         self.assertTrue(tri32D.computeCellCenterOfMass().isEqual(tri2.computeCellCenterOfMass(),1e-12))
346         tri32D.changeSpaceDimension(1)
347         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),-0.67795240172962323,12)
348         pass
349
350     # this bug 5/6/2013 is swig specific
351     def testSwigNonRegressionBugRotate3D1(self):
352         m=MEDCouplingUMesh.New()
353         dataArray=DataArrayDouble.New(100,3)
354         dataArray[:]=0.
355         dataArray[0]=[0.,1,3]
356         m.setCoords(dataArray[0])
357         m1=m.deepCopy()
358         m.rotate([0.,0.,3.],[1.,0.,0.],0.5*pi)
359         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([0.,0.,4.],1,3),1e-15))
360         #
361         d1=DataArrayDouble([0.,0.,3.],1,3) ; d2=DataArrayDouble([1.,0.,0.],1,3)
362         pts=[[0.,0.,3.],[(0.,0.,3.)],DataArrayDouble([0.,0.,3.],1,3),list(d1)[0]]
363         vec=[[1.,0.,0.],[(1.,0.,0.)],DataArrayDouble([1.,0.,0.],1,3),list(d2)[0]]
364         for p in pts:
365             for v in vec:
366                 m2=m1.deepCopy()
367                 m2.rotate(p,v,0.5*pi)
368                 self.assertTrue(m2.getCoords().isEqual(DataArrayDouble([0.,0.,4.],1,3),1e-15))
369                 pass
370         pass
371
372     def testSwig2DataArrayCount1(self):
373         d=DataArrayInt([])
374         self.assertEqual(0,d.getNumberOfTuples())
375         self.assertEqual(1,d.getNumberOfComponents())
376         self.assertEqual(0,d.count(0))
377         self.assertEqual(0,d.count(1))
378         self.assertEqual(0,d.count(-1))
379         d=DataArrayInt([2,1,-2,-3,2,0,0,7,2,-2,3,0])
380         self.assertEqual(12,d.getNumberOfTuples())
381         self.assertEqual(1,d.getNumberOfComponents())
382         self.assertEqual(3,d.count(0))
383         self.assertEqual(1,d.count(1))
384         self.assertEqual(0,d.count(-1))
385         self.assertEqual(2,d.count(-2))
386         self.assertEqual(3,d.count(2))
387         e=d.getDifferentValues()
388         f=DataArrayInt()
389         for it in e:
390             f.pushBackSilent(d.count(int(it)))
391             pass
392         self.assertEqual(12,f.accumulate()[0])
393         #
394         eps=1e-12
395         d=DataArrayDouble([])
396         self.assertEqual(0,d.getNumberOfTuples())
397         self.assertEqual(1,d.getNumberOfComponents())
398         self.assertEqual(0,d.count(0,eps))
399         self.assertEqual(0,d.count(1,eps))
400         self.assertEqual(0,d.count(-1,eps))
401         d=DataArrayDouble([2,1,-2,-3,2,0,eps/10,7,2+eps/10,-2,3,0])
402         self.assertEqual(12,d.getNumberOfTuples())
403         self.assertEqual(1,d.getNumberOfComponents())
404         self.assertEqual(3,d.count(0,eps))
405         self.assertEqual(1,d.count(1,eps))
406         self.assertEqual(0,d.count(-1,eps))
407         self.assertEqual(2,d.count(-2,eps))
408         self.assertEqual(3,d.count(2,eps))
409         self.assertEqual(3,d.count(2,eps))
410         self.assertEqual(2,d.count(2,eps/100))
411         e=d.getDifferentValues(eps)
412         f=DataArrayInt()
413         for it in e:
414             f.pushBackSilent(d.count(float(it),eps))
415             pass
416         self.assertEqual(12,f.accumulate()[0])
417         pass
418
419     def testSwig2DataArrayGetSlice1(self):
420         s=slice(2,18,1)
421         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),16)
422         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),16)
423         self.assertEqual(DataArray.GetSlice(s,0,4),slice(2,6,1))
424         self.assertEqual(DataArray.GetSlice(s,1,4),slice(6,10,1))
425         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,14,1))
426         self.assertEqual(DataArray.GetSlice(s,3,4),slice(14,18,1))
427         #
428         s=slice(2,18,2)
429         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),8)
430         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),8)
431         self.assertEqual(DataArray.GetSlice(s,0,4),slice(2,6,2))
432         self.assertEqual(DataArray.GetSlice(s,1,4),slice(6,10,2))
433         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,14,2))
434         self.assertEqual(DataArray.GetSlice(s,3,4),slice(14,18,2))
435         #
436         s=slice(1,18,1)
437         self.assertEqual(DataArray.GetSlice(s,0,4),slice(1,5,1))
438         self.assertEqual(DataArray.GetSlice(s,1,4),slice(5,9,1))
439         self.assertEqual(DataArray.GetSlice(s,2,4),slice(9,13,1))
440         self.assertEqual(DataArray.GetSlice(s,3,4),slice(13,18,1))# 18 not 17
441         #
442         s=slice(1,18,2)
443         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9)
444         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),9)
445         self.assertEqual(DataArray.GetSlice(s,0,4),slice(1,5,2))
446         self.assertEqual(DataArray.GetSlice(s,1,4),slice(5,9,2))
447         self.assertEqual(DataArray.GetSlice(s,2,4),slice(9,13,2))
448         self.assertEqual(DataArray.GetSlice(s,3,4),slice(13,18,2))# 18 not 17
449         #
450         s=slice(18,2,-1)
451         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-1))
452         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-1))
453         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-1))
454         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,2,-1))
455         #
456         s=slice(18,2,-2)
457         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2))
458         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2))
459         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2))
460         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,2,-2))
461         #
462         s=slice(18,1,-1)
463         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-1))
464         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-1))
465         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-1))
466         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,1,-1))# 1 not 2
467         #
468         s=slice(18,1,-2)
469         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9)
470         self.assertRaises(InterpKernelException,DataArray.GetNumberOfItemGivenBES,s)
471         self.assertEqual(sum([DataArray.GetNumberOfItemGivenBESRelative(DataArray.GetSlice(s, i, 4)) for i in range(4)]), DataArray.GetNumberOfItemGivenBESRelative(s))
472         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2))
473         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2))
474         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2))
475         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,1,-2))# 1 not 2
476         self.assertRaises(InterpKernelException,DataArray.GetSlice,slice(0,None,2),0,4)
477         #
478         d=DataArrayInt.Range(0,18,1)
479         s=slice(2,None,1)
480         self.assertEqual(d.getNumberOfItemGivenBES(s),16)
481         self.assertEqual(d.getNumberOfItemGivenBESRelative(s),16)
482         self.assertEqual(d.getSlice(s,0,4),slice(2,6,1))
483         self.assertEqual(d.getSlice(s,1,4),slice(6,10,1))
484         self.assertEqual(d.getSlice(s,2,4),slice(10,14,1))
485         self.assertEqual(d.getSlice(s,3,4),slice(14,18,1))
486         #
487         d=DataArrayInt.Range(0,18,1)
488         s=slice(2,-2,1)
489         self.assertEqual(d.getSlice(s,0,4),slice(2,5,1))
490         self.assertEqual(d.getSlice(s,1,4),slice(5,8,1))
491         self.assertEqual(d.getSlice(s,2,4),slice(8,11,1))
492         self.assertEqual(d.getSlice(s,3,4),slice(11,16,1))
493         #
494         d=DataArrayInt.Range(0,18,1)
495         s=slice(None,None,1)
496         self.assertEqual(d.getSlice(s,0,4),slice(0,4,1))
497         self.assertEqual(d.getSlice(s,1,4),slice(4,8,1))
498         self.assertEqual(d.getSlice(s,2,4),slice(8,12,1))
499         self.assertEqual(d.getSlice(s,3,4),slice(12,18,1))
500         #
501         d=DataArrayInt.Range(0,18,1)
502         s=slice(None,2,-2)
503         self.assertRaises(InterpKernelException,d.getNumberOfItemGivenBES,s)
504         self.assertEqual(d.getNumberOfItemGivenBESRelative(s),8)
505         self.assertEqual(d.getSlice(s,0,4),slice(17,13,-2))
506         self.assertEqual(d.getSlice(s,1,4),slice(13,9,-2))
507         self.assertEqual(d.getSlice(s,2,4),slice(9,5,-2))
508         self.assertEqual(d.getSlice(s,3,4),slice(5,2,-2))
509         pass
510
511     def testSwig2AccumulatePerChunk1(self):
512         arr=DataArrayDouble(11) ; arr.iota()
513         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
514         m=m.buildUnstructured()
515         m0=m[::2] ; ids0=m0.simplexize(0) ; m1=m[1::2]
516         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m0,m1) ; m.setName("mesh")
517         m.checkConsecutiveCellTypesForMEDFileFrmt()
518         #
519         formula="7-sqrt((x-5.)*(x-5.)+(y-5.)*(y-5.))"
520         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
521         f.fillFromAnalytic(1,formula)
522         f.setName("Field1") ; f.setTime(1.1,1,-1)
523         f.checkConsistencyLight()
524         #
525         arr=f.getArray()
526         arr2=DataArrayDouble(len(arr),2) ; arr2[:,0]=arr
527         arr2=DataArrayDouble(len(arr),2) ; arr2[:,0]=arr ; arr2[:,1]=2*arr
528         f.setArray(arr2)
529         f.checkConsistencyLight()
530         # here the compact code to obviously put field on cell to nodes
531         rn,rni=f.getMesh().getReverseNodalConnectivity()
532         arr2=f.getArray()[rn]
533         arr4=arr2.accumulatePerChunck(rni)
534         nbOfCellsSharingNodes=rni.deltaShiftIndex()
535         arr4/=nbOfCellsSharingNodes.convertToDblArr()
536         #
537         maxNbCSN=nbOfCellsSharingNodes.getMaxValue()[0]
538         arr3=DataArrayDouble(f.getMesh().getNumberOfNodes(),f.getArray().getNumberOfComponents()) ; arr3[:]=0.
539         for i in range(1, maxNbCSN + 1):
540             ids=nbOfCellsSharingNodes.findIdsEqual(i)
541             if len(ids)==0:
542                 continue
543             for j in range(i):
544                 rni2=rni[ids] ; rni2+=j
545                 arr3[ids]+=arr2[rni2]
546                 pass
547             arr3[ids]/=i
548             pass
549         fNode=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; fNode.setMesh(m)
550         fNode.setName("Field1Node") ; fNode.setTime(1.1,1,-1)
551         fNode.setArray(arr3) ; fNode.checkConsistencyLight()
552         self.assertTrue(arr3.isEqual(arr4,1e-12))
553         #
554         d=DataArrayInt.Range(0,20,1)
555         self.assertTrue(d.accumulatePerChunck([2,4,12]).isEqual(DataArrayInt([5,60])))
556         #
557         a=DataArrayDouble(12) ; a.iota() ; a.rearrange(3)
558         b=DataArrayDouble(12) ; b.iota(20) ; b.rearrange(3)
559         ids=DataArrayInt([])
560         self.assertEqual(len(a[ids]),0)
561         self.assertEqual(len(b[ids]),0)
562         a2=a.deepCopy() ;  a2[ids]+=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
563         a2=a.deepCopy() ;  a2[ids]*=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
564         a2=a.deepCopy() ;  a2[ids]/=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
565         a2=a.deepCopy() ;  a2[ids]-=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
566         pass
567
568     def testSwig2CheckAndPreparePermutation1(self):
569         a=DataArrayInt([10003,9999999,5,67])
570         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([2,3,0,1])))
571         a=DataArrayInt([10003,-9999999,5,67])
572         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([3,0,1,2])))
573         a=DataArrayInt([])
574         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([])))
575         a=DataArrayInt([])
576         a.iota();
577         self.assertTrue(a.isEqual(DataArrayInt([])))
578         pass
579
580     def testSwig21SGTUMesh1(self):
581         m=MEDCoupling1GTUMesh.New("m",NORM_PENTA6)
582         m.__repr__() ; m.__str__()
583         self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
584         m.setCoords(DataArrayDouble(20,3))
585         m.allocateCells()
586         m.__repr__() ; m.__str__()
587         m.insertNextCell([0,1,2,5,7,2])
588         self.assertEqual(1,m.getNumberOfCells())
589         self.assertTrue(DataArrayInt([6]).isEqual(m.computeNbOfNodesPerCell()))
590         self.assertTrue(DataArrayInt([5]).isEqual(m.computeNbOfFacesPerCell()))
591         m.__repr__() ; m.__str__()
592         m.checkConsistencyLight()
593         m.checkConsistency()
594         #
595         cm=MEDCouplingCMesh() ; cm.setName("m")
596         arr0=DataArrayDouble(6) ; arr0.iota()
597         arr1=DataArrayDouble([0,1])
598         cm.setCoords(arr0,arr1,arr1) ; um=cm.buildUnstructured()
599         #
600         m=MEDCoupling1SGTUMesh("m",NORM_QUAD4)
601         mem_m=m.getHeapMemorySize()
602         m.allocateCells(5)
603         self.assertIn(m.getHeapMemorySize() - mem_m, list(range(5 * 4 * 4, 5 * 4 * 4 + 32)))
604         self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20)
605         m.setCoords(um.getCoords())
606         m.insertNextCell([1,0,6,7])
607         self.assertEqual(1,m.getNumberOfCells())
608         m.insertNextCell([2,1,7,8])
609         m.insertNextCell([3,2,8,9])
610         m.insertNextCell([4,3,9,10])
611         m.insertNextCell([5,4,10,11])
612         self.assertEqual(5,m.getNumberOfCells())
613         self.assertRaises(InterpKernelException,m.insertNextCell,[0,6,7])
614         self.assertRaises(InterpKernelException,m.insertNextCell,[0,6,7,1,2])
615         self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20)
616         f=m.getMeasureField(False)
617         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
618         self.assertTrue(f.getArray().isUniform(1,1e-14))
619         self.assertEqual(m.getType(),10)
620         self.assertEqual(m.getCellModelEnum(),NORM_QUAD4)
621         mo=MEDCoupling1SGTUMesh("m",NORM_QUAD4) ; mo.setCoords(m.getCoords())
622         mo.setNodalConnectivity(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11]))
623         self.assertTrue(m.isEqual(mo,1e-12))
624         #
625         mo2=MEDCoupling1SGTUMesh.Merge1SGTUMeshesOnSameCoords([m[[0,1]],m[[2]],m[[3,4]]])
626         mo2.setName(m.getName())
627         self.assertTrue(m.isEqual(mo2,1e-12))
628         #
629         mp0=m[[0]] ; mp0.zipCoords() ; mp1=m[2] ; mp1.zipCoords() ; mp2=m[4] ; mp2.zipCoords()
630         mo3=MEDCoupling1SGTUMesh.Merge1SGTUMeshes([mp0,mp1,mp2])
631         self.assertTrue(isinstance(mo3,MEDCoupling1SGTUMesh))
632         mo3.setName(m.getName())
633         m_ref=m[(0,2,4)] ; m_ref.zipCoords()
634         m_ref.tryToShareSameCoordsPermute(mo3,1e-12)
635         self.assertTrue(m_ref.isEqual(mo3,1e-12))
636         #
637         m1=um.buildDescendingConnectivity()[0]
638         ids=m1.getCellIdsFullyIncludedInNodeIds(DataArrayInt.Range(0,12,1))
639         m1=m1[ids]
640         m1c=m1.convertIntoSingleGeoTypeMesh()
641         self.assertTrue(isinstance(m1c,MEDCoupling1SGTUMesh))
642         self.assertEqual(m1c.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
643         m1c.checkConsistency()
644         self.assertTrue(m1c.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11])))
645         self.assertEqual(20,m1c.getNodalConnectivityLength())
646         self.assertTrue(m.isEqual(m1c,1e-12))
647         m.getNodalConnectivity().setIJ(1,0,1)
648         self.assertTrue(not m.isEqual(m1c,1e-12))
649         m.getNodalConnectivity().setIJ(1,0,0)
650         self.assertTrue(m.isEqual(m1c,1e-12))
651         m1c.setCoords(m.getCoords().deepCopy())
652         self.assertTrue(m.isEqual(m1c,1e-12))
653         m1c.getCoords().setIJ(0,1,0.1)
654         self.assertTrue(not m.isEqual(m1c,1e-12))
655         m1c.getCoords().setIJ(0,1,0)
656         self.assertTrue(m.isEqual(m1c,1e-12))
657         m1c.getCoords().setInfoOnComponent(1,"X")
658         self.assertTrue(not m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
659         m.getCoords().setInfoOnComponent(1,"X")
660         self.assertTrue(m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
661         m.setName("m2")
662         self.assertTrue(not m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
663         #
664         m.checkConsistencyLight() ; m.checkConsistency() ; m.checkConsistency()
665         self.assertEqual(m.getMeshDimension(),2)
666         self.assertTrue(m.giveCellsWithType(NORM_QUAD4).isEqual(DataArrayInt([0,1,2,3,4])))
667         self.assertTrue(m.giveCellsWithType(NORM_TRI3).isEqual(DataArrayInt([])))
668         self.assertEqual(m.getNumberOfCellsWithType(NORM_QUAD4),5)
669         self.assertEqual(m.getNumberOfCellsWithType(NORM_TRI3),0)
670         self.assertEqual(m.getTypeOfCell(3),NORM_QUAD4)
671         self.assertRaises(InterpKernelException,m.getTypeOfCell,5)
672         self.assertEqual(m.getAllGeoTypes(),[NORM_QUAD4])
673         self.assertEqual(m.getDistributionOfTypes(),[[NORM_QUAD4,5,-1]])
674         ##
675         pfl1=DataArrayInt([1,3,4])
676         a,b,c=m.splitProfilePerType(pfl1)
677         d,e,f=m.buildUnstructured().splitProfilePerType(pfl1)
678         self.assertTrue(a==[[4,3,0]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2])) and len(c)==1 and c[0].getHiddenCppPointer()==pfl1.getHiddenCppPointer())
679         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and len(c)==1 and c[0].isEqual(f[0]))
680         #
681         pfl2=DataArrayInt([0,1,2,3])
682         a,b,c=m.splitProfilePerType(pfl2)
683         d,e,f=m.buildUnstructured().splitProfilePerType(pfl2)
684         self.assertTrue(a==[[4,4,0]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2,3])) and len(c)==1 and c[0].getHiddenCppPointer()==pfl2.getHiddenCppPointer())
685         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and len(c)==1 and c[0].isEqual(f[0]))
686         #
687         pfl3=DataArrayInt([0,1,2,3,4])
688         a,b,c=m.splitProfilePerType(pfl3)
689         d,e,f=m.buildUnstructured().splitProfilePerType(pfl3)
690         self.assertTrue(a==[[4,5,-1]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2,3,4])) and c==[])
691         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and c==[])
692         #
693         invalidPfl=DataArrayInt([1,2,3,4,5])
694         self.assertRaises(InterpKernelException,m.splitProfilePerType,invalidPfl)
695         self.assertRaises(InterpKernelException,m.buildUnstructured().splitProfilePerType,invalidPfl)
696         ##
697         pfl1=DataArrayInt([1,2,3])
698         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,3,0],[pfl1])
699         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,3,0],[pfl1])
700         self.assertTrue(a.isEqual(b) and pfl1.getHiddenCppPointer(),a.getHiddenCppPointer())
701         #
702         pfl2=DataArrayInt([0,1,2,3])
703         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl2])
704         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl2])
705         self.assertTrue(a.isEqual(b) and pfl2.getHiddenCppPointer()==a.getHiddenCppPointer())
706         #
707         pfl3=DataArrayInt([0,1,2,3,4])
708         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl3])
709         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,5,0],[pfl3])
710         self.assertTrue(a.isEqual(b) and pfl3.getHiddenCppPointer()==a.getHiddenCppPointer())
711         #
712         invalidPfl=DataArrayInt([1,2,3,4,5])
713         self.assertRaises(InterpKernelException,m.checkTypeConsistencyAndContig,[NORM_QUAD4,5,0],[invalidPfl])
714         self.assertRaises(InterpKernelException,m.buildUnstructured().checkTypeConsistencyAndContig,[NORM_QUAD4,5,0],[invalidPfl])
715         ##
716         self.assertTrue(DataArrayInt([4,4,4,4,4]).isEqual(m.computeNbOfNodesPerCell()))
717         ##
718         self.assertEqual(m.getNodeIdsOfCell(1),[2,1,7,8])
719         ##
720         self.assertTrue(m.computeIsoBarycenterOfNodesPerCell().isEqual(DataArrayDouble([(0.5,0.5,0),(1.5,0.5,0),(2.5,0.5,0),(3.5,0.5,0),(4.5,0.5,0)]),1e-13))
721         ##
722         ref=m.getCoords().getHiddenCppPointer()
723         mcpy=m.deepCopy() ; mcpy.insertNextCell([1,0,6,7])
724         c=m.getNodalConnectivity().deepCopy()
725         o2n=DataArrayInt([2,0,1,4,3])
726         m.renumberCells(o2n,False)
727         c.rearrange(4) ; c.renumberInPlace(o2n) ; c.rearrange(1)
728         self.assertTrue(c.isEqual(m.getNodalConnectivity()))
729         self.assertEqual(ref,m.getCoords().getHiddenCppPointer())
730         m2=mcpy.mergeMyselfWith(m)
731         self.assertTrue(isinstance(m2,MEDCoupling1SGTUMesh))
732         self.assertEqual(11,m2.getNumberOfCells())
733         self.assertEqual(48,m2.getNumberOfNodes())
734         self.assertTrue(m2.getCoords().isEqual(DataArrayDouble.Aggregate([m.getCoords(),m.getCoords()]),1e-12))
735         self.assertTrue(m2.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,1,0,6,7,26,25,31,32,27,26,32,33,25,24,30,31,29,28,34,35,28,27,33,34])))
736         ##
737         mu=m.buildUnstructured()
738         mu.checkConsistency()
739         self.assertEqual(mu.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
740         self.assertEqual(2,mu.getMeshDimension())
741         self.assertEqual([NORM_QUAD4],mu.getAllGeoTypes())
742         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,2,1,7,8,4,3,2,8,9,4,1,0,6,7,4,5,4,10,11,4,4,3,9,10])))
743         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25])))
744         ##
745         for typ in [0,1]:
746             mcpy2=m.deepCopy() ; umcpy2=mcpy2.buildUnstructured()
747             ids=mcpy2.simplexize(typ) ; ids2=umcpy2.simplexize(typ)
748             self.assertTrue(ids.isEqual(ids2))
749             mcpy3=umcpy2.convertIntoSingleGeoTypeMesh()
750             self.assertTrue(mcpy2.isEqual(mcpy3,1e-14))
751             pass
752         um1=um.convertIntoSingleGeoTypeMesh()
753         self.assertEqual(8,um1.getNumberOfNodesPerCell())
754         for typ in [PLANAR_FACE_5,PLANAR_FACE_6]:
755             mcpy2=um1.deepCopy() ; umcpy2=mcpy2.buildUnstructured()
756             ids=mcpy2.simplexize(typ) ; ids2=umcpy2.simplexize(typ)
757             self.assertTrue(ids.isEqual(ids2))
758             mcpy3=umcpy2.convertIntoSingleGeoTypeMesh()
759             self.assertTrue(mcpy2.isEqual(mcpy3,1e-14))
760             pass
761         ##
762         self.assertRaises(InterpKernelException,mcpy.mergeMyselfWithOnSameCoords,m)
763         mcpy.tryToShareSameCoords(m,1e-14)
764         m3=mcpy.mergeMyselfWithOnSameCoords(m)
765         self.assertTrue(isinstance(m3,MEDCoupling1SGTUMesh))
766         self.assertEqual(11,m3.getNumberOfCells())
767         self.assertEqual(24,m3.getNumberOfNodes())
768         self.assertEqual(m3.getCoords().getHiddenCppPointer(),mcpy.getCoords().getHiddenCppPointer())
769         self.assertTrue(m3.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,1,0,6,7,2,1,7,8,3,2,8,9,1,0,6,7,5,4,10,11,4,3,9,10])))
770         ##
771         ref=mcpy.getCoords().deepCopy()
772         c3=mcpy.getNodalConnectivity()[:]
773         mcpy.getNodalConnectivity().setIJ(int(c3.findIdsEqual(11)),0,24)
774         c2=DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()[11:]])
775         mcpy.setCoords(c2)
776         mcpy.checkConsistency()
777         a,b=mcpy.getNodeIdsInUse()
778         self.assertEqual(12,b)
779         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])))
780         ids=mcpy.zipCoordsTraducer()
781         self.assertTrue(ids.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])))
782         self.assertTrue(mcpy.getCoords().isEqual(ref[:12],1e-12))
783         self.assertTrue(mcpy.getNodalConnectivity().isEqual(c3))
784         mcpy.checkConsistency()
785         ##
786         m4=mcpy[DataArrayInt([0,3,4])]
787         m5=mcpy.buildPartOfMySelfKeepCoords(DataArrayInt([0,3,4]))
788         self.assertTrue(isinstance(m4,MEDCoupling1SGTUMesh))
789         self.assertTrue(m4.isEqual(m5,-1e-14))# < 0 not a bug it proves that coordinates pointer are equal
790         self.assertTrue(m4.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,4,3,9,10,5,4,10,11])))
791         m6=mcpy[::2]
792         self.assertTrue(isinstance(m6,MEDCoupling1SGTUMesh))
793         self.assertTrue(m6.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,3,2,8,9,5,4,10,11])))
794         ##
795         mcpy.setCoords(DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()]))
796         mcpy.checkConsistency()
797         ##
798         mcppy=mcpy.deepCopyConnectivityOnly()
799         self.assertTrue(mcppy.isEqual(mcpy,1e-12))
800         self.assertTrue(mcppy.getCoords().getHiddenCppPointer()==mcpy.getCoords().getHiddenCppPointer())
801         self.assertTrue(mcppy.getNodalConnectivity().isEqual(mcpy.getNodalConnectivity()))
802         self.assertTrue(mcppy.getNodalConnectivity().getHiddenCppPointer()!=mcpy.getNodalConnectivity().getHiddenCppPointer())
803         ##
804         a,b=mcpy.getReverseNodalConnectivity()
805         self.assertTrue(a.isEqual(DataArrayInt([0,5,0,1,5,1,2,2,3,3,4,4,0,5,0,1,5,1,2,2,3,3,4,4])))
806         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,9,11,12,14,17,19,21,23,24,24,24,24,24,24,24,24,24,24,24,24,24])))
807         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds([0,1,6,7],False).isEqual(DataArrayInt([0,1,5])))
808         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds([0,1,6,7],True).isEqual(DataArrayInt([0,5])))
809         self.assertTrue(mcpy.getCellsInBoundingBox([(0,1),(0,1),(0,1)],1e-12).isEqual(DataArrayInt([0,1,5])))
810         f=mcpy.buildOrthogonalField()
811         self.assertEqual(f.getMesh().getHiddenCppPointer(),mcpy.getHiddenCppPointer())
812         self.assertTrue(f.getArray().isEqual(DataArrayDouble(6*[(0,0,-1)]),1e-12))
813         mcpy.changeSpaceDimension(2)
814         self.assertEqual(1,mcpy.getCellContainingPoint([1.5,0.5],1e-12))
815         ##
816         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds(DataArrayInt([6,7]),False).isEqual(DataArrayInt([0,1,5])))
817         ##
818         mcpy2=mcpy.deepCopy()
819         self.assertEqual([None,None],mcpy.checkGeoEquivalWith(mcpy2,1,1e-12))#fast equal
820         mcpy.checkFastEquivalWith(mcpy2,1e-12)
821         mcpy2.renumberCells([0,2,4,3,1,5])
822         mcpy.checkFastEquivalWith(mcpy2,1e-12)
823         self.assertEqual([None,None],mcpy.checkGeoEquivalWith(mcpy2,1,1e-12))#fast equal
824         mcpy2.renumberCells([0,2,4,3,1,5])
825         mcpy2.renumberCells([1,3,5,0,2,4])
826         self.assertRaises(InterpKernelException,mcpy.checkFastEquivalWith,mcpy2,1e-12)
827         self.assertRaises(InterpKernelException,mcpy.checkGeoEquivalWith,mcpy2,1,1e-12)#fast equal
828         pass
829
830     def testSwig21DGTUMesh1(self):
831         a0=DataArrayInt([0,2,3,5,6,8])
832         a1=DataArrayInt([0,4,7,11,14,18,21,25])
833         a2=DataArrayInt([0,1,4,5])
834         self.assertTrue(DataArrayInt.AggregateIndexes([a0,a1,a2]).isEqual(DataArrayInt([0,2,3,5,6,8,12,15,19,22,26,29,33,34,37,38])))
835         self.assertEqual(a1[3:].front(),11)
836         self.assertEqual(a1[4:].convertToDblArr().front(),14.)
837         a1c=DataArrayInt([5,7,1,2, 8,11,0, 5,6,3,12, 1,5,2, 13,12,11,7, 6,1,0, 20,21,19,17])
838         d,e=MEDCouplingUMesh.ExtractFromIndexedArraysSlice(1,5,2,a1c,a1)
839         self.assertTrue(d.isEqual(DataArrayInt([8,11,0,1,5,2])))
840         self.assertTrue(e.isEqual(DataArrayInt([0,3,6])))
841         #
842         m=MEDCouplingDataForTest.build2DTargetMesh_1()[0,3,4]
843         ref=DataArrayInt([0,3,4,1,6,7,4,3,7,8,5,4])
844         self.assertTrue(m.convertNodalConnectivityToStaticGeoTypeMesh().isEqual(ref))
845         d,e=m.convertNodalConnectivityToDynamicGeoTypeMesh()
846         self.assertTrue(d.isEqual(ref))
847         self.assertTrue(e.isEqual(DataArrayInt.Range(0,13,4)))
848         self.assertTrue(m.fillCellIdsToKeepFromNodeIds(DataArrayInt([6,7]),False).isEqual(DataArrayInt([1,2])))
849         #
850         m=MEDCoupling1GTUMesh.New("m",NORM_POLYHED)
851         self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
852         m.__repr__() ; m.__str__()
853         m.setCoords(DataArrayDouble(20,3))
854         m.allocateCells()
855         m.__repr__() ; m.__str__()
856         m.insertNextCell([0,1,2,5,7,2,-1,1,3])
857         self.assertEqual(1,m.getNumberOfCells())
858         self.assertTrue(DataArrayInt([8]).isEqual(m.computeNbOfNodesPerCell()))
859         self.assertTrue(DataArrayInt([2]).isEqual(m.computeNbOfFacesPerCell()))
860         m.__repr__() ; m.__str__()
861         m.checkConsistencyLight()
862         m.checkConsistency()
863         #
864         cm=MEDCouplingCMesh() ; cm.setName("m")
865         arr0=DataArrayDouble(6) ; arr0.iota()
866         arr1=DataArrayDouble([0,1])
867         cm.setCoords(arr0,arr1,arr1) ; um=cm.buildUnstructured() ; um.convertAllToPoly()
868         um2=um.deepCopyConnectivityOnly()
869         self.assertTrue(um2.isEqual(um,1e-12))
870         self.assertEqual(um2.getCoords().getHiddenCppPointer(),um.getCoords().getHiddenCppPointer())
871         self.assertTrue(um2.getNodalConnectivity().isEqual(um.getNodalConnectivity()))
872         self.assertTrue(um2.getNodalConnectivity().getHiddenCppPointer()!=um.getNodalConnectivity().getHiddenCppPointer())
873         self.assertTrue(um2.getNodalConnectivityIndex().isEqual(um.getNodalConnectivityIndex()))
874         self.assertTrue(um2.getNodalConnectivityIndex().getHiddenCppPointer()!=um.getNodalConnectivityIndex().getHiddenCppPointer())
875         #
876         self.assertRaises(InterpKernelException,MEDCoupling1SGTUMesh.New,"m",NORM_POLYHED)
877         m=MEDCoupling1DGTUMesh("m",NORM_POLYHED)
878         m.allocateCells(5)
879         self.assertEqual(15,m.getNodalConnectivity().getNbOfElemAllocated())
880         self.assertEqual(6,m.getNodalConnectivityIndex().getNbOfElemAllocated())
881         m.setCoords(um.getCoords())
882         m.insertNextCell([1,0,6,7,-1,7,6,1])
883         self.assertEqual(1,m.getNumberOfCells())
884         m.insertNextCell([2,1,7,8,-1,2,1,-1,8,-1,7])
885         m.insertNextCell([3,2,8,9])
886         m.insertNextCell([4,3,9,10,-1,5,3,9])
887         m.insertNextCell([5,4,10,11,-1,11,10,-1,5])
888         m.checkConsistencyLight()
889         m.checkConsistency()
890         self.assertEqual(5,m.getNumberOfCells())
891         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40])))
892         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5])))
893         #
894         m4=m.deepCopy()
895         self.assertTrue(m.isEqual(m4,1e-12))
896         m4.getNodalConnectivity().setIJ(2,0,5)
897         self.assertTrue(not m.isEqual(m4,1e-12))
898         m4.getNodalConnectivity().setIJ(2,0,6)
899         self.assertTrue(m.isEqual(m4,1e-12))
900         m4.getNodalConnectivityIndex().setIJ(2,0,21)
901         self.assertTrue(not m.isEqual(m4,1e-12))
902         m4.getNodalConnectivityIndex().setIJ(2,0,19)
903         self.assertTrue(m.isEqual(m4,1e-12))
904         m4.getCoords().setIJ(10,1,1.1)
905         self.assertTrue(not m.isEqual(m4,1e-12))
906         m4.getCoords().setIJ(10,1,1.)
907         self.assertTrue(m.isEqual(m4,1e-12))
908         m4.getNodalConnectivity().pushBackSilent(7)
909         self.assertTrue(not m.isEqual(m4,1e-12))
910         self.assertEqual(7,m4.getNodalConnectivity().popBackSilent())
911         self.assertTrue(m.isEqual(m4,1e-12))
912         m4.setName("m4")
913         self.assertTrue(not m.isEqual(m4,1e-12))
914         m4.setName("m")
915         self.assertTrue(m.isEqual(m4,1e-12))
916         #
917         self.assertEqual(6,m.getNodalConnectivityIndex().getNbOfElemAllocated())
918         self.assertEqual(60,m.getNodalConnectivity().getNbOfElemAllocated())
919         self.assertTrue(m.computeNbOfNodesPerCell().isEqual(DataArrayInt([7,8,4,7,7])))
920         self.assertTrue(m.computeNbOfFacesPerCell().isEqual(DataArrayInt([2,4,1,2,3])))
921         self.assertEqual(m.getNodeIdsOfCell(1),[2,1,7,8,-1,2,1,-1,8,-1,7])
922         f=m.computeIsoBarycenterOfNodesPerCell()
923         self.assertTrue(DataArrayDouble([(0.5714285714285714,0.5714285714285714,0),(1.5,0.5,0),(2.5,0.5,0),(3.5714285714285712,0.42857142857142855,0),(4.5714285714285712,0.5714285714285714,0)]).isEqual(f,1e-14))
924         mu0=m.buildUnstructured()
925         o2n=[1,2,0,4,3]
926         m2=m.deepCopy()
927         m3=m.deepCopyConnectivityOnly()
928         self.assertTrue(m3.isEqual(m,1e-12))
929         self.assertEqual(m3.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
930         self.assertTrue(m3.getNodalConnectivity().getHiddenCppPointer()!=m.getNodalConnectivity().getHiddenCppPointer())
931         self.assertTrue(m3.getNodalConnectivity().isEqual(m.getNodalConnectivity()))
932         self.assertTrue(m3.getNodalConnectivityIndex().getHiddenCppPointer()!=m.getNodalConnectivityIndex().getHiddenCppPointer())
933         self.assertTrue(m3.getNodalConnectivityIndex().isEqual(m.getNodalConnectivityIndex()))
934         m.renumberCells(o2n)
935         mu0.renumberCells(o2n)
936         self.assertTrue(mu0.isEqual(m.buildUnstructured(),1e-12))
937         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,12,23,32,40])))
938         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([3,2,8,9,1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,5,4,10,11,-1,11,10,-1,5,4,3,9,10,-1,5,3,9])))
939         #
940         mcpy0=m.buildUnstructured()
941         self.assertTrue(isinstance(mcpy0,MEDCouplingUMesh))
942         self.assertTrue(mcpy0.getNodalConnectivity().isEqual(DataArrayInt([31,3,2,8,9,31,1,0,6,7,-1,7,6,1,31,2,1,7,8,-1,2,1,-1,8,-1,7,31,5,4,10,11,-1,11,10,-1,5,31,4,3,9,10,-1,5,3,9])))
943         self.assertTrue(mcpy0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,14,26,36,45])))
944         self.assertEqual(mcpy0.getAllGeoTypes(),[NORM_POLYHED])
945         mcpy0.checkConsistencyLight()
946         mcpy0.checkConsistency()
947         mcpy1=mcpy0.convertIntoSingleGeoTypeMesh()
948         self.assertTrue(mcpy1.isEqual(m,1e-12))
949         #
950         m_mrg=MEDCoupling1DGTUMesh.Merge1DGTUMeshes([m2,m,m2])
951         self.assertTrue(m_mrg.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40,44,52,63,72,80,88,99,103,111,120])))
952         self.assertTrue(m_mrg.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5,27,26,32,33,25,24,30,31,-1,31,30,25,26,25,31,32,-1,26,25,-1,32,-1,31,29,28,34,35,-1,35,34,-1,29,28,27,33,34,-1,29,27,33,49,48,54,55,-1,55,54,49,50,49,55,56,-1,50,49,-1,56,-1,55,51,50,56,57,52,51,57,58,-1,53,51,57,53,52,58,59,-1,59,58,-1,53])))
953         m_mrg2=MEDCoupling1DGTUMesh.Merge1DGTUMeshesOnSameCoords([m3,m,m3])
954         self.assertTrue(m_mrg2.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40,44,52,63,72,80,88,99,103,111,120])))
955         self.assertTrue(m_mrg2.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5,3,2,8,9,1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,5,4,10,11,-1,11,10,-1,5,4,3,9,10,-1,5,3,9,1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5])))
956         a,b=m_mrg2.getReverseNodalConnectivity()
957         self.assertTrue(b.isEqual(DataArrayInt([0,3,15,24,33,39,48,54,66,75,84,93,99,99,99,99,99,99,99,99,99,99,99,99,99])))
958         self.assertTrue(a.isEqual(DataArrayInt([0,6,10,0,0,1,1,6,6,7,7,10,10,11,11,1,1,2,5,7,7,11,11,12,2,3,3,5,9,9,12,13,13,3,4,8,9,13,14,3,4,4,8,8,9,13,14,14,0,0,6,6,10,10,0,0,1,1,6,6,7,7,10,10,11,11,1,1,2,5,7,7,11,11,12,2,3,3,5,9,9,12,13,13,3,4,4,8,8,9,13,14,14,4,4,8,8,14,14])))
959         self.assertTrue(m_mrg2.fillCellIdsToKeepFromNodeIds([7],False).isEqual(DataArrayInt([0,1,6,7,10,11])))
960         self.assertTrue(m_mrg2.fillCellIdsToKeepFromNodeIds([0,1,6,7],True).isEqual(DataArrayInt([0,6,10])))
961         #
962         self.assertTrue(m_mrg2.isPacked())
963         self.assertEqual(120,m_mrg2.getNodalConnectivityIndex().popBackSilent())
964         self.assertEqual(m_mrg2.getNumberOfCells(),14)
965         m_mrg2.checkConsistency()
966         self.assertTrue(not m_mrg2.isPacked())
967         m_mrg4,b=m_mrg2.copyWithNodalConnectivityPacked()
968         self.assertTrue(not b)
969         m_mrg4.checkConsistency()
970         self.assertEqual(m_mrg4.getNumberOfCells(),14)
971         self.assertTrue(m_mrg4.getNodalConnectivityIndex().isEqual(m_mrg2.getNodalConnectivityIndex()))
972         self.assertEqual(len(m_mrg4.getNodalConnectivity()),111)
973         self.assertEqual(len(m_mrg2.getNodalConnectivity()),120)
974         self.assertTrue(m_mrg4.getNodalConnectivity().isEqual(m_mrg2.getNodalConnectivity()[:111]))
975         #
976         m0=m_mrg2[:5]
977         m1=m_mrg2[[5,6,7,8,9]]
978         m2=m_mrg2[10:]
979         self.assertTrue(m1.isEqualWithoutConsideringStr(m,1e-12))
980         a,b=m.checkGeoEquivalWith(m0,12,1e-12)
981         self.assertTrue(a.isEqual(DataArrayInt(o2n)))
982         self.assertTrue(b is None)
983         pass
984
985     def testSwig2DADAreIncludedInMe1(self):
986         a=DataArrayDouble(30) ; a.iota() ; a.rearrange(3)
987         p=DataArrayInt([5,2,1,9])
988         b,c=a.areIncludedInMe(a[p],1e-12)
989         self.assertTrue(b)
990         self.assertTrue(c.isEqual(p))
991         d=a[p]
992         d.setIJ(3,1,28.1)
993         b,c=a.areIncludedInMe(d,1e-12)
994         self.assertTrue(not b)
995         self.assertTrue(c.isEqual(DataArrayInt([5,2,1,10])))
996         pass
997
998     def testSwig2DADesallocate1(self):
999         d=DataArrayDouble([(1,2),(6,7),(6,8)]) ; d.setInfoOnComponents(["aa","bbb"])
1000         self.assertTrue(d.isAllocated())
1001         d.checkAllocated()
1002         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1003         ref=d.getHeapMemorySize()
1004         d.desallocate()
1005         self.assertEqual(ref-d.getHeapMemorySize(),6*8)
1006         self.assertTrue(not d.isAllocated())
1007         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1008         self.assertRaises(InterpKernelException,d.checkAllocated)
1009         #
1010         d=DataArrayInt([(1,2),(6,7),(6,8)]) ; d.setInfoOnComponents(["aa","bbb"])
1011         self.assertTrue(d.isAllocated())
1012         d.checkAllocated()
1013         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1014         ref=d.getHeapMemorySize()
1015         d.desallocate()
1016         self.assertEqual(ref-d.getHeapMemorySize(),6*4)
1017         self.assertTrue(not d.isAllocated())
1018         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1019         self.assertRaises(InterpKernelException,d.checkAllocated)
1020         pass
1021
1022     def testSwig2IsPartStructured1(self):
1023         #dim 1
1024         d10=DataArrayInt([2,3,4,5,6,7,8,9,10,11])
1025         a,b=MEDCouplingStructuredMesh.IsPartStructured(d10,[13])
1026         self.assertTrue(a) ; self.assertEqual(b,[(2,12)])
1027         d11=DataArrayInt([2,3,4,5,6,7,8,10,9,11])
1028         a,b=MEDCouplingStructuredMesh.IsPartStructured(d11,[13])
1029         self.assertTrue(not a)
1030         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d10,[11])
1031         #dim 2
1032         st=[10,4]
1033         d20=DataArrayInt([1,2,3,4,11,12,13,14,21,22,23,24])
1034         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1035         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(0,3)])
1036         self.assertEqual(12,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt(b))
1037         self.assertEqual(0,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt([(1,5),(1,3),(2,2)]))
1038         self.assertEqual(0,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt([(5,5),(3,3),(2,2)]))
1039         self.assertEqual(36,MEDCouplingStructuredMesh.DeduceNumberOfGivenStructure([3,2,6]))
1040         self.assertEqual(126,MEDCouplingStructuredMesh.DeduceNumberOfGivenStructure((3,7,6)))
1041         d20=DataArrayInt([1,2,3,4,12,11,13,14,21,22,23,24])
1042         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1043         self.assertTrue(not a)
1044         d20=DataArrayInt([1,2,3,4,11,12,13,15,21,22,23,24])
1045         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1046         self.assertTrue(not a)
1047         d21=DataArrayInt([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,32,33,34,35,36,37,38,39])
1048         a,b=MEDCouplingStructuredMesh.IsPartStructured(d21,st)
1049         self.assertTrue(a) ; self.assertEqual(b,[(0,10),(0,4)])
1050         d22=DataArrayInt([1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44])
1051         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d22,st)
1052         a,b=MEDCouplingStructuredMesh.IsPartStructured(d22,[10,5])
1053         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(0,5)])
1054         #dim 3
1055         d30=DataArrayInt([11,12,13,14,21,22,23,24,51,52,53,54,61,62,63,64])
1056         a,b=MEDCouplingStructuredMesh.IsPartStructured(d30,[10,4,2])
1057         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(1,3),(0,2)])
1058         d31=DataArrayInt([11,12,13,14,21,22,24,23,51,52,53,54,61,62,63,64])
1059         a,b=MEDCouplingStructuredMesh.IsPartStructured(d31,[10,4,2])
1060         self.assertTrue(not a)
1061         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d30,[10,4,1])
1062         pass
1063
1064     def testSwig2PartStructured1(self):
1065         c=MEDCouplingCMesh() ; c.setName("toto")
1066         arr0=DataArrayDouble(10); arr0.iota()
1067         arr1=DataArrayDouble(4) ; arr1.iota(3)
1068         c.setCoords(arr0,arr1)
1069         self.assertEqual(c.getNodeGridStructure(),(10,4))
1070         self.assertEqual(c.getCellGridStructure(),(9,3))
1071         d20=DataArrayInt([1,2,3,4,10,11,12,13,19,20,21,22])
1072         self.assertEqual(27,c.getNumberOfCells())
1073         self.assertEqual(40,c.getNumberOfNodes())
1074         self.assertEqual(2,c.getMeshDimension())
1075         c.checkConsistencyLight()
1076         #
1077         arr2=MEDCouplingStructuredMesh.BuildExplicitIdsFrom([9,3],[(1,5),(0,3)])
1078         self.assertTrue(arr2.isEqual(DataArrayInt([1,2,3,4,10,11,12,13,19,20,21,22])))
1079         # CMesh
1080         c2=c.buildStructuredSubPart([(1,5),(0,3)])
1081         c2.checkConsistencyLight()
1082         self.assertTrue(isinstance(c2,MEDCouplingCMesh))
1083         self.assertEqual(12,c2.getNumberOfCells())
1084         self.assertEqual(20,c2.getNumberOfNodes())
1085         self.assertEqual(2,c2.getMeshDimension())
1086         self.assertEqual("toto",c2.getName())
1087         self.assertTrue(c2.getCoordsAt(0).isEqual(DataArrayDouble([1.,2.,3.,4.,5.]),1e-12))
1088         self.assertTrue(c2.getCoordsAt(1).isEqual(DataArrayDouble([3.,4.,5.,6.]),1e-12))
1089         #
1090         a,b=c.buildPartAndReduceNodes(d20)
1091         a.checkConsistencyLight()
1092         exp2=DataArrayInt([-1,0,1,2,3,4,-1,-1,-1,-1,-1,5,6,7,8,9,-1,-1,-1,-1,-1,10,11,12,13,14,-1,-1,-1,-1,-1,15,16,17,18,19,-1,-1,-1,-1])
1093         self.assertTrue(exp2.isEqual(b))
1094         self.assertTrue(isinstance(a,MEDCouplingCMesh))
1095         self.assertTrue(a.buildUnstructured().isEqual(c.buildUnstructured().buildPartAndReduceNodes(d20)[0],1e-12))
1096         # CurveLinearMesh
1097         c2=MEDCouplingCurveLinearMesh() ; c2.setName("toto")
1098         c2.setCoords(c.buildUnstructured().getCoords())
1099         c2.setNodeGridStructure([10,4])
1100         c2.checkConsistencyLight()
1101         a,b=c2.buildPartAndReduceNodes(d20)
1102         a.checkConsistencyLight()
1103         self.assertTrue(exp2.isEqual(b))
1104         self.assertTrue(isinstance(a,MEDCouplingCurveLinearMesh))
1105         self.assertTrue(a.buildUnstructured().isEqual(c2.buildUnstructured().buildPartAndReduceNodes(d20)[0],1e-12))
1106         pass
1107
1108     def testSwig2FindPermutationFromFirstToSecond1(self):
1109         ids1=DataArrayInt([3,1,103,4,6,10,-7,205])
1110         ids2=DataArrayInt([-7,1,205,10,6,3,103,4])
1111         ids3=DataArrayInt.FindPermutationFromFirstToSecond(ids1,ids2)
1112         self.assertTrue(ids3.isEqual(DataArrayInt([5,1,6,7,4,3,0,2])))
1113         ids2ToTest=ids1.renumber(ids3)
1114         self.assertTrue(ids2ToTest.isEqual(ids2))
1115         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103]))
1116         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103,2]))
1117         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103,1]))
1118         self.assertTrue(DataArrayInt.FindPermutationFromFirstToSecond(DataArrayInt([]),DataArrayInt([])).empty())
1119         pass
1120
1121     def testSwig2BugStructuredMeshGetNodeIdsOfCell1(self):
1122         m=MEDCouplingCMesh("mesh")
1123         coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
1124         coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
1125         m.setCoords(coordsX,coordsY)
1126         self.assertEqual([2,3,8,7],m.getNodeIdsOfCell(2))
1127         self.assertEqual([3,4,9,8],m.getNodeIdsOfCell(3))
1128         self.assertEqual([7,8,13,12],m.getNodeIdsOfCell(6))
1129         self.assertEqual([8,9,14,13],m.getNodeIdsOfCell(7))
1130         pass
1131
1132     def testSwig2ThrowOnDAIInvertN2O2ON2(self):
1133         p1=DataArrayInt([3,5,8])
1134         p2=DataArrayInt([0,3,4,5,6,7,8,9,10])
1135         p1.transformWithIndArr(p2.invertArrayN2O2O2N(11))
1136         self.assertTrue(p1.isEqual(DataArrayInt([1,3,6])))
1137         self.assertTrue(p2.invertArrayN2O2O2N(11).isEqual(DataArrayInt([0,-1,-1,1,2,3,4,5,6,7,8])))
1138         self.assertRaises(InterpKernelException,p2.invertArrayN2O2O2N,10)
1139         pass
1140
1141     def testSwig2ComputeEffectiveNbOfNodesPerCell1(self):
1142         coords=DataArrayDouble([ 0.241310763507 , 0.0504777305619 , 0.0682283524903 , 0.252501053866 , -0.0625176732937 , 0.137272639894 ,
1143                  0.152262663601 , 0.241816569527 , 0.133812556197 , 0.18047750211 , -0.0789949051358 , 0.339098173401 ,
1144                  0.151741971857 , 0.238885278571 , 0.137715037333 , 0.242532155481 , -0.0928169086456 , 0.0678043417367 ,
1145                  0.240941965335 , -0.015461491464 , 0.0617186345825 , 0.24127650112 , 0.0499427876717 , 0.0679634099148 ,
1146                  -0.145828917428 , 0.206291632565 , 0.0310071927543 , 0.0125651775307 , 0.266262085828 , 0.105228430543 ,
1147                  -0.0994066533286 , 0.233224271238 , 0.0572213839567 , -0.0951345338317 , 0.234819509426 , 0.0592126284538 ,
1148                  0.136580574205 , -0.205486212579 , 0.0572866072014 , 0.0637270784978 , -0.168886355238 , 0.446614057077 ,
1149                  0.041337157151 , -0.213402568198 , 0.372407095999 , 0.0411601970268 , -0.202387875756 , 0.411334979491 ,
1150                  -0.108355701857 , 0.193636239335 , 0.204886756738 , 0.00639779029829 , 0.155296981517 , 0.252585892979 ,
1151                  0.0262473111702 , -0.112919732543 , 0.424286639249 ,-0.224103052733 , -0.139430015438 , -0.0122352295701 ,
1152                 -0.0312760589481 , -0.274272003594 , 0.0323959636568 , -0.166663422532 , -0.217754445175 , 0.00392109070364 ,
1153                  -0.30586619777 , -0.0475168041091 , -0.0144585228182 , -0.280881480586 , 0.135571293538 , 0.00623923647986 ,
1154                  -0.25548538234 , 0.156819217766 , 0.0645277879769 , -0.131567009284 , 0.184133752309 , 0.206021802753 ,
1155                  -0.196204010965 , 0.151602971681 , 0.212974777736 , -0.183713879463 , 0.0802946639531 , 0.260115662599 ,
1156                  -0.244241178767 , -0.0738873389604 , 0.144590565817 , -0.155804057829 , -0.164892720025 , 0.210613950558 ,
1157                  -0.170950800428 , -0.215099334026 , 0.00610122860092 , -0.30552634869 , -0.0490020791904 , -0.0132786533145 ,
1158                  0.271831011884 , 0.15105657296 , 0.0230534827908 , 0.281919192283 , 0.0898544306288 , -0.0625201489143 ,
1159                  0.260240727276 , -0.0120688706637 , -0.0532316588626 , 0.244947737722 , 0.0197984684293 , 0.0309341209233 ,
1160                  0.23439631578 , 0.229825279875 , 0.0508520585381 , 0.160921316875 , 0.265078502128 , 0.121716560626 ,
1161                  -0.315088694175 , 0.0747700471918 , -0.245836615071 , -0.327728781776 , 0.0857114674649 , -0.239431905957 ,
1162                  -0.308385460634 , 0.145142997084 , -0.149886828433 , 0.0488236045164 , 0.309462801914 , 0.0849169148265 ,
1163                 -0.0244964803395 , 0.33145611751 , -0.0476415818061 , 0.0060567994229 , 0.32418412014 , 0.0367779543812 ,
1164                  -0.0950221448063 , 0.236675326003 , 0.0572594453983 , 0.248723023186 , 0.0886648784791 , -0.176629430538 ,
1165                  0.116796984 , 0.256596599567 , -0.292863523603 , 0.118024552914 , 0.229154257843 , -0.34233232501 ,
1166                  0.217507892549 , -0.0417822335742 , -0.176771782888 , -0.224429321304 , 0.0125595300114 , -0.362064725588 ,
1167                  0.0937301100955 , -0.0500824832657 , -0.299713548444 , -0.244162220397 , 0.0383853931293 , -0.389856984411 ,
1168                  -0.0281989366102 , 0.097392811563 , -0.458244577284 , -0.385010847162 , 0.10122766194 , -0.140052859922 ,
1169                  -0.377936358012 , 0.110875172128 , -0.176207095463 , 0.244483045556 , -0.0991073977045 , 0.0575134372934 ,
1170                 0.262605120167 , -0.100243191645 , -0.0495620806935 , 0.240306880972 , -0.136153701579 , -0.114745281696 ,
1171                  0.215763176129 , -0.0836766059189 , -0.183249640616 , 0.237870396603 , -0.132449578286 , -0.121598854639 ,
1172                  -0.0637683083097 , -0.27921020214 , -0.149112321992 , -0.0856211014977 , -0.2973233473 , -0.0446878139589 ,
1173                  0.104675342288 , -0.0625908305324 , -0.290346256534 , 0.0248264249186 , -0.247797708548 , -0.165830884019 ,
1174                  0.0719302438309 , -0.178468260473 , -0.211432157345 , 0.142871843159 , -0.208769948542 , 0.0454101128246 ,
1175                  0.167803379307 , -0.207851396623 , -0.088802726124 , 0.12868717152 , -0.230920439715 , 0.00760508389036 ,
1176                  -0.0372812069535 , -0.286740286332 , 0.00963701291166 ], 69, 3)
1177         connN = [ #polyhedron 0
1178             0 , 1 , 3 , 4 , 2 , -1 , 1 , 5 , 6 , 7 , 0 , -1 , 0 , 7 , 8 , 10 , 11 , 9 , 2 , -1 , 1 , 5 , 12 , 14 , 15 , 13 , 3 , -1 , 16 , 9 , 2 , 4 , 17 , -1
1179             , 4 , 3 , 13 , 18 , 17 , -1 , 5 , 6 , 19 , 21 , 20 , 12 , -1 , 6 , 7 , 8 , 23 , 22 , 19 , -1 , 23 , 24 , 10 , 8 , -1 , 25 , 11 , 9 , 16 , -1
1180             , 24 , 26 , 25 , 11 , 10 , -1 , 12 , 14 , 20 , -1 , 27 , 28 , 29 , 15 , 13 , 18 , -1 , 14 , 15 , 29 , 30 , 21 , 20 , -1 , 26 , 27 , 18 , 17 , 16 , 25 , -1
1181             , 22 , 19 , 21 , 30 , 31 , -1 , 22 , 31 , 28 , 27 , 26 , 24 , 23 , -1 , 31 , 30 , 29 , 28,
1182             # polyhedron 1
1183             0 , 7 , 8 , 10 , 11 , 9 , 2 , -1 , 32 , 0 , 7 , 35 , 34 , 33 , -1 , 32 , 0 , 2 , 37 , 36 , -1 , 35 , 7 , 8 , 40 , 39 , 38 , -1
1184             , 2 , 37 , 41 , 9 , -1 , 40 , 8 , 10 , 44 , 43 , 42 , -1 , 41 , 9 , 11 , 44 , 43 , -1 , 44 , 11 , 10 , -1 , 32 , 33 , 45 , 47 , 46 , 36 , -1
1185             , 33 , 34 , 48 , 45 , -1 , 35 , 34 , 48 , 50 , 49 , 38 , -1 , 41 , 43 , 42 , 46 , 36 , 37 , -1 , 38 , 39 , 51 , 49 , -1
1186             , 39 , 40 , 42 , 46 , 47 , 52 , 51 , -1 , 45 , 47 , 52 , 50 , 48 , -1 , 52 , 51 , 49 , 50,
1187             # polyhedron 2
1188             6 , 7 , 8 , 23 , 22 , 19 , -1 , 6 , 35 , 7 , -1 , 6 , 35 , 38 , 19 , -1 , 35 , 7 , 8 , 40 , 39 , 38 , -1 , 53 , 22 , 19 , 38 , 39 , 54 , -1
1189             , 23 , 53 , 54 , 40 , 8 , -1 , 53 , 22 , 23 , -1 , 39 , 54 , 40,
1190             # polyhedron 3
1191             35 , 34 , 48 , 50 , 49 , 38 , -1 , 6 , 35 , 34 , 56 , 55 , 5 , -1 , 6 , 35 , 38 , 19 , -1 , 34 , 56 , 57 , 59 , 58 , 48 , -1
1192             , 60 , 61 , 21 , 19 , 38 , 49 , -1 , 62 , 50 , 48 , 58 , -1 , 60 , 63 , 64 , 62 , 50 , 49 , -1 , 5 , 6 , 19 , 21 , 20 , 12 , -1
1193             , 55 , 5 , 12 , 65 , -1 , 66 , 67 , 65 , 55 , 56 , 57 , -1 , 63 , 66 , 57 , 59 , 64 , -1 , 64 , 62 , 58 , 59 , -1
1194             , 60 , 63 , 66 , 67 , 68 , 61 , -1 , 61 , 68 , 20 , 21 , -1 , 67 , 68 , 20 , 12 , 65]
1195         meshN=MEDCouplingUMesh.New()
1196         meshN.setName("ForBary")
1197         meshN.setMeshDimension(3) ; meshN.setCoords(coords)
1198         meshN.allocateCells(4)
1199         meshN.insertNextCell(NORM_POLYHED,113,connN);
1200         meshN.insertNextCell(NORM_POLYHED,99,connN[113:])
1201         meshN.insertNextCell(NORM_POLYHED,43,connN[212:])
1202         meshN.insertNextCell(NORM_POLYHED,92,connN[255:])
1203         d=meshN.computeEffectiveNbOfNodesPerCell()
1204         e=meshN.computeNbOfNodesPerCell()
1205         self.assertTrue(d.isEqual(DataArrayInt([32,28,12,26])))
1206         self.assertTrue(e.isEqual(DataArrayInt([96,84,36,78])))
1207         m0=MEDCoupling1DGTUMesh(meshN)
1208         c=MEDCouplingCMesh()
1209         arr=DataArrayDouble(3) ; arr.iota(10)
1210         c.setCoords(arr,arr,arr)
1211         m10=c.buildUnstructured()
1212         m11=c.build1SGTUnstructured()
1213         m12=MEDCoupling1SGTUMesh.New(m10)
1214         self.assertTrue(m12.isEqual(m11,1e-12))
1215         m12.setCoords(m0.getCoords()) # m12 is not OK geometrically but the aim of the test is only connectivity values
1216         m3=MEDCoupling1GTUMesh.AggregateOnSameCoordsToUMesh([m12,m0])
1217         m3.checkConsistencyLight()
1218         self.assertEqual(m3.getCoords().getHiddenCppPointer(),m12.getCoords().getHiddenCppPointer())
1219         self.assertTrue(m3.getNodalConnectivity().isEqual(DataArrayInt([18,1,0,3,4,10,9,12,13,18,2,1,4,5,11,10,13,14,18,4,3,6,7,13,12,15,16,18,5,4,7,8,14,13,16,17,18,10,9,12,13,19,18,21,22,18,11,10,13,14,20,19,22,23,18,13,12,15,16,22,21,24,25,18,14,13,16,17,23,22,25,26,31,0,1,3,4,2,-1,1,5,6,7,0,-1,0,7,8,10,11,9,2,-1,1,5,12,14,15,13,3,-1,16,9,2,4,17,-1,4,3,13,18,17,-1,5,6,19,21,20,12,-1,6,7,8,23,22,19,-1,23,24,10,8,-1,25,11,9,16,-1,24,26,25,11,10,-1,12,14,20,-1,27,28,29,15,13,18,-1,14,15,29,30,21,20,-1,26,27,18,17,16,25,-1,22,19,21,30,31,-1,22,31,28,27,26,24,23,-1,31,30,29,28,31,0,7,8,10,11,9,2,-1,32,0,7,35,34,33,-1,32,0,2,37,36,-1,35,7,8,40,39,38,-1,2,37,41,9,-1,40,8,10,44,43,42,-1,41,9,11,44,43,-1,44,11,10,-1,32,33,45,47,46,36,-1,33,34,48,45,-1,35,34,48,50,49,38,-1,41,43,42,46,36,37,-1,38,39,51,49,-1,39,40,42,46,47,52,51,-1,45,47,52,50,48,-1,52,51,49,50,31,6,7,8,23,22,19,-1,6,35,7,-1,6,35,38,19,-1,35,7,8,40,39,38,-1,53,22,19,38,39,54,-1,23,53,54,40,8,-1,53,22,23,-1,39,54,40,31,35,34,48,50,49,38,-1,6,35,34,56,55,5,-1,6,35,38,19,-1,34,56,57,59,58,48,-1,60,61,21,19,38,49,-1,62,50,48,58,-1,60,63,64,62,50,49,-1,5,6,19,21,20,12,-1,55,5,12,65,-1,66,67,65,55,56,57,-1,63,66,57,59,64,-1,64,62,58,59,-1,60,63,66,67,68,61,-1,61,68,20,21,-1,67,68,20,12,65])))
1220         self.assertTrue(m3.getNodalConnectivityIndex().isEqual(DataArrayInt([0,9,18,27,36,45,54,63,72,186,286,330,423])))
1221         pass
1222
1223     def testSwig2Tetrahedrize1(self):
1224         d=DataArrayInt([0,3,6,10,14,20])
1225         d2=d.buildExplicitArrOfSliceOnScaledArr(slice(0,5,2))
1226         self.assertTrue(d2.isEqual(DataArrayInt([0,0,0, 2,2,2,2, 4,4,4,4,4,4])))
1227         m=MEDCouplingUMesh("Penta6",3)
1228         m.setCoords(DataArrayDouble([0,0,0,0,1,0,1,0,0,0,0,2,0,1,2,1,0,2],6,3)) ; m.getCoords().setInfoOnComponents(["X","YY","ZZZ"])
1229         m.allocateCells()
1230         m.insertNextCell(NORM_PENTA6,[1,2,0,4,5,3])
1231         st=m.getCoords().getHiddenCppPointer()
1232         c,a,b=m.tetrahedrize(PLANAR_FACE_5)
1233         c.checkConsistency()
1234         self.assertTrue(a.isEqual(DataArrayInt([0,0,0])))
1235         self.assertEqual(0,b)
1236         self.assertEqual(m.getCoords().getHiddenCppPointer(),c.getCoords().getHiddenCppPointer())
1237         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([1,2,0,4,4,3,5,0,5,0,2,4])))
1238         del m,c
1239         #
1240         m2=MEDCouplingUMesh("octa12",3)
1241         coords=DataArrayDouble([1.,0.,0.,0.5,0.8660254037844386,0.,-0.5,0.8660254037844387,0.,-1.,1.2246467991473532e-16,0.,-0.5,-0.8660254037844384,0.,0.5,-0.866025403784439,0.,1.,0.,2.,0.5,0.8660254037844386,2.,-0.5,0.8660254037844387,2.,-1.,1.2246467991473532e-16,2.,-0.5,-0.8660254037844384,2.,0.5,-0.866025403784439,2.0],12,3)
1242         m2.setCoords(coords)
1243         m2.allocateCells()
1244         m2.insertNextCell(NORM_HEXGP12,[3,2,1,0,5,4,9,8,7,6,11,10])
1245         c,a,b=m2.tetrahedrize(PLANAR_FACE_5)
1246         c.checkConsistency()
1247         self.assertTrue(a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0])))
1248         self.assertEqual(0,b)
1249         self.assertEqual(c.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1250         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,4,9,9,10,8,4,8,4,2,9,2,5,4,8,8,10,11,4,11,4,5,8,2,1,5,8,8,11,7,5,7,5,1,8,1,0,5,7,7,11,6,5,6,5,0,7])))
1251         del m2,coords,c
1252         #
1253         coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.],8,3) ; coords.setInfoOnComponents(["X","YY","ZZZ"])
1254         m3=MEDCouplingUMesh("hexa8",3)
1255         m3.setCoords(coords)
1256         m3.allocateCells(0)
1257         m3.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1258         st=m3.getCoords().getHiddenCppPointer()
1259         c,a,b=m3.tetrahedrize(PLANAR_FACE_5)
1260         c.checkConsistency()
1261         a.isEqual(DataArrayInt([0,0,0,0,0]))
1262         self.assertEqual(0,b)
1263         self.assertEqual(m3.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1264         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,6,2,1,3,7,6,4,3,0,4,1,6,4,5,1,3,6,1,4])))
1265         #
1266         m4=MEDCouplingUMesh("hexa8",3)
1267         m4.setCoords(coords)
1268         m4.allocateCells(0)
1269         m4.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1270         c,a,b=m4.tetrahedrize(PLANAR_FACE_6)
1271         c.checkConsistency()
1272         a.isEqual(DataArrayInt([0,0,0,0,0,0]))
1273         self.assertEqual(0,b)
1274         self.assertEqual(c.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1275         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,6,2,5,3,2,1,5,3,7,6,5,3,4,7,5,3,1,0,5,3,0,4,5])))
1276         #
1277         m4=MEDCouplingUMesh("hexa8",3)
1278         m4.setCoords(coords)
1279         m4.allocateCells(0)
1280         m4.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1281         st=m4.getCoords().getHiddenCppPointer()
1282         c,a,b=m4.tetrahedrize(GENERAL_24)
1283         c.checkConsistency()
1284         a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
1285         self.assertEqual(7,b)
1286         self.assertTrue(c.getCoords().getHiddenCppPointer()!=coords.getHiddenCppPointer())
1287         self.assertTrue(c.getCoords()[:8].isEqual(coords,0))
1288         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,7,8,14,7,6,8,14,6,2,8,14,2,3,8,14,3,2,9,14,2,1,9,14,1,0,9,14,0,3,9,14,3,0,10,14,0,4,10,14,4,7,10,14,7,3,10,14,2,6,11,14,6,5,11,14,5,1,11,14,1,2,11,14,7,4,12,14,4,5,12,14,5,6,12,14,6,7,12,14,1,5,13,14,5,4,13,14,4,0,13,14,0,1,13,14])))
1289         m4CoordsExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.,0.5,1.,1.,0.5,0.5,0.,0.,0.5,1.,1.,0.5,1.,0.5,0.5,2.,0.5,0.,1.,0.5,0.5,1.],15,3)
1290         m4CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1291         self.assertTrue(c.getCoords().isEqual(m4CoordsExp,1e-12))
1292         self.assertAlmostEqual(2.,c.getMeasureField(False).accumulate()[0],12)
1293         #
1294         m6=MEDCouplingUMesh("hexa8",3)
1295         m6.setCoords(coords)
1296         m6.allocateCells(0)
1297         m6.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1298         st=m6.getCoords().getHiddenCppPointer()
1299         c,a,b=m6.tetrahedrize(GENERAL_48)
1300         c.checkConsistency()
1301         a.isEqual(DataArrayInt([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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
1302         self.assertEqual(19,b)
1303         self.assertTrue(c.getCoords().getHiddenCppPointer()!=coords.getHiddenCppPointer())
1304         self.assertTrue(c.getCoords()[:8].isEqual(coords,0))
1305         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,20,8,26,3,8,21,26,3,9,20,26,3,22,9,26,3,21,12,26,3,12,22,26,8,10,2,23,8,2,13,23,8,20,10,23,8,26,20,23,8,13,21,23,8,21,26,23,12,26,21,25,12,21,16,25,12,22,26,25,12,17,22,25,12,16,0,25,12,0,17,25,21,23,13,18,21,13,1,18,21,26,23,18,21,25,26,18,21,1,16,18,21,16,25,18,9,11,20,24,9,20,26,24,9,7,11,24,9,14,7,24,9,26,22,24,9,22,14,24,20,6,10,15,20,10,23,15,20,11,6,15,20,24,11,15,20,23,26,15,20,26,24,15,22,24,26,19,22,26,25,19,22,14,24,19,22,4,14,19,22,25,17,19,22,17,4,19,26,15,23,5,26,23,18,5,26,24,15,5,26,19,24,5,26,18,25,5,26,25,19,5])))
1306         m6CoordsExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.,0.5,1.,0.,0.,1.,1.,1.,1.,1.,0.5,1.,2.,0.,0.5,0.,1.,0.5,0.,0.,0.5,2.,1.,0.5,2.,0.5,0.,0.,0.,0.,1.,1.,0.,1.,0.5,0.,2.,0.5,1.,1.,0.5,0.5,0.,0.,0.5,1.,1.,0.5,1.,0.5,0.5,2.,0.5,0.,1.,0.5,0.5,1.],27,3)
1307         m6CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1308         self.assertTrue(c.getCoords().isEqual(m6CoordsExp,1e-12))
1309         self.assertAlmostEqual(2.,c.getMeasureField(False).accumulate()[0],12)
1310         #
1311         m7=MEDCouplingUMesh("polyhed",3)
1312         coords=DataArrayDouble([1.,0.,0.,0.5,0.8660254037844386,0.,-0.5,0.8660254037844387,0.,-1.,0.,0.,-0.5,-0.8660254037844384,0.,0.5,-0.866025403784439,0.,1.,0.,2.,0.5,0.8660254037844386,2.,-0.5,0.8660254037844387,2.,-1.,0.,2.,-0.5,-0.8660254037844384,2.,0.5,-0.866025403784439,2.0],12,3) ; coords.setInfoOnComponents(["X","YY","ZZZ"])
1313         m7.setCoords(coords)
1314         m7.allocateCells()
1315         m7.insertNextCell(NORM_POLYHED,[3,2,1,0,5,4,-1,9,10,11,6,7,8,-1,3,9,8,2,-1,2,8,7,1,-1,1,7,6,0,-1,0,6,11,5,-1,5,11,10,4,-1,4,10,9,3])
1316         c,a,b=m7.tetrahedrize(PLANAR_FACE_5)
1317         c.checkConsistency()
1318         self.assertTrue(a.isEqual(DataArrayInt([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,0,0,0,0])))
1319         self.assertEqual(9,b)
1320         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,12,20,2,1,12,20,1,0,12,20,0,5,12,20,5,4,12,20,4,3,12,20,9,10,13,20,10,11,13,20,11,6,13,20,6,7,13,20,7,8,13,20,8,9,13,20,3,9,14,20,9,8,14,20,8,2,14,20,2,3,14,20,2,8,15,20,8,7,15,20,7,1,15,20,1,2,15,20,1,7,16,20,7,6,16,20,6,0,16,20,0,1,16,20,0,6,17,20,6,11,17,20,11,5,17,20,5,0,17,20,5,11,18,20,11,10,18,20,10,4,18,20,4,5,18,20,4,10,19,20,10,9,19,20,9,3,19,20,3,4,19,20])))
1321         self.assertAlmostEqual(5.196152422706635,c.getMeasureField(False).accumulate()[0],12)
1322         m7CoordsExp=DataArrayDouble([1.0,0.0,0.0,0.5,0.8660254037844386,0.0,-0.5,0.8660254037844387,0.0,-1.0,0.,0.0,-0.5,-0.8660254037844384,0.0,0.5,-0.866025403784439,0.0,1.0,0.0,2.0,0.5,0.8660254037844386,2.0,-0.5,0.8660254037844387,2.0,-1.0,0.,2.0,-0.5,-0.8660254037844384,2.0,0.5,-0.866025403784439,2.0,0.0,0.0,0.0,0.0,0.,2.0,-0.75,0.4330127018922194,1.0,0.0,0.8660254037844386,1.0,0.75,0.4330127018922193,1.0,0.75,-0.4330127018922195,1.0,0.0,-0.8660254037844387,1.0,-0.75,-0.4330127018922191,1.0,0.0,0.,1.0],21,3)
1323         m7CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1324         self.assertTrue(c.getCoords().isEqual(m7CoordsExp,1e-12))
1325         del m7,coords,c
1326         #
1327         coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.],8,3) ; coords.setInfoOnComponents(["X","YY","ZZZ"])
1328         m8=MEDCouplingUMesh("pyra5",3)
1329         m8.setCoords(coords)
1330         m8.allocateCells(0)
1331         m8.insertNextCell(NORM_PYRA5,[3,2,1,0,7])
1332         st=m8.getCoords().getHiddenCppPointer()
1333         c,a,b=m8.tetrahedrize(PLANAR_FACE_5)
1334         self.assertEqual(m8.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1335         c.checkConsistency()
1336         self.assertTrue(a.isEqual(DataArrayInt([0,0])))
1337         self.assertEqual(0,b)
1338         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,1,7,3,1,0,7])))
1339         self.assertAlmostEqual(0.6666666666666667,c.getMeasureField(False).accumulate()[0],12)
1340         pass
1341
1342     def testDualMesh3D1(self):
1343         arr=DataArrayDouble(2) ; arr.iota()
1344         c=MEDCouplingCMesh() ; c.setCoords(arr,arr,arr)
1345         m=c.buildUnstructured()
1346         t=m.tetrahedrize(PLANAR_FACE_5)[0]
1347         d=t.computeDualMesh()
1348         self.assertTrue(d.getNodalConnectivityIndex().isEqual(DataArrayInt([0,29,118,207,236,325,354,383,472])))
1349         self.assertTrue(d.getNodalConnectivity().isEqual(DataArrayInt([26,11,42,8,-1,25,8,42,10,-1,29,10,42,11,-1,0,26,8,25,-1,0,25,10,29,-1,0,29,11,26,24,9,42,8,-1,26,8,42,11,-1,27,11,42,9,-1,1,24,8,26,-1,1,26,11,27,-1,30,13,43,12,-1,24,12,43,15,-1,32,15,43,13,-1,1,30,12,24,-1,1,32,13,30,-1,35,17,44,16,-1,32,16,44,19,-1,27,19,44,17,-1,1,35,16,32,-1,1,27,17,35,-1,24,15,46,9,-1,27,9,46,19,-1,32,19,46,15,27,9,42,11,-1,29,11,42,10,-1,28,10,42,9,-1,2,29,10,28,-1,2,27,11,29,-1,27,17,44,19,-1,38,19,44,18,-1,37,18,44,17,-1,2,37,17,27,-1,2,38,18,37,-1,28,21,45,23,-1,41,23,45,22,-1,38,22,45,21,-1,2,41,22,38,-1,2,28,23,41,-1,27,19,46,9,-1,28,9,46,21,-1,38,21,46,19,35,16,44,17,-1,36,18,44,16,-1,37,17,44,18,-1,3,36,16,35,-1,3,35,17,37,-1,3,37,18,36,24,8,42,9,-1,25,10,42,8,-1,28,9,42,10,-1,4,25,8,24,-1,4,28,10,25,-1,24,15,43,12,-1,31,12,43,14,-1,34,14,43,15,-1,4,24,12,31,-1,4,31,14,34,-1,34,21,45,20,-1,40,20,45,23,-1,28,23,45,21,-1,4,34,20,40,-1,4,40,23,28,-1,24,9,46,15,-1,28,21,46,9,-1,34,15,46,21,30,12,43,13,-1,31,14,43,12,-1,33,13,43,14,-1,5,31,12,30,-1,5,30,13,33,-1,5,33,14,31,40,23,45,20,-1,39,20,45,22,-1,41,22,45,23,-1,6,40,20,39,-1,6,39,22,41,-1,6,41,23,40,32,13,43,15,-1,34,15,43,14,-1,33,14,43,13,-1,7,33,13,32,-1,7,34,14,33,-1,32,19,44,16,-1,36,16,44,18,-1,38,18,44,19,-1,7,32,16,36,-1,7,36,18,38,-1,34,20,45,21,-1,39,22,45,20,-1,38,21,45,22,-1,7,39,20,34,-1,7,38,22,39,-1,32,15,46,19,-1,38,19,46,21,-1,34,21,46,15])))
1350         self.assertTrue(d.getCoords().isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,0.,1.,0.,1.,1.,0.,0.,0.,1.,1.,0.,1.,0.,1.,1.,1.,1.,1.,0.3333333333333333,0.,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.,0.6666666666666666,0.,0.6666666666666666,1.,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.3333333333333333,1.,0.6666666666666666,0.3333333333333333,0.6666666666666666,1.,0.6666666666666666,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.,0.6666666666666666,1.,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.3333333333333333,0.3333333333333333,0.6666666666666666,1.,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.3333333333333333,1.,0.6666666666666666,0.,0.6666666666666666,0.6666666666666666,0.5,0.,0.5,0.,0.,0.5,0.5,0.,0.,0.5,0.5,0.,0.,0.5,0.5,0.,0.5,0.,1.,0.,0.5,0.5,0.,1.,1.,0.5,0.5,1.,0.5,1.,0.5,0.5,1.,1.,0.5,0.,1.,1.,0.5,0.5,1.,0.,0.5,1.,0.5,0.5,1.,1.,0.,0.5,1.,0.,1.,0.5,0.25,0.25,0.25,0.75,0.25,0.75,0.75,0.75,0.25,0.25,0.75,0.75,0.5,0.5,0.5],47,3),1e-12))
1351         self.assertAlmostEqual(1.,d.getMeasureField(False).accumulate()[0],1e-13)
1352         pass
1353
1354     def testDualMesh2D1(self):
1355         arr=DataArrayDouble(5) ; arr.iota()
1356         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
1357         m=c.buildUnstructured()
1358         m.simplexize(0)
1359         t=MEDCoupling1SGTUMesh(m)
1360         d=t.computeDualMesh()
1361         self.assertTrue(d.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,12,20,28,34,42,54,66,78,86,94,106,118,130,138,146,158,170,182,190,196,204,212,220,224])))
1362         self.assertTrue(d.getNodalConnectivity().isEqual(DataArrayInt([26,81,25,0,25,81,27,82,29,83,30,1,30,83,31,84,33,85,34,2,34,85,35,86,37,87,38,3,38,87,39,88,41,4,27,81,26,5,42,89,28,82,29,82,28,89,43,90,45,91,32,84,31,83,33,84,32,91,46,92,48,93,36,86,35,85,37,86,36,93,49,94,51,95,40,88,39,87,41,88,40,95,52,96,54,9,43,89,42,10,55,97,44,90,45,90,44,97,56,98,58,99,47,92,46,91,48,92,47,99,59,100,61,101,50,94,49,93,51,94,50,101,62,102,64,103,53,96,52,95,54,96,53,103,65,104,67,14,56,97,55,15,68,105,57,98,58,98,57,105,69,106,71,107,60,100,59,99,61,100,60,107,72,108,74,109,63,102,62,101,64,102,63,109,75,110,77,111,66,104,65,103,67,104,66,111,78,112,80,19,69,105,68,20,70,106,71,106,70,21,73,108,72,107,74,108,73,22,76,110,75,109,77,110,76,23,79,112,78,111,80,112,79,24])))
1363         self.assertTrue(d.getCoords().isEqual(DataArrayDouble([0.,0.,1.,0.,2.,0.,3.,0.,4.,0.,0.,1.,1.,1.,2.,1.,3.,1.,4.,1.,0.,2.,1.,2.,2.,2.,3.,2.,4.,2.,0.,3.,1.,3.,2.,3.,3.,3.,4.,3.,0.,4.,1.,4.,2.,4.,3.,4.,4.,4.,0.5,0.,0.,0.5,0.5,0.5,0.5,1.,1.,0.5,1.5,0.,1.5,0.5,1.5,1.,2.,0.5,2.5,0.,2.5,0.5,2.5,1.,3.,0.5,3.5,0.,3.5,0.5,3.5,1.,4.,0.5,0.,1.5,0.5,1.5,0.5,2.,1.,1.5,1.5,1.5,1.5,2.,2.,1.5,2.5,1.5,2.5,2.,3.,1.5,3.5,1.5,3.5,2.,4.,1.5,0.,2.5,0.5,2.5,0.5,3.,1.,2.5,1.5,2.5,1.5,3.,2.,2.5,2.5,2.5,2.5,3.,3.,2.5,3.5,2.5,3.5,3.,4.,2.5,0.,3.5,0.5,3.5,0.5,4.,1.,3.5,1.5,3.5,1.5,4.,2.,3.5,2.5,3.5,2.5,4.,3.,3.5,3.5,3.5,3.5,4.,4.,3.5,0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,1.3333333333333333,0.3333333333333333,1.6666666666666665,0.6666666666666666,2.333333333333333,0.3333333333333333,2.6666666666666665,0.6666666666666666,3.333333333333333,0.3333333333333333,3.6666666666666665,0.6666666666666666,0.3333333333333333,1.3333333333333333,0.6666666666666666,1.6666666666666665,1.3333333333333333,1.3333333333333333,1.6666666666666665,1.6666666666666665,2.333333333333333,1.3333333333333333,2.6666666666666665,1.6666666666666665,3.333333333333333,1.3333333333333333,3.6666666666666665,1.6666666666666665,0.3333333333333333,2.333333333333333,0.6666666666666666,2.6666666666666665,1.3333333333333333,2.333333333333333,1.6666666666666665,2.6666666666666665,2.333333333333333,2.333333333333333,2.6666666666666665,2.6666666666666665,3.333333333333333,2.333333333333333,3.6666666666666665,2.6666666666666665,0.3333333333333333,3.333333333333333,0.6666666666666666,3.6666666666666665,1.3333333333333333,3.333333333333333,1.6666666666666665,3.6666666666666665,2.333333333333333,3.333333333333333,2.6666666666666665,3.6666666666666665,3.333333333333333,3.333333333333333,3.6666666666666665,3.6666666666666665],113,2),1e-12))
1364         self.assertAlmostEqual(16.,d.getMeasureField(False).accumulate()[0],1e-13)
1365         pass
1366
1367     def testSwig2LoadBalanceBBox1(self):
1368         arr=DataArrayDouble(5) ; arr.iota()
1369         t=MEDCouplingCMesh() ; t.setCoords(arr,arr)
1370         arr=DataArrayDouble(16) ; arr.iota() ; arr*=2./15
1371         s=MEDCouplingCMesh() ; s.setCoords(arr,arr[:]) ; s.translate([2.,1.])
1372         #
1373         s1=s.build1SGTUnstructured()
1374         t1=t.build1SGTUnstructured()
1375         w=MEDCouplingPointSet.ComputeNbOfInteractionsWithSrcCells(s1,t1,1e-12)
1376         wExp=DataArrayInt([0,0,0,0,0,0,64,64,0,0,64,64,0,0,0,0])
1377         self.assertTrue(w.isEqual(wExp))
1378         slcs=w.splitInBalancedSlices(4)
1379         self.assertEqual(len(slcs),4)
1380         self.assertEqual(slcs,[slice(0,7,1),slice(7,8,1),slice(8,11,1),slice(11,16,1)])
1381         bbs=s1.getBoundingBoxForBBTree()
1382         bbt=t1.getBoundingBoxForBBTree()
1383         self.assertTrue(bbt.computeNbOfInteractionsWith(bbs,1e-12).isEqual(wExp))
1384         pass
1385
1386     def testKrSpatialDiscretization2(self):
1387         srcPointCoordsXY=DataArrayDouble([0.8401877171547095,0.39438292681909304,0.7830992237586059,0.7984400334760733,0.9116473579367843,0.19755136929338396,0.335222755714889,0.768229594811904,0.2777747108031878,0.5539699557954305,0.47739705186216025,0.6288709247619244,0.36478447279184334,0.5134009101956155,0.9522297251747128,0.9161950680037007,0.6357117279599009,0.7172969294326831,0.14160255535580338,0.6069688762570586,0.01630057162432958,0.24288677062973696,0.13723157678601872,0.8041767542269904,0.15667908925408455,0.4009443942461835,0.12979044678145574,0.10880880202576929,0.998924518003559,0.21825690531090688,0.5129323944043984,0.8391122346926072,0.6126398325956612,0.29603161769734304,0.6375522677030192,0.5242871900667843,0.493582986990727,0.9727750238835695,0.29251678441302703,0.7713576977939148,0.5267449792133388,0.7699138362751873,0.4002286220901779,0.8915294520051822,0.2833147460051415,0.3524583472648907,0.8077245200088827,0.9190264739650424,0.06975527623191256,0.9493270753646861,0.5259953502221011,0.08605584785624214,0.19221384599442307,0.6632269270081198,0.8902326025488938,0.3488929352485076,0.06417132078864207,0.02002304886468828,0.4577017372742769,0.06309583832653977,0.23827995417559517,0.9706341316786754,0.9022080734848082,0.8509197867712563,0.2666657493760184,0.5397603407221662,0.3752069763723793,0.7602487363667454,0.5125353641400744,0.6677237607854063,0.5316064341606602,0.039280343353413204,0.4376375965949323,0.9318350562508382,0.9308097953585953,0.7209523430657351,0.28429340305006756,0.7385343149018168,0.6399788165651163,0.3540486797476414,0.687861390266503,0.16597416632155615,0.4401045276038835,0.880075236260926,0.829201093329676,0.3303371296871161,0.22896817104377232,0.8933724145839793,0.35036017855180435,0.6866699083180492,0.9564682529105192,0.5886401331930609,0.6573040395310633,0.8586763259296661,0.4395599194986559,0.9239697889070817,0.39843666665183225,0.8147668963366965,0.6842185252738271,0.9109720307919067,0.4824906566564416,0.21582495896882609,0.9502523741453198,0.9201282537170352,0.14766001475400292,0.8810621695039152,0.641080596317109,0.43195341826973177,0.6195964839400707,0.281059412416564,0.7860020980173732,0.3074578737409124,0.44703357920378145,0.22610662515559543,0.18753310953617705,0.27623467206779617,0.5564437553083728,0.4165012805799494,0.16960708618611428,0.9068039338601771,0.10317118843233734,0.1260753390966334,0.49544406658757667,0.7604752284290619,0.9847516650262995,0.9350039865518939,0.6844450168704823,0.3831883312124705,0.7497708824229291,0.36866354167864823,0.2941603620043771,0.2322615386137094,0.5844885006474743,0.24441273568403568,0.15238979186508328,0.7321485158671385,0.12547490472228962,0.7934703881821923,0.164101933671209,0.7450713891280216,0.07452980059875632,0.9501040316885822,0.05252926240327268,0.5215633798025378,0.1762106563785163,0.24006237240511102,0.797798051870334,0.732654411686889,0.6565636529850605,0.9674051385221095,0.6394583455470663,0.7597348418830591,0.09348047715308166,0.13490241166898162,0.5202100698464597,0.07823214171371988,0.06990639775521419,0.2046550862512808,0.4614204733918516,0.8196772801781433,0.5733186283955903,0.7555808353962288,0.05193881879185271,0.1578071285774033,0.9999935710802644,0.204328610656936,0.8899556444445419,0.12546847580255405,0.9977989993047895,0.054057577650089554,0.8705398649305757,0.07232879943788462,0.004161608873010431,0.9230691273338484,0.5938921792404224,0.180372265717188,0.16313149927329806,0.3916902306450951,0.9130266774040771,0.8196951527240198,0.35909536870154335,0.552485022485482,0.5794299941414176,0.452575845854625,0.687387434620125,0.09964006352221597,0.5308079880340062,0.7572938323753392,0.30429514977349675,0.9922284614258579,0.5769711125534824,0.877613778169087,0.7478092963564253,0.6289099313453351,0.03542090674649035,0.7478028669710285,0.8332385420022712,0.9253765511910322,0.8732713427735824,0.8310375408413995],100,2)
1388         srcFieldValsOnPoints=DataArrayDouble([0.7643742528498438,-0.023507696856211995,1.1082895131907775,0.6299357452572031,0.8892623544912389,0.72212114810697,0.9196401044320336,-0.759961711221917,0.40801932617748826,0.8441134300809151,0.982483804252809,0.6752368914020778,0.9924403977479798,1.1063334970204484,0.9403055261137516,0.3624481886322733,1.1344772505996308,0.7522965618948239,0.17077741651388564,0.6504551671311436,0.45843479588425423,0.41098905950326753,1.0681420394050904,-0.3483587903820091,0.5620151050607809,1.384969776596035,0.7948875141132845,0.7931192000237167,1.062498042490183,1.3709072529577366,0.44929346605311893,-0.4469683401788374,0.9035857424514101,0.6137249300593463,0.6355610879026966,1.4318174829507697,0.3097567072129551,-0.20515052260807165,0.6922559820922779,1.0341638749443423,1.3072652153341024,0.38511367353000436,0.9160514929274943,0.54513408530581,0.722252267913328,0.06684522818576251,0.10571899758067793,0.3193844999960903,0.5213532270828706,-0.04834998649603944,1.2408805068350615,-0.7632951295676795,0.5980054665011202,0.9064738717547436,1.1541070755096696,1.008234260272265,1.2225806960553827,1.0788560195121106,0.9818990282104452,0.5621951325841853,1.0796757508374188,0.5082872315589883,-0.9153702001062469,0.9560418838920791,0.9251098559152824,1.1603063610984021,1.2122303611181837,0.7379539363312343,0.6877611899207183,0.723966552446608,0.5596025827162566,0.8849725005989729,1.0908363665075547,0.08956512916455672,-0.10247645571248344,0.3236718069555875,1.069478546398975,1.3900071080692746,1.0322398863403262,0.45315515354558034,0.4249870238786733,1.030226761858634,0.974024629584669,1.2838885424020365,1.3451943506525155,1.4029933267831995,0.6025539675442462,1.2947650597767038,1.0006061239483002,-0.4017336259949164,0.8771165113201297,0.9158909024218246,1.403798605551443,0.4742904006425974,0.3671787905896653,0.20646491720419674,0.40739337434288925,0.7341932402033597,-0.4295893651836911,-0.3187777570661546],100,1)
1389         targetPointCoordsXY=DataArrayDouble([-0.5,-0.5,-0.5,-0.35,-0.5,-0.2,-0.5,-0.05,-0.5,0.1,-0.5,0.25,-0.5,0.4,-0.5,0.55,-0.5,0.7,-0.5,0.85,-0.5,1.0,-0.5,1.15,-0.5,1.3,-0.5,1.45,-0.35,-0.5,-0.35,-0.35,-0.35,-0.2,-0.35,-0.05,-0.35,0.1,-0.35,0.25,-0.35,0.4,-0.35,0.55,-0.35,0.7,-0.35,0.85,-0.35,1.0,-0.35,1.15,-0.35,1.3,-0.35,1.45,-0.2,-0.5,-0.2,-0.35,-0.2,-0.2,-0.2,-0.05,-0.2,0.1,-0.2,0.25,-0.2,0.4,-0.2,0.55,-0.2,0.7,-0.2,0.85,-0.2,1.0,-0.2,1.15,-0.2,1.3,-0.2,1.45,-0.05,-0.5,-0.05,-0.35,-0.05,-0.2,-0.05,-0.05,-0.05,0.1,-0.05,0.25,-0.05,0.4,-0.05,0.55,-0.05,0.7,-0.05,0.85,-0.05,1.0,-0.05,1.15,-0.05,1.3,-0.05,1.45,0.1,-0.5,0.1,-0.35,0.1,-0.2,0.1,-0.05,0.1,0.1,0.1,0.25,0.1,0.4,0.1,0.55,0.1,0.7,0.1,0.85,0.1,1.0,0.1,1.15,0.1,1.3,0.1,1.45,0.25,-0.5,0.25,-0.35,0.25,-0.2,0.25,-0.05,0.25,0.1,0.25,0.25,0.25,0.4,0.25,0.55,0.25,0.7,0.25,0.85,0.25,1.0,0.25,1.15,0.25,1.3,0.25,1.45,0.4,-0.5,0.4,-0.35,0.4,-0.2,0.4,-0.05,0.4,0.1,0.4,0.25,0.4,0.4,0.4,0.55,0.4,0.7,0.4,0.85,0.4,1.0,0.4,1.15,0.4,1.3,0.4,1.45,0.55,-0.5,0.55,-0.35,0.55,-0.2,0.55,-0.05,0.55,0.1,0.55,0.25,0.55,0.4,0.55,0.55,0.55,0.7,0.55,0.85,0.55,1.0,0.55,1.15,0.55,1.3,0.55,1.45,0.7,-0.5,0.7,-0.35,0.7,-0.2,0.7,-0.05,0.7,0.1,0.7,0.25,0.7,0.4,0.7,0.55,0.7,0.7,0.7,0.85,0.7,1.0,0.7,1.15,0.7,1.3,0.7,1.45,0.85,-0.5,0.85,-0.35,0.85,-0.2,0.85,-0.05,0.85,0.1,0.85,0.25,0.85,0.4,0.85,0.55,0.85,0.7,0.85,0.85,0.85,1.0,0.85,1.15,0.85,1.3,0.85,1.45,1.0,-0.5,1.0,-0.35,1.0,-0.2,1.0,-0.05,1.0,0.1,1.0,0.25,1.0,0.4,1.0,0.55,1.0,0.7,1.0,0.85,1.0,1.0,1.0,1.15,1.0,1.3,1.0,1.45,1.15,-0.5,1.15,-0.35,1.15,-0.2,1.15,-0.05,1.15,0.1,1.15,0.25,1.15,0.4,1.15,0.55,1.15,0.7,1.15,0.85,1.15,1.0,1.15,1.15,1.15,1.3,1.15,1.45,1.3,-0.5,1.3,-0.35,1.3,-0.2,1.3,-0.05,1.3,0.1,1.3,0.25,1.3,0.4,1.3,0.55,1.3,0.7,1.3,0.85,1.3,1.0,1.3,1.15,1.3,1.3,1.3,1.45,1.45,-0.5,1.45,-0.35,1.45,-0.2,1.45,-0.05,1.45,0.1,1.45,0.25,1.45,0.4,1.45,0.55,1.45,0.7,1.45,0.85,1.45,1.0,1.45,1.15,1.45,1.3,1.45,1.45],196,2)
1390         targetFieldValsExpected=DataArrayDouble([1.645976003316459, 1.454458180060204, 1.286087532859835, 1.147305389930914, 1.040143042030752, 0.9592075185603157, 0.8932542207607532, 0.8296417057622609, 0.7572539678257579, 0.6669048311361028, 0.551329882743212, 0.4064445075734602, 0.2323703965460786, 0.03253142054561309, 1.615321686989539, 1.414941300553572, 1.238383118538708, 1.096701655702075, 0.9955792747382535, 0.9271194507282707, 0.8741000712825546, 0.8201879508155141, 0.7537335933761495, 0.6656210809234322, 0.5470285414729397, 0.3927301586610237, 0.2044036897887453, -0.01181672742825013, 1.609602552867195, 1.400625195269133, 1.213287847440801, 1.065318574929208, 0.9717609562002842, 0.9182626517777217, 0.8760698972315855, 0.8258196104516153, 0.7586487405165288, 0.6686168424854784, 0.5434121624038266, 0.3741815029337978, 0.1661376046619205, -0.0704038088420833, 1.635421686625182, 1.422642113482769, 1.225977424080963, 1.066864693789366, 0.9864801043792362, 0.9486639217909161, 0.9075176697327381, 0.8471248730261529, 0.7660983406349626, 0.6675300501188994, 0.5320013361909732, 0.3404583135353376, 0.1074346390951333, -0.1520751802856468, 1.695346918429566, 1.489526279573347, 1.297678617961701, 1.139921240332637, 1.080508463804929, 1.036847769764088, 0.9687840669352359, 0.8790397822170175, 0.76938768351059, 0.6441978169925557, 0.4915328571013788, 0.2742929463574293, 0.0148214290833748, -0.2671755287427691, 1.782761788232491, 1.59423004798623, 1.422317125787222, 1.286999529473285, 1.20500638941831, 1.127058114031519, 1.022332539190471, 0.8945753999401338, 0.7469190939381181, 0.582396906110898, 0.4015920181411496, 0.1584700483835366, -0.1251860255418387, -0.4254052799545267, 1.881794862747652, 1.712890309994015, 1.557517508390291, 1.422727414977963, 1.308048056353061, 1.187569766723152, 1.03942150436647, 0.8677583087532357, 0.6766652050643343, 0.4703897480238999, 0.2497994532908829, -0.02005989176786582, -0.3224387891441491, -0.6331519303649853, 1.973114284621266, 1.820187301531605, 1.673403730111759, 1.528504440482262, 1.379693463484634, 1.207642134784147, 1.008217764780293, 0.7863328498822348, 0.5465383049529959, 0.2944879513187435, 0.03250657765404452, -0.2670900851421072, -0.5806516907976924, -0.8911331026431459, 2.038729888975378, 1.895652364645637, 1.751759791756183, 1.594035761810714, 1.403016809171641, 1.171403152610878, 0.913267035125007, 0.6343281031932027, 0.3434843176189371, 0.04195410032095204, -0.2645533663891493, -0.58577400250975, -0.8958218846257981, -1.192230697656513, 2.064018033720731, 1.922048791644444, 1.773847180028208, 1.600340336378483, 1.361620036333164, 1.060873411411508, 0.7373484802125152, 0.3868966266761109, 0.04316272760227413, -0.3009370030949727, -0.6505233805563486, -0.9669887470696283, -1.250005719852354, -1.519122595631787, 2.039938287785342, 1.887400820799651, 1.722008733683987, 1.523879290022419, 1.23834392230135, 0.8606985727866472, 0.4844892131548788, 0.08077959236877175, -0.3195742594962179, -0.726291368696764, -1.094357645641832, -1.359078900303776, -1.604725656501341, -1.845297168323687, 1.965762248218393, 1.791665198563286, 1.595056719739704, 1.353692777435502, 1.033006623003495, 0.6416349531117889, 0.2290046916364761, -0.1993180965088852, -0.6311618804827295, -1.051489875129883, -1.409404344854132, -1.681249363331096, -1.917859637689007, -2.145034400762945, 1.849053542205925, 1.648479366622312, 1.418493963148431, 1.141939527533839, 0.8042385795619003, 0.4127534639189761, -0.008572116677791453, -0.4428317297963555, -0.8745477268718713, -1.281769237471681, -1.635421857742795, -1.926210204560556, -2.175577364628722, -2.405762639746138, 1.701519686999922, 1.475879908746998, 1.219065416294153, 0.9203732349759972, 0.5740137315474942, 0.1856460506119944, -0.2298288912529738, -0.6558565521653752, -1.075391078040103, -1.469402631469075, -1.820558929095151, -2.123592211415966, -2.388177455227765, -2.628832075944413])
1391         coeffsExpected=DataArrayDouble([0.3953237723894342,-0.17220705170185724,0.620727139132215,-0.01938292763088709,-0.007524685306185282,0.0016277944443884584,-0.0005209587893117361,-1.8992696595839718,-0.13154330748345855,0.11248800965389728,-0.47310750305033406,0.03685741122098605,0.21362468750754374,0.8082608687799991,-0.6775548200221704,-0.027683208482275873,-0.007806877014495724,-0.013539239795959668,0.3478535665778018,0.005145793726360813,0.03708618549628136,-0.18235332489209385,-0.04517273339177797,-0.081755114492025,0.12791746560435255,0.09659355695676189,-0.024809653129318366,0.08327587452569823,-1.790380673650165,-0.10622983512164165,0.14989029282340274,0.05949513762355707,0.004548072841131278,0.011252095917834793,-0.004848057194721367,-0.2658537133108412,0.016651579133606154,-0.021640915366981317,0.008975511042160175,-0.021052213988815974,-0.09347841701844657,0.03533229488135717,-0.014556185287109863,-0.27228591670520086,0.002989987191209683,-0.5489428537951813,-0.02134456783001304,-0.22462281620064825,0.005230853443767429,-0.1894678262257301,0.0033140729457334884,5.295483062326795,-0.2724500716060311,0.026433905662192683,0.01368706308878908,-0.03014264855048227,0.053679001877659956,0.08109477254132096,-0.005004603067203444,0.016907143132293558,0.2105509502082437,0.003657404455024417,-4.904755847017426,0.01634808163992959,-0.008325515865305198,0.062188432751569676,-0.013114633511406406,0.11020519384963083,-0.008599402366091309,-0.012125149710784723,0.31723729052927313,-0.10298398036815914,-0.07250078775612204,0.39976713701763433,0.45897498107347223,0.01018626210400031,0.20163425809089347,0.19729093298588943,0.42863333455911523,0.015595097081693168,0.06060353651437489,-0.16379444813161725,-0.43290344196574165,-0.5931022701412187,1.1906610004748832,0.44418106894148945,0.06536220001548931,0.010261694323554562,-0.05943099382075491,-0.04939614579484797,0.002234505477641322,-0.011262130967449935,0.09644905007708474,-0.029518792883267808,0.41564004027396634,-0.18459770295961597,0.3100981306103734,-0.2509873737065425,0.5434321443668653,0.3009912967350914,1.9560655796099518,-0.7143435150084513,-1.5123449469879784])
1392         #
1393         nbOfInputPoints=100;
1394         f=MEDCouplingFieldDouble.New(ON_NODES_KR,ONE_TIME);
1395         mesh=MEDCoupling1SGTUMesh.New("aMesh",NORM_POINT1);
1396         mesh.setCoords(srcPointCoordsXY);
1397         f.setMesh(mesh);
1398         f.setArray(srcFieldValsOnPoints);
1399         f.checkConsistencyLight();
1400         #
1401         res0=f.getValueOn([-0.5,-0.5]);
1402         self.assertAlmostEqual(targetFieldValsExpected.getIJ(0,0),res0[0],10)
1403         #
1404         valuesToTest=f.getValueOnMulti(targetPointCoordsXY);
1405         self.assertEqual(196,valuesToTest.getNumberOfTuples());
1406         self.assertEqual(1,valuesToTest.getNumberOfComponents());
1407         for i in range(40):
1408             self.assertAlmostEqual(targetFieldValsExpected[i],valuesToTest.getIJ(i,0),10)
1409             pass
1410         fd=f.getDiscretization()
1411         del f
1412         self.assertTrue(isinstance(fd,MEDCouplingFieldDiscretizationKriging))
1413         coeffs,isDrift=fd.computeVectorOfCoefficients(mesh,srcFieldValsOnPoints)
1414         self.assertEqual(3,isDrift)
1415         self.assertTrue(coeffsExpected.isEqual(coeffs,1e-8))
1416         # testing matrix
1417         pts3=[-0.5,-0.5,-0.5,-0.35,-0.35,-0.2]
1418         mesh.setCoords(srcPointCoordsXY[:4])
1419         m,nbCols=fd.computeEvaluationMatrixOnGivenPts(mesh,pts3)
1420         self.assertTrue(m.isEqual(DataArrayDouble([0.05768877688524917,-4.438982030395039,1.9495386255911573,3.431754627918642,0.11803848510231275,-4.138339658420563,1.6630742187104417,3.357226954607818,0.14630203028580618,-3.5156045565871734,1.414680070737206,2.954622455564169]),1e-12))
1421         if MEDCouplingHasNumPyBindings():
1422             import numpy as np
1423             m0=m.toNumPyArray() ; m0=m0.reshape(3,nbCols) ; m0=np.matrix(m0)
1424             srcFieldValsOnPoints2=DataArrayDouble(4,2) ; srcFieldValsOnPoints2[:,0]=srcFieldValsOnPoints[:4] ; srcFieldValsOnPoints2[:,1]=2*srcFieldValsOnPoints[:4]
1425             n0=srcFieldValsOnPoints2.toNumPyArray() ; n0=n0.reshape(4,2) ; n0=np.matrix(n0)
1426             #
1427             f=MEDCouplingFieldDouble.New(ON_NODES_KR,ONE_TIME) ;  f.setMesh(mesh) ; f.setArray(srcFieldValsOnPoints2) ; f.checkConsistencyLight()
1428             self.assertTrue(DataArrayDouble(np.array((m0*n0))).isEqual(f.getValueOnMulti(pts3),1e-14))
1429             pass
1430         #
1431         pass
1432
1433     # test the when input slice is all the same object is return by MEDCouplingMesh.buildPartRange
1434     def testSwig2MeshPartSlice1(self):
1435         a=DataArrayDouble(4) ; a.iota()
1436         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m=c.buildUnstructured()
1437         fc0=c.getMeasureField(False) ; fc1=fc0[:] ; fc2=fc0*fc1 ; fc2.setName(fc0.getName())
1438         self.assertEqual(fc0.getMesh().getHiddenCppPointer(),fc1.getMesh().getHiddenCppPointer())
1439         self.assertEqual(fc2.getMesh().getHiddenCppPointer(),fc1.getMesh().getHiddenCppPointer())
1440         self.assertTrue(fc2.isEqual(fc1,1e-12,1e-12))
1441         #
1442         fm0=m.getMeasureField(False) ; fm1=fm0[:] ; fm2=fm0*fm1 ; fm2.setName(fm0.getName())
1443         self.assertEqual(fm0.getMesh().getHiddenCppPointer(),fm1.getMesh().getHiddenCppPointer())
1444         self.assertEqual(fm2.getMesh().getHiddenCppPointer(),fm1.getMesh().getHiddenCppPointer())
1445         self.assertTrue(fm2.isEqual(fm1,1e-12,1e-12))
1446         pass
1447
1448     # test the correct behaviour when attempting to aggregate two fields whose mesh is null
1449     def testSwig2MergeFieldsOnFieldsHavingNoMesh(self):
1450         a=DataArrayDouble(4) ; a.iota() ; a*=1.5
1451         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; f1=c.getMeasureField(False)
1452         f1.setMesh(None) ; f2=f1.deepCopy() ; f2*=2
1453         f3=MEDCouplingFieldDouble.MergeFields(f1,f2)
1454         daExp=DataArrayDouble([2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5])
1455         self.assertTrue(f3.getArray().isEqual(daExp,1e-12))
1456         self.assertEqual(f3.getTypeOfField(),ON_CELLS)
1457         self.assertEqual(f3.getMesh(),None)
1458         f4=MEDCouplingFieldDouble.MergeFields([f1,f2])
1459         self.assertTrue(f4.getArray().isEqual(daExp,1e-12))
1460         self.assertEqual(f4.getTypeOfField(),ON_CELLS)
1461         self.assertEqual(f4.getMesh(),None)
1462         pass
1463
1464     # test a simple node to cell conversion of a field
1465     def testSwig2NodeToCellDiscretization1(self):
1466         f=MEDCouplingFieldDouble(ON_NODES) ; f.setTime(1.1,2,3)
1467         a1=DataArrayDouble(4) ; a1.iota()
1468         a2=DataArrayDouble(3) ; a2.iota()
1469         m=MEDCouplingCMesh() ; m.setCoords(a1,a2)
1470         f.setMesh(m)
1471         arr=DataArrayDouble([21.,121.,20.,120.,19.,119.,18.,118.,17.,117.,16.,116.,15.,115.,14.,114.,13.,113.,12.,112.,11.,111.,10.,110.],12,2) ; arr.setInfoOnComponents(["aa [km]","bbb [kJ]"])
1472         f.setArray(arr) ; f.setName("toto")
1473         #
1474         f2=f.nodeToCellDiscretization()
1475         self.assertEqual(ON_CELLS,f2.getTypeOfField())
1476         self.assertEqual("toto",f2.getName())
1477         self.assertEqual([1.1,2,3],f2.getTime())
1478         self.assertEqual(["aa [km]","bbb [kJ]"],f2.getArray().getInfoOnComponents())
1479         self.assertEqual(6,f2.getArray().getNumberOfTuples())
1480         self.assertEqual(f.getMesh().getHiddenCppPointer(),f2.getMesh().getHiddenCppPointer())
1481         exp=DataArrayDouble([18.5,118.5,17.5,117.5,16.5,116.5,14.5,114.5,13.5,113.5,12.5,112.5],6,2) ; exp.setInfoOnComponents(["aa [km]","bbb [kJ]"])
1482         self.assertTrue(f2.getArray().isEqual(exp,1e-13))
1483         pass
1484
1485     def testSwig2MeshOrientCorrectly2DCells1(self):
1486         m=MEDCouplingUMesh("mesh",2)
1487         coo=DataArrayDouble([1.,0.,0.5,-0.1,0.,1.,0.,0.,0.07,0.5,0.59,0.5],6,2)
1488         m.setCoords(coo)
1489         m.allocateCells()
1490         m.insertNextCell(NORM_TRI6,[3,0,2,1,5,4])
1491         m.insertNextCell(NORM_QPOLYG,[3,0,2,1,5,4])
1492         self.assertTrue(DataArrayDouble([-0.58093333350930543,-0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1493         m.changeSpaceDimension(3)
1494         m.orientCorrectly2DCells([0.,0.,-1.],False)
1495         #
1496         m.checkConsistencyLight()
1497         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([6,3,2,0,4,5,1, 32,3,2,0,4,5,1])))
1498         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14])))
1499         m.changeSpaceDimension(2)
1500         self.assertTrue(DataArrayDouble([0.58093333350930543,0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1501         pass
1502
1503     def testSwig2Hexa8HavingFacesWarped1(self):
1504         """ This test is bases on a "error" of interpolation detected. After investigation cell #3 of src is warped that leads to the fact that when trg is
1505         intersected with src the sum of intersection volume is greater than the volume of the trg cell.
1506         A test that can be done is to split the cell #3 of src into tetrohedrons and by summing all the volumes it does not fit the volume computed of cell#3 unsplitted (expect for
1507         GENERAL_24).
1508         """
1509         srcCoo=DataArrayDouble([0.15694071546650565,0.09383333333333337,6.920842121738133,0.15774332475430292,0.185486666666667,6.920682472824616,0.1585459340420992,0.27713999999999994,6.9205228239111,0.07427195882345167,0.05782666666666668,6.937285959830335,0.06343673343819695,0.11347333333333297,6.939441220162809,0.05260150805294228,0.16911999999999996,6.941596480495282,0.014076262238703396,0.04800666666666667,6.949259628344076,0.014076262238703396,0.07092000000000007,6.949259628344076,0.15407499632681992,0.09383333333333338,6.897607484780063,0.15489234394181514,0.18548666666666702,6.897567331066572,0.15570969155680933,0.27714,6.897527177353081,0.06988819198237989,0.05782666666666669,6.901743317269663,0.05885399917995321,0.11347333333333298,6.9022853924017955,0.047819806377526586,0.16912,6.902827467533927,0.0085871208577874,0.048006666666666684,6.9047548457815076,0.0085871208577874,0.07092000000000008,6.9047548457815076,0.153883333333333,0.09383333333333338,6.820902,0.154701666666667,0.18548666666666702,6.820902,0.15551999999999996,0.27714,6.820902,0.06959499999999999,0.05782666666666669,6.820902,0.058547499999999975,0.11347333333333298,6.820902,0.04749999999999999,0.16912,6.820902],22,3)
1510         src=MEDCouplingUMesh("TBmesh3D",3) ; src.setCoords(srcCoo)
1511         src.allocateCells()
1512         src.insertNextCell(NORM_HEXA8,[0,1,4,3,8,9,12,11])
1513         src.insertNextCell(NORM_HEXA8,[1,2,5,4,9,10,13,12])
1514         src.insertNextCell(NORM_HEXA8,[4,5,7,6,12,13,15,14])
1515         src.insertNextCell(NORM_HEXA8,[8,9,12,11,16,17,20,19])
1516         src.insertNextCell(NORM_HEXA8,[9,10,13,12,17,18,21,20])
1517         src.checkConsistency()
1518         # trg is useless here but I keep it in case of MEDCouplingRemapper were expected to do something about warped NORM_HEXA8
1519         trgCoo=DataArrayDouble([0.0960891897852753,0.105088620541845,6.8598,0.0599574480546212,0.118434267436059,6.8598,0.113514510609589,0.14874473653263,6.8598,0.0831322609794463,0.167319109733883,6.8598,0.0960891897852753,0.105088620541845,6.92146666666667,0.0599574480546212,0.118434267436059,6.92146666666667,0.113514510609589,0.14874473653263,6.92146666666667,0.0831322609794463,0.167319109733883,6.92146666666667],8,3)
1520         trg=MEDCouplingUMesh("MESH",3) ; trg.setCoords(trgCoo)
1521         trg.allocateCells()
1522         trg.insertNextCell(NORM_HEXA8,[0,1,3,2,4,5,7,6])
1523         #
1524         srcFace=src.buildDescendingConnectivity()[0]
1525         conn=MEDCoupling1SGTUMesh(srcFace).getNodalConnectivity() ; conn.rearrange(4)
1526         eqFaces=srcFace.computePlaneEquationOf3DFaces()
1527         nodeIdInCell=3
1528         e=(srcFace.getCoords()[conn[:,nodeIdInCell]]*eqFaces[:,:-1]).sumPerTuple()+eqFaces[:,3]# e represent the error between the expected 'a*X+b*Y+c*Z+d' in eqFaces and 0. Closer e to 0. is closer the 4th point is to the plane built with the 3 first points
1529         lambd=-e/(eqFaces[:,:3]**2).sumPerTuple()
1530         pts=lambd*eqFaces[:,:-1]+srcFace.getCoords()[conn[:,nodeIdInCell]]#pts represent the projection of the last points of each NORM_QUAD4 to the plane defined by the 3 first points of the NORM_QUAD4 cell
1531         shouldBeZero=(pts*eqFaces[:,:-1]).sumPerTuple()+eqFaces[:,3]# this line is useless only to be sure that pts are on the plane.
1532         check=(pts-srcFace.getCoords()[conn[:,nodeIdInCell]]).magnitude() # check contains the distance of the last point to its plane
1533         idsToTest=check.findIdsNotInRange(0.,1e-10)
1534         self.assertTrue(idsToTest.isEqual(DataArrayInt([17,18,19,20,22,23,24])))
1535         idsToTest2=idsToTest.findIdsNotInRange(18,22)
1536         self.assertTrue(idsToTest2.isEqual(DataArrayInt([0,4,5,6])))
1537         idsToTest2.rearrange(2)
1538         self.assertTrue(idsToTest2.sumPerTuple().isEqual(DataArrayInt([4,11])))
1539         pass
1540
1541     def testSwig2SortHexa8EachOther1(self):
1542         """
1543         testing MEDCoupling1SGTUMesh.sortHexa8EachOther method
1544         """
1545         coords1=DataArrayDouble([(-0.5,0.5,-0.5),(0.5,-0.5,-0.5),(-0.5,-0.5,0.5),(-0.5,-0.5,-0.5),(0.5,-0.5,0.5),(-0.5,0.5,0.5),(0.5,0.5,0.5),(0.5,0.5,-0.5)])
1546         m1=MEDCouplingUMesh("m1",3) ; m1.setCoords(coords1)
1547         m1.allocateCells() ; m1.insertNextCell(NORM_HEXA8,[7,1,3,0,6,4,2,5])
1548         m1.checkConsistencyLight()
1549         #
1550         m2=m1.deepCopy() ; m2.setName("m2")
1551         #
1552         trs=[[0.,0.,-1.],[0.,0.,1.],[1.,0.,0.],[0.,-1.,0.],[-1.,0.,0.],[0.,1.,0.]]
1553         for i,t in enumerate(trs):
1554             for j in range(64):
1555                 j2=(j//16) ; j1=((j%16)//4) ; j0=(j%4)
1556                 m11=m1.deepCopy()
1557                 m11.rotate([0.,0.,0.],[0.,0.,1.],float(j0)*pi/2)
1558                 m11.rotate([0.,0.,0.],[0.,1.,0.],float(j1)*pi/2)
1559                 m11.rotate([0.,0.,0.],[1.,0.,0.],float(j2)*pi/2)
1560                 m11.translate(t)
1561                 #
1562                 m=MEDCouplingUMesh.MergeUMeshes(m2,m11)
1563                 m.mergeNodes(1e-12)
1564                 self.assertEqual(12,m.getNumberOfNodes())
1565                 m=MEDCoupling1SGTUMesh(m)
1566                 m.sortHexa8EachOther()
1567                 tmp0=m.buildUnstructured().tetrahedrize(PLANAR_FACE_6)[0].buildUnstructured()
1568                 self.assertEqual(20,tmp0.computeSkin().getNumberOfCells())
1569                 pass
1570             pass
1571         pass
1572
1573     def testSwig2normMinComputeAbs1(self):
1574         d=DataArrayDouble([4,-5,2,6.1,-7.33,1,-1,3e2,0.07,-0.009,-6,-1e30],4,3)
1575         d.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1576         d0=d.computeAbs()
1577         dExp=d.deepCopy() ; dExp.abs()
1578         self.assertTrue(dExp.isEqual(d0,1e-12))
1579         e=d0-DataArrayDouble([4,5,2,6.1,7.33,1,1,3e2,0.07,0.009,6,1e30],4,3)
1580         self.assertAlmostEqual(0.,e.normMin(),13)
1581         self.assertAlmostEqual(0.009,d.normMin(),13)
1582         #
1583         di=DataArrayInt([3,-12,5,6,14,16,-23,100,23,-1,0,-6],4,3)
1584         di.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1585         d0i=di.computeAbs()
1586         diExp=di.deepCopy() ; diExp.abs()
1587         self.assertTrue(diExp.isEqual(d0i))
1588         self.assertEqual([3,12,5,6,14,16,23,100,23,1,0,6],d0i.getValues())
1589         pass
1590
1591     def testSwig2GetCellsContainingPointsForNonConvexPolygon1(self):
1592         coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,0.,-0.5,0.,0.,0.5,0.,],7,2)
1593         m=MEDCouplingUMesh("Intersect2D",2) ; m.setCoords(coo) ; m.allocateCells()
1594         m.insertNextCell(NORM_POLYGON,[6,3,4,5])
1595         m.insertNextCell(NORM_POLYGON,[4,0,1,2,6,5])
1596         m.checkConsistency()
1597         #
1598         self.assertTrue(m.getCellsContainingPoint((0.4,-0.4),1e-12).isEqual(DataArrayInt([0])))
1599         self.assertTrue(m.getCellsContainingPoint((-0.4,-0.4),1e-12).isEqual(DataArrayInt([1])))
1600         self.assertTrue(m.getCellsContainingPoint((0.,-0.4),1e-12).isEqual(DataArrayInt([0,1])))
1601         pass
1602
1603     def testSwig2GetCellsContainingPointsForNonConvexPolygon2(self):
1604         coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,-2.0816681711721685e-17,-2.0816681711721685e-17,-0.17677669529663687,0.1767766952966369,0.,0.5,0.5,0.,0.17677669529663684,-0.17677669529663692,0.17677669529663692,0.17677669529663684,-0.17677669529663692,-0.17677669529663687,0.,-0.5,-0.5,0.,0.33838834764831843,-0.3383883476483185,-0.33838834764831843,0.33838834764831843,-0.21213203435596423,0.21213203435596426,0.2121320343559642,-0.2121320343559643,0.21213203435596426,0.2121320343559642,-0.21213203435596423,-0.21213203435596428,0.3560660171779821,-0.35606601717798214,-0.35606601717798214,0.35606601717798214,0.19445436482630052,-0.19445436482630063,-0.19445436482630055,0.19445436482630057,0.,0.27],24,2)
1605         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1606         m.insertNextCell(NORM_QPOLYG,[8,5,4,9])
1607         m.insertNextCell(NORM_QPOLYG,[5,8,4,10])
1608         m.insertNextCell(NORM_QPOLYG,[16,8,5,15,21,9,22,17])
1609         m.insertNextCell(NORM_QPOLYG,[15,1,2,3,16,20,6,7,19,17])
1610         m.insertNextCell(NORM_QPOLYG,[15,5,8,16,22,10,21,18])
1611         m.insertNextCell(NORM_QPOLYG,[16,3,0,1,15,19,11,12,20,18])
1612         m.checkConsistency()
1613         self.assertTrue(m.getCellsContainingPoint([0.,0.27],1e-12).isEqual(DataArrayInt([2])))
1614         pass
1615
1616     def testSwig2DAIGetIdsEqualTuple1(self):
1617         da=DataArrayInt([0,7,1,2,4,1,2,1,1,2,0,1,2,1,5,1,1,2],9,2)
1618         self.assertTrue(da.findIdsEqualTuple([1,2]).isEqual(DataArrayInt([1,4,8])))
1619         self.assertTrue(da.findIdsEqualTuple((1,2)).isEqual(DataArrayInt([1,4,8])))
1620         self.assertTrue(da.findIdsEqualTuple(DataArrayInt([1,2])).isEqual(DataArrayInt([1,4,8])))
1621         da.rearrange(3)
1622         self.assertRaises(InterpKernelException,da.findIdsEqualTuple,[1,2])# mismatch nb of compo (3) and nb of elts in input tuple (2)
1623         self.assertTrue(da.findIdsEqualTuple([2,0,1]).isEqual(DataArrayInt([3])))
1624         self.assertTrue(da.findIdsEqualTuple([2,0,7]).isEqual(DataArrayInt([])))
1625         da.rearrange(1)
1626         self.assertTrue(da.findIdsEqualTuple(2).isEqual(DataArrayInt([3,6,9,12,17])))
1627         self.assertTrue(da.findIdsEqualTuple(2).isEqual(da.findIdsEqual(2)))
1628         pass
1629
1630     def testSwig2GaussNEStaticInfo1(self):
1631         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetWeightArrayFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.16666666666666666]),1e-12))
1632         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetRefCoordsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.,0.,1.,0.,0.,1.]),1e-12))
1633         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetLocsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.6666666666666667,0.16666666666666666,0.16666666666666666,0.6666666666666667]),1e-12))
1634         pass
1635
1636     def testSwigReverseNodalConnOnStructuredMesh(self):
1637         # 1D - standard
1638         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
1639         c.setCoordsAt(0,arr)
1640         rn,rni=c.getReverseNodalConnectivity()
1641         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1642         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1643         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1644         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1645         # 1D - limit
1646         c=MEDCouplingCMesh() ; arr=DataArrayDouble(1) ; arr.iota()
1647         c.setCoordsAt(0,arr)
1648         rn,rni=c.getReverseNodalConnectivity()
1649         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1650         self.assertTrue(rn.isEqual(DataArrayInt([0])))
1651         self.assertTrue(rni.isEqual(DataArrayInt([0,1])))
1652         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1653         # 1D - limit
1654         c=MEDCouplingCMesh() ; arr=DataArrayDouble(0) ; arr.iota()
1655         c.setCoordsAt(0,arr)
1656         rn,rni=c.getReverseNodalConnectivity()
1657         rn.isEqual(DataArrayInt([]))
1658         rni.isEqual(DataArrayInt([0]))
1659         # 2D - standard
1660         c=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; arr2=DataArrayDouble(4) ; arr.iota()
1661         c.setCoords(arr,arr2)
1662         rn,rni=c.getReverseNodalConnectivity()
1663         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1664         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,0,4,0,1,4,5,1,2,5,6,2,3,6,7,3,7,4,8,4,5,8,9,5,6,9,10,6,7,10,11,7,11,8,8,9,9,10,10,11,11])))
1665         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,8,10,14,18,22,24,26,30,34,38,40,41,43,45,47,48])))
1666         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1667         # 2D - limit
1668         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1669         c.setCoords(arr,arr2)
1670         rn,rni=c.getReverseNodalConnectivity()
1671         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1672         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1673         # 2D - limit
1674         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1675         c.setCoords(arr2,arr)
1676         rn,rni=c.getReverseNodalConnectivity()
1677         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1678         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1679         # 3D - standard
1680         c=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(3) ; arr1.iota() ; arr2=DataArrayDouble(4) ; arr2.iota()
1681         c.setCoords(arr0,arr1,arr2)
1682         rn,rni=c.getReverseNodalConnectivity()
1683         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,0,4,0,1,4,5,1,2,5,6,2,3,6,7,3,7,4,4,5,5,6,6,7,7,0,8,0,1,8,9,1,2,9,10,2,3,10,11,3,11,0,4,8,12,0,1,4,5,8,9,12,13,1,2,5,6,9,10,13,14,2,3,6,7,10,11,14,15,3,7,11,15,4,12,4,5,12,13,5,6,13,14,6,7,14,15,7,15,8,16,8,9,16,17,9,10,17,18,10,11,18,19,11,19,8,12,16,20,8,9,12,13,16,17,20,21,9,10,13,14,17,18,21,22,10,11,14,15,18,19,22,23,11,15,19,23,12,20,12,13,20,21,13,14,21,22,14,15,22,23,15,23,16,16,17,17,18,18,19,19,16,20,16,17,20,21,17,18,21,22,18,19,22,23,19,23,20,20,21,21,22,22,23,23])))
1684         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,8,10,14,18,22,24,25,27,29,31,32,34,38,42,46,48,52,60,68,76,80,82,86,90,94,96,98,102,106,110,112,116,124,132,140,144,146,150,154,158,160,161,163,165,167,168,170,174,178,182,184,185,187,189,191,192])))
1685         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1686         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1687         pass
1688
1689     def testSwig2CellToNodeDiscretization1(self):
1690         m=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(4) ; arr1.iota() ; m.setCoords(arr0,arr1)
1691         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(m) ; f.setTime(1.1,5,6)
1692         arr=DataArrayDouble(12) ; arr.iota()
1693         arr=DataArrayDouble.Meld(arr,arr+100.) ; arr.setInfoOnComponents(["aaa","bbb"])
1694         f.setArray(arr)
1695         f.checkConsistencyLight()
1696         #
1697         ref=DataArrayDouble([0.,0.5,1.5,2.5,3.,2.,2.5,3.5,4.5,5.,6.,6.5,7.5,8.5,9.,8.,8.5,9.5,10.5,11.])
1698         ref=DataArrayDouble.Meld(ref,ref+100.) ; ref.setInfoOnComponents(["aaa","bbb"])
1699         f2=f.cellToNodeDiscretization()
1700         f2.checkConsistencyLight()
1701         self.assertEqual(f2.getTime()[1:],[5,6])
1702         self.assertAlmostEqual(f2.getTime()[0],1.1,15)
1703         self.assertEqual(f2.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
1704         self.assertTrue(f2.getArray().isEqual(ref,1e-12))
1705         rn,rni=m.getReverseNodalConnectivity()
1706         rni2=(rni.deltaShiftIndex()).convertToDblArr()
1707         arr2=(f.getArray()[rn]).accumulatePerChunck(rni)/rni2
1708         self.assertTrue(f2.getArray().isEqual(arr2,1e-12))
1709         del f2
1710         #
1711         u=m.buildUnstructured() ; f.setMesh(u) ; del m
1712         f3=f.cellToNodeDiscretization()
1713         f3.checkConsistencyLight()
1714         self.assertEqual(f3.getTime()[1:],[5,6])
1715         self.assertAlmostEqual(f3.getTime()[0],1.1,15)
1716         self.assertEqual(f3.getMesh().getHiddenCppPointer(),u.getHiddenCppPointer())
1717         self.assertTrue(f3.getArray().isEqual(ref,1e-12))
1718         pass
1719
1720     def testSwig2GetMeshSpaceDimensionCMesh1(self):
1721         c=MEDCouplingCMesh()
1722         arr0=DataArrayDouble([0,1,2])
1723         arr1=DataArrayDouble([0])
1724         c.setCoords(arr0,arr0,arr0)
1725         self.assertEqual(c.getMeshDimension(),3)
1726         self.assertEqual(c.getSpaceDimension(),3)
1727         #
1728         c.setCoords(arr0,arr0,arr1)
1729         self.assertEqual(c.getMeshDimension(),2)
1730         self.assertEqual(c.getSpaceDimension(),3)
1731         #
1732         c.setCoords(arr0,arr0)
1733         self.assertEqual(c.getMeshDimension(),2)
1734         self.assertEqual(c.getSpaceDimension(),2)
1735         #
1736         c.setCoords(arr0,arr1)
1737         self.assertEqual(c.getMeshDimension(),1)
1738         self.assertEqual(c.getSpaceDimension(),2)
1739         #
1740         c.setCoords(arr0)
1741         self.assertEqual(c.getMeshDimension(),1)
1742         self.assertEqual(c.getSpaceDimension(),1)
1743         #
1744         c.setCoords(arr1)
1745         self.assertEqual(c.getMeshDimension(),0)
1746         self.assertEqual(c.getSpaceDimension(),1)
1747         pass
1748
1749     def testSwig2BuildSpreadZonesWithPolyOnQPolyg1(self):
1750         nx=6
1751         ny=6
1752         m=MEDCouplingCMesh()
1753         arr1=DataArrayDouble(nx) ; arr1.iota()
1754         arr2=DataArrayDouble(ny) ; arr2.iota()
1755         m.setCoords(arr1,arr2)
1756         m=m.buildUnstructured()
1757         da=DataArrayInt.Range(nx-1,(nx-1)*(ny-1),nx)
1758         m2=m[da] ; m2.simplexize(0)
1759         dan=da.buildComplement(m.getNumberOfCells())
1760         m1=m[dan]
1761         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1762         #
1763         m.convertLinearCellsToQuadratic()
1764         m1=m[::2] ; m2=m[1::2] ; m2.convertAllToPoly()
1765         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1766         p=m.buildSpreadZonesWithPoly()
1767         self.assertTrue(p.getNodalConnectivity().isEqual(DataArrayInt([32,1,0,6,12,18,24,30,31,32,33,34,35,29,23,17,11,5,4,3,2,36,37,94,62,72,83,84,86,89,99,92,93,82,71,60,51,49,46,43,40])))
1768         self.assertTrue(p.getNodalConnectivityIndex().isEqual(DataArrayInt([0,41])))
1769         self.assertTrue(p.getCoords().isEqual(DataArrayDouble([0.,0.,1.,0.,2.,0.,3.,0.,4.,0.,5.,0.,0.,1.,1.,1.,2.,1.,3.,1.,4.,1.,5.,1.,0.,2.,1.,2.,2.,2.,3.,2.,4.,2.,5.,2.,0.,3.,1.,3.,2.,3.,3.,3.,4.,3.,5.,3.,0.,4.,1.,4.,2.,4.,3.,4.,4.,4.,5.,4.,0.,5.,1.,5.,2.,5.,3.,5.,4.,5.,5.,5.,0.5,0.,0.,0.5,0.5,1.,1.,0.5,1.5,0.,1.5,1.,2.,0.5,2.5,0.,2.5,1.,3.,0.5,3.5,0.,3.5,1.,4.,0.5,4.5,0.,4.5,1.,5.,0.5,1.,1.5,1.5,2.,2.,1.5,2.5,2.,3.,1.5,3.5,2.,4.,1.5,4.5,2.,5.,1.5,0.5,2.,0.,2.5,0.5,3.,1.,2.5,2.,2.5,2.5,3.,3.,2.5,3.5,3.,4.,2.5,4.5,3.,5.,2.5,0.,3.5,0.5,4.,1.,3.5,1.5,3.,1.5,4.,2.,3.5,3.,3.5,3.5,4.,4.,3.5,4.5,4.,5.,3.5,0.,4.5,0.5,5.,1.,4.5,1.5,5.,2.,4.5,2.5,4.,2.5,5.,3.,4.5,4.,4.5,4.5,5.,5.,4.5,0.,1.5,0.5,1.5,1.5,2.5,2.5,3.5,3.5,4.5,3.5,5.0],100,2),1e-13))
1770         pass
1771
1772     def testSwigExtendedSlice1(self):
1773         d=DataArrayInt([5,6,7])
1774         self.assertTrue(d[2:].isEqual(DataArrayInt([7])))
1775         self.assertTrue(d[3:].isEqual(DataArrayInt([])))
1776         try:
1777             d[4:]
1778         except InterpKernelException as e:
1779             self.assertTrue(True)
1780         else:
1781             self.assertTrue(False)
1782             pass
1783         d=DataArrayInt([5,6,7,8])
1784         self.assertEqual(d[-1],8)
1785         self.assertEqual(d[-4],5)
1786         try:
1787             d[-5]
1788         except InterpKernelException as e:
1789             self.assertTrue(True)
1790         else:
1791             self.assertTrue(False)
1792             pass
1793         self.assertTrue(d[2::-1].isEqual(DataArrayInt([7,6,5])))
1794         self.assertTrue(d[0::-1].isEqual(DataArrayInt([5])))
1795         self.assertTrue(d[-1::-1].isEqual(DataArrayInt([8,7,6,5])))
1796         self.assertTrue(d[-3::-1].isEqual(DataArrayInt([6,5])))
1797         self.assertTrue(d[-5::-1].isEqual(DataArrayInt([])))
1798         try:
1799             d[-6::-1]
1800         except InterpKernelException as e:
1801             self.assertTrue(True)
1802         else:
1803             self.assertTrue(False)
1804             pass
1805         d=DataArrayInt([])
1806         self.assertTrue(d[0:].isEqual(DataArrayInt([])))
1807         #
1808         d=DataArrayDouble([5,6,7])
1809         self.assertTrue(d[2:].isEqual(DataArrayDouble([7]),1e-12))
1810         self.assertTrue(d[3:].isEqual(DataArrayDouble([]),1e-12))
1811         try:
1812             d[4:]
1813         except InterpKernelException as e:
1814             self.assertTrue(True)
1815         else:
1816             self.assertTrue(False)
1817             pass
1818         d=DataArrayDouble([5,6,7,8])
1819         self.assertAlmostEqual(d[-1],8.,12)
1820         self.assertAlmostEqual(d[-4],5.,12)
1821         try:
1822             d[-5]
1823         except InterpKernelException as e:
1824             self.assertTrue(True)
1825         else:
1826             self.assertTrue(False)
1827             pass
1828         self.assertTrue(d[2::-1].isEqual(DataArrayDouble([7,6,5]),1e-12))
1829         self.assertTrue(d[0::-1].isEqual(DataArrayDouble([5]),1e-12))
1830         self.assertTrue(d[-1::-1].isEqual(DataArrayDouble([8,7,6,5]),1e-12))
1831         self.assertTrue(d[-3::-1].isEqual(DataArrayDouble([6,5]),1e-12))
1832         self.assertTrue(d[-5::-1].isEqual(DataArrayDouble([]),1e-12))
1833         try:
1834             d[-6::-1]
1835         except InterpKernelException as e:
1836             self.assertTrue(True)
1837         else:
1838             self.assertTrue(False)
1839             pass
1840         d=DataArrayDouble([])
1841         self.assertTrue(d[0:].isEqual(DataArrayDouble([]),1e-12))
1842         pass
1843
1844     def testSwig2Hexa27GP1(self):
1845         """ This test focused on shape functions of hexa27.
1846         """
1847         coo=DataArrayDouble([[0.,2.,2.],[0.,0.,2.],[2.,0.,2.],[2.,2.,2.],[0.,2.,0.],[0.,0.,0.],[2.,0.,0.],[2.,2.,0.], [0.,1.,2.],[1.,0.,2.],[2.,1.,2.],[1.,2.,2.], [0.,1.,0.],[1.,0.,0.],[2.,1.,0.],[1.,2.,0.], [0.,2.,1.],[0.,0.,1.],[2.,0.,1.],[2.,2.,1.], [1.,1.,2.], [0.,1.,1.],[1.,0.,1.],[2.,1.,1.],[1.,2.,1.], [1.,1.,0.], [1.,1.,1.]])
1848         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1849         m.allocateCells()
1850         # the cell description is exactly those described in the description of HEXA27 in MED file 3.0.7 documentation
1851         m.insertNextCell(NORM_HEXA27,[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])
1852         refCoo=[-1.,-1.,-1.,-1.,1.,-1.,1.,1.,-1.,1.,-1.,-1.,-1.,-1.,1.,-1.,1.,1.,1.,1.,1.,1.,-1.,1.,-1.,0.,-1.,0.,1.,-1.,1.,0.,-1.,0.,-1.,-1.,-1.,0.,1.,0.,1.,1.,1.,0.,1.,0.,-1.,1.,-1.,-1.,0.,-1.,1.,0.,1.,1.,0.,1.,-1.,0.,0.,0.,-1.,-1.,0.,0.,0.,1.,0.,1.,0.,0.,0.,-1.,0.,0.,0.,1.,0.,0.,0.]
1853         weights=[0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.43895747599451346,0.7023319615912209,0.43895747599451346,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571]
1854         gCoords=[-0.774596669241483,-0.774596669241483,-0.774596669241483,-0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.0,0.0,-0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,-0.774596669241483,0.774596669241483,0.0,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,0.0,0.0,-0.774596669241483,0.774596669241483,0.0,0.0,-0.774596669241483,0.0,0.0,0.0,0.0,0.0,0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.0,0.774596669241483,0.0,0.0,0.774596669241483,0.774596669241483,0.774596669241483,-0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,-0.774596669241483,0.774596669241483,0.0,0.0,0.774596669241483,0.0,0.774596669241483,0.774596669241483,0.774596669241483,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,0.774596669241483,0.774596669241483,0.774596669241483]
1855         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1856         fGauss.setMesh(m)
1857         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1858         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1859         fGauss.setArray(arr)
1860         arrOfDisc=fGauss.getLocalizationOfDiscr()
1861         # the test is here
1862         self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([0.2254033307585172,1.7745966692414836,1.7745966692414834,0.22540333075851715,1.7745966692414834,1.,0.22540333075851715,1.7745966692414836,0.22540333075851715,0.22540333075851715,1.,1.7745966692414834,0.2254033307585171,1.,1.,0.22540333075851715,1.0000000000000002,0.2254033307585171,0.22540333075851715,0.22540333075851715,1.7745966692414838,0.22540333075851715,0.22540333075851715,1.,0.22540333075851715,0.22540333075851715,0.22540333075851715,1.,1.7745966692414832,1.7745966692414834,1.,1.774596669241483,1.,1.0000000000000002,1.7745966692414832,0.22540333075851712,1.,1.,1.774596669241483,1.,1.,1.,1.,1.,0.2254033307585171,1.,0.22540333075851715,1.7745966692414834,1.,0.2254033307585171,1.,1.0000000000000002,0.22540333075851715,0.2254033307585171,1.7745966692414834,1.7745966692414834,1.7745966692414836,1.7745966692414832,1.7745966692414834,1.0000000000000002,1.7745966692414834,1.7745966692414836,0.22540333075851712,1.7745966692414832,1.,1.7745966692414834,1.774596669241483,1.,1.,1.7745966692414832,1.0000000000000002,0.22540333075851712,1.7745966692414836,0.22540333075851715,1.7745966692414836,1.7745966692414832,0.22540333075851715,1.,1.7745966692414836,0.22540333075851715,0.22540333075851715],27,3),1e-12))
1863         #
1864         weights=27*[1]
1865         gCoords=refCoo
1866         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1867         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1868         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1869         pass
1870
1871     def testSwig2Pyra13GP1(self):
1872         coo=DataArrayDouble([[0.,2.,0.],[2.,2.,0.],[2.,0.,0.],[0.,0.,0.],[1.,1.,2.],[1.,2.,0.],[2.,1.,0.],[1.,0.,0.],[0.,1.,0.],[0.5,1.5,1.],[1.5,1.5,1.],[1.5,0.5,1.],[0.5,0.5,1.]])
1873         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1874         m.allocateCells()
1875         # the cell description is exactly those described in the description of PYRA13 in MED file 3.0.7 documentation
1876         m.insertNextCell(NORM_PYRA13,[0,1,2,3,4,5,6,7,8,9,10,11,12])
1877         refCoords=[1.,0.,0.,0.,-1.,0.,-1.,0.,0.,0.,1.,0.,0.,0.,1.,0.5,-0.5,0.,-0.5,-0.5,0.,-0.5,0.5,0.,0.5,0.5,0.,0.5,0.,0.5,0.,-0.5,0.5,-0.5,0.,0.5,0.,0.5,0.5]
1878         gaussCoords=[0.,0.,0.5,0.21210450275,0.21210450275,0.5,-0.21210450275,0.21210450275,0.5,-0.21210450275,-0.21210450275,0.5,0.21210450275,-0.21210450275,0.5,0.,0.,0.07579099449999999,0.,0.,0.9242090055000001,0.5394929090572634,0.,0.17359176399999998,0.,0.5394929090572634,0.17359176399999998,-0.5394929090572634,0.,0.17359176399999998,0.,-0.5394929090572634,0.17359176399999998,0.1133235629427366,0.,0.826408236,0.,0.1133235629427366,0.826408236,-0.1133235629427366,0.,0.826408236,0.,-0.1133235629427366,0.826408236,0.5826406005183961,0.5826406005183961,-0.053206449499999975,-0.5826406005183961,0.5826406005183961,-0.053206449499999975,-0.5826406005183961,-0.5826406005183961,-0.053206449499999975,0.5826406005183961,-0.5826406005183961,-0.053206449499999975,0.5532064495,0.,0.5,0.,0.5532064495,0.5,-0.5532064495,0.,0.5,0.,-0.5532064495,0.5,-0.029434151018396033,-0.029434151018396033,1.0532064495,0.029434151018396033,-0.029434151018396033,1.0532064495,0.029434151018396033,0.029434151018396033,1.0532064495,-0.029434151018396033,0.029434151018396033,1.0532064495]
1879         weights=[0.0492545926875,0.031210562625,0.031210562625,0.031210562625,0.031210562625,0.10663554205740113,0.0007171281994273535,0.0816994048010844,0.0816994048010844,0.0816994048010844,0.0816994048010844,0.0036048554264914074,0.0036048554264914074,0.0036048554264914074,0.0036048554264914074,0.008958181586640837,0.008958181586640837,0.008958181586640837,0.008958181586640837,0.002018983875,0.002018983875,0.002018983875,0.002018983875,2.286237794882217e-05,2.286237794882217e-05,2.286237794882217e-05,2.286237794882217e-05]
1880         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1881         fGauss.setMesh(m)
1882         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
1883         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1884         fGauss.setArray(arr)
1885         arrOfDisc=fGauss.getLocalizationOfDiscr()
1886         # the test is here
1887         self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([1.,1.,1.,0.5757909945,1.,1.,1.,0.5757909945,1.,1.4242090055,1.,1.,1.,1.4242090055,1.,1.,1.,0.151581989,1.,1.,1.848418011,0.4605070909427367,1.5394929090572635,0.347183528,0.4605070909427367,0.4605070909427367,0.347183528,1.5394929090572638,0.4605070909427366,0.347183528,1.5394929090572635,1.5394929090572638,0.347183528,0.8866764370572636,1.1133235629427367,1.652816472,0.8866764370572636,0.8866764370572636,1.652816472,1.1133235629427367,0.8866764370572636,1.652816472,1.1133235629427365,1.1133235629427367,1.652816472,-0.16528120103679209,1.,-0.106412899,1.,-0.1652812010367921,-0.106412899,2.1652812010367914,1.,-0.106412899,1.,2.165281201036791,-0.106412899,0.4467935505,1.5532064495,1.,0.4467935505,0.4467935505,1.,1.5532064495,0.4467935505,1.,1.5532064495,1.5532064495,1.,1.0588683020367922,1.,2.106412899,1.,1.0588683020367922,2.106412899,0.9411316979632077,1.,2.106412899,1.,0.9411316979632078,2.106412899],27,3),1e-12))
1888         #
1889         weights=13*[1]
1890         gaussCoords=refCoords[:] ; gaussCoords[14]=0.9999999999999 # change z of point #4 0.999... instead of 1. because with shape function it leads to division by 0. !
1891         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
1892         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1893         self.assertTrue(arrOfDisc2.isEqual(coo,1e-10)) # be less exigent 1e-10 instead of 1e-12 due to shape function sensitivity around 0.,0.,1. !
1894         pass
1895
1896     def testSwig2Tri7GP1(self):
1897         coo=DataArrayDouble([[0,0],[0,2],[2,0],[0,1],[1,1],[1,0],[0.6666666666666667,0.6666666666666667]])
1898         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
1899         m.allocateCells()
1900         # the cell description is exactly those described in the description of TRI7 in MED file 3.0.7 documentation
1901         m.insertNextCell(NORM_TRI7, list(range(7)))
1902         refCoords=[0.,0.,1.,0.,0.,1.,0.5,0.,0.5,0.5,0.,0.5,0.3333333333333333,0.3333333333333333]
1903         gaussCoords=[0.3333333333333333,0.3333333333333333,0.470142064105115,0.470142064105115,0.05971587178977,0.470142064105115,0.470142064105115,0.05971587178977,0.101286507323456,0.101286507323456,0.797426985353088,0.101286507323456,0.101286507323456,0.797426985353088]
1904         weights=[0.062969590272413,0.062969590272413,0.062969590272413,0.066197076394253,0.066197076394253,0.066197076394253,0.1125]
1905         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1906         fGauss.setMesh(m)
1907         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
1908         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1909         fGauss.setArray(arr)
1910         arrOfDisc=fGauss.getLocalizationOfDiscr()
1911         self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([0.666666666666667,0.666666666666667,0.9402841282102293,0.9402841282102293,0.9402841282102299,0.11943174357954002,0.11943174357953992,0.9402841282102299,0.20257301464691194,0.20257301464691196,0.20257301464691205,1.5948539707061757,1.5948539707061757,0.20257301464691202],7,2),1e-12))
1912         #
1913         weights=7*[1]
1914         gaussCoords=refCoords
1915         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
1916         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1917         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1918         pass
1919
1920     def testSwig2StructuredDesc1(self):
1921         c=MEDCouplingCMesh()
1922         arr0=DataArrayDouble(3) ; arr0.iota()
1923         arr1=DataArrayDouble(4) ; arr1.iota()
1924         arr2=DataArrayDouble(5) ; arr2.iota()
1925         c.setCoords(arr0,arr1,arr2)
1926         #
1927         self.assertEqual(98,c.getNumberOfCellsOfSubLevelMesh())
1928         m=c.build1SGTSubLevelMesh()
1929         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([0,12,15,3,12,24,27,15,24,36,39,27,36,48,51,39,3,15,18,6,15,27,30,18,27,39,42,30,39,51,54,42,6,18,21,9,18,30,33,21,30,42,45,33,42,54,57,45,1,13,16,4,13,25,28,16,25,37,40,28,37,49,52,40,4,16,19,7,16,28,31,19,28,40,43,31,40,52,55,43,7,19,22,10,19,31,34,22,31,43,46,34,43,55,58,46,2,14,17,5,14,26,29,17,26,38,41,29,38,50,53,41,5,17,20,8,17,29,32,20,29,41,44,32,41,53,56,44,8,20,23,11,20,32,35,23,32,44,47,35,44,56,59,47,0,12,13,1,12,24,25,13,24,36,37,25,36,48,49,37,1,13,14,2,13,25,26,14,25,37,38,26,37,49,50,38,3,15,16,4,15,27,28,16,27,39,40,28,39,51,52,40,4,16,17,5,16,28,29,17,28,40,41,29,40,52,53,41,6,18,19,7,18,30,31,19,30,42,43,31,42,54,55,43,7,19,20,8,19,31,32,20,31,43,44,32,43,55,56,44,9,21,22,10,21,33,34,22,33,45,46,34,45,57,58,46,10,22,23,11,22,34,35,23,34,46,47,35,46,58,59,47,0,1,4,3,3,4,7,6,6,7,10,9,1,2,5,4,4,5,8,7,7,8,11,10,12,13,16,15,15,16,19,18,18,19,22,21,13,14,17,16,16,17,20,19,19,20,23,22,24,25,28,27,27,28,31,30,30,31,34,33,25,26,29,28,28,29,32,31,31,32,35,34,36,37,40,39,39,40,43,42,42,43,46,45,37,38,41,40,40,41,44,43,43,44,47,46,48,49,52,51,51,52,55,54,54,55,58,57,49,50,53,52,52,53,56,55,55,56,59,58])))
1930         self.assertEqual(NORM_QUAD4,m.getCellModelEnum())
1931         #
1932         self.assertTrue(MEDCouplingStructuredMesh.Build1GTNodalConnectivityOfSubLevelMesh([3,7]).isEqual(DataArrayInt([0,3,3,6,6,9,9,12,12,15,15,18,1,4,4,7,7,10,10,13,13,16,16,19,2,5,5,8,8,11,11,14,14,17,17,20,0,1,1,2,3,4,4,5,6,7,7,8,9,10,10,11,12,13,13,14,15,16,16,17,18,19,19,20])))
1933         pass
1934
1935     def testSwig2Colinearize2D1(self):
1936         coo=DataArrayDouble([-5.,0.,-1.,0.,4.,3.,7.,0.,1.,6.,1.,0.,-3.,0.,6.,1.,5.,0.,3.,0.],10,2)
1937         #
1938         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1939         m.insertNextCell(NORM_POLYGON,[5,9,8,3,7,2,4,0,6,1])
1940         refPtr=m.getCoords().getHiddenCppPointer()
1941         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1942         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1943         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1944         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1945         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
1946         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1947         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1948         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1949         #
1950         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1951         m.insertNextCell(NORM_POLYGON,[8,3,7,2,4,0,6,1,5,9])
1952         refPtr=m.getCoords().getHiddenCppPointer()
1953         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1954         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1955         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1956         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1957         #
1958         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1959         m.insertNextCell(NORM_POLYGON,[3,7,2,4,0,6,1,5,9,8])
1960         refPtr=m.getCoords().getHiddenCppPointer()
1961         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1962         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1963         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,3,4,0])))
1964         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1965         #
1966         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1967         m.insertNextCell(NORM_POLYGON,[4,0,6,1,5,9,8,3,7,2,])
1968         refPtr=m.getCoords().getHiddenCppPointer()
1969         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1970         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1971         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,4,0,3])))
1972         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1973         ## false quadratic
1974         coo2=DataArrayDouble([(-5,0),(-1,0),(4,3),(7,0),(1,6),(1,0),(-3,0),(6,1),(5,0),(3,0),(2,0),(4,0),(6,0),(6.5,0.5),(5,2),(2.5,4.5),(-2,3),(-4,0),(-2,0),(0,0)])
1975         coo2.setInfoOnComponents(["aa","bbbb"])
1976         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
1977         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
1978         refPtr=m.getCoords().getHiddenCppPointer()
1979         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1980         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
1981         self.assertEqual(["aa","bbbb"],m.getCoords().getInfoOnComponents())
1982         refPtr=m.getCoords().getHiddenCppPointer()
1983         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
1984         self.assertTrue(m.getCoords()[20:].isEqualWithoutConsideringStr(DataArrayDouble([(1.,0.),(4.,3.)]),1e-12))
1985         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
1986         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
1987         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
1988         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1989         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
1990         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
1991         # mix of quadratic and linear inside a QPOLYG cell
1992         coo2=DataArrayDouble([(-5,0),(-1,0),(7.,6.),(7,0),(1,6),(1,0),(-3,0),(8.2426406871192839,3),(5,0),(3,0),  (2,0),(4,0),(6,0),(7.9196888946291288,1.3764116995614091),(7.9196888946291288,4.6235883004385911),(4,7.2426406871192848),(-2,3),(-4,0),(-2,0),(0,0)])
1993         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
1994         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
1995         refPtr=m.getCoords().getHiddenCppPointer()
1996         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1997         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
1998         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
1999         self.assertTrue(m.getCoords()[20:].isEqual(DataArrayDouble([(1.,0.),(7.,6.)]),1e-12))
2000         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
2001         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
2002         pass
2003
2004     def testSwig2BoundingBoxForBBTree1(self):
2005         """ This test appears simple but it checks that bounding box are correctly computed for quadratic polygons. It can help a lot to reduce the amount of intersections !
2006         """
2007         coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,0.45,0.,0.3181980515339464,0.31819805153394637,0.,0.45,-0.31819805153394637,0.3181980515339464,-0.45,0.,-0.3181980515339465,-0.31819805153394637,0.,-0.45,0.3181980515339463,-0.3181980515339465,-0.5,0.0,0.0,0.5,0.5,0.0,0.0,-0.5,-0.4090990257669732,-0.4090990257669732,0.40909902576697316,-0.4090990257669732],18,2)
2008         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2009         m.allocateCells()
2010         m.insertNextCell(NORM_QPOLYG,[0,1,2,3,11,5,7,9,12,13,14,17,4,6,8,16])
2011         m.insertNextCell(NORM_QPOLYG,[3,0,9,11,15,16,10,17])
2012         self.assertTrue(m.getBoundingBoxForBBTree().isEqual(DataArrayDouble([-0.5,0.5,-0.5,0.5,-0.5,0.5,-0.5,-0.31819805153394637],2,4),1e-12))
2013         pass
2014
2015     def testSwig2CartBuildUnstructuredOnExoticCases1(self):
2016         """ Test focusing on traduction from cartesian to unstructured mesh when spaceDim greater than meshDim.
2017         """
2018         #
2019         m=MEDCouplingCMesh()
2020         arrX=DataArrayDouble(3) ; arrX.iota()
2021         arrY=DataArrayDouble(4) ; arrY.iota()
2022         arrZ=DataArrayDouble(1) ; arrZ.iota()
2023         m.setCoords(arrX,arrY,arrZ)
2024         self.assertEqual(2,m.getMeshDimension())
2025         self.assertEqual(3,m.getSpaceDimension())
2026         mu=m.buildUnstructured()
2027         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
2028         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2029         coo0=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(2,2,0),(0,3,0),(1,3,0),(2,3,0)])
2030         self.assertTrue(mu.getCoords().isEqual(coo0,1e-12))
2031         #
2032         m=MEDCouplingCMesh()
2033         arrX=DataArrayDouble(3) ; arrX.iota()
2034         arrY=DataArrayDouble(1) ; arrY.iota()
2035         arrZ=DataArrayDouble(4) ; arrZ.iota()
2036         m.setCoords(arrX,arrY,arrZ)
2037         self.assertEqual(2,m.getMeshDimension())
2038         self.assertEqual(3,m.getSpaceDimension())
2039         mu=m.buildUnstructured()
2040         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
2041         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2042         coo1=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,0,1),(1,0,1),(2,0,1),(0,0,2),(1,0,2),(2,0,2),(0,0,3),(1,0,3),(2,0,3)])
2043         self.assertTrue(mu.getCoords().isEqual(coo1,1e-12))
2044         #
2045         m=MEDCouplingCMesh()
2046         arrX=DataArrayDouble(1) ; arrX.iota() ; arrX+=9
2047         arrY=DataArrayDouble(3) ; arrY.iota()
2048         arrZ=DataArrayDouble(4) ; arrZ.iota()
2049         m.setCoords(arrX,arrY,arrZ)
2050         self.assertEqual(2,m.getMeshDimension())
2051         self.assertEqual(3,m.getSpaceDimension())
2052         mu=m.buildUnstructured()
2053         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
2054         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2055         coo2=DataArrayDouble([(9,0,0),(9,1,0),(9,2,0),(9,0,1),(9,1,1),(9,2,1),(9,0,2),(9,1,2),(9,2,2),(9,0,3),(9,1,3),(9,2,3)])
2056         self.assertTrue(mu.getCoords().isEqual(coo2,1e-12))
2057         #
2058         m=MEDCouplingCMesh()
2059         arrX=DataArrayDouble(3) ; arrX.iota()
2060         arrY=DataArrayDouble(1) ; arrY.iota(7)
2061         arrZ=DataArrayDouble(1) ; arrZ.iota(8)
2062         m.setCoords(arrX,arrY,arrZ)
2063         self.assertEqual(1,m.getMeshDimension())
2064         self.assertEqual(3,m.getSpaceDimension())
2065         mu=m.buildUnstructured()
2066         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2067         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2068         coo3=DataArrayDouble([(0,7,8),(1,7,8),(2,7,8)])
2069         self.assertTrue(mu.getCoords().isEqual(coo3,1e-12))
2070         #
2071         m=MEDCouplingCMesh()
2072         arrX=DataArrayDouble(1) ; arrX.iota(7)
2073         arrY=DataArrayDouble(1) ; arrY.iota(8)
2074         arrZ=DataArrayDouble(3) ; arrZ.iota()
2075         m.setCoords(arrX,arrY,arrZ)
2076         self.assertEqual(1,m.getMeshDimension())
2077         self.assertEqual(3,m.getSpaceDimension())
2078         mu=m.buildUnstructured()
2079         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2080         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2081         coo4=DataArrayDouble([(7,8,0),(7,8,1),(7,8,2)])
2082         self.assertTrue(mu.getCoords().isEqual(coo4,1e-12))
2083         #
2084         m=MEDCouplingCMesh()
2085         arrX=DataArrayDouble(3) ; arrX.iota()
2086         arrY=DataArrayDouble(1) ; arrY.iota(7)
2087         m.setCoords(arrX,arrY)
2088         self.assertEqual(1,m.getMeshDimension())
2089         self.assertEqual(2,m.getSpaceDimension())
2090         mu=m.buildUnstructured()
2091         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2092         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2093         coo5=DataArrayDouble([(0,7),(1,7),(2,7)])
2094         self.assertTrue(mu.getCoords().isEqual(coo5,1e-12))
2095         #
2096         m=MEDCouplingCMesh()
2097         arrX=DataArrayDouble(1) ; arrX.iota(7)
2098         arrY=DataArrayDouble(3) ; arrY.iota()
2099         m.setCoords(arrX,arrY)
2100         self.assertEqual(1,m.getMeshDimension())
2101         self.assertEqual(2,m.getSpaceDimension())
2102         mu=m.buildUnstructured()
2103         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2104         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2105         coo6=DataArrayDouble([(7,0),(7,1),(7,2)])
2106         self.assertTrue(mu.getCoords().isEqual(coo6,1e-12))
2107         pass
2108
2109     def testSwig2Colinearize2D2(self):
2110         """ simple non regression test but that has revealed a bug"""
2111         coo=DataArrayDouble([(0,0),(0,0.5),(0,1),(1,1),(1,0),(0.5,0)])
2112         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2113         m.allocateCells() ; m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
2114         m.checkConsistency()
2115         refPtr=m.getCoords().getHiddenCppPointer()
2116         #
2117         m.colinearize2D(1e-12)
2118         m.checkConsistency()
2119         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2120         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_POLYGON,0,2,3,4])))
2121         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5])))
2122         pass
2123
2124     def testSwig2Colinearize2D3(self):
2125         """ colinearize was too aggressive, potentially producing cells with one edge """
2126         # Flat polygon  with 3 edges - nothing should happen (min number of edges for a linear polyg)
2127         coo = DataArrayDouble([0.0,0.0,  2.0,0.0,   1.5,0.0,  1.0,0.0,  0.5,0.0], 5,2)
2128         m = MEDCouplingUMesh("m", 2)
2129         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2], [0,4]] ]
2130         m.setCoords(coo); m.setConnectivity(c, cI)
2131         m.colinearize2D(1e-10)
2132         m.checkConsistency()
2133         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2134         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2135
2136         # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg)
2137         m = MEDCouplingUMesh("m", 2)
2138         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,  2,3], [0,5]] ]
2139         m.setCoords(coo); m.setConnectivity(c, cI)
2140         m.colinearize2D(1e-10)
2141         m.checkConsistency()
2142         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2143         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2144
2145         # Flat polygon, 4 edges - one reduction should happen
2146         m = MEDCouplingUMesh("m", 2)
2147         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2,3], [0,5]] ]
2148         m.setCoords(coo); m.setConnectivity(c, cI)
2149         m.colinearize2D(1e-10)
2150         m.checkConsistency()
2151         self.assertEqual([NORM_POLYGON, 3,1,2], m.getNodalConnectivity().getValues())
2152         self.assertEqual([0,4], m.getNodalConnectivityIndex().getValues())
2153
2154         # Flat quad polygon, 3 edges - one reduction expected
2155         m = MEDCouplingUMesh("m", 2)
2156         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,3,  3,2,4], [0,7]] ]
2157         m.setCoords(coo); m.setConnectivity(c, cI)
2158         m.colinearize2D(1e-10)
2159         m.checkConsistency()
2160         self.assertEqual([NORM_QPOLYG, 3,1, 5,2], m.getNodalConnectivity().getValues())
2161         self.assertTrue( m.getCoords()[5].isEqual( DataArrayDouble([(1.5,0.0)]), 1.0e-12 ) )
2162         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2163
2164         # Now an actual (neutronic) case: circle made of 4 SEG3. Should be reduced to 2 SEG3
2165         m = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 1.0)
2166         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 7,5,3,1,  6,4,2,0], [0,9]] ]
2167         m.colinearize2D(1e-10)
2168         m.checkConsistency()
2169         self.assertEqual([NORM_QPOLYG, 3,5,  8,4], m.getNodalConnectivity().getValues())
2170         self.assertTrue( m.getCoords()[8].isEqual( DataArrayDouble([(1.0,0.0)]), 1.0e-12 ) )
2171         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2172
2173     def testSwig2Colinearize2D4(self):
2174         """ From ALAMOS. Colinearize around last seg in the connectivity was buggy. """
2175         mesh = MEDCouplingUMesh('C3', 2)
2176         coo = DataArrayDouble([(-31.838400909874,21.557335816426),(-34.588400909874,16.794196095611),(-33.298676775512,19.225000000000),(-33.547226066398,19.368500000000),(-32.750140188627,22.083728734445),(-35.500140188627,17.320589013630),
2177                                (-35.044270549250,17.057392554621),(-32.619779010901,22.008464673393),(-32.554667298175,21.970872408523),(-32.745177043525,22.080863261284),(-32.747658616076,22.082295997864),(-32.682478027213,22.044663967338)])
2178         mesh.setCoords(coo)
2179         c = DataArrayInt([32, 0, 1, 5, 4, 9, 7, 2, 6, 3, 10, 11, 8])
2180         cI = DataArrayInt([0, 13])
2181         mesh.setConnectivity(c, cI)
2182         mesh.colinearize2D(1.0e-8)
2183         coo = mesh.getCoords()
2184         self.assertEqual(coo.getNumberOfTuples(), 13)
2185         lstPt = coo[12]
2186         self.assertAlmostEqual(lstPt[0,0], -32.29427054925)
2187         self.assertAlmostEqual(lstPt[0,1], 21.8205322754351)
2188         pass
2189
2190     def testSwig2CheckAndPreparePermutation2(self):
2191         a=DataArrayInt([10003,9999999,5,67])
2192         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([2,3,0,1])))
2193         a=DataArrayInt([10003,-9999999,5,67])
2194         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([3,0,1,2])))
2195         a=DataArrayInt([])
2196         self.assertTrue(DataArrayInt.checkAndPreparePermutation(a).isEqual(DataArrayInt([])))
2197         pass
2198
2199     def testSwig2ComputeNeighborsOfNodes1(self):
2200         arrX=DataArrayDouble(3) ; arrX.iota()
2201         arrY=DataArrayDouble(4) ; arrY.iota()
2202         arrZ=DataArrayDouble(5) ; arrZ.iota()
2203         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
2204         # 3D
2205         a,b=m.computeNeighborsOfNodes()
2206         self.assertTrue(a.isEqual(DataArrayInt([1,3,12,0,4,13,2,1,5,14,0,4,15,6,3,1,16,5,7,4,2,17,8,3,7,18,9,6,4,19,8,10,7,5,20,11,6,10,21,9,7,22,11,10,8,23,13,15,0,24,12,16,1,14,25,13,17,2,26,12,16,3,18,27,15,13,4,17,19,28,16,14,5,20,29,15,19,6,21,30,18,16,7,20,22,31,19,17,8,23,32,18,22,9,33,21,19,10,23,34,22,20,11,35,25,27,12,36,24,28,13,26,37,25,29,14,38,24,28,15,30,39,27,25,16,29,31,40,28,26,17,32,41,27,31,18,33,42,30,28,19,32,34,43,31,29,20,35,44,30,34,21,45,33,31,22,35,46,34,32,23,47,37,39,24,48,36,40,25,38,49,37,41,26,50,36,40,27,42,51,39,37,28,41,43,52,40,38,29,44,53,39,43,30,45,54,42,40,31,44,46,55,43,41,32,47,56,42,46,33,57,45,43,34,47,58,46,44,35,59,49,51,36,48,52,37,50,49,53,38,48,52,39,54,51,49,40,53,55,52,50,41,56,51,55,42,57,54,52,43,56,58,55,53,44,59,54,58,45,57,55,46,59,58,56,47])))
2207         self.assertTrue(b.isEqual(DataArrayInt([0,3,7,10,14,19,23,27,32,36,39,43,46,50,55,59,64,70,75,80,86,91,95,100,104,108,113,117,122,128,133,138,144,149,153,158,162,166,171,175,180,186,191,196,202,207,211,216,220,223,227,230,234,239,243,247,252,256,259,263,266])))
2208         # 2D
2209         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m=m.buildUnstructured()
2210         a,b=m.computeNeighborsOfNodes()
2211         self.assertTrue(a.isEqual(DataArrayInt([1,3,0,4,2,1,5,0,4,6,3,1,5,7,4,2,8,3,7,9,6,4,8,10,7,5,11,6,10,9,7,11,10,8])))
2212         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2213         # 1D
2214         m=m.buildDescendingConnectivity()[0]
2215         a,b=m.computeNeighborsOfNodes()
2216         self.assertTrue(a.isEqual(DataArrayInt([1,3,0,4,2,1,5,0,4,6,3,1,5,7,4,2,8,3,7,9,6,4,8,10,7,5,11,6,10,9,7,11,10,8])))
2217         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2218         pass
2219
2220     def testSwigBugOnUnpackingTuplesInDataArray1(self):
2221         inp=DataArrayDouble([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2222         it=inp.__iter__()
2223         r = next(it)
2224         self.assertRaises(StopIteration,r.__getitem__,4)
2225         self.assertEqual(len(r),3)
2226         a,b,c=r
2227         r = next(it)
2228         self.assertEqual(len(r),3)
2229         d,e,f=r
2230         r = next(it)
2231         self.assertEqual(len(r),3)
2232         g,h,i=r
2233         r = next(it)
2234         self.assertEqual(len(r),3)
2235         j,k,l=r
2236         self.assertTrue(inp.isEqual(DataArrayDouble([a,b,c,d,e,f,g,h,i,j,k,l],4,3),1e-12))
2237         ########
2238         inp=DataArrayInt([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2239         it=inp.__iter__()
2240         r = next(it)
2241         self.assertRaises(StopIteration,r.__getitem__,4)
2242         self.assertEqual(len(r),3)
2243         a,b,c=r
2244         r = next(it)
2245         self.assertEqual(len(r),3)
2246         d,e,f=r
2247         r = next(it)
2248         self.assertEqual(len(r),3)
2249         g,h,i=r
2250         r = next(it)
2251         self.assertEqual(len(r),3)
2252         j,k,l=r
2253         self.assertTrue(inp.isEqual(DataArrayInt([a,b,c,d,e,f,g,h,i,j,k,l],4,3)))
2254         pass
2255
2256     def testSwig2IMesh1(self):
2257         """ 1st test of image grid mesh.
2258         """
2259         m=MEDCouplingIMesh()
2260         self.assertEqual(m.getSpaceDimension(),-1)
2261         self.assertEqual(1,len(m.__repr__().split("\n")))
2262         self.assertEqual(6,len(m.__str__().split("\n")))
2263         self.assertRaises(InterpKernelException,m.getNodeStruct)
2264         self.assertRaises(InterpKernelException,m.getOrigin)
2265         self.assertRaises(InterpKernelException,m.getDXYZ)
2266         m.setSpaceDimension(3)
2267         self.assertEqual(9,len(m.__str__().split("\n")))
2268         self.assertEqual(4,len(m.__repr__().split("\n")))
2269         self.assertEqual((0,0,0),m.getNodeStruct())
2270         self.assertEqual((0.,0.,0.),m.getOrigin())
2271         self.assertEqual((0.,0.,0.),m.getDXYZ())
2272         self.assertRaises(InterpKernelException,m.setNodeStruct,[3,4])
2273         m.setNodeStruct([3,4,2])
2274         self.assertEqual((3,4,2),m.getNodeStruct())
2275         m.setOrigin(DataArrayDouble([1.5,2.5,3.5]))
2276         self.assertEqual((1.5,2.5,3.5),m.getOrigin())
2277         m.setDXYZ((0.5,1.,0.25))
2278         self.assertEqual((0.5,1.,0.25),m.getDXYZ())
2279         for it in DataArrayDouble([(1.5,2.5,3.5)]):
2280             m2=MEDCouplingIMesh("",3,DataArrayInt([3,4,2]),it,DataArrayDouble((0.5,1.,0.25)))
2281             pass
2282         self.assertEqual(3,m.getSpaceDimension())
2283         self.assertEqual((3,4,2),m2.getNodeStruct())
2284         self.assertEqual((1.5,2.5,3.5),m2.getOrigin())
2285         self.assertEqual((0.5,1.,0.25),m2.getDXYZ())
2286         self.assertEqual(24,m2.getNumberOfNodes())
2287         self.assertEqual(6,m2.getNumberOfCells())
2288         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2289         m2.setAxisUnit("m")
2290         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2291         m.setAxisUnit("m")
2292         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2293         m.setName("mesh")
2294         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2295         m2.setName("mesh")
2296         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2297         m2.setTime(1.1,0,3)
2298         self.assertTrue(not m.isEqual(m2,1e-12))
2299         m.setTime(1.1,0,3)
2300         self.assertTrue(m.isEqual(m2,1e-12))
2301         m.setTimeUnit("ms")
2302         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2303         m2.setTimeUnit("ms")
2304         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2305         #
2306         m2.setNodeStruct([3,2,4])
2307         self.assertTrue(not m.isEqual(m2,1e-12))
2308         m.setNodeStruct([3,2,4])
2309         self.assertTrue(m.isEqual(m2,1e-12))
2310         m.setOrigin(DataArrayDouble([1.5,3.5,2.5]))
2311         self.assertTrue(not m.isEqual(m2,1e-12))
2312         m2.setOrigin([1.5,3.5,2.5])
2313         self.assertTrue(m.isEqual(m2,1e-12))
2314         m.setDXYZ((0.5,0.25,1.))
2315         self.assertTrue(not m.isEqual(m2,1e-12))
2316         m2.setDXYZ(DataArrayDouble((0.5,0.25,1.)))
2317         self.assertTrue(m.isEqual(m2,1e-12))
2318         m2bis=m2.deepCopy()
2319         self.assertTrue(m2bis.isEqual(m2,1e-12))
2320         #
2321         self.assertEqual(6,m2bis.getNumberOfCells())#3,2,4
2322         m2bis.refineWithFactor([3,3,3])
2323         self.assertEqual(162,m2bis.getNumberOfCells())
2324         self.assertEqual((7,4,10),m2bis.getNodeStruct())
2325         self.assertEqual((1.5,3.5,2.5),m2bis.getOrigin())
2326         self.assertTrue(DataArrayDouble([0.16666666666666666,0.08333333333333333,0.3333333333333333]).isEqual(DataArrayDouble(m2bis.getDXYZ()),1e-12))
2327         #
2328         self.assertEqual(3,m.getMeshDimension())
2329         self.assertAlmostEqual(0.125,m.getMeasureOfAnyCell(),16);
2330         mu=MEDCoupling1SGTUMesh(m.buildUnstructured())
2331         mu.checkConsistency()
2332         cooExp=DataArrayDouble([(1.5,3.5,2.5),(2,3.5,2.5),(2.5,3.5,2.5),(1.5,3.75,2.5),(2,3.75,2.5),(2.5,3.75,2.5),(1.5,3.5,3.5),(2,3.5,3.5),(2.5,3.5,3.5),(1.5,3.75,3.5),(2,3.75,3.5),(2.5,3.75,3.5),(1.5,3.5,4.5),(2,3.5,4.5),(2.5,3.5,4.5),(1.5,3.75,4.5),(2,3.75,4.5),(2.5,3.75,4.5),(1.5,3.5,5.5),(2,3.5,5.5),(2.5,3.5,5.5),(1.5,3.75,5.5),(2,3.75,5.5),(2.5,3.75,5.5)]) ; cooExp.setInfoOnComponents(["X [m]","Y [m]","Z [m]"])
2333         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2334         self.assertEqual(NORM_HEXA8,mu.getCellModelEnum())
2335         self.assertTrue(mu.getCoords().isEqual(cooExp,1e-12))
2336         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,3,4,7,6,9,10,2,1,4,5,8,7,10,11,7,6,9,10,13,12,15,16,8,7,10,11,14,13,16,17,13,12,15,16,19,18,21,22,14,13,16,17,20,19,22,23])))
2337         bary=m.computeCellCenterOfMass()
2338         baryExp=DataArrayDouble([(1.75,3.625,3),(2.25,3.625,3),(1.75,3.625,4),(2.25,3.625,4),(1.75,3.625,5),(2.25,3.625,5)]) ; baryExp.setInfoOnComponents(["X [m]","Y [m]","Z [m]"])
2339         self.assertTrue(bary.isEqual(baryExp,1e-12))
2340         #
2341         c=m.convertToCartesian()
2342         c.checkConsistencyLight()
2343         self.assertEqual([1.1,0,3],c.getTime())
2344         self.assertEqual("ms",c.getTimeUnit())
2345         self.assertEqual(3,c.getMeshDimension())
2346         self.assertEqual(3,c.getSpaceDimension())
2347         arrX=DataArrayDouble([1.5,2.,2.5]) ; arrX.setInfoOnComponents(["X [m]"])
2348         self.assertTrue(c.getCoordsAt(0).isEqual(arrX,1e-12))
2349         arrY=DataArrayDouble([3.5,3.75]) ; arrY.setInfoOnComponents(["Y [m]"])
2350         self.assertTrue(c.getCoordsAt(1).isEqual(arrY,1e-12))
2351         arrZ=DataArrayDouble([2.5,3.5,4.5,5.5]) ; arrZ.setInfoOnComponents(["Z [m]"])
2352         self.assertTrue(c.getCoordsAt(2).isEqual(arrZ,1e-12))
2353         self.assertTrue(c.buildUnstructured().isEqual(m.buildUnstructured(),1e-12))
2354         #
2355         a,b=m.getCellsContainingPoints(baryExp,1e-12)
2356         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5])))
2357         self.assertTrue(b.isEqual(DataArrayInt([0,1,2,3,4,5,6])))
2358         for a,b in enumerate(baryExp):
2359             self.assertEqual(a,m.getCellContainingPoint(b,1e-12))
2360             pass
2361         #
2362         m.translate([1.,2.,4.])
2363         self.assertEqual((3,2,4),m.getNodeStruct())
2364         self.assertEqual((2.5,5.5,6.5),m.getOrigin())
2365         self.assertEqual((0.5,0.25,1.),m.getDXYZ())
2366         m.scale([0.,1.,3.],2.)
2367         self.assertAlmostEqual(1.,m.getMeasureOfAnyCell(),16);
2368         self.assertEqual((3,2,4),m.getNodeStruct())
2369         self.assertEqual((5.,10.,10.),m.getOrigin())
2370         self.assertEqual((1.,0.5,2.),m.getDXYZ())
2371         #
2372         f=m.getMeasureField(False)
2373         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(1.1,0,3) ; f2.setMesh(m) ; arr=DataArrayDouble(6) ; arr[:]=1. ; f2.setArray(arr) ; f2.setTimeUnit("ms")
2374         f2.setName("MeasureOfMesh_mesh")
2375         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2376         #
2377         m3=m.buildStructuredSubPart([(1,2),(0,1),(1,3)])
2378         self.assertEqual((2,2,3),m3.getNodeStruct())
2379         self.assertEqual((6.,10.,12.),m3.getOrigin())
2380         self.assertEqual((1.,0.5,2.),m3.getDXYZ())
2381         # now playing with 3D surf
2382         m4=MEDCouplingIMesh("",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m4.setAxisUnit("km")
2383         self.assertEqual([(1.5,2.5),(2.5,3.5),(3.5,4.25)],m4.getBoundingBox())
2384         self.assertEqual(3,m4.getSpaceDimension())
2385         self.assertEqual(2,m4.getMeshDimension())
2386         self.assertEqual(12,m4.getNumberOfNodes())
2387         self.assertEqual(6,m4.getNumberOfCells())
2388         mu=MEDCoupling1SGTUMesh(m4.buildUnstructured())
2389         mu.checkConsistency()
2390         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2391         self.assertEqual(NORM_QUAD4,mu.getCellModelEnum())
2392         coordsExp=DataArrayDouble([(1.5,2.5,3.5),(2,2.5,3.5),(2.5,2.5,3.5),(1.5,2.5,3.75),(2,2.5,3.75),(2.5,2.5,3.75),(1.5,2.5,4),(2,2.5,4),(2.5,2.5,4),(1.5,2.5,4.25),(2,2.5,4.25),(2.5,2.5,4.25)]) ; coordsExp.setInfoOnComponents(["X [km]","Y [km]","Z [km]"])
2393         self.assertTrue(mu.getCoords().isEqual(coordsExp,1e-12))
2394         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,3,4,2,1,4,5,4,3,6,7,5,4,7,8,7,6,9,10,8,7,10,11])))
2395         pass
2396
2397     def testSwig1GetValuesAsTuple1(self):
2398         d=DataArrayDouble()
2399         self.assertEqual(d.getValues(),[])
2400         self.assertEqual(d.getValuesAsTuple(),[])
2401         d=DataArrayDouble(24) ; d.iota() ; d.rearrange(3)
2402         self.assertEqual(d.getValues(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.])
2403         self.assertEqual(d.getValuesAsTuple(),[(0.,1.,2.0),(3.,4.,5.0),(6.,7.,8.0),(9.,10.,11.0),(12.,13.,14.0),(15.,16.,17.0),(18.,19.,20.0),(21.,22.,23.)])
2404         d=DataArrayInt()
2405         self.assertEqual(d.getValues(),[])
2406         self.assertEqual(d.getValuesAsTuple(),[])
2407         d=DataArrayInt(24) ; d.iota() ; d.rearrange(3)
2408         self.assertEqual(d.getValues(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])
2409         self.assertEqual(d.getValuesAsTuple(),[(0,1,2),(3,4,5),(6,7,8),(9,10,11),(12,13,14),(15,16,17),(18,19,20),(21,22,23)])
2410         pass
2411
2412     def testSwig2AMR1(self):
2413         self.assertEqual((1,3,12),MEDCouplingStructuredMesh.GetSplitVectFromStruct([3,4,5]))
2414         self.assertEqual((3,2),MEDCouplingStructuredMesh.GetDimensionsFromCompactFrmt([(1,4),(2,4)]))
2415         #
2416         amr=MEDCouplingCartesianAMRMesh("",2,[3,3],[0,0],[1,1])
2417         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2418         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithOverlap())
2419         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithoutOverlap())
2420         self.assertEqual(0,amr.getNumberOfPatches())
2421         self.assertEqual(1,amr.getMaxNumberOfLevelsRelativeToThis())
2422         self.assertEqual(2,amr.getSpaceDimension())
2423         amr.addPatch([(1,2),(0,1)],[4,4])
2424         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2425         self.assertEqual(20,amr.getNumberOfCellsRecursiveWithOverlap())
2426         self.assertEqual(19,amr.getNumberOfCellsRecursiveWithoutOverlap())
2427         self.assertEqual(1,amr.getNumberOfPatches())
2428         self.assertEqual(2,amr.getMaxNumberOfLevelsRelativeToThis())
2429         self.assertEqual(2,amr.getSpaceDimension())
2430         amr[0].addPatch([(2,3),(1,3)],[3,2])
2431         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2432         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2433         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2434         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2435         self.assertEqual(1,amr.getNumberOfPatches())
2436         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2437         self.assertEqual(2,amr.getSpaceDimension())
2438         amr[0].addPatch([(0,2),(3,4)],[3,2])
2439         self.assertEqual(16,amr[0].getMesh().getNumberOfCellsAtCurrentLevel())
2440         self.assertEqual(44,amr.getNumberOfCellsRecursiveWithOverlap())
2441         self.assertEqual(39,amr.getNumberOfCellsRecursiveWithoutOverlap())
2442         self.assertEqual(2,amr[0].getMesh().getNumberOfPatches())
2443         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2444         self.assertEqual(2,amr.getSpaceDimension())
2445         del amr[0][1]
2446         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2447         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2448         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2449         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2450         self.assertEqual(1,amr.getNumberOfPatches())
2451         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2452         self.assertEqual(2,amr.getSpaceDimension())
2453         pass
2454
2455     def testSwig2NonRegressionTestPAL1164(self):
2456         """ Test PAL1164 Protection of applyLin against error in compoId ( #CEA22584 ) """
2457         xarr=DataArrayDouble(3,1)
2458         xarr.iota(0.)
2459         cmesh=MEDCouplingCMesh()
2460         cmesh.setCoords(xarr,xarr,xarr)
2461         mesh=cmesh.buildUnstructured()
2462         f=mesh.fillFromAnalytic(ON_CELLS,1,"(x-5.)*(x-5.)+(y-5.)*(y-5.)+(z-5.)*(z-5.)")
2463         f.setName("MyField")
2464         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2465         self.assertRaises(InterpKernelException,f.applyLin,2.,0.,1)# compoId 1 whereas f has only one component !
2466         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2467         f.applyLin(2.,0.,0)# here it is OK !
2468         self.assertTrue(f.getArray().isEqual(DataArrayDouble([121.5,105.5,105.5,89.5,105.5,89.5,89.5,73.5]),1e-12))
2469         f.applyLin(2.,0.)
2470         self.assertTrue(f.getArray().isEqual(DataArrayDouble([243.,211.,211.,179.,211.,179.,179.,147.]),1e-12))
2471         pass
2472
2473     def testSwig2StructurizeMe1(self):
2474         arrx=DataArrayDouble(3) ; arrx.iota() ; arrx*=2.
2475         arry=DataArrayDouble(4) ; arry.iota() ; arry+=3.
2476         arrz=DataArrayDouble(5) ; arrz.iota() ; arrz*=0.5 ; arrz+=2.
2477         c=MEDCouplingCMesh() ; c.setCoords(arrx,arry,arrz)
2478         c.setName("mesh") ; c.setDescription("mesh descr") ; c.setTimeUnit("us") ; c.setTime(1.2,3,4)
2479         u=c.buildUnstructured()
2480         cp=DataArrayInt([3,5,6,1,0,9,8,7,12,11,16,10,17,23,22,21,19,20,18,14,13,2,4,15])
2481         np=DataArrayInt([3,33,5,35,6,36,1,31,0,30,9,39,8,38,7,37,12,42,11,41,16,46,10,40,17,47,23,53,22,52,21,51,19,49,20,50,18,48,14,44,13,43,2,32,4,34,15,45,29,59,28,58,27,57,26,56,25,55,24,54])
2482         u.renumberCells(cp)
2483         u.renumberNodes(np,len(np))
2484         u=MEDCoupling1SGTUMesh(u)
2485         #
2486         e,d,f=u.structurizeMe()
2487         self.assertTrue(c.isEqual(e,1e-12))
2488         self.assertTrue(d.isEqual(cp))
2489         self.assertTrue(f.isEqual(np))
2490         pass
2491
2492     def testSwig2DenseMatrix1(self):
2493         m0=DenseMatrix(DataArrayDouble([2,3,4,5,1,6]),2,3)
2494         self.assertEqual(m0.getNumberOfRows(),2)
2495         self.assertEqual(m0.getNumberOfCols(),3)
2496         self.assertEqual(m0.getNbOfElems(),6)
2497         ref=m0.getData().getHiddenCppPointer()
2498         m00=m0.deepCopy()
2499         self.assertTrue(m0.isEqual(m00,1e-12))
2500         m00.getData().setIJ(0,0,2.1)
2501         self.assertTrue(not m0.isEqual(m00,1e-12))
2502         m00.getData().setIJ(0,0,2.)
2503         self.assertTrue(m0.isEqual(m00,1e-12))
2504         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2505         #
2506         m000=m0*DataArrayDouble([5,9,3])
2507         self.assertTrue(m000.getData().isEqual(DataArrayDouble([49.,52.]),1e-12))
2508         #
2509         m0.reShape(3,2)
2510         self.assertTrue(not m0.isEqual(m00,1e-12))
2511         self.assertEqual(m0.getNumberOfRows(),3)
2512         self.assertEqual(m0.getNumberOfCols(),2)
2513         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2514         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2515         m0.reShape(2,3)
2516         self.assertTrue(m0.isEqual(m00,1e-12))
2517         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2518         self.assertEqual(m0.getNumberOfRows(),2)
2519         self.assertEqual(m0.getNumberOfCols(),3)
2520         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2521         #m0np=m0.getData().toNumPyArray() ; m0np=matrix(m0np.reshape(m0.getNumberOfRows(),m0.getNumberOfCols()))
2522         m1=m0.deepCopy()
2523         self.assertEqual(m1.getNumberOfRows(),2)
2524         self.assertEqual(m1.getNumberOfCols(),3)
2525         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2526         m11=m0.deepCopy() ; m11+=m1
2527         self.assertEqual(m11.getNumberOfRows(),2)
2528         self.assertEqual(m11.getNumberOfCols(),3)
2529         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2530         m11=m11+m1
2531         self.assertEqual(m11.getNumberOfRows(),2)
2532         self.assertEqual(m11.getNumberOfCols(),3)
2533         self.assertTrue(m11.getData().isEqual(DataArrayDouble([6,9,12,15,3,18]),1e-12))
2534         m11=m11-m1
2535         self.assertEqual(m11.getNumberOfRows(),2)
2536         self.assertEqual(m11.getNumberOfCols(),3)
2537         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2538         m11-=m1
2539         self.assertEqual(m1.getNumberOfRows(),2)
2540         self.assertEqual(m1.getNumberOfCols(),3)
2541         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2542         m1.transpose()
2543         self.assertEqual(m1.getNumberOfRows(),3)
2544         self.assertEqual(m1.getNumberOfCols(),2)
2545         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,5,3,1,4,6]),1e-12))
2546         #m1np=m0np.transpose()
2547         m2=m0*m1
2548         self.assertEqual(m2.getNumberOfRows(),2)
2549         self.assertEqual(m2.getNumberOfCols(),2)
2550         self.assertTrue(m2.getData().isEqual(DataArrayDouble([29,37,37,62]),1e-12))
2551         pass
2552
2553     def testSwig2AMR2(self):
2554         """ Test condensation of fine IMesh instance into a coarse one, with a factor. See testRemapperAMR1 in MEDCouplingRemapperTest.py file to see how the expected value is obtained."""
2555         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2556         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2557         MEDCouplingIMesh.CondenseFineToCoarse([5,7],fine,[(1,4),(2,4)],[4,4],coarse)
2558         self.assertTrue(coarse.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,312,376,440,14,15,1080,1144,1208,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]),1e-12))
2559         # 3D
2560         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2561         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2562         MEDCouplingIMesh.CondenseFineToCoarse([5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4],coarse)
2563         self.assertTrue(coarse.isEqual(DataArrayDouble([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.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,10464.,10720.,10976.,49.,50.,13536.,13792.,14048.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.,64.,65.,66.,67.,68.,69.,70.,71.,72.,73.,74.,75.,76.,77.,78.,79.,80.,35040.,35296.,35552.,84.,85.,38112.,38368.,38624.,89.,90.,91.,92.,93.,94.,95.,96.,97.,98.,99.,100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,110.,111.,112.,113.,114.,115.,59616.,59872.,60128.,119.,120.,62688.,62944.,63200.,124.,125.,126.,127.,128.,129.,130.,131.,132.,133.,134.,135.,136.,137.,138.,139.,140.,141.,142.,143.,144.,145.,146.,147.,148.,149.,150.,151.,152.,153.,154.,155.,156.,157.,158.,159.,160.,161.,162.,163.,164.,165.,166.,167.,168.,169.,170.,171.,172.,173.,174.]),1e-12))
2564         # 1D
2565         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2566         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2567         MEDCouplingIMesh.CondenseFineToCoarse([5],fine,[(1,4)],[4],coarse)
2568         self.assertTrue(coarse.isEqual(DataArrayDouble([0,6,22,38,4]),1e-12))
2569         pass
2570
2571     def testSwig2AMR3(self):
2572         """ Test spread of coarse IMesh instance into a fine one, with a factor."""
2573         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2574         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2575         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7],fine,[(1,4),(2,4)],[4,4])
2576         self.assertTrue(fine.isEqual(DataArrayDouble([11.,11.,11.,11.,12.,12.,12.,12.,13.,13.,13.,13.,11.,11.,11.,11.,12.,12.,12.,12.,13.,13.,13.,13.,11.,11.,11.,11.,12.,12.,12.,12.,13.,13.,13.,13.,11.,11.,11.,11.,12.,12.,12.,12.,13.,13.,13.,13.,16.,16.,16.,16.,17.,17.,17.,17.,18.,18.,18.,18.,16.,16.,16.,16.,17.,17.,17.,17.,18.,18.,18.,18.,16.,16.,16.,16.,17.,17.,17.,17.,18.,18.,18.,18.,16.,16.,16.,16.,17.,17.,17.,17.,18.,18.,18.,18.]),1e-12))
2577         # 3D
2578         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2579         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2580         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4])
2581         self.assertTrue(fine.isEqual(DataArrayDouble([46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,46.,46.,46.,46.,47.,47.,47.,47.,48.,48.,48.,48.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,51.,51.,51.,51.,52.,52.,52.,52.,53.,53.,53.,53.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,81.,81.,81.,81.,82.,82.,82.,82.,83.,83.,83.,83.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,86.,86.,86.,86.,87.,87.,87.,87.,88.,88.,88.,88.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,116.,116.,116.,116.,117.,117.,117.,117.,118.,118.,118.,118.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.,121.,121.,121.,121.,122.,122.,122.,122.,123.,123.,123.,123.]),1e-12))
2582         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",3,DataArrayInt([6,8,6]),[0.,0.,0.],DataArrayDouble((1.,1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2583         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",3,DataArrayInt([13,9,13]),[1.,2.,1.],DataArrayDouble((0.25,0.25,0.25)))) ; f.setArray(fine) ; f.setName("tutu") ; f.checkConsistencyLight()
2584         # 1D
2585         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2586         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2587         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5],fine,[(1,4)],[4])
2588         self.assertTrue(fine.isEqual(DataArrayDouble([1.,1.,1.,1.,2.,2.,2.,2.,3.,3.,3.,3.]),1e-12))
2589         pass
2590
2591     def testSwig2AMR4(self):
2592         """This test focuses on MEDCouplingCartesianAMRMesh.createPatchesFromCriterion method. To test it a field containing 0 everywhere except in the annulus (centered on the center of the mesh) value is 1."""
2593         im=MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04])
2594         b=im.computeCellCenterOfMass() ; b-=[1.,1.] ; b=b.magnitude()
2595         ids=b.findIdsInRange(0.4,0.7)
2596         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(im) ; f.setName("toto") ; arr=DataArrayDouble(im.getNumberOfCells()) ; arr[:]=0. ; arr[ids]=1. ; f.setArray(arr)
2597         # f.write("test.vti")
2598         amr=MEDCouplingCartesianAMRMesh(MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04]))
2599         arr2=DataArrayByte(im.getNumberOfCells()) ; arr2[:]=0 ; arr2[ids]=1
2600         bso=BoxSplittingOptions() ; bso.setEfficiencyGoal(0.5); bso.setEfficiencyThreshold(0.8) ; bso.setMaximumNbOfCellsInPatch(3000) ; bso.setMinimumPatchLength(6) ; bso.setMaximumPatchLength(11)
2601         amr.createPatchesFromCriterion(bso,arr2,[2,2])
2602         m=amr.getImageMesh() ; m=m.buildUnstructured() ; m.changeSpaceDimension(3,1.)
2603         self.assertEqual(12,amr.getNumberOfPatches())
2604         exp0=[[(9,19),(9,19)],[(9,19),(31,41)],[(31,41),(9,19)],[(8,17),(19,25)],[(8,17),(25,31)],[(19,25),(8,17)],[(25,31),(8,17)],[(19,25),(33,42)],[(25,31),(33,42)],[(31,41),(31,41)],[(33,42),(19,25)],[(33,42),(25,31)]]
2605         for i,bltr in enumerate(exp0):
2606             self.assertEqual(amr[i].getBLTRRange(),bltr)
2607             pass
2608         self.assertAlmostEqual(0.666666666667,amr[3].getMesh().getImageMesh().computeSquareness(),12)
2609         #
2610         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceToGlobalOfCompactFrmt([(8,32),(4,17)],[(0,24),(2,12)]),[(8,32),(6,16)])
2611         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceFromGlobalOfCompactFrmt([(8,32),(4,17)],[(8,32),(6,16)]),[(0,24),(2,12)])
2612         self.assertTrue(amr.getImageMesh().isEqual(im,1e-12))
2613         m=amr.getImageMesh().asSingleCell().build1SGTUnstructured()
2614         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3])))
2615         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([(0,0),(2,0),(0,2),(2,2)]),1e-12))
2616         pass
2617
2618     def testSwig2AMR5(self):
2619         """ Idem testAMR3, test spread of coarse IMesh instance into a fine one, with a factor, but here ghost is used !"""
2620         # 1D
2621         coarse=DataArrayDouble(5+2) ; coarse.iota(-1) #X=5 with ghostLev=1
2622         fine=DataArrayDouble(3*4+2) ; fine.iota(1000) #X=3 refined by 4 with ghostLev=1
2623         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5],fine,[(1,4)],[4],1)
2624         self.assertTrue(fine.isEqual(DataArrayDouble([0,1,1,1,1,2,2,2,2,3,3,3,3,4]),1e-12))
2625         coarse.iota(-1000)
2626         MEDCouplingIMesh.CondenseFineToCoarseGhost([5],fine,[(1,4)],[4],coarse,1)
2627         self.assertTrue(coarse.isEqual(DataArrayDouble([-1000.,-999.,4.,8.,12.,-995.,-994.]),1e-12))
2628         # 2D
2629         coarse=DataArrayDouble((5+2*1)*(7+2*1)) ; coarse.iota(0) #X=5,Y=7 with ghostLev=1
2630         fine=DataArrayDouble((3*4+2*1)*(2*4+2*1)) ; fine.iota(1000) #X=3,Y=2 refined by 4
2631         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5,7],fine,[(1,4),(2,4)],[4,4],1)
2632         self.assertTrue(fine.isEqual(DataArrayDouble([15.,16.,16.,16.,16.,17.,17.,17.,17.,18.,18.,18.,18.,19.,22.,23.,23.,23.,23.,24.,24.,24.,24.,25.,25.,25.,25.,26.,22.,23.,23.,23.,23.,24.,24.,24.,24.,25.,25.,25.,25.,26.,22.,23.,23.,23.,23.,24.,24.,24.,24.,25.,25.,25.,25.,26.,22.,23.,23.,23.,23.,24.,24.,24.,24.,25.,25.,25.,25.,26.,29.,30.,30.,30.,30.,31.,31.,31.,31.,32.,32.,32.,32.,33.,29.,30.,30.,30.,30.,31.,31.,31.,31.,32.,32.,32.,32.,33.,29.,30.,30.,30.,30.,31.,31.,31.,31.,32.,32.,32.,32.,33.,29.,30.,30.,30.,30.,31.,31.,31.,31.,32.,32.,32.,32.,33.,36.,37.,37.,37.,37.,38.,38.,38.,38.,39.,39.,39.,39.,40.]),1e-12))
2633         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2634         coarse.iota(-1000)
2635         fine2=DataArrayDouble.Meld(fine,3*fine) ; coarse2=DataArrayDouble.Meld(coarse,3*coarse)
2636         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine,[(1,4),(2,4)],[4,4],coarse,1)
2637         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine2,[(1,4),(2,4)],[4,4],coarse2,1)
2638         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2639         coarseExp=DataArrayDouble([-1000.,-999.,-998.,-997.,-996.,-995.,-994.,-993.,-992.,-991.,-990.,-989.,-988.,-987.,-986.,-985.,-984.,-983.,-982.,-981.,-980.,-979.,-978.,368.,384.,400.,-974.,-973.,-972.,-971.,480.,496.,512.,-967.,-966.,-965.,-964.,-963.,-962.,-961.,-960.,-959.,-958.,-957.,-956.,-955.,-954.,-953.,-952.,-951.,-950.,-949.,-948.,-947.,-946.,-945.,-944.,-943.,-942.,-941.,-940.,-939.,-938.])
2640         self.assertTrue(coarse.isEqual(coarseExp,1e-12))
2641         self.assertTrue(coarse2[:,0].isEqual(coarseExp,1e-12))
2642         self.assertTrue(coarse2[:,1].isEqual(3*coarseExp,1e-12))
2643         pass
2644
2645     def testSwig2AMR6(self):
2646         """ Idem testSwig2AMR5, except that only 2D is considered here, and fine to fine is considered here. At the end of the test some checks about typing with AMR structs."""
2647         amr=MEDCouplingCartesianAMRMesh("",2,[6,6],[0,0],[1,1])
2648         da=DataArrayDouble((5+2)*(5+2)) ; da.iota() ; da+=0.9
2649         amr.addPatch([(1,4),(2,4)],[4,4])
2650         amr.addPatch([(0,1),(0,1)],[4,4])
2651         amr.addPatch([(4,5),(3,4)],[4,4])
2652         amr.addPatch([(4,5),(1,3)],[4,4])
2653         amr.addPatch([(0,1),(1,4)],[4,4])
2654         da0=DataArrayDouble((3*4+2)*(2*4+2)) ; da0.iota() ; da0[:]+=0.2
2655         da1=DataArrayDouble((1*4+2)*(1*4+2)) ; da1.iota() ; da1[:]+=0.4
2656         da2=DataArrayDouble((1*4+2)*(1*4+2)) ; da2.iota() ; da2[:]+=0.6
2657         da3=DataArrayDouble((1*4+2)*(2*4+2)) ; da3.iota() ; da3[:]+=0.7
2658         da4=DataArrayDouble((1*4+2)*(3*4+2)) ; da4.iota() ; da4[:]+=0.8
2659         self.assertEqual(5,amr.getNumberOfPatches())
2660         l=[da0,da1,da2,da3,da4]
2661         lCpy=[elt.deepCopy() for elt in l]
2662         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2663         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2664         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2665         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2666         #
2667         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2668         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2669         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2670         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(amr[2].getMesh().getImageMesh().buildWithGhost(1)) ; f2.setArray(da2) ; f2.setName("p2") ; f2.checkConsistencyLight()
2671         f3=MEDCouplingFieldDouble(ON_CELLS) ; f3.setMesh(amr[3].getMesh().getImageMesh().buildWithGhost(1)) ; f3.setArray(da3) ; f3.setName("p3") ; f3.checkConsistencyLight()
2672         f4=MEDCouplingFieldDouble(ON_CELLS) ; f4.setMesh(amr[4].getMesh().getImageMesh().buildWithGhost(1)) ; f4.setArray(da4) ; f4.setName("p4") ; f4.checkConsistencyLight()
2673         #
2674         da0Exp=DataArrayDouble([28.8,16.9,16.9,16.9,16.9,17.9,17.9,17.9,17.9,18.9,18.9,18.9,18.9,25.7,34.8,23.9,23.9,23.9,23.9,24.9,24.9,24.9,24.9,25.9,25.9,25.9,25.9,31.7,40.8,23.9,23.9,23.9,23.9,24.9,24.9,24.9,24.9,25.9,25.9,25.9,25.9,37.7,46.8,23.9,23.9,23.9,23.9,24.9,24.9,24.9,24.9,25.9,25.9,25.9,25.9,43.7,52.8,23.9,23.9,23.9,23.9,24.9,24.9,24.9,24.9,25.9,25.9,25.9,25.9,49.7,58.8,30.9,30.9,30.9,30.9,31.9,31.9,31.9,31.9,32.9,32.9,32.9,32.9,7.6,64.8,30.9,30.9,30.9,30.9,31.9,31.9,31.9,31.9,32.9,32.9,32.9,32.9,13.6,70.8,30.9,30.9,30.9,30.9,31.9,31.9,31.9,31.9,32.9,32.9,32.9,32.9,19.6,76.8,30.9,30.9,30.9,30.9,31.9,31.9,31.9,31.9,32.9,32.9,32.9,32.9,25.6,36.9,37.9,37.9,37.9,37.9,38.9,38.9,38.9,38.9,39.9,39.9,39.9,39.9,40.9])
2675         da0Exp2=DataArrayDouble([15.9,16.9,16.9,16.9,16.9,17.9,17.9,17.9,17.9,18.9,18.9,18.9,18.9,19.9,22.9,15.2,16.2,17.2,18.2,19.2,20.2,21.2,22.2,23.2,24.2,25.2,26.2,26.9,22.9,29.2,30.2,31.2,32.2,33.2,34.2,35.2,36.2,37.2,38.2,39.2,40.2,26.9,22.9,43.2,44.2,45.2,46.2,47.2,48.2,49.2,50.2,51.2,52.2,53.2,54.2,26.9,22.9,57.2,58.2,59.2,60.2,61.2,62.2,63.2,64.2,65.2,66.2,67.2,68.2,26.9,29.9,71.2,72.2,73.2,74.2,75.2,76.2,77.2,78.2,79.2,80.2,81.2,82.2,33.9,29.9,85.2,86.2,87.2,88.2,89.2,90.2,91.2,92.2,93.2,94.2,95.2,96.2,33.9,29.9,99.2,100.2,101.2,102.2,103.2,104.2,105.2,106.2,107.2,108.2,109.2,110.2,33.9,29.9,113.2,114.2,115.2,116.2,117.2,118.2,119.2,120.2,121.2,122.2,123.2,124.2,33.9,36.9,37.9,37.9,37.9,37.9,38.9,38.9,38.9,38.9,39.9,39.9,39.9,39.9,40.9])
2676         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2677         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2678         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2679         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2680         #
2681         g0=amr.retrieveGridsAt(0)
2682         self.assertEqual(1,len(g0))
2683         self.assertTrue(isinstance(g0[0],MEDCouplingCartesianAMRPatchGF))
2684         g1=amr.retrieveGridsAt(1)
2685         self.assertEqual(5,len(g1))
2686         for i in range(5):
2687             self.assertTrue(isinstance(g1[i],MEDCouplingCartesianAMRPatch))
2688             pass
2689         pass
2690
2691     def testSwig2AMR7(self):
2692         """Idem testSwig2AMR6 except that we are in 1D"""
2693         amr=MEDCouplingCartesianAMRMesh("",1,[6],[0],[1])
2694         da=DataArrayDouble(5+2) ; da.iota() ; da+=0.9
2695         amr.addPatch([(1,4)],[4])
2696         amr.addPatch([(0,1)],[4])
2697         da0=DataArrayDouble(3*4+2) ; da0.iota() ; da0[:]+=0.2
2698         da1=DataArrayDouble(1*4+2) ; da1.iota() ; da1[:]+=0.4
2699         self.assertEqual(2,amr.getNumberOfPatches())
2700         l=[da0,da1]
2701         lCpy=[elt.deepCopy() for elt in l]
2702         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2703         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2704         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2705         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2706         #
2707         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2708         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2709         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2710         #
2711         da0Exp=DataArrayDouble([4.4,2.9,2.9,2.9,2.9,3.9,3.9,3.9,3.9,4.9,4.9,4.9,4.9,5.9])
2712         da0Exp2=DataArrayDouble([1.9,1.2,2.2,3.2,4.2,5.2,6.2,7.2,8.2,9.2,10.2,11.2,12.2,5.9])
2713         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2714         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2715         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2716         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2717         pass
2718
2719     def testSwig2AMR8(self):
2720         """This test checks 'basic' operations for ghost update."""
2721         ghostSz=1
2722         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2723         amr.addPatch([(1,4),(2,4)],[4,4])
2724         amr.addPatch([(4,5),(3,5)],[4,4])
2725         amr.addPatch([(0,1),(4,6)],[4,4])
2726         amr[0].addPatch([(10,12),(5,8)],[2,2])
2727         amr[1].addPatch([(0,1),(0,5)],[2,2])
2728         amr[2].addPatch([(3,4),(0,3)],[2,2])
2729         m=amr.buildMeshFromPatchEnvelop()
2730         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,9,8,10,11])))
2731         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([1.,2.,4.,2.,1.,4.,4.,4.,4.,3.,5.,3.,4.,5.,5.,5.,0.,4.,1.,4.,0.,6.,1.,6.],12,2),1e-12))
2732         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2733         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2734         att.alloc()
2735         d=att.getFieldOn(amr,"Field")
2736         self.assertEqual(56,d.getNumberOfTuples())
2737         self.assertEqual(1,d.getNumberOfComponents())
2738         d.iota() ; d+=0.1
2739         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2740         self.assertEqual(140,d0.getNumberOfTuples())
2741         self.assertEqual(1,d0.getNumberOfComponents())
2742         d0.iota() ; d0+=0.2
2743         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2744         self.assertEqual(60,d1.getNumberOfTuples())
2745         self.assertEqual(1,d1.getNumberOfComponents())
2746         d1.iota() ; d1+=0.3
2747         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2748         self.assertEqual(60,d2.getNumberOfTuples())
2749         self.assertEqual(1,d2.getNumberOfComponents())
2750         d2.iota() ; d2+=0.4
2751         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2752         self.assertEqual(48,d00.getNumberOfTuples())
2753         self.assertEqual(1,d00.getNumberOfComponents())
2754         d00.iota() ; d00+=0.5
2755         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2756         self.assertEqual(48,d10.getNumberOfTuples())
2757         self.assertEqual(1,d10.getNumberOfComponents())
2758         d10.iota() ; d10+=0.6
2759         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2760         self.assertEqual(32,d20.getNumberOfTuples())
2761         self.assertEqual(1,d20.getNumberOfComponents())
2762         d20.iota() ; d20+=0.7
2763         f=att.buildCellFieldOnRecurseWithoutOverlapWithoutGhost(amr,"Field")
2764         arrExp=DataArrayDouble([8.1,9.1,10.1,11.1,12.1,15.1,16.1,17.1,18.1,19.1,22.1,26.1,29.1,37.1,38.1,39.1,44.1,45.1,46.1,47.1,15.2,16.2,17.2,18.2,19.2,20.2,21.2,22.2,23.2,24.2,25.2,26.2,29.2,30.2,31.2,32.2,33.2,34.2,35.2,36.2,37.2,38.2,39.2,40.2,43.2,44.2,45.2,46.2,47.2,48.2,49.2,50.2,51.2,52.2,53.2,54.2,57.2,58.2,59.2,60.2,61.2,62.2,63.2,64.2,65.2,66.2,67.2,68.2,71.2,72.2,73.2,74.2,75.2,76.2,77.2,78.2,79.2,80.2,81.2,82.2,85.2,86.2,87.2,88.2,89.2,90.2,91.2,92.2,93.2,94.2,99.2,100.2,101.2,102.2,103.2,104.2,105.2,106.2,107.2,108.2,113.2,114.2,115.2,116.2,117.2,118.2,119.2,120.2,121.2,122.2,7.5,8.5,9.5,10.5,13.5,14.5,15.5,16.5,19.5,20.5,21.5,22.5,25.5,26.5,27.5,28.5,31.5,32.5,33.5,34.5,37.5,38.5,39.5,40.5,8.3,9.3,10.3,14.3,15.3,16.3,20.3,21.3,22.3,26.3,27.3,28.3,32.3,33.3,34.3,37.3,38.3,39.3,40.3,43.3,44.3,45.3,46.3,49.3,50.3,51.3,52.3,5.6,6.6,9.6,10.6,13.6,14.6,17.6,18.6,21.6,22.6,25.6,26.6,29.6,30.6,33.6,34.6,37.6,38.6,41.6,42.6,7.4,8.4,9.4,13.4,14.4,15.4,19.4,20.4,21.4,25.4,26.4,27.4,28.4,31.4,32.4,33.4,34.4,37.4,38.4,39.4,40.4,43.4,44.4,45.4,46.4,49.4,50.4,51.4,52.4,5.7,6.7,9.7,10.7,13.7,14.7,17.7,18.7,21.7,22.7,25.7,26.7])
2765         arrExp.setName("Field") ; arrExp.setInfoOnComponents(["X"])
2766         self.assertTrue(f.getArray().isEqual(arrExp,1e-12))
2767         m=MEDCoupling1SGTUMesh(f.getMesh())
2768         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17,13,12,18,19,17,16,20,21,19,18,22,23,24,23,27,28,25,24,28,29,26,25,29,30,28,27,32,33,29,28,33,34,30,29,34,35,31,30,35,36,38,37,50,51,39,38,51,52,40,39,52,53,41,40,53,54,42,41,54,55,43,42,55,56,44,43,56,57,45,44,57,58,46,45,58,59,47,46,59,60,48,47,60,61,49,48,61,62,51,50,63,64,52,51,64,65,53,52,65,66,54,53,66,67,55,54,67,68,56,55,68,69,57,56,69,70,58,57,70,71,59,58,71,72,60,59,72,73,61,60,73,74,62,61,74,75,64,63,76,77,65,64,77,78,66,65,78,79,67,66,79,80,68,67,80,81,69,68,81,82,70,69,82,83,71,70,83,84,72,71,84,85,73,72,85,86,74,73,86,87,75,74,87,88,77,76,89,90,78,77,90,91,79,78,91,92,80,79,92,93,81,80,93,94,82,81,94,95,83,82,95,96,84,83,96,97,85,84,97,98,86,85,98,99,87,86,99,100,88,87,100,101,90,89,102,103,91,90,103,104,92,91,104,105,93,92,105,106,94,93,106,107,95,94,107,108,96,95,108,109,97,96,109,110,98,97,110,111,99,98,111,112,100,99,112,113,101,100,113,114,103,102,115,116,104,103,116,117,105,104,117,118,106,105,118,119,107,106,119,120,108,107,120,121,109,108,121,122,110,109,122,123,111,110,123,124,112,111,124,125,116,115,126,127,117,116,127,128,118,117,128,129,119,118,129,130,120,119,130,131,121,120,131,132,122,121,132,133,123,122,133,134,124,123,134,135,125,124,135,136,127,126,137,138,128,127,138,139,129,128,139,140,130,129,140,141,131,130,141,142,132,131,142,143,133,132,143,144,134,133,144,145,135,134,145,146,136,135,146,147,149,148,153,154,150,149,154,155,151,150,155,156,152,151,156,157,154,153,158,159,155,154,159,160,156,155,160,161,157,156,161,162,159,158,163,164,160,159,164,165,161,160,165,166,162,161,166,167,164,163,168,169,165,164,169,170,166,165,170,171,167,166,171,172,169,168,173,174,170,169,174,175,171,170,175,176,172,171,176,177,174,173,178,179,175,174,179,180,176,175,180,181,177,176,181,182,184,183,187,188,185,184,188,189,186,185,189,190,188,187,191,192,189,188,192,193,190,189,193,194,192,191,195,196,193,192,196,197,194,193,197,198,196,195,199,200,197,196,200,201,198,197,201,202,200,199,204,205,201,200,205,206,202,201,206,207,204,203,208,209,205,204,209,210,206,205,210,211,207,206,211,212,209,208,213,214,210,209,214,215,211,210,215,216,212,211,216,217,214,213,218,219,215,214,219,220,216,215,220,221,217,216,221,222,224,223,226,227,225,224,227,228,227,226,229,230,228,227,230,231,230,229,232,233,231,230,233,234,233,232,235,236,234,233,236,237,236,235,238,239,237,236,239,240,239,238,241,242,240,239,242,243,242,241,244,245,243,242,245,246,245,244,247,248,246,245,248,249,248,247,250,251,249,248,251,252,251,250,253,254,252,251,254,255,257,256,260,261,258,257,261,262,259,258,262,263,261,260,264,265,262,261,265,266,263,262,266,267,265,264,268,269,266,265,269,270,267,266,270,271,269,268,273,274,270,269,274,275,271,270,275,276,272,271,276,277,274,273,278,279,275,274,279,280,276,275,280,281,277,276,281,282,279,278,283,284,280,279,284,285,281,280,285,286,282,281,286,287,284,283,288,289,285,284,289,290,286,285,290,291,287,286,291,292,289,288,293,294,290,289,294,295,291,290,295,296,292,291,296,297,299,298,301,302,300,299,302,303,302,301,304,305,303,302,305,306,305,304,307,308,306,305,308,309,308,307,310,311,309,308,311,312,311,310,313,314,312,311,314,315,314,313,316,317,315,314,317,318])))
2769         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([0.,0.,1.,0.,2.,0.,3.,0.,4.,0.,5.,0.,0.,1.,1.,1.,2.,1.,3.,1.,4.,1.,5.,1.,0.,2.,1.,2.,2.,2.,3.,2.,4.,2.,5.,2.,0.,3.,1.,3.,4.,3.,5.,3.,0.,4.,1.,4.,2.,4.,3.,4.,4.,4.,1.,5.,2.,5.,3.,5.,4.,5.,5.,5.,1.,6.,2.,6.,3.,6.,4.,6.,5.,6.,1.,2.,1.25,2.,1.5,2.,1.75,2.,2.,2.,2.25,2.,2.5,2.,2.75,2.,3.,2.,3.25,2.,3.5,2.,3.75,2.,4.,2.,1.,2.25,1.25,2.25,1.5,2.25,1.75,2.25,2.,2.25,2.25,2.25,2.5,2.25,2.75,2.25,3.,2.25,3.25,2.25,3.5,2.25,3.75,2.25,4.,2.25,1.,2.5,1.25,2.5,1.5,2.5,1.75,2.5,2.,2.5,2.25,2.5,2.5,2.5,2.75,2.5,3.,2.5,3.25,2.5,3.5,2.5,3.75,2.5,4.,2.5,1.,2.75,1.25,2.75,1.5,2.75,1.75,2.75,2.,2.75,2.25,2.75,2.5,2.75,2.75,2.75,3.,2.75,3.25,2.75,3.5,2.75,3.75,2.75,4.,2.75,1.,3.,1.25,3.,1.5,3.,1.75,3.,2.,3.,2.25,3.,2.5,3.,2.75,3.,3.,3.,3.25,3.,3.5,3.,3.75,3.,4.,3.,1.,3.25,1.25,3.25,1.5,3.25,1.75,3.25,2.,3.25,2.25,3.25,2.5,3.25,2.75,3.25,3.,3.25,3.25,3.25,3.5,3.25,3.75,3.25,4.,3.25,1.,3.5,1.25,3.5,1.5,3.5,1.75,3.5,2.,3.5,2.25,3.5,2.5,3.5,2.75,3.5,3.,3.5,3.25,3.5,3.5,3.5,1.,3.75,1.25,3.75,1.5,3.75,1.75,3.75,2.,3.75,2.25,3.75,2.5,3.75,2.75,3.75,3.,3.75,3.25,3.75,3.5,3.75,1.,4.,1.25,4.,1.5,4.,1.75,4.,2.,4.,2.25,4.,2.5,4.,2.75,4.,3.,4.,3.25,4.,3.5,4.,3.5,3.25,3.625,3.25,3.75,3.25,3.875,3.25,4.,3.25,3.5,3.375,3.625,3.375,3.75,3.375,3.875,3.375,4.,3.375,3.5,3.5,3.625,3.5,3.75,3.5,3.875,3.5,4.,3.5,3.5,3.625,3.625,3.625,3.75,3.625,3.875,3.625,4.,3.625,3.5,3.75,3.625,3.75,3.75,3.75,3.875,3.75,4.,3.75,3.5,3.875,3.625,3.875,3.75,3.875,3.875,3.875,4.,3.875,3.5,4.,3.625,4.,3.75,4.,3.875,4.,4.,4.,4.25,3.,4.5,3.,4.75,3.,5.,3.,4.25,3.25,4.5,3.25,4.75,3.25,5.,3.25,4.25,3.5,4.5,3.5,4.75,3.5,5.,3.5,4.25,3.75,4.5,3.75,4.75,3.75,5.,3.75,4.25,4.,4.5,4.,4.75,4.,5.,4.,4.,4.25,4.25,4.25,4.5,4.25,4.75,4.25,5.,4.25,4.,4.5,4.25,4.5,4.5,4.5,4.75,4.5,5.,4.5,4.,4.75,4.25,4.75,4.5,4.75,4.75,4.75,5.,4.75,4.,5.,4.25,5.,4.5,5.,4.75,5.,5.,5.,4.,3.,4.125,3.,4.25,3.,4.,3.125,4.125,3.125,4.25,3.125,4.,3.25,4.125,3.25,4.25,3.25,4.,3.375,4.125,3.375,4.25,3.375,4.,3.5,4.125,3.5,4.25,3.5,4.,3.625,4.125,3.625,4.25,3.625,4.,3.75,4.125,3.75,4.25,3.75,4.,3.875,4.125,3.875,4.25,3.875,4.,4.,4.125,4.,4.25,4.,4.,4.125,4.125,4.125,4.25,4.125,4.,4.25,4.125,4.25,4.25,4.25,0.,4.,0.25,4.,0.5,4.,0.75,4.,0.,4.25,0.25,4.25,0.5,4.25,0.75,4.25,0.,4.5,0.25,4.5,0.5,4.5,0.75,4.5,0.,4.75,0.25,4.75,0.5,4.75,0.75,4.75,1.,4.75,0.,5.,0.25,5.,0.5,5.,0.75,5.,1.,5.,0.,5.25,0.25,5.25,0.5,5.25,0.75,5.25,1.,5.25,0.,5.5,0.25,5.5,0.5,5.5,0.75,5.5,1.,5.5,0.,5.75,0.25,5.75,0.5,5.75,0.75,5.75,1.,5.75,0.,6.,0.25,6.,0.5,6.,0.75,6.,1.,6.,0.75,4.,0.875,4.,1.,4.,0.75,4.125,0.875,4.125,1.,4.125,0.75,4.25,0.875,4.25,1.,4.25,0.75,4.375,0.875,4.375,1.,4.375,0.75,4.5,0.875,4.5,1.,4.5,0.75,4.625,0.875,4.625,1.,4.625,0.75,4.75,0.875,4.75,1.,4.75],319,2),1e-12))
2770         # the test is here ! To be called after iteration with no remesh
2771         att.synchronizeAllGhostZones()
2772         f=att.buildCellFieldOnWithGhost(amr,"Field") ; f.checkConsistencyLight()
2773         ftmp=att.buildCellFieldOnWithoutGhost(amr,"Field") ; ftmp.checkConsistencyLight() ; self.assertTrue(ftmp.getArray().isEqualWithoutConsideringStr(DataArrayDouble([8.1,9.1,10.1,11.1,12.1,15.1,16.1,17.1,18.1,19.1,22.1,23.1,24.1,25.1,26.1,29.1,30.1,31.1,32.1,33.1,36.1,37.1,38.1,39.1,40.1,43.1,44.1,45.1,46.1,47.1]),1e-12))
2774         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2775         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2776         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2777         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2778         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2779         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2780         self.assertTrue(f.getArray().isEqualWithoutConsideringStr(DataArrayDouble([0.1,1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,9.1,10.1,11.1,12.1,13.1,14.1,15.1,16.1,17.1,18.1,19.1,20.1,21.1,22.1,23.1,24.1,25.1,26.1,27.1,28.1,29.1,30.1,31.1,32.1,33.1,34.1,35.1,36.1,37.1,38.1,39.1,40.1,41.1,42.1,43.1,44.1,45.1,46.1,47.1,48.1,49.1,50.1,51.1,52.1,53.1,54.1,55.1]),1e-12))
2781         self.assertTrue(f0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([15.1,16.1,16.1,16.1,16.1,17.1,17.1,17.1,17.1,18.1,18.1,18.1,18.1,19.1,22.1,15.2,16.2,17.2,18.2,19.2,20.2,21.2,22.2,23.2,24.2,25.2,26.2,26.1,22.1,29.2,30.2,31.2,32.2,33.2,34.2,35.2,36.2,37.2,38.2,39.2,40.2,26.1,22.1,43.2,44.2,45.2,46.2,47.2,48.2,49.2,50.2,51.2,52.2,53.2,54.2,26.1,22.1,57.2,58.2,59.2,60.2,61.2,62.2,63.2,64.2,65.2,66.2,67.2,68.2,26.1,29.1,71.2,72.2,73.2,74.2,75.2,76.2,77.2,78.2,79.2,80.2,81.2,82.2,7.3,29.1,85.2,86.2,87.2,88.2,89.2,90.2,91.2,92.2,93.2,94.2,95.2,96.2,13.3,29.1,99.2,100.2,101.2,102.2,103.2,104.2,105.2,106.2,107.2,108.2,109.2,110.2,19.3,29.1,113.2,114.2,115.2,116.2,117.2,118.2,119.2,120.2,121.2,122.2,123.2,124.2,25.3,10.4,37.1,37.1,37.1,37.1,38.1,38.1,38.1,38.1,39.1,39.1,39.1,39.1,31.3]),1e-12))
2782         self.assertTrue(f1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([68.2,26.1,26.1,26.1,26.1,27.1,82.2,7.3,8.3,9.3,10.3,34.1,96.2,13.3,14.3,15.3,16.3,34.1,110.2,19.3,20.3,21.3,22.3,34.1,124.2,25.3,26.3,27.3,28.3,34.1,39.1,31.3,32.3,33.3,34.3,41.1,39.1,37.3,38.3,39.3,40.3,41.1,39.1,43.3,44.3,45.3,46.3,41.1,39.1,49.3,50.3,51.3,52.3,41.1,46.1,47.1,47.1,47.1,47.1,48.1]),1e-12))
2783         self.assertTrue(f2.getArray().isEqualWithoutConsideringStr(DataArrayDouble([28.1,29.1,29.1,29.1,29.1,113.2,35.1,7.4,8.4,9.4,10.4,37.1,35.1,13.4,14.4,15.4,16.4,37.1,35.1,19.4,20.4,21.4,22.4,37.1,35.1,25.4,26.4,27.4,28.4,37.1,42.1,31.4,32.4,33.4,34.4,44.1,42.1,37.4,38.4,39.4,40.4,44.1,42.1,43.4,44.4,45.4,46.4,44.1,42.1,49.4,50.4,51.4,52.4,44.1,49.1,50.1,50.1,50.1,50.1,51.1]),1e-12))
2784         self.assertTrue(f00.getArray().isEqualWithoutConsideringStr(DataArrayDouble([80.2,81.2,81.2,82.2,82.2,9.6,94.2,7.5,8.5,9.5,10.5,13.6,94.2,13.5,14.5,15.5,16.5,17.6,108.2,19.5,20.5,21.5,22.5,21.6,108.2,25.5,26.5,27.5,28.5,25.6,122.2,31.5,32.5,33.5,34.5,29.6,122.2,37.5,38.5,39.5,40.5,33.6,39.1,39.1,39.1,39.1,39.1,37.6]),1e-12))
2785         self.assertTrue(f10.getArray().isEqualWithoutConsideringStr(DataArrayDouble([68.2,26.1,26.1,26.1,82.2,5.6,6.6,8.3,82.2,9.6,10.6,8.3,10.5,13.6,14.6,14.3,16.5,17.6,18.6,14.3,22.5,21.6,22.6,20.3,28.5,25.6,26.6,20.3,34.5,29.6,30.6,26.3,40.5,33.6,34.6,26.3,39.1,37.6,38.6,32.3,39.1,41.6,42.6,32.3,39.1,37.3,37.3,38.3]),1e-12))
2786         self.assertTrue(f20.getArray().isEqualWithoutConsideringStr(DataArrayDouble([29.1,29.1,29.1,113.2,9.4,5.7,6.7,37.1,9.4,9.7,10.7,37.1,15.4,13.7,14.7,37.1,15.4,17.7,18.7,37.1,21.4,21.7,22.7,37.1,21.4,25.7,26.7,37.1,27.4,28.4,28.4,37.1]),1e-12))
2787         pass
2788
2789     def testSwig2AMR9(self):
2790         """ Equivalent to testSwig2AMR8 except that here the ghost level is 2 !"""
2791         ghostSz=2
2792         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2793         amr.addPatch([(1,4),(2,4)],[4,4])
2794         amr.addPatch([(4,5),(3,5)],[4,4])
2795         amr.addPatch([(0,1),(4,6)],[4,4])
2796         amr[0].addPatch([(10,12),(5,8)],[2,2])
2797         amr[1].addPatch([(0,1),(0,5)],[2,2])
2798         amr[2].addPatch([(3,4),(0,3)],[2,2])
2799         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2800         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2801         att.alloc()
2802         d=att.getFieldOn(amr,"Field")
2803         self.assertEqual(90,d.getNumberOfTuples())
2804         self.assertEqual(1,d.getNumberOfComponents())
2805         d.iota() ; d+=0.1
2806         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2807         self.assertEqual(192,d0.getNumberOfTuples())
2808         self.assertEqual(1,d0.getNumberOfComponents())
2809         d0.iota() ; d0+=0.2
2810         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2811         self.assertEqual(96,d1.getNumberOfTuples())
2812         self.assertEqual(1,d1.getNumberOfComponents())
2813         d1.iota() ; d1+=0.3
2814         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2815         self.assertEqual(96,d2.getNumberOfTuples())
2816         self.assertEqual(1,d2.getNumberOfComponents())
2817         d2.iota() ; d2+=0.4
2818         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2819         self.assertEqual(80,d00.getNumberOfTuples())
2820         self.assertEqual(1,d00.getNumberOfComponents())
2821         d00.iota() ; d00+=0.5
2822         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2823         self.assertEqual(84,d10.getNumberOfTuples())
2824         self.assertEqual(1,d10.getNumberOfComponents())
2825         d10.iota() ; d10+=0.6
2826         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2827         self.assertEqual(60,d20.getNumberOfTuples())
2828         self.assertEqual(1,d20.getNumberOfComponents())
2829         d20.iota() ; d20+=0.7
2830         # the test is here ! To be called after iteration with no remesh
2831         att.synchronizeAllGhostZones()
2832         f=att.buildCellFieldOnWithGhost(amr,"Field")
2833         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2834         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2835         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2836         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2837         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2838         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2839         self.assertTrue(f0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([29.1,29.1,30.1,30.1,30.1,30.1,31.1,31.1,31.1,31.1,32.1,32.1,32.1,32.1,33.1,33.1,29.1,29.1,30.1,30.1,30.1,30.1,31.1,31.1,31.1,31.1,32.1,32.1,32.1,32.1,33.1,33.1,38.1,38.1,34.2,35.2,36.2,37.2,38.2,39.2,40.2,41.2,42.2,43.2,44.2,45.2,42.1,42.1,38.1,38.1,50.2,51.2,52.2,53.2,54.2,55.2,56.2,57.2,58.2,59.2,60.2,61.2,42.1,42.1,38.1,38.1,66.2,67.2,68.2,69.2,70.2,71.2,72.2,73.2,74.2,75.2,76.2,77.2,42.1,42.1,38.1,38.1,82.2,83.2,84.2,85.2,86.2,87.2,88.2,89.2,90.2,91.2,92.2,93.2,42.1,42.1,47.1,47.1,98.2,99.2,100.2,101.2,102.2,103.2,104.2,105.2,106.2,107.2,108.2,109.2,18.3,19.3,47.1,47.1,114.2,115.2,116.2,117.2,118.2,119.2,120.2,121.2,122.2,123.2,124.2,125.2,26.3,27.3,47.1,47.1,130.2,131.2,132.2,133.2,134.2,135.2,136.2,137.2,138.2,139.2,140.2,141.2,34.3,35.3,47.1,47.1,146.2,147.2,148.2,149.2,150.2,151.2,152.2,153.2,154.2,155.2,156.2,157.2,42.3,43.3,20.4,21.4,57.1,57.1,57.1,57.1,58.1,58.1,58.1,58.1,59.1,59.1,59.1,59.1,50.3,51.3,28.4,29.4,57.1,57.1,57.1,57.1,58.1,58.1,58.1,58.1,59.1,59.1,59.1,59.1,58.3,59.3]),1e-12))
2840         self.assertTrue(f1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([76.2,77.2,42.1,42.1,42.1,42.1,43.1,43.1,92.2,93.2,42.1,42.1,42.1,42.1,43.1,43.1,108.2,109.2,18.3,19.3,20.3,21.3,52.1,52.1,124.2,125.2,26.3,27.3,28.3,29.3,52.1,52.1,140.2,141.2,34.3,35.3,36.3,37.3,52.1,52.1,156.2,157.2,42.3,43.3,44.3,45.3,52.1,52.1,59.1,59.1,50.3,51.3,52.3,53.3,61.1,61.1,59.1,59.1,58.3,59.3,60.3,61.3,61.1,61.1,59.1,59.1,66.3,67.3,68.3,69.3,61.1,61.1,59.1,59.1,74.3,75.3,76.3,77.3,61.1,61.1,68.1,68.1,69.1,69.1,69.1,69.1,70.1,70.1,68.1,68.1,69.1,69.1,69.1,69.1,70.1,70.1]),1e-12))
2841         self.assertTrue(f2.getArray().isEqualWithoutConsideringStr(DataArrayDouble([46.1,46.1,47.1,47.1,47.1,47.1,130.2,131.2,46.1,46.1,47.1,47.1,47.1,47.1,146.2,147.2,55.1,55.1,18.4,19.4,20.4,21.4,57.1,57.1,55.1,55.1,26.4,27.4,28.4,29.4,57.1,57.1,55.1,55.1,34.4,35.4,36.4,37.4,57.1,57.1,55.1,55.1,42.4,43.4,44.4,45.4,57.1,57.1,64.1,64.1,50.4,51.4,52.4,53.4,66.1,66.1,64.1,64.1,58.4,59.4,60.4,61.4,66.1,66.1,64.1,64.1,66.4,67.4,68.4,69.4,66.1,66.1,64.1,64.1,74.4,75.4,76.4,77.4,66.1,66.1,73.1,73.1,74.1,74.1,74.1,74.1,75.1,75.1,73.1,73.1,74.1,74.1,74.1,74.1,75.1,75.1]),1e-12))
2842         self.assertTrue(f00.getArray().isEqualWithoutConsideringStr(DataArrayDouble([107.2,107.2,108.2,108.2,109.2,109.2,14.6,15.6,107.2,107.2,108.2,108.2,109.2,109.2,20.6,21.6,123.2,123.2,18.5,19.5,20.5,21.5,26.6,27.6,123.2,123.2,26.5,27.5,28.5,29.5,32.6,33.6,139.2,139.2,34.5,35.5,36.5,37.5,38.6,39.6,139.2,139.2,42.5,43.5,44.5,45.5,44.6,45.6,155.2,155.2,50.5,51.5,52.5,53.5,50.6,51.6,155.2,155.2,58.5,59.5,60.5,61.5,56.6,57.6,59.1,59.1,59.1,59.1,59.1,59.1,62.6,63.6,59.1,59.1,59.1,59.1,59.1,59.1,68.6,69.6]),1e-12))
2843         self.assertTrue(f10.getArray().isEqualWithoutConsideringStr(DataArrayDouble([93.2,93.2,42.1,42.1,42.1,42.1,93.2,93.2,42.1,42.1,42.1,42.1,109.2,109.2,14.6,15.6,19.3,19.3,109.2,109.2,20.6,21.6,19.3,19.3,20.5,21.5,26.6,27.6,27.3,27.3,28.5,29.5,32.6,33.6,27.3,27.3,36.5,37.5,38.6,39.6,35.3,35.3,44.5,45.5,44.6,45.6,35.3,35.3,52.5,53.5,50.6,51.6,43.3,43.3,60.5,61.5,56.6,57.6,43.3,43.3,59.1,59.1,62.6,63.6,51.3,51.3,59.1,59.1,68.6,69.6,51.3,51.3,59.1,59.1,58.3,58.3,59.3,59.3,59.1,59.1,58.3,58.3,59.3,59.3]),1e-12))
2844         self.assertTrue(f20.getArray().isEqualWithoutConsideringStr(DataArrayDouble([47.1,47.1,47.1,47.1,146.2,146.2,47.1,47.1,47.1,47.1,146.2,146.2,20.4,20.4,14.7,15.7,57.1,57.1,20.4,20.4,20.7,21.7,57.1,57.1,28.4,28.4,26.7,27.7,57.1,57.1,28.4,28.4,32.7,33.7,57.1,57.1,36.4,36.4,38.7,39.7,57.1,57.1,36.4,36.4,44.7,45.7,57.1,57.1,44.4,44.4,45.4,45.4,57.1,57.1,44.4,44.4,45.4,45.4,57.1,57.1]),1e-12))
2845         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],1).isEqual(DataArrayInt([0,4])))
2846         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],2).isEqual(DataArrayInt([0,1,5,6])))
2847         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],1).isEqual(DataArrayInt([0,6,49,55])))
2848         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],2).isEqual(DataArrayInt([0,8,10,16,73,79,81,89])))
2849         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6,3],1).isEqual(DataArrayInt([0,6,49,55,224,230,273,279])))
2850         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6,3],2).isEqual(DataArrayInt([0,8,81,89,100,106,163,169,460,466,523,529,540,548,621,629])))
2851         pass
2852
2853     def testSwig2AMR10(self):
2854         """ This test, focuses on basic operations of coarse to fine and fine to coarse and ghost zone update with a ghost size set to 2 and dimension equal to 2."""
2855         szGhost=2
2856         amr=MEDCouplingCartesianAMRMesh("",2,[11,11],[0,0],[0.1,0.1])
2857         amr.addPatch([(3,8),(0,3)],[2,2])
2858         amr[0].addPatch([(0,10),(3,6)],[3,3])
2859         amr[0].addPatch([(2,6),(0,3)],[3,3])
2860         amr[0].addPatch([(6,10),(2,3)],[3,3])
2861         amr.addPatch([(3,8),(3,6)],[2,2])
2862         amr[1].addPatch([(0,4),(0,6)],[3,3])
2863         amr[1].addPatch([(7,10),(0,4)],[3,3])
2864         amr[1].addPatch([(4,7),(0,3)],[3,3])
2865         amr[1].addPatch([(4,7),(3,6)],[3,3])
2866         amr.addPatch([(0,3),(6,10)],[2,2])
2867         self.assertEqual(([(30,39),(27,36)],[6,6]),amr[1][3].getMesh().positionRelativeToGodFather())
2868         self.assertEqual(([(6,16),(6,12)],[2,2]),amr[1].getMesh().positionRelativeToGodFather())
2869         self.assertTrue(not MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(6,16),(6,12)]))
2870         self.assertTrue(MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(28,32),(35,37)]))
2871         da=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.])
2872         MEDCouplingStructuredMesh.AssignPartOfFieldOfDoubleUsing([3,4],da,[(1,3),(2,3)],DataArrayDouble([7.7,8.8]))
2873         self.assertTrue(da.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.7,8.8,9.,10.,11.]),1e-12))
2874         att=MEDCouplingAMRAttribute(amr,[("YY",1)],szGhost)
2875         att.spillNatures([IntensiveMaximum])
2876         att.alloc()
2877         yy=att.getFieldOn(amr,"YY") ; yy.iota(0.01)
2878         yy=att.getFieldOn(amr[0].getMesh(),"YY") ; yy.iota(0.02)
2879         yy=att.getFieldOn(amr[1].getMesh(),"YY") ; yy.iota(0.03)
2880         yy=att.getFieldOn(amr[0][0].getMesh(),"YY") ; yy.iota(0.04)
2881         yy=att.getFieldOn(amr[0][1].getMesh(),"YY") ; yy.iota(0.05)
2882         yy=att.getFieldOn(amr[0][2].getMesh(),"YY") ; yy.iota(0.06)
2883         yy=att.getFieldOn(amr[1][0].getMesh(),"YY") ; yy.iota(0.07)
2884         yy=att.getFieldOn(amr[1][1].getMesh(),"YY") ; yy.iota(0.08)
2885         yy=att.getFieldOn(amr[1][2].getMesh(),"YY") ; yy.iota(0.09)
2886         yy=att.getFieldOn(amr[1][3].getMesh(),"YY") ; yy.iota(0.10)
2887         yy=att.getFieldOn(amr[2].getMesh(),"YY") ; yy.iota(0.11)
2888         att2=att.deepCopy() ; att3=att2.deepCopy() ; att4=att3.deepCopy() ; att5=att4.deepCopy() ; att6=att5.deepCopy()
2889         ###
2890         att.synchronizeFineToCoarseBetween(2,1)
2891         ###
2892         for pos in [(),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(1,3)]:
2893             self.assertTrue(att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2894             pass
2895         for pos in [(0,),(1,)]:
2896             self.assertTrue(not att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2897             pass
2898         self.assertTrue(att.getFieldOn(amr[0].getMesh(),"YY").isEqualWithoutConsideringStr(DataArrayDouble([0.02,1.02,2.02,3.02,4.02,5.02,6.02,7.02,8.02,9.02,10.02,11.02,12.02,13.02,14.02,15.02,16.02,17.02,18.02,19.02,20.02,21.02,22.02,23.02,24.02,25.02,26.02,27.02,28.02,29.02,30.02,31.02,51.05,54.05,57.05,60.05,36.02,37.02,38.02,39.02,40.02,41.02,42.02,43.02,44.02,45.02,99.05,102.05,105.05,108.05,50.02,51.02,52.02,53.02,54.02,55.02,56.02,57.02,58.02,59.02,147.05,150.05,153.05,156.05,51.06,54.06,57.06,60.06,68.02,69.02,70.02,71.02,105.04,108.04,111.04,114.04,117.04,120.04,123.04,126.04,129.04,132.04,82.02,83.02,84.02,85.02,207.04,210.04,213.04,216.04,219.04,222.04,225.04,228.04,231.04,234.04,96.02,97.02,98.02,99.02,309.04,312.04,315.04,318.04,321.04,324.04,327.04,330.04,333.04,336.04,110.02,111.02,112.02,113.02,114.02,115.02,116.02,117.02,118.02,119.02,120.02,121.02,122.02,123.02,124.02,125.02,126.02,127.02,128.02,129.02,130.02,131.02,132.02,133.02,134.02,135.02,136.02,137.02,138.02,139.02]),1e-12))
2899         self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(DataArrayDouble([0.03,1.03,2.03,3.03,4.03,5.03,6.03,7.03,8.03,9.03,10.03,11.03,12.03,13.03,14.03,15.03,16.03,17.03,18.03,19.03,20.03,21.03,22.03,23.03,24.03,25.03,26.03,27.03,28.03,29.03,51.07,54.07,57.07,60.07,42.09,45.09,48.09,42.08,45.08,48.08,40.03,41.03,42.03,43.03,99.07,102.07,105.07,108.07,81.09,84.09,87.09,81.08,84.08,87.08,54.03,55.03,56.03,57.03,147.07,150.07,153.07,156.07,120.09,123.09,126.09,120.08,123.08,126.08,68.03,69.03,70.03,71.03,195.07,198.07,201.07,204.07,42.1,45.1,48.1,159.08,162.08,165.08,82.03,83.03,84.03,85.03,243.07,246.07,249.07,252.07,81.1,84.1,87.1,93.03,94.03,95.03,96.03,97.03,98.03,99.03,291.07,294.07,297.07,300.07,120.1,123.1,126.1,107.03,108.03,109.03,110.03,111.03,112.03,113.03,114.03,115.03,116.03,117.03,118.03,119.03,120.03,121.03,122.03,123.03,124.03,125.03,126.03,127.03,128.03,129.03,130.03,131.03,132.03,133.03,134.03,135.03,136.03,137.03,138.03,139.03]),1e-12))
2900         del att
2901         ####
2902         att2.synchronizeAllGhostZonesOfDirectChidrenOf(att2.getMyGodFather())
2903         ### Only the 3 (0) (1) and (2) are modified (0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,3) are not modified.
2904         exp2=DataArrayDouble([0.11,1.11,2.11,3.11,4.11,5.11,6.11,7.11,86.03,87.03,10.11,11.11,12.11,13.11,14.11,15.11,16.11,17.11,100.03,101.03,20.11,21.11,22.11,23.11,24.11,25.11,26.11,27.11,28.11,29.11,30.11,31.11,32.11,33.11,34.11,35.11,36.11,37.11,38.11,39.11,40.11,41.11,42.11,43.11,44.11,45.11,46.11,47.11,48.11,49.11,50.11,51.11,52.11,53.11,54.11,55.11,56.11,57.11,58.11,59.11,60.11,61.11,62.11,63.11,64.11,65.11,66.11,67.11,68.11,69.11,70.11,71.11,72.11,73.11,74.11,75.11,76.11,77.11,78.11,79.11,80.11,81.11,82.11,83.11,84.11,85.11,86.11,87.11,88.11,89.11,90.11,91.11,92.11,93.11,94.11,95.11,96.11,97.11,98.11,99.11,100.11,101.11,102.11,103.11,104.11,105.11,106.11,107.11,108.11,109.11,110.11,111.11,112.11,113.11,114.11,115.11,116.11,117.11,118.11,119.11])
2905         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((2,)),"YY").isEqualWithoutConsideringStr(exp2,1e-12))
2906         exp3=DataArrayDouble([0.03,1.03,86.02,87.02,88.02,89.02,90.02,91.02,92.02,93.02,94.02,95.02,12.03,13.03,14.03,15.03,100.02,101.02,102.02,103.02,104.02,105.02,106.02,107.02,108.02,109.02,26.03,27.03,28.03,29.03,30.03,31.03,32.03,33.03,34.03,35.03,36.03,37.03,38.03,39.03,40.03,41.03,42.03,43.03,44.03,45.03,46.03,47.03,48.03,49.03,50.03,51.03,52.03,53.03,54.03,55.03,56.03,57.03,58.03,59.03,60.03,61.03,62.03,63.03,64.03,65.03,66.03,67.03,68.03,69.03,70.03,71.03,72.03,73.03,74.03,75.03,76.03,77.03,78.03,79.03,80.03,81.03,82.03,83.03,84.03,85.03,86.03,87.03,88.03,89.03,90.03,91.03,92.03,93.03,94.03,95.03,96.03,97.03,98.03,99.03,100.03,101.03,102.03,103.03,104.03,105.03,106.03,107.03,108.03,109.03,110.03,111.03,26.11,27.11,114.03,115.03,116.03,117.03,118.03,119.03,120.03,121.03,122.03,123.03,124.03,125.03,36.11,37.11,128.03,129.03,130.03,131.03,132.03,133.03,134.03,135.03,136.03,137.03,138.03,139.03])
2907         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((1,)),"YY").isEqualWithoutConsideringStr(exp3,1e-12))
2908         exp4=DataArrayDouble([0.02,1.02,2.02,3.02,4.02,5.02,6.02,7.02,8.02,9.02,10.02,11.02,12.02,13.02,14.02,15.02,16.02,17.02,18.02,19.02,20.02,21.02,22.02,23.02,24.02,25.02,26.02,27.02,28.02,29.02,30.02,31.02,32.02,33.02,34.02,35.02,36.02,37.02,38.02,39.02,40.02,41.02,42.02,43.02,44.02,45.02,46.02,47.02,48.02,49.02,50.02,51.02,52.02,53.02,54.02,55.02,56.02,57.02,58.02,59.02,60.02,61.02,62.02,63.02,64.02,65.02,66.02,67.02,68.02,69.02,70.02,71.02,72.02,73.02,74.02,75.02,76.02,77.02,78.02,79.02,80.02,81.02,82.02,83.02,84.02,85.02,86.02,87.02,88.02,89.02,90.02,91.02,92.02,93.02,94.02,95.02,96.02,97.02,98.02,99.02,100.02,101.02,102.02,103.02,104.02,105.02,106.02,107.02,108.02,109.02,110.02,111.02,112.02,113.02,30.03,31.03,32.03,33.03,34.03,35.03,36.03,37.03,38.03,39.03,124.02,125.02,126.02,127.02,44.03,45.03,46.03,47.03,48.03,49.03,50.03,51.03,52.03,53.03,138.02,139.02])
2909         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((0,)),"YY").isEqualWithoutConsideringStr(exp4,1e-12))
2910         for pos,iot in [((),0.01),((0,0),0.04),((0,1),0.05),((0,2),0.06),((1,0),0.07),((1,1),0.08),((1,2),0.09),((1,3),0.10)]:
2911             vals=att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY")
2912             l=vals.getNumberOfTuples()
2913             exps=DataArrayDouble(l) ; exps.iota(iot)
2914             self.assertTrue(vals.isEqualWithoutConsideringStr(exps,1e-12))
2915             pass
2916         del att2
2917         ###
2918         att3.synchronizeCoarseToFineBetween(1,2)
2919         ###
2920         for pos in [(),(0,),(1,),(2,)]:
2921             self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2922             pass
2923         exp5=DataArrayDouble([57.02,57.02,58.02,58.02,58.02,59.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,57.02,57.02,58.02,58.02,58.02,59.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,71.02,71.02,72.02,72.02,72.02,73.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02,71.02,71.02,72.02,72.02,72.02,73.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02,71.02,71.02,72.02,72.02,72.02,73.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02,85.02,85.02,86.02,86.02,86.02,87.02,87.02,87.02,88.02,88.02,88.02,89.02,89.02,89.02,90.02,90.02,90.02,91.02,91.02,91.02,92.02,92.02,92.02,93.02,93.02,93.02,94.02,94.02,94.02,95.02,95.02,95.02,96.02,96.02,85.02,85.02,86.02,86.02,86.02,87.02,87.02,87.02,88.02,88.02,88.02,89.02,89.02,89.02,90.02,90.02,90.02,91.02,91.02,91.02,92.02,92.02,92.02,93.02,93.02,93.02,94.02,94.02,94.02,95.02,95.02,95.02,96.02,96.02,85.02,85.02,86.02,86.02,86.02,87.02,87.02,87.02,88.02,88.02,88.02,89.02,89.02,89.02,90.02,90.02,90.02,91.02,91.02,91.02,92.02,92.02,92.02,93.02,93.02,93.02,94.02,94.02,94.02,95.02,95.02,95.02,96.02,96.02,99.02,99.02,100.02,100.02,100.02,101.02,101.02,101.02,102.02,102.02,102.02,103.02,103.02,103.02,104.02,104.02,104.02,105.02,105.02,105.02,106.02,106.02,106.02,107.02,107.02,107.02,108.02,108.02,108.02,109.02,109.02,109.02,110.02,110.02,99.02,99.02,100.02,100.02,100.02,101.02,101.02,101.02,102.02,102.02,102.02,103.02,103.02,103.02,104.02,104.02,104.02,105.02,105.02,105.02,106.02,106.02,106.02,107.02,107.02,107.02,108.02,108.02,108.02,109.02,109.02,109.02,110.02,110.02,99.02,99.02,100.02,100.02,100.02,101.02,101.02,101.02,102.02,102.02,102.02,103.02,103.02,103.02,104.02,104.02,104.02,105.02,105.02,105.02,106.02,106.02,106.02,107.02,107.02,107.02,108.02,108.02,108.02,109.02,109.02,109.02,110.02,110.02,113.02,113.02,114.02,114.02,114.02,115.02,115.02,115.02,116.02,116.02,116.02,117.02,117.02,117.02,118.02,118.02,118.02,119.02,119.02,119.02,120.02,120.02,120.02,121.02,121.02,121.02,122.02,122.02,122.02,123.02,123.02,123.02,124.02,124.02,113.02,113.02,114.02,114.02,114.02,115.02,115.02,115.02,116.02,116.02,116.02,117.02,117.02,117.02,118.02,118.02,118.02,119.02,119.02,119.02,120.02,120.02,120.02,121.02,121.02,121.02,122.02,122.02,122.02,123.02,123.02,123.02,124.02,124.02])
2924         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp5,1e-12))
2925         exp6=DataArrayDouble([17.02,17.02,18.02,18.02,18.02,19.02,19.02,19.02,20.02,20.02,20.02,21.02,21.02,21.02,22.02,22.02,17.02,17.02,18.02,18.02,18.02,19.02,19.02,19.02,20.02,20.02,20.02,21.02,21.02,21.02,22.02,22.02,31.02,31.02,32.02,32.02,32.02,33.02,33.02,33.02,34.02,34.02,34.02,35.02,35.02,35.02,36.02,36.02,31.02,31.02,32.02,32.02,32.02,33.02,33.02,33.02,34.02,34.02,34.02,35.02,35.02,35.02,36.02,36.02,31.02,31.02,32.02,32.02,32.02,33.02,33.02,33.02,34.02,34.02,34.02,35.02,35.02,35.02,36.02,36.02,45.02,45.02,46.02,46.02,46.02,47.02,47.02,47.02,48.02,48.02,48.02,49.02,49.02,49.02,50.02,50.02,45.02,45.02,46.02,46.02,46.02,47.02,47.02,47.02,48.02,48.02,48.02,49.02,49.02,49.02,50.02,50.02,45.02,45.02,46.02,46.02,46.02,47.02,47.02,47.02,48.02,48.02,48.02,49.02,49.02,49.02,50.02,50.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02])
2926         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp6,1e-12))
2927         exp7=DataArrayDouble([49.02,49.02,50.02,50.02,50.02,51.02,51.02,51.02,52.02,52.02,52.02,53.02,53.02,53.02,54.02,54.02,49.02,49.02,50.02,50.02,50.02,51.02,51.02,51.02,52.02,52.02,52.02,53.02,53.02,53.02,54.02,54.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02])
2928         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp7,1e-12))
2929         exp8=DataArrayDouble([15.03,15.03,16.03,16.03,16.03,17.03,17.03,17.03,18.03,18.03,18.03,19.03,19.03,19.03,20.03,20.03,15.03,15.03,16.03,16.03,16.03,17.03,17.03,17.03,18.03,18.03,18.03,19.03,19.03,19.03,20.03,20.03,29.03,29.03,30.03,30.03,30.03,31.03,31.03,31.03,32.03,32.03,32.03,33.03,33.03,33.03,34.03,34.03,29.03,29.03,30.03,30.03,30.03,31.03,31.03,31.03,32.03,32.03,32.03,33.03,33.03,33.03,34.03,34.03,29.03,29.03,30.03,30.03,30.03,31.03,31.03,31.03,32.03,32.03,32.03,33.03,33.03,33.03,34.03,34.03,43.03,43.03,44.03,44.03,44.03,45.03,45.03,45.03,46.03,46.03,46.03,47.03,47.03,47.03,48.03,48.03,43.03,43.03,44.03,44.03,44.03,45.03,45.03,45.03,46.03,46.03,46.03,47.03,47.03,47.03,48.03,48.03,43.03,43.03,44.03,44.03,44.03,45.03,45.03,45.03,46.03,46.03,46.03,47.03,47.03,47.03,48.03,48.03,57.03,57.03,58.03,58.03,58.03,59.03,59.03,59.03,60.03,60.03,60.03,61.03,61.03,61.03,62.03,62.03,57.03,57.03,58.03,58.03,58.03,59.03,59.03,59.03,60.03,60.03,60.03,61.03,61.03,61.03,62.03,62.03,57.03,57.03,58.03,58.03,58.03,59.03,59.03,59.03,60.03,60.03,60.03,61.03,61.03,61.03,62.03,62.03,71.03,71.03,72.03,72.03,72.03,73.03,73.03,73.03,74.03,74.03,74.03,75.03,75.03,75.03,76.03,76.03,71.03,71.03,72.03,72.03,72.03,73.03,73.03,73.03,74.03,74.03,74.03,75.03,75.03,75.03,76.03,76.03,71.03,71.03,72.03,72.03,72.03,73.03,73.03,73.03,74.03,74.03,74.03,75.03,75.03,75.03,76.03,76.03,85.03,85.03,86.03,86.03,86.03,87.03,87.03,87.03,88.03,88.03,88.03,89.03,89.03,89.03,90.03,90.03,85.03,85.03,86.03,86.03,86.03,87.03,87.03,87.03,88.03,88.03,88.03,89.03,89.03,89.03,90.03,90.03,85.03,85.03,86.03,86.03,86.03,87.03,87.03,87.03,88.03,88.03,88.03,89.03,89.03,89.03,90.03,90.03,99.03,99.03,100.03,100.03,100.03,101.03,101.03,101.03,102.03,102.03,102.03,103.03,103.03,103.03,104.03,104.03,99.03,99.03,100.03,100.03,100.03,101.03,101.03,101.03,102.03,102.03,102.03,103.03,103.03,103.03,104.03,104.03,99.03,99.03,100.03,100.03,100.03,101.03,101.03,101.03,102.03,102.03,102.03,103.03,103.03,103.03,104.03,104.03,113.03,113.03,114.03,114.03,114.03,115.03,115.03,115.03,116.03,116.03,116.03,117.03,117.03,117.03,118.03,118.03,113.03,113.03,114.03,114.03,114.03,115.03,115.03,115.03,116.03,116.03,116.03,117.03,117.03,117.03,118.03,118.03])
2930         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp8,1e-12))
2931         exp9=DataArrayDouble([22.03,22.03,23.03,23.03,23.03,24.03,24.03,24.03,25.03,25.03,25.03,26.03,26.03,22.03,22.03,23.03,23.03,23.03,24.03,24.03,24.03,25.03,25.03,25.03,26.03,26.03,36.03,36.03,37.03,37.03,37.03,38.03,38.03,38.03,39.03,39.03,39.03,40.03,40.03,36.03,36.03,37.03,37.03,37.03,38.03,38.03,38.03,39.03,39.03,39.03,40.03,40.03,36.03,36.03,37.03,37.03,37.03,38.03,38.03,38.03,39.03,39.03,39.03,40.03,40.03,50.03,50.03,51.03,51.03,51.03,52.03,52.03,52.03,53.03,53.03,53.03,54.03,54.03,50.03,50.03,51.03,51.03,51.03,52.03,52.03,52.03,53.03,53.03,53.03,54.03,54.03,50.03,50.03,51.03,51.03,51.03,52.03,52.03,52.03,53.03,53.03,53.03,54.03,54.03,64.03,64.03,65.03,65.03,65.03,66.03,66.03,66.03,67.03,67.03,67.03,68.03,68.03,64.03,64.03,65.03,65.03,65.03,66.03,66.03,66.03,67.03,67.03,67.03,68.03,68.03,64.03,64.03,65.03,65.03,65.03,66.03,66.03,66.03,67.03,67.03,67.03,68.03,68.03,78.03,78.03,79.03,79.03,79.03,80.03,80.03,80.03,81.03,81.03,81.03,82.03,82.03,78.03,78.03,79.03,79.03,79.03,80.03,80.03,80.03,81.03,81.03,81.03,82.03,82.03,78.03,78.03,79.03,79.03,79.03,80.03,80.03,80.03,81.03,81.03,81.03,82.03,82.03,92.03,92.03,93.03,93.03,93.03,94.03,94.03,94.03,95.03,95.03,95.03,96.03,96.03,92.03,92.03,93.03,93.03,93.03,94.03,94.03,94.03,95.03,95.03,95.03,96.03,96.03])
2932         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp9,1e-12))
2933         exp10=DataArrayDouble([19.03,19.03,20.03,20.03,20.03,21.03,21.03,21.03,22.03,22.03,22.03,23.03,23.03,19.03,19.03,20.03,20.03,20.03,21.03,21.03,21.03,22.03,22.03,22.03,23.03,23.03,33.03,33.03,34.03,34.03,34.03,35.03,35.03,35.03,36.03,36.03,36.03,37.03,37.03,33.03,33.03,34.03,34.03,34.03,35.03,35.03,35.03,36.03,36.03,36.03,37.03,37.03,33.03,33.03,34.03,34.03,34.03,35.03,35.03,35.03,36.03,36.03,36.03,37.03,37.03,47.03,47.03,48.03,48.03,48.03,49.03,49.03,49.03,50.03,50.03,50.03,51.03,51.03,47.03,47.03,48.03,48.03,48.03,49.03,49.03,49.03,50.03,50.03,50.03,51.03,51.03,47.03,47.03,48.03,48.03,48.03,49.03,49.03,49.03,50.03,50.03,50.03,51.03,51.03,61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03])
2934         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp10,1e-12))
2935         exp11=DataArrayDouble([61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,89.03,89.03,90.03,90.03,90.03,91.03,91.03,91.03,92.03,92.03,92.03,93.03,93.03,89.03,89.03,90.03,90.03,90.03,91.03,91.03,91.03,92.03,92.03,92.03,93.03,93.03,89.03,89.03,90.03,90.03,90.03,91.03,91.03,91.03,92.03,92.03,92.03,93.03,93.03,103.03,103.03,104.03,104.03,104.03,105.03,105.03,105.03,106.03,106.03,106.03,107.03,107.03,103.03,103.03,104.03,104.03,104.03,105.03,105.03,105.03,106.03,106.03,106.03,107.03,107.03,103.03,103.03,104.03,104.03,104.03,105.03,105.03,105.03,106.03,106.03,106.03,107.03,107.03,117.03,117.03,118.03,118.03,118.03,119.03,119.03,119.03,120.03,120.03,120.03,121.03,121.03,117.03,117.03,118.03,118.03,118.03,119.03,119.03,119.03,120.03,120.03,120.03,121.03,121.03])
2936         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp11,1e-12))
2937         del att3
2938         ###
2939         att4.synchronizeAllGhostZonesAtASpecifiedLevel(2)
2940         for pos in [(),(0,),(1,),(2,)]:
2941             self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2942             pass
2943         exp12=DataArrayDouble([0.04,1.04,2.04,3.04,4.04,5.04,6.04,7.04,146.05,147.05,148.05,149.05,150.05,151.05,152.05,153.05,154.05,155.05,156.05,157.05,50.06,51.06,52.06,53.06,54.06,55.06,56.06,57.06,58.06,59.06,60.06,61.06,32.04,33.04,34.04,35.04,36.04,37.04,38.04,39.04,40.04,41.04,162.05,163.05,164.05,165.05,166.05,167.05,168.05,169.05,170.05,171.05,172.05,173.05,66.06,67.06,68.06,69.06,70.06,71.06,72.06,73.06,74.06,75.06,76.06,77.06,66.04,67.04,68.04,69.04,70.04,71.04,72.04,73.04,74.04,75.04,76.04,77.04,78.04,79.04,80.04,81.04,82.04,83.04,84.04,85.04,86.04,87.04,88.04,89.04,90.04,91.04,92.04,93.04,94.04,95.04,96.04,97.04,98.04,99.04,100.04,101.04,102.04,103.04,104.04,105.04,106.04,107.04,108.04,109.04,110.04,111.04,112.04,113.04,114.04,115.04,116.04,117.04,118.04,119.04,120.04,121.04,122.04,123.04,124.04,125.04,126.04,127.04,128.04,129.04,130.04,131.04,132.04,133.04,134.04,135.04,136.04,137.04,138.04,139.04,140.04,141.04,142.04,143.04,144.04,145.04,146.04,147.04,148.04,149.04,150.04,151.04,152.04,153.04,154.04,155.04,156.04,157.04,158.04,159.04,160.04,161.04,162.04,163.04,164.04,165.04,166.04,167.04,168.04,169.04,170.04,171.04,172.04,173.04,174.04,175.04,176.04,177.04,178.04,179.04,180.04,181.04,182.04,183.04,184.04,185.04,186.04,187.04,188.04,189.04,190.04,191.04,192.04,193.04,194.04,195.04,196.04,197.04,198.04,199.04,200.04,201.04,202.04,203.04,204.04,205.04,206.04,207.04,208.04,209.04,210.04,211.04,212.04,213.04,214.04,215.04,216.04,217.04,218.04,219.04,220.04,221.04,222.04,223.04,224.04,225.04,226.04,227.04,228.04,229.04,230.04,231.04,232.04,233.04,234.04,235.04,236.04,237.04,238.04,239.04,240.04,241.04,242.04,243.04,244.04,245.04,246.04,247.04,248.04,249.04,250.04,251.04,252.04,253.04,254.04,255.04,256.04,257.04,258.04,259.04,260.04,261.04,262.04,263.04,264.04,265.04,266.04,267.04,268.04,269.04,270.04,271.04,272.04,273.04,274.04,275.04,276.04,277.04,278.04,279.04,280.04,281.04,282.04,283.04,284.04,285.04,286.04,287.04,288.04,289.04,290.04,291.04,292.04,293.04,294.04,295.04,296.04,297.04,298.04,299.04,300.04,301.04,302.04,303.04,304.04,305.04,306.04,307.04,308.04,309.04,310.04,311.04,312.04,313.04,314.04,315.04,316.04,317.04,318.04,319.04,320.04,321.04,322.04,323.04,324.04,325.04,326.04,327.04,328.04,329.04,330.04,331.04,332.04,333.04,334.04,335.04,336.04,337.04,338.04,339.04,340.04,341.04,342.04,343.04,344.04,345.04,346.04,347.04,348.04,349.04,350.04,351.04,352.04,353.04,354.04,355.04,356.04,357.04,358.04,359.04,360.04,361.04,362.04,363.04,364.04,365.04,366.04,367.04,368.04,369.04,370.04,371.04,372.04,373.04,374.04,375.04,34.07,35.07,36.07,37.07,38.07,39.07,40.07,41.07,42.07,43.07,44.07,45.07,28.09,29.09,30.09,31.09,32.09,33.09,34.09,35.09,36.09,28.08,29.08,30.08,31.08,32.08,33.08,34.08,35.08,36.08,406.04,407.04,408.04,409.04,50.07,51.07,52.07,53.07,54.07,55.07,56.07,57.07,58.07,59.07,60.07,61.07,41.09,42.09,43.09,44.09,45.09,46.09,47.09,48.09,49.09,41.08,42.08,43.08,44.08,45.08,46.08,47.08,48.08,49.08,440.04,441.04])
2944         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp12,1e-12))
2945         exp13=DataArrayDouble([[0.05,1.05,2.05,3.05,4.05,5.05,6.05,7.05,8.05,9.05,10.05,11.05,12.05,13.05,14.05,15.05,16.05,17.05,18.05,19.05,20.05,21.05,22.05,23.05,24.05,25.05,26.05,27.05,28.05,29.05,30.05,31.05,32.05,33.05,34.05,35.05,36.05,37.05,38.05,39.05,40.05,41.05,42.05,43.05,44.05,45.05,46.05,47.05,48.05,49.05,50.05,51.05,52.05,53.05,54.05,55.05,56.05,57.05,58.05,59.05,60.05,61.05,62.05,63.05,64.05,65.05,66.05,67.05,68.05,69.05,70.05,71.05,72.05,73.05,74.05,75.05,76.05,77.05,78.05,79.05,80.05,81.05,82.05,83.05,84.05,85.05,86.05,87.05,88.05,89.05,90.05,91.05,92.05,93.05,94.05,95.05,96.05,97.05,98.05,99.05,100.05,101.05,102.05,103.05,104.05,105.05,106.05,107.05,108.05,109.05,110.05,111.05,112.05,113.05,114.05,115.05,116.05,117.05,118.05,119.05,120.05,121.05,122.05,123.05,124.05,125.05,126.05,127.05,128.05,129.05,130.05,131.05,132.05,133.05,134.05,135.05,136.05,137.05,138.05,139.05,140.05,141.05,34.06,35.06,144.05,145.05,146.05,147.05,148.05,149.05,150.05,151.05,152.05,153.05,154.05,155.05,156.05,157.05,50.06,51.06,160.05,161.05,162.05,163.05,164.05,165.05,166.05,167.05,168.05,169.05,170.05,171.05,172.05,173.05,66.06,67.06,74.04,75.04,76.04,77.04,78.04,79.04,80.04,81.04,82.04,83.04,84.04,85.04,86.04,87.04,88.04,89.04,108.04,109.04,110.04,111.04,112.04,113.04,114.04,115.04,116.04,117.04,118.04,119.04,120.04,121.04,122.04,123.04]])
2946         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp13,1e-12))
2947         exp14=DataArrayDouble([108.05,109.05,2.06,3.06,4.06,5.06,6.06,7.06,8.06,9.06,10.06,11.06,12.06,13.06,14.06,15.06,124.05,125.05,18.06,19.06,20.06,21.06,22.06,23.06,24.06,25.06,26.06,27.06,28.06,29.06,30.06,31.06,140.05,141.05,34.06,35.06,36.06,37.06,38.06,39.06,40.06,41.06,42.06,43.06,44.06,45.06,46.06,47.06,156.05,157.05,50.06,51.06,52.06,53.06,54.06,55.06,56.06,57.06,58.06,59.06,60.06,61.06,62.06,63.06,172.05,173.05,66.06,67.06,68.06,69.06,70.06,71.06,72.06,73.06,74.06,75.06,76.06,77.06,78.06,79.06,86.04,87.04,88.04,89.04,90.04,91.04,92.04,93.04,94.04,95.04,96.04,97.04,98.04,99.04,94.06,95.06,120.04,121.04,122.04,123.04,124.04,125.04,126.04,127.04,128.04,129.04,130.04,131.04,132.04,133.04,110.06,111.06])
2948         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp14,1e-12))
2949         exp15=DataArrayDouble([0.07,1.07,308.04,309.04,310.04,311.04,312.04,313.04,314.04,315.04,316.04,317.04,318.04,319.04,320.04,321.04,16.07,17.07,342.04,343.04,344.04,345.04,346.04,347.04,348.04,349.04,350.04,351.04,352.04,353.04,354.04,355.04,32.07,33.07,34.07,35.07,36.07,37.07,38.07,39.07,40.07,41.07,42.07,43.07,44.07,45.07,28.09,29.09,48.07,49.07,50.07,51.07,52.07,53.07,54.07,55.07,56.07,57.07,58.07,59.07,60.07,61.07,41.09,42.09,64.07,65.07,66.07,67.07,68.07,69.07,70.07,71.07,72.07,73.07,74.07,75.07,76.07,77.07,54.09,55.09,80.07,81.07,82.07,83.07,84.07,85.07,86.07,87.07,88.07,89.07,90.07,91.07,92.07,93.07,67.09,68.09,96.07,97.07,98.07,99.07,100.07,101.07,102.07,103.07,104.07,105.07,106.07,107.07,108.07,109.07,80.09,81.09,112.07,113.07,114.07,115.07,116.07,117.07,118.07,119.07,120.07,121.07,122.07,123.07,124.07,125.07,93.09,94.09,128.07,129.07,130.07,131.07,132.07,133.07,134.07,135.07,136.07,137.07,138.07,139.07,140.07,141.07,106.09,107.09,144.07,145.07,146.07,147.07,148.07,149.07,150.07,151.07,152.07,153.07,154.07,155.07,156.07,157.07,119.09,120.09,160.07,161.07,162.07,163.07,164.07,165.07,166.07,167.07,168.07,169.07,170.07,171.07,172.07,173.07,132.09,133.09,176.07,177.07,178.07,179.07,180.07,181.07,182.07,183.07,184.07,185.07,186.07,187.07,188.07,189.07,28.1,29.1,192.07,193.07,194.07,195.07,196.07,197.07,198.07,199.07,200.07,201.07,202.07,203.07,204.07,205.07,41.1,42.1,208.07,209.07,210.07,211.07,212.07,213.07,214.07,215.07,216.07,217.07,218.07,219.07,220.07,221.07,54.1,55.1,224.07,225.07,226.07,227.07,228.07,229.07,230.07,231.07,232.07,233.07,234.07,235.07,236.07,237.07,67.1,68.1,240.07,241.07,242.07,243.07,244.07,245.07,246.07,247.07,248.07,249.07,250.07,251.07,252.07,253.07,80.1,81.1,256.07,257.07,258.07,259.07,260.07,261.07,262.07,263.07,264.07,265.07,266.07,267.07,268.07,269.07,93.1,94.1,272.07,273.07,274.07,275.07,276.07,277.07,278.07,279.07,280.07,281.07,282.07,283.07,284.07,285.07,106.1,107.1,288.07,289.07,290.07,291.07,292.07,293.07,294.07,295.07,296.07,297.07,298.07,299.07,300.07,301.07,119.1,120.1,304.07,305.07,306.07,307.07,308.07,309.07,310.07,311.07,312.07,313.07,314.07,315.07,316.07,317.07,132.1,133.1,320.07,321.07,322.07,323.07,324.07,325.07,326.07,327.07,328.07,329.07,330.07,331.07,332.07,333.07,334.07,335.07,336.07,337.07,338.07,339.07,340.07,341.07,342.07,343.07,344.07,345.07,346.07,347.07,348.07,349.07,350.07,351.07])
2950         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp15,1e-12))
2951         exp16=DataArrayDouble([327.04,328.04,329.04,330.04,331.04,332.04,333.04,334.04,335.04,336.04,337.04,11.08,12.08,361.04,362.04,363.04,364.04,365.04,366.04,367.04,368.04,369.04,370.04,371.04,24.08,25.08,35.09,36.09,28.08,29.08,30.08,31.08,32.08,33.08,34.08,35.08,36.08,37.08,38.08,48.09,49.09,41.08,42.08,43.08,44.08,45.08,46.08,47.08,48.08,49.08,50.08,51.08,61.09,62.09,54.08,55.08,56.08,57.08,58.08,59.08,60.08,61.08,62.08,63.08,64.08,74.09,75.09,67.08,68.08,69.08,70.08,71.08,72.08,73.08,74.08,75.08,76.08,77.08,87.09,88.09,80.08,81.08,82.08,83.08,84.08,85.08,86.08,87.08,88.08,89.08,90.08,100.09,101.09,93.08,94.08,95.08,96.08,97.08,98.08,99.08,100.08,101.08,102.08,103.08,113.09,114.09,106.08,107.08,108.08,109.08,110.08,111.08,112.08,113.08,114.08,115.08,116.08,126.09,127.09,119.08,120.08,121.08,122.08,123.08,124.08,125.08,126.08,127.08,128.08,129.08,139.09,140.09,132.08,133.08,134.08,135.08,136.08,137.08,138.08,139.08,140.08,141.08,142.08,35.1,36.1,145.08,146.08,147.08,148.08,149.08,150.08,151.08,152.08,153.08,154.08,155.08,48.1,49.1,158.08,159.08,160.08,161.08,162.08,163.08,164.08,165.08,166.08,167.08,168.08,61.1,62.1,171.08,172.08,173.08,174.08,175.08,176.08,177.08,178.08,179.08,180.08,181.08,74.1,75.1,184.08,185.08,186.08,187.08,188.08,189.08,190.08,191.08,192.08,193.08,194.08,87.1,88.1,197.08,198.08,199.08,200.08,201.08,202.08,203.08,204.08,205.08,206.08,207.08])
2952         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp16,1e-12))
2953         exp17=DataArrayDouble([318.04,319.04,320.04,321.04,322.04,323.04,324.04,325.04,326.04,327.04,328.04,329.04,330.04,352.04,353.04,354.04,355.04,356.04,357.04,358.04,359.04,360.04,361.04,362.04,363.04,364.04,44.07,45.07,28.09,29.09,30.09,31.09,32.09,33.09,34.09,35.09,36.09,28.08,29.08,60.07,61.07,41.09,42.09,43.09,44.09,45.09,46.09,47.09,48.09,49.09,41.08,42.08,76.07,77.07,54.09,55.09,56.09,57.09,58.09,59.09,60.09,61.09,62.09,54.08,55.08,92.07,93.07,67.09,68.09,69.09,70.09,71.09,72.09,73.09,74.09,75.09,67.08,68.08,108.07,109.07,80.09,81.09,82.09,83.09,84.09,85.09,86.09,87.09,88.09,80.08,81.08,124.07,125.07,93.09,94.09,95.09,96.09,97.09,98.09,99.09,100.09,101.09,93.08,94.08,140.07,141.07,106.09,107.09,108.09,109.09,110.09,111.09,112.09,113.09,114.09,106.08,107.08,156.07,157.07,119.09,120.09,121.09,122.09,123.09,124.09,125.09,126.09,127.09,119.08,120.08,172.07,173.07,132.09,133.09,134.09,135.09,136.09,137.09,138.09,139.09,140.09,132.08,133.08,188.07,189.07,28.1,29.1,30.1,31.1,32.1,33.1,34.1,35.1,36.1,145.08,146.08,204.07,205.07,41.1,42.1,43.1,44.1,45.1,46.1,47.1,48.1,49.1,158.08,159.08])
2954         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp17,1e-12))
2955         exp18=DataArrayDouble([156.07,157.07,119.09,120.09,121.09,122.09,123.09,124.09,125.09,126.09,127.09,119.08,120.08,172.07,173.07,132.09,133.09,134.09,135.09,136.09,137.09,138.09,139.09,140.09,132.08,133.08,188.07,189.07,28.1,29.1,30.1,31.1,32.1,33.1,34.1,35.1,36.1,145.08,146.08,204.07,205.07,41.1,42.1,43.1,44.1,45.1,46.1,47.1,48.1,49.1,158.08,159.08,220.07,221.07,54.1,55.1,56.1,57.1,58.1,59.1,60.1,61.1,62.1,171.08,172.08,236.07,237.07,67.1,68.1,69.1,70.1,71.1,72.1,73.1,74.1,75.1,76.1,77.1,252.07,253.07,80.1,81.1,82.1,83.1,84.1,85.1,86.1,87.1,88.1,89.1,90.1,268.07,269.07,93.1,94.1,95.1,96.1,97.1,98.1,99.1,100.1,101.1,102.1,103.1,284.07,285.07,106.1,107.1,108.1,109.1,110.1,111.1,112.1,113.1,114.1,115.1,116.1,300.07,301.07,119.1,120.1,121.1,122.1,123.1,124.1,125.1,126.1,127.1,128.1,129.1,316.07,317.07,132.1,133.1,134.1,135.1,136.1,137.1,138.1,139.1,140.1,141.1,142.1,143.1,144.1,145.1,146.1,147.1,148.1,149.1,150.1,151.1,152.1,153.1,154.1,155.1,156.1,157.1,158.1,159.1,160.1,161.1,162.1,163.1,164.1,165.1,166.1,167.1,168.1])
2956         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp18,1e-12))
2957         del att4
2958         ###
2959         att5.synchronizeAllGhostZonesAtASpecifiedLevelUsingOnlyFather(2)
2960         for pos in [(),(0,),(1,),(2,)]:
2961             self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att6.getFieldOn(att6.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2962             pass
2963         att5.buildCellFieldOnWithGhost(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY")
2964         exp19=DataArrayDouble([57.02,57.02,58.02,58.02,58.02,59.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,57.02,57.02,58.02,58.02,58.02,59.02,59.02,59.02,60.02,60.02,60.02,61.02,61.02,61.02,62.02,62.02,62.02,63.02,63.02,63.02,64.02,64.02,64.02,65.02,65.02,65.02,66.02,66.02,66.02,67.02,67.02,67.02,68.02,68.02,71.02,71.02,70.04,71.04,72.04,73.04,74.04,75.04,76.04,77.04,78.04,79.04,80.04,81.04,82.04,83.04,84.04,85.04,86.04,87.04,88.04,89.04,90.04,91.04,92.04,93.04,94.04,95.04,96.04,97.04,98.04,99.04,82.02,82.02,71.02,71.02,104.04,105.04,106.04,107.04,108.04,109.04,110.04,111.04,112.04,113.04,114.04,115.04,116.04,117.04,118.04,119.04,120.04,121.04,122.04,123.04,124.04,125.04,126.04,127.04,128.04,129.04,130.04,131.04,132.04,133.04,82.02,82.02,71.02,71.02,138.04,139.04,140.04,141.04,142.04,143.04,144.04,145.04,146.04,147.04,148.04,149.04,150.04,151.04,152.04,153.04,154.04,155.04,156.04,157.04,158.04,159.04,160.04,161.04,162.04,163.04,164.04,165.04,166.04,167.04,82.02,82.02,85.02,85.02,172.04,173.04,174.04,175.04,176.04,177.04,178.04,179.04,180.04,181.04,182.04,183.04,184.04,185.04,186.04,187.04,188.04,189.04,190.04,191.04,192.04,193.04,194.04,195.04,196.04,197.04,198.04,199.04,200.04,201.04,96.02,96.02,85.02,85.02,206.04,207.04,208.04,209.04,210.04,211.04,212.04,213.04,214.04,215.04,216.04,217.04,218.04,219.04,220.04,221.04,222.04,223.04,224.04,225.04,226.04,227.04,228.04,229.04,230.04,231.04,232.04,233.04,234.04,235.04,96.02,96.02,85.02,85.02,240.04,241.04,242.04,243.04,244.04,245.04,246.04,247.04,248.04,249.04,250.04,251.04,252.04,253.04,254.04,255.04,256.04,257.04,258.04,259.04,260.04,261.04,262.04,263.04,264.04,265.04,266.04,267.04,268.04,269.04,96.02,96.02,99.02,99.02,274.04,275.04,276.04,277.04,278.04,279.04,280.04,281.04,282.04,283.04,284.04,285.04,286.04,287.04,288.04,289.04,290.04,291.04,292.04,293.04,294.04,295.04,296.04,297.04,298.04,299.04,300.04,301.04,302.04,303.04,110.02,110.02,99.02,99.02,308.04,309.04,310.04,311.04,312.04,313.04,314.04,315.04,316.04,317.04,318.04,319.04,320.04,321.04,322.04,323.04,324.04,325.04,326.04,327.04,328.04,329.04,330.04,331.04,332.04,333.04,334.04,335.04,336.04,337.04,110.02,110.02,99.02,99.02,342.04,343.04,344.04,345.04,346.04,347.04,348.04,349.04,350.04,351.04,352.04,353.04,354.04,355.04,356.04,357.04,358.04,359.04,360.04,361.04,362.04,363.04,364.04,365.04,366.04,367.04,368.04,369.04,370.04,371.04,110.02,110.02,113.02,113.02,114.02,114.02,114.02,115.02,115.02,115.02,116.02,116.02,116.02,117.02,117.02,117.02,118.02,118.02,118.02,119.02,119.02,119.02,120.02,120.02,120.02,121.02,121.02,121.02,122.02,122.02,122.02,123.02,123.02,123.02,124.02,124.02,113.02,113.02,114.02,114.02,114.02,115.02,115.02,115.02,116.02,116.02,116.02,117.02,117.02,117.02,118.02,118.02,118.02,119.02,119.02,119.02,120.02,120.02,120.02,121.02,121.02,121.02,122.02,122.02,122.02,123.02,123.02,123.02,124.02,124.02])
2965         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp19,1e-12))
2966         exp20=DataArrayDouble([17.02,17.02,18.02,18.02,18.02,19.02,19.02,19.02,20.02,20.02,20.02,21.02,21.02,21.02,22.02,22.02,17.02,17.02,18.02,18.02,18.02,19.02,19.02,19.02,20.02,20.02,20.02,21.02,21.02,21.02,22.02,22.02,31.02,31.02,34.05,35.05,36.05,37.05,38.05,39.05,40.05,41.05,42.05,43.05,44.05,45.05,36.02,36.02,31.02,31.02,50.05,51.05,52.05,53.05,54.05,55.05,56.05,57.05,58.05,59.05,60.05,61.05,36.02,36.02,31.02,31.02,66.05,67.05,68.05,69.05,70.05,71.05,72.05,73.05,74.05,75.05,76.05,77.05,36.02,36.02,45.02,45.02,82.05,83.05,84.05,85.05,86.05,87.05,88.05,89.05,90.05,91.05,92.05,93.05,50.02,50.02,45.02,45.02,98.05,99.05,100.05,101.05,102.05,103.05,104.05,105.05,106.05,107.05,108.05,109.05,50.02,50.02,45.02,45.02,114.05,115.05,116.05,117.05,118.05,119.05,120.05,121.05,122.05,123.05,124.05,125.05,50.02,50.02,59.02,59.02,130.05,131.05,132.05,133.05,134.05,135.05,136.05,137.05,138.05,139.05,140.05,141.05,64.02,64.02,59.02,59.02,146.05,147.05,148.05,149.05,150.05,151.05,152.05,153.05,154.05,155.05,156.05,157.05,64.02,64.02,59.02,59.02,162.05,163.05,164.05,165.05,166.05,167.05,168.05,169.05,170.05,171.05,172.05,173.05,64.02,64.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02,73.02,73.02,74.02,74.02,74.02,75.02,75.02,75.02,76.02,76.02,76.02,77.02,77.02,77.02,78.02,78.02])
2967         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp20,1e-12))
2968         exp21=DataArrayDouble([49.02,49.02,50.02,50.02,50.02,51.02,51.02,51.02,52.02,52.02,52.02,53.02,53.02,53.02,54.02,54.02,49.02,49.02,50.02,50.02,50.02,51.02,51.02,51.02,52.02,52.02,52.02,53.02,53.02,53.02,54.02,54.02,63.02,63.02,34.06,35.06,36.06,37.06,38.06,39.06,40.06,41.06,42.06,43.06,44.06,45.06,68.02,68.02,63.02,63.02,50.06,51.06,52.06,53.06,54.06,55.06,56.06,57.06,58.06,59.06,60.06,61.06,68.02,68.02,63.02,63.02,66.06,67.06,68.06,69.06,70.06,71.06,72.06,73.06,74.06,75.06,76.06,77.06,68.02,68.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02,77.02,77.02,78.02,78.02,78.02,79.02,79.02,79.02,80.02,80.02,80.02,81.02,81.02,81.02,82.02,82.02])
2969         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp21,1e-12))
2970         exp22=DataArrayDouble([15.03,15.03,16.03,16.03,16.03,17.03,17.03,17.03,18.03,18.03,18.03,19.03,19.03,19.03,20.03,20.03,15.03,15.03,16.03,16.03,16.03,17.03,17.03,17.03,18.03,18.03,18.03,19.03,19.03,19.03,20.03,20.03,29.03,29.03,34.07,35.07,36.07,37.07,38.07,39.07,40.07,41.07,42.07,43.07,44.07,45.07,34.03,34.03,29.03,29.03,50.07,51.07,52.07,53.07,54.07,55.07,56.07,57.07,58.07,59.07,60.07,61.07,34.03,34.03,29.03,29.03,66.07,67.07,68.07,69.07,70.07,71.07,72.07,73.07,74.07,75.07,76.07,77.07,34.03,34.03,43.03,43.03,82.07,83.07,84.07,85.07,86.07,87.07,88.07,89.07,90.07,91.07,92.07,93.07,48.03,48.03,43.03,43.03,98.07,99.07,100.07,101.07,102.07,103.07,104.07,105.07,106.07,107.07,108.07,109.07,48.03,48.03,43.03,43.03,114.07,115.07,116.07,117.07,118.07,119.07,120.07,121.07,122.07,123.07,124.07,125.07,48.03,48.03,57.03,57.03,130.07,131.07,132.07,133.07,134.07,135.07,136.07,137.07,138.07,139.07,140.07,141.07,62.03,62.03,57.03,57.03,146.07,147.07,148.07,149.07,150.07,151.07,152.07,153.07,154.07,155.07,156.07,157.07,62.03,62.03,57.03,57.03,162.07,163.07,164.07,165.07,166.07,167.07,168.07,169.07,170.07,171.07,172.07,173.07,62.03,62.03,71.03,71.03,178.07,179.07,180.07,181.07,182.07,183.07,184.07,185.07,186.07,187.07,188.07,189.07,76.03,76.03,71.03,71.03,194.07,195.07,196.07,197.07,198.07,199.07,200.07,201.07,202.07,203.07,204.07,205.07,76.03,76.03,71.03,71.03,210.07,211.07,212.07,213.07,214.07,215.07,216.07,217.07,218.07,219.07,220.07,221.07,76.03,76.03,85.03,85.03,226.07,227.07,228.07,229.07,230.07,231.07,232.07,233.07,234.07,235.07,236.07,237.07,90.03,90.03,85.03,85.03,242.07,243.07,244.07,245.07,246.07,247.07,248.07,249.07,250.07,251.07,252.07,253.07,90.03,90.03,85.03,85.03,258.07,259.07,260.07,261.07,262.07,263.07,264.07,265.07,266.07,267.07,268.07,269.07,90.03,90.03,99.03,99.03,274.07,275.07,276.07,277.07,278.07,279.07,280.07,281.07,282.07,283.07,284.07,285.07,104.03,104.03,99.03,99.03,290.07,291.07,292.07,293.07,294.07,295.07,296.07,297.07,298.07,299.07,300.07,301.07,104.03,104.03,99.03,99.03,306.07,307.07,308.07,309.07,310.07,311.07,312.07,313.07,314.07,315.07,316.07,317.07,104.03,104.03,113.03,113.03,114.03,114.03,114.03,115.03,115.03,115.03,116.03,116.03,116.03,117.03,117.03,117.03,118.03,118.03,113.03,113.03,114.03,114.03,114.03,115.03,115.03,115.03,116.03,116.03,116.03,117.03,117.03,117.03,118.03,118.03])
2971         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp22,1e-12))
2972         exp23=DataArrayDouble([22.03,22.03,23.03,23.03,23.03,24.03,24.03,24.03,25.03,25.03,25.03,26.03,26.03,22.03,22.03,23.03,23.03,23.03,24.03,24.03,24.03,25.03,25.03,25.03,26.03,26.03,36.03,36.03,28.08,29.08,30.08,31.08,32.08,33.08,34.08,35.08,36.08,40.03,40.03,36.03,36.03,41.08,42.08,43.08,44.08,45.08,46.08,47.08,48.08,49.08,40.03,40.03,36.03,36.03,54.08,55.08,56.08,57.08,58.08,59.08,60.08,61.08,62.08,40.03,40.03,50.03,50.03,67.08,68.08,69.08,70.08,71.08,72.08,73.08,74.08,75.08,54.03,54.03,50.03,50.03,80.08,81.08,82.08,83.08,84.08,85.08,86.08,87.08,88.08,54.03,54.03,50.03,50.03,93.08,94.08,95.08,96.08,97.08,98.08,99.08,100.08,101.08,54.03,54.03,64.03,64.03,106.08,107.08,108.08,109.08,110.08,111.08,112.08,113.08,114.08,68.03,68.03,64.03,64.03,119.08,120.08,121.08,122.08,123.08,124.08,125.08,126.08,127.08,68.03,68.03,64.03,64.03,132.08,133.08,134.08,135.08,136.08,137.08,138.08,139.08,140.08,68.03,68.03,78.03,78.03,145.08,146.08,147.08,148.08,149.08,150.08,151.08,152.08,153.08,82.03,82.03,78.03,78.03,158.08,159.08,160.08,161.08,162.08,163.08,164.08,165.08,166.08,82.03,82.03,78.03,78.03,171.08,172.08,173.08,174.08,175.08,176.08,177.08,178.08,179.08,82.03,82.03,92.03,92.03,93.03,93.03,93.03,94.03,94.03,94.03,95.03,95.03,95.03,96.03,96.03,92.03,92.03,93.03,93.03,93.03,94.03,94.03,94.03,95.03,95.03,95.03,96.03,96.03])
2973         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp23,1e-12))
2974         exp24=DataArrayDouble([19.03,19.03,20.03,20.03,20.03,21.03,21.03,21.03,22.03,22.03,22.03,23.03,23.03,19.03,19.03,20.03,20.03,20.03,21.03,21.03,21.03,22.03,22.03,22.03,23.03,23.03,33.03,33.03,28.09,29.09,30.09,31.09,32.09,33.09,34.09,35.09,36.09,37.03,37.03,33.03,33.03,41.09,42.09,43.09,44.09,45.09,46.09,47.09,48.09,49.09,37.03,37.03,33.03,33.03,54.09,55.09,56.09,57.09,58.09,59.09,60.09,61.09,62.09,37.03,37.03,47.03,47.03,67.09,68.09,69.09,70.09,71.09,72.09,73.09,74.09,75.09,51.03,51.03,47.03,47.03,80.09,81.09,82.09,83.09,84.09,85.09,86.09,87.09,88.09,51.03,51.03,47.03,47.03,93.09,94.09,95.09,96.09,97.09,98.09,99.09,100.09,101.09,51.03,51.03,61.03,61.03,106.09,107.09,108.09,109.09,110.09,111.09,112.09,113.09,114.09,65.03,65.03,61.03,61.03,119.09,120.09,121.09,122.09,123.09,124.09,125.09,126.09,127.09,65.03,65.03,61.03,61.03,132.09,133.09,134.09,135.09,136.09,137.09,138.09,139.09,140.09,65.03,65.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03])
2975         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp24,1e-12))
2976         exp25=DataArrayDouble([61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,75.03,75.03,28.1,29.1,30.1,31.1,32.1,33.1,34.1,35.1,36.1,79.03,79.03,75.03,75.03,41.1,42.1,43.1,44.1,45.1,46.1,47.1,48.1,49.1,79.03,79.03,75.03,75.03,54.1,55.1,56.1,57.1,58.1,59.1,60.1,61.1,62.1,79.03,79.03,89.03,89.03,67.1,68.1,69.1,70.1,71.1,72.1,73.1,74.1,75.1,93.03,93.03,89.03,89.03,80.1,81.1,82.1,83.1,84.1,85.1,86.1,87.1,88.1,93.03,93.03,89.03,89.03,93.1,94.1,95.1,96.1,97.1,98.1,99.1,100.1,101.1,93.03,93.03,103.03,103.03,106.1,107.1,108.1,109.1,110.1,111.1,112.1,113.1,114.1,107.03,107.03,103.03,103.03,119.1,120.1,121.1,122.1,123.1,124.1,125.1,126.1,127.1,107.03,107.03,103.03,103.03,132.1,133.1,134.1,135.1,136.1,137.1,138.1,139.1,140.1,107.03,107.03,117.03,117.03,118.03,118.03,118.03,119.03,119.03,119.03,120.03,120.03,120.03,121.03,121.03,117.03,117.03,118.03,118.03,118.03,119.03,119.03,119.03,120.03,120.03,120.03,121.03,121.03])
2977         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp25,1e-12))
2978         pass
2979
2980     def testSwig2AMR11(self):
2981         """ Some tests in 3D with CondenseFineToCoarseGhost and SpreadCoarseToFineGhost"""
2982         coarse=DataArrayDouble((6+4)*(7+4)*(5+4)) ; coarse.iota()
2983         fine=DataArrayDouble((4*2+4)*(2*3+4)*(3*4+4))
2984         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
2985         exp0=DataArrayDouble([252.,252.,253.,253.,254.,254.,255.,255.,256.,256.,257.,257.,252.,252.,253.,253.,254.,254.,255.,255.,256.,256.,257.,257.,262.,262.,263.,263.,264.,264.,265.,265.,266.,266.,267.,267.,262.,262.,263.,263.,264.,264.,265.,265.,266.,266.,267.,267.,262.,262.,263.,263.,264.,264.,265.,265.,266.,266.,267.,267.,272.,272.,273.,273.,274.,274.,275.,275.,276.,276.,277.,277.,272.,272.,273.,273.,274.,274.,275.,275.,276.,276.,277.,277.,272.,272.,273.,273.,274.,274.,275.,275.,276.,276.,277.,277.,282.,282.,283.,283.,284.,284.,285.,285.,286.,286.,287.,287.,282.,282.,283.,283.,284.,284.,285.,285.,286.,286.,287.,287.])
2986         exp1=DataArrayDouble([362.,362.,363.,363.,364.,364.,365.,365.,366.,366.,367.,367.,362.,362.,363.,363.,364.,364.,365.,365.,366.,366.,367.,367.,372.,372.,373.,373.,374.,374.,375.,375.,376.,376.,377.,377.,372.,372.,373.,373.,374.,374.,375.,375.,376.,376.,377.,377.,372.,372.,373.,373.,374.,374.,375.,375.,376.,376.,377.,377.,382.,382.,383.,383.,384.,384.,385.,385.,386.,386.,387.,387.,382.,382.,383.,383.,384.,384.,385.,385.,386.,386.,387.,387.,382.,382.,383.,383.,384.,384.,385.,385.,386.,386.,387.,387.,392.,392.,393.,393.,394.,394.,395.,395.,396.,396.,397.,397.,392.,392.,393.,393.,394.,394.,395.,395.,396.,396.,397.,397.])
2987         exp2=DataArrayDouble([472.,472.,473.,473.,474.,474.,475.,475.,476.,476.,477.,477.,472.,472.,473.,473.,474.,474.,475.,475.,476.,476.,477.,477.,482.,482.,483.,483.,484.,484.,485.,485.,486.,486.,487.,487.,482.,482.,483.,483.,484.,484.,485.,485.,486.,486.,487.,487.,482.,482.,483.,483.,484.,484.,485.,485.,486.,486.,487.,487.,492.,492.,493.,493.,494.,494.,495.,495.,496.,496.,497.,497.,492.,492.,493.,493.,494.,494.,495.,495.,496.,496.,497.,497.,492.,492.,493.,493.,494.,494.,495.,495.,496.,496.,497.,497.,502.,502.,503.,503.,504.,504.,505.,505.,506.,506.,507.,507.,502.,502.,503.,503.,504.,504.,505.,505.,506.,506.,507.,507.])
2988         exp3=DataArrayDouble([582.,582.,583.,583.,584.,584.,585.,585.,586.,586.,587.,587.,582.,582.,583.,583.,584.,584.,585.,585.,586.,586.,587.,587.,592.,592.,593.,593.,594.,594.,595.,595.,596.,596.,597.,597.,592.,592.,593.,593.,594.,594.,595.,595.,596.,596.,597.,597.,592.,592.,593.,593.,594.,594.,595.,595.,596.,596.,597.,597.,602.,602.,603.,603.,604.,604.,605.,605.,606.,606.,607.,607.,602.,602.,603.,603.,604.,604.,605.,605.,606.,606.,607.,607.,602.,602.,603.,603.,604.,604.,605.,605.,606.,606.,607.,607.,612.,612.,613.,613.,614.,614.,615.,615.,616.,616.,617.,617.,612.,612.,613.,613.,614.,614.,615.,615.,616.,616.,617.,617.])
2989         exp4=DataArrayDouble([692.,692.,693.,693.,694.,694.,695.,695.,696.,696.,697.,697.,692.,692.,693.,693.,694.,694.,695.,695.,696.,696.,697.,697.,702.,702.,703.,703.,704.,704.,705.,705.,706.,706.,707.,707.,702.,702.,703.,703.,704.,704.,705.,705.,706.,706.,707.,707.,702.,702.,703.,703.,704.,704.,705.,705.,706.,706.,707.,707.,712.,712.,713.,713.,714.,714.,715.,715.,716.,716.,717.,717.,712.,712.,713.,713.,714.,714.,715.,715.,716.,716.,717.,717.,712.,712.,713.,713.,714.,714.,715.,715.,716.,716.,717.,717.,722.,722.,723.,723.,724.,724.,725.,725.,726.,726.,727.,727.,722.,722.,723.,723.,724.,724.,725.,725.,726.,726.,727.,727.])
2990         exp=DataArrayDouble.Aggregate([exp0,exp0,exp1,exp1,exp1,exp1,exp2,exp2,exp2,exp2,exp3,exp3,exp3,exp3,exp4,exp4])
2991         self.assertTrue(fine.isEqual(exp,1e-12))
2992         #
2993         fine.iota()
2994         coarse.iota(0.5)
2995         MEDCouplingIMesh.CondenseFineToCoarseGhost([6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],coarse,2)
2996         amr=MEDCouplingCartesianAMRMesh("mesh",3,[7,8,6],[0.,0.,0.],[1.,1.,1.])
2997         amr.addPatch([(1,5),(2,4),(1,4)],[2,3,4])
2998         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
2999         att.alloc()
3000         exp1=DataArrayDouble(990) ; exp1.iota(0.5)
3001         ids=DataArrayInt([373,374,375,376,383,384,385,386,483,484,485,486,493,494,495,496,593,594,595,596,603,604,605,606])
3002         vals=DataArrayDouble([11004.,11052.,11100.,11148.,11868.,11916.,11964.,12012.,22524.,22572.,22620.,22668.,23388.,23436.,23484.,23532.,34044.,34092.,34140.,34188.,34908.,34956.,35004.,35052.])
3003         exp1[ids]=vals
3004         self.assertTrue(coarse.isEqual(exp1,1e-12))
3005         #
3006         MEDCouplingStructuredMesh.MultiplyPartOf([10,11,9],[(3,7),(4,6),(3,6)],1/24.,coarse)
3007         exp2=DataArrayDouble(990) ; exp2.iota(0.5)
3008         exp2[ids]=vals/24.
3009         self.assertTrue(coarse.isEqual(exp2,1e-12))
3010         #
3011         coarse.iota(0.5) ; fine.iota(0.1)
3012         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3013         #
3014         coarse.iota(0.5) ; fine.iota(0.1)
3015         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3016         exp00=DataArrayDouble.Aggregate([exp0,exp0]) ; exp00+=0.5
3017         self.assertTrue(fine[:240].isEqual(exp00,1e-12))
3018         exp44=DataArrayDouble.Aggregate([exp4,exp4]) ; exp44+=0.5
3019         self.assertTrue(fine[-240:].isEqual(exp44,1e-12))
3020         self.assertTrue(fine[240:-240].isEqual(DataArrayDouble([362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,372.5,372.5,266.1,267.1,268.1,269.1,270.1,271.1,272.1,273.1,377.5,377.5,372.5,372.5,278.1,279.1,280.1,281.1,282.1,283.1,284.1,285.1,377.5,377.5,372.5,372.5,290.1,291.1,292.1,293.1,294.1,295.1,296.1,297.1,377.5,377.5,382.5,382.5,302.1,303.1,304.1,305.1,306.1,307.1,308.1,309.1,387.5,387.5,382.5,382.5,314.1,315.1,316.1,317.1,318.1,319.1,320.1,321.1,387.5,387.5,382.5,382.5,326.1,327.1,328.1,329.1,330.1,331.1,332.1,333.1,387.5,387.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,372.5,372.5,386.1,387.1,388.1,389.1,390.1,391.1,392.1,393.1,377.5,377.5,372.5,372.5,398.1,399.1,400.1,401.1,402.1,403.1,404.1,405.1,377.5,377.5,372.5,372.5,410.1,411.1,412.1,413.1,414.1,415.1,416.1,417.1,377.5,377.5,382.5,382.5,422.1,423.1,424.1,425.1,426.1,427.1,428.1,429.1,387.5,387.5,382.5,382.5,434.1,435.1,436.1,437.1,438.1,439.1,440.1,441.1,387.5,387.5,382.5,382.5,446.1,447.1,448.1,449.1,450.1,451.1,452.1,453.1,387.5,387.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,372.5,372.5,506.1,507.1,508.1,509.1,510.1,511.1,512.1,513.1,377.5,377.5,372.5,372.5,518.1,519.1,520.1,521.1,522.1,523.1,524.1,525.1,377.5,377.5,372.5,372.5,530.1,531.1,532.1,533.1,534.1,535.1,536.1,537.1,377.5,377.5,382.5,382.5,542.1,543.1,544.1,545.1,546.1,547.1,548.1,549.1,387.5,387.5,382.5,382.5,554.1,555.1,556.1,557.1,558.1,559.1,560.1,561.1,387.5,387.5,382.5,382.5,566.1,567.1,568.1,569.1,570.1,571.1,572.1,573.1,387.5,387.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,362.5,362.5,363.5,363.5,364.5,364.5,365.5,365.5,366.5,366.5,367.5,367.5,372.5,372.5,626.1,627.1,628.1,629.1,630.1,631.1,632.1,633.1,377.5,377.5,372.5,372.5,638.1,639.1,640.1,641.1,642.1,643.1,644.1,645.1,377.5,377.5,372.5,372.5,650.1,651.1,652.1,653.1,654.1,655.1,656.1,657.1,377.5,377.5,382.5,382.5,662.1,663.1,664.1,665.1,666.1,667.1,668.1,669.1,387.5,387.5,382.5,382.5,674.1,675.1,676.1,677.1,678.1,679.1,680.1,681.1,387.5,387.5,382.5,382.5,686.1,687.1,688.1,689.1,690.1,691.1,692.1,693.1,387.5,387.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,392.5,392.5,393.5,393.5,394.5,394.5,395.5,395.5,396.5,396.5,397.5,397.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,482.5,482.5,746.1,747.1,748.1,749.1,750.1,751.1,752.1,753.1,487.5,487.5,482.5,482.5,758.1,759.1,760.1,761.1,762.1,763.1,764.1,765.1,487.5,487.5,482.5,482.5,770.1,771.1,772.1,773.1,774.1,775.1,776.1,777.1,487.5,487.5,492.5,492.5,782.1,783.1,784.1,785.1,786.1,787.1,788.1,789.1,497.5,497.5,492.5,492.5,794.1,795.1,796.1,797.1,798.1,799.1,800.1,801.1,497.5,497.5,492.5,492.5,806.1,807.1,808.1,809.1,810.1,811.1,812.1,813.1,497.5,497.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,482.5,482.5,866.1,867.1,868.1,869.1,870.1,871.1,872.1,873.1,487.5,487.5,482.5,482.5,878.1,879.1,880.1,881.1,882.1,883.1,884.1,885.1,487.5,487.5,482.5,482.5,890.1,891.1,892.1,893.1,894.1,895.1,896.1,897.1,487.5,487.5,492.5,492.5,902.1,903.1,904.1,905.1,906.1,907.1,908.1,909.1,497.5,497.5,492.5,492.5,914.1,915.1,916.1,917.1,918.1,919.1,920.1,921.1,497.5,497.5,492.5,492.5,926.1,927.1,928.1,929.1,930.1,931.1,932.1,933.1,497.5,497.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,482.5,482.5,986.1,987.1,988.1,989.1,990.1,991.1,992.1,993.1,487.5,487.5,482.5,482.5,998.1,999.1,1000.1,1001.1,1002.1,1003.1,1004.1,1005.1,487.5,487.5,482.5,482.5,1010.1,1011.1,1012.1,1013.1,1014.1,1015.1,1016.1,1017.1,487.5,487.5,492.5,492.5,1022.1,1023.1,1024.1,1025.1,1026.1,1027.1,1028.1,1029.1,497.5,497.5,492.5,492.5,1034.1,1035.1,1036.1,1037.1,1038.1,1039.1,1040.1,1041.1,497.5,497.5,492.5,492.5,1046.1,1047.1,1048.1,1049.1,1050.1,1051.1,1052.1,1053.1,497.5,497.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,472.5,472.5,473.5,473.5,474.5,474.5,475.5,475.5,476.5,476.5,477.5,477.5,482.5,482.5,1106.1,1107.1,1108.1,1109.1,1110.1,1111.1,1112.1,1113.1,487.5,487.5,482.5,482.5,1118.1,1119.1,1120.1,1121.1,1122.1,1123.1,1124.1,1125.1,487.5,487.5,482.5,482.5,1130.1,1131.1,1132.1,1133.1,1134.1,1135.1,1136.1,1137.1,487.5,487.5,492.5,492.5,1142.1,1143.1,1144.1,1145.1,1146.1,1147.1,1148.1,1149.1,497.5,497.5,492.5,492.5,1154.1,1155.1,1156.1,1157.1,1158.1,1159.1,1160.1,1161.1,497.5,497.5,492.5,492.5,1166.1,1167.1,1168.1,1169.1,1170.1,1171.1,1172.1,1173.1,497.5,497.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,502.5,502.5,503.5,503.5,504.5,504.5,505.5,505.5,506.5,506.5,507.5,507.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,592.5,592.5,1226.1,1227.1,1228.1,1229.1,1230.1,1231.1,1232.1,1233.1,597.5,597.5,592.5,592.5,1238.1,1239.1,1240.1,1241.1,1242.1,1243.1,1244.1,1245.1,597.5,597.5,592.5,592.5,1250.1,1251.1,1252.1,1253.1,1254.1,1255.1,1256.1,1257.1,597.5,597.5,602.5,602.5,1262.1,1263.1,1264.1,1265.1,1266.1,1267.1,1268.1,1269.1,607.5,607.5,602.5,602.5,1274.1,1275.1,1276.1,1277.1,1278.1,1279.1,1280.1,1281.1,607.5,607.5,602.5,602.5,1286.1,1287.1,1288.1,1289.1,1290.1,1291.1,1292.1,1293.1,607.5,607.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,592.5,592.5,1346.1,1347.1,1348.1,1349.1,1350.1,1351.1,1352.1,1353.1,597.5,597.5,592.5,592.5,1358.1,1359.1,1360.1,1361.1,1362.1,1363.1,1364.1,1365.1,597.5,597.5,592.5,592.5,1370.1,1371.1,1372.1,1373.1,1374.1,1375.1,1376.1,1377.1,597.5,597.5,602.5,602.5,1382.1,1383.1,1384.1,1385.1,1386.1,1387.1,1388.1,1389.1,607.5,607.5,602.5,602.5,1394.1,1395.1,1396.1,1397.1,1398.1,1399.1,1400.1,1401.1,607.5,607.5,602.5,602.5,1406.1,1407.1,1408.1,1409.1,1410.1,1411.1,1412.1,1413.1,607.5,607.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,592.5,592.5,1466.1,1467.1,1468.1,1469.1,1470.1,1471.1,1472.1,1473.1,597.5,597.5,592.5,592.5,1478.1,1479.1,1480.1,1481.1,1482.1,1483.1,1484.1,1485.1,597.5,597.5,592.5,592.5,1490.1,1491.1,1492.1,1493.1,1494.1,1495.1,1496.1,1497.1,597.5,597.5,602.5,602.5,1502.1,1503.1,1504.1,1505.1,1506.1,1507.1,1508.1,1509.1,607.5,607.5,602.5,602.5,1514.1,1515.1,1516.1,1517.1,1518.1,1519.1,1520.1,1521.1,607.5,607.5,602.5,602.5,1526.1,1527.1,1528.1,1529.1,1530.1,1531.1,1532.1,1533.1,607.5,607.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,582.5,582.5,583.5,583.5,584.5,584.5,585.5,585.5,586.5,586.5,587.5,587.5,592.5,592.5,1586.1,1587.1,1588.1,1589.1,1590.1,1591.1,1592.1,1593.1,597.5,597.5,592.5,592.5,1598.1,1599.1,1600.1,1601.1,1602.1,1603.1,1604.1,1605.1,597.5,597.5,592.5,592.5,1610.1,1611.1,1612.1,1613.1,1614.1,1615.1,1616.1,1617.1,597.5,597.5,602.5,602.5,1622.1,1623.1,1624.1,1625.1,1626.1,1627.1,1628.1,1629.1,607.5,607.5,602.5,602.5,1634.1,1635.1,1636.1,1637.1,1638.1,1639.1,1640.1,1641.1,607.5,607.5,602.5,602.5,1646.1,1647.1,1648.1,1649.1,1650.1,1651.1,1652.1,1653.1,607.5,607.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5,612.5,612.5,613.5,613.5,614.5,614.5,615.5,615.5,616.5,616.5,617.5,617.5]),1e-12))
3021         pass
3022
3023     def testSwig2AMR12(self):
3024         """ This test check the MEDCouplingAMRAttribute.projectTo method."""
3025         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3026         amr0.addPatch([(3,8),(0,3)],[2,2])
3027         amr0.addPatch([(3,8),(3,6)],[2,2])
3028         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3029         att0.alloc()
3030         att0.getFieldOn(amr0,"YY").iota(0.01)
3031         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3032         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3033         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3034         amr1.addPatch([(2,5),(1,4)],[2,2])
3035         att1=att0.projectTo(amr1)
3036         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqualWithoutConsideringStr(att0.getFieldOn(amr0,"YY"),1e-12))
3037         self.assertTrue(att1.getFieldOn(amr1[0].getMesh(),"YY").isEqualWithoutConsideringStr(DataArrayDouble([31.01,31.01,32.01,32.01,33.01,33.01,34.01,34.01,35.01,35.01,31.01,31.01,32.01,32.01,33.01,33.01,34.01,34.01,35.01,35.01,45.01,45.01,46.01,46.01,58.02,59.02,60.02,61.02,49.01,49.01,45.01,45.01,46.01,46.01,72.02,73.02,74.02,75.02,49.01,49.01,59.01,59.01,60.01,60.01,86.02,87.02,88.02,89.02,63.01,63.01,59.01,59.01,60.01,60.01,100.02,101.02,102.02,103.02,63.01,63.01,73.01,73.01,74.01,74.01,30.03,31.03,32.03,33.03,77.01,77.01,73.01,73.01,74.01,74.01,44.03,45.03,46.03,47.03,77.01,77.01,87.01,87.01,88.01,88.01,89.01,89.01,90.01,90.01,91.01,91.01,87.01,87.01,88.01,88.01,89.01,89.01,90.01,90.01,91.01,91.01]),1e-12))
3038         #
3039         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3040         amr0.addPatch([(2,5),(2,7)],[2,2])
3041         amr0.addPatch([(5,8),(2,7)],[2,2])
3042         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3043         att0.alloc()
3044         att0.getFieldOn(amr0,"YY").iota(0.01)
3045         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3046         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3047         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3048         amr1.addPatch([(3,6),(2,7)],[2,2])
3049         amr1.addPatch([(6,9),(2,7)],[2,2])
3050         att1=att0.projectTo(amr1)
3051         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqual(att0.getFieldOn(amr0,"YY"),1e-12))
3052         self.assertTrue(att1.getFieldOn(amr1[0].getMesh(),"YY").isEqualWithoutConsideringStr(DataArrayDouble([46.01,46.01,47.01,47.01,48.01,48.01,49.01,49.01,50.01,50.01,46.01,46.01,47.01,47.01,48.01,48.01,49.01,49.01,50.01,50.01,60.01,60.01,24.02,25.02,26.02,27.02,22.03,23.03,64.01,64.01,60.01,60.01,34.02,35.02,36.02,37.02,32.03,33.03,64.01,64.01,74.01,74.01,44.02,45.02,46.02,47.02,42.03,43.03,78.01,78.01,74.01,74.01,54.02,55.02,56.02,57.02,52.03,53.03,78.01,78.01,88.01,88.01,64.02,65.02,66.02,67.02,62.03,63.03,92.01,92.01,88.01,88.01,74.02,75.02,76.02,77.02,72.03,73.03,92.01,92.01,102.01,102.01,84.02,85.02,86.02,87.02,82.03,83.03,106.01,106.01,102.01,102.01,94.02,95.02,96.02,97.02,92.03,93.03,106.01,106.01,116.01,116.01,104.02,105.02,106.02,107.02,102.03,103.03,120.01,120.01,116.01,116.01,114.02,115.02,116.02,117.02,112.03,113.03,120.01,120.01,130.01,130.01,131.01,131.01,132.01,132.01,133.01,133.01,134.01,134.01,130.01,130.01,131.01,131.01,132.01,132.01,133.01,133.01,134.01,134.01]),1e-12))
3053         self.assertTrue(att1.getFieldOn(amr1[1].getMesh(),"YY").isEqualWithoutConsideringStr(DataArrayDouble([49.01,49.01,50.01,50.01,51.01,51.01,52.01,52.01,53.01,53.01,49.01,49.01,50.01,50.01,51.01,51.01,52.01,52.01,53.01,53.01,63.01,63.01,24.03,25.03,26.03,27.03,66.01,66.01,67.01,67.01,63.01,63.01,34.03,35.03,36.03,37.03,66.01,66.01,67.01,67.01,77.01,77.01,44.03,45.03,46.03,47.03,80.01,80.01,81.01,81.01,77.01,77.01,54.03,55.03,56.03,57.03,80.01,80.01,81.01,81.01,91.01,91.01,64.03,65.03,66.03,67.03,94.01,94.01,95.01,95.01,91.01,91.01,74.03,75.03,76.03,77.03,94.01,94.01,95.01,95.01,105.01,105.01,84.03,85.03,86.03,87.03,108.01,108.01,109.01,109.01,105.01,105.01,94.03,95.03,96.03,97.03,108.01,108.01,109.01,109.01,119.01,119.01,104.03,105.03,106.03,107.03,122.01,122.01,123.01,123.01,119.01,119.01,114.03,115.03,116.03,117.03,122.01,122.01,123.01,123.01,133.01,133.01,134.01,134.01,135.01,135.01,136.01,136.01,137.01,137.01,133.01,133.01,134.01,134.01,135.01,135.01,136.01,136.01,137.01,137.01]),1e-12))
3054         pass
3055
3056     def testSwig2AMR13(self):
3057         """ non regression test"""
3058         for fact,len1,len2 in [([2,2],64,48),([3,3],100,70),([4,4],144,96)]:
3059             amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3060             amr.addPatch([(1,3),(0,2)],fact)
3061             amr.addPatch([(1,3),(3,4)],fact)
3062             att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3063             att.alloc()
3064             att.getFieldOn(amr,"YY").iota(0.1)
3065             att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3066             att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3067             att.synchronizeAllGhostZonesOfDirectChidrenOf(amr)
3068             exp=DataArrayDouble(64) ; exp.iota(0.1)
3069             self.assertTrue(att.getFieldOn(amr,"YY").isEqualWithoutConsideringStr(exp,1e-12))
3070             exp0=DataArrayDouble(len1) ; exp0.iota(0.2)
3071             self.assertTrue(att.getFieldOn(amr[0].getMesh(),"YY").isEqualWithoutConsideringStr(exp0,1e-12))
3072             exp1=DataArrayDouble(len2) ; exp1.iota(0.3)
3073             self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(exp1,1e-12))
3074             pass
3075         pass
3076
3077     def testSwig2AMR14(self):
3078         """ non regression linked to VTHB write."""
3079         fact=[2,2] ; fact2=[3,3]
3080         amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3081         amr.addPatch([(1,3),(0,2)],fact)
3082         amr.addPatch([(1,3),(3,4)],fact)
3083         amr[0].addPatch([(1,3),(1,3)],fact2)
3084         amr[1].addPatch([(1,3),(1,2)],fact2)
3085         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3086         att.alloc()
3087         att.getFieldOn(amr,"YY").iota(0.1)
3088         att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3089         att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3090         att.getFieldOn(amr[0][0].getMesh(),"YY").iota(0.4)
3091         att.getFieldOn(amr[1][0].getMesh(),"YY").iota(0.5)
3092         self.assertEqual(amr[0].getBLTRRangeRelativeToGF(),[(2,6),(0,4)])
3093         self.assertEqual(amr[1].getBLTRRangeRelativeToGF(),[(2,6),(6,8)])
3094         self.assertEqual(amr[0][0].getBLTRRangeRelativeToGF(),[(9,15),(3,9)])
3095         self.assertEqual(amr[1][0].getBLTRRangeRelativeToGF(),[(9,15),(21,24)])
3096         pass
3097
3098     def testOrderConsecutiveCells1D1(self):
3099         """A line in several unconnected pieces:"""
3100         m2 = MEDCouplingUMesh.New("bla", 1)
3101         c = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,4,
3102                                NORM_SEG3,5,7,6, NORM_SEG3,7,9,8, NORM_SEG2,9,10,
3103                                NORM_SEG2,11,12,NORM_SEG2,12,13,
3104                                NORM_SEG2,14,15])
3105         cI = DataArrayInt([0,3,7,10,14,18,21,24,27,30])
3106         coords2 = DataArrayDouble([float(i) for i in range(32)], 16, 2)
3107         m2.setCoords(coords2);
3108         m2.setConnectivity(c, cI);
3109         m2.checkConsistency(1.0e-8);
3110
3111         # Shuffle a bit :-)
3112         m2.renumberCells(DataArrayInt([0,3,6,8,1,4,7,5,2]), True);
3113         res = m2.orderConsecutiveCells1D()
3114         expRes = [0,3,6,8,1,4,2,7,5]
3115         self.assertEqual(m2.getNumberOfCells(),res.getNumberOfTuples())
3116         self.assertEqual(expRes, res.getValues())
3117
3118         # A closed line (should also work)
3119         m3 = MEDCouplingUMesh.New("bla3", 1)
3120         conn3A = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,0])
3121         coord3 = coords2[0:5]
3122         c.reAlloc(10)
3123         cI.reAlloc(4)
3124
3125         m3.setCoords(coord3)
3126         m3.setConnectivity(conn3A, cI)
3127         m3.checkConsistency(1.0e-8)
3128         res2 = m3.orderConsecutiveCells1D()
3129         expRes2 = [0,1,2]
3130         self.assertEqual(m3.getNumberOfCells(),res2.getNumberOfTuples())
3131         self.assertEqual(expRes2, res2.getValues())
3132         pass
3133
3134     def testDADApplyFuncOnThis1(self):
3135         d=DataArrayDouble(5) ; d.iota(0.)
3136         d.applyFuncOnThis("2*x+1")
3137         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.]),1e-12))
3138         d=DataArrayDouble(6) ; d.iota(0.) ; d.rearrange(2)
3139         d.applyFuncOnThis("2*x+1")
3140         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.,11.],3,2),1e-12))
3141         d.applyFuncOnThis("1+2*3")
3142         self.assertTrue(d.isEqual(DataArrayDouble([(7.,7.),(7.,7.),(7.,7.)]),1e-12))
3143         pass
3144
3145     def testSwig2PointSetComputeFetchedNodeIds1(self):
3146         arr=DataArrayDouble(6) ; arr.iota()
3147         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3148         m=m.buildUnstructured()
3149         m0=m[[0,1,5,6,25,26,30,31,124]]
3150         ref=DataArrayInt([0,1,2,6,7,8,12,13,14,36,37,38,42,43,44,48,49,50,72,73,74,78,79,80,84,85,86,172,173,178,179,208,209,214,215])
3151         self.assertTrue(m0.computeFetchedNodeIds().isEqual(ref))
3152         self.assertTrue(MEDCoupling1SGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3153         self.assertEqual(m0.getAllGeoTypes(),[NORM_HEXA8])
3154         m0.convertAllToPoly()
3155         self.assertEqual(m0.getAllGeoTypes(),[NORM_POLYHED])
3156         self.assertTrue(MEDCoupling1DGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3157         pass
3158
3159     def testSwig2PartDefinition1(self):
3160         pd=PartDefinition.New(5,22,3)
3161         self.assertTrue(isinstance(pd,SlicePartDefinition))
3162         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3163         self.assertEqual(pd.getNumberOfElems(),6)
3164         self.assertEqual(pd.getEffectiveStop(),23)
3165         pd=PartDefinition.New(5,23,3)
3166         self.assertTrue(isinstance(pd,SlicePartDefinition))
3167         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3168         self.assertEqual(pd.getNumberOfElems(),6)
3169         self.assertEqual(pd.getEffectiveStop(),23)
3170         self.assertEqual(pd.getSlice(),slice(5,23,3))
3171         pd=PartDefinition.New(5,22,1)
3172         self.assertTrue(isinstance(pd,SlicePartDefinition))
3173         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3174         self.assertEqual(pd.getNumberOfElems(),17)
3175         self.assertEqual(pd.getEffectiveStop(),22)
3176         pd=PartDefinition.New(5,23,3)+PartDefinition.New(23,27,3)
3177         self.assertTrue(isinstance(pd,SlicePartDefinition))
3178         self.assertEqual(pd.getNumberOfElems(),8)
3179         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20,23,26])))
3180         self.assertEqual(pd.getEffectiveStop(),29)
3181         pd=SlicePartDefinition(5,22,1)
3182         self.assertTrue(isinstance(pd,SlicePartDefinition))
3183         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3184         self.assertEqual(pd.getNumberOfElems(),17)
3185         self.assertEqual(pd.getEffectiveStop(),22)
3186         d=DataArrayInt([2,4,5,6,10])
3187         pd=PartDefinition.New(d)
3188         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3189         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3190         pd=DataArrayPartDefinition(d)
3191         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3192         pd=DataArrayPartDefinition(d)+DataArrayPartDefinition(DataArrayInt([12,14,20]))
3193         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3194         self.assertEqual(pd.getNumberOfElems(),8)
3195         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([2,4,5,6,10,12,14,20])))
3196         pass
3197
3198     def testSwig2SortEachPairToMakeALinkedList1(self):
3199         d=DataArrayInt([(50,49),(50,51),(51,52),(53,52),(53,54),(55,54),(55,56),(56,57),(58,57),(58,59),(60,59),(60,61),(61,62),(63,62),(63,64),(65,64),(65,66),(66,67)])
3200         d.sortEachPairToMakeALinkedList()
3201         self.assertTrue(d.isEqual(DataArrayInt([(49,50),(50,51),(51,52),(52,53),(53,54),(54,55),(55,56),(56,57),(57,58),(58,59),(59,60),(60,61),(61,62),(62,63),(63,64),(64,65),(65,66),(66,67)])))
3202         d=DataArrayInt([(0,2),(1,2),(1,3)])
3203         d.sortEachPairToMakeALinkedList()
3204         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3205         d=DataArrayInt([(0,2),(1,2),(3,1)])
3206         d.sortEachPairToMakeALinkedList()
3207         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3208         d=DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])
3209         d.sortEachPairToMakeALinkedList()
3210         self.assertTrue(d.isEqual(DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])))
3211         pass
3212
3213     def testSwig2DAIIsRange(self):
3214         d=DataArrayInt([2,6,10])
3215         a,b=d.isRange()
3216         self.assertTrue(a)
3217         self.assertEqual(b,slice(2,11,4))
3218         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3219         #
3220         d=DataArrayInt([2,7,10])
3221         a,b=d.isRange()
3222         self.assertTrue(not a)
3223         self.assertTrue(b is None)
3224         #
3225         d=DataArrayInt([22,17,12])
3226         a,b=d.isRange()
3227         self.assertTrue(a)
3228         self.assertEqual(b,slice(22,11,-5))
3229         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3230         #
3231         d=DataArrayInt([22,16,12])
3232         a,b=d.isRange()
3233         self.assertTrue(not a)
3234         self.assertTrue(b is None)
3235         #
3236         d=DataArrayInt([33])
3237         a,b=d.isRange()
3238         self.assertTrue(a)
3239         self.assertEqual(b,slice(33,34,1))
3240         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3241         #
3242         d=DataArrayInt([])
3243         a,b=d.isRange()
3244         self.assertTrue(a)
3245         self.assertEqual(b,slice(0,0,1))
3246         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3247         #
3248         d=DataArrayInt([2,6,10,2])
3249         a,b=d.isRange()
3250         self.assertTrue(not a)
3251         self.assertTrue(b is None)
3252         pass
3253
3254     def testSwig2PartDefinitionComposeWith1(self):
3255         f=PartDefinition.New(DataArrayInt([0,1,2,3,6,7,8,9]))
3256         g=PartDefinition.New(4,14,1)
3257         g2=g.deepCopy()
3258         self.assertTrue(g2.isEqual(g)[0])
3259         h=f.composeWith(g)
3260         self.assertTrue(isinstance(h,DataArrayPartDefinition))
3261         self.assertTrue(h.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3262         f2=f.tryToSimplify()
3263         g2=g.tryToSimplify()
3264         self.assertEqual(f2.getHiddenCppPointer(),f.getHiddenCppPointer())# same because no simplification due to content of array
3265         self.assertEqual(g2.getHiddenCppPointer(),g.getHiddenCppPointer())# same because no simplification linked to type of PartDef
3266         p=PartDefinition.New(DataArrayInt([2,6,10]))
3267         p2=p.tryToSimplify()
3268         self.assertNotEqual(p2.getHiddenCppPointer(),p.getHiddenCppPointer())
3269         self.assertTrue(isinstance(p2,SlicePartDefinition))
3270         self.assertEqual(p2.getSlice(),slice(2,11,4))
3271         self.assertTrue(p2.isEqual(SlicePartDefinition(2,11,4))[0])
3272         self.assertTrue(p2.isEqual(p2.deepCopy())[0])
3273         self.assertTrue(not p2.isEqual(SlicePartDefinition(1,11,4))[0])
3274         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,10,4))[0])
3275         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,11,3))[0])
3276         pass
3277
3278     def testSwig2DAIGetIdsStrictlyNegative1(self):
3279         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3280         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([1,2,6])))
3281         pass
3282
3283     def testSwig2DAIReplaceOneValByInThis1(self):
3284         d=DataArrayInt([4,-5,-1,0,-5,99,-7,5])
3285         d.changeValue(-5,900)
3286         self.assertTrue(d.isEqual(DataArrayInt([4,900,-1,0,900,99,-7,5])))
3287         pass
3288
3289     def testSwig2DAIGetMinMaxValues1(self):
3290         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3291         a,b=d.getMinMaxValues()
3292         self.assertEqual(a,-7)
3293         self.assertEqual(b,99)
3294         pass
3295
3296     def testSwig2DAIBuildUniqueNotSorted1(self):
3297         d=DataArrayInt([-5,3,2,-1,2,3,-6,4,2,-5,3,7])
3298         self.assertTrue(d.buildUniqueNotSorted().isEqual(DataArrayInt([-5,3,2,-1,-6,4,7])))
3299         pass
3300
3301     def testSwig2UMeshChangeOrientationOfCells1(self):
3302         """ Here testing changeOrientationOfCell method on unstructured meshes lying on no coords."""
3303         m=MEDCouplingUMesh("mesh",1)
3304         c=DataArrayInt([NORM_SEG2,4,5,NORM_SEG2,10,8,NORM_SEG3,20,7,33,NORM_SEG3,13,15,12,NORM_SEG2,3,2,NORM_SEG4,5,6,8,10,NORM_SEG4,34,33,3,2])
3305         cI=DataArrayInt([0,3,6,10,14,17,22,27])
3306         m.setConnectivity(c,cI)
3307         m.changeOrientationOfCells()
3308         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_SEG2,5,4,NORM_SEG2,8,10,NORM_SEG3,7,20,33,NORM_SEG3,15,13,12,NORM_SEG2,2,3,NORM_SEG4,6,5,10,8,NORM_SEG4,33,34,2,3])))
3309         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3310         # testing 2D cells
3311         m=MEDCouplingUMesh("mesh",2)
3312         c=DataArrayInt([NORM_TRI3,0,1,2,NORM_QUAD4,3,4,5,6,NORM_POLYGON,7,8,9,10,11,NORM_TRI6,12,13,14,15,16,17,NORM_QUAD8,18,19,20,21,22,23,24,25,NORM_QPOLYG,26,27,28,29,30,31,32,33,34,35])
3313         cI=DataArrayInt([0,4,9,15,22,31,42])
3314         m.setConnectivity(c,cI)
3315         m.changeOrientationOfCells()
3316         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_TRI3,0,2,1,NORM_QUAD4,3,6,5,4,NORM_POLYGON,7,11,10,9,8,NORM_TRI6,12,14,13,17,16,15,NORM_QUAD8,18,21,20,19,25,24,23,22,NORM_QPOLYG,26,30,29,28,27,35,34,33,32,31])))
3317         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3318         pass
3319
3320     def testSwig2StructuredMeshCellLocation1(self):
3321         # 3D
3322         arrX=DataArrayDouble(5) ; arrX.iota()
3323         arrY=DataArrayDouble(4) ; arrY.iota()
3324         arrZ=DataArrayDouble(3) ; arrZ.iota()
3325         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3326         li=[]
3327         liExp3D=[(0,0,0),(1,0,0),(2,0,0),(3,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(0,0,1),(1,0,1),(2,0,1),(3,0,1),(0,1,1),(1,1,1),(2,1,1),(3,1,1),(0,2,1),(1,2,1),(2,2,1),(3,2,1)]
3328         self.assertEqual(24,m.getNumberOfCells())
3329         for i in range(m.getNumberOfCells()):
3330             li.append(m.getLocationFromCellId(i))
3331             pass
3332         self.assertEqual(liExp3D,li)
3333         self.assertRaises(InterpKernelException,m.getLocationFromCellId,24)
3334         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3335         # 2D
3336         arrX=DataArrayDouble(5) ; arrX.iota()
3337         arrY=DataArrayDouble(4) ; arrY.iota()
3338         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3339         li=[]
3340         liExp2D=[(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2)]
3341         self.assertEqual(12,m.getNumberOfCells())
3342         for i in range(m.getNumberOfCells()):
3343             li.append(m.getLocationFromCellId(i))
3344             pass
3345         self.assertEqual(liExp2D,li)
3346         self.assertRaises(InterpKernelException,m.getLocationFromCellId,12)
3347         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3348         # 1D
3349         arrX=DataArrayDouble(5) ; arrX.iota()
3350         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3351         self.assertEqual(4,m.getNumberOfCells())
3352         for i in range(m.getNumberOfCells()):
3353             self.assertEqual((i,),m.getLocationFromCellId(i))
3354             pass
3355         self.assertRaises(InterpKernelException,m.getLocationFromCellId,4)
3356         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3357         pass
3358
3359     def testSwig2StructuredMeshNodeLocation1(self):
3360         # 3D
3361         arrX=DataArrayDouble(5) ; arrX.iota()
3362         arrY=DataArrayDouble(4) ; arrY.iota()
3363         arrZ=DataArrayDouble(3) ; arrZ.iota()
3364         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3365         li=[]
3366         liExp3D=[(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(0,0,1),(1,0,1),(2,0,1),(3,0,1),(4,0,1),(0,1,1),(1,1,1),(2,1,1),(3,1,1),(4,1,1),(0,2,1),(1,2,1),(2,2,1),(3,2,1),(4,2,1),(0,3,1),(1,3,1),(2,3,1),(3,3,1),(4,3,1),(0,0,2),(1,0,2),(2,0,2),(3,0,2),(4,0,2),(0,1,2),(1,1,2),(2,1,2),(3,1,2),(4,1,2),(0,2,2),(1,2,2),(2,2,2),(3,2,2),(4,2,2),(0,3,2),(1,3,2),(2,3,2),(3,3,2),(4,3,2)]
3367         self.assertEqual(60,m.getNumberOfNodes())
3368         for i in range(m.getNumberOfNodes()):
3369             li.append(m.getLocationFromNodeId(i))
3370             pass
3371         self.assertEqual(liExp3D,li)
3372         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,60)
3373         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3374         # 2D
3375         arrX=DataArrayDouble(5) ; arrX.iota()
3376         arrY=DataArrayDouble(4) ; arrY.iota()
3377         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3378         li=[]
3379         liExp2D=[(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2),(0,3),(1,3),(2,3),(3,3),(4,3)]
3380         self.assertEqual(20,m.getNumberOfNodes())
3381         for i in range(m.getNumberOfNodes()):
3382             li.append(m.getLocationFromNodeId(i))
3383             pass
3384         self.assertEqual(liExp2D,li)
3385         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,20)
3386         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3387         # 1D
3388         arrX=DataArrayDouble(5) ; arrX.iota()
3389         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3390         self.assertEqual(5,m.getNumberOfNodes())
3391         for i in range(m.getNumberOfNodes()):
3392             self.assertEqual((i,),m.getLocationFromNodeId(i))
3393             pass
3394         self.assertRaises(InterpKernelException,m.getLocationFromCellId,5)
3395         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3396         pass
3397
3398     def testSwig2DataArrayPrintNotTooLong1(self):
3399         """ Now that DataArrayDouble and DataArrayInt and pickelized they can appear in YACS ports. Avoid to have too heavy string representation of them."""
3400         d=DataArrayDouble(2000) ; d.iota() ; d.rearrange(2)
3401         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3402         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3403         self.assertEqual(st1,st2)
3404         #
3405         d=DataArrayDouble(2002) ; d.iota() ; d.rearrange(2)
3406         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3407         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3408         self.assertEqual(st1,st2)
3409         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3410         ## Now for DataArrayInt
3411         d=DataArrayInt(2000) ; d.iota() ; d.rearrange(2)
3412         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3413         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3414         self.assertEqual(st1,st2)
3415         #
3416         d=DataArrayInt(2002) ; d.iota() ; d.rearrange(2)
3417         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3418         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3419         self.assertEqual(st1,st2)
3420         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3421         pass
3422
3423     def testExtrudedMeshWithoutZipCoords1(self):
3424         """This test checks that MEDCouplingUMesh.buildExtrudedMesh do not perform a zipCoords."""
3425         arr=DataArrayDouble([(0.,0.),(1.,0.),(2.,0.),(3.,0.)])
3426         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(arr)
3427         m.allocateCells()
3428         m.insertNextCell(NORM_SEG2,[1,2])
3429         arr1D=DataArrayDouble([(0.,0.),(0.,1.5),(0.,2.)])
3430         m1D=MEDCouplingUMesh("mesh1D",1) ; m1D.setCoords(arr1D)
3431         m1D.allocateCells()
3432         m1D.insertNextCell(NORM_SEG2,[0,1])
3433         m1D.insertNextCell(NORM_SEG2,[1,2])
3434         m2D=m.buildExtrudedMesh(m1D,0)
3435         self.assertEqual(m.getCoords().getHiddenCppPointer(),m2D.getCoords().getHiddenCppPointer())
3436         coo=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1.5),(1,1.5),(2,1.5),(3,1.5),(0,2),(1,2),(2,2),(3,2)])
3437         self.assertTrue(m.getCoords().isEqual(coo,1e-12))
3438         self.assertTrue(m2D.getNodalConnectivity().isEqual(DataArrayInt([4,1,2,6,5,4,5,6,10,9])))
3439         self.assertTrue(m2D.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10])))
3440         pass
3441
3442     def testPointSetAreAllNodesFetched1(self):
3443         m=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
3444         m.setCoords(arr,arr)
3445         m=m.buildUnstructured()
3446         self.assertTrue(m.areAllNodesFetched())
3447         m2=m[[0,2,3,4,5]]
3448         self.assertTrue(not m2.areAllNodesFetched())
3449         m2.zipCoords()
3450         self.assertTrue(m2.areAllNodesFetched())
3451         pass
3452
3453     def testMEDCouplingPointSetComputeDiameterField1(self):
3454         arrX=DataArrayDouble([0.,1.1,1.7,2.1])
3455         arrY=DataArrayDouble([0.,0.7,0.8,1.9])
3456         arrZ=DataArrayDouble([0.,1.3,2.1,2.4])
3457         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
3458         f=m.computeDiameterField()
3459         f.checkConsistencyLight()
3460         exp=DataArrayDouble([1.8411952639521971,1.5937377450509227,1.5297058540778357,1.705872210923198,1.4352700094407325,1.3638181696985856,2.0273134932713295,1.8055470085267789,1.7492855684535902,1.5297058540778357,1.2206555615733703,1.1357816691600546,1.3638181696985856,1.004987562112089,0.9,1.7492855684535902,1.4866068747318506,1.4177446878757824,1.3379088160259651,0.9695359714832656,0.8602325267042626,1.1445523142259597,0.6782329983125266,0.5099019513592785,1.5842979517754858,1.2884098726725124,1.208304597359457])
3461         self.assertTrue(exp.isEqual(f.getArray(),1e-12))
3462         m1=m[::2]
3463         m2=m[1::2]
3464         m2.simplexize(PLANAR_FACE_5)
3465         m3=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
3466         f=m3.computeDiameterField()
3467         f.checkConsistencyLight()
3468         exp2=DataArrayDouble([1.8411952639521971,1.5297058540778357,1.4352700094407325,2.0273134932713295,1.7492855684535902,1.2206555615733703,1.3638181696985856,0.9,1.4866068747318506,1.3379088160259651,0.8602325267042626,0.6782329983125266,1.5842979517754858,1.208304597359457,1.47648230602334,1.47648230602334,1.47648230602334,1.47648230602334,1.47648230602334,1.7029386365926402,1.7029386365926402,1.7029386365926402,1.7029386365926402,1.7029386365926402,1.3601470508735445,1.3601470508735445,1.3601470508735445,1.3601470508735445,1.3601470508735445,1.70293863659264,1.70293863659264,1.70293863659264,1.70293863659264,1.70293863659264,1.3601470508735445,1.3601470508735445,1.3601470508735445,1.3601470508735445,1.3601470508735445,1.063014581273465,1.063014581273465,1.063014581273465,1.063014581273465,1.063014581273465,1.0,1.0,1.0,1.0,1.0,1.5556349186104046,1.5556349186104046,1.5556349186104046,1.5556349186104046,1.5556349186104046,1.3601470508735443,1.3601470508735443,1.3601470508735443,1.3601470508735443,1.3601470508735443,0.9219544457292886,0.9219544457292886,0.9219544457292886,0.9219544457292886,0.9219544457292886,1.140175425099138,1.140175425099138,1.140175425099138,1.140175425099138,1.140175425099138,0.5,0.5,0.5,0.5,0.5,1.2529964086141667,1.2529964086141667,1.2529964086141667,1.2529964086141667,1.2529964086141667])
3469         self.assertTrue(exp2.isEqual(f.getArray(),1e-12))
3470         # TRI3 - spacedim = 2
3471         coo=DataArrayDouble([(1,1),(5,1.9),(2.1,3)])
3472         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3473         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3474             m.setNodalConnectivity(DataArrayInt(c))
3475             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3476             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3477             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3478             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3479             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3480         # TRI3 - spacedim = 3
3481         coo=DataArrayDouble([(1.3198537928820775,1.0991902391274959,-0.028645697595823361),(5.2486835106806335,2.2234012799688281,0.30368935050077939),(2.2973688139447361,3.1572023778066649,0.10937756365410012)])
3482         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3483         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3484             m.setNodalConnectivity(DataArrayInt(c))
3485             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3486             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3487             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3488             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3489             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3490         # QUAD4 - spacedim = 2
3491         coo=DataArrayDouble([(0,2),(2,0),(6,4),(4,9)])
3492         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3493         exp3=sqrt(85.)
3494         for delta in range(4):
3495             c = [(elt + delta) % 4 for elt in range(4)]
3496             m.setNodalConnectivity(DataArrayInt(c))
3497             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3498             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3499             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3500             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3501             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3502             c.reverse()
3503             m.setNodalConnectivity(DataArrayInt(c))
3504             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3505             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3506             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3507             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3508             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3509         # QUAD4 - spacedim = 3
3510         coo=DataArrayDouble([(0.26570992384234871,2.0405889913271817,-0.079134238105786903),(2.3739976619218064,0.15779148692781009,0.021842842914139737),(6.1207841448393197,4.3755532938679655,0.43666375769970678),(3.8363255342943359,9.2521096041694229,0.41551170895942313)])
3511         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3512         for delta in range(4):
3513             c = [(elt + delta) % 4 for elt in range(4)]
3514             m.setNodalConnectivity(DataArrayInt(c))
3515             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3516             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3517             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3518             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3519             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3520             c.reverse()
3521             m.setNodalConnectivity(DataArrayInt(c))
3522             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3523             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3524             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3525             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3526             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3527         # PENTA6
3528         # noise of coo=DataArrayDouble([(0,0,0),(1,0,0),(0,1,0),(0,0,2),(1,0,2),(0,1,2)]) + rotation([0.7,-1.2,0.6],[-4,-1,10],0.3)
3529         coo=DataArrayDouble([(-0.28594726851554486,-0.23715005500928255,-0.10268080010083136),(0.6167364988633947,-0.008923258436324799,-0.08574087516687756),(-0.6132873463333834,0.6943403970881654,-0.2806118260037991),(-0.40705974936532896,-0.05868487929989308,1.7724055544436323),(0.5505955507861958,0.19145393798144705,1.8788156352163994),(-0.6092686217773406,0.812502961290914,1.685712743757831)])
3530         m=MEDCoupling1SGTUMesh("mesh",NORM_PENTA6) ; m.setCoords(coo)
3531         exp4=2.5041256256889888
3532         self.assertAlmostEqual(exp4,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3533         for delta in range(3):
3534             c = [(elt + delta) % 3 for elt in range(3)]
3535             c+=[elt+3 for elt in c]
3536             m.setNodalConnectivity(DataArrayInt(c))
3537             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3538             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3539             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3540             c.reverse()
3541             m.setNodalConnectivity(DataArrayInt(c))
3542             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3543             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3544             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3545         # HEXA8
3546         # noise of coo=DataArrayDouble([(0,0,0),(1,0,0),(1,1,0),(0,1,0),(0,0,2),(1,0,2),(1,1,2),(0,1,2)]) + rotation([0.7,-1.2,0.6],[-4,-1,10],0.3)
3547         coo=DataArrayDouble([(-0.21266406388867243,-0.3049569460042527,-0.11012394815006032),(0.7641037943272584,-0.06990814759929553,-0.0909613877456491),(0.47406560768559974,0.8681310650341907,-0.2577311403703061),(-0.5136830410871793,0.644390554940524,-0.21319015989794698),(-0.4080167737381202,-0.12853761670628505,1.7869166291979348),(0.5650318811550441,0.20476257733110748,1.8140158890821603),(0.3230844436386215,1.1660778242678538,1.7175073141333406),(-0.6656588358432984,0.918357550969698,1.7566470691880265)])
3548         m=MEDCoupling1SGTUMesh("mesh",NORM_HEXA8) ; m.setCoords(coo)
3549         exp5=2.5366409441884215
3550         self.assertAlmostEqual(exp5,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3551         for delta in range(4):
3552             c = [(elt + delta) % 4 for elt in range(4)]
3553             c+=[elt+4 for elt in c]
3554             m.setNodalConnectivity(DataArrayInt(c))
3555             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3556             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3557             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3558             c.reverse()
3559             m.setNodalConnectivity(DataArrayInt(c))
3560             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3561             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3562             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3563         # PYRA5 (1) 5th node is further
3564         # noise of coo=DataArrayDouble([(0,0,0),(1,0,0),(1,1,0),(0,1,0),(0.5,0.5,2)]) + rotation([0.7,-1.2,0.6],[-4,-1,10],0.3)
3565         coo=DataArrayDouble([(-0.31638393672228626,-0.3157865246451914,-0.12555467233075002),(0.7281379795666488,0.03836511217237115,-0.08431662762197323),(0.4757967840735147,0.8798897996143908,-0.2680890320119049),(-0.5386339871809047,0.5933159894201252,-0.2975311238319419),(0.012042592988768974,0.534282135495012,1.7859521682027926)])
3566         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3567         exp6=2.1558368027391386
3568         self.assertAlmostEqual(exp6,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3569         for delta in range(4):
3570             c = [(elt + delta) % 4 for elt in range(4)]
3571             c+=[4]
3572             m.setNodalConnectivity(DataArrayInt(c))
3573             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp6,12)
3574             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3575             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp6,12)
3576             pass
3577         # PYRA5 (2) 5th node is closer
3578         # noise of coo=DataArrayDouble([(0,0,0),(1,0,0),(1,1,0),(0,1,0),(0.5,0.5,0.1)]) + rotation([0.7,-1.2,0.6],[-4,-1,10],0.3)
3579         coo=DataArrayDouble([(-0.31638393672228626,-0.3157865246451914,-0.12555467233075002),(0.7281379795666488,0.03836511217237115,-0.08431662762197323),(0.4757967840735147,0.8798897996143908,-0.2680890320119049),(-0.5386339871809047,0.5933159894201252,-0.2975311238319419),(0.092964408350795,0.33389670321297005,-0.10171764888060142)])
3580         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3581         exp7=1.4413563787228953
3582         self.assertAlmostEqual(exp7,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3583         for delta in range(4):
3584             c = [(elt + delta) % 4 for elt in range(4)]
3585             c+=[4]
3586             m.setNodalConnectivity(DataArrayInt(c))
3587             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp7,12)
3588             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3589             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp7,12)
3590             pass
3591         # TETRA4
3592         # noise of coo=DataArrayDouble([(0,0,0),(1,0,0),(0,1,0),(1,1,1)]) + rotation([0.7,-1.2,0.6],[-4,-1,10],0.3)
3593         coo=DataArrayDouble([(-0.2256894071281369,-0.27631691290428106,-0.20266086543995965),(0.655458695100186,-0.08173323565551605,-0.19254662462061933),(-0.49893490718947264,0.5848097154568599,-0.3039928255382145),(0.2988102920828487,1.0582266398878504,0.7347375047372364)])
3594         m=MEDCoupling1SGTUMesh("mesh",NORM_TETRA4) ; m.setCoords(coo)
3595         exp8=1.7131322579364157
3596         self.assertAlmostEqual(exp8,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3597         for c in [[0,1,2,3],[0,3,2,1],[0,1,3,2],[0,2,3,1],[0,3,1,2],[0,2,1,3]]:
3598             for i in range(4):
3599                 m.setNodalConnectivity(DataArrayInt([(elt+i)%4 for elt in c]))
3600                 self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp8,12)
3601                 m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3602                 self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp8,12)
3603                 pass
3604             pass
3605         pass
3606
3607     def testMEDCouplingSkyLineArray(self):
3608         index = DataArrayInt([ 0, 3, 5, 6, 6 ])
3609         value = DataArrayInt([ 1, 2, 3, 2, 3, 3 ])
3610
3611         sla0 = MEDCouplingSkyLineArray()
3612         self.assertEqual( -1, sla0.getNumberOf() )
3613         self.assertEqual( 0,  sla0.getLength() )
3614         sla0.set( index, value )
3615         self.assertTrue( index.isEqual( sla0.getIndexArray() ))
3616         self.assertTrue( value.isEqual( sla0.getValuesArray() ))
3617         self.assertEqual( 4, sla0.getNumberOf() )
3618         self.assertEqual( 6, sla0.getLength() )
3619
3620         sla1 = MEDCouplingSkyLineArray( index, value )
3621         self.assertTrue( index.isEqual( sla1.getIndexArray() ))
3622         self.assertTrue( value.isEqual( sla1.getValuesArray() ))
3623         self.assertEqual( 4, sla1.getNumberOf() )
3624         self.assertEqual( 6, sla1.getLength() )
3625
3626         sla2 = MEDCouplingSkyLineArray( sla1 )
3627         self.assertTrue( index.isEqual( sla2.getIndexArray() ))
3628         self.assertTrue( value.isEqual( sla2.getValuesArray() ))
3629         self.assertEqual( 4, sla2.getNumberOf() )
3630         self.assertEqual( 6, sla2.getLength() )
3631
3632         indexVec = ivec(); indexVec.reserve( len( index ))
3633         for i in index: indexVec.push_back( i[0] )
3634         valueVec = ivec(); valueVec.reserve( len( value ))
3635         for i in value: valueVec.push_back( i[0] )
3636         sla3 = MEDCouplingSkyLineArray( indexVec, valueVec )
3637         self.assertTrue( index.isEqual( sla3.getIndexArray() ))
3638         self.assertTrue( value.isEqual( sla3.getValuesArray() ))
3639         self.assertEqual( 4, sla3.getNumberOf() )
3640         self.assertEqual( 6, sla3.getLength() )
3641
3642         pass
3643
3644     def testMEDCouplingSkyLineArrayThreeLevels(self):
3645         #  [[28,1,4]] , [[2,35,8], [9,10,1,12]]
3646         superi = DataArrayInt([ 0,1,3 ])
3647         index = DataArrayInt ([ 0,3,6,10 ])
3648         value = DataArrayInt ([ 28,1,4,2,35,8,9,10,1,12 ])
3649
3650         sla0 = MEDCouplingSkyLineArray()
3651         self.assertEqual( -1, sla0.getSuperNumberOf() )
3652         self.assertEqual( -1, sla0.getNumberOf() )
3653         self.assertEqual( 0,  sla0.getLength() )
3654         sla0.set3( superi.deepCopy(), index.deepCopy(), value.deepCopy() )
3655         self.assertTrue( superi.isEqual( sla0.getSuperIndexArray() ))
3656
3657         pack = sla0.getSimplePackSafe(2)
3658         self.assertEqual([9,10,1,12], pack)
3659         ids = sla0.findPackIds([0,1], [9,10,1,12])
3660         self.assertEqual([-1,1], ids)
3661
3662         sla0.deletePack(1, 1)
3663         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3664         self.assertEqual([28,1,4,2,35,8], val.getValues())
3665         self.assertEqual([0,3,6], idx.getValues())
3666         self.assertEqual([0,1,2], si.getValues())
3667
3668         sla0.pushBackPack(0, [3,2,1,0])
3669         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3670         self.assertEqual([0,2,3], si.getValues())
3671         self.assertEqual([0,3,7,10], idx.getValues())
3672         self.assertEqual([28,1,4,3,2,1,0,  2,35,8], val.getValues())
3673
3674         # Build connectivity from POLYHED connectivity
3675         cI = [0,16,41]
3676         c = [NORM_POLYHED, 1,2,3,-1,  2,3,4,-1,  3,4,5,-1,  4,5,6,
3677              NORM_POLYHED, 7,8,9,10,-1,  9,10,11,12,-1,  3,4,5,6,-1,  5,6,7,8,-1,  9,10,11,12]
3678         sla0 = MEDCouplingSkyLineArray.BuildFromPolyhedronConn(DataArrayInt(c), DataArrayInt(cI))
3679         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3680         self.assertEqual([0,4,9], si.getValues())
3681         self.assertEqual([0,3,6,9,12,16,20,24,28,32], idx.getValues())
3682         self.assertEqual([1,2,3,  2,3,4,  3,4,5,  4,5,6,
3683                           7,8,9,10,   9,10,11,12,  3,4,5,6,  5,6,7,8,  9,10,11,12], val.getValues())
3684         c1, cI1 = sla0.convertToPolyhedronConn()
3685         self.assertEqual(c1.getValues(), c)
3686         self.assertEqual(cI1.getValues(), cI)
3687         pass
3688
3689     def testMEDCouplingSkyLineArrayThreeLevels2(self):
3690         si = [0, 9, 15, 21]
3691         siRef = [0, 9, 16, 22]
3692         idx = [0,4,8,12,16,20,23,26,29,  32,36,40,44,48,52,  56,60,64,68,72,76,80]
3693         c = [1,0,2,3,  5,7,6,4,  1,5,4,0,  0,4,6,2,  2,6,7,3,  3,7,8,  7,5,8,  5,1,8,  1,3,8,
3694              9,1,3,10,  11,12,7,5,  9,11,5,1,  1,5,7,3,  3,7,12,10,  10,12,11,9,
3695              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3696         idxRef = [0,4,8,12,16,20,23,26,29,32,36,40,44,48,52,55,58, 62, 66, 70, 74, 78, 82 ]
3697         cRef = [1,0,2,3,  5,7,6,4,  1,5,4,0,  0,4,6,2,  2,6,7,3,  3,7,8,  7,5,8,  5,1,8,  1,3,8,
3698              9,1,3,10,  11,12,7,5,  9,11,5,1,  3,7,12,10,  10,12,11,9,  3,7,8,  7,5,8,
3699              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3700         sla0 = MEDCouplingSkyLineArray()
3701         sla0.set3( DataArrayInt(si), DataArrayInt(idx), DataArrayInt(c) )
3702         ids = sla0.findPackIds([1], [1,5,7,3])
3703         sla0.deletePack(1, ids[0])
3704         sla0.pushBackPack(1, [3,7,8])
3705         sla0.pushBackPack(1, [7,5,8])
3706         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3707         self.assertEqual(siRef, si.getValues())
3708         self.assertEqual(idxRef, idx.getValues())
3709         self.assertEqual(cRef, val.getValues())
3710
3711         idxRef2 = [0,4,8,12,16,20,23,26,29,32,36,40,42,46,50,53,56, 60, 64, 68, 72, 76, 80 ]
3712         cRef2 = [1,0,2,3,  5,7,6,4,  1,5,4,0,  0,4,6,2,  2,6,7,3,  3,7,8,  7,5,8,  5,1,8,  1,3,8,
3713              9,1,3,10,  11,12,7,5,  300,300,  3,7,12,10,  10,12,11,9,  3,7,8,  7,5,8,
3714              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3715         sla0.replacePack(1,2, [300,300])
3716         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3717         self.assertEqual(siRef, si.getValues())
3718         self.assertEqual(idxRef2, idx.getValues())
3719         self.assertEqual(cRef2, val.getValues())
3720
3721         sla0.replacePack(1,2, [9,11,5,1])
3722         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3723         self.assertEqual(siRef, si.getValues())
3724         self.assertEqual(idxRef, idx.getValues())
3725         self.assertEqual(cRef, val.getValues())
3726
3727         sla0.replaceSimplePack(11, [300,300])  # 11 is the abs index of pack (superIdx=1,idx=2)
3728         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3729         self.assertEqual(siRef, si.getValues())
3730         self.assertEqual(idxRef2, idx.getValues())
3731         self.assertEqual(cRef2, val.getValues())
3732
3733         sla0.replaceSimplePack(11, [9,11,5,1])  # 11 is the abs index of pack (superIdx=1,idx=2)
3734         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3735         self.assertEqual(siRef, si.getValues())
3736         self.assertEqual(idxRef, idx.getValues())
3737         self.assertEqual(cRef, val.getValues())
3738         pass
3739
3740     def testMEDCouplingUMeshgenerateGraph(self):
3741         # cartesian mesh 3x3
3742         arr=DataArrayDouble(4) ; arr.iota()
3743         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
3744         m=c.buildUnstructured()
3745         graph = m.generateGraph()
3746         # 0 1 2
3747         # 3 4 5
3748         # 6 7 8
3749         valRef=[ 0,1,3,
3750                  0,1,2,4,
3751                  1,2,5,
3752                  0,3,4,6,
3753                  1,3,4,5,7,
3754                  2,4,5,8,
3755                  3,6,7,
3756                  4,6,7,8,
3757                  5,7,8]
3758         self.assertEqual(valRef,list(graph.getValuesArray().getValues()));
3759
3760         indRef=[0, 3, 7, 10, 14, 19, 23, 26, 30, 33]
3761         self.assertEqual(indRef,list(graph.getIndexArray().getValues()));
3762         pass
3763
3764     def testSwig2MEDCouplingCurveLinearReprQuick1(self):
3765         """Non regression test. Error in m.__str__ when m is a MEDCouplingCurveLinear with spaceDim != meshDim."""
3766         arr=DataArrayDouble(12) ; arr.iota() ; arr.rearrange(2)
3767         m=MEDCouplingCurveLinearMesh()
3768         m.setCoords(arr)
3769         m.setNodeGridStructure([3,2])
3770         m.checkConsistencyLight()
3771         self.assertEqual(m.getMeshDimension(),2)
3772         self.assertEqual(m.getSpaceDimension(),2)
3773         self.assertTrue(not "mismatch" in m.__str__())
3774         self.assertTrue(not "mismatch" in m.__repr__())
3775         #
3776         arr=DataArrayDouble(18) ; arr.iota() ; arr.rearrange(3)
3777         m.setCoords(arr)
3778         self.assertEqual(m.getMeshDimension(),2)
3779         self.assertEqual(m.getSpaceDimension(),3)
3780         self.assertTrue(not "mismatch" in m.__str__())
3781         self.assertTrue(not "mismatch" in m.__repr__())# bug was here !
3782         pass
3783
3784     def testSwig2BugComputeOffsets1(self):
3785         """Non regression test. computeOffsetsFull on empty array must return 0."""
3786         d=DataArrayInt([3])
3787         d.computeOffsetsFull()
3788         self.assertTrue(d.isEqual(DataArrayInt([0,3])))
3789         d=DataArrayInt([])
3790         d.computeOffsets()
3791         self.assertTrue(d.isEqual(DataArrayInt([])))
3792         d=DataArrayInt([])
3793         d.computeOffsetsFull()
3794         self.assertTrue(d.isEqual(DataArrayInt([0]))) # <- bug was here
3795         pass
3796
3797     def testSwig2Cartesianize1(self):
3798         """Test of engine of cartesianize mechanism in medcoupling"""
3799         # cyl 2D
3800         arr=DataArrayDouble([(3,0.2),(2,1.6)]) ; arr.setInfoOnComponents(["A","BB"])
3801         arr2=arr.cartesianize(AX_CYL)
3802         arr2_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836),(-0.05839904460257763,1.9991472060830102)]) ; arr2_exp.setInfoOnComponents(["A","BB"])
3803         self.assertTrue(arr2_exp.isEqual(arr2,1e-14))
3804         # spher 2D
3805         arr3=arr.cartesianize(AX_SPHER)
3806         self.assertTrue(arr2_exp.isEqual(arr3,1e-14))
3807         # cyl 3D
3808         arr=DataArrayDouble([(3,0.2,7.1),(2,1.6,12.3)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3809         arr4=arr.cartesianize(AX_CYL)
3810         arr4_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836,7.1),(-0.05839904460257763,1.9991472060830102,12.3)]) ; arr4_exp.setInfoOnComponents(["A","BB","CCC"])
3811         self.assertTrue(arr4_exp.isEqual(arr4,1e-14))
3812         # spher 3D
3813         arr=DataArrayDouble([(3,0.2,0.5),(2,1.3,5.8)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3814         arr5=arr.cartesianize(AX_SPHER)
3815         arr5_exp=DataArrayDouble([(0.5230462208645272,0.2857414527616764,2.940199733523725),(1.706499157790973,-0.8953424658735863,0.5349976572491747)]) ; arr5_exp.setInfoOnComponents(["A","BB","CCC"])
3816         self.assertTrue(arr5_exp.isEqual(arr5,1e-14))
3817         #
3818         m=MEDCouplingCMesh() ; m.setName("aa") ; m.setDescription("bbb") ; m.setTime(4.125,5,6) ; m.setTimeUnit("ms")
3819         arrX=DataArrayDouble([0,1,2]) ; arrX.setInfoOnComponent(0,"ccc")
3820         arrY=DataArrayDouble([3,4,5,6]) ; arrY.setInfoOnComponent(0,"dddd")
3821         m.setCoords(arrX,arrY)
3822         m2=m.buildCurveLinear()
3823         #
3824         self.assertTrue(isinstance(m2,MEDCouplingCurveLinearMesh))
3825         self.assertEqual(m2.getName(),"aa")
3826         self.assertEqual(m2.getDescription(),"bbb")
3827         self.assertEqual(m2.getTime(),[4.125,5,6])
3828         self.assertEqual(m2.getTimeUnit(),"ms")
3829         m2c_exp=DataArrayDouble([(0.,3.),(1.,3.),(2.,3.),(0.,4.),(1.,4.),(2.,4.),(0.,5.),(1.,5.),(2.,5.),(0.,6.),(1.,6.),(2.,6.)]) ; m2c_exp.setInfoOnComponents(["ccc","dddd"])
3830         self.assertTrue(m2.getCoords().isEqual(m2c_exp,1e-14))
3831         self.assertEqual(m2.getNodeGridStructure(),(3,4))
3832         pass
3833
3834     def testRemoveIdsFromIndexedArrays1(self):
3835         arr=DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,504,505,601,602])
3836         arrI=DataArrayInt([0,3,7,8,8,13,15])
3837         # case where all elts in inputs are in
3838         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3839         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([501,502],arr2,arrI2))
3840         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,503,504,505,601,602])))
3841         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,11,13])))
3842         # case where part of elts in inputs are in
3843         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3844         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([504,507],arr2,arrI2))
3845         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,505,601,602])))
3846         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,12,14])))
3847         # case where no elts in inputs are in
3848         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3849         self.assertTrue(not MEDCouplingUMesh.RemoveIdsFromIndexedArrays([1,5,701],arr2,arrI2))
3850         self.assertTrue(arr2.isEqual(arr))
3851         self.assertTrue(arrI2.isEqual(arrI))
3852         pass
3853
3854     def testFieldIntIsOnStage1(self):
3855         """ My first test with field int."""
3856         m=MEDCouplingCMesh()
3857         m.setName("mesh")
3858         arrX=DataArrayDouble([0,1,2,3])
3859         m.setCoords(arrX,arrX)
3860         f=MEDCouplingFieldInt(ON_CELLS)
3861         f.setMesh(m)
3862         arr=DataArrayInt(8) ; arr.iota() ;f.setArray(arr)
3863         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
3864         arr=DataArrayInt(9) ; arr.iota() ;f.setArray(arr)
3865         f.checkConsistencyLight()
3866         f.setTimeUnit("ms")
3867         self.assertEqual(f.getTimeUnit(),"ms")
3868         f.setTime(3.2,5,6)
3869         a,b,c=f.getTime()
3870         self.assertEqual(b,5)
3871         self.assertEqual(c,6)
3872         self.assertEqual(a,3.2,12)
3873         pass
3874
3875     def testNoThrowOn1DGTU2UOnNullCells(self):
3876         """ Non regression test : no throw when trying to convert 1DGTUMesh to UMesh on an empty mesh"""
3877         m=MEDCoupling1DGTUMesh("",NORM_POLYGON) ; m.setCoords(DataArrayDouble([],0,3))
3878         m.setNodalConnectivity(DataArrayInt([]),DataArrayInt([0]))
3879         m=m.buildUnstructured()
3880         pass
3881
3882     def testExplodeMeshIntoMicroEdges1(self):
3883         """ test for new functionality MEDCouplingUMesh.explodeMeshIntoMicroEdges"""
3884         m=MEDCouplingUMesh("mesh",2)
3885         coo=DataArrayDouble([2,0,10,0,12,0,0,3,4,5,10,5,12,7,3,2.5,7,2.5,6,0,10,2.5,11,2.5,11,0,7,5],14,2)
3886         m.setCoords(coo)
3887         m.allocateCells()
3888         # here a mix of quadratic, linear cells. Non conform but conform considering micro edges
3889         m.insertNextCell(NORM_TRI6,[0,4,1,7,8,9])
3890         m.insertNextCell(NORM_TRI6,[1,5,2,10,11,12])
3891         m.insertNextCell(NORM_TRI6,[5,1,4,10,8,13])
3892         m.insertNextCell(NORM_TRI3,[3,4,7])
3893         m.insertNextCell(NORM_TRI3,[3,7,0])
3894         m.insertNextCell(NORM_TRI3,[6,2,11])
3895         m.insertNextCell(NORM_TRI3,[6,11,5])
3896         m.insertNextCell(NORM_TRI3,[6,5,13])
3897         m.insertNextCell(NORM_TRI3,[6,13,4])
3898         edges,d,di,rd,rdi=m.explodeMeshIntoMicroEdges() # <- new method
3899         self.assertTrue(MEDCoupling1SGTUMesh(edges).getNodalConnectivity().isEqual(DataArrayInt([0,7,7,4,4,8,8,1,1,9,9,0,1,10,10,5,5,11,11,2,2,12,12,1,4,13,13,5,3,4,7,3,0,3,6,2,11,6,5,6,13,6,4,6])))
3900         self.assertEqual(edges.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer())
3901         self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,7,6,3,2,12,13,14,1,15,15,0,16,17,9,18,18,8,19,19,13,20,20,12,21])))
3902         self.assertTrue(di.isEqual(DataArrayInt([0,6,12,18,21,24,27,30,33,36])))
3903         self.assertTrue(rd.isEqual(DataArrayInt([0,4,0,3,0,2,0,2,0,0,1,2,1,2,1,6,1,5,1,1,2,8,2,7,3,3,4,4,5,5,6,6,7,7,8,8])))
3904         self.assertTrue(rdi.isEqual(DataArrayInt([0,2,4,6,8,9,10,12,14,16,18,19,20,22,24,25,27,28,29,31,33,35,36])))
3905         pass
3906
3907     def testFieldIntIsOnStage2(self):
3908         """ Very important test to check that isEqual of MEDCouplingFieldInt is OK !"""
3909         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3910         m1=m1.buildUnstructured() ; m1.setName("mesh")
3911         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setMesh(m1)
3912         arr1=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr1.setInfoOnComponents(["aa","bbb"])
3913         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
3914         #
3915         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3916         m2=m2.buildUnstructured() ; m2.setName("mesh")
3917         f2=MEDCouplingFieldInt(ON_CELLS) ; f2.setMesh(m2)
3918         arr2=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr2.setInfoOnComponents(["aa","bbb"])
3919         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
3920         #
3921         self.assertTrue(f1.isEqual(f2,1e-12,0))
3922         f1.getArray()[:]*=2
3923         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3924         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0))
3925         f1.getArray()[:]/=2
3926         self.assertTrue(f1.isEqual(f2,1e-12,0))
3927         #
3928         f1.setName("F1")
3929         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3930         f1.setName("f1")
3931         self.assertTrue(f1.isEqual(f2,1e-12,0))
3932         #
3933         f1.getArray().setInfoOnComponents(["aa","bbbb"])
3934         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3935         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0))
3936         f1.getArray().setInfoOnComponents(["aa","bbb"])
3937         self.assertTrue(f1.isEqual(f2,1e-12,0))
3938         #
3939         f3=f2.deepCopy()
3940         self.assertTrue(f1.isEqual(f3,1e-12,0))
3941         #
3942         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
3943             f4=MEDCouplingFieldInt(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
3944             arr4=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr4.setInfoOnComponents(["aa","bbb"])
3945             f4.setArray(arr4) ; f4.setName("f1")
3946             self.assertEqual(f1.isEqual(f4,1e-12,0),expected)
3947             pass
3948         pass
3949
3950     def testDADSymmetry1(self):
3951         arr=DataArrayDouble([2,3,4],1,3)
3952         res=arr.symmetry3DPlane([0.,0.,0.],[0.,0.,2.])
3953         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-4],1,3),1e-14))
3954         #
3955         res=arr.symmetry3DPlane([-1000,100,-1],[0.,0.,2.])
3956         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-6],1,3),1e-14))
3957         #
3958         res=arr.symmetry3DPlane([0,0,0],[1.,0.,0.])
3959         self.assertTrue(res.isEqual(DataArrayDouble([-2,3,4],1,3),1e-14))
3960         #
3961         res=arr.symmetry3DPlane([0,0,0],[0.,1.,0.])
3962         self.assertTrue(res.isEqual(DataArrayDouble([2,-3,4],1,3),1e-14))
3963         #
3964         res=arr.symmetry3DPlane([0,0,0],[-1.,1.,0.])
3965         self.assertTrue(res.isEqual(DataArrayDouble([3,2,4],1,3),1e-14))
3966         #
3967         plane=[5.,4.,-7.]
3968         a=DataArrayDouble(DataArrayDouble.GiveBaseForPlane(plane))
3969         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[1]).magnitude()[0],0.,13)
3970         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[2]).magnitude()[0],0.,13)
3971         self.assertAlmostEqual(DataArrayDouble.Dot(a[1],a[2]).magnitude()[0],0.,13)
3972         coo=DataArrayDouble.Aggregate([10*a[0]+10*a[1],-10*a[0]+10*a[1],-10*a[0]-10*a[1],10*a[0]-10*a[1]])
3973         m=MEDCouplingUMesh("",2) ; m.setCoords(coo) ; m.allocateCells()
3974         m.insertNextCell(NORM_QUAD4,[0,1,2,3])
3975         d,_=m.distanceToPoint(arr)
3976         res=arr.symmetry3DPlane([0.,0.,0.],plane) #
3977         d2,_=m.distanceToPoint(res)
3978         self.assertAlmostEqual(abs(d-d2),0.,12)
3979         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[0])[0],0.,12)
3980         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[1])[0],0.,12)
3981         self.assertAlmostEqual((res-arr).magnitude()[0]-2*d,0.,12)
3982         self.assertTrue(res.isEqual(DataArrayDouble([2.666666666666667,3.5333333333333333,3.0666666666666666],1,3),1e-12))
3983         pass
3984
3985     def testExtrudedMeshBuildUnstructured1(self):
3986         """ Non reg test. ExtrudedMesh.buildUnstructured used to modify the coordinates of this. It used to lead to an extra amount of memory consumtion. The aim of the test here is to check that buildUnstructured method do not alter the content of the mesh"""
3987         arr=DataArrayDouble(11) ; arr.iota()
3988         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3989         m=m.buildUnstructured()
3990         faces=MEDCouplingCMesh() ; faces.setCoords(arr,arr)
3991         faces=faces.buildUnstructured()
3992         faces.setCoords(m.getCoords())
3993         em=MEDCouplingMappedExtrudedMesh(m,faces,0)
3994         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12))
3995         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
3996         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
3997         pass
3998
3999     def testExtrudedMeshFromCMesh1(self):
4000         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
4001         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ)
4002         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
4003         self.assertTrue(ex.buildUnstructured().isEqual(mesh3D.buildUnstructured(),1e-12))
4004         pass
4005
4006     def testCylSpherPolarCartFiesta(self):
4007         """Test to check new capabilities from to cyl spher polar cart conversions"""
4008         da0=DataArrayDouble([(7,13,2.1),(15,2,-4.2),(-6,12,1.4),(-1,10,-3.5),(-2.1,-3.3,2.7),(-1.4,-0.2,-4),(1.2,-1.3,2.8),(2.5,-0.4,-3)])
4009         self.assertTrue(da0.fromCartToCyl().fromCylToCart().isEqual(da0,1e-12))
4010         self.assertTrue(da0.fromCartToSpher().fromSpherToCart().isEqual(da0,1e-12))
4011         da1=da0[:,:2]
4012         self.assertTrue(da1.fromCartToPolar().fromPolarToCart().isEqual(da1,1e-12))
4013         #
4014         da2=da0[::-1]
4015         pt=[-2.1,0.3,1.1]
4016         vect=[1.,-0.5,0.7]
4017         #
4018         expected=DataArrayDouble([(2.023252607860588,14.699865529518792,1.4934531458504392),(10.91440936818929,7.5640431386495965,8.384564361982669),(-7.1057844983810705,7.853310978767742,-8.354240440239513),(-8.414001990391881,-1.1910713519565301,-6.405928468241733),(-4.35426264858532,1.5616250027467273,1.0916611827536211),(-2.0571195416878396,-2.0266572603615365,-3.1082019786735042),(-1.5714718759210784,0.39735366651452453,2.8883535460356216),(0.8733250236104675,-3.800053532703407,0.45485882614734185)])
4019         da4=da0.fromCartToCylGiven(da2,pt,vect)
4020         self.assertTrue(da4.isEqual(expected,1e-12))
4021         #
4022         m=MEDCouplingUMesh.Build0DMeshFromCoords(da2)
4023         self.assertEqual(m.getDirectAccessOfCoordsArrIfInStructure().getHiddenCppPointer(),da2.getHiddenCppPointer())
4024         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m) ; f0.setArray(da0)
4025         f=f0.computeVectorFieldCyl(pt,vect)
4026         f.checkConsistencyLight()
4027         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
4028         self.assertTrue(f.getArray().isEqual(expected,1e-12))
4029         pass
4030
4031     def testDAIIndicesOfSubPart(self):
4032         a=DataArrayInt([9,10,0,6,4,11,3,8])
4033         b=DataArrayInt([6,0,11,8])
4034         c=a.indicesOfSubPart(b)
4035         self.assertTrue(c.isEqual(DataArrayInt([3,2,5,7])))
4036         #
4037         d=DataArrayInt([9,10,0,6,4,11,0,8])
4038         self.assertRaises(InterpKernelException,d.indicesOfSubPart,b) # 0 appears twice in the d array
4039         f=DataArrayInt([6,0,11,8,12])
4040         self.assertRaises(InterpKernelException,a.indicesOfSubPart,f) # 12 in f does not exist in a
4041         pass
4042
4043     def testDACirPermAndRev1(self):
4044         d=DataArrayInt([1,2,3,4,5,6])
4045         d2=d.deepCopy() ; d2.circularPermutation(1)
4046         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4047         d2=d.deepCopy() ; d2.circularPermutation()
4048         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4049         d2=d.deepCopy() ; d2.circularPermutation(2)
4050         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4051         d2=d.deepCopy() ; d2.circularPermutation(3)
4052         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4053         d2=d.deepCopy() ; d2.circularPermutation(4)
4054         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4055         d2=d.deepCopy() ; d2.circularPermutation(5)
4056         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4057         d2=d.deepCopy() ; d2.circularPermutation(6)
4058         self.assertTrue(d2.isEqual(d))
4059         d2=d.deepCopy() ; d2.circularPermutation(7)
4060         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4061         d2=d.deepCopy() ; d2.circularPermutation(-1)
4062         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4063         d2=d.deepCopy() ; d2.circularPermutation(-2)
4064         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4065         d2=d.deepCopy() ; d2.circularPermutation(-3)
4066         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4067         d2=d.deepCopy() ; d2.circularPermutation(-4)
4068         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4069         d2=d.deepCopy() ; d2.circularPermutation(-5)
4070         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4071         d2=d.deepCopy() ; d2.circularPermutation(-6)
4072         self.assertTrue(d2.isEqual(d))
4073         d2=d.deepCopy() ; d2.circularPermutation(-7)
4074         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4075         ####
4076         d=DataArrayInt([1,2,3,4,5,6],2,3)
4077         d2=d.deepCopy() ; d2.circularPermutationPerTuple(0)
4078         self.assertTrue(d2.isEqual(d))
4079         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4080         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4081         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4082         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4083         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4084         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4085         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4086         self.assertTrue(d2.isEqual(d))
4087         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4088         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4089         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4090         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4091         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4092         self.assertTrue(d2.isEqual(d))
4093         d.setInfoOnComponents(["a","b","c"])
4094         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4095         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4096         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4097         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4098         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4099         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4100         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4101         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4102         d2=d.deepCopy() ; d2.circularPermutationPerTuple(4)
4103         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4104         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4105         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4106         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4107         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4108         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4109         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4110         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-4)
4111         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4112         ####
4113         d2=d.deepCopy() ; d2.reversePerTuple()
4114         d3Exp=DataArrayInt([3,2,1,6,5,4],2,3) ; d3Exp.setInfoOnComponents(["c","b","a"])
4115         self.assertTrue(d3Exp.isEqual(d2))
4116         pass
4117
4118     def testDAExplodeComponents1(self):
4119         d=DataArrayDouble([(1,2),(3,4),(5,6)])
4120         d.setName("toto")
4121         d.setInfoOnComponents(["a","b"])
4122         d2=d.explodeComponents()
4123         self.assertEqual(len(d2),2)
4124         #
4125         d3=DataArrayDouble([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4126         self.assertTrue(d3.isEqual(d2[0],1e-14))
4127         d4=DataArrayDouble([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4128         self.assertTrue(d4.isEqual(d2[1],1e-14))
4129         #
4130         d=DataArrayInt([(1,2),(3,4),(5,6)])
4131         d.setName("toto")
4132         d.setInfoOnComponents(["a","b"])
4133         d2=d.explodeComponents()
4134         self.assertEqual(len(d2),2)
4135         #
4136         d3=DataArrayInt([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4137         self.assertTrue(d3.isEqual(d2[0]))
4138         d4=DataArrayInt([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4139         self.assertTrue(d4.isEqual(d2[1]))
4140         pass
4141
4142     def testVoronoi2D_1(self):
4143         """ Check of voronize on 2D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4144         tmp=MEDCouplingCMesh("mesh")
4145         arr=DataArrayDouble(5) ; arr.iota()
4146         tmp.setCoords(arr,arr)
4147         tmp=tmp.build1SGTUnstructured()
4148         conn=tmp.getNodalConnectivity()
4149         conn.rearrange(4)
4150         conn.reversePerTuple()
4151         conn.circularPermutationPerTuple(2)
4152         conn.rearrange(1)
4153         coo=tmp.getCoords().deepCopy()
4154         coo.circularPermutationPerTuple(2) ; coo*=0.1
4155         coo.reverse()
4156         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4157         coo2*=0.14
4158         coo2.circularPermutationPerTuple(2)
4159         tmp.getCoords()[:]+=coo2*coo
4160         #
4161         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4162         field.setName("MyFieldPG") ; field.setMesh(tmp)
4163         field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4164         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4165         field.setArray(arr)
4166         field.checkConsistencyLight()
4167         ####
4168         fieldOnCell=field.voronoize(1e-12) # hot point
4169         fieldOnCell.checkConsistencyLight()
4170         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),112)
4171         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),256)
4172         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4173         meaRef=field.getMesh().getMeasureField(True).getArray()
4174         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4175         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4176         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4177         mea.rearrange(7)
4178         mea2=mea.sumPerTuple()
4179         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4180         pass
4181
4182     def testVoronoi2D_2(self):
4183         """More aggressive 2D test. No warping here. To check data"""
4184         tmp=MEDCouplingCMesh("mesh")
4185         arr=DataArrayDouble([-1.,1.])
4186         tmp.setCoords(arr,arr)
4187         tmp=tmp.buildUnstructured()
4188         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4189         field.setName("MyFieldPG") ; field.setMesh(tmp)
4190         field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4191         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4192         field.setArray(arr)
4193         field.checkConsistencyLight()
4194         #
4195         fieldOnCell=field.voronoize(1e-12) # hot point
4196         fieldOnCell.checkConsistencyLight()
4197         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4198         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),16)
4199         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4200         meaRef=DataArrayDouble([0.65,0.4710714285714285,0.59875,0.68,0.73875,0.4,0.46142857142857235])
4201         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4202         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4203         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4204         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4205         #
4206         gsPt=field.getLocalizationOfDiscr()
4207         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4208         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4209         self.assertTrue(b.isIota(8))
4210         #
4211         self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),22)# last little test to reduce chance of errors. For humans there 21 but last tiny edge is split into 2 subedges due to alg
4212         pass
4213
4214     def testVoronoi3D_1(self):
4215         """ Check of voronize on 3D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4216         tmp=MEDCouplingCMesh("mesh")
4217         arr=DataArrayDouble(5) ; arr.iota()
4218         tmp.setCoords(arr,arr)
4219         tmp=tmp.build1SGTUnstructured()
4220         conn=tmp.getNodalConnectivity()
4221         conn.rearrange(4)
4222         conn.reversePerTuple()
4223         conn.circularPermutationPerTuple(2)
4224         conn.rearrange(1)
4225         coo=tmp.getCoords().deepCopy()
4226         coo.circularPermutationPerTuple(2) ; coo*=0.1
4227         coo.reverse()
4228         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4229         coo2*=0.14
4230         coo2.circularPermutationPerTuple(2)
4231         tmp.getCoords()[:]+=coo2*coo
4232         #
4233         tmp.changeSpaceDimension(3,0.)
4234         #
4235         arrZ=DataArrayDouble(5) ; arrZ.iota()
4236         mz=MEDCouplingCMesh() ; mz.setCoords(arrZ) ; mz=mz.buildUnstructured()
4237         mz.changeSpaceDimension(3,0.)
4238         mz.getCoords().circularPermutationPerTuple(1)
4239         tmp=tmp.buildUnstructured().buildExtrudedMesh(mz,0)
4240         #
4241         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4242         field.setName("MyFieldPG") ; field.setMesh(tmp)
4243         field.setGaussLocalizationOnType(NORM_HEXA8,[-1,-1,-1,  1,-1,-1,  1,1,-1,  -1,1,-1, -1,-1,1, 1,-1,1, 1,1,1, -1,1,1],[0.8,-0.8,0., 0.8,0.8,0., -0.8,0.8,0., -0.8,-0.8,0., 0.,0.,0., 0.2,0.2,0., 0.1,0.3,0.],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4244         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4245         field.setArray(arr)
4246         field.checkConsistencyLight()
4247         ####
4248         fieldOnCell=field.voronoize(1e-12) # hot point
4249         fieldOnCell.checkConsistencyLight()
4250         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4251         meaRef=field.getMesh().getMeasureField(True).getArray()
4252         mea=fieldOnCell.getMesh().getMeasureField(False).getArray()
4253         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4254         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4255         mea.rearrange(7)
4256         mea2=mea.sumPerTuple()
4257         delta=(meaRef-mea2)
4258         delta.abs()
4259         delta/=meaRef
4260         self.assertEqual(len(delta.findIdsNotInRange(0,1e-2)),0) # 1e-2 because hexa8 are warped !
4261         pass
4262
4263     def testVoronoi3D_2(self):
4264         """More aggressive 3D test. No warping here. To check data"""
4265         tmp=MEDCouplingCMesh("mesh")
4266         arr=DataArrayDouble([-1.,1.])
4267         tmp.setCoords(arr,arr,arr)
4268         tmp=tmp.buildUnstructured()
4269         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4270         field.setName("MyFieldPG") ; field.setMesh(tmp)
4271         field.setGaussLocalizationOnType(NORM_HEXA8,[-1,-1,-1,  1,-1,-1,  1,1,-1,  -1,1,-1, -1,-1,1, 1,-1,1, 1,1,1, -1,1,1],[0.8,-0.8,0., 0.8,0.8,0., -0.8,0.8,0., -0.8,-0.8,0., 0.,0.,0., 0.2,0.2,0., 0.1,0.3,0.],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4272         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4273         field.setArray(arr)
4274         field.checkConsistencyLight()
4275         #
4276         fieldOnCell=field.voronoize(1e-12) # hot point
4277         fieldOnCell.checkConsistencyLight()
4278         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4279         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),34)
4280         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4281         meaRef=DataArrayDouble([1.3,0.9421428571428572,1.1975,1.36,1.4775,0.8,0.922857142857143])
4282         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4283         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4284         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4285         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4286         #
4287         gsPt=field.getLocalizationOfDiscr()
4288         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4289         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4290         self.assertTrue(b.isIota(8))
4291         #
4292         self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),2*7+21)
4293         pass
4294
4295     def testVoronoi3D_8(self):
4296         """More aggressive 3D test. Bug EDF 15094"""
4297         mesh = MEDCouplingUMesh("myMeshForAnthony",3)
4298         coords = [2.20449946892035, 0.0015302058397972198, -0.014025000000000001, 2.20449522028465, 0.00459061457029268, -0.0109750000232271, 2.20449946892035, 0.0015302058397972198, -0.0125000000116135, 2.20577243296484, 0.00153108944037966, -0.0137555135576553, 2.20517315768831, 0.0045920262990614006, -0.010764118475206199, 2.2054749202977, 0.0015308829283677198, -0.012259816016430801, 2.20449787568164, 0.00306041094231961, -0.0125000000116135, 2.20449787568164, 0.00306041094231961, -0.011737500017420301, 2.20449946892035, 0.0015302058397972198, -0.0132625000058068, 2.20513595094259, 0.0015306476400884401, -0.0138902567788277, 2.20483418898648, 0.0045913204346770395, -0.0108695592492167, 2.20498719460902, 0.00153054438408247, -0.0123799080140222, 2.20547332635401, 0.0030617651191343705, -0.012259816016430801, 2.20532457012796, 0.00306155860717217, -0.0115119672458185, 2.20562367663127, 0.0015309861843736902, -0.013007664787043, 2.20582504233773, 0.0045933837758852306, -0.010139577890770399, 2.20642582267143, 0.004594634833691141, -0.009125379014333041, 2.20612543250458, 0.00459400930478819, -0.00963247845255172, 2.2069524110381, 0.004595731395029229, -0.00776049693994639, 2.20668911685476, 0.004595183114360191, -0.00844293797713971, 2.20832419990944, 0.0076643330146060895, -0.0108392857142857, 2.20832419990944, 0.0076643330146060895, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.0108392857142857, 2.2062381754171, 0.00459424407928538, -0.00868052596233734, 2.20832419990944, 0.0076643330146060895, -0.00975535714285714, 2.20768462042811, 0.00766211325442122, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.00975535714285714, 2.20768462042811, 0.00766211325442122, -0.0108392857142857, 2.20737554490036, 0.00612882358882901, -0.009982332364309381, 2.20763883863969, 0.00612955462931014, -0.00821596275568748, 2.2066421405633703, 0.00612678727660696, -0.00867597726688296, 2.20643557437203, 0.006126213741329251, -0.0104894318025281, 2.2065952932276, 0.00459498773715731, -0.00822051145114186, 2.20603160887741, 0.00459381392758531, -0.00941005192655387]
4299         da = DataArrayDouble.New(coords,35,3)
4300         mesh.setCoords(da)
4301         mesh.allocateCells()
4302         mesh.insertNextCell(NORM_PENTA15, [0, 2, 1, 3, 5, 4, 8, 7, 6, 14, 13, 12, 9, 11, 10])
4303         mesh.insertNextCell(NORM_HEXA20, [20, 23, 22, 21, 16, 15, 24, 18, 28, 27, 26, 25, 17, 34, 33, 19, 29, 32, 31, 30])
4304         mesh.zipCoords()
4305         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4306         f.setMesh(mesh)
4307         f.setName("myFieldForAnthony")
4308         f.setGaussLocalizationOnCells([0],[-1, 1, 0, -1, 0, 0, -1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, -1, 0.5, 0, -1, 0, 0.5, -1, 0.5, 0.5, 1, 0.5, 0, 1, 0, 0.5, 1, 0.5, 0.5, 0, 1, 0, 0, 0, 0, 0, 0, 1],[-0.774597, 0.333333, 0.333333, -0.774597, 0.470142, 0.470142, -0.774597, 0.0597159, 0.470142, -0.774597, 0.470142, 0.0597159, -0.774597, 0.101287, 0.101287, -0.774597, 0.797427, 0.101287, -0.774597, 0.101287, 0.797427, 0, 0.333333, 0.333333, 0, 0.470142, 0.470142, 0, 0.0597159, 0.470142, 0, 0.470142, 0.0597159, 0, 0.101287, 0.101287, 0, 0.797427, 0.101287, 0, 0.101287, 0.797427, 0.774597, 0.333333, 0.333333, 0.774597, 0.470142, 0.470142, 0.774597, 0.0597159, 0.470142, 0.774597, 0.470142, 0.0597159, 0.774597, 0.101287, 0.101287, 0.774597, 0.797427, 0.101287, 0.774597, 0.101287, 0.797427],[0.0625, 0.0367762, 0.0367762, 0.0367762, 0.0349831, 0.0349831, 0.0349831, 0.1, 0.0588418, 0.0588418, 0.0588418, 0.055973, 0.055973, 0.055973, 0.0625, 0.0367762, 0.0367762, 0.0367762, 0.0349831, 0.0349831, 0.0349831])
4309         f.setGaussLocalizationOnCells([1],[-1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 0, -1, 0, 1, -1, 1, 0, -1, 0, -1, -1, -1, 0, 1, 0, 1, 1, 1, 0, 1, 0, -1, 1, -1, -1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0],[-0.774597, -0.774597, -0.774597, -0.774597, -0.774597, 0, -0.774597, -0.774597, 0.774597, -0.774597, 0, -0.774597, -0.774597, 0, 0, -0.774597, 0, 0.774597, -0.774597, 0.774597, -0.774597, -0.774597, 0.774597, 0, -0.774597, 0.774597, 0.774597, 0, -0.774597, -0.774597, 0, -0.774597, 0, 0, -0.774597, 0.774597, 0, 0, -0.774597, 0, 0, 0, 0, 0, 0.774597, 0, 0.774597, -0.774597, 0, 0.774597, 0, 0, 0.774597, 0.774597, 0.774597, -0.774597, -0.774597, 0.774597, -0.774597, 0, 0.774597, -0.774597, 0.774597, 0.774597, 0, -0.774597, 0.774597, 0, 0, 0.774597, 0, 0.774597, 0.774597, 0.774597, -0.774597, 0.774597, 0.774597, 0, 0.774597, 0.774597, 0.774597],[0.171468, 0.274348, 0.171468, 0.274348, 0.438957, 0.274348, 0.171468, 0.274348, 0.171468, 0.274348, 0.438957, 0.274348, 0.438957, 0.702332, 0.438957, 0.274348, 0.438957, 0.274348, 0.171468, 0.274348, 0.171468, 0.274348, 0.438957, 0.274348, 0.171468, 0.274348, 0.171468])
4310         arr = DataArrayDouble(48, 3)
4311         arr[:, 0] = list(range(48))
4312         arr[:, 1] = 100 + arr[:, 0]
4313         arr[:, 2] = 200 + arr[:, 0]
4314         f.setArray(arr)
4315         fieldOnCell=f.voronoize(1e-12) # hot point
4316         fieldOnCell.checkConsistencyLight()
4317         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),48)
4318         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),127)
4319         meaRef=f.getMesh().getMeasureField(True).getArray(); meaRef.rearrange(2); meaRef2 = meaRef.sumPerTuple()
4320         mea=fieldOnCell.getMesh().getMeasureField(True).getArray(); mea.rearrange(48); mea2 = mea.sumPerTuple()
4321         self.assertTrue(mea2.isEqual(meaRef2,1e-9))
4322         pass
4323
4324     def testVoronoi3DSurf_1(self):
4325         tmp=MEDCouplingCMesh("mesh")
4326         arr=DataArrayDouble(5) ; arr.iota()
4327         tmp.setCoords(arr,arr)
4328         tmp=tmp.build1SGTUnstructured()
4329         conn=tmp.getNodalConnectivity()
4330         conn.rearrange(4)
4331         conn.reversePerTuple()
4332         conn.circularPermutationPerTuple(2)
4333         conn.rearrange(1)
4334         coo=tmp.getCoords().deepCopy()
4335         coo.circularPermutationPerTuple(2) ; coo*=0.1
4336         coo.reverse()
4337         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4338         coo2*=0.14
4339         coo2.circularPermutationPerTuple(2)
4340         tmp.getCoords()[:]+=coo2*coo
4341         #
4342         tmp.changeSpaceDimension(3,0.)    # force 3D surf
4343         tmp.rotate([0,0,0],[1,0,0],pi/3)  # force 3D surf
4344         #
4345         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4346         field.setName("MyFieldPG") ; field.setMesh(tmp)
4347         field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4348         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4349         field.setArray(arr)
4350         field.checkConsistencyLight()
4351         #####
4352         fieldOnCell=field.voronoize(1e-12);
4353         fieldOnCell.checkConsistencyLight()
4354         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4355         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),2)
4356         self.assertEqual(field.getMesh().getSpaceDimension(),fieldOnCell.getMesh().getSpaceDimension())
4357         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4358         meaRef=field.getMesh().getMeasureField(True).getArray()
4359         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4360         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4361         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4362         mea.rearrange(7)
4363         mea2=mea.sumPerTuple()
4364         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4365         pass
4366
4367     def testVoronoi1D_1(self):
4368         tmp=MEDCouplingCMesh("mesh")
4369         arr=DataArrayDouble(5) ; arr.iota()
4370         tmp.setCoords(arr)
4371         tmp=tmp.build1SGTUnstructured()
4372         tmp1=tmp.deepCopy()
4373         tmp.changeSpaceDimension(2,0.)
4374         tmp.getCoords()[:,1]=pi/(len(arr)-1)*tmp.getCoords()[:,0]
4375         tmp.getCoords()[:,0]=1.
4376         tmp.setCoords(tmp.getCoords().fromPolarToCart())
4377         tmp.changeSpaceDimension(3,1.)
4378         #
4379         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4380         field.setName("MyFieldPG") ; field.setMesh(tmp)
4381         field.setGaussLocalizationOnType(NORM_SEG2,[-1.,1.],[-0.9,-0.8,0.2,0.4,0.5,0.9],[0.1,0.1,0.1,0.1,0.1,0.5])
4382         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4383         field.setArray(arr)
4384         field.checkConsistencyLight()
4385         ####
4386         fieldOnCell=field.voronoize(1e-12);
4387         fieldOnCell.checkConsistencyLight()
4388         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4389         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),1)
4390         assert(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4391         meaRef=field.getMesh().getMeasureField(True).getArray()
4392         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4393         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4394         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),6)
4395         mea.rearrange(6)
4396         mea2=mea.sumPerTuple()
4397         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4398         pass
4399
4400     def testFieldDoubleConvertToLinear1(self):
4401         da=DataArrayDouble([0,0, 1,0, 2,0, 3,0, 0.5,0, 1.5,0, 2.5,0, 0,0.5, 0.5,0.5, 1, 0.5, 1.5,0.5, 2,0.5, 3,0.5, 0,1, 1,1, 2,1, 2.5,1, 3,1],18,2)
4402         da.setInfoOnComponents(["g","h"])
4403         m=MEDCouplingUMesh("mesh",2)
4404         m.setCoords(da)
4405         m.allocateCells()
4406         m.insertNextCell(NORM_TRI6,[0,1,13,4,9,7])
4407         m.insertNextCell(NORM_TRI6,[1,2,14,5,10,9])
4408         m.insertNextCell(NORM_QUAD8,[2,3,17,15,6,12,16,11])
4409         refPtr=m.getHiddenCppPointer()
4410         f=MEDCouplingFieldDouble(ON_NODES)
4411         f.setName("aa")
4412         f.setMesh(m)
4413         arr=DataArrayDouble(18*2) ; arr.iota()
4414         arr.rearrange(2)
4415         arr.setInfoOnComponents(["bb","ccc"])
4416         f.setArray(arr)
4417         f.setTime(0.5,2,3)
4418         f.checkConsistencyLight()
4419         #
4420         f1=f.convertQuadraticCellsToLinear()
4421         self.assertTrue(f.getMesh().getHiddenCppPointer(),refPtr)
4422         self.assertTrue(f1.getMesh().getHiddenCppPointer()!=refPtr)
4423         f1.checkConsistencyLight()
4424         self.assertEqual(f1.getName(),"aa")
4425         self.assertEqual(f1.getTypeOfField(),ON_NODES)
4426         da0=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)])
4427         da0.setInfoOnComponents(["g","h"])
4428         self.assertTrue(f1.getMesh().getCoords().isEqual(da0,1e-12))
4429         self.assertTrue(f1.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4430         self.assertTrue(f1.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4431         da2=DataArrayDouble([(0,1),(2,3),(4,5),(6,7),(26,27),(28,29),(30,31),(34,35)])
4432         da2.setInfoOnComponents(["bb","ccc"])
4433         self.assertTrue(f1.getArray().isEqual(da2,1e-12))
4434         self.assertEqual(f1.getTime(),[0.5,2,3])
4435         #
4436         f2=MEDCouplingFieldDouble(ON_CELLS)
4437         f2.setName("aa")
4438         f2.setMesh(m)
4439         arr=DataArrayDouble(3*2) ; arr.iota()
4440         arr.rearrange(2)
4441         arr.setInfoOnComponents(["bb","ccc"])
4442         f2.setArray(arr)
4443         f2.setTime(0.5,2,3)
4444         f2.checkConsistencyLight()
4445         f3=f2.convertQuadraticCellsToLinear()
4446         self.assertEqual(f2.getMesh().getHiddenCppPointer(),refPtr)
4447         f3.checkConsistencyLight()
4448         self.assertTrue(f3.getMesh().getHiddenCppPointer()!=refPtr)
4449         self.assertTrue(f3.getMesh().getCoords().isEqual(da0,1e-12))
4450         self.assertTrue(f3.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4451         self.assertTrue(f3.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4452         self.assertEqual(f2.getArray().getHiddenCppPointer(),f3.getArray().getHiddenCppPointer())
4453         self.assertEqual(f3.getTime(),[0.5,2,3])
4454         pass
4455
4456     def testBuild1DMeshFromCoords1(self):
4457         da=DataArrayDouble([(3,4),(5,6),(7,8)])
4458         da.setName("ZeArr")
4459         da0=da.deepCopy()
4460         m=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4461         m.checkConsistencyLight()
4462         self.assertEqual(da0.getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
4463         self.assertTrue(da.isEqual(da0,1e-12))
4464         self.assertEqual(m.getName(),da.getName())
4465         self.assertEqual(m.getMeshDimension(),1)
4466         self.assertTrue(isinstance(m,MEDCouplingUMesh))
4467         m1=MEDCoupling1SGTUMesh(m)
4468         m1.checkConsistencyLight()
4469         self.assertTrue(m1.getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2])))
4470         #
4471         da0.setName("")
4472         m2=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4473         m2.checkConsistencyLight()
4474         self.assertEqual(da0.getHiddenCppPointer(),m2.getCoords().getHiddenCppPointer())
4475         self.assertEqual(m2.getName(),"Mesh")
4476         pass
4477
4478     def testVoronoi3D_3(self):
4479         """Non regression test to check MEDCouplingUMesh::clipSingle3DCellByPlane"""
4480         coo=DataArrayDouble([0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],4,3)
4481         m=MEDCouplingUMesh("mesh",3)
4482         m.setCoords(coo) ; m.allocateCells()
4483         m.insertNextCell(NORM_TETRA4,[0,2,3,1])
4484         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4485         f.setMesh(m) ; f.setName("field")
4486         f.setGaussLocalizationOnType(NORM_TETRA4,[0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105], [0.041667,0.041667,0.041667,0.041667])
4487         f.setArray(DataArrayDouble([0,1,2,3]))
4488         f3=f.voronoize(1e-12)
4489         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4490         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4491         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4492         pass
4493
4494     def testVoronoi3D_4(self):
4495         """Idem testVoronoi3D_3 except that here quadratic cells are considered"""
4496         coo=DataArrayDouble([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],10,3)
4497         m=MEDCouplingUMesh("mesh",3)
4498         m.setCoords(coo) ; m.allocateCells()
4499         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4500         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4501         f.setMesh(m) ; f.setName("field")
4502         f.setGaussLocalizationOnType(NORM_TETRA10,[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],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105], [0.041667,0.041667,0.041667,0.041667])
4503         f.setArray(DataArrayDouble([0,1,2,3]))
4504         f3=f.voronoize(1e-12)
4505         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4506         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4507         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4508         pass
4509
4510     def testVoronoi3D_5(self):
4511         """ Cell 0 of Barreau_Elga_V11.rmed and sslv07b.rmed. HEXA8 cut regularly into 8 parts"""
4512         coo=DataArrayDouble([(0.024,0.024,1.2),(0.024,0.048,1.2),(0.048,0.024,1.2),(0.048,0.048,1.2),(0.024,0.024,1.6),(0.024,0.048,1.6),(0.048,0.024,1.6),(0.048,0.048,1.6)])
4513         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4514         m.insertNextCell(NORM_HEXA8,[0,2,6,4,1,3,7,5])
4515         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4516         f.setGaussLocalizationOnType(NORM_HEXA8,[-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.577350269189626, -0.577350269189626, -0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626],[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
4517         arr=DataArrayDouble(8) ; arr.iota() ; f.setArray(arr)
4518         f.checkConsistencyLight()
4519         #
4520         vol=f.getMesh().getMeasureField(False).getIJ(0,0)
4521         f2=f.voronoize(1e-12)
4522         f2.checkConsistencyLight()
4523         self.assertEqual(f2.getNumberOfTuples(),8)
4524         volRef=vol/8
4525         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isUniform(volRef,1e-12))
4526         pass
4527
4528     def testVoronoi3D_6(self):
4529         """ Cell 0 of brokenshire.med (and pace.med). TETRA10 split into 4 parts"""
4530         coo=DataArrayDouble([(50.,-50.,200.0),(50.0,-30.,200.0),(30.,-50.,200.0),(50.,-50.,180.0),(50.,-40.,200.0),(40.,-50.,200.0),(50.,-50.,190.0),(40.,-40.,200.0),(50.,-40.,190.0),(40.,-50.,190.0)])
4531         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4532         m.insertNextCell(NORM_TETRA10,[2,0,1,3,5,4,7,9,6,8])
4533         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4534         f.setGaussLocalizationOnType(NORM_TETRA10,[0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0.5, 0.5, 0.5, 0, 0.5, 0, 0, 0.5, 0, 0.5],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105],[0.041666666666666664, 0.041666666666666664, 0.041666666666666664, 0.041666666666666664])
4535         arr=DataArrayDouble(4) ; arr.iota() ; f.setArray(arr)
4536         f.checkConsistencyLight()
4537         f2=f.voronoize(1e-12)
4538         f2.checkConsistencyLight()
4539         self.assertEqual(f2.getNumberOfTuples(),4)
4540         arr=f2.getMesh().getMeasureField(False).getArray()
4541         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(DataArrayDouble([378.0546928833331, 318.42621348333586, 318.4262134833361, 318.4262134833278]),1e-6))
4542         pass
4543
4544     def testVoronoi3D_7(self):
4545         """ sslv07a.rmed. HEXA20 split into 27 parts """
4546         coo=DataArrayDouble([(-0.5,-0.5,0.0),(-0.25,-0.5,0.0),(0.0,-0.5,0.0),(-0.5,0.0,0.0),(-0.5,-0.25,0.0),(0.0,0.0,0.0),(0.0,-0.25,0.0),(-0.25,0.0,0.0),(-0.5,-0.5,1.0),(-0.25,-0.5,1.0),(0.0,-0.5,1.0),(0.0,-0.25,1.0),(0.0,0.0,1.0),(-0.25,0.0,1.0),(-0.5,0.0,1.0),(-0.5,-0.25,1.0),(-0.5,-0.5,0.5),(0.0,-0.5,0.5),(0.0,0.0,0.5),(-0.5,0.0,0.5)])
4547         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4548         m.insertNextCell(NORM_HEXA20,[0,3,5,2,8,14,12,10,4,7,6,1,15,13,11,9,16,19,18,17])
4549         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4550         f.setGaussLocalizationOnType(NORM_HEXA20,
4551                                      [-1,-1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,-1,1,1,1,1,1,1,-1,1,-1,0,-1,0,1,-1,1,0,-1,0,-1,-1,-1,0,1,0,1,1,1,0,1,0,-1,1,-1,-1,0,-1,1,0,1,1,0,1,-1,0],
4552                                      [-0.774597,-0.774597,-0.774597,-0.774597,-0.774597,0,-0.774597,-0.774597,0.774597,-0.774597,0,-0.774597,-0.774597,0,0,-0.774597,0,0.774597,-0.774597,0.774597,-0.774597,-0.774597,0.774597,0,-0.774597,0.774597,0.774597,0,-0.774597,-0.774597,0,-0.774597,0,0,-0.774597,0.774597,0,0,-0.774597,0,0,0,0,0,0.774597,0,0.774597,-0.774597,0,0.774597,0,0,0.774597,0.774597,0.774597,-0.774597,-0.774597,0.774597,-0.774597,0,0.774597,-0.774597,0.774597,0.774597,0,-0.774597,0.774597,0,0,0.774597,0,0.774597,0.774597,0.774597,-0.774597,0.774597,0.774597,0,0.774597,0.774597,0.774597],
4553                                      [0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.438957,0.702332,0.438957,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468])
4554         arr=DataArrayDouble(27) ; arr.iota() ; f.setArray(arr)
4555         f.checkConsistencyLight()
4556         f2=f.voronoize(1e-12)
4557         a=0.007187820185770747 ; b=0.0090870678008658 ; c=0.011488156225861077 ; d=0.014523687548277797
4558         ref=DataArrayDouble(27) ; ref[::2]=a ; ref[1::2]=b
4559         ref[[4,10,12,14,16,22]]=c ; ref[13]=d  # 6 cells 4,10,12,14,16,22 are the 6 cells boarding the most inner cell 13
4560         #
4561         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-7))
4562         pass
4563
4564     def testConvertQuadToLin4Gauss_1(self):
4565         coo=DataArrayDouble([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],10,3)
4566         m=MEDCouplingUMesh("mesh",3)
4567         m.setCoords(coo) ; m.allocateCells()
4568         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4569         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4570         f.setMesh(m) ; f.setName("field")
4571         aaaa=[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]
4572         bbbb=[0.1381966011250105,0.1381966011250105,0.1381966011250105,0.1381966011250105,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.1381966011250105]
4573         cccc=[0.041667,0.041667,0.041667,0.041667]
4574         f.setGaussLocalizationOnType(NORM_TETRA10,aaaa,bbbb,cccc)
4575         f.setArray(DataArrayDouble([0,1,2,3]))
4576         f.setTime(1.,2,3)
4577         #
4578         mcpy=m.deepCopy() ; mcpy.convertQuadraticCellsToLinear() ; mcpy.zipCoords()
4579         #
4580         f2=f.convertQuadraticCellsToLinear()
4581         f2.checkConsistencyLight()
4582         self.assertTrue(f2.getMesh().isEqual(mcpy,1e-12))
4583         self.assertTrue(f2.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4584         self.assertEqual(f2.getNbOfGaussLocalization(),1)
4585         gl=f2.getGaussLocalization(0)
4586         self.assertEqual(gl.getType(),NORM_TETRA4)
4587         self.assertTrue(DataArrayDouble(gl.getRefCoords()).isEqual(DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0]),1e-12))
4588         self.assertTrue(DataArrayDouble(gl.getGaussCoords()).isEqual(DataArrayDouble(bbbb),1e-12))
4589         self.assertTrue(DataArrayDouble(gl.getWeights()).isEqual(DataArrayDouble(cccc),1e-12))
4590         self.assertEqual(f2.getName(),"field")
4591         self.assertEqual(f2.getTime(),[1.,2,3])
4592         pass
4593
4594     def testDADCumSum1(self):
4595         d=DataArrayDouble([3.,2.,4.,5.])
4596         self.assertTrue(d.cumSum().isEqual(DataArrayDouble([0.,3.,5.,9.,14.]),1e-12))
4597         d2=DataArrayDouble([])
4598         self.assertTrue(d2.cumSum().isEqual(DataArrayDouble([0.]),1e-12))
4599         d.rearrange(2)
4600         self.assertRaises(InterpKernelException,d.cumSum)
4601         pass
4602
4603     def testDAIFromLinkedListOfPairToList1(self):
4604         d=DataArrayInt([(5,7),(7,3),(3,12),(12,17)])
4605         zeRes=DataArrayInt([5,7,3,12,17])
4606         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4607         d.rearrange(1)
4608         self.assertRaises(InterpKernelException,d.fromLinkedListOfPairToList)
4609         d.rearrange(2)
4610         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4611         d2=DataArrayInt([(5,7)])
4612         self.assertTrue(d2.fromLinkedListOfPairToList().isEqual(DataArrayInt([5,7])))
4613         d3=DataArrayInt([(5,7),(7,3),(4,12),(12,17)])
4614         self.assertRaises(InterpKernelException,d3.fromLinkedListOfPairToList) # not a linked list of pair
4615         d4=DataArrayInt([(5,7),(7,3),(12,3),(12,17)])
4616         self.assertRaises(InterpKernelException,d4.fromLinkedListOfPairToList) # not a linked list of pair, but can be repaired !
4617         d4.sortEachPairToMakeALinkedList()
4618         self.assertTrue(d4.fromLinkedListOfPairToList().isEqual(zeRes))
4619         pass
4620
4621     def testUMeshExplodeIntoEdges1(self):
4622         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured()
4623         self.assertEqual(m.getMeshDimension(),3)
4624         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4625         b0,b1,b2,b3,b4=m.explode3DMeshTo1D()
4626         self.assertTrue(a0.isEqual(b0,1e-12))
4627         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4628         #
4629         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4630         self.assertEqual(m.getMeshDimension(),2)
4631         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4632         b0,b1,b2,b3,b4=m.buildDescendingConnectivity()
4633         self.assertTrue(a0.isEqual(b0,1e-12))
4634         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4635         pass
4636
4637     def testUMeshComputeEnlargedNeighborsOfNodes(self):
4638         m=MEDCouplingCMesh() ; arr=DataArrayDouble(4) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4639         a,b=m.computeEnlargedNeighborsOfNodes()
4640         aExp=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])
4641         bExp=DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84])
4642         self.assertTrue(a.isEqual(aExp))
4643         self.assertTrue(b.isEqual(bExp))
4644         m2=m[[1,2,3]]
4645         c,d=m2.computeEnlargedNeighborsOfNodes()
4646         cExp=DataArrayInt([2,5,6,1,3,5,6,7,2,6,7,5,8,9,1,2,4,6,8,9,1,2,3,5,7,2,3,6,4,5,9,4,5,8])
4647         dExp=DataArrayInt([0,0,3,8,11,14,20,25,28,31,34,34,34,34,34,34,34])
4648         self.assertTrue(c.isEqual(cExp))
4649         self.assertTrue(d.isEqual(dExp))
4650         pass
4651
4652     def testDAIfindIdsExt1(self):
4653         d=DataArrayInt([4,6,-2,3,7,0,10])
4654         self.assertTrue(d.findIdsGreaterOrEqualTo(3).isEqual(DataArrayInt([0,1,3,4,6])))
4655         self.assertTrue(d.findIdsGreaterThan(3).isEqual(DataArrayInt([0,1,4,6])))
4656         self.assertTrue(d.findIdsLowerThan(3).isEqual(DataArrayInt([2,5])))
4657         self.assertTrue(d.findIdsLowerOrEqualTo(3).isEqual(DataArrayInt([2,3,5])))
4658         pass
4659
4660     def testDAFacto1(self):
4661         """Test focused of new wrapped methods for MEDCouplingFieldInt thanks to code factorization."""
4662         d=DataArrayDouble(7) ; d.iota()
4663         m=MEDCouplingUMesh.Build1DMeshFromCoords(d)
4664         f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(m) ; arr=DataArrayInt(6) ; arr.iota() ; f.setArray(arr) ; f.checkConsistencyLight()
4665         f_0=f[::2] # test is here
4666         self.assertTrue(f_0.getArray().isEqual(DataArrayInt([0,2,4])))
4667         self.assertTrue(f_0.getMesh().isEqual(m[[0,2,4]],1e-12))
4668         #
4669         f2=MEDCouplingFieldInt(ON_NODES) ; f2.setMesh(m) ; arr=DataArrayInt(7) ; arr.iota() ; f2.setArray(arr) ; f2.checkConsistencyLight()
4670         f_1=f2[::2] # test is here
4671         self.assertTrue(f_1.getArray().isEqual(DataArrayInt([0,1,2,3,4,5])))
4672         m_1=m[[0,2,4]] ; m_1.zipCoords()
4673         self.assertTrue(f_1.getMesh().isEqual(m_1,1e-12))
4674         pass
4675
4676     def testFieldFloatIsOnStage1(self):
4677         """ My first test with field int."""
4678         m=MEDCouplingCMesh()
4679         m.setName("mesh")
4680         arrX=DataArrayDouble([0,1,2,3])
4681         m.setCoords(arrX,arrX)
4682         f=MEDCouplingFieldFloat(ON_CELLS)
4683         f.setMesh(m)
4684         arr=DataArrayFloat(8) ; arr.iota() ;f.setArray(arr)
4685         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
4686         arr=DataArrayFloat(9) ; arr.iota() ;f.setArray(arr)
4687         f.checkConsistencyLight()
4688         f.setTimeUnit("ms")
4689         self.assertEqual(f.getTimeUnit(),"ms")
4690         f.setTime(3.2,5,6)
4691         a,b,c=f.getTime()
4692         self.assertEqual(b,5)
4693         self.assertEqual(c,6)
4694         self.assertEqual(a,3.2,12)
4695         pass
4696
4697     def testFieldFloatIsOnStage2(self):
4698         """ Very important test to check that isEqual of MEDCouplingFieldFloat is OK !"""
4699         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4700         m1=m1.buildUnstructured() ; m1.setName("mesh")
4701         f1=MEDCouplingFieldFloat(ON_CELLS) ; f1.setMesh(m1)
4702         arr1=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr1.setInfoOnComponents(["aa","bbb"])
4703         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
4704         #
4705         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4706         m2=m2.buildUnstructured() ; m2.setName("mesh")
4707         f2=MEDCouplingFieldFloat(ON_CELLS) ; f2.setMesh(m2)
4708         arr2=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr2.setInfoOnComponents(["aa","bbb"])
4709         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
4710         #
4711         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4712         f1.getArray()[:]*=2
4713         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4714         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4715         f1.getArray()[:]/=2
4716         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4717         #
4718         f1.setName("F1")
4719         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4720         f1.setName("f1")
4721         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4722         #
4723         f1.getArray().setInfoOnComponents(["aa","bbbb"])
4724         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4725         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4726         f1.getArray().setInfoOnComponents(["aa","bbb"])
4727         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4728         #
4729         f3=f2.deepCopy()
4730         self.assertTrue(f1.isEqual(f3,1e-12,0.))
4731         #
4732         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
4733             f4=MEDCouplingFieldFloat(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
4734             arr4=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr4.setInfoOnComponents(["aa","bbb"])
4735             f4.setArray(arr4) ; f4.setName("f1")
4736             self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
4737             pass
4738         pass
4739
4740     def testLTGTDAD1(self):
4741         d=DataArrayDouble(10) ; d.iota()
4742         self.assertTrue(d.findIdsLowerThan(0).empty())
4743         self.assertTrue(d.findIdsLowerThan(1).isEqual(DataArrayInt([0])))
4744         d-=5.
4745         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([0,1,2,3,4])))
4746         self.assertTrue(d.findIdsGreaterThan(0.).isEqual(DataArrayInt([6,7,8,9])))
4747         self.assertTrue(d.convertToFloatArr().isEqual(DataArrayFloat([-5,-4,-3,-2,-1,0,1,2,3,4]),1e-7))
4748         self.assertTrue(d.convertToFloatArr().convertToDblArr().isEqual(d,1e-12))
4749         pass
4750
4751     def testMapII1(self):
4752         """ Test optimized maps for renumbering. Typical usage local to global in parallel mode"""
4753         d=DataArrayInt([1003,1007])
4754         m=d.invertArrayN2O2O2NOptimized()
4755         d2=DataArrayInt([1003,1003,1007,1003,1007])
4756         d2.transformWithIndArr(m)
4757         self.assertTrue(d2.isEqual(DataArrayInt([0,0,1,0,1])))
4758         pass
4759
4760     def testDAICheckUniformAndGuess1(self):
4761         d=DataArrayInt([3,3],1,2)
4762         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non single compo
4763         d=DataArrayInt([])
4764         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# empty
4765         d=DataArrayInt()
4766         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non allocated
4767         d=DataArrayInt([3,3,3])
4768         self.assertEqual(3,d.checkUniformAndGuess())
4769         d=DataArrayInt([7])
4770         self.assertEqual(7,d.checkUniformAndGuess())
4771         d=DataArrayInt([3,4,3])
4772         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non uniform
4773         pass
4774
4775     def testUMComputePlaneEquationOf3DFaces1(self):
4776         """ Consequence of an invalid traduction of matrix inversion transposition."""
4777         m=MEDCoupling1SGTUMesh("msh",NORM_QUAD4)
4778         m.setCoords(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,2,0),(1,2,0),(2,2,0),(0,4,0),(1,4,0),(2,4,0),(0,0,3),(1,0,3),(2,0,3),(0,2,3),(1,2,3),(2,2,3),(0,4,3),(1,4,3),(2,4,3)]))
4779         m.setNodalConnectivity(DataArrayInt([0,1,4,3,9,12,13,10,0,9,10,1,1,10,13,4,4,13,12,3,3,12,9,0,1,2,5,4,10,13,14,11,1,10,11,2,2,11,14,5,5,14,13,4,3,4,7,6,12,15,16,13,4,13,16,7,7,16,15,6,6,15,12,3,4,5,8,7,13,16,17,14,5,14,17,8,8,17,16,7]))
4780         m=m.buildUnstructured()
4781         ref=DataArrayDouble([(0,0,1,0),(0,0,1,-3),(0,1,0,0),(1,0,0,-1),(0,1,0,-2),(1,0,0,0),(0,0,1,0),(0,0,1,-3),(0,1,0,0),(1,0,0,-2),(0,1,0,-2),(0,0,1,0),(0,0,1,-3),(1,0,0,-1),(0,1,0,-4),(1,0,0,0),(0,0,1,0),(0,0,1,-3),(1,0,0,-2),(0,1,0,-4)])
4782         res=m.computePlaneEquationOf3DFaces()
4783         self.assertTrue(res.isEqual(ref,1e-12))
4784         pass
4785
4786     def testBugInComputationOfEqOfPlane1(self):
4787         coo=DataArrayDouble([-1.0, 1.0, -0.3872983455657959, -1.0, 1.0, 0.3872983455657959, -1.0, 1.0, 0.693649172782898, 1.0, 1.0, 0.693649172782898, 1.0, 1.0, 0.3872983455657959, 1.0, 1.0, -0.3872983455657959],6,3)
4788         m=MEDCouplingUMesh("",2)
4789         m.setCoords(coo)
4790         m.allocateCells()
4791         m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
4792         self.assertTrue(m.computePlaneEquationOf3DFaces().isEqual(DataArrayDouble([0,1,0,-1],1,4),1e-12))
4793         pass
4794
4795     def testSimplifyPolyhedra(self):
4796         mesh = MEDCouplingUMesh('mesh', 3)
4797         coo = DataArrayDouble([(-0.01225,-0.0212176,0.02),(-0.00634107,-0.0236652,0.02),(1.50019e-18,-0.0245,0.02),(0.00634107,-0.0236652,0.02),(0.01225,-0.0212176,0.02),(-0.0153864,-0.02665,0),(-0.00714085,-0.02665,0),(1.63184e-18,-0.02665,0),(0.00714085,-0.02665,0),(0.0153864,-0.02665,0),(-0.00714085,-0.02665,0.0101475),(1.63184e-18,-0.02665,0.013145),(0.00714085,-0.02665,0.0101475),(-0.013,-0.0225167,0.02),(-0.0067293,-0.0251141,0.02),(1.59204e-18,-0.026,0.02),(0.0067293,-0.0251141,0.02),(0.013,-0.0225167,0.02),(-0.0161658,-0.028,0),(-0.00750258,-0.028,0),(1.71451e-18,-0.028,0),(0.00750258,-0.028,0),(0.0161658,-0.028,0),(-0.00750258,-0.028,0.0105625),(1.71451e-18,-0.028,0.0136825),(0.00750258,-0.028,0.0105625)])
4798         mesh.setCoords(coo)
4799         c = DataArrayInt([31, 13, 14, 15, 16, 17, 4, 3, 2, 1, 0, -1, 18, 5, 6, 7, 8, 9, 22, 21, 20, 19, -1, 19, 23, 18, -1, 23, 14, 13, 18, -1, 20, 24, 23, 19, -1, 24, 15, 14, 23, -1, 21, 25, 24, 20, -1, 25, 16, 15, 24, -1, 22, 25, 21, -1, 22, 17, 16, 25, -1, 9, 4, 17, 22, -1, 8, 12, 9, -1, 12, 3, 4, 9, -1, 7, 11, 12, 8, -1, 11, 2, 3, 12, -1, 6, 10, 11, 7, -1, 10, 1, 2, 11, -1, 5, 10, 6, -1, 5, 0, 1, 10, -1, 18, 13, 0, 5])
4800         cI = DataArrayInt([0, 108])
4801         mesh.setConnectivity(c, cI)
4802         mesh.simplifyPolyhedra(1.0e-8)
4803         c, cI = mesh.getNodalConnectivity(), mesh.getNodalConnectivityIndex()
4804         tgt_c = DataArrayInt([31, 23, 18, 19, 20, 21, 22, 25, 24, -1, 12, 9, 8, 7, 6, 5, 10, 11, -1, 13, 14, 15, 16, 17, 4, 3, 2, 1, 0, -1, 18, 5, 6, 7, 8, 9, 22, 21, 20, 19, -1, 23, 14, 13, 18, -1, 24, 15, 14, 23, -1, 25, 16, 15, 24, -1, 22, 17, 16, 25, -1, 9, 4, 17, 22, -1, 12, 3, 4, 9, -1, 11, 2, 3, 12, -1, 10, 1, 2, 11, -1, 5, 0, 1, 10, -1, 18, 13, 0, 5])
4805         tgt_cI = DataArrayInt([0, 90])
4806         self.assertEqual(c.getValues(), tgt_c.getValues())
4807         self.assertEqual(cI.getValues(), tgt_cI.getValues())
4808         pass
4809
4810     pass
4811
4812 if __name__ == '__main__':
4813     unittest.main()