Salome HOME
Remove checkCoherency2.
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingBasicsTest5.py
1 #  -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2015  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
21 from MEDCoupling import *
22 import unittest
23 from math import pi,e,sqrt,cos,sin
24 from datetime import datetime
25 from MEDCouplingDataForTest import MEDCouplingDataForTest
26 import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@cea.fr
27
28 class MEDCouplingBasicsTest5(unittest.TestCase):
29     def testSwig2FieldDoubleBuildSubPartRange1(self):
30         #ON_CELLS
31         m=MEDCouplingDataForTest.build2DTargetMesh_1()
32         f=MEDCouplingFieldDouble(ON_CELLS)
33         f.setMesh(m)
34         arr=DataArrayDouble(5,2) ; arr[:,0]=range(7,12) ; arr[:,1]=100+arr[:,0]
35         f.setArray(arr)
36         f.checkCoherency()
37         ff=f[1:-1:2]
38         ff.checkCoherency()
39         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
40         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
41         self.assertTrue(2,ff.getMesh().getNumberOfCells())
42         self.assertTrue(ff.getArray().isEqual(arr[[1,3]],1e-12))
43         #
44         a,b=f.buildSubMeshDataRange(2,5,1)
45         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
46         self.assertEqual(b,slice(2,5,1))
47         ff=f[2:]
48         ff.checkCoherency()
49         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
50         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
51         self.assertTrue(3,ff.getMesh().getNumberOfCells())
52         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4]],1e-12))
53         #
54         ff=f[-2:0:-1]
55         ff.checkCoherency()
56         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
57         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
58         self.assertTrue(3,ff.getMesh().getNumberOfCells())
59         self.assertTrue(ff.getArray().isEqual(arr[[3,2,1]],1e-12))
60         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[3,2,1],1],1e-12))
61         #ON_NODES
62         f=MEDCouplingFieldDouble(ON_NODES)
63         f.setMesh(m)
64         arr=DataArrayDouble(9,2) ; arr[:,0]=range(7,16) ; arr[:,1]=100+arr[:,0]
65         f.setArray(arr)
66         f.checkCoherency()
67         ff=f[1:-1:2]
68         ff.checkCoherency()
69         self.assertTrue((m.buildPartOfMySelf([1,3],False)).isEqual(ff.getMesh(),1e-12))
70         self.assertTrue(6,ff.getMesh().getNumberOfNodes())
71         self.assertTrue(2,ff.getMesh().getNumberOfCells())
72         self.assertTrue(ff.getArray().isEqual(arr[[1,2,3,4,6,7]],1e-12))
73         #
74         m2=m.buildPartRange(2,5,1)
75         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(m2,1e-12))
76         m2,b=m.buildPartRangeAndReduceNodes(2,5,1)
77         self.assertTrue(m.buildPartOfMySelf([2,3,4],False).isEqual(m2,1e-12))
78         self.assertTrue(b.isEqual(DataArrayInt([-1,-1,0,1,2,3,4,5,6])))
79         a,b=f.buildSubMeshDataRange(2,5,1)
80         self.assertTrue(m.buildPartOfMySelf([2,3,4],False).isEqual(a,1e-12))
81         self.assertTrue(b.isEqual(DataArrayInt([2,3,4,5,6,7,8])))
82         ff=f[2:]
83         ff.checkCoherency()
84         self.assertTrue((m.buildPartOfMySelf([2,3,4],False)).isEqual(ff.getMesh(),1e-12))
85         self.assertTrue(7,ff.getMesh().getNumberOfNodes())
86         self.assertTrue(3,ff.getMesh().getNumberOfCells())
87         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4,5,6,7,8]],1e-12))
88         #
89         ff=f[-2:0:-1]
90         ff.checkCoherency()
91         self.assertTrue((m.buildPartOfMySelf([3,2,1],False)).isEqual(ff.getMesh(),1e-12))
92         self.assertTrue(7,ff.getMesh().getNumberOfNodes())
93         self.assertTrue(3,ff.getMesh().getNumberOfCells())
94         self.assertTrue(ff.getArray().isEqual(arr[[1,2,3,4,5,6,7]],1e-12))
95         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[1,2,3,4,5,6,7],1],1e-12))
96         #ON_GAUSS_NE
97         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
98         f.setMesh(m)
99         arr=DataArrayDouble(18,2) ; arr[:,0]=range(7,25) ; arr[:,1]=100+arr[:,0]
100         f.setArray(arr)
101         f.checkCoherency()
102         ff=f[1:-1:2]
103         ff.checkCoherency()
104         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
105         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
106         self.assertTrue(2,ff.getMesh().getNumberOfCells())
107         self.assertTrue(ff.getArray().isEqual(arr[[4,5,6,10,11,12,13]],1e-12))
108         #
109         a,b=f.buildSubMeshDataRange(2,5,1)
110         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
111         self.assertEqual(b,slice(7,18,1))
112         ff=f[2:]
113         ff.checkCoherency()
114         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
115         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
116         self.assertTrue(3,ff.getMesh().getNumberOfCells())
117         self.assertTrue(ff.getArray().isEqual(arr[[7,8,9,10,11,12,13,14,15,16,17]],1e-12))
118         #
119         ff=f[-2:0:-1]
120         ff.checkCoherency()
121         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
122         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
123         self.assertTrue(3,ff.getMesh().getNumberOfCells())
124         self.assertTrue(ff.getArray().isEqual(arr[[10,11,12,13,7,8,9,4,5,6]],1e-12))
125         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[10,11,12,13,7,8,9,4,5,6],1],1e-12))
126         #ON_GAUSS_PT
127         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
128         f.setMesh(m)
129         f.setGaussLocalizationOnCells([0,4],[0,0,1,0,1,1,1,0],[1.1,1.1,2.2,2.2],[0.2,0.8]);
130         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]);
131         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]);
132         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]);
133         arr=DataArrayDouble(16,2) ; arr[:,0]=range(7,23) ; arr[:,1]=100+arr[:,0]
134         f.setArray(arr)
135         f.checkCoherency()
136         ff=f[1:-1:2]
137         ff.checkCoherency()
138         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
139         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
140         self.assertTrue(2,ff.getMesh().getNumberOfCells())
141         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4,5,11,12,13]],1e-12))
142         #
143         a,b=f.buildSubMeshDataRange(2,5,1)
144         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
145         self.assertEqual(b,slice(6,16,1))
146         ff=f[2:]
147         ff.checkCoherency()
148         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
149         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
150         self.assertTrue(3,ff.getMesh().getNumberOfCells())
151         self.assertTrue(ff.getArray().isEqual(arr[[6,7,8,9,10,11,12,13,14,15]],1e-12))
152         #
153         ff=f[-2:0:-1]
154         ff.checkCoherency()
155         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
156         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
157         self.assertTrue(3,ff.getMesh().getNumberOfCells())
158         self.assertTrue(ff.getArray().isEqual(arr[[11,12,13,6,7,8,9,10,2,3,4,5]],1e-12))
159         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))
160         pass
161
162     def testSwig2FieldDoubleApplyFuncBug1(self):
163         f=MEDCouplingFieldDouble(ON_CELLS)
164         f.setMesh(MEDCouplingDataForTest.build2DTargetMesh_1())
165         f.applyFunc(3,700.)
166         f.checkCoherency()
167         self.assertEqual(3,f.getArray().getNumberOfComponents())
168         f.getArray().rearrange(1)
169         self.assertTrue(f.getArray().isUniform(700.,1e-10))
170         f.getArray().rearrange(3)
171         f.checkCoherency()
172         f.applyFunc(4,800.)
173         f.checkCoherency()
174         self.assertEqual(4,f.getArray().getNumberOfComponents())
175         f.getArray().rearrange(1)
176         self.assertTrue(f.getArray().isUniform(800.,1e-10))
177         f.getArray().rearrange(4)
178         f.checkCoherency()
179         pass
180
181     def testSwig2ComputeTupleIdsNearTupleBug1(self):
182         coords=[1.1,0.0, 1.1,0.0 ];
183         coordsArr=DataArrayDouble(coords,2,2);
184         mesh=MEDCouplingUMesh();
185         mesh.setCoords(coordsArr);
186         points=[1.1, 0.002]
187         c,cI=mesh.getNodeIdsNearPoints(points,0.00185);
188         self.assertTrue(c.isEqual(DataArrayInt([])))
189         self.assertTrue(cI.isEqual(DataArrayInt([0,0])))
190         c,cI=mesh.getNodeIdsNearPoints(points,0.00200000000000001);
191         self.assertTrue(c.isEqual(DataArrayInt([0,1])))
192         self.assertTrue(cI.isEqual(DataArrayInt([0,2])))
193         pass
194
195     def testSwig2NonRegressionBugChangeUnderlyingWithZeroCells(self):
196         coords1=[0.,1.,2.,3.]
197         coords2=[2.,1.,0.,3.] #0 <==> #2
198         # mesh 1
199         mesh1=MEDCouplingUMesh.New();
200         coordsArr=DataArrayDouble.New(coords1,4,1);
201         mesh1.setCoords(coordsArr);
202         mesh1.setMeshDimension(0);
203         mesh1.allocateCells(0);
204         mesh1.finishInsertingCells();
205         # mesh 2
206         mesh2=mesh1.deepCpy();
207         coordsArr=DataArrayDouble.New(coords2,4,1);
208         mesh2.setCoords(coordsArr);
209         field = mesh1.fillFromAnalytic(ON_NODES,1,"x")
210         field.checkCoherency()
211         levOfCheck = 10
212         field.changeUnderlyingMesh( mesh2, levOfCheck, 1e-13, 0 )
213         self.assertTrue( field.getArray().getValues() == coords2 )
214         pass
215
216     def testSwig2UMeshDistanceToMesh2(self):
217         sz=5
218         m=MEDCouplingCMesh()
219         arr=DataArrayDouble(sz+1) ; arr.iota() ; arr/=sz
220         m.setCoords(arr,arr,arr)
221         m=m.buildUnstructured()
222         m1=m.computeSkin()
223         m1.zipCoords()
224         c=m1.getCoords()[:]
225         d=2*(c-[0.5,0.5,0.5])+[0.5,0.5,0.5]
226         time_deb = datetime.now()
227         #print "go.."
228         a,b=m1.distanceToPoints(d)
229         #print 'time spent in distanceToPoints %s ' %str(datetime.now() - time_deb)
230         time_deb = datetime.now()
231         a1=DataArrayDouble(len(d))
232         b1=DataArrayInt(len(d))
233         m1s=[m1[i] for i in xrange(m1.getNumberOfCells())]
234         for j,pt in enumerate(d):
235             eter=1e308
236             fter=-1
237             for i,miter in enumerate(m1s):
238                 e,f=miter.distanceToPoint(pt)
239                 self.assertEqual(0,f)
240                 if e<eter:
241                     eter=e ; fter=i
242                     pass
243                 pass
244             a1[j]=eter
245             b1[j]=fter
246             pass
247         #print 'time spent in naive distanceToPoints  %s ' %str(datetime.now() - time_deb)
248         self.assertTrue(a.isEqual(a1,1e-12))
249         self.assertTrue(b.isEqual(b1))
250         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))
251         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])))
252         pass
253
254     def testSwig2NonRegressionBugDistance1(self):
255         pt=DataArrayDouble([(8.8452994616207476,3.1547005383792515,3.1547005383792515)])
256         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)])
257         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])
258         m=MEDCouplingUMesh("mesh",2)
259         m.setCoords(coo)
260         m.allocateCells()
261         for i in xrange(24):
262             m.insertNextCell(NORM_QUAD4,conn[4*i:4*i+4])
263             pass
264         m.checkCoherency1()
265         m0=m[3] ; m0.zipCoords()
266         expectedDist=0.8452994616207476
267         a,b=m0.distanceToPoint(pt)
268         self.assertAlmostEqual(expectedDist,a,14)
269         self.assertEqual(0,b)
270         #
271         a,b=m.distanceToPoint(pt)
272         self.assertAlmostEqual(expectedDist,a,14)
273         self.assertEqual(3,b)
274         #
275         fd=MEDCouplingFieldDiscretization.New(ON_CELLS)
276         self.assertEqual(24,fd.getNumberOfTuples(m))
277         fd=MEDCouplingFieldDiscretization.New(ON_NODES)
278         self.assertEqual(26,fd.getNumberOfTuples(m))
279         pass
280
281     def testSwig2AreaBarySeg3Quad8Tri6QPolyg(self):
282         #QUAD8 representing a circle of center zeBary and radius zeRadius
283         zeBary=[5,6]
284         zeRadius=3
285         d=DataArrayDouble(8,2)
286         d[:,0]=zeRadius
287         d[:,1]=[87,-100,-170,110,5,-130,175,95] # angle in degree
288         d[:,1]*=pi/180. # angle in radian
289         d=d.fromPolarToCart()
290         d+=zeBary
291         m=MEDCouplingUMesh("quad8",2) ; m.allocateCells() ; m.insertNextCell(NORM_QUAD8,range(8)) ; m.setCoords(d)
292         self.assertTrue(m.getBarycenterAndOwner().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
293         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
294         tri32D=m.buildDescendingConnectivity()[0][0] ; tri32D.zipCoords()
295         # spaceDim=3 QUAD8 becomes QUAD4 ... for the moment
296         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
297         m2=m.deepCpy()
298         m2.convertQuadraticCellsToLinear()
299         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
300         self.assertTrue(m.getBarycenterAndOwner().isEqual(m2.getBarycenterAndOwner(),1e-13))
301         #TRI6 representing a circle of center zeBary and radius zeRadius
302         zeBary=[5,6]
303         zeRadius=3
304         d=DataArrayDouble(6,2)
305         d[:,0]=zeRadius
306         d[:,1]=[87,-100,110,5,175,95] # angle in degree
307         d[:,1]*=pi/180. # angle in radian
308         d=d.fromPolarToCart()
309         d+=zeBary
310         m=MEDCouplingUMesh("tri6",2) ; m.allocateCells() ; m.insertNextCell(NORM_TRI6,range(6)) ; m.setCoords(d)
311         self.assertTrue(m.getBarycenterAndOwner().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
312         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
313         # spaceDim=3 TRI6 becomes TRI3 ... for the moment
314         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
315         m2=m.deepCpy()
316         m2.convertQuadraticCellsToLinear()
317         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
318         self.assertTrue(m.getBarycenterAndOwner().isEqual(m2.getBarycenterAndOwner(),1e-13))
319         # QPOLYG representing a circle of center zeBary and radius zeRadius
320         zeBary=[5,6]
321         zeRadius=3
322         d=DataArrayDouble(10,2)
323         d[:,0]=zeRadius
324         d[:,1]=[87,-80,-100,-170,110,5,-90,-130,175,95] # angle in degree
325         d[:,1]*=pi/180. # angle in radian
326         d=d.fromPolarToCart()
327         d+=zeBary
328         m=MEDCouplingUMesh("qpolyg",2) ; m.allocateCells() ; m.insertNextCell(NORM_QPOLYG,range(10)) ; m.setCoords(d)
329         self.assertTrue(m.getBarycenterAndOwner().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
330         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
331         # spaceDim=3 QPOLYG becomes POLYG ... for the moment
332         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
333         m2=m.deepCpy()
334         m2.convertQuadraticCellsToLinear() ; m2.checkCoherency1()
335         self.assertTrue(m2.getAllGeoTypes()==[NORM_POLYGON] and m2.getNodalConnectivity().getValues()==[5,0,1,2,3,4])
336         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
337         self.assertTrue(m.getBarycenterAndOwner().isEqual(m2.getBarycenterAndOwner(),1e-13))
338         # TRI3
339         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),(87+100)*pi/180*zeRadius,13)
340         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)
341         self.assertTrue(tri32D.getBarycenterAndOwner().isEqual(exp,1e-12))
342         # spaceDim=3 TRI3 becomes TRI2 ... for the moment
343         tri32D.changeSpaceDimension(3)
344         tri2=tri32D.deepCpy() ; tri2.convertQuadraticCellsToLinear()
345         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),float(tri2.getMeasureField(False).getArray()),13)
346         self.assertTrue(tri32D.getBarycenterAndOwner().isEqual(tri2.getBarycenterAndOwner(),1e-12))
347         tri32D.changeSpaceDimension(1)
348         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),-0.67795240172962323,12)
349         pass
350
351     # this bug 5/6/2013 is swig specific
352     def testSwigNonRegressionBugRotate3D1(self):
353         m=MEDCouplingUMesh.New()
354         dataArray=DataArrayDouble.New(100,3)
355         dataArray[:]=0.
356         dataArray[0]=[0.,1,3]
357         m.setCoords(dataArray[0])
358         m1=m.deepCpy()
359         m.rotate([0.,0.,3.],[1.,0.,0.],0.5*pi)
360         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([0.,0.,4.],1,3),1e-15))
361         #
362         d1=DataArrayDouble([0.,0.,3.],1,3) ; d2=DataArrayDouble([1.,0.,0.],1,3)
363         pts=[[0.,0.,3.],[(0.,0.,3.)],DataArrayDouble([0.,0.,3.],1,3),list(d1)[0]]
364         vec=[[1.,0.,0.],[(1.,0.,0.)],DataArrayDouble([1.,0.,0.],1,3),list(d2)[0]]
365         for p in pts:
366             for v in vec:
367                 m2=m1.deepCpy()
368                 m2.rotate(p,v,0.5*pi)
369                 self.assertTrue(m2.getCoords().isEqual(DataArrayDouble([0.,0.,4.],1,3),1e-15))
370                 pass
371         pass
372
373     def testSwig2DataArrayCount1(self):
374         d=DataArrayInt([])
375         self.assertEqual(0,d.getNumberOfTuples())
376         self.assertEqual(1,d.getNumberOfComponents())
377         self.assertEqual(0,d.count(0))
378         self.assertEqual(0,d.count(1))
379         self.assertEqual(0,d.count(-1))
380         d=DataArrayInt([2,1,-2,-3,2,0,0,7,2,-2,3,0])
381         self.assertEqual(12,d.getNumberOfTuples())
382         self.assertEqual(1,d.getNumberOfComponents())
383         self.assertEqual(3,d.count(0))
384         self.assertEqual(1,d.count(1))
385         self.assertEqual(0,d.count(-1))
386         self.assertEqual(2,d.count(-2))
387         self.assertEqual(3,d.count(2))
388         e=d.getDifferentValues()
389         f=DataArrayInt()
390         for it in e:
391             f.pushBackSilent(d.count(int(it)))
392             pass
393         self.assertEqual(12,f.accumulate()[0])
394         #
395         eps=1e-12
396         d=DataArrayDouble([])
397         self.assertEqual(0,d.getNumberOfTuples())
398         self.assertEqual(1,d.getNumberOfComponents())
399         self.assertEqual(0,d.count(0,eps))
400         self.assertEqual(0,d.count(1,eps))
401         self.assertEqual(0,d.count(-1,eps))
402         d=DataArrayDouble([2,1,-2,-3,2,0,eps/10,7,2+eps/10,-2,3,0])
403         self.assertEqual(12,d.getNumberOfTuples())
404         self.assertEqual(1,d.getNumberOfComponents())
405         self.assertEqual(3,d.count(0,eps))
406         self.assertEqual(1,d.count(1,eps))
407         self.assertEqual(0,d.count(-1,eps))
408         self.assertEqual(2,d.count(-2,eps))
409         self.assertEqual(3,d.count(2,eps))
410         self.assertEqual(3,d.count(2,eps))
411         self.assertEqual(2,d.count(2,eps/100))
412         e=d.getDifferentValues(eps)
413         f=DataArrayInt()
414         for it in e:
415             f.pushBackSilent(d.count(float(it),eps))
416             pass
417         self.assertEqual(12,f.accumulate()[0])
418         pass
419
420     def testSwig2DataArrayGetSlice1(self):
421         s=slice(2,18,1)
422         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),16)
423         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),16)
424         self.assertEqual(DataArray.GetSlice(s,0,4),slice(2,6,1))
425         self.assertEqual(DataArray.GetSlice(s,1,4),slice(6,10,1))
426         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,14,1))
427         self.assertEqual(DataArray.GetSlice(s,3,4),slice(14,18,1))
428         #
429         s=slice(2,18,2)
430         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),8)
431         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),8)
432         self.assertEqual(DataArray.GetSlice(s,0,4),slice(2,6,2))
433         self.assertEqual(DataArray.GetSlice(s,1,4),slice(6,10,2))
434         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,14,2))
435         self.assertEqual(DataArray.GetSlice(s,3,4),slice(14,18,2))
436         #
437         s=slice(1,18,1)
438         self.assertEqual(DataArray.GetSlice(s,0,4),slice(1,5,1))
439         self.assertEqual(DataArray.GetSlice(s,1,4),slice(5,9,1))
440         self.assertEqual(DataArray.GetSlice(s,2,4),slice(9,13,1))
441         self.assertEqual(DataArray.GetSlice(s,3,4),slice(13,18,1))# 18 not 17
442         #
443         s=slice(1,18,2)
444         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9)
445         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),9)
446         self.assertEqual(DataArray.GetSlice(s,0,4),slice(1,5,2))
447         self.assertEqual(DataArray.GetSlice(s,1,4),slice(5,9,2))
448         self.assertEqual(DataArray.GetSlice(s,2,4),slice(9,13,2))
449         self.assertEqual(DataArray.GetSlice(s,3,4),slice(13,18,2))# 18 not 17
450         #
451         s=slice(18,2,-1)
452         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-1))
453         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-1))
454         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-1))
455         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,2,-1))
456         #
457         s=slice(18,2,-2)
458         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2))
459         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2))
460         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2))
461         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,2,-2))
462         #
463         s=slice(18,1,-1)
464         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-1))
465         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-1))
466         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-1))
467         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,1,-1))# 1 not 2
468         #
469         s=slice(18,1,-2)
470         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9)
471         self.assertRaises(InterpKernelException,DataArray.GetNumberOfItemGivenBES,s)
472         self.assertEqual(sum([DataArray.GetNumberOfItemGivenBESRelative(DataArray.GetSlice(s,i,4)) for i in xrange(4)]),DataArray.GetNumberOfItemGivenBESRelative(s))
473         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2))
474         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2))
475         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2))
476         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,1,-2))# 1 not 2
477         self.assertRaises(InterpKernelException,DataArray.GetSlice,slice(0,None,2),0,4)
478         #
479         d=DataArrayInt.Range(0,18,1)
480         s=slice(2,None,1)
481         self.assertEqual(d.getNumberOfItemGivenBES(s),16)
482         self.assertEqual(d.getNumberOfItemGivenBESRelative(s),16)
483         self.assertEqual(d.getSlice(s,0,4),slice(2,6,1))
484         self.assertEqual(d.getSlice(s,1,4),slice(6,10,1))
485         self.assertEqual(d.getSlice(s,2,4),slice(10,14,1))
486         self.assertEqual(d.getSlice(s,3,4),slice(14,18,1))
487         #
488         d=DataArrayInt.Range(0,18,1)
489         s=slice(2,-2,1)
490         self.assertEqual(d.getSlice(s,0,4),slice(2,5,1))
491         self.assertEqual(d.getSlice(s,1,4),slice(5,8,1))
492         self.assertEqual(d.getSlice(s,2,4),slice(8,11,1))
493         self.assertEqual(d.getSlice(s,3,4),slice(11,16,1))
494         #
495         d=DataArrayInt.Range(0,18,1)
496         s=slice(None,None,1)
497         self.assertEqual(d.getSlice(s,0,4),slice(0,4,1))
498         self.assertEqual(d.getSlice(s,1,4),slice(4,8,1))
499         self.assertEqual(d.getSlice(s,2,4),slice(8,12,1))
500         self.assertEqual(d.getSlice(s,3,4),slice(12,18,1))
501         #
502         d=DataArrayInt.Range(0,18,1)
503         s=slice(None,2,-2)
504         self.assertRaises(InterpKernelException,d.getNumberOfItemGivenBES,s)
505         self.assertEqual(d.getNumberOfItemGivenBESRelative(s),8)
506         self.assertEqual(d.getSlice(s,0,4),slice(17,13,-2))
507         self.assertEqual(d.getSlice(s,1,4),slice(13,9,-2))
508         self.assertEqual(d.getSlice(s,2,4),slice(9,5,-2))
509         self.assertEqual(d.getSlice(s,3,4),slice(5,2,-2))
510         pass
511
512     def testSwig2AccumulatePerChunk1(self):
513         arr=DataArrayDouble(11) ; arr.iota()
514         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
515         m=m.buildUnstructured()
516         m0=m[::2] ; ids0=m0.simplexize(0) ; m1=m[1::2]
517         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m0,m1) ; m.setName("mesh")
518         m.checkConsecutiveCellTypesForMEDFileFrmt()
519         #
520         formula="7-sqrt((x-5.)*(x-5.)+(y-5.)*(y-5.))"
521         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
522         f.fillFromAnalytic(1,formula)
523         f.setName("Field1") ; f.setTime(1.1,1,-1)
524         f.checkCoherency()
525         #
526         arr=f.getArray()
527         arr2=DataArrayDouble(len(arr),2) ; arr2[:,0]=arr
528         arr2=DataArrayDouble(len(arr),2) ; arr2[:,0]=arr ; arr2[:,1]=2*arr
529         f.setArray(arr2)
530         f.checkCoherency()
531         # here the compact code to obviously put field on cell to nodes
532         rn,rni=f.getMesh().getReverseNodalConnectivity()
533         arr2=f.getArray()[rn]
534         arr4=arr2.accumulatePerChunck(rni)
535         nbOfCellsSharingNodes=rni.deltaShiftIndex()
536         arr4/=nbOfCellsSharingNodes.convertToDblArr()
537         #
538         maxNbCSN=nbOfCellsSharingNodes.getMaxValue()[0]
539         arr3=DataArrayDouble(f.getMesh().getNumberOfNodes(),f.getArray().getNumberOfComponents()) ; arr3[:]=0.
540         for i in xrange(1,maxNbCSN+1):
541             ids=nbOfCellsSharingNodes.getIdsEqual(i)
542             if len(ids)==0:
543                 continue
544             for j in range(i):
545                 rni2=rni[ids] ; rni2+=j
546                 arr3[ids]+=arr2[rni2]
547                 pass
548             arr3[ids]/=i
549             pass
550         fNode=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; fNode.setMesh(m)
551         fNode.setName("Field1Node") ; fNode.setTime(1.1,1,-1)
552         fNode.setArray(arr3) ; fNode.checkCoherency()
553         self.assertTrue(arr3.isEqual(arr4,1e-12))
554         #
555         d=DataArrayInt.Range(0,20,1)
556         self.assertTrue(d.accumulatePerChunck([2,4,12]).isEqual(DataArrayInt([5,60])))
557         #
558         a=DataArrayDouble(12) ; a.iota() ; a.rearrange(3)
559         b=DataArrayDouble(12) ; b.iota(20) ; b.rearrange(3)
560         ids=DataArrayInt([])
561         self.assertEqual(len(a[ids]),0)
562         self.assertEqual(len(b[ids]),0)
563         a2=a.deepCpy() ;  a2[ids]+=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
564         a2=a.deepCpy() ;  a2[ids]*=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
565         a2=a.deepCpy() ;  a2[ids]/=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
566         a2=a.deepCpy() ;  a2[ids]-=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
567         pass
568
569     def testSwig2CheckAndPreparePermutation1(self):
570         a=DataArrayInt([10003,9999999,5,67])
571         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([2,3,0,1])))
572         a=DataArrayInt([10003,-9999999,5,67])
573         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([3,0,1,2])))
574         a=DataArrayInt([])
575         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([])))
576         a=DataArrayInt([])
577         a.iota();
578         self.assertTrue(a.isEqual(DataArrayInt([])))
579         pass
580
581     def testSwig21SGTUMesh1(self):
582         m=MEDCoupling1GTUMesh.New("m",NORM_PENTA6)
583         m.__repr__() ; m.__str__()
584         self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
585         m.setCoords(DataArrayDouble(20,3))
586         m.allocateCells()
587         m.__repr__() ; m.__str__()
588         m.insertNextCell([0,1,2,5,7,2])
589         self.assertEqual(1,m.getNumberOfCells())
590         self.assertTrue(DataArrayInt([6]).isEqual(m.computeNbOfNodesPerCell()))
591         self.assertTrue(DataArrayInt([5]).isEqual(m.computeNbOfFacesPerCell()))
592         m.__repr__() ; m.__str__()
593         m.checkCoherency()
594         m.checkCoherency1()
595         #
596         cm=MEDCouplingCMesh() ; cm.setName("m")
597         arr0=DataArrayDouble(6) ; arr0.iota()
598         arr1=DataArrayDouble([0,1])
599         cm.setCoords(arr0,arr1,arr1) ; um=cm.buildUnstructured()
600         #
601         m=MEDCoupling1SGTUMesh("m",NORM_QUAD4)
602         mem_m=m.getHeapMemorySize()
603         m.allocateCells(5)
604         self.assertIn(m.getHeapMemorySize()-mem_m,xrange(5*4*4,5*4*4+32))
605         self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20)
606         m.setCoords(um.getCoords())
607         m.insertNextCell([1,0,6,7])
608         self.assertEqual(1,m.getNumberOfCells())
609         m.insertNextCell([2,1,7,8])
610         m.insertNextCell([3,2,8,9])
611         m.insertNextCell([4,3,9,10])
612         m.insertNextCell([5,4,10,11])
613         self.assertEqual(5,m.getNumberOfCells())
614         self.assertRaises(InterpKernelException,m.insertNextCell,[0,6,7])
615         self.assertRaises(InterpKernelException,m.insertNextCell,[0,6,7,1,2])
616         self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20)
617         f=m.getMeasureField(ON_CELLS)
618         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
619         self.assertTrue(f.getArray().isUniform(1,1e-14))
620         self.assertEqual(m.getType(),10)
621         self.assertEqual(m.getCellModelEnum(),NORM_QUAD4)
622         mo=MEDCoupling1SGTUMesh("m",NORM_QUAD4) ; mo.setCoords(m.getCoords())
623         mo.setNodalConnectivity(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11]))
624         self.assertTrue(m.isEqual(mo,1e-12))
625         #
626         mo2=MEDCoupling1SGTUMesh.Merge1SGTUMeshesOnSameCoords([m[[0,1]],m[[2]],m[[3,4]]])
627         mo2.setName(m.getName())
628         self.assertTrue(m.isEqual(mo2,1e-12))
629         #
630         mp0=m[[0]] ; mp0.zipCoords() ; mp1=m[2] ; mp1.zipCoords() ; mp2=m[4] ; mp2.zipCoords()
631         mo3=MEDCoupling1SGTUMesh.Merge1SGTUMeshes([mp0,mp1,mp2])
632         self.assertTrue(isinstance(mo3,MEDCoupling1SGTUMesh))
633         mo3.setName(m.getName())
634         m_ref=m[(0,2,4)] ; m_ref.zipCoords()
635         m_ref.tryToShareSameCoordsPermute(mo3,1e-12)
636         self.assertTrue(m_ref.isEqual(mo3,1e-12))
637         #
638         m1=um.buildDescendingConnectivity()[0]
639         ids=m1.getCellIdsFullyIncludedInNodeIds(DataArrayInt.Range(0,12,1))
640         m1=m1[ids]
641         m1c=m1.convertIntoSingleGeoTypeMesh()
642         self.assertTrue(isinstance(m1c,MEDCoupling1SGTUMesh))
643         self.assertEqual(m1c.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
644         m1c.checkCoherency1()
645         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])))
646         self.assertEqual(20,m1c.getNodalConnectivityLength())
647         self.assertTrue(m.isEqual(m1c,1e-12))
648         m.getNodalConnectivity().setIJ(1,0,1)
649         self.assertTrue(not m.isEqual(m1c,1e-12))
650         m.getNodalConnectivity().setIJ(1,0,0)
651         self.assertTrue(m.isEqual(m1c,1e-12))
652         m1c.setCoords(m.getCoords().deepCpy())
653         self.assertTrue(m.isEqual(m1c,1e-12))
654         m1c.getCoords().setIJ(0,1,0.1)
655         self.assertTrue(not m.isEqual(m1c,1e-12))
656         m1c.getCoords().setIJ(0,1,0)
657         self.assertTrue(m.isEqual(m1c,1e-12))
658         m1c.getCoords().setInfoOnComponent(1,"X")
659         self.assertTrue(not m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
660         m.getCoords().setInfoOnComponent(1,"X")
661         self.assertTrue(m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
662         m.setName("m2")
663         self.assertTrue(not m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
664         #
665         m.checkCoherency() ; m.checkCoherency1() ; m.checkCoherency1()
666         self.assertEqual(m.getMeshDimension(),2)
667         self.assertTrue(m.giveCellsWithType(NORM_QUAD4).isEqual(DataArrayInt([0,1,2,3,4])))
668         self.assertTrue(m.giveCellsWithType(NORM_TRI3).isEqual(DataArrayInt([])))
669         self.assertEqual(m.getNumberOfCellsWithType(NORM_QUAD4),5)
670         self.assertEqual(m.getNumberOfCellsWithType(NORM_TRI3),0)
671         self.assertEqual(m.getTypeOfCell(3),NORM_QUAD4)
672         self.assertRaises(InterpKernelException,m.getTypeOfCell,5)
673         self.assertEqual(m.getAllGeoTypes(),[NORM_QUAD4])
674         self.assertEqual(m.getDistributionOfTypes(),[[NORM_QUAD4,5,-1]])
675         ##
676         pfl1=DataArrayInt([1,3,4])
677         a,b,c=m.splitProfilePerType(pfl1)
678         d,e,f=m.buildUnstructured().splitProfilePerType(pfl1)
679         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())
680         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and len(c)==1 and c[0].isEqual(f[0]))
681         #
682         pfl2=DataArrayInt([0,1,2,3])
683         a,b,c=m.splitProfilePerType(pfl2)
684         d,e,f=m.buildUnstructured().splitProfilePerType(pfl2)
685         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())
686         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and len(c)==1 and c[0].isEqual(f[0]))
687         #
688         pfl3=DataArrayInt([0,1,2,3,4])
689         a,b,c=m.splitProfilePerType(pfl3)
690         d,e,f=m.buildUnstructured().splitProfilePerType(pfl3)
691         self.assertTrue(a==[[4,5,-1]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2,3,4])) and c==[])
692         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and c==[])
693         #
694         invalidPfl=DataArrayInt([1,2,3,4,5])
695         self.assertRaises(InterpKernelException,m.splitProfilePerType,invalidPfl)
696         self.assertRaises(InterpKernelException,m.buildUnstructured().splitProfilePerType,invalidPfl)
697         ##
698         pfl1=DataArrayInt([1,2,3])
699         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,3,0],[pfl1])
700         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,3,0],[pfl1])
701         self.assertTrue(a.isEqual(b) and pfl1.getHiddenCppPointer(),a.getHiddenCppPointer())
702         #
703         pfl2=DataArrayInt([0,1,2,3])
704         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl2])
705         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl2])
706         self.assertTrue(a.isEqual(b) and pfl2.getHiddenCppPointer()==a.getHiddenCppPointer())
707         #
708         pfl3=DataArrayInt([0,1,2,3,4])
709         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl3])
710         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,5,0],[pfl3])
711         self.assertTrue(a.isEqual(b) and pfl3.getHiddenCppPointer()==a.getHiddenCppPointer())
712         #
713         invalidPfl=DataArrayInt([1,2,3,4,5])
714         self.assertRaises(InterpKernelException,m.checkTypeConsistencyAndContig,[NORM_QUAD4,5,0],[invalidPfl])
715         self.assertRaises(InterpKernelException,m.buildUnstructured().checkTypeConsistencyAndContig,[NORM_QUAD4,5,0],[invalidPfl])
716         ##
717         self.assertTrue(DataArrayInt([4,4,4,4,4]).isEqual(m.computeNbOfNodesPerCell()))
718         ##
719         self.assertEqual(m.getNodeIdsOfCell(1),[2,1,7,8])
720         ##
721         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))
722         ##
723         ref=m.getCoords().getHiddenCppPointer()
724         mcpy=m.deepCpy() ; mcpy.insertNextCell([1,0,6,7])
725         c=m.getNodalConnectivity().deepCpy()
726         o2n=DataArrayInt([2,0,1,4,3])
727         m.renumberCells(o2n,False)
728         c.rearrange(4) ; c.renumberInPlace(o2n) ; c.rearrange(1)
729         self.assertTrue(c.isEqual(m.getNodalConnectivity()))
730         self.assertEqual(ref,m.getCoords().getHiddenCppPointer())
731         m2=mcpy.mergeMyselfWith(m)
732         self.assertTrue(isinstance(m2,MEDCoupling1SGTUMesh))
733         self.assertEqual(11,m2.getNumberOfCells())
734         self.assertEqual(48,m2.getNumberOfNodes())
735         self.assertTrue(m2.getCoords().isEqual(DataArrayDouble.Aggregate([m.getCoords(),m.getCoords()]),1e-12))
736         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])))
737         ##
738         mu=m.buildUnstructured()
739         mu.checkCoherency1()
740         self.assertEqual(mu.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
741         self.assertEqual(2,mu.getMeshDimension())
742         self.assertEqual([NORM_QUAD4],mu.getAllGeoTypes())
743         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])))
744         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25])))
745         ##
746         for typ in [0,1]:
747             mcpy2=m.deepCpy() ; umcpy2=mcpy2.buildUnstructured()
748             ids=mcpy2.simplexize(typ) ; ids2=umcpy2.simplexize(typ)
749             self.assertTrue(ids.isEqual(ids2))
750             mcpy3=umcpy2.convertIntoSingleGeoTypeMesh()
751             self.assertTrue(mcpy2.isEqual(mcpy3,1e-14))
752             pass
753         um1=um.convertIntoSingleGeoTypeMesh()
754         self.assertEqual(8,um1.getNumberOfNodesPerCell())
755         for typ in [PLANAR_FACE_5,PLANAR_FACE_6]:
756             mcpy2=um1.deepCpy() ; umcpy2=mcpy2.buildUnstructured()
757             ids=mcpy2.simplexize(typ) ; ids2=umcpy2.simplexize(typ)
758             self.assertTrue(ids.isEqual(ids2))
759             mcpy3=umcpy2.convertIntoSingleGeoTypeMesh()
760             self.assertTrue(mcpy2.isEqual(mcpy3,1e-14))
761             pass
762         ##
763         self.assertRaises(InterpKernelException,mcpy.mergeMyselfWithOnSameCoords,m)
764         mcpy.tryToShareSameCoords(m,1e-14)
765         m3=mcpy.mergeMyselfWithOnSameCoords(m)
766         self.assertTrue(isinstance(m3,MEDCoupling1SGTUMesh))
767         self.assertEqual(11,m3.getNumberOfCells())
768         self.assertEqual(24,m3.getNumberOfNodes())
769         self.assertEqual(m3.getCoords().getHiddenCppPointer(),mcpy.getCoords().getHiddenCppPointer())
770         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])))
771         ##
772         ref=mcpy.getCoords().deepCpy()
773         c3=mcpy.getNodalConnectivity()[:]
774         mcpy.getNodalConnectivity().setIJ(int(c3.getIdsEqual(11)),0,24)
775         c2=DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()[11:]])
776         mcpy.setCoords(c2)
777         mcpy.checkCoherency1()
778         a,b=mcpy.getNodeIdsInUse()
779         self.assertEqual(12,b)
780         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])))
781         ids=mcpy.zipCoordsTraducer()
782         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])))
783         self.assertTrue(mcpy.getCoords().isEqual(ref[:12],1e-12))
784         self.assertTrue(mcpy.getNodalConnectivity().isEqual(c3))
785         mcpy.checkCoherency1()
786         ##
787         m4=mcpy[DataArrayInt([0,3,4])]
788         m5=mcpy.buildPartOfMySelfKeepCoords(DataArrayInt([0,3,4]))
789         self.assertTrue(isinstance(m4,MEDCoupling1SGTUMesh))
790         self.assertTrue(m4.isEqual(m5,-1e-14))# < 0 not a bug it proves that coordinates pointer are equal
791         self.assertTrue(m4.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,4,3,9,10,5,4,10,11])))
792         m6=mcpy[::2]
793         self.assertTrue(isinstance(m6,MEDCoupling1SGTUMesh))
794         self.assertTrue(m6.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,3,2,8,9,5,4,10,11])))
795         ##
796         mcpy.setCoords(DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()]))
797         mcpy.checkCoherency1()
798         ##
799         mcppy=mcpy.deepCpyConnectivityOnly()
800         self.assertTrue(mcppy.isEqual(mcpy,1e-12))
801         self.assertTrue(mcppy.getCoords().getHiddenCppPointer()==mcpy.getCoords().getHiddenCppPointer())
802         self.assertTrue(mcppy.getNodalConnectivity().isEqual(mcpy.getNodalConnectivity()))
803         self.assertTrue(mcppy.getNodalConnectivity().getHiddenCppPointer()!=mcpy.getNodalConnectivity().getHiddenCppPointer())
804         ##
805         a,b=mcpy.getReverseNodalConnectivity()
806         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])))
807         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])))
808         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds([0,1,6,7],False).isEqual(DataArrayInt([0,1,5])))
809         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds([0,1,6,7],True).isEqual(DataArrayInt([0,5])))
810         self.assertTrue(mcpy.getCellsInBoundingBox([(0,1),(0,1),(0,1)],1e-12).isEqual(DataArrayInt([0,1,5])))
811         f=mcpy.buildOrthogonalField()
812         self.assertEqual(f.getMesh().getHiddenCppPointer(),mcpy.getHiddenCppPointer())
813         self.assertTrue(f.getArray().isEqual(DataArrayDouble(6*[(0,0,-1)]),1e-12))
814         mcpy.changeSpaceDimension(2)
815         self.assertEqual(1,mcpy.getCellContainingPoint([1.5,0.5],1e-12))
816         ##
817         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds(DataArrayInt([6,7]),False).isEqual(DataArrayInt([0,1,5])))
818         ##
819         mcpy2=mcpy.deepCpy()
820         self.assertEqual([None,None],mcpy.checkGeoEquivalWith(mcpy2,1,1e-12))#fast equal
821         mcpy.checkFastEquivalWith(mcpy2,1e-12)
822         mcpy2.renumberCells([0,2,4,3,1,5])
823         mcpy.checkFastEquivalWith(mcpy2,1e-12)
824         self.assertEqual([None,None],mcpy.checkGeoEquivalWith(mcpy2,1,1e-12))#fast equal
825         mcpy2.renumberCells([0,2,4,3,1,5])
826         mcpy2.renumberCells([1,3,5,0,2,4])
827         self.assertRaises(InterpKernelException,mcpy.checkFastEquivalWith,mcpy2,1e-12)
828         self.assertRaises(InterpKernelException,mcpy.checkGeoEquivalWith,mcpy2,1,1e-12)#fast equal
829         pass
830
831     def testSwig21DGTUMesh1(self):
832         a0=DataArrayInt([0,2,3,5,6,8])
833         a1=DataArrayInt([0,4,7,11,14,18,21,25])
834         a2=DataArrayInt([0,1,4,5])
835         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])))
836         self.assertEqual(a1[3:].front(),11)
837         self.assertEqual(a1[4:].convertToDblArr().front(),14.)
838         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])
839         d,e=MEDCouplingUMesh.ExtractFromIndexedArrays2(1,5,2,a1c,a1)
840         self.assertTrue(d.isEqual(DataArrayInt([8,11,0,1,5,2])))
841         self.assertTrue(e.isEqual(DataArrayInt([0,3,6])))
842         #
843         m=MEDCouplingDataForTest.build2DTargetMesh_1()[0,3,4]
844         ref=DataArrayInt([0,3,4,1,6,7,4,3,7,8,5,4])
845         self.assertTrue(m.convertNodalConnectivityToStaticGeoTypeMesh().isEqual(ref))
846         d,e=m.convertNodalConnectivityToDynamicGeoTypeMesh()
847         self.assertTrue(d.isEqual(ref))
848         self.assertTrue(e.isEqual(DataArrayInt.Range(0,13,4)))
849         self.assertTrue(m.fillCellIdsToKeepFromNodeIds(DataArrayInt([6,7]),False).isEqual(DataArrayInt([1,2])))
850         #
851         m=MEDCoupling1GTUMesh.New("m",NORM_POLYHED)
852         self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
853         m.__repr__() ; m.__str__()
854         m.setCoords(DataArrayDouble(20,3))
855         m.allocateCells()
856         m.__repr__() ; m.__str__()
857         m.insertNextCell([0,1,2,5,7,2,-1,1,3])
858         self.assertEqual(1,m.getNumberOfCells())
859         self.assertTrue(DataArrayInt([8]).isEqual(m.computeNbOfNodesPerCell()))
860         self.assertTrue(DataArrayInt([2]).isEqual(m.computeNbOfFacesPerCell()))
861         m.__repr__() ; m.__str__()
862         m.checkCoherency()
863         m.checkCoherency1()
864         #
865         cm=MEDCouplingCMesh() ; cm.setName("m")
866         arr0=DataArrayDouble(6) ; arr0.iota()
867         arr1=DataArrayDouble([0,1])
868         cm.setCoords(arr0,arr1,arr1) ; um=cm.buildUnstructured() ; um.convertAllToPoly()
869         um2=um.deepCpyConnectivityOnly()
870         self.assertTrue(um2.isEqual(um,1e-12))
871         self.assertEqual(um2.getCoords().getHiddenCppPointer(),um.getCoords().getHiddenCppPointer())
872         self.assertTrue(um2.getNodalConnectivity().isEqual(um.getNodalConnectivity()))
873         self.assertTrue(um2.getNodalConnectivity().getHiddenCppPointer()!=um.getNodalConnectivity().getHiddenCppPointer())
874         self.assertTrue(um2.getNodalConnectivityIndex().isEqual(um.getNodalConnectivityIndex()))
875         self.assertTrue(um2.getNodalConnectivityIndex().getHiddenCppPointer()!=um.getNodalConnectivityIndex().getHiddenCppPointer())
876         #
877         self.assertRaises(InterpKernelException,MEDCoupling1SGTUMesh.New,"m",NORM_POLYHED)
878         m=MEDCoupling1DGTUMesh("m",NORM_POLYHED)
879         m.allocateCells(5)
880         self.assertEqual(15,m.getNodalConnectivity().getNbOfElemAllocated())
881         self.assertEqual(6,m.getNodalConnectivityIndex().getNbOfElemAllocated())
882         m.setCoords(um.getCoords())
883         m.insertNextCell([1,0,6,7,-1,7,6,1])
884         self.assertEqual(1,m.getNumberOfCells())
885         m.insertNextCell([2,1,7,8,-1,2,1,-1,8,-1,7])
886         m.insertNextCell([3,2,8,9])
887         m.insertNextCell([4,3,9,10,-1,5,3,9])
888         m.insertNextCell([5,4,10,11,-1,11,10,-1,5])
889         m.checkCoherency()
890         m.checkCoherency1()
891         self.assertEqual(5,m.getNumberOfCells())
892         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40])))
893         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])))
894         #
895         m4=m.deepCpy()
896         self.assertTrue(m.isEqual(m4,1e-12))
897         m4.getNodalConnectivity().setIJ(2,0,5)
898         self.assertTrue(not m.isEqual(m4,1e-12))
899         m4.getNodalConnectivity().setIJ(2,0,6)
900         self.assertTrue(m.isEqual(m4,1e-12))
901         m4.getNodalConnectivityIndex().setIJ(2,0,21)
902         self.assertTrue(not m.isEqual(m4,1e-12))
903         m4.getNodalConnectivityIndex().setIJ(2,0,19)
904         self.assertTrue(m.isEqual(m4,1e-12))
905         m4.getCoords().setIJ(10,1,1.1)
906         self.assertTrue(not m.isEqual(m4,1e-12))
907         m4.getCoords().setIJ(10,1,1.)
908         self.assertTrue(m.isEqual(m4,1e-12))
909         m4.getNodalConnectivity().pushBackSilent(7)
910         self.assertTrue(not m.isEqual(m4,1e-12))
911         self.assertEqual(7,m4.getNodalConnectivity().popBackSilent())
912         self.assertTrue(m.isEqual(m4,1e-12))
913         m4.setName("m4")
914         self.assertTrue(not m.isEqual(m4,1e-12))
915         m4.setName("m")
916         self.assertTrue(m.isEqual(m4,1e-12))
917         #
918         self.assertEqual(6,m.getNodalConnectivityIndex().getNbOfElemAllocated())
919         self.assertEqual(60,m.getNodalConnectivity().getNbOfElemAllocated())
920         self.assertTrue(m.computeNbOfNodesPerCell().isEqual(DataArrayInt([7,8,4,7,7])))
921         self.assertTrue(m.computeNbOfFacesPerCell().isEqual(DataArrayInt([2,4,1,2,3])))
922         self.assertEqual(m.getNodeIdsOfCell(1),[2,1,7,8,-1,2,1,-1,8,-1,7])
923         f=m.computeIsoBarycenterOfNodesPerCell()
924         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))
925         mu0=m.buildUnstructured()
926         o2n=[1,2,0,4,3]
927         m2=m.deepCpy()
928         m3=m.deepCpyConnectivityOnly()
929         self.assertTrue(m3.isEqual(m,1e-12))
930         self.assertEqual(m3.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
931         self.assertTrue(m3.getNodalConnectivity().getHiddenCppPointer()!=m.getNodalConnectivity().getHiddenCppPointer())
932         self.assertTrue(m3.getNodalConnectivity().isEqual(m.getNodalConnectivity()))
933         self.assertTrue(m3.getNodalConnectivityIndex().getHiddenCppPointer()!=m.getNodalConnectivityIndex().getHiddenCppPointer())
934         self.assertTrue(m3.getNodalConnectivityIndex().isEqual(m.getNodalConnectivityIndex()))
935         m.renumberCells(o2n)
936         mu0.renumberCells(o2n)
937         self.assertTrue(mu0.isEqual(m.buildUnstructured(),1e-12))
938         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,12,23,32,40])))
939         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])))
940         #
941         mcpy0=m.buildUnstructured()
942         self.assertTrue(isinstance(mcpy0,MEDCouplingUMesh))
943         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])))
944         self.assertTrue(mcpy0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,14,26,36,45])))
945         self.assertEqual(mcpy0.getAllGeoTypes(),[NORM_POLYHED])
946         mcpy0.checkCoherency()
947         mcpy0.checkCoherency1()
948         mcpy1=mcpy0.convertIntoSingleGeoTypeMesh()
949         self.assertTrue(mcpy1.isEqual(m,1e-12))
950         #
951         m_mrg=MEDCoupling1DGTUMesh.Merge1DGTUMeshes([m2,m,m2])
952         self.assertTrue(m_mrg.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40,44,52,63,72,80,88,99,103,111,120])))
953         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])))
954         m_mrg2=MEDCoupling1DGTUMesh.Merge1DGTUMeshesOnSameCoords([m3,m,m3])
955         self.assertTrue(m_mrg2.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40,44,52,63,72,80,88,99,103,111,120])))
956         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])))
957         a,b=m_mrg2.getReverseNodalConnectivity()
958         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])))
959         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])))
960         self.assertTrue(m_mrg2.fillCellIdsToKeepFromNodeIds([7],False).isEqual(DataArrayInt([0,1,6,7,10,11])))
961         self.assertTrue(m_mrg2.fillCellIdsToKeepFromNodeIds([0,1,6,7],True).isEqual(DataArrayInt([0,6,10])))
962         #
963         self.assertTrue(m_mrg2.isPacked())
964         self.assertEqual(120,m_mrg2.getNodalConnectivityIndex().popBackSilent())
965         self.assertEqual(m_mrg2.getNumberOfCells(),14)
966         m_mrg2.checkCoherency1()
967         self.assertTrue(not m_mrg2.isPacked())
968         m_mrg4,b=m_mrg2.copyWithNodalConnectivityPacked()
969         self.assertTrue(not b)
970         m_mrg4.checkCoherency1()
971         self.assertEqual(m_mrg4.getNumberOfCells(),14)
972         self.assertTrue(m_mrg4.getNodalConnectivityIndex().isEqual(m_mrg2.getNodalConnectivityIndex()))
973         self.assertEqual(len(m_mrg4.getNodalConnectivity()),111)
974         self.assertEqual(len(m_mrg2.getNodalConnectivity()),120)
975         self.assertTrue(m_mrg4.getNodalConnectivity().isEqual(m_mrg2.getNodalConnectivity()[:111]))
976         #
977         m0=m_mrg2[:5]
978         m1=m_mrg2[[5,6,7,8,9]]
979         m2=m_mrg2[10:]
980         self.assertTrue(m1.isEqualWithoutConsideringStr(m,1e-12))
981         a,b=m.checkGeoEquivalWith(m0,12,1e-12)
982         self.assertTrue(a.isEqual(DataArrayInt(o2n)))
983         self.assertTrue(b is None)
984         pass
985
986     def testSwig2DADAreIncludedInMe1(self):
987         a=DataArrayDouble(30) ; a.iota() ; a.rearrange(3)
988         p=DataArrayInt([5,2,1,9])
989         b,c=a.areIncludedInMe(a[p],1e-12)
990         self.assertTrue(b)
991         self.assertTrue(c.isEqual(p))
992         d=a[p]
993         d.setIJ(3,1,28.1)
994         b,c=a.areIncludedInMe(d,1e-12)
995         self.assertTrue(not b)
996         self.assertTrue(c.isEqual(DataArrayInt([5,2,1,10])))
997         pass
998
999     def testSwig2DADesallocate1(self):
1000         d=DataArrayDouble([(1,2),(6,7),(6,8)]) ; d.setInfoOnComponents(["aa","bbb"])
1001         self.assertTrue(d.isAllocated())
1002         d.checkAllocated()
1003         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1004         ref=d.getHeapMemorySize()
1005         d.desallocate()
1006         self.assertEqual(ref-d.getHeapMemorySize(),6*8)
1007         self.assertTrue(not d.isAllocated())
1008         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1009         self.assertRaises(InterpKernelException,d.checkAllocated)
1010         #
1011         d=DataArrayInt([(1,2),(6,7),(6,8)]) ; d.setInfoOnComponents(["aa","bbb"])
1012         self.assertTrue(d.isAllocated())
1013         d.checkAllocated()
1014         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1015         ref=d.getHeapMemorySize()
1016         d.desallocate()
1017         self.assertEqual(ref-d.getHeapMemorySize(),6*4)
1018         self.assertTrue(not d.isAllocated())
1019         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1020         self.assertRaises(InterpKernelException,d.checkAllocated)
1021         pass
1022
1023     def testSwig2IsPartStructured1(self):
1024         #dim 1
1025         d10=DataArrayInt([2,3,4,5,6,7,8,9,10,11])
1026         a,b=MEDCouplingStructuredMesh.IsPartStructured(d10,[13])
1027         self.assertTrue(a) ; self.assertEqual(b,[(2,12)])
1028         d11=DataArrayInt([2,3,4,5,6,7,8,10,9,11])
1029         a,b=MEDCouplingStructuredMesh.IsPartStructured(d11,[13])
1030         self.assertTrue(not a)
1031         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d10,[11])
1032         #dim 2
1033         st=[10,4]
1034         d20=DataArrayInt([1,2,3,4,11,12,13,14,21,22,23,24])
1035         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1036         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(0,3)])
1037         self.assertEqual(12,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt(b))
1038         self.assertEqual(0,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt([(1,5),(1,3),(2,2)]))
1039         self.assertEqual(0,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt([(5,5),(3,3),(2,2)]))
1040         self.assertEqual(36,MEDCouplingStructuredMesh.DeduceNumberOfGivenStructure([3,2,6]))
1041         self.assertEqual(126,MEDCouplingStructuredMesh.DeduceNumberOfGivenStructure((3,7,6)))
1042         d20=DataArrayInt([1,2,3,4,12,11,13,14,21,22,23,24])
1043         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1044         self.assertTrue(not a)
1045         d20=DataArrayInt([1,2,3,4,11,12,13,15,21,22,23,24])
1046         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1047         self.assertTrue(not a)
1048         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])
1049         a,b=MEDCouplingStructuredMesh.IsPartStructured(d21,st)
1050         self.assertTrue(a) ; self.assertEqual(b,[(0,10),(0,4)])
1051         d22=DataArrayInt([1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44])
1052         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d22,st)
1053         a,b=MEDCouplingStructuredMesh.IsPartStructured(d22,[10,5])
1054         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(0,5)])
1055         #dim 3
1056         d30=DataArrayInt([11,12,13,14,21,22,23,24,51,52,53,54,61,62,63,64])
1057         a,b=MEDCouplingStructuredMesh.IsPartStructured(d30,[10,4,2])
1058         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(1,3),(0,2)])
1059         d31=DataArrayInt([11,12,13,14,21,22,24,23,51,52,53,54,61,62,63,64])
1060         a,b=MEDCouplingStructuredMesh.IsPartStructured(d31,[10,4,2])
1061         self.assertTrue(not a)
1062         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d30,[10,4,1])
1063         pass
1064
1065     def testSwig2PartStructured1(self):
1066         c=MEDCouplingCMesh() ; c.setName("toto")
1067         arr0=DataArrayDouble(10); arr0.iota()
1068         arr1=DataArrayDouble(4) ; arr1.iota(3)
1069         c.setCoords(arr0,arr1)
1070         self.assertEqual(c.getNodeGridStructure(),(10,4))
1071         self.assertEqual(c.getCellGridStructure(),(9,3))
1072         d20=DataArrayInt([1,2,3,4,10,11,12,13,19,20,21,22])
1073         self.assertEqual(27,c.getNumberOfCells())
1074         self.assertEqual(40,c.getNumberOfNodes())
1075         self.assertEqual(2,c.getMeshDimension())
1076         c.checkCoherency()
1077         #
1078         arr2=MEDCouplingStructuredMesh.BuildExplicitIdsFrom([9,3],[(1,5),(0,3)])
1079         self.assertTrue(arr2.isEqual(DataArrayInt([1,2,3,4,10,11,12,13,19,20,21,22])))
1080         # CMesh
1081         c2=c.buildStructuredSubPart([(1,5),(0,3)])
1082         c2.checkCoherency()
1083         self.assertTrue(isinstance(c2,MEDCouplingCMesh))
1084         self.assertEqual(12,c2.getNumberOfCells())
1085         self.assertEqual(20,c2.getNumberOfNodes())
1086         self.assertEqual(2,c2.getMeshDimension())
1087         self.assertEqual("toto",c2.getName())
1088         self.assertTrue(c2.getCoordsAt(0).isEqual(DataArrayDouble([1.,2.,3.,4.,5.]),1e-12))
1089         self.assertTrue(c2.getCoordsAt(1).isEqual(DataArrayDouble([3.,4.,5.,6.]),1e-12))
1090         #
1091         a,b=c.buildPartAndReduceNodes(d20)
1092         a.checkCoherency()
1093         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])
1094         self.assertTrue(exp2.isEqual(b))
1095         self.assertTrue(isinstance(a,MEDCouplingCMesh))
1096         self.assertTrue(a.buildUnstructured().isEqual(c.buildUnstructured().buildPartAndReduceNodes(d20)[0],1e-12))
1097         # CurveLinearMesh
1098         c2=MEDCouplingCurveLinearMesh() ; c2.setName("toto")
1099         c2.setCoords(c.buildUnstructured().getCoords())
1100         c2.setNodeGridStructure([10,4])
1101         c2.checkCoherency()
1102         a,b=c2.buildPartAndReduceNodes(d20)
1103         a.checkCoherency()
1104         self.assertTrue(exp2.isEqual(b))
1105         self.assertTrue(isinstance(a,MEDCouplingCurveLinearMesh))
1106         self.assertTrue(a.buildUnstructured().isEqual(c2.buildUnstructured().buildPartAndReduceNodes(d20)[0],1e-12))
1107         pass
1108
1109     def testSwig2FindPermutationFromFirstToSecond1(self):
1110         ids1=DataArrayInt([3,1,103,4,6,10,-7,205])
1111         ids2=DataArrayInt([-7,1,205,10,6,3,103,4])
1112         ids3=DataArrayInt.FindPermutationFromFirstToSecond(ids1,ids2)
1113         self.assertTrue(ids3.isEqual(DataArrayInt([5,1,6,7,4,3,0,2])))
1114         ids2ToTest=ids1.renumber(ids3)
1115         self.assertTrue(ids2ToTest.isEqual(ids2))
1116         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103]))
1117         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103,2]))
1118         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103,1]))
1119         self.assertTrue(DataArrayInt.FindPermutationFromFirstToSecond(DataArrayInt([]),DataArrayInt([])).empty())
1120         pass
1121
1122     def testSwig2BugStructuredMeshGetNodeIdsOfCell1(self):
1123         m=MEDCouplingCMesh("mesh")
1124         coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
1125         coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
1126         m.setCoords(coordsX,coordsY)
1127         self.assertEqual([2,3,8,7],m.getNodeIdsOfCell(2))
1128         self.assertEqual([3,4,9,8],m.getNodeIdsOfCell(3))
1129         self.assertEqual([7,8,13,12],m.getNodeIdsOfCell(6))
1130         self.assertEqual([8,9,14,13],m.getNodeIdsOfCell(7))
1131         pass
1132
1133     def testSwig2ThrowOnDAIInvertN2O2ON2(self):
1134         p1=DataArrayInt([3,5,8])
1135         p2=DataArrayInt([0,3,4,5,6,7,8,9,10])
1136         p1.transformWithIndArr(p2.invertArrayN2O2O2N(11))
1137         self.assertTrue(p1.isEqual(DataArrayInt([1,3,6])))
1138         self.assertTrue(p2.invertArrayN2O2O2N(11).isEqual(DataArrayInt([0,-1,-1,1,2,3,4,5,6,7,8])))
1139         self.assertRaises(InterpKernelException,p2.invertArrayN2O2O2N,10)
1140         pass
1141
1142     def testSwig2ComputeEffectiveNbOfNodesPerCell1(self):
1143         coords=DataArrayDouble([ 0.241310763507 , 0.0504777305619 , 0.0682283524903 , 0.252501053866 , -0.0625176732937 , 0.137272639894 ,
1144                  0.152262663601 , 0.241816569527 , 0.133812556197 , 0.18047750211 , -0.0789949051358 , 0.339098173401 ,
1145                  0.151741971857 , 0.238885278571 , 0.137715037333 , 0.242532155481 , -0.0928169086456 , 0.0678043417367 ,
1146                  0.240941965335 , -0.015461491464 , 0.0617186345825 , 0.24127650112 , 0.0499427876717 , 0.0679634099148 ,
1147                  -0.145828917428 , 0.206291632565 , 0.0310071927543 , 0.0125651775307 , 0.266262085828 , 0.105228430543 ,
1148                  -0.0994066533286 , 0.233224271238 , 0.0572213839567 , -0.0951345338317 , 0.234819509426 , 0.0592126284538 ,
1149                  0.136580574205 , -0.205486212579 , 0.0572866072014 , 0.0637270784978 , -0.168886355238 , 0.446614057077 ,
1150                  0.041337157151 , -0.213402568198 , 0.372407095999 , 0.0411601970268 , -0.202387875756 , 0.411334979491 ,
1151                  -0.108355701857 , 0.193636239335 , 0.204886756738 , 0.00639779029829 , 0.155296981517 , 0.252585892979 ,
1152                  0.0262473111702 , -0.112919732543 , 0.424286639249 ,-0.224103052733 , -0.139430015438 , -0.0122352295701 ,
1153                 -0.0312760589481 , -0.274272003594 , 0.0323959636568 , -0.166663422532 , -0.217754445175 , 0.00392109070364 ,
1154                  -0.30586619777 , -0.0475168041091 , -0.0144585228182 , -0.280881480586 , 0.135571293538 , 0.00623923647986 ,
1155                  -0.25548538234 , 0.156819217766 , 0.0645277879769 , -0.131567009284 , 0.184133752309 , 0.206021802753 ,
1156                  -0.196204010965 , 0.151602971681 , 0.212974777736 , -0.183713879463 , 0.0802946639531 , 0.260115662599 ,
1157                  -0.244241178767 , -0.0738873389604 , 0.144590565817 , -0.155804057829 , -0.164892720025 , 0.210613950558 ,
1158                  -0.170950800428 , -0.215099334026 , 0.00610122860092 , -0.30552634869 , -0.0490020791904 , -0.0132786533145 ,
1159                  0.271831011884 , 0.15105657296 , 0.0230534827908 , 0.281919192283 , 0.0898544306288 , -0.0625201489143 ,
1160                  0.260240727276 , -0.0120688706637 , -0.0532316588626 , 0.244947737722 , 0.0197984684293 , 0.0309341209233 ,
1161                  0.23439631578 , 0.229825279875 , 0.0508520585381 , 0.160921316875 , 0.265078502128 , 0.121716560626 ,
1162                  -0.315088694175 , 0.0747700471918 , -0.245836615071 , -0.327728781776 , 0.0857114674649 , -0.239431905957 ,
1163                  -0.308385460634 , 0.145142997084 , -0.149886828433 , 0.0488236045164 , 0.309462801914 , 0.0849169148265 ,
1164                 -0.0244964803395 , 0.33145611751 , -0.0476415818061 , 0.0060567994229 , 0.32418412014 , 0.0367779543812 ,
1165                  -0.0950221448063 , 0.236675326003 , 0.0572594453983 , 0.248723023186 , 0.0886648784791 , -0.176629430538 ,
1166                  0.116796984 , 0.256596599567 , -0.292863523603 , 0.118024552914 , 0.229154257843 , -0.34233232501 ,
1167                  0.217507892549 , -0.0417822335742 , -0.176771782888 , -0.224429321304 , 0.0125595300114 , -0.362064725588 ,
1168                  0.0937301100955 , -0.0500824832657 , -0.299713548444 , -0.244162220397 , 0.0383853931293 , -0.389856984411 ,
1169                  -0.0281989366102 , 0.097392811563 , -0.458244577284 , -0.385010847162 , 0.10122766194 , -0.140052859922 ,
1170                  -0.377936358012 , 0.110875172128 , -0.176207095463 , 0.244483045556 , -0.0991073977045 , 0.0575134372934 ,
1171                 0.262605120167 , -0.100243191645 , -0.0495620806935 , 0.240306880972 , -0.136153701579 , -0.114745281696 ,
1172                  0.215763176129 , -0.0836766059189 , -0.183249640616 , 0.237870396603 , -0.132449578286 , -0.121598854639 ,
1173                  -0.0637683083097 , -0.27921020214 , -0.149112321992 , -0.0856211014977 , -0.2973233473 , -0.0446878139589 ,
1174                  0.104675342288 , -0.0625908305324 , -0.290346256534 , 0.0248264249186 , -0.247797708548 , -0.165830884019 ,
1175                  0.0719302438309 , -0.178468260473 , -0.211432157345 , 0.142871843159 , -0.208769948542 , 0.0454101128246 ,
1176                  0.167803379307 , -0.207851396623 , -0.088802726124 , 0.12868717152 , -0.230920439715 , 0.00760508389036 ,
1177                  -0.0372812069535 , -0.286740286332 , 0.00963701291166 ], 69, 3)
1178         connN = [ #polyhedron 0
1179             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
1180             , 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
1181             , 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
1182             , 22 , 19 , 21 , 30 , 31 , -1 , 22 , 31 , 28 , 27 , 26 , 24 , 23 , -1 , 31 , 30 , 29 , 28,
1183             # polyhedron 1
1184             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
1185             , 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
1186             , 33 , 34 , 48 , 45 , -1 , 35 , 34 , 48 , 50 , 49 , 38 , -1 , 41 , 43 , 42 , 46 , 36 , 37 , -1 , 38 , 39 , 51 , 49 , -1
1187             , 39 , 40 , 42 , 46 , 47 , 52 , 51 , -1 , 45 , 47 , 52 , 50 , 48 , -1 , 52 , 51 , 49 , 50,
1188             # polyhedron 2
1189             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
1190             , 23 , 53 , 54 , 40 , 8 , -1 , 53 , 22 , 23 , -1 , 39 , 54 , 40,
1191             # polyhedron 3
1192             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
1193             , 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
1194             , 55 , 5 , 12 , 65 , -1 , 66 , 67 , 65 , 55 , 56 , 57 , -1 , 63 , 66 , 57 , 59 , 64 , -1 , 64 , 62 , 58 , 59 , -1
1195             , 60 , 63 , 66 , 67 , 68 , 61 , -1 , 61 , 68 , 20 , 21 , -1 , 67 , 68 , 20 , 12 , 65]
1196         meshN=MEDCouplingUMesh.New()
1197         meshN.setName("ForBary")
1198         meshN.setMeshDimension(3) ; meshN.setCoords(coords)
1199         meshN.allocateCells(4)
1200         meshN.insertNextCell(NORM_POLYHED,113,connN);
1201         meshN.insertNextCell(NORM_POLYHED,99,connN[113:])
1202         meshN.insertNextCell(NORM_POLYHED,43,connN[212:])
1203         meshN.insertNextCell(NORM_POLYHED,92,connN[255:])
1204         d=meshN.computeEffectiveNbOfNodesPerCell()
1205         e=meshN.computeNbOfNodesPerCell()
1206         self.assertTrue(d.isEqual(DataArrayInt([32,28,12,26])))
1207         self.assertTrue(e.isEqual(DataArrayInt([96,84,36,78])))
1208         m0=MEDCoupling1DGTUMesh(meshN)
1209         c=MEDCouplingCMesh()
1210         arr=DataArrayDouble(3) ; arr.iota(10)
1211         c.setCoords(arr,arr,arr)
1212         m10=c.buildUnstructured()
1213         m11=c.build1SGTUnstructured()
1214         m12=MEDCoupling1SGTUMesh.New(m10)
1215         self.assertTrue(m12.isEqual(m11,1e-12))
1216         m12.setCoords(m0.getCoords()) # m12 is not OK geometrically but the aim of the test is only connectivity values
1217         m3=MEDCoupling1GTUMesh.AggregateOnSameCoordsToUMesh([m12,m0])
1218         m3.checkCoherency()
1219         self.assertEqual(m3.getCoords().getHiddenCppPointer(),m12.getCoords().getHiddenCppPointer())
1220         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])))
1221         self.assertTrue(m3.getNodalConnectivityIndex().isEqual(DataArrayInt([0,9,18,27,36,45,54,63,72,186,286,330,423])))
1222         pass
1223
1224     def testSwig2Tetrahedrize1(self):
1225         d=DataArrayInt([0,3,6,10,14,20])
1226         d2=d.buildExplicitArrOfSliceOnScaledArr(slice(0,5,2))
1227         self.assertTrue(d2.isEqual(DataArrayInt([0,0,0, 2,2,2,2, 4,4,4,4,4,4])))
1228         m=MEDCouplingUMesh("Penta6",3)
1229         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"])
1230         m.allocateCells()
1231         m.insertNextCell(NORM_PENTA6,[1,2,0,4,5,3])
1232         st=m.getCoords().getHiddenCppPointer()
1233         c,a,b=m.tetrahedrize(PLANAR_FACE_5)
1234         c.checkCoherency1()
1235         self.assertTrue(a.isEqual(DataArrayInt([0,0,0])))
1236         self.assertEqual(0,b)
1237         self.assertEqual(m.getCoords().getHiddenCppPointer(),c.getCoords().getHiddenCppPointer())
1238         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([1,2,0,4,4,3,5,0,5,0,2,4])))
1239         del m,c
1240         #
1241         m2=MEDCouplingUMesh("octa12",3)
1242         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)
1243         m2.setCoords(coords)
1244         m2.allocateCells()
1245         m2.insertNextCell(NORM_HEXGP12,[3,2,1,0,5,4,9,8,7,6,11,10])
1246         c,a,b=m2.tetrahedrize(PLANAR_FACE_5)
1247         c.checkCoherency1()
1248         self.assertTrue(a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0])))
1249         self.assertEqual(0,b)
1250         self.assertEqual(c.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1251         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])))
1252         del m2,coords,c
1253         #
1254         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"])
1255         m3=MEDCouplingUMesh("hexa8",3)
1256         m3.setCoords(coords)
1257         m3.allocateCells(0)
1258         m3.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1259         st=m3.getCoords().getHiddenCppPointer()
1260         c,a,b=m3.tetrahedrize(PLANAR_FACE_5)
1261         c.checkCoherency1()
1262         a.isEqual(DataArrayInt([0,0,0,0,0]))
1263         self.assertEqual(0,b)
1264         self.assertEqual(m3.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1265         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])))
1266         #
1267         m4=MEDCouplingUMesh("hexa8",3)
1268         m4.setCoords(coords)
1269         m4.allocateCells(0)
1270         m4.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1271         c,a,b=m4.tetrahedrize(PLANAR_FACE_6)
1272         c.checkCoherency1()
1273         a.isEqual(DataArrayInt([0,0,0,0,0,0]))
1274         self.assertEqual(0,b)
1275         self.assertEqual(c.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1276         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])))
1277         #
1278         m4=MEDCouplingUMesh("hexa8",3)
1279         m4.setCoords(coords)
1280         m4.allocateCells(0)
1281         m4.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1282         st=m4.getCoords().getHiddenCppPointer()
1283         c,a,b=m4.tetrahedrize(GENERAL_24)
1284         c.checkCoherency1()
1285         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]))
1286         self.assertEqual(7,b)
1287         self.assertTrue(c.getCoords().getHiddenCppPointer()!=coords.getHiddenCppPointer())
1288         self.assertTrue(c.getCoords()[:8].isEqual(coords,0))
1289         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])))
1290         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)
1291         m4CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1292         self.assertTrue(c.getCoords().isEqual(m4CoordsExp,1e-12))
1293         self.assertAlmostEqual(2.,c.getMeasureField(False).accumulate()[0],12)
1294         #
1295         m6=MEDCouplingUMesh("hexa8",3)
1296         m6.setCoords(coords)
1297         m6.allocateCells(0)
1298         m6.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1299         st=m6.getCoords().getHiddenCppPointer()
1300         c,a,b=m6.tetrahedrize(GENERAL_48)
1301         c.checkCoherency1()
1302         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]))
1303         self.assertEqual(19,b)
1304         self.assertTrue(c.getCoords().getHiddenCppPointer()!=coords.getHiddenCppPointer())
1305         self.assertTrue(c.getCoords()[:8].isEqual(coords,0))
1306         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])))
1307         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)
1308         m6CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1309         self.assertTrue(c.getCoords().isEqual(m6CoordsExp,1e-12))
1310         self.assertAlmostEqual(2.,c.getMeasureField(False).accumulate()[0],12)
1311         #
1312         m7=MEDCouplingUMesh("polyhed",3)
1313         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"])
1314         m7.setCoords(coords)
1315         m7.allocateCells()
1316         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])
1317         c,a,b=m7.tetrahedrize(PLANAR_FACE_5)
1318         c.checkCoherency1()
1319         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])))
1320         self.assertEqual(9,b)
1321         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])))
1322         self.assertAlmostEqual(5.196152422706635,c.getMeasureField(False).accumulate()[0],12)
1323         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)
1324         m7CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1325         self.assertTrue(c.getCoords().isEqual(m7CoordsExp,1e-12))
1326         del m7,coords,c
1327         #
1328         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"])
1329         m8=MEDCouplingUMesh("pyra5",3)
1330         m8.setCoords(coords)
1331         m8.allocateCells(0)
1332         m8.insertNextCell(NORM_PYRA5,[3,2,1,0,7])
1333         st=m8.getCoords().getHiddenCppPointer()
1334         c,a,b=m8.tetrahedrize(PLANAR_FACE_5)
1335         self.assertEqual(m8.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1336         c.checkCoherency1()
1337         self.assertTrue(a.isEqual(DataArrayInt([0,0])))
1338         self.assertEqual(0,b)
1339         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,1,7,3,1,0,7])))
1340         self.assertAlmostEqual(0.6666666666666667,c.getMeasureField(False).accumulate()[0],12)
1341         pass
1342
1343     def testDualMesh3D1(self):
1344         arr=DataArrayDouble(2) ; arr.iota()
1345         c=MEDCouplingCMesh() ; c.setCoords(arr,arr,arr)
1346         m=c.buildUnstructured()
1347         t=m.tetrahedrize(PLANAR_FACE_5)[0]
1348         d=t.computeDualMesh()
1349         self.assertTrue(d.getNodalConnectivityIndex().isEqual(DataArrayInt([0,29,118,207,236,325,354,383,472])))
1350         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])))
1351         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))
1352         self.assertAlmostEqual(1.,d.getMeasureField(False).accumulate()[0],1e-13)
1353         pass
1354
1355     def testDualMesh2D1(self):
1356         arr=DataArrayDouble(5) ; arr.iota()
1357         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
1358         m=c.buildUnstructured()
1359         m.simplexize(0)
1360         t=MEDCoupling1SGTUMesh(m)
1361         d=t.computeDualMesh()
1362         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])))
1363         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])))
1364         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))
1365         self.assertAlmostEqual(16.,d.getMeasureField(False).accumulate()[0],1e-13)
1366         pass
1367
1368     def testSwig2LoadBalanceBBox1(self):
1369         arr=DataArrayDouble(5) ; arr.iota()
1370         t=MEDCouplingCMesh() ; t.setCoords(arr,arr)
1371         arr=DataArrayDouble(16) ; arr.iota() ; arr*=2./15
1372         s=MEDCouplingCMesh() ; s.setCoords(arr,arr[:]) ; s.translate([2.,1.])
1373         #
1374         s1=s.build1SGTUnstructured()
1375         t1=t.build1SGTUnstructured()
1376         w=MEDCouplingPointSet.ComputeNbOfInteractionsWithSrcCells(s1,t1,1e-12)
1377         wExp=DataArrayInt([0,0,0,0,0,0,64,64,0,0,64,64,0,0,0,0])
1378         self.assertTrue(w.isEqual(wExp))
1379         slcs=w.splitInBalancedSlices(4)
1380         self.assertEqual(len(slcs),4)
1381         self.assertEqual(slcs,[slice(0,7,1),slice(7,8,1),slice(8,11,1),slice(11,16,1)])
1382         bbs=s1.getBoundingBoxForBBTree()
1383         bbt=t1.getBoundingBoxForBBTree()
1384         self.assertTrue(bbt.computeNbOfInteractionsWith(bbs,1e-12).isEqual(wExp))
1385         pass
1386
1387     def testKrSpatialDiscretization2(self):
1388         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)
1389         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)
1390         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)
1391         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])
1392         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])
1393         #
1394         nbOfInputPoints=100;
1395         f=MEDCouplingFieldDouble.New(ON_NODES_KR,ONE_TIME);
1396         mesh=MEDCoupling1SGTUMesh.New("aMesh",NORM_POINT1);
1397         mesh.setCoords(srcPointCoordsXY);
1398         f.setMesh(mesh);
1399         f.setArray(srcFieldValsOnPoints);
1400         f.checkCoherency();
1401         #
1402         res0=f.getValueOn([-0.5,-0.5]);
1403         self.assertAlmostEqual(targetFieldValsExpected.getIJ(0,0),res0[0],10)
1404         #
1405         valuesToTest=f.getValueOnMulti(targetPointCoordsXY);
1406         self.assertEqual(196,valuesToTest.getNumberOfTuples());
1407         self.assertEqual(1,valuesToTest.getNumberOfComponents());
1408         for i in xrange(40):
1409             self.assertAlmostEqual(targetFieldValsExpected[i],valuesToTest.getIJ(i,0),10)
1410             pass
1411         fd=f.getDiscretization()
1412         del f
1413         self.assertTrue(isinstance(fd,MEDCouplingFieldDiscretizationKriging))
1414         coeffs,isDrift=fd.computeVectorOfCoefficients(mesh,srcFieldValsOnPoints)
1415         self.assertEqual(3,isDrift)
1416         self.assertTrue(coeffsExpected.isEqual(coeffs,1e-8))
1417         # testing matrix
1418         pts3=[-0.5,-0.5,-0.5,-0.35,-0.35,-0.2]
1419         mesh.setCoords(srcPointCoordsXY[:4])
1420         m,nbCols=fd.computeEvaluationMatrixOnGivenPts(mesh,pts3)
1421         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))
1422         if MEDCouplingHasNumPyBindings():
1423             import numpy as np
1424             m0=m.toNumPyArray() ; m0=m0.reshape(3,nbCols) ; m0=np.matrix(m0)
1425             srcFieldValsOnPoints2=DataArrayDouble(4,2) ; srcFieldValsOnPoints2[:,0]=srcFieldValsOnPoints[:4] ; srcFieldValsOnPoints2[:,1]=2*srcFieldValsOnPoints[:4]
1426             n0=srcFieldValsOnPoints2.toNumPyArray() ; n0=n0.reshape(4,2) ; n0=np.matrix(n0)
1427             #
1428             f=MEDCouplingFieldDouble.New(ON_NODES_KR,ONE_TIME) ;  f.setMesh(mesh) ; f.setArray(srcFieldValsOnPoints2) ; f.checkCoherency()
1429             self.assertTrue(DataArrayDouble(np.array((m0*n0))).isEqual(f.getValueOnMulti(pts3),1e-14))
1430             pass
1431         #
1432         pass
1433     
1434     # test the when input slice is all the same object is return by MEDCouplingMesh.buildPartRange
1435     def testSwig2MeshPartSlice1(self):
1436         a=DataArrayDouble(4) ; a.iota()
1437         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m=c.buildUnstructured()
1438         fc0=c.getMeasureField(False) ; fc1=fc0[:] ; fc2=fc0*fc1 ; fc2.setName(fc0.getName())
1439         self.assertEqual(fc0.getMesh().getHiddenCppPointer(),fc1.getMesh().getHiddenCppPointer())
1440         self.assertEqual(fc2.getMesh().getHiddenCppPointer(),fc1.getMesh().getHiddenCppPointer())
1441         self.assertTrue(fc2.isEqual(fc1,1e-12,1e-12))
1442         #
1443         fm0=m.getMeasureField(False) ; fm1=fm0[:] ; fm2=fm0*fm1 ; fm2.setName(fm0.getName())
1444         self.assertEqual(fm0.getMesh().getHiddenCppPointer(),fm1.getMesh().getHiddenCppPointer())
1445         self.assertEqual(fm2.getMesh().getHiddenCppPointer(),fm1.getMesh().getHiddenCppPointer())
1446         self.assertTrue(fm2.isEqual(fm1,1e-12,1e-12))
1447         pass
1448
1449     # test the correct behaviour when attempting to aggregate two fields whose mesh is null
1450     def testSwig2MergeFieldsOnFieldsHavingNoMesh(self):
1451         a=DataArrayDouble(4) ; a.iota() ; a*=1.5
1452         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; f1=c.getMeasureField(False)
1453         f1.setMesh(None) ; f2=f1.deepCpy() ; f2*=2
1454         f3=MEDCouplingFieldDouble.MergeFields(f1,f2)
1455         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])
1456         self.assertTrue(f3.getArray().isEqual(daExp,1e-12))
1457         self.assertEqual(f3.getTypeOfField(),ON_CELLS)
1458         self.assertEqual(f3.getMesh(),None)
1459         f4=MEDCouplingFieldDouble.MergeFields([f1,f2])
1460         self.assertTrue(f4.getArray().isEqual(daExp,1e-12))
1461         self.assertEqual(f4.getTypeOfField(),ON_CELLS)
1462         self.assertEqual(f4.getMesh(),None)
1463         pass
1464
1465     # test a simple node to cell convertion of a field
1466     def testSwig2NodeToCellDiscretization1(self):
1467         f=MEDCouplingFieldDouble(ON_NODES) ; f.setTime(1.1,2,3)
1468         a1=DataArrayDouble(4) ; a1.iota()
1469         a2=DataArrayDouble(3) ; a2.iota()
1470         m=MEDCouplingCMesh() ; m.setCoords(a1,a2)
1471         f.setMesh(m)
1472         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]"])
1473         f.setArray(arr) ; f.setName("toto")
1474         #
1475         f2=f.nodeToCellDiscretization()
1476         self.assertEqual(ON_CELLS,f2.getTypeOfField())
1477         self.assertEqual("toto",f2.getName())
1478         self.assertEqual([1.1,2,3],f2.getTime())
1479         self.assertEqual(["aa [km]","bbb [kJ]"],f2.getArray().getInfoOnComponents())
1480         self.assertEqual(6,f2.getArray().getNumberOfTuples())
1481         self.assertEqual(f.getMesh().getHiddenCppPointer(),f2.getMesh().getHiddenCppPointer())
1482         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]"])
1483         self.assertTrue(f2.getArray().isEqual(exp,1e-13))
1484         pass
1485     
1486     def testSwig2NonRegressionBugIntersectMeshes1(self):
1487         src=MEDCouplingUMesh("src",2)
1488         src.setCoords(DataArrayDouble([-2.5,-3,-2.5,3,2.5,3],3,2))
1489         src.allocateCells()
1490         src.insertNextCell(NORM_TRI3,[0,1,2])
1491         #
1492         trg=MEDCouplingUMesh("trg",2)
1493         trg.setCoords(DataArrayDouble([-2.5,-3.,0.,-3.,0.,-2.,-2.,0.,-2.25,0.,-2.5,0.,-2.5,-1.5,0.,-2.5,-1.25,-3.,-1.414213562373095,-1.414213562373095],10,2))
1494         trg.allocateCells()
1495         trg.insertNextCell(NORM_QPOLYG,[2,1,0,5,3,7,8,6,4,9])
1496         #
1497         a,b,c=MEDCouplingUMesh.Intersect2DMeshes(src,trg,1.0e-8)
1498         a.mergeNodes(1e-8)
1499         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([-2.5,-3.,-2.5,3.,2.5,3.,0.,-3.,0.,-2.,-2.,0.,-2.25,0.,-2.5,0.,-2.5,-1.5,0.,-2.5,-1.25,-3.,-1.414213562373095,-1.414213562373095,-1.2803687993289596,-1.5364425591947515,-1.8901843996644798,-2.2682212795973755,-1.81117884244736,-0.8483107924994473,-2.5,1.5,0.,3.,0.6098156003355202,0.7317787204026243],18,2),1e-12))
1500         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([32,12,0,7,5,13,8,6,14,32,7,1,2,12,5,15,16,17,14,6])))
1501         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,9,20])))
1502         self.assertTrue(b.isEqual(DataArrayInt([0,0])))
1503         self.assertTrue(c.isEqual(DataArrayInt([0,-1])))
1504         pass
1505
1506     def testSwig2MeshOrientCorrectly2DCells1(self):
1507         m=MEDCouplingUMesh("mesh",2)
1508         coo=DataArrayDouble([1.,0.,0.5,-0.1,0.,1.,0.,0.,0.07,0.5,0.59,0.5],6,2)
1509         m.setCoords(coo)
1510         m.allocateCells()
1511         m.insertNextCell(NORM_TRI6,[3,0,2,1,5,4])
1512         m.insertNextCell(NORM_QPOLYG,[3,0,2,1,5,4])
1513         self.assertTrue(DataArrayDouble([-0.58093333350930543,-0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1514         m.changeSpaceDimension(3)
1515         m.orientCorrectly2DCells([0.,0.,-1.],False)
1516         #
1517         m.checkCoherency()
1518         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([6,3,2,0,4,5,1, 32,3,2,0,4,5,1])))
1519         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14])))
1520         m.changeSpaceDimension(2)
1521         self.assertTrue(DataArrayDouble([0.58093333350930543,0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1522         pass
1523
1524     def testSwig2Hexa8HavingFacesWarped1(self):
1525         """ 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 
1526         intersected with src the sum of intersection volume is greater than the volume of the trg cell.
1527         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
1528         GENERAL_24).
1529         """
1530         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)
1531         src=MEDCouplingUMesh("TBmesh3D",3) ; src.setCoords(srcCoo)
1532         src.allocateCells()
1533         src.insertNextCell(NORM_HEXA8,[0,1,4,3,8,9,12,11])
1534         src.insertNextCell(NORM_HEXA8,[1,2,5,4,9,10,13,12])
1535         src.insertNextCell(NORM_HEXA8,[4,5,7,6,12,13,15,14])
1536         src.insertNextCell(NORM_HEXA8,[8,9,12,11,16,17,20,19])
1537         src.insertNextCell(NORM_HEXA8,[9,10,13,12,17,18,21,20])
1538         src.checkCoherency1()
1539         # trg is useless here but I keep it in case of MEDCouplingRemapper were expected to do something about warped NORM_HEXA8
1540         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)
1541         trg=MEDCouplingUMesh("MESH",3) ; trg.setCoords(trgCoo)
1542         trg.allocateCells()
1543         trg.insertNextCell(NORM_HEXA8,[0,1,3,2,4,5,7,6])
1544         #
1545         srcFace=src.buildDescendingConnectivity()[0]
1546         conn=MEDCoupling1SGTUMesh(srcFace).getNodalConnectivity() ; conn.rearrange(4)
1547         eqFaces=srcFace.computePlaneEquationOf3DFaces()
1548         nodeIdInCell=3
1549         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
1550         lambd=-e/(eqFaces[:,:3]**2).sumPerTuple()
1551         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
1552         shouldBeZero=(pts*eqFaces[:,:-1]).sumPerTuple()+eqFaces[:,3]# this line is useless only to be sure that pts are on the plane.
1553         check=(pts-srcFace.getCoords()[conn[:,nodeIdInCell]]).magnitude() # check contains the distance of the last point to its plane
1554         idsToTest=check.getIdsNotInRange(0.,1e-10)
1555         self.assertTrue(idsToTest.isEqual(DataArrayInt([17,18,19,20,22,23,24])))
1556         idsToTest2=idsToTest.getIdsNotInRange(18,22)
1557         self.assertTrue(idsToTest2.isEqual(DataArrayInt([0,4,5,6])))
1558         idsToTest2.rearrange(2)
1559         self.assertTrue(idsToTest2.sumPerTuple().isEqual(DataArrayInt([4,11])))
1560         pass
1561
1562     def testSwig2SortHexa8EachOther1(self):
1563         """
1564         testing MEDCoupling1SGTUMesh.sortHexa8EachOther method
1565         """
1566         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)])
1567         m1=MEDCouplingUMesh("m1",3) ; m1.setCoords(coords1)
1568         m1.allocateCells() ; m1.insertNextCell(NORM_HEXA8,[7,1,3,0,6,4,2,5])
1569         m1.checkCoherency()
1570         #
1571         m2=m1.deepCpy() ; m2.setName("m2")
1572         #
1573         trs=[[0.,0.,-1.],[0.,0.,1.],[1.,0.,0.],[0.,-1.,0.],[-1.,0.,0.],[0.,1.,0.]]
1574         for i,t in enumerate(trs):
1575             for j in xrange(64):
1576                 j2=(j//16) ; j1=((j%16)//4) ; j0=(j%4)
1577                 m11=m1.deepCpy()
1578                 m11.rotate([0.,0.,0.],[0.,0.,1.],float(j0)*pi/2)
1579                 m11.rotate([0.,0.,0.],[0.,1.,0.],float(j1)*pi/2)
1580                 m11.rotate([0.,0.,0.],[1.,0.,0.],float(j2)*pi/2)
1581                 m11.translate(t)
1582                 #
1583                 m=MEDCouplingUMesh.MergeUMeshes(m2,m11)
1584                 m.mergeNodes(1e-12)
1585                 self.assertEqual(12,m.getNumberOfNodes())
1586                 m=MEDCoupling1SGTUMesh(m)
1587                 m.sortHexa8EachOther()
1588                 tmp0=m.buildUnstructured().tetrahedrize(PLANAR_FACE_6)[0].buildUnstructured()
1589                 self.assertEqual(20,tmp0.computeSkin().getNumberOfCells())
1590                 pass
1591             pass
1592         pass
1593
1594     def testSwig2normMinComputeAbs1(self):
1595         d=DataArrayDouble([4,-5,2,6.1,-7.33,1,-1,3e2,0.07,-0.009,-6,-1e30],4,3)
1596         d.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1597         d0=d.computeAbs()
1598         dExp=d.deepCpy() ; dExp.abs()
1599         self.assertTrue(dExp.isEqual(d0,1e-12))
1600         e=d0-DataArrayDouble([4,5,2,6.1,7.33,1,1,3e2,0.07,0.009,6,1e30],4,3)
1601         self.assertAlmostEqual(0.,e.normMin(),13)
1602         self.assertAlmostEqual(0.009,d.normMin(),13)
1603         #
1604         di=DataArrayInt([3,-12,5,6,14,16,-23,100,23,-1,0,-6],4,3)
1605         di.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1606         d0i=di.computeAbs()
1607         diExp=di.deepCpy() ; diExp.abs()
1608         self.assertTrue(diExp.isEqual(d0i))
1609         self.assertEqual([3,12,5,6,14,16,23,100,23,1,0,6],d0i.getValues())
1610         pass
1611
1612     def testSwig2GetCellsContainingPointsForNonConvexPolygon1(self):
1613         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)
1614         m=MEDCouplingUMesh("Intersect2D",2) ; m.setCoords(coo) ; m.allocateCells()
1615         m.insertNextCell(NORM_POLYGON,[6,3,4,5])
1616         m.insertNextCell(NORM_POLYGON,[4,0,1,2,6,5])
1617         m.checkCoherency1()
1618         #
1619         self.assertTrue(m.getCellsContainingPoint((0.4,-0.4),1e-12).isEqual(DataArrayInt([0])))
1620         self.assertTrue(m.getCellsContainingPoint((-0.4,-0.4),1e-12).isEqual(DataArrayInt([1])))
1621         self.assertTrue(m.getCellsContainingPoint((0.,-0.4),1e-12).isEqual(DataArrayInt([0,1])))
1622         pass
1623     
1624     def testSwig2GetCellsContainingPointsForNonConvexPolygon2(self):
1625         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)
1626         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1627         m.insertNextCell(NORM_QPOLYG,[8,5,4,9])
1628         m.insertNextCell(NORM_QPOLYG,[5,8,4,10])
1629         m.insertNextCell(NORM_QPOLYG,[16,8,5,15,21,9,22,17])
1630         m.insertNextCell(NORM_QPOLYG,[15,1,2,3,16,20,6,7,19,17])
1631         m.insertNextCell(NORM_QPOLYG,[15,5,8,16,22,10,21,18])
1632         m.insertNextCell(NORM_QPOLYG,[16,3,0,1,15,19,11,12,20,18])
1633         m.checkCoherency1()
1634         self.assertTrue(m.getCellsContainingPoint([0.,0.27],1e-12).isEqual(DataArrayInt([2])))
1635         pass
1636
1637     def testSwig2DAIGetIdsEqualTuple1(self):
1638         da=DataArrayInt([0,7,1,2,4,1,2,1,1,2,0,1,2,1,5,1,1,2],9,2)
1639         self.assertTrue(da.getIdsEqualTuple([1,2]).isEqual(DataArrayInt([1,4,8])))
1640         self.assertTrue(da.getIdsEqualTuple((1,2)).isEqual(DataArrayInt([1,4,8])))
1641         self.assertTrue(da.getIdsEqualTuple(DataArrayInt([1,2])).isEqual(DataArrayInt([1,4,8])))
1642         da.rearrange(3)
1643         self.assertRaises(InterpKernelException,da.getIdsEqualTuple,[1,2])# mismatch nb of compo (3) and nb of elts in input tuple (2)
1644         self.assertTrue(da.getIdsEqualTuple([2,0,1]).isEqual(DataArrayInt([3])))
1645         self.assertTrue(da.getIdsEqualTuple([2,0,7]).isEqual(DataArrayInt([])))
1646         da.rearrange(1)
1647         self.assertTrue(da.getIdsEqualTuple(2).isEqual(DataArrayInt([3,6,9,12,17])))
1648         self.assertTrue(da.getIdsEqualTuple(2).isEqual(da.getIdsEqual(2)))
1649         pass
1650
1651     def testSwig2GaussNEStaticInfo1(self):
1652         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetWeightArrayFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.16666666666666666]),1e-12))
1653         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetRefCoordsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.,0.,1.,0.,0.,1.]),1e-12))
1654         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetLocsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.6666666666666667,0.16666666666666666,0.16666666666666666,0.6666666666666667]),1e-12))
1655         pass
1656
1657     def testSwigReverseNodalConnOnStructuredMesh(self):
1658         # 1D - standard
1659         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
1660         c.setCoordsAt(0,arr)
1661         rn,rni=c.getReverseNodalConnectivity()
1662         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1663         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1664         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1665         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1666         # 1D - limit
1667         c=MEDCouplingCMesh() ; arr=DataArrayDouble(1) ; arr.iota()
1668         c.setCoordsAt(0,arr)
1669         rn,rni=c.getReverseNodalConnectivity()
1670         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1671         self.assertTrue(rn.isEqual(DataArrayInt([0])))
1672         self.assertTrue(rni.isEqual(DataArrayInt([0,1])))
1673         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1674         # 1D - limit
1675         c=MEDCouplingCMesh() ; arr=DataArrayDouble(0) ; arr.iota()
1676         c.setCoordsAt(0,arr)
1677         rn,rni=c.getReverseNodalConnectivity()
1678         rn.isEqual(DataArrayInt([]))
1679         rni.isEqual(DataArrayInt([0]))
1680         # 2D - standard
1681         c=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; arr2=DataArrayDouble(4) ; arr.iota()
1682         c.setCoords(arr,arr2)
1683         rn,rni=c.getReverseNodalConnectivity()
1684         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1685         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])))
1686         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])))
1687         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1688         # 2D - limit
1689         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1690         c.setCoords(arr,arr2)
1691         rn,rni=c.getReverseNodalConnectivity()
1692         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1693         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1694         # 2D - limit
1695         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1696         c.setCoords(arr2,arr)
1697         rn,rni=c.getReverseNodalConnectivity()
1698         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1699         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1700         # 3D - standard
1701         c=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(3) ; arr1.iota() ; arr2=DataArrayDouble(4) ; arr2.iota()
1702         c.setCoords(arr0,arr1,arr2)
1703         rn,rni=c.getReverseNodalConnectivity()
1704         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])))
1705         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])))
1706         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1707         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1708         pass
1709
1710     def testSwig2CellToNodeDiscretization1(self):
1711         m=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(4) ; arr1.iota() ; m.setCoords(arr0,arr1)
1712         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(m) ; f.setTime(1.1,5,6)
1713         arr=DataArrayDouble(12) ; arr.iota()
1714         arr=DataArrayDouble.Meld(arr,arr+100.) ; arr.setInfoOnComponents(["aaa","bbb"])
1715         f.setArray(arr)
1716         f.checkCoherency()
1717         #
1718         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.])
1719         ref=DataArrayDouble.Meld(ref,ref+100.) ; ref.setInfoOnComponents(["aaa","bbb"])
1720         f2=f.cellToNodeDiscretization()
1721         f2.checkCoherency()
1722         self.assertEqual(f2.getTime()[1:],[5,6])
1723         self.assertAlmostEqual(f2.getTime()[0],1.1,15)
1724         self.assertEqual(f2.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
1725         self.assertTrue(f2.getArray().isEqual(ref,1e-12))
1726         rn,rni=m.getReverseNodalConnectivity()
1727         rni2=(rni.deltaShiftIndex()).convertToDblArr()
1728         arr2=(f.getArray()[rn]).accumulatePerChunck(rni)/rni2
1729         self.assertTrue(f2.getArray().isEqual(arr2,1e-12))
1730         del f2
1731         #
1732         u=m.buildUnstructured() ; f.setMesh(u) ; del m
1733         f3=f.cellToNodeDiscretization()
1734         f3.checkCoherency()
1735         self.assertEqual(f3.getTime()[1:],[5,6])
1736         self.assertAlmostEqual(f3.getTime()[0],1.1,15)
1737         self.assertEqual(f3.getMesh().getHiddenCppPointer(),u.getHiddenCppPointer())
1738         self.assertTrue(f3.getArray().isEqual(ref,1e-12))
1739         pass
1740
1741     def testSwig2GetMeshSpaceDimensionCMesh1(self):
1742         c=MEDCouplingCMesh()
1743         arr0=DataArrayDouble([0,1,2])
1744         arr1=DataArrayDouble([0])
1745         c.setCoords(arr0,arr0,arr0)
1746         self.assertEqual(c.getMeshDimension(),3)
1747         self.assertEqual(c.getSpaceDimension(),3)
1748         #
1749         c.setCoords(arr0,arr0,arr1)
1750         self.assertEqual(c.getMeshDimension(),2)
1751         self.assertEqual(c.getSpaceDimension(),3)
1752         #
1753         c.setCoords(arr0,arr0)
1754         self.assertEqual(c.getMeshDimension(),2)
1755         self.assertEqual(c.getSpaceDimension(),2)
1756         #
1757         c.setCoords(arr0,arr1)
1758         self.assertEqual(c.getMeshDimension(),1)
1759         self.assertEqual(c.getSpaceDimension(),2)
1760         #
1761         c.setCoords(arr0)
1762         self.assertEqual(c.getMeshDimension(),1)
1763         self.assertEqual(c.getSpaceDimension(),1)
1764         #
1765         c.setCoords(arr1)
1766         self.assertEqual(c.getMeshDimension(),0)
1767         self.assertEqual(c.getSpaceDimension(),1)
1768         pass
1769
1770     def testSwig2BuildSpreadZonesWithPolyOnQPolyg1(self):
1771         nx=6
1772         ny=6
1773         m=MEDCouplingCMesh()
1774         arr1=DataArrayDouble(nx) ; arr1.iota()
1775         arr2=DataArrayDouble(ny) ; arr2.iota()
1776         m.setCoords(arr1,arr2)
1777         m=m.buildUnstructured()
1778         da=DataArrayInt.Range(nx-1,(nx-1)*(ny-1),nx)
1779         m2=m[da] ; m2.simplexize(0)
1780         dan=da.buildComplement(m.getNumberOfCells())
1781         m1=m[dan]
1782         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1783         #
1784         m.convertLinearCellsToQuadratic()
1785         m1=m[::2] ; m2=m[1::2] ; m2.convertAllToPoly()
1786         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1787         p=m.buildSpreadZonesWithPoly()
1788         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])))
1789         self.assertTrue(p.getNodalConnectivityIndex().isEqual(DataArrayInt([0,41])))
1790         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))
1791         pass
1792
1793     def testSwig2Conformize2D1(self):
1794         eps = 1.0e-8
1795         coo = [0.,-0.5,0.,0.,0.5,0.,0.5,-0.5,0.25,
1796                -0.1,0.25,0.,0.5,-0.1,0.,0.5,0.5,0.5,0.25,0.4,0.25,0.5,0.5,0.4]
1797         conn = [5,5,2,6,4,5,6,3,0,1,5,4,5,10,8,11,9,5,11,2,1,7,10,9]
1798         connI = [0,5,12,17,24]
1799         m = MEDCouplingUMesh("box",2)
1800         cooArr = DataArrayDouble(coo,len(coo)/2,2)
1801         m.setCoords(cooArr)
1802         m.setConnectivity(DataArrayInt(conn),DataArrayInt(connI))
1803         m.mergeNodes(eps)
1804         m.checkCoherency()
1805         self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([3])))
1806         self.assertEqual(m.getCoords().getHiddenCppPointer(),cooArr.getHiddenCppPointer()) # check that coordinates remain the same here
1807         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,5,2,6,4,5,6,3,0,1,5,4,5,10,8,11,9,5,11,2,5,1,7,10,9])))
1808         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,12,17,25])))
1809         pass
1810
1811     def testSwig2Conformize2D2(self):
1812         eps = 1.0e-8
1813         coo=DataArrayDouble([-10,-6,0,-6,0,0,7,0,-10,2,0,2,0,6,7,6,0,8,7,8,-10,12,-4,12,0,12,0,11,7,11,-4,16,0,16,7,16],18,2)
1814         conn=DataArrayInt([2,3,7,6, 13,16,17,14, 4,10,12,5, 9,14,13,8, 8,9,7,6, 5,4,0,1, 16,12,11,15])
1815         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4)
1816         m.setCoords(coo)
1817         m.setNodalConnectivity(conn)
1818         m=m.buildUnstructured()
1819         self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([0,1,2,5])))
1820         self.assertEqual(m.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer()) # check that coordinates remain the same here
1821         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,2,3,7,6,5, 5,13,12,16,17,14, 5,4,10,11,12,13,8,6,5, 4,9,14,13,8, 4,8,9,7,6, 5,5,4,0,1,2, 4,16,12,11,15])))
1822         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,6,12,21,26,31,37,42])))
1823         pass
1824
1825     def testSwigSplit2DCells1(self):
1826         coo=DataArrayDouble([[0,0],[1,0],[1,1],[0,1],[0.5,0],[1,0.5],[0.5,1],[0.,0.5]])
1827         m=MEDCouplingUMesh("mesh",2)
1828         m.setCoords(coo)
1829         m.allocateCells()
1830         m.insertNextCell(NORM_QUAD8,[0,1,2,3,4,5,6,7])
1831         _,d,di,_,_=m.buildDescendingConnectivity()
1832         subb=DataArrayInt([5])
1833         subbi=DataArrayInt([0,0,1,1,1])
1834         mid=DataArrayInt([-1,-1])
1835         midi=DataArrayInt([0,0,2,2,2])
1836         self.assertEqual(2,m.split2DCells(d,di,subb,subbi,mid,midi))
1837         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,1,5,2,3,4,8,9,6,7])))
1838         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,11])))
1839         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([[0,0],[1,0],[1,1],[0,1],[0.5,0],[1,0.5],[0.5,1],[0.,0.5],[1.,0.25],[1.,0.75]]),1e-12))
1840         pass
1841
1842     def testSwig2Conformize2D3(self):
1843         eps = 1.0e-8
1844         coo=DataArrayDouble([-10,-6,0,-6,0,0,7,0,-10,2,0,2,0,6.5,7,6.5,0,8,7,8,-10,12,-4,12,0,12,0,11,7,11,-4,16,0,16,7,16],18,2)
1845         conn=DataArrayInt([2,3,7,6, 13,16,17,14, 4,10,12,5, 9,14,13,8, 8,9,7,6, 5,4,0,1, 16,12,11,15])
1846         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4)
1847         m.setCoords(coo)
1848         m.setNodalConnectivity(conn)
1849         m=m.buildUnstructured()
1850         m.convertLinearCellsToQuadratic()
1851         self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([0,1,2,5])))
1852         self.assertTrue(m.getCoords().getHiddenCppPointer()!=coo.getHiddenCppPointer()) # coordinates are not the same here contrary to testSwig2Conformize2D2 ...
1853         self.assertTrue(m.getCoords()[:18].isEqual(coo,1e-12)) # but the 18 first nodes are the same
1854         pass
1855
1856     def testSwig2Conformize2D4(self):
1857         eps = 1.0e-8
1858         coo=DataArrayDouble([-10,-6,0,-6,0,0,7,0,-10,2,0,2,0,6.5,7,6.5,0,8,7,8,-10,12,-4,12,0,12,0,11,7,11,-4,16,0,16,7,16],18,2)
1859         conn=DataArrayInt([2,3,7,6, 13,16,17,14, 4,10,12,5, 9,14,13,8, 8,9,7,6, 5,4,0,1, 16,12,11,15])
1860         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4)
1861         m.setCoords(coo)
1862         m.setNodalConnectivity(conn)
1863         m=m.buildUnstructured()
1864         m.convertLinearCellsToQuadratic()
1865         self.assertEqual(42,m.getNumberOfNodes())
1866         oldCoo=m.getCoords().deepCpy()
1867         m.conformize2D(eps)
1868         self.assertTrue(m.getCoords()[:42].isEqual(oldCoo,1e-12))
1869         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,2,3,7,6,5,18,19,20,42,43,32,13,12,16,17,14,44,38,23,24,25,32,4,10,11,12,13,8,6,5,26,45,39,44,31,34,42,29,8,9,14,13,8,30,25,31,32,8,8,9,7,6,32,33,20,34,32,5,4,0,1,2,29,35,36,46,43,8,16,12,11,15,38,39,40,41])))
1870         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,11,22,39,48,57,68,77])))
1871         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([[-10.,-6.0],[0.,-6.0],[0.,0.0],[7.,0.0],[-10.,2.0],[0.,2.0],[0.,6.5],[7.,6.5],[0.,8.0],[7.,8.0],[-10.,12.0],[-4.,12.0],[0.,12.0],[0.,11.0],[7.,11.0],[-4.,16.0],[0.,16.0],[7.,16.0],[3.5, 0.0],[7.,3.25],[3.5, 6.5],[0.,3.25],[0.,13.5],[3.5, 16.0],[7.,13.5],[3.5, 11.0],[-10.,7.0],[-5.,12.0],[0.,7.0],[-5.,2.0],[7.,9.5],[0.,9.5],[3.5, 8.0],[7.,7.25],[0.,7.25],[-10.,-2.0],[-5.,-6.0],[0.,-2.0],[0.,14.0],[-2.,12.0],[-4.,14.0],[-2.,16.0],[0.,4.25],[0.,1.0],[0.,11.5],[-7.,12.0],[0.,-3.]]),1e-12))
1872         pass
1873
1874     def testSwig2Conformize2D5(self):
1875         eps=1e-8
1876         coo=DataArrayDouble([[2,2],[2,-6],[10,-2],[-2,-2],[6,0],[6,-4],[2,7],[2,4.5],[-1.4641016151377544,0],[-1.950753362380551,-1.3742621398390762],[-7,-3],[-0.8284271247461898,-4.82842712474619],[0.26794919243112281,3.5],[0,1.4641016151377548],[-4.4753766811902755,-2.1871310699195381],[-3.9142135623730949,-3.9142135623730949],[-1.8042260651806146,-3.23606797749979]])
1877         m=MEDCouplingUMesh("mesh",2)
1878         m.allocateCells()
1879         m.setCoords(coo)
1880         m.insertNextCell(NORM_TRI6,[1,2,0,5,4,3])
1881         m.insertNextCell(NORM_TRI6,[8,6,0,12,7,13])
1882         m.insertNextCell(NORM_TRI6,[11,9,10,16,14,15])
1883         self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([0])))
1884         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([2.,2.,2.,-6.,10.,-2.,-2.,-2.,6.,0.,6.,-4.,2.,7.,2.,4.5,-1.4641016151377544,0.,-1.950753362380551,-1.3742621398390762,-7.,-3.,-0.8284271247461898,-4.82842712474619,0.2679491924311228,3.5,8.881784197001252e-16,1.4641016151377548,-4.4753766811902755,-2.187131069919538,-3.914213562373095,-3.914213562373095,-1.8042260651806146,-3.236067977499789,-1.7705659643687133,-0.6647725630649153,0.46926627053963865,-5.695518130045146],19,2),1e-12))
1885         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,1,2,0,8,9,11,5,4,13,17,16,18,6,8,6,0,12,7,13,6,11,9,10,16,14,15])))
1886         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,13,20,27])))
1887         pass
1888
1889     def testSwigExtendedSlice1(self):
1890         d=DataArrayInt([5,6,7])
1891         self.assertTrue(d[2:].isEqual(DataArrayInt([7])))
1892         self.assertTrue(d[3:].isEqual(DataArrayInt([])))
1893         try:
1894             d[4:]
1895         except InterpKernelException as e:
1896             self.assertTrue(True)
1897         else:
1898             self.assertTrue(False)
1899             pass
1900         d=DataArrayInt([5,6,7,8])
1901         self.assertEqual(d[-1],8)
1902         self.assertEqual(d[-4],5)
1903         try:
1904             d[-5]
1905         except InterpKernelException as e:
1906             self.assertTrue(True)
1907         else:
1908             self.assertTrue(False)
1909             pass
1910         self.assertTrue(d[2::-1].isEqual(DataArrayInt([7,6,5])))
1911         self.assertTrue(d[0::-1].isEqual(DataArrayInt([5])))
1912         self.assertTrue(d[-1::-1].isEqual(DataArrayInt([8,7,6,5])))
1913         self.assertTrue(d[-3::-1].isEqual(DataArrayInt([6,5])))
1914         self.assertTrue(d[-5::-1].isEqual(DataArrayInt([])))
1915         try:
1916             d[-6::-1]
1917         except InterpKernelException as e:
1918             self.assertTrue(True)
1919         else:
1920             self.assertTrue(False)
1921             pass
1922         d=DataArrayInt([])
1923         self.assertTrue(d[0:].isEqual(DataArrayInt([])))
1924         #
1925         d=DataArrayDouble([5,6,7])
1926         self.assertTrue(d[2:].isEqual(DataArrayDouble([7]),1e-12))
1927         self.assertTrue(d[3:].isEqual(DataArrayDouble([]),1e-12))
1928         try:
1929             d[4:]
1930         except InterpKernelException as e:
1931             self.assertTrue(True)
1932         else:
1933             self.assertTrue(False)
1934             pass
1935         d=DataArrayDouble([5,6,7,8])
1936         self.assertAlmostEqual(d[-1],8.,12)
1937         self.assertAlmostEqual(d[-4],5.,12)
1938         try:
1939             d[-5]
1940         except InterpKernelException as e:
1941             self.assertTrue(True)
1942         else:
1943             self.assertTrue(False)
1944             pass
1945         self.assertTrue(d[2::-1].isEqual(DataArrayDouble([7,6,5]),1e-12))
1946         self.assertTrue(d[0::-1].isEqual(DataArrayDouble([5]),1e-12))
1947         self.assertTrue(d[-1::-1].isEqual(DataArrayDouble([8,7,6,5]),1e-12))
1948         self.assertTrue(d[-3::-1].isEqual(DataArrayDouble([6,5]),1e-12))
1949         self.assertTrue(d[-5::-1].isEqual(DataArrayDouble([]),1e-12))
1950         try:
1951             d[-6::-1]
1952         except InterpKernelException as e:
1953             self.assertTrue(True)
1954         else:
1955             self.assertTrue(False)
1956             pass
1957         d=DataArrayDouble([])
1958         self.assertTrue(d[0:].isEqual(DataArrayDouble([]),1e-12))
1959         pass
1960
1961     def testSwig2Hexa27GP1(self):
1962         """ This test focused on shape functions of hexa27.
1963         """
1964         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.]])
1965         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1966         m.allocateCells()
1967         # the cell description is exactly those described in the description of HEXA27 in MED file 3.0.7 documentation
1968         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])
1969         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.]
1970         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]
1971         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]
1972         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1973         fGauss.setMesh(m)
1974         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1975         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1976         fGauss.setArray(arr)
1977         arrOfDisc=fGauss.getLocalizationOfDiscr()
1978         # the test is here
1979         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))
1980         #
1981         weights=27*[1]
1982         gCoords=refCoo
1983         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1984         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1985         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1986         pass
1987
1988     def testSwig2Pyra13GP1(self):
1989         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.]])
1990         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1991         m.allocateCells()
1992         # the cell description is exactly those described in the description of PYRA13 in MED file 3.0.7 documentation
1993         m.insertNextCell(NORM_PYRA13,[0,1,2,3,4,5,6,7,8,9,10,11,12])
1994         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]
1995         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]
1996         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]
1997         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1998         fGauss.setMesh(m)
1999         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
2000         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
2001         fGauss.setArray(arr)
2002         arrOfDisc=fGauss.getLocalizationOfDiscr()
2003         # the test is here
2004         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))
2005         #
2006         weights=13*[1]
2007         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. !
2008         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
2009         arrOfDisc2=fGauss.getLocalizationOfDiscr()
2010         self.assertTrue(arrOfDisc2.isEqual(coo,1e-10)) # be less exigent 1e-10 instead of 1e-12 due to shape function sensitivity arount 0.,0.,1. !
2011         pass
2012
2013     def testSwig2Tri7GP1(self):
2014         coo=DataArrayDouble([[0,0],[0,2],[2,0],[0,1],[1,1],[1,0],[0.6666666666666667,0.6666666666666667]])
2015         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2016         m.allocateCells()
2017         # the cell description is exactly those described in the description of TRI7 in MED file 3.0.7 documentation
2018         m.insertNextCell(NORM_TRI7,range(7))
2019         refCoords=[0.,0.,1.,0.,0.,1.,0.5,0.,0.5,0.5,0.,0.5,0.3333333333333333,0.3333333333333333]
2020         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]
2021         weights=[0.062969590272413,0.062969590272413,0.062969590272413,0.066197076394253,0.066197076394253,0.066197076394253,0.1125]
2022         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
2023         fGauss.setMesh(m)
2024         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
2025         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
2026         fGauss.setArray(arr)
2027         arrOfDisc=fGauss.getLocalizationOfDiscr()
2028         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))
2029         #
2030         weights=7*[1]
2031         gaussCoords=refCoords
2032         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
2033         arrOfDisc2=fGauss.getLocalizationOfDiscr()
2034         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
2035         pass
2036
2037     def testSwig2StructuredDesc1(self):
2038         c=MEDCouplingCMesh()
2039         arr0=DataArrayDouble(3) ; arr0.iota()
2040         arr1=DataArrayDouble(4) ; arr1.iota()
2041         arr2=DataArrayDouble(5) ; arr2.iota()
2042         c.setCoords(arr0,arr1,arr2)
2043         #
2044         self.assertEqual(98,c.getNumberOfCellsOfSubLevelMesh())
2045         m=c.build1SGTSubLevelMesh()
2046         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])))
2047         self.assertEqual(NORM_QUAD4,m.getCellModelEnum())
2048         #
2049         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])))
2050         pass
2051
2052     def testSwig2Colinearize2D1(self):
2053         coo=DataArrayDouble([-5.,0.,-1.,0.,4.,3.,7.,0.,1.,6.,1.,0.,-3.,0.,6.,1.,5.,0.,3.,0.],10,2)
2054         #
2055         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
2056         m.insertNextCell(NORM_POLYGON,[5,9,8,3,7,2,4,0,6,1])
2057         refPtr=m.getCoords().getHiddenCppPointer()
2058         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
2059         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2060         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
2061         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
2062         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
2063         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2064         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
2065         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
2066         #
2067         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
2068         m.insertNextCell(NORM_POLYGON,[8,3,7,2,4,0,6,1,5,9])
2069         refPtr=m.getCoords().getHiddenCppPointer()
2070         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
2071         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2072         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
2073         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
2074         #
2075         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
2076         m.insertNextCell(NORM_POLYGON,[3,7,2,4,0,6,1,5,9,8])
2077         refPtr=m.getCoords().getHiddenCppPointer()
2078         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
2079         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2080         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,3,4,0])))
2081         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
2082         #
2083         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
2084         m.insertNextCell(NORM_POLYGON,[4,0,6,1,5,9,8,3,7,2,])
2085         refPtr=m.getCoords().getHiddenCppPointer()
2086         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
2087         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2088         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,4,0,3])))
2089         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
2090         ## false quadratic
2091         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)])
2092         coo2.setInfoOnComponents(["aa","bbbb"])
2093         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
2094         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
2095         refPtr=m.getCoords().getHiddenCppPointer()
2096         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
2097         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
2098         self.assertEqual(["aa","bbbb"],m.getCoords().getInfoOnComponents())
2099         refPtr=m.getCoords().getHiddenCppPointer()
2100         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
2101         self.assertTrue(m.getCoords()[20:].isEqualWithoutConsideringStr(DataArrayDouble([(1.,0.),(4.,3.)]),1e-12))
2102         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
2103         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
2104         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
2105         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2106         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
2107         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
2108         # mix of quadratic and linear inside a QPOLYG cell
2109         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)])
2110         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
2111         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
2112         refPtr=m.getCoords().getHiddenCppPointer()
2113         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
2114         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
2115         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
2116         self.assertTrue(m.getCoords()[20:].isEqual(DataArrayDouble([(1.,0.),(7.,6.)]),1e-12))
2117         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
2118         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
2119         pass
2120
2121     def testSwig2BoundingBoxForBBTree1(self):
2122         """ 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 !
2123         """
2124         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)
2125         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2126         m.allocateCells()
2127         m.insertNextCell(NORM_QPOLYG,[0,1,2,3,11,5,7,9,12,13,14,17,4,6,8,16])
2128         m.insertNextCell(NORM_QPOLYG,[3,0,9,11,15,16,10,17])
2129         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))
2130         pass
2131
2132     def testSwig2CartBuildUnstructuredOnExoticCases1(self):
2133         """ Test focusing on traduction from cartesian to unstructured mesh when spaceDim greater than meshDim.
2134         """
2135         #
2136         m=MEDCouplingCMesh()
2137         arrX=DataArrayDouble(3) ; arrX.iota()
2138         arrY=DataArrayDouble(4) ; arrY.iota()
2139         arrZ=DataArrayDouble(1) ; arrZ.iota()
2140         m.setCoords(arrX,arrY,arrZ)
2141         self.assertEqual(2,m.getMeshDimension())
2142         self.assertEqual(3,m.getSpaceDimension())
2143         mu=m.buildUnstructured()
2144         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])))
2145         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2146         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)])
2147         self.assertTrue(mu.getCoords().isEqual(coo0,1e-12))
2148         #
2149         m=MEDCouplingCMesh()
2150         arrX=DataArrayDouble(3) ; arrX.iota()
2151         arrY=DataArrayDouble(1) ; arrY.iota()
2152         arrZ=DataArrayDouble(4) ; arrZ.iota()
2153         m.setCoords(arrX,arrY,arrZ)
2154         self.assertEqual(2,m.getMeshDimension())
2155         self.assertEqual(3,m.getSpaceDimension())
2156         mu=m.buildUnstructured()
2157         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])))
2158         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2159         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)])
2160         self.assertTrue(mu.getCoords().isEqual(coo1,1e-12))
2161         #
2162         m=MEDCouplingCMesh()
2163         arrX=DataArrayDouble(1) ; arrX.iota() ; arrX+=9
2164         arrY=DataArrayDouble(3) ; arrY.iota()
2165         arrZ=DataArrayDouble(4) ; arrZ.iota()
2166         m.setCoords(arrX,arrY,arrZ)
2167         self.assertEqual(2,m.getMeshDimension())
2168         self.assertEqual(3,m.getSpaceDimension())
2169         mu=m.buildUnstructured()
2170         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])))
2171         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2172         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)])
2173         self.assertTrue(mu.getCoords().isEqual(coo2,1e-12))
2174         #
2175         m=MEDCouplingCMesh()
2176         arrX=DataArrayDouble(3) ; arrX.iota()
2177         arrY=DataArrayDouble(1) ; arrY.iota(7)
2178         arrZ=DataArrayDouble(1) ; arrZ.iota(8)
2179         m.setCoords(arrX,arrY,arrZ)
2180         self.assertEqual(1,m.getMeshDimension())
2181         self.assertEqual(3,m.getSpaceDimension())
2182         mu=m.buildUnstructured()
2183         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2184         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2185         coo3=DataArrayDouble([(0,7,8),(1,7,8),(2,7,8)])
2186         self.assertTrue(mu.getCoords().isEqual(coo3,1e-12))
2187         #
2188         m=MEDCouplingCMesh()
2189         arrX=DataArrayDouble(1) ; arrX.iota(7)
2190         arrY=DataArrayDouble(1) ; arrY.iota(8)
2191         arrZ=DataArrayDouble(3) ; arrZ.iota()
2192         m.setCoords(arrX,arrY,arrZ)
2193         self.assertEqual(1,m.getMeshDimension())
2194         self.assertEqual(3,m.getSpaceDimension())
2195         mu=m.buildUnstructured()
2196         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2197         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2198         coo4=DataArrayDouble([(7,8,0),(7,8,1),(7,8,2)])
2199         self.assertTrue(mu.getCoords().isEqual(coo4,1e-12))
2200         #
2201         m=MEDCouplingCMesh()
2202         arrX=DataArrayDouble(3) ; arrX.iota()
2203         arrY=DataArrayDouble(1) ; arrY.iota(7)
2204         m.setCoords(arrX,arrY)
2205         self.assertEqual(1,m.getMeshDimension())
2206         self.assertEqual(2,m.getSpaceDimension())
2207         mu=m.buildUnstructured()
2208         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2209         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2210         coo5=DataArrayDouble([(0,7),(1,7),(2,7)])
2211         self.assertTrue(mu.getCoords().isEqual(coo5,1e-12))
2212         #
2213         m=MEDCouplingCMesh()
2214         arrX=DataArrayDouble(1) ; arrX.iota(7)
2215         arrY=DataArrayDouble(3) ; arrY.iota()
2216         m.setCoords(arrX,arrY)
2217         self.assertEqual(1,m.getMeshDimension())
2218         self.assertEqual(2,m.getSpaceDimension())
2219         mu=m.buildUnstructured()
2220         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2221         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2222         coo6=DataArrayDouble([(7,0),(7,1),(7,2)])
2223         self.assertTrue(mu.getCoords().isEqual(coo6,1e-12))
2224         pass
2225
2226     def testSwig2Colinearize2D2(self):
2227         """ simple non regression test but that has revealed a bug"""
2228         coo=DataArrayDouble([(0,0),(0,0.5),(0,1),(1,1),(1,0),(0.5,0)])
2229         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2230         m.allocateCells() ; m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
2231         m.checkCoherency1()
2232         refPtr=m.getCoords().getHiddenCppPointer()
2233         #
2234         m.colinearize2D(1e-12)
2235         m.checkCoherency1()
2236         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2237         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_POLYGON,0,2,3,4])))
2238         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5])))
2239         pass
2240
2241     def testSwig2Colinearize2D3(self):
2242         """ colinearize was too agressive, potentially producing cells with one edge """
2243         # Flat polygon  with 3 edges - nothing should happen (min number of edges for a linear polyg)
2244         coo = DataArrayDouble([0.0,0.0,  2.0,0.0,   1.5,0.0,  1.0,0.0,  0.5,0.0], 5,2)   
2245         m = MEDCouplingUMesh("m", 2)
2246         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2], [0,4]] ]
2247         m.setCoords(coo); m.setConnectivity(c, cI)
2248         m.colinearize2D(1e-10)
2249         m.checkCoherency1()
2250         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2251         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2252         
2253         # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg) 
2254         m = MEDCouplingUMesh("m", 2)
2255         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,  2,3], [0,5]] ]
2256         m.setCoords(coo); m.setConnectivity(c, cI)
2257         m.colinearize2D(1e-10)
2258         m.checkCoherency1()
2259         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2260         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2261         
2262         # Flat polygon, 4 edges - one reduction should happen
2263         m = MEDCouplingUMesh("m", 2)
2264         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2,3], [0,5]] ]
2265         m.setCoords(coo); m.setConnectivity(c, cI)
2266         m.colinearize2D(1e-10)
2267         m.checkCoherency1()
2268         self.assertEqual([NORM_POLYGON, 3,1,2], m.getNodalConnectivity().getValues())
2269         self.assertEqual([0,4], m.getNodalConnectivityIndex().getValues())
2270                 
2271         # Flat quad polygon, 3 edges - one reduction expected 
2272         m = MEDCouplingUMesh("m", 2)
2273         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,3,  3,2,4], [0,7]] ]
2274         m.setCoords(coo); m.setConnectivity(c, cI)
2275         m.colinearize2D(1e-10)
2276         m.checkCoherency1()
2277         self.assertEqual([NORM_QPOLYG, 3,1, 5,2], m.getNodalConnectivity().getValues())
2278         self.assertTrue( m.getCoords()[5].isEqual( DataArrayDouble([(1.5,0.0)]), 1.0e-12 ) )
2279         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2280         
2281         # Now an actual (neutronic) case: circle made of 4 SEG3. Should be reduced to 2 SEG3
2282         m = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 1.0)
2283         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 7,5,3,1,  6,4,2,0], [0,9]] ]
2284         m.colinearize2D(1e-10)
2285         m.checkCoherency1()
2286         self.assertEqual([NORM_QPOLYG, 3,5,  8,4], m.getNodalConnectivity().getValues())
2287         self.assertTrue( m.getCoords()[8].isEqual( DataArrayDouble([(1.0,0.0)]), 1.0e-12 ) )
2288         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2289
2290     def testSwig2CheckAndPreparePermutation2(self):
2291         a=DataArrayInt([10003,9999999,5,67])
2292         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([2,3,0,1])))
2293         a=DataArrayInt([10003,-9999999,5,67])
2294         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([3,0,1,2])))
2295         a=DataArrayInt([])
2296         self.assertTrue(DataArrayInt.checkAndPreparePermutation(a).isEqual(DataArrayInt([])))
2297         pass
2298
2299     def testSwig2ComputeNeighborsOfNodes1(self):
2300         arrX=DataArrayDouble(3) ; arrX.iota()
2301         arrY=DataArrayDouble(4) ; arrY.iota()
2302         arrZ=DataArrayDouble(5) ; arrZ.iota()
2303         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
2304         # 3D
2305         a,b=m.computeNeighborsOfNodes()
2306         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])))
2307         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])))
2308         # 2D
2309         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m=m.buildUnstructured()
2310         a,b=m.computeNeighborsOfNodes()
2311         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])))
2312         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2313         # 1D
2314         m=m.buildDescendingConnectivity()[0]
2315         a,b=m.computeNeighborsOfNodes()
2316         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])))
2317         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2318         pass
2319
2320     def testSwigBugOnUnpackingTuplesInDataArray1(self):
2321         inp=DataArrayDouble([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2322         it=inp.__iter__()
2323         r=it.next()
2324         self.assertRaises(StopIteration,r.__getitem__,4)
2325         self.assertEqual(len(r),3)
2326         a,b,c=r
2327         r=it.next()
2328         self.assertEqual(len(r),3)
2329         d,e,f=r
2330         r=it.next()
2331         self.assertEqual(len(r),3)
2332         g,h,i=r
2333         r=it.next()
2334         self.assertEqual(len(r),3)
2335         j,k,l=r
2336         self.assertTrue(inp.isEqual(DataArrayDouble([a,b,c,d,e,f,g,h,i,j,k,l],4,3),1e-12))
2337         ########
2338         inp=DataArrayInt([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2339         it=inp.__iter__()
2340         r=it.next()
2341         self.assertRaises(StopIteration,r.__getitem__,4)
2342         self.assertEqual(len(r),3)
2343         a,b,c=r
2344         r=it.next()
2345         self.assertEqual(len(r),3)
2346         d,e,f=r
2347         r=it.next()
2348         self.assertEqual(len(r),3)
2349         g,h,i=r
2350         r=it.next()
2351         self.assertEqual(len(r),3)
2352         j,k,l=r
2353         self.assertTrue(inp.isEqual(DataArrayInt([a,b,c,d,e,f,g,h,i,j,k,l],4,3)))
2354         pass
2355
2356     def testSwig2IMesh1(self):
2357         """ 1st test of image grid mesh.
2358         """
2359         m=MEDCouplingIMesh()
2360         self.assertEqual(m.getSpaceDimension(),-1)
2361         self.assertEqual(1,len(m.__repr__().split("\n")))
2362         self.assertEqual(6,len(m.__str__().split("\n")))
2363         self.assertRaises(InterpKernelException,m.getNodeStruct)
2364         self.assertRaises(InterpKernelException,m.getOrigin)
2365         self.assertRaises(InterpKernelException,m.getDXYZ)
2366         m.setSpaceDimension(3)
2367         self.assertEqual(9,len(m.__str__().split("\n")))
2368         self.assertEqual(4,len(m.__repr__().split("\n")))
2369         self.assertEqual((0,0,0),m.getNodeStruct())
2370         self.assertEqual((0.,0.,0.),m.getOrigin())
2371         self.assertEqual((0.,0.,0.),m.getDXYZ())
2372         self.assertRaises(InterpKernelException,m.setNodeStruct,[3,4])
2373         m.setNodeStruct([3,4,2])
2374         self.assertEqual((3,4,2),m.getNodeStruct())
2375         m.setOrigin(DataArrayDouble([1.5,2.5,3.5]))
2376         self.assertEqual((1.5,2.5,3.5),m.getOrigin())
2377         m.setDXYZ((0.5,1.,0.25))
2378         self.assertEqual((0.5,1.,0.25),m.getDXYZ())
2379         for it in DataArrayDouble([(1.5,2.5,3.5)]):
2380             m2=MEDCouplingIMesh("",3,DataArrayInt([3,4,2]),it,DataArrayDouble((0.5,1.,0.25)))
2381             pass
2382         self.assertEqual(3,m.getSpaceDimension())
2383         self.assertEqual((3,4,2),m2.getNodeStruct())
2384         self.assertEqual((1.5,2.5,3.5),m2.getOrigin())
2385         self.assertEqual((0.5,1.,0.25),m2.getDXYZ())
2386         self.assertEqual(24,m2.getNumberOfNodes())
2387         self.assertEqual(6,m2.getNumberOfCells())
2388         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2389         m2.setAxisUnit("m")
2390         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2391         m.setAxisUnit("m")
2392         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2393         m.setName("mesh")
2394         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2395         m2.setName("mesh")
2396         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2397         m2.setTime(1.1,0,3)
2398         self.assertTrue(not m.isEqual(m2,1e-12))
2399         m.setTime(1.1,0,3)
2400         self.assertTrue(m.isEqual(m2,1e-12))
2401         m.setTimeUnit("ms")
2402         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2403         m2.setTimeUnit("ms")
2404         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2405         #
2406         m2.setNodeStruct([3,2,4])
2407         self.assertTrue(not m.isEqual(m2,1e-12))
2408         m.setNodeStruct([3,2,4])
2409         self.assertTrue(m.isEqual(m2,1e-12))
2410         m.setOrigin(DataArrayDouble([1.5,3.5,2.5]))
2411         self.assertTrue(not m.isEqual(m2,1e-12))
2412         m2.setOrigin([1.5,3.5,2.5])
2413         self.assertTrue(m.isEqual(m2,1e-12))
2414         m.setDXYZ((0.5,0.25,1.))
2415         self.assertTrue(not m.isEqual(m2,1e-12))
2416         m2.setDXYZ(DataArrayDouble((0.5,0.25,1.)))
2417         self.assertTrue(m.isEqual(m2,1e-12))
2418         m2bis=m2.deepCpy()
2419         self.assertTrue(m2bis.isEqual(m2,1e-12))
2420         #
2421         self.assertEqual(6,m2bis.getNumberOfCells())#3,2,4
2422         m2bis.refineWithFactor([3,3,3])
2423         self.assertEqual(162,m2bis.getNumberOfCells())
2424         self.assertEqual((7,4,10),m2bis.getNodeStruct())
2425         self.assertEqual((1.5,3.5,2.5),m2bis.getOrigin())
2426         self.assertTrue(DataArrayDouble([0.16666666666666666,0.08333333333333333,0.3333333333333333]).isEqual(DataArrayDouble(m2bis.getDXYZ()),1e-12))
2427         #
2428         self.assertEqual(3,m.getMeshDimension())
2429         self.assertAlmostEqual(0.125,m.getMeasureOfAnyCell(),16);
2430         mu=MEDCoupling1SGTUMesh(m.buildUnstructured())
2431         mu.checkCoherency1()
2432         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]"])
2433         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2434         self.assertEqual(NORM_HEXA8,mu.getCellModelEnum())
2435         self.assertTrue(mu.getCoords().isEqual(cooExp,1e-12))
2436         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])))
2437         bary=m.getBarycenterAndOwner()
2438         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]"])
2439         self.assertTrue(bary.isEqual(baryExp,1e-12))
2440         #
2441         c=m.convertToCartesian()
2442         c.checkCoherency()
2443         self.assertEqual([1.1,0,3],c.getTime())
2444         self.assertEqual("ms",c.getTimeUnit())
2445         self.assertEqual(3,c.getMeshDimension())
2446         self.assertEqual(3,c.getSpaceDimension())
2447         arrX=DataArrayDouble([1.5,2.,2.5]) ; arrX.setInfoOnComponents(["X [m]"])
2448         self.assertTrue(c.getCoordsAt(0).isEqual(arrX,1e-12))
2449         arrY=DataArrayDouble([3.5,3.75]) ; arrY.setInfoOnComponents(["Y [m]"])
2450         self.assertTrue(c.getCoordsAt(1).isEqual(arrY,1e-12))
2451         arrZ=DataArrayDouble([2.5,3.5,4.5,5.5]) ; arrZ.setInfoOnComponents(["Z [m]"])
2452         self.assertTrue(c.getCoordsAt(2).isEqual(arrZ,1e-12))
2453         self.assertTrue(c.buildUnstructured().isEqual(m.buildUnstructured(),1e-12))
2454         #
2455         a,b=m.getCellsContainingPoints(baryExp,1e-12)
2456         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5])))
2457         self.assertTrue(b.isEqual(DataArrayInt([0,1,2,3,4,5,6])))
2458         for a,b in enumerate(baryExp):
2459             self.assertEqual(a,m.getCellContainingPoint(b,1e-12))
2460             pass
2461         #
2462         m.translate([1.,2.,4.])
2463         self.assertEqual((3,2,4),m.getNodeStruct())
2464         self.assertEqual((2.5,5.5,6.5),m.getOrigin())
2465         self.assertEqual((0.5,0.25,1.),m.getDXYZ())
2466         m.scale([0.,1.,3.],2.)
2467         self.assertAlmostEqual(1.,m.getMeasureOfAnyCell(),16);
2468         self.assertEqual((3,2,4),m.getNodeStruct())
2469         self.assertEqual((5.,10.,10.),m.getOrigin())
2470         self.assertEqual((1.,0.5,2.),m.getDXYZ())
2471         #
2472         f=m.getMeasureField(False)
2473         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(1.1,0,3) ; f2.setMesh(m) ; arr=DataArrayDouble(6) ; arr[:]=1. ; f2.setArray(arr) ; f2.setTimeUnit("ms")
2474         f2.setName("MeasureOfMesh_mesh")
2475         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2476         #
2477         m3=m.buildStructuredSubPart([(1,2),(0,1),(1,3)])
2478         self.assertEqual((2,2,3),m3.getNodeStruct())
2479         self.assertEqual((6.,10.,12.),m3.getOrigin())
2480         self.assertEqual((1.,0.5,2.),m3.getDXYZ())
2481         # now playing with 3D surf
2482         m4=MEDCouplingIMesh("",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m4.setAxisUnit("km")
2483         self.assertEqual([(1.5,2.5),(2.5,3.5),(3.5,4.25)],m4.getBoundingBox())
2484         self.assertEqual(3,m4.getSpaceDimension())
2485         self.assertEqual(2,m4.getMeshDimension())
2486         self.assertEqual(12,m4.getNumberOfNodes())
2487         self.assertEqual(6,m4.getNumberOfCells())
2488         mu=MEDCoupling1SGTUMesh(m4.buildUnstructured())
2489         mu.checkCoherency1()
2490         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2491         self.assertEqual(NORM_QUAD4,mu.getCellModelEnum())
2492         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]"])
2493         self.assertTrue(mu.getCoords().isEqual(coordsExp,1e-12))
2494         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])))
2495         pass
2496
2497     def testSwig1GetValuesAsTuple1(self):
2498         d=DataArrayDouble()
2499         self.assertEqual(d.getValues(),[])
2500         self.assertEqual(d.getValuesAsTuple(),[])
2501         d=DataArrayDouble(24) ; d.iota() ; d.rearrange(3)
2502         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.])
2503         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.)]) 
2504         d=DataArrayInt()
2505         self.assertEqual(d.getValues(),[])
2506         self.assertEqual(d.getValuesAsTuple(),[])
2507         d=DataArrayInt(24) ; d.iota() ; d.rearrange(3)
2508         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])
2509         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)])
2510         pass
2511
2512     def testSwig2AMR1(self):
2513         self.assertEqual((1,3,12),MEDCouplingStructuredMesh.GetSplitVectFromStruct([3,4,5]))
2514         self.assertEqual((3,2),MEDCouplingStructuredMesh.GetDimensionsFromCompactFrmt([(1,4),(2,4)]))
2515         #
2516         amr=MEDCouplingCartesianAMRMesh("",2,[3,3],[0,0],[1,1])
2517         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2518         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithOverlap())
2519         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithoutOverlap())
2520         self.assertEqual(0,amr.getNumberOfPatches())
2521         self.assertEqual(1,amr.getMaxNumberOfLevelsRelativeToThis())
2522         self.assertEqual(2,amr.getSpaceDimension())
2523         amr.addPatch([(1,2),(0,1)],[4,4])
2524         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2525         self.assertEqual(20,amr.getNumberOfCellsRecursiveWithOverlap())
2526         self.assertEqual(19,amr.getNumberOfCellsRecursiveWithoutOverlap())
2527         self.assertEqual(1,amr.getNumberOfPatches())
2528         self.assertEqual(2,amr.getMaxNumberOfLevelsRelativeToThis())
2529         self.assertEqual(2,amr.getSpaceDimension())
2530         amr[0].addPatch([(2,3),(1,3)],[3,2])
2531         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2532         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2533         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2534         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2535         self.assertEqual(1,amr.getNumberOfPatches())
2536         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2537         self.assertEqual(2,amr.getSpaceDimension())
2538         amr[0].addPatch([(0,2),(3,4)],[3,2])
2539         self.assertEqual(16,amr[0].getMesh().getNumberOfCellsAtCurrentLevel())
2540         self.assertEqual(44,amr.getNumberOfCellsRecursiveWithOverlap())
2541         self.assertEqual(39,amr.getNumberOfCellsRecursiveWithoutOverlap())
2542         self.assertEqual(2,amr[0].getMesh().getNumberOfPatches())
2543         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2544         self.assertEqual(2,amr.getSpaceDimension())
2545         del amr[0][1]
2546         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2547         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2548         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2549         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2550         self.assertEqual(1,amr.getNumberOfPatches())
2551         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2552         self.assertEqual(2,amr.getSpaceDimension())
2553         pass
2554
2555     def testSwig2NonRegressionTestPAL1164(self):
2556         """ Test PAL1164 Protection of applyLin against error in compoId ( #CEA22584 ) """
2557         xarr=DataArrayDouble(3,1)
2558         xarr.iota(0.)
2559         cmesh=MEDCouplingCMesh()
2560         cmesh.setCoords(xarr,xarr,xarr)
2561         mesh=cmesh.buildUnstructured()
2562         f=mesh.fillFromAnalytic(ON_CELLS,1,"(x-5.)*(x-5.)+(y-5.)*(y-5.)+(z-5.)*(z-5.)")
2563         f.setName("MyField")
2564         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2565         self.assertRaises(InterpKernelException,f.applyLin,2.,0.,1)# compoId 1 whereas f has only one component !
2566         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2567         f.applyLin(2.,0.,0)# here it is OK !
2568         self.assertTrue(f.getArray().isEqual(DataArrayDouble([121.5,105.5,105.5,89.5,105.5,89.5,89.5,73.5]),1e-12))
2569         f.applyLin(2.,0.)
2570         self.assertTrue(f.getArray().isEqual(DataArrayDouble([243.,211.,211.,179.,211.,179.,179.,147.]),1e-12))
2571         pass
2572
2573     def testSwig2StructurizeMe1(self):
2574         arrx=DataArrayDouble(3) ; arrx.iota() ; arrx*=2.
2575         arry=DataArrayDouble(4) ; arry.iota() ; arry+=3.
2576         arrz=DataArrayDouble(5) ; arrz.iota() ; arrz*=0.5 ; arrz+=2.
2577         c=MEDCouplingCMesh() ; c.setCoords(arrx,arry,arrz)
2578         c.setName("mesh") ; c.setDescription("mesh descr") ; c.setTimeUnit("us") ; c.setTime(1.2,3,4)
2579         u=c.buildUnstructured()
2580         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])
2581         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])
2582         u.renumberCells(cp)
2583         u.renumberNodes(np,len(np))
2584         u=MEDCoupling1SGTUMesh(u)
2585         #
2586         e,d,f=u.structurizeMe()
2587         self.assertTrue(c.isEqual(e,1e-12))
2588         self.assertTrue(d.isEqual(cp))
2589         self.assertTrue(f.isEqual(np))
2590         pass
2591
2592     def testSwig2DenseMatrix1(self):
2593         m0=DenseMatrix(DataArrayDouble([2,3,4,5,1,6]),2,3)
2594         self.assertEqual(m0.getNumberOfRows(),2)
2595         self.assertEqual(m0.getNumberOfCols(),3)
2596         self.assertEqual(m0.getNbOfElems(),6)
2597         ref=m0.getData().getHiddenCppPointer()
2598         m00=m0.deepCpy()
2599         self.assertTrue(m0.isEqual(m00,1e-12))
2600         m00.getData().setIJ(0,0,2.1)
2601         self.assertTrue(not m0.isEqual(m00,1e-12))
2602         m00.getData().setIJ(0,0,2.)
2603         self.assertTrue(m0.isEqual(m00,1e-12))
2604         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2605         #
2606         m000=m0*DataArrayDouble([5,9,3])
2607         self.assertTrue(m000.getData().isEqual(DataArrayDouble([49.,52.]),1e-12))
2608         #
2609         m0.reShape(3,2)
2610         self.assertTrue(not m0.isEqual(m00,1e-12))
2611         self.assertEqual(m0.getNumberOfRows(),3)
2612         self.assertEqual(m0.getNumberOfCols(),2)
2613         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2614         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2615         m0.reShape(2,3)
2616         self.assertTrue(m0.isEqual(m00,1e-12))
2617         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2618         self.assertEqual(m0.getNumberOfRows(),2)
2619         self.assertEqual(m0.getNumberOfCols(),3)
2620         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2621         #m0np=m0.getData().toNumPyArray() ; m0np=matrix(m0np.reshape(m0.getNumberOfRows(),m0.getNumberOfCols()))
2622         m1=m0.deepCpy()
2623         self.assertEqual(m1.getNumberOfRows(),2)
2624         self.assertEqual(m1.getNumberOfCols(),3)
2625         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2626         m11=m0.deepCpy() ; m11+=m1
2627         self.assertEqual(m11.getNumberOfRows(),2)
2628         self.assertEqual(m11.getNumberOfCols(),3)
2629         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2630         m11=m11+m1
2631         self.assertEqual(m11.getNumberOfRows(),2)
2632         self.assertEqual(m11.getNumberOfCols(),3)
2633         self.assertTrue(m11.getData().isEqual(DataArrayDouble([6,9,12,15,3,18]),1e-12))
2634         m11=m11-m1
2635         self.assertEqual(m11.getNumberOfRows(),2)
2636         self.assertEqual(m11.getNumberOfCols(),3)
2637         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2638         m11-=m1
2639         self.assertEqual(m1.getNumberOfRows(),2)
2640         self.assertEqual(m1.getNumberOfCols(),3)
2641         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2642         m1.transpose()
2643         self.assertEqual(m1.getNumberOfRows(),3)
2644         self.assertEqual(m1.getNumberOfCols(),2)
2645         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,5,3,1,4,6]),1e-12))
2646         #m1np=m0np.transpose()
2647         m2=m0*m1
2648         self.assertEqual(m2.getNumberOfRows(),2)
2649         self.assertEqual(m2.getNumberOfCols(),2)
2650         self.assertTrue(m2.getData().isEqual(DataArrayDouble([29,37,37,62]),1e-12))
2651         pass
2652
2653     def testSwig2AMR2(self):
2654         """ 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."""
2655         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2656         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2657         MEDCouplingIMesh.CondenseFineToCoarse([5,7],fine,[(1,4),(2,4)],[4,4],coarse)
2658         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))
2659         # 3D
2660         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2661         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2662         MEDCouplingIMesh.CondenseFineToCoarse([5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4],coarse)
2663         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))
2664         # 1D
2665         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2666         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2667         MEDCouplingIMesh.CondenseFineToCoarse([5],fine,[(1,4)],[4],coarse)
2668         self.assertTrue(coarse.isEqual(DataArrayDouble([0,6,22,38,4]),1e-12))
2669         pass
2670
2671     def testSwig2AMR3(self):
2672         """ Test spread of coarse IMesh instance into a fine one, with a factor."""
2673         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2674         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2675         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7],fine,[(1,4),(2,4)],[4,4])
2676         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))
2677         # 3D
2678         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2679         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2680         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4])
2681         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))
2682         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.checkCoherency()
2683         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.checkCoherency()
2684         # 1D
2685         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2686         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2687         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5],fine,[(1,4)],[4])
2688         self.assertTrue(fine.isEqual(DataArrayDouble([1.,1.,1.,1.,2.,2.,2.,2.,3.,3.,3.,3.]),1e-12))
2689         pass
2690
2691     def testSwig2AMR4(self):
2692         """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."""
2693         im=MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04])
2694         b=im.getBarycenterAndOwner() ; b-=[1.,1.] ; b=b.magnitude()
2695         ids=b.getIdsInRange(0.4,0.7)
2696         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(im) ; f.setName("toto") ; arr=DataArrayDouble(im.getNumberOfCells()) ; arr[:]=0. ; arr[ids]=1. ; f.setArray(arr)
2697         # f.write("test.vti")
2698         amr=MEDCouplingCartesianAMRMesh(MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04]))
2699         arr2=DataArrayByte(im.getNumberOfCells()) ; arr2[:]=0 ; arr2[ids]=1
2700         bso=BoxSplittingOptions() ; bso.setEfficiencyGoal(0.5); bso.setEfficiencyThreshold(0.8) ; bso.setMaximumNbOfCellsInPatch(3000) ; bso.setMinimumPatchLength(6) ; bso.setMaximumPatchLength(11)
2701         amr.createPatchesFromCriterion(bso,arr2,[2,2])
2702         m=amr.getImageMesh() ; m=m.buildUnstructured() ; m.changeSpaceDimension(3,1.)
2703         self.assertEqual(12,amr.getNumberOfPatches())
2704         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)]]
2705         for i,bltr in enumerate(exp0):
2706             self.assertEqual(amr[i].getBLTRRange(),bltr)
2707             pass
2708         self.assertAlmostEqual(0.666666666667,amr[3].getMesh().getImageMesh().computeSquareness(),12)
2709         #
2710         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceToGlobalOfCompactFrmt([(8,32),(4,17)],[(0,24),(2,12)]),[(8,32),(6,16)])
2711         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceFromGlobalOfCompactFrmt([(8,32),(4,17)],[(8,32),(6,16)]),[(0,24),(2,12)])
2712         self.assertTrue(amr.getImageMesh().isEqual(im,1e-12))
2713         m=amr.getImageMesh().asSingleCell().build1SGTUnstructured()
2714         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3])))
2715         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([(0,0),(2,0),(0,2),(2,2)]),1e-12))
2716         pass
2717
2718     def testSwig2AMR5(self):
2719         """ Idem testAMR3, test spread of coarse IMesh instance into a fine one, with a factor, but here ghost is used !"""
2720         # 1D
2721         coarse=DataArrayDouble(5+2) ; coarse.iota(-1) #X=5 with ghostLev=1
2722         fine=DataArrayDouble(3*4+2) ; fine.iota(1000) #X=3 refined by 4 with ghostLev=1
2723         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5],fine,[(1,4)],[4],1)
2724         self.assertTrue(fine.isEqual(DataArrayDouble([0,1,1,1,1,2,2,2,2,3,3,3,3,4]),1e-12))
2725         coarse.iota(-1000)
2726         MEDCouplingIMesh.CondenseFineToCoarseGhost([5],fine,[(1,4)],[4],coarse,1)
2727         self.assertTrue(coarse.isEqual(DataArrayDouble([-1000.,-999.,4.,8.,12.,-995.,-994.]),1e-12))
2728         # 2D
2729         coarse=DataArrayDouble((5+2*1)*(7+2*1)) ; coarse.iota(0) #X=5,Y=7 with ghostLev=1
2730         fine=DataArrayDouble((3*4+2*1)*(2*4+2*1)) ; fine.iota(1000) #X=3,Y=2 refined by 4
2731         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5,7],fine,[(1,4),(2,4)],[4,4],1)
2732         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))
2733         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkCoherency()
2734         coarse.iota(-1000)
2735         fine2=DataArrayDouble.Meld(fine,3*fine) ; coarse2=DataArrayDouble.Meld(coarse,3*coarse)
2736         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine,[(1,4),(2,4)],[4,4],coarse,1)
2737         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine2,[(1,4),(2,4)],[4,4],coarse2,1)
2738         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkCoherency()
2739         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.])
2740         self.assertTrue(coarse.isEqual(coarseExp,1e-12))
2741         self.assertTrue(coarse2[:,0].isEqual(coarseExp,1e-12))
2742         self.assertTrue(coarse2[:,1].isEqual(3*coarseExp,1e-12))
2743         pass
2744
2745     def testSwig2AMR6(self):
2746         """ 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."""
2747         amr=MEDCouplingCartesianAMRMesh("",2,[6,6],[0,0],[1,1])
2748         da=DataArrayDouble((5+2)*(5+2)) ; da.iota() ; da+=0.9
2749         amr.addPatch([(1,4),(2,4)],[4,4])
2750         amr.addPatch([(0,1),(0,1)],[4,4])
2751         amr.addPatch([(4,5),(3,4)],[4,4])
2752         amr.addPatch([(4,5),(1,3)],[4,4])
2753         amr.addPatch([(0,1),(1,4)],[4,4])
2754         da0=DataArrayDouble((3*4+2)*(2*4+2)) ; da0.iota() ; da0[:]+=0.2
2755         da1=DataArrayDouble((1*4+2)*(1*4+2)) ; da1.iota() ; da1[:]+=0.4
2756         da2=DataArrayDouble((1*4+2)*(1*4+2)) ; da2.iota() ; da2[:]+=0.6
2757         da3=DataArrayDouble((1*4+2)*(2*4+2)) ; da3.iota() ; da3[:]+=0.7
2758         da4=DataArrayDouble((1*4+2)*(3*4+2)) ; da4.iota() ; da4[:]+=0.8
2759         self.assertEqual(5,amr.getNumberOfPatches())
2760         l=[da0,da1,da2,da3,da4]
2761         lCpy=[elt.deepCpy() for elt in l]
2762         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2763         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2764         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2765         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2766         #
2767         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2768         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkCoherency()
2769         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkCoherency()
2770         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(amr[2].getMesh().getImageMesh().buildWithGhost(1)) ; f2.setArray(da2) ; f2.setName("p2") ; f2.checkCoherency()
2771         f3=MEDCouplingFieldDouble(ON_CELLS) ; f3.setMesh(amr[3].getMesh().getImageMesh().buildWithGhost(1)) ; f3.setArray(da3) ; f3.setName("p3") ; f3.checkCoherency()
2772         f4=MEDCouplingFieldDouble(ON_CELLS) ; f4.setMesh(amr[4].getMesh().getImageMesh().buildWithGhost(1)) ; f4.setArray(da4) ; f4.setName("p4") ; f4.checkCoherency()
2773         #
2774         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])
2775         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])
2776         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2777         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2778         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2779         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2780         #
2781         g0=amr.retrieveGridsAt(0)
2782         self.assertEqual(1,len(g0))
2783         self.assertTrue(isinstance(g0[0],MEDCouplingCartesianAMRPatchGF))
2784         g1=amr.retrieveGridsAt(1)
2785         self.assertEqual(5,len(g1))
2786         for i in xrange(5):
2787             self.assertTrue(isinstance(g1[i],MEDCouplingCartesianAMRPatch))
2788             pass
2789         pass
2790     
2791     def testSwig2AMR7(self):
2792         """Idem testSwig2AMR6 except that we are in 1D"""
2793         amr=MEDCouplingCartesianAMRMesh("",1,[6],[0],[1])
2794         da=DataArrayDouble(5+2) ; da.iota() ; da+=0.9
2795         amr.addPatch([(1,4)],[4])
2796         amr.addPatch([(0,1)],[4])
2797         da0=DataArrayDouble(3*4+2) ; da0.iota() ; da0[:]+=0.2
2798         da1=DataArrayDouble(1*4+2) ; da1.iota() ; da1[:]+=0.4
2799         self.assertEqual(2,amr.getNumberOfPatches())
2800         l=[da0,da1]
2801         lCpy=[elt.deepCpy() for elt in l]
2802         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2803         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2804         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2805         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2806         #
2807         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2808         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkCoherency()
2809         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkCoherency()
2810         #
2811         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])
2812         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])
2813         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2814         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2815         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2816         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2817         pass
2818
2819     def testSwig2AMR8(self):
2820         """This test checks 'basic' operations for ghost update."""
2821         ghostSz=1
2822         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2823         amr.addPatch([(1,4),(2,4)],[4,4])
2824         amr.addPatch([(4,5),(3,5)],[4,4])
2825         amr.addPatch([(0,1),(4,6)],[4,4])
2826         amr[0].addPatch([(10,12),(5,8)],[2,2])
2827         amr[1].addPatch([(0,1),(0,5)],[2,2])
2828         amr[2].addPatch([(3,4),(0,3)],[2,2])
2829         m=amr.buildMeshFromPatchEnvelop()
2830         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,9,8,10,11])))
2831         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))
2832         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2833         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2834         att.alloc()
2835         d=att.getFieldOn(amr,"Field")
2836         self.assertEqual(56,d.getNumberOfTuples())
2837         self.assertEqual(1,d.getNumberOfComponents())
2838         d.iota() ; d+=0.1
2839         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2840         self.assertEqual(140,d0.getNumberOfTuples())
2841         self.assertEqual(1,d0.getNumberOfComponents())
2842         d0.iota() ; d0+=0.2
2843         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2844         self.assertEqual(60,d1.getNumberOfTuples())
2845         self.assertEqual(1,d1.getNumberOfComponents())
2846         d1.iota() ; d1+=0.3
2847         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2848         self.assertEqual(60,d2.getNumberOfTuples())
2849         self.assertEqual(1,d2.getNumberOfComponents())
2850         d2.iota() ; d2+=0.4
2851         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2852         self.assertEqual(48,d00.getNumberOfTuples())
2853         self.assertEqual(1,d00.getNumberOfComponents())
2854         d00.iota() ; d00+=0.5
2855         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2856         self.assertEqual(48,d10.getNumberOfTuples())
2857         self.assertEqual(1,d10.getNumberOfComponents())
2858         d10.iota() ; d10+=0.6
2859         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2860         self.assertEqual(32,d20.getNumberOfTuples())
2861         self.assertEqual(1,d20.getNumberOfComponents())
2862         d20.iota() ; d20+=0.7
2863         f=att.buildCellFieldOnRecurseWithoutOverlapWithoutGhost(amr,"Field")
2864         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])
2865         arrExp.setName("Field") ; arrExp.setInfoOnComponents(["X"])
2866         self.assertTrue(f.getArray().isEqual(arrExp,1e-12))
2867         m=MEDCoupling1SGTUMesh(f.getMesh())
2868         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])))
2869         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))
2870         # the test is here ! To be called after iteration with no remesh
2871         att.synchronizeAllGhostZones()
2872         f=att.buildCellFieldOnWithGhost(amr,"Field") ; f.checkCoherency()
2873         ftmp=att.buildCellFieldOnWithoutGhost(amr,"Field") ; ftmp.checkCoherency() ; 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))
2874         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2875         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2876         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2877         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2878         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2879         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2880         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))
2881         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))
2882         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))
2883         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))
2884         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))
2885         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))
2886         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))
2887         pass
2888
2889     def testSwig2AMR9(self):
2890         """ Equivalent to testSwig2AMR8 except that here the ghost level is 2 !"""
2891         ghostSz=2
2892         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2893         amr.addPatch([(1,4),(2,4)],[4,4])
2894         amr.addPatch([(4,5),(3,5)],[4,4])
2895         amr.addPatch([(0,1),(4,6)],[4,4])
2896         amr[0].addPatch([(10,12),(5,8)],[2,2])
2897         amr[1].addPatch([(0,1),(0,5)],[2,2])
2898         amr[2].addPatch([(3,4),(0,3)],[2,2])
2899         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2900         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2901         att.alloc()
2902         d=att.getFieldOn(amr,"Field")
2903         self.assertEqual(90,d.getNumberOfTuples())
2904         self.assertEqual(1,d.getNumberOfComponents())
2905         d.iota() ; d+=0.1
2906         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2907         self.assertEqual(192,d0.getNumberOfTuples())
2908         self.assertEqual(1,d0.getNumberOfComponents())
2909         d0.iota() ; d0+=0.2
2910         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2911         self.assertEqual(96,d1.getNumberOfTuples())
2912         self.assertEqual(1,d1.getNumberOfComponents())
2913         d1.iota() ; d1+=0.3
2914         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2915         self.assertEqual(96,d2.getNumberOfTuples())
2916         self.assertEqual(1,d2.getNumberOfComponents())
2917         d2.iota() ; d2+=0.4
2918         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2919         self.assertEqual(80,d00.getNumberOfTuples())
2920         self.assertEqual(1,d00.getNumberOfComponents())
2921         d00.iota() ; d00+=0.5
2922         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2923         self.assertEqual(84,d10.getNumberOfTuples())
2924         self.assertEqual(1,d10.getNumberOfComponents())
2925         d10.iota() ; d10+=0.6
2926         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2927         self.assertEqual(60,d20.getNumberOfTuples())
2928         self.assertEqual(1,d20.getNumberOfComponents())
2929         d20.iota() ; d20+=0.7
2930         # the test is here ! To be called after iteration with no remesh
2931         att.synchronizeAllGhostZones()
2932         f=att.buildCellFieldOnWithGhost(amr,"Field")
2933         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2934         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2935         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2936         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2937         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2938         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2939         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))
2940         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))
2941         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))
2942         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))
2943         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))
2944         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))
2945         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],1).isEqual(DataArrayInt([0,4])))
2946         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],2).isEqual(DataArrayInt([0,1,5,6])))
2947         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],1).isEqual(DataArrayInt([0,6,49,55])))
2948         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],2).isEqual(DataArrayInt([0,8,10,16,73,79,81,89])))
2949         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6,3],1).isEqual(DataArrayInt([0,6,49,55,224,230,273,279])))
2950         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])))
2951         pass
2952
2953     def testSwig2AMR10(self):
2954         """ 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."""
2955         szGhost=2
2956         amr=MEDCouplingCartesianAMRMesh("",2,[11,11],[0,0],[0.1,0.1])
2957         amr.addPatch([(3,8),(0,3)],[2,2])
2958         amr[0].addPatch([(0,10),(3,6)],[3,3])
2959         amr[0].addPatch([(2,6),(0,3)],[3,3])
2960         amr[0].addPatch([(6,10),(2,3)],[3,3])
2961         amr.addPatch([(3,8),(3,6)],[2,2])
2962         amr[1].addPatch([(0,4),(0,6)],[3,3])
2963         amr[1].addPatch([(7,10),(0,4)],[3,3])
2964         amr[1].addPatch([(4,7),(0,3)],[3,3])
2965         amr[1].addPatch([(4,7),(3,6)],[3,3])
2966         amr.addPatch([(0,3),(6,10)],[2,2])
2967         self.assertEqual(([(30,39),(27,36)],[6,6]),amr[1][3].getMesh().positionRelativeToGodFather())
2968         self.assertEqual(([(6,16),(6,12)],[2,2]),amr[1].getMesh().positionRelativeToGodFather())
2969         self.assertTrue(not MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(6,16),(6,12)]))
2970         self.assertTrue(MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(28,32),(35,37)]))
2971         da=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.])
2972         MEDCouplingStructuredMesh.AssignPartOfFieldOfDoubleUsing([3,4],da,[(1,3),(2,3)],DataArrayDouble([7.7,8.8]))
2973         self.assertTrue(da.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.7,8.8,9.,10.,11.]),1e-12))
2974         att=MEDCouplingAMRAttribute(amr,[("YY",1)],szGhost)
2975         att.spillNatures([ConservativeVolumic])
2976         att.alloc()
2977         yy=att.getFieldOn(amr,"YY") ; yy.iota(0.01)
2978         yy=att.getFieldOn(amr[0].getMesh(),"YY") ; yy.iota(0.02)
2979         yy=att.getFieldOn(amr[1].getMesh(),"YY") ; yy.iota(0.03)
2980         yy=att.getFieldOn(amr[0][0].getMesh(),"YY") ; yy.iota(0.04)
2981         yy=att.getFieldOn(amr[0][1].getMesh(),"YY") ; yy.iota(0.05)
2982         yy=att.getFieldOn(amr[0][2].getMesh(),"YY") ; yy.iota(0.06)
2983         yy=att.getFieldOn(amr[1][0].getMesh(),"YY") ; yy.iota(0.07)
2984         yy=att.getFieldOn(amr[1][1].getMesh(),"YY") ; yy.iota(0.08)
2985         yy=att.getFieldOn(amr[1][2].getMesh(),"YY") ; yy.iota(0.09)
2986         yy=att.getFieldOn(amr[1][3].getMesh(),"YY") ; yy.iota(0.10)
2987         yy=att.getFieldOn(amr[2].getMesh(),"YY") ; yy.iota(0.11)
2988         att2=att.deepCpy() ; att3=att2.deepCpy() ; att4=att3.deepCpy() ; att5=att4.deepCpy() ; att6=att5.deepCpy()
2989         ###
2990         att.synchronizeFineToCoarseBetween(2,1)
2991         ###
2992         for pos in [(),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(1,3)]:
2993             self.assertTrue(att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2994             pass
2995         for pos in [(0,),(1,)]:
2996             self.assertTrue(not att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2997             pass
2998         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))
2999         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))
3000         del att
3001         ####
3002         att2.synchronizeAllGhostZonesOfDirectChidrenOf(att2.getMyGodFather())
3003         ### 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.
3004         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])
3005         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((2,)),"YY").isEqualWithoutConsideringStr(exp2,1e-12))
3006         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])
3007         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((1,)),"YY").isEqualWithoutConsideringStr(exp3,1e-12))
3008         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])
3009         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((0,)),"YY").isEqualWithoutConsideringStr(exp4,1e-12))
3010         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)]:
3011             vals=att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY")
3012             l=vals.getNumberOfTuples()
3013             exps=DataArrayDouble(l) ; exps.iota(iot)
3014             self.assertTrue(vals.isEqualWithoutConsideringStr(exps,1e-12))
3015             pass
3016         del att2
3017         ###
3018         att3.synchronizeCoarseToFineBetween(1,2)
3019         ###
3020         for pos in [(),(0,),(1,),(2,)]:
3021             self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
3022             pass
3023         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])
3024         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp5,1e-12))
3025         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])
3026         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp6,1e-12))
3027         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])
3028         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp7,1e-12))
3029         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])
3030         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp8,1e-12))
3031         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])
3032         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp9,1e-12))
3033         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])
3034         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp10,1e-12))
3035         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])
3036         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp11,1e-12))
3037         del att3
3038         ### 
3039         att4.synchronizeAllGhostZonesAtASpecifiedLevel(2)
3040         for pos in [(),(0,),(1,),(2,)]:
3041             self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
3042             pass
3043         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])
3044         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp12,1e-12))
3045         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]])
3046         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp13,1e-12))
3047         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])
3048         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp14,1e-12))
3049         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])
3050         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp15,1e-12))
3051         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])
3052         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp16,1e-12))
3053         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])
3054         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp17,1e-12))
3055         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])
3056         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp18,1e-12))
3057         del att4
3058         ###
3059         att5.synchronizeAllGhostZonesAtASpecifiedLevelUsingOnlyFather(2)
3060         for pos in [(),(0,),(1,),(2,)]:
3061             self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att6.getFieldOn(att6.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
3062             pass
3063         att5.buildCellFieldOnWithGhost(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY")
3064         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])
3065         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp19,1e-12))
3066         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])
3067         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp20,1e-12))
3068         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])
3069         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp21,1e-12))
3070         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])
3071         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp22,1e-12))
3072         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])
3073         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp23,1e-12))
3074         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])
3075         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp24,1e-12))
3076         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])
3077         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp25,1e-12))
3078         pass
3079
3080     def testSwig2AMR11(self):
3081         """ Some tests in 3D with CondenseFineToCoarseGhost and SpreadCoarseToFineGhost"""
3082         coarse=DataArrayDouble((6+4)*(7+4)*(5+4)) ; coarse.iota()
3083         fine=DataArrayDouble((4*2+4)*(2*3+4)*(3*4+4))
3084         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3085         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.])
3086         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.])
3087         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.])
3088         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.])
3089         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.])
3090         exp=DataArrayDouble.Aggregate([exp0,exp0,exp1,exp1,exp1,exp1,exp2,exp2,exp2,exp2,exp3,exp3,exp3,exp3,exp4,exp4])
3091         self.assertTrue(fine.isEqual(exp,1e-12))
3092         #
3093         fine.iota()
3094         coarse.iota(0.5)
3095         MEDCouplingIMesh.CondenseFineToCoarseGhost([6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],coarse,2)
3096         amr=MEDCouplingCartesianAMRMesh("mesh",3,[7,8,6],[0.,0.,0.],[1.,1.,1.])
3097         amr.addPatch([(1,5),(2,4),(1,4)],[2,3,4])
3098         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3099         att.alloc()
3100         exp1=DataArrayDouble(990) ; exp1.iota(0.5)
3101         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])
3102         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.])
3103         exp1[ids]=vals
3104         self.assertTrue(coarse.isEqual(exp1,1e-12))
3105         #
3106         MEDCouplingStructuredMesh.MultiplyPartOf([10,11,9],[(3,7),(4,6),(3,6)],1/24.,coarse)
3107         exp2=DataArrayDouble(990) ; exp2.iota(0.5)
3108         exp2[ids]=vals/24.
3109         self.assertTrue(coarse.isEqual(exp2,1e-12))
3110         #
3111         coarse.iota(0.5) ; fine.iota(0.1)
3112         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3113         #
3114         coarse.iota(0.5) ; fine.iota(0.1)
3115         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3116         exp00=DataArrayDouble.Aggregate([exp0,exp0]) ; exp00+=0.5
3117         self.assertTrue(fine[:240].isEqual(exp00,1e-12))
3118         exp44=DataArrayDouble.Aggregate([exp4,exp4]) ; exp44+=0.5
3119         self.assertTrue(fine[-240:].isEqual(exp44,1e-12))
3120         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))
3121         pass
3122
3123     def testSwig2AMR12(self):
3124         """ This test check the MEDCouplingAMRAttribute.projectTo method."""
3125         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3126         amr0.addPatch([(3,8),(0,3)],[2,2])
3127         amr0.addPatch([(3,8),(3,6)],[2,2])
3128         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3129         att0.alloc()
3130         att0.getFieldOn(amr0,"YY").iota(0.01)
3131         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3132         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3133         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3134         amr1.addPatch([(2,5),(1,4)],[2,2])
3135         att1=att0.projectTo(amr1)
3136         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqualWithoutConsideringStr(att0.getFieldOn(amr0,"YY"),1e-12))
3137         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))
3138         #
3139         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3140         amr0.addPatch([(2,5),(2,7)],[2,2])
3141         amr0.addPatch([(5,8),(2,7)],[2,2])
3142         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3143         att0.alloc()
3144         att0.getFieldOn(amr0,"YY").iota(0.01)
3145         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3146         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3147         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3148         amr1.addPatch([(3,6),(2,7)],[2,2])
3149         amr1.addPatch([(6,9),(2,7)],[2,2])
3150         att1=att0.projectTo(amr1)
3151         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqual(att0.getFieldOn(amr0,"YY"),1e-12))
3152         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))
3153         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))
3154         pass
3155
3156     def testSwig2AMR13(self):
3157         """ non regression test"""
3158         for fact,len1,len2 in [([2,2],64,48),([3,3],100,70),([4,4],144,96)]:
3159             amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3160             amr.addPatch([(1,3),(0,2)],fact)
3161             amr.addPatch([(1,3),(3,4)],fact)
3162             att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3163             att.alloc()
3164             att.getFieldOn(amr,"YY").iota(0.1)
3165             att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3166             att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3167             att.synchronizeAllGhostZonesOfDirectChidrenOf(amr)
3168             exp=DataArrayDouble(64) ; exp.iota(0.1)
3169             self.assertTrue(att.getFieldOn(amr,"YY").isEqualWithoutConsideringStr(exp,1e-12))
3170             exp0=DataArrayDouble(len1) ; exp0.iota(0.2)
3171             self.assertTrue(att.getFieldOn(amr[0].getMesh(),"YY").isEqualWithoutConsideringStr(exp0,1e-12))
3172             exp1=DataArrayDouble(len2) ; exp1.iota(0.3)
3173             self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(exp1,1e-12))
3174             pass
3175         pass
3176     
3177     def testSwig2AMR14(self):
3178         """ non regression linked to VTHB write."""
3179         fact=[2,2] ; fact2=[3,3]
3180         amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3181         amr.addPatch([(1,3),(0,2)],fact)
3182         amr.addPatch([(1,3),(3,4)],fact)
3183         amr[0].addPatch([(1,3),(1,3)],fact2)
3184         amr[1].addPatch([(1,3),(1,2)],fact2)
3185         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3186         att.alloc()
3187         att.getFieldOn(amr,"YY").iota(0.1)
3188         att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3189         att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3190         att.getFieldOn(amr[0][0].getMesh(),"YY").iota(0.4)
3191         att.getFieldOn(amr[1][0].getMesh(),"YY").iota(0.5)
3192         self.assertEqual(amr[0].getBLTRRangeRelativeToGF(),[(2,6),(0,4)])
3193         self.assertEqual(amr[1].getBLTRRangeRelativeToGF(),[(2,6),(6,8)])
3194         self.assertEqual(amr[0][0].getBLTRRangeRelativeToGF(),[(9,15),(3,9)])
3195         self.assertEqual(amr[1][0].getBLTRRangeRelativeToGF(),[(9,15),(21,24)])
3196         pass
3197
3198     def testSwig2Intersect2DMeshWith1DLine1(self):
3199         """A basic test with no colinearity between m1 and m2."""
3200         i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3201         m1=i.buildUnstructured()
3202         m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([0.75,3.5,3.75,1.75],2,2)) ; m2.allocateCells() ; m2.insertNextCell(NORM_SEG2,[0,1])
3203         a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12)
3204         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,11,10,15,16,4,18,17,22,23,4,19,18,23,24,5,16,15,20,21,31,5,21,22,17,28,31,5,16,31,28,5,17,29,28,5,12,11,16,28,29,5,17,18,30,29,5,13,12,29,30,5,18,19,14,27,30,5,13,30,27,5,9,8,13,27,14])))
3205         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,25,31,1,31,28,1,28,29,1,29,30,1,30,27,1,27,26])))
3206         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,56,62,66,70,76,81,86,92,96,102])))
3207         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18])))
3208         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3209         self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12))
3210         self.assertTrue(a.getCoords()[25:25+2].isEqualWithoutConsideringStr(m2.getCoords(),1e-12))
3211         self.assertTrue(a.getCoords()[27:].isEqualWithoutConsideringStr(DataArrayDouble([(3.3214285714285716,2.),(1.6071428571428572,3.),(2.,2.7708333333333335),(3.,2.1875),(1.,3.354166666666667)]),1e-12))
3212         self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,4,5,6,8,14,15,12,13,13,9,9,10,10,11,11,7])))
3213         self.assertTrue(d.isEqual(DataArrayInt([(10,10),(11,12),(13,14),(15,16),(17,18),(19,19)])))
3214         pass
3215
3216     def testSwig2Intersect2DMeshWith1DLine2(self):
3217         """A basic test with colinearity between m1 and m2 and the last cell of m2 outside m1."""
3218         i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3219         m1=i.buildUnstructured()
3220         m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([0.5,2.,2.25,2.,2.5,2.,2.75,2.,3.,2.,4.,2.,5.,2.],7,2)) ; m2.allocateCells()
3221         for i in xrange(6):
3222             m2.insertNextCell(NORM_SEG2,[i,i+1])
3223             pass
3224         a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12)
3225         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24,5,6,5,10,25,11,5,7,6,11,12,5,8,7,12,26,27,28,13,5,9,8,13,14,5,11,25,10,15,16,5,12,11,16,17,5,13,28,27,26,12,17,18,5,14,13,18,19])))
3226         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,46,51,59,64,70,75,83,88])))
3227         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,25,11,1,11,12,1,12,26,1,26,27,1,27,28,1,28,13,1,13,14,1,14,31])))
3228         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24])))
3229         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3230         self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12))
3231         self.assertTrue(a.getCoords()[25:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12))
3232         self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,12,13,14,15,4,5,6,7,8,9,10,11])))
3233         self.assertTrue(d.isEqual(DataArrayInt([(12,8),(13,9),(14,10),(14,10),(14,10),(14,10),(15,11),(-1,-1)])))
3234         pass
3235
3236     def testSwig2Intersect2DMeshWith1DLine3(self):
3237         """m2 fully included in cell #12. of m1"""
3238         i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3239         m1=i.buildUnstructured()
3240         m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([(0.75,3.25),(0.5,3.5),(0.25,3.25)])) ; m2.allocateCells()
3241         for i in xrange(2):
3242             m2.insertNextCell(NORM_SEG2,[i,i+1])
3243             pass
3244         a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12)
3245         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,13,12,17,18,4,14,13,18,19,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24,5,16,15,20,21])))
3246         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80])))
3247         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,25,26,1,26,27])))
3248         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
3249         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3250         self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12))
3251         self.assertTrue(a.getCoords()[25:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12))
3252         self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,12])))
3253         self.assertTrue(d.isEqual(DataArrayInt([(15,15),(15,15)])))
3254         pass
3255
3256     def testSwig2Intersect2DMeshWith1DLine4(self):
3257         """A special case where an edge is simultaneously a cut and colinear. This tests also checks negative values in descending edges of m1."""
3258         i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3259         m1=i.buildUnstructured()
3260         part=DataArrayInt([0,1,2,3,4,7,8,11,12,13,14,15])
3261         m1_1=m1[part]
3262         m1_2=m1[part.buildComplement(m1.getNumberOfCells())]
3263         m1=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1_1,m1_2.buildSpreadZonesWithPoly())
3264         m1.zipCoords()
3265         m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([(3.5,2.),(0.5,2.)])) ; m2.allocateCells()
3266         m2.insertNextCell(NORM_SEG2,[0,1])
3267         a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12)
3268         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,15,14,19,20,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,5,6,5,10,25,11,5,9,8,12,24,13,5,11,25,10,14,15,5,13,24,12,17,18,5,8,7,6,11,12,5,15,16,17,12,11])))
3269         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,46,52,58,64,70,76])))
3270         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,24,12,1,12,11,1,11,25])))
3271         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9])))
3272         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3273         self.assertTrue(a.getCoords()[:24].isEqual(m1.getCoords(),1e-12))
3274         self.assertTrue(a.getCoords()[24:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12))
3275         self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,8,9,10,11,4,5,6,7,12,12])))
3276         self.assertTrue(d.isEqual(DataArrayInt([(9,11),(12,13),(8,10)])))
3277         pass
3278
3279     def testSwig2Intersect2DMeshWith1DLine5(self):
3280         """A test focusing on a special case for cut."""
3281         i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3282         m1=i.buildUnstructured()
3283         m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([(1.,0.),(3.,2.),(1.,4.)])) ; m2.allocateCells()
3284         for i in xrange(2):
3285             m2.insertNextCell(NORM_SEG2,[i,i+1])
3286             pass
3287         a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12)
3288         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,14,13,18,19,4,16,15,20,21,4,18,17,22,23,4,19,18,23,24,5,6,7,1,5,2,1,7,5,12,13,7,5,8,7,13,5,12,17,13,5,18,13,17,5,16,21,17,5,22,17,21])))
3289         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,64,68,72,76,80,84,88,92])))
3290         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,1,7,1,7,13,1,13,17,1,17,21])))
3291         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12])))
3292         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3293         self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12))
3294         self.assertTrue(a.getCoords()[25:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12))
3295         self.assertTrue(c.isEqual(DataArrayInt([0,2,3,4,5,7,8,9,11,12,14,15,1,1,6,6,10,10,13,13])))
3296         self.assertTrue(d.isEqual(DataArrayInt([(12,13),(14,15),(16,17),(18,19)])))
3297         pass
3298
3299     def testIntersect2DMeshWith1DLine6(self):
3300         """ Basic test for Intersect2DMeshWith1DLine: a vertical line intersecting a square. """
3301         m1c = MEDCouplingCMesh()
3302         coordX = DataArrayDouble([-1., 1., 2])
3303         m1c.setCoordsAt(0,coordX)
3304         coordY = DataArrayDouble([0., 2.])
3305         m1c.setCoordsAt(1,coordY);
3306         m1 = m1c.buildUnstructured()
3307
3308         # A simple line:
3309         m2 = MEDCouplingUMesh("bla", 1)
3310         coord2 = DataArrayDouble([0.,-1.0,  0.,1.,  0.,3.,  0.5,2.2], 4, 2)
3311         conn2 = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,2,3])
3312         connI2 = DataArrayInt([0,3,7])
3313         m2.setCoords(coord2)
3314         m2.setConnectivity(conn2, connI2)
3315
3316         # End of construction of input meshes m1bis and m2 -> start of specific part of the test
3317         a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10)        
3318         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,2,1,4,5,32,0,3,11,7,10,14,15,16,17,18,32,4,1,10,7,11,19,20,21,22,23])))
3319         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,16,27])))
3320         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,6,10,1,10,7,2,7,11,12,2,11,8,13])))
3321         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,10,14])))
3322         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3323         self.assertTrue(a.getCoords()[:6].isEqual(m1.getCoords(),1e-12))
3324         self.assertTrue(a.getCoords()[6:10].isEqual(m2.getCoords(),1e-12))
3325         self.assertTrue(a.getCoords()[10:].isEqual(DataArrayDouble([(0.,0.),(0.5164175471673584,2.),(0.3796918047064557,1.43726403104512),(0.3796918047064557,2.56273596895488),(-1.,1.),(-0.24179122641632078,2.),(0.3796918047064558,1.4372640310451201),(0.,0.5),(-0.5,0.),(1.,1.),(0.5,0.),(0.,0.5),(0.3796918047064558,1.4372640310451201),(0.7582087735836792,2.)]),1e-12))
3326         self.assertTrue(c.isEqual(DataArrayInt([1,0,0])))
3327         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(1,2),(-1,-1)])))
3328         pass
3329
3330     def testSwig2Intersect2DMeshWith1DLine7(self):
3331         """ Star pattern (a triangle intersecting another one upside down) """
3332         coords1 = DataArrayDouble([-2.,1.,   2.,1.,  0.,-2.], 3,2)
3333         coords2 = DataArrayDouble([0.,2.,   2.,-1.,  -2.,-1.,  0.,3.], 4,2)
3334         m1 = MEDCouplingUMesh("triangle", 2)
3335         m2 = MEDCouplingUMesh("tri_line", 1)
3336         m1.setCoords(coords1)
3337         m2.setCoords(coords2)
3338         m1.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2]), DataArrayInt([0,4]))
3339         m2.setConnectivity(DataArrayInt([NORM_SEG2,0,1,NORM_SEG2,1,2,NORM_SEG2,2,3]), DataArrayInt([0,3,6,9]))
3340     # End of construction of input meshes m1bis and m2 -> start of specific part of the test
3341         a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10)
3342         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([5,1,9,7,5,2,11,10,5,0,8,12,5,7,9,10,11,12,8])))
3343         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,19])))
3344         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,3,7,1,7,9,1,9,4,1,4,10,1,10,11,1,11,5,1,5,12,1,12,8,1,8,6])))
3345         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24,27])))
3346         self.assertTrue(a.getCoords()[:3].isEqual(m1.getCoords(),1e-12))
3347         self.assertTrue(a.getCoords()[3:7].isEqual(m2.getCoords(),1e-12))
3348         self.assertTrue(a.getCoords()[7:].isEqual(DataArrayDouble([(0.6666666666666666,1.),(-1.,1.),(1.3333333333333333,1.1102230246251565e-16),(0.6666666666666665,-0.9999999999999996),(-0.6666666666666667,-1.),(-1.4285714285714284,0.14285714285714302)]),1e-12))
3349         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3350         self.assertTrue(c.isEqual(DataArrayInt([0,0,0,0])))
3351         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(0,3),(-1,-1),(-1,-1),(1,3),(-1,-1),(-1,-1),(2,3),(-1,-1)])))
3352         pass
3353     
3354     def testSwig2Intersect2DMeshWith1DLine8(self):
3355         """ Line pieces ending (or fully located) in the middle of a cell """
3356         m1c = MEDCouplingCMesh()
3357         m1c.setCoordsAt(0,DataArrayDouble([-1., 1.]))
3358         m1c.setCoordsAt(1,DataArrayDouble([-1., 1.]));
3359         m1 = m1c.buildUnstructured()
3360         coords2 = DataArrayDouble([0.,0.,  0.,1.5, -1.5,0.,  0.5,0.0,  0.0,-0.5, 1.1,-0.6], 6,2)
3361         m2 = MEDCouplingUMesh("piecewise_line", 1)
3362         m2.setCoords(coords2)
3363         c = DataArrayInt([NORM_SEG2,2,1, NORM_SEG2,1,4, NORM_SEG2,4,3,  NORM_SEG2,3,5])
3364         cI = DataArrayInt([0,3,6,9,12])
3365         m2.setConnectivity(c, cI)
3366         a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10)
3367         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([5,2,11,10,5,3,13,7,8,12,5,1,0,10,11,12,8,7,13])))
3368         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,10,19])))
3369         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,6,10,1,10,11,1,11,5,1,5,12,1,12,8,1,8,7,1,7,13,1,13,9])))
3370         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24])))
3371         self.assertTrue(a.getCoords()[:4].isEqual(m1.getCoords(),1e-12))
3372         self.assertTrue(a.getCoords()[4:10].isEqual(m2.getCoords(),1e-12))
3373         self.assertTrue(a.getCoords()[10:].isEqual(DataArrayDouble([(-1.,0.5),(-0.5,1.),(0.,1.),(1.,-0.5)]),1e-12))
3374         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3375         self.assertTrue(c.isEqual(DataArrayInt([0,0,0])))
3376         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(0,2),(-1,-1),(-1,-1),(1,2),(1,2),(1,2),(-1,-1)])))
3377         pass
3378
3379     def testSwig2Intersect2DMeshWith1DLine9(self):
3380         """ Intersection with a line whose connectivity is not consecutive """
3381         m1c = MEDCouplingCMesh()
3382         coordX = DataArrayDouble([-1., 1., 2])
3383         m1c.setCoordsAt(0,coordX)
3384         coordY = DataArrayDouble([0., 2.])
3385         m1c.setCoordsAt(1,coordY);
3386         m1 = m1c.buildUnstructured()
3387         # A simple line:
3388         m2 = MEDCouplingUMesh("bla", 1)
3389         coord2 = DataArrayDouble([0.,1.5,  0.5,1.,  0.0,0.5,  0.0,3.0,  0.0,-1.0], 5, 2)
3390         conn2 = DataArrayInt([NORM_SEG2,3,0,NORM_SEG3,0,2,1,NORM_SEG2,2,4])
3391         connI2 = DataArrayInt([0,3,7,10])
3392         m2.setCoords(coord2)
3393         m2.setConnectivity(conn2, connI2)
3394         # End of construction of input meshes m1bis and m2 -> start of specific part of the test
3395         a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10)
3396         self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,2,1,4,5,32,4,1,11,8,6,12,14,15,16,17,18,19,32,0,3,12,6,8,11,20,21,22,23,24,25])))
3397         self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,18,31])))
3398         self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,9,12,1,12,6,2,6,8,13,1,8,11,1,11,10])))
3399         self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,10,13,16])))
3400         self.assertTrue(a.getCoords()[:6].isEqual(m1.getCoords(),1e-12))
3401         self.assertTrue(a.getCoords()[6:11].isEqual(m2.getCoords(),1e-12))
3402         self.assertTrue(a.getCoords()[11:].isEqual(DataArrayDouble([(0.,0.),(0.,2.),(0.5,1.),(1.,1.),(0.5,0.),(0.,0.25),(0.5,1.),(0.,1.75),(0.5,2.),(-1.,1.),(-0.5,2.),(0.,1.75),(0.5,1.),(0.,0.25),(-0.5,0.)]),1e-12))
3403         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3404         self.assertTrue(c.isEqual(DataArrayInt([1,0,0])))
3405         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(1,2),(1,2),(-1,-1)])))
3406         pass
3407
3408     def testSwig2Intersect2DMeshWith1DLine10(self):
3409         """ Intersection between a circle and various lines """
3410         eps = 1.0e-8
3411         m_circ = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 2.0)
3412         coords = [0.0,3.0,0.0,-3.0]
3413         connec = [0,1]
3414         m_line = MEDCouplingUMesh("seg", 1)  
3415         m_line.allocateCells(1)
3416         meshCoords = DataArrayDouble.New(coords, len(coords)/2, 2)
3417         m_line.setCoords(meshCoords)
3418         m_line.insertNextCell(NORM_SEG2, connec)
3419         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m_circ, m_line, eps)
3420         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3421         self.assertTrue(a.getCoords()[:m_circ.getNumberOfNodes()].isEqual(m_circ.getCoords(),1e-12))
3422         self.assertTrue(a.getCoords()[m_circ.getNumberOfNodes():m_circ.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3423         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.414213562373095),(0.,2.),(-1.414213562373095,1.4142135623730951),(-2.,0.),(-1.4142135623730954,-1.414213562373095),(0.,-2.),(1.4142135623730947,-1.4142135623730954),(0.,3.),(0.,-3.),(0.,-2.),(0.,2.),(2.,0.),(0.7653668647301797,-1.8477590650225735),(0.,0.),(0.7653668647301797,1.8477590650225735),(-2,0.),(-0.7653668647301795,1.8477590650225735),(0.,0.),(-0.7653668647301795,-1.8477590650225735)]),1e-12))
3424         self.assertEqual([32,1,7,10,11,12,13,14,15,32,5,3,11,10,16,17,18,19],a.getNodalConnectivity().getValues())
3425         self.assertEqual([0,9,18],  a.getNodalConnectivityIndex().getValues())
3426         self.assertEqual([1,8,11,1,11,10,1,10,9],b.getNodalConnectivity().getValues())
3427         self.assertEqual([0,3,6,9],b.getNodalConnectivityIndex().getValues())
3428         self.assertTrue(a.getCoords()[:8].isEqual(m_circ.getCoords(),1e-12))
3429         self.assertTrue(a.getCoords()[8:10].isEqual(m_line.getCoords(),1e-12))
3430         coo_tgt = DataArrayDouble([2.,0.,1.4142135623730951,1.414213562373095,1.2246467991473532e-16,2.,-1.414213562373095,1.4142135623730951,-2.,0.,-1.4142135623730954,-1.414213562373095,-3.6739403974420594e-16,-2.,1.4142135623730947,-1.4142135623730954,0.,3.,0.,-3.,0.,-2.,0.,2.,2.,0.,0.7653668647301797,-1.8477590650225735,0.,0.,0.7653668647301797,1.8477590650225735,-2.,0.,-0.7653668647301795,1.8477590650225735,0.,0.,-0.7653668647301795,-1.8477590650225735])
3431         self.assertTrue(a.getCoords().isEqualWithoutConsideringStr(coo_tgt,1.0e-12))
3432         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3433         self.assertEqual([0,0],c.getValues())
3434         self.assertEqual([-1,-1,0,1,-1,-1],d.getValues())
3435
3436     def testSwig2Intersect2DMeshWith1DLine11(self):
3437         """ Quad line re-entering a square cell """
3438         eps = 1.0e-8
3439         m = MEDCouplingUMesh("box", 2)
3440         m.setCoords(DataArrayDouble([-1., -1., -1., 1., 1., 1., 1., -1.0],4,2))
3441         c, cI = [NORM_POLYGON, 0, 1, 2, 3], [0, 5]
3442         m.setConnectivity(DataArrayInt(c), DataArrayInt(cI))
3443         m.checkCoherency()
3444         coords2 = [0., 1.3, -1.3, 0., -0.6, 0.6, 0., -1.3, -0.5, -0.5]
3445         connec2, cI2 = [NORM_SEG3, 0, 1, 2, NORM_SEG3, 1, 3, 4], [0,4,8]
3446         m_line = MEDCouplingUMesh("seg", 1)  
3447         m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2))
3448         m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2))
3449         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps)
3450         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3451         self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12))
3452         self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3453         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(0.,1.3),(-1.3,0.),(-0.6,0.6),(0.,-1.3),(-0.5,-0.5),(-1.,0.23453685964236054),(-1.,-0.13033276368660177),(-0.2345368596423598,1.),(-0.1303327636866019,-1.),(-0.11489196370692323,1.1481421036683868),(-0.6,0.6),(-1.1481421036683859,0.11489196370692323),(-1.147455889106615,-0.0593103465193594),(-0.5,-0.5),(-0.0593103465193594,-1.147455889106615),(1.,0.),(0.4348336181566991,-1.),(-0.5651663818433009,-1.),(-1.,-0.5651663818433009),(-1.,0.05210204797787939),(-0.6,0.6),(0.3827315701788201,1.),(-0.6172684298211799,1.),(-0.6,0.6),(-1.,0.6172684298211802),(-0.6,0.6),(0.3827315701788201,1.),(1.,0.),(0.4348336181566991,-1.),(-0.5,-0.5),(-1.,0.05210204797787939),(-1.,-0.5651663818433009),(-0.5,-0.5),(-0.5651663818433009,-1.)]),1e-12))
3454         self.assertEqual([32,9,11,2,3,12,10,29,30,31,32,33,34,32,0,10,12,35,36,37,32,1,11,9,26,27,28],a.getNodalConnectivity().getValues())
3455         self.assertEqual([0,13,20,27],a.getNodalConnectivityIndex().getValues())
3456         self.assertEqual([2,4,11,13,2,11,9,14,2,9,5,15,2,5,10,16,2,10,12,17,2,12,7,18],b.getNodalConnectivity().getValues())
3457         self.assertEqual([0,4,8,12,16,20,24],b.getNodalConnectivityIndex().getValues())
3458         self.assertTrue(a.getCoords()[:4].isEqual(m.getCoords(),1e-12))
3459         self.assertTrue(a.getCoords()[4:9].isEqual(m_line.getCoords(),1e-12))
3460         self.assertTrue(DataArrayInt([0,0,0]).isEqual(c))
3461         self.assertTrue(DataArrayInt([(-1,-1),(0,2),(-1,-1),(-1,-1),(0,1),(-1,-1)]).isEqual(d))
3462         pass
3463
3464     def testSwig2Intersect2DMeshWith1DLine12(self):
3465         """ Two squares one in the other intersected by an horizontal line """
3466         eps = 1.0e-8
3467         m = MEDCouplingUMesh("boxbox", 2)
3468         m.setCoords(DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,-0.25,-0.25,-0.25,0.25,0.25,0.25,0.25,-0.25],8,2))
3469         c = [NORM_POLYGON, 4, 5, 6, 7, NORM_POLYGON, 0, 1, 5, 4, NORM_POLYGON, 1, 2, 3, 0, 4, 7, 6, 5]
3470         cI = [0, 5, 10, 19]
3471         m.setConnectivity(DataArrayInt(c), DataArrayInt(cI))
3472         m.checkCoherency()
3473         coords2 = [-1., 0.25, 1., 0.25]
3474         connec2, cI2 = [NORM_SEG2, 0, 1], [0,3]
3475         m_line = MEDCouplingUMesh.New("seg", 1)  
3476         m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2))
3477         m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2))
3478         m_line2 = m_line.deepCpy()
3479         m2 = m.deepCpy()
3480         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps)
3481         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3482         self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12))
3483         self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3484         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(-0.5,-0.5),(-0.5,0.5),(0.5,0.5),(0.5,-0.5),(-0.25,-0.25),(-0.25,0.25),(0.25,0.25),(0.25,-0.25),(-1.,0.25),(1.,0.25),(-0.5,0.25),(0.5,0.25)]),1e-12))
3485         self.assertEqual([5,4,5,6,7,5,1,5,10,5,4,0,10,5,5,5,1,2,11,6,5,3,0,4,7,6,11],a.getNodalConnectivity().getValues())
3486         self.assertEqual([0,5,9,14,20,27],a.getNodalConnectivityIndex().getValues())
3487         self.assertEqual([1,8,10,1,10,5,1,5,6,1,6,11,1,11,9],b.getNodalConnectivity().getValues())
3488         self.assertEqual([0,3,6,9,12,15],b.getNodalConnectivityIndex().getValues())
3489         self.assertTrue(c.isEqual(DataArrayInt([0,1,1,2,2])))
3490         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(3,0),(3,4),(-1,-1)])))
3491         pass
3492
3493     def testSwig2Intersect2DMeshWith1DLine13(self):
3494         """ A square (side length) in a circle intersected by a simple horizontal line """
3495         import math
3496         eps = 1.0e-8
3497         m = MEDCouplingUMesh("boxcircle", 2)
3498         sq2 = math.sqrt(2.0)
3499         soth = (sq2+1.0)/2.0
3500         coo = [2., 0., sq2, sq2, 0., 2., -sq2, sq2, -2., 0., -sq2, -sq2, 0., -2., sq2, -sq2, -1., -1., -1., 1., 1., 
3501          1., 1., -1., -1., 0., 0., 1., 1., 0., 0., -1., -soth, soth, soth,soth]
3502         coo = DataArrayDouble(coo); coo.rearrange(2) 
3503         m.setCoords(coo)
3504         c = [NORM_QPOLYG, 8, 9, 10, 11, 12, 13, 14, 15, NORM_QPOLYG, 3, 1, 10, 9, 2, 17, 13, 16, NORM_QPOLYG, 1, 7, 5, 3, 9, 8, 11, 10, 0, 6, 4, 16, 12, 15, 14, 17]
3505         cI = [0, 9, 18, 35]
3506         m.setConnectivity(DataArrayInt(c), DataArrayInt(cI))
3507         m.checkCoherency()
3508         coords2 = [-2., 1., 2., 1.0]
3509         connec2, cI2 = [NORM_SEG2, 0, 1], [0,3]
3510         m_line = MEDCouplingUMesh("seg", 1)  
3511         m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2))
3512         m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2))
3513         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps)
3514         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3515         self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12))
3516         self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3517         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.4142135623730951),(0.,2.),(-1.4142135623730951,1.4142135623730951),(-2.,0.),(-1.4142135623730951,-1.4142135623730951),(0.,-2.),(1.4142135623730951,-1.4142135623730951),(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(-1.,0.),(0.,1.),(1.,0.),(0.,-1.),(-1.2071067811865475,1.2071067811865475),(1.2071067811865475,1.2071067811865475),(-2.,1.),(2.,1.),(1.7320508075688772,1.),(-1.7320508075688772,1.),(-1.2071067811865475,1.2071067811865475),(-1.3660254037844386,1.),(-1.58670668058247,1.2175228580174415),(0.,-1.),(1.,0.),(1.2071067811865475,1.2071067811865475),(1.5867066805824703,1.2175228580174413),(1.9828897227476205,-0.26105238444010315),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844386,1.),(-1.,0.),(1.5867066805824703,1.2175228580174413),(1.3660254037844386,1.),(1.2071067811865475,1.2071067811865475),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844386,1.),(-1.,0.),(0.,-1.),(1.,0.),(1.3660254037844386,1.),(1.9828897227476205,-0.26105238444010315)]),1e-12))
3518         self.assertEqual([32,8,9,10,11,12,13,14,15,32,3,1,10,9,2,17,13,16,32,3,9,21,22,23,24,32,1,20,10,34,35,36,32,7,5,21,9,8,11,10,20,37,38,39,40,41,42,43,44],a.getNodalConnectivity().getValues())
3519         self.assertEqual([0,9,18,25,32,49],a.getNodalConnectivityIndex().getValues())
3520         self.assertEqual([1,18,21,1,21,9,1,9,10,1,10,20,1,20,19],b.getNodalConnectivity().getValues())
3521         self.assertEqual([0,3,6,9,12,15],b.getNodalConnectivityIndex().getValues())
3522         self.assertTrue(c.isEqual(DataArrayInt([0,1,2,2,2])))
3523         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(2,4),(1,0),(3,4),(-1,-1)])))
3524         pass
3525
3526     def testSwig2Intersect2DMeshWith1DLine14(self):
3527         """ A circle in a circle intersected by a simple horizontal line, not tangent to the circles """
3528         eps = 1.0e-8
3529         m = MEDCouplingUMesh("boxcircle", 2)
3530         coo = [2.,0.,1.4142135623730951,1.414213562373095,0.,2.,-1.414213562373095,1.4142135623730951,-2.,0.,-1.4142135623730954,-1.414213562373095,0.,-2.,
3531                1.4142135623730947,-1.4142135623730954,1.,0.,0.7071067811865476,0.7071067811865475,0.,1.,-0.7071067811865475,0.7071067811865476,-1.,0.,-0.7071067811865477,-0.7071067811865475,
3532                0.,-1.,0.7071067811865474,-0.7071067811865477,1.060660171779821,-1.0606601717798214,-1.0606601717798214,-1.0606601717798212]
3533         coo = DataArrayDouble(coo); coo.rearrange(2) 
3534         m.setCoords(coo)
3535         c = [NORM_QPOLYG, 15, 13, 11, 9, 14, 12, 10, 8, NORM_QPOLYG, 7, 5, 13, 15, 6, 17, 14, 16, NORM_QPOLYG, 5, 3, 1, 7, 15, 9, 11, 13, 4, 2, 0, 16, 8, 10, 12, 17]
3536         cI = [0, 9, 18, 35] 
3537         m.setConnectivity(DataArrayInt(c), DataArrayInt(cI))
3538         m.checkCoherency()
3539         coords2 = [-2., 0., 2., 0.]
3540         connec2, cI2 = [NORM_SEG2, 0, 1], [0,3]
3541         m_line = MEDCouplingUMesh.New("seg", 1)  
3542         m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2))
3543         m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2))
3544         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps)
3545         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3546         self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12))
3547         self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3548         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.414213562373095),(0.,2.),(-1.414213562373095,1.4142135623730951),(-2.,0.),(-1.4142135623730954,-1.414213562373095),(0.,-2.),(1.4142135623730947,-1.4142135623730954),(1.,0.),(0.7071067811865476,0.7071067811865475),(0.,1.),(-0.7071067811865475,0.7071067811865476),(-1.,0.),(-0.7071067811865477,-0.7071067811865475),(0.,-1.),(0.7071067811865474,-0.7071067811865477),(1.060660171779821,-1.0606601717798214),(-1.0606601717798214,-1.0606601717798212),(-2.,0.),(2.,0.),(-1.,0.),(1.,0.),(0.,2.),(1.8477590650225735,0.7653668647301795),(1.8477590650225735,-0.7653668647301797),(1.060660171779821,-1.0606601717798214),(0.9238795325112867,-0.38268343236508984),(0.9238795325112867,0.3826834323650897),(0.,1.),(-0.9238795325112867,0.3826834323650896),(-1.5,0.),(-1.8477590650225735,0.7653668647301792),(-1.0606601717798214,-1.0606601717798212),(-1.8477590650225733,-0.7653668647301799),(-1.5,0.),(-0.9238795325112866,-0.38268343236508995),(0.,1.),(-0.9238795325112867,0.3826834323650896),(-1.5,0.),(-1.8477590650225735,0.7653668647301792),(0.,2.),(1.8477590650225735,0.7653668647301795),(1.5,0.),(0.9238795325112867,0.3826834323650897),(1.060660171779821,-1.0606601717798214),(0.9238795325112867,-0.38268343236508984),(1.5,0.),(1.8477590650225735,-0.7653668647301797),(0.,1.),(0.9238795325112867,0.3826834323650897),(0.,0.),(-0.9238795325112867,0.3826834323650896),(0.,-1.),(-0.9238795325112866,-0.38268343236508995),(0.,0.),(0.9238795325112867,-0.38268343236508984)]),1e-12))
3549         self.assertEqual([32,7,5,13,15,6,17,14,16,32,9,11,20,18,3,1,19,21,36,37,38,39,40,41,42,43,32,7,15,21,19,44,45,46,47,32,13,5,18,20,32,33,34,35,32,11,9,21,20,48,49,50,51,32,15,13,20,21,52,53,54,55],a.getNodalConnectivity().getValues())
3550         self.assertEqual([0,9,26,35,44,53,62],a.getNodalConnectivityIndex().getValues())
3551         self.assertEqual([1,18,20,1,20,21,1,21,19],b.getNodalConnectivity().getValues())
3552         self.assertEqual([0,3,6,9],b.getNodalConnectivityIndex().getValues())
3553         self.assertTrue(c.isEqual(DataArrayInt([1,2,2,2,0,0])))
3554         self.assertTrue(d.isEqual(DataArrayInt([(1,3),(4,5),(1,2)])))
3555         pass
3556
3557     def testSwig2Intersect2DMeshWith1DLine15(self):
3558         """ Same as testSwig2Intersect2DMeshWith1DLine13 except that the line is colinear AND splits on of the common edge of 2D mesh."""
3559         import math
3560         eps = 1.0e-8
3561         m = MEDCouplingUMesh("boxcircle", 2)
3562         sq2 = math.sqrt(2.0)
3563         soth = (sq2+1.0)/2.0
3564         coo = [2., 0., sq2, sq2, 0., 2., -sq2, sq2, -2., 0., -sq2, -sq2, 0., -2., sq2, -sq2, -1., -1., -1., 1., 1., 
3565          1., 1., -1., -1., 0., 0., 1., 1., 0., 0., -1., -soth, soth, soth,soth]
3566         coo = DataArrayDouble(coo); coo.rearrange(2) 
3567         m.setCoords(coo)
3568         c = [NORM_QPOLYG, 8, 9, 10, 11, 12, 13, 14, 15, NORM_QPOLYG, 3, 1, 10, 9, 2, 17, 13, 16, NORM_QPOLYG, 1, 7, 5, 3, 9, 8, 11, 10, 0, 6, 4, 16, 12, 15, 14, 17]
3569         cI = [0, 9, 18, 35]
3570         m.setConnectivity(DataArrayInt(c), DataArrayInt(cI))
3571         m.checkCoherency()
3572         coords2 = [(-2., 1.),(2.,1.),(0.,1)]
3573         connec2, cI2 = [NORM_SEG2, 0, 2, NORM_SEG2, 2, 1], [0,3,6]
3574         m_line = MEDCouplingUMesh("seg", 1)  
3575         m_line.setCoords(DataArrayDouble(coords2))
3576         m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2))
3577         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps)
3578         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3579         self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12))
3580         self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3581         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.4142135623730951),(0.,2.),(-1.4142135623730951,1.4142135623730951),(-2.,0.),(-1.4142135623730951,-1.4142135623730951),(0.,-2.),(1.4142135623730951,-1.4142135623730951),(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(-1.,0.),(0.,1.),(1.,0.),(0.,-1.),(-1.2071067811865475,1.2071067811865475),(1.2071067811865475,1.2071067811865475),(-2.,1.),(2.,1.),(0.,1.),(1.7320508075688776,1.),(-1.7320508075688776,1.),(-0.5,1.),(0.5,1.),(0.5,1.),(-0.5,1.),(-1.2071067811865475,1.2071067811865475),(-1.3660254037844388,1.),(-1.58670668058247,1.2175228580174415),(0.,-1.),(1.,0.),(1.2071067811865475,1.2071067811865475),(1.5867066805824703,1.2175228580174413),(1.9828897227476205,-0.26105238444010315),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844388,1.),(-1.,0.),(1.5867066805824703,1.2175228580174413),(1.3660254037844388,1.),(1.2071067811865475,1.2071067811865475),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844388,1.),(-1.,0.),(0.,-1.),(1.,0.),(1.3660254037844388,1.),(1.9828897227476205,-0.26105238444010315)]),1e-12))
3582         self.assertEqual([32,8,9,20,10,11,12,23,24,14,15,32,3,1,10,20,9,2,17,25,26,16,32,3,9,22,27,28,29,32,1,21,10,39,40,41,32,7,5,22,9,8,11,10,21,42,43,44,45,46,47,48,49],a.getNodalConnectivity().getValues())
3583         self.assertEqual([0,11,22,29,36,53],a.getNodalConnectivityIndex().getValues())
3584         self.assertEqual([1,18,22,1,22,9,1,9,20,1,20,10,1,10,21,1,21,19],b.getNodalConnectivity().getValues())
3585         self.assertEqual([0,3,6,9,12,15,18],b.getNodalConnectivityIndex().getValues())
3586         self.assertTrue(c.isEqual(DataArrayInt([0,1,2,2,2])))
3587         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(2,4),(1,0),(1,0),(3,4),(-1,-1)])))
3588         pass
3589
3590     def testSwig2Intersect2DMeshWith1DLine16(self):
3591         """ Same than testSwig2Intersect2DMeshWith1DLine13 except it is a vertical line. Non regression test."""
3592         import math
3593         eps = 1.0e-8
3594         m = MEDCouplingUMesh("boxcircle", 2)
3595         sq2 = math.sqrt(2.0)
3596         soth = (sq2+1.0)/2.0
3597         coo = [2., 0., sq2, sq2, 0., 2., -sq2, sq2, -2., 0., -sq2, -sq2, 0., -2., sq2, -sq2, -1., -1., -1., 1., 1., 
3598          1., 1., -1., -1., 0., 0., 1., 1., 0., 0., -1., -soth, soth, soth,soth]
3599         coo = DataArrayDouble(coo); coo.rearrange(2) 
3600         m.setCoords(coo)
3601         c = [NORM_QPOLYG, 8, 9, 10, 11, 12, 13, 14, 15, NORM_QPOLYG, 3, 1, 10, 9, 2, 17, 13, 16, NORM_QPOLYG, 1, 7, 5, 3, 9, 8, 11, 10, 0, 6, 4, 16, 12, 15, 14, 17]
3602         cI = [0, 9, 18, 35]
3603         m.setConnectivity(DataArrayInt(c), DataArrayInt(cI))
3604         m.checkCoherency()
3605         coords2 = [1., 2., 1., -2.]
3606         connec2, cI2 = [NORM_SEG2, 0, 1], [0,3]
3607         m_line = MEDCouplingUMesh("seg", 1)  
3608         m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2))
3609         m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2))
3610         a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps)
3611         self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer())
3612         self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12))
3613         self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12))
3614         self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2., 0.),(1.4142135623730951,1.4142135623730951),(0.,2.),(-1.4142135623730951,1.4142135623730951),(-2.,0.),(-1.4142135623730951,-1.4142135623730951),(0.,-2.),(1.4142135623730951,-1.4142135623730951),(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(-1.,0.),(0.,1.),(1.,0.),(0.,-1.),(-1.2071067811865475,1.2071067811865475),(1.2071067811865475,1.2071067811865475),(1.,2.),(1.,-2.),(1.,1.7320508075688772),(1.,-1.7320508075688772),(1.2071067811865475,1.2071067811865475),(1.,1.3660254037844386),(1.217522858017441,1.5867066805824703),(-1.2071067811865475,1.2071067811865475),(-0.2610523844401028,1.9828897227476208),(1.,1.3660254037844386),(0.,1.),(1.2071067811865475,1.2071067811865475),(2.,0.),(1.217522858017441,-1.5867066805824703),(1.,-1.3660254037844386),(1.,0.),(-2.,0.),(-1.2071067811865475,1.2071067811865475),(-1.,0.),(0.,-1.),(1.,-1.3660254037844386),(-0.2610523844401028,-1.9828897227476208)]),1e-12))
3615         self.assertEqual([32,8,9,10,11,12,13,14,15,32,1,10,20,22,23,24,32,9,3,20,10,25,26,27,28,32,10,1,7,21,11,29,30,31,32,33,32,5,3,9,8,11,21,34,35,36,37,38,39],a.getNodalConnectivity().getValues())
3616         self.assertEqual([0,9,16,25,36,49],a.getNodalConnectivityIndex().getValues())
3617         self.assertEqual([1,18,20,1,20,10,1,10,11,1,11,21,1,21,19],b.getNodalConnectivity().getValues())
3618         self.assertEqual([0,3,6,9,12,15],b.getNodalConnectivityIndex().getValues())
3619         self.assertTrue(c.isEqual(DataArrayInt([0,1,1,2,2])))
3620         self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(3,0),(3,4),(-1,-1)])))
3621         pass
3622
3623     def testOrderConsecutiveCells1D1(self):
3624         """A line in several unconnected pieces:"""
3625         m2 = MEDCouplingUMesh.New("bla", 1)
3626         c = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,4,
3627                                NORM_SEG3,5,7,6, NORM_SEG3,7,9,8, NORM_SEG2,9,10,
3628                                NORM_SEG2,11,12,NORM_SEG2,12,13,
3629                                NORM_SEG2,14,15])
3630         cI = DataArrayInt([0,3,7,10,14,18,21,24,27,30])
3631         coords2 = DataArrayDouble([float(i) for i in range(32)], 16,2)
3632         m2.setCoords(coords2);
3633         m2.setConnectivity(c, cI);
3634         m2.checkCoherency1(1.0e-8);
3635       
3636         # Shuffle a bit :-)
3637         m2.renumberCells(DataArrayInt([0,3,6,8,1,4,7,5,2]), True);
3638         res = m2.orderConsecutiveCells1D()
3639         expRes = [0,3,6,8,1,4,2,7,5]
3640         self.assertEqual(m2.getNumberOfCells(),res.getNumberOfTuples())
3641         self.assertEqual(expRes, res.getValues())
3642       
3643         # A closed line (should also work)
3644         m3 = MEDCouplingUMesh.New("bla3", 1)
3645         conn3A = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,0])
3646         coord3 = coords2[0:5]
3647         c.reAlloc(10)
3648         cI.reAlloc(4)
3649         
3650         m3.setCoords(coord3)
3651         m3.setConnectivity(conn3A, cI)
3652         m3.checkCoherency1(1.0e-8)
3653         res2 = m3.orderConsecutiveCells1D()
3654         expRes2 = [0,1,2]
3655         self.assertEqual(m3.getNumberOfCells(),res2.getNumberOfTuples())
3656         self.assertEqual(expRes2, res2.getValues())
3657         pass
3658
3659     def testDADApplyFuncOnThis1(self):
3660         d=DataArrayDouble(5) ; d.iota(0.)
3661         d.applyFuncOnThis("2*x+1")
3662         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.]),1e-12))
3663         d=DataArrayDouble(6) ; d.iota(0.) ; d.rearrange(2)
3664         d.applyFuncOnThis("2*x+1")
3665         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.,11.],3,2),1e-12))
3666         d.applyFuncOnThis("1+2*3")
3667         self.assertTrue(d.isEqual(DataArrayDouble([(7.,7.),(7.,7.),(7.,7.)]),1e-12))
3668         pass
3669
3670     def testSwig2PointSetComputeFetchedNodeIds1(self):
3671         arr=DataArrayDouble(6) ; arr.iota()
3672         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3673         m=m.buildUnstructured()
3674         m0=m[[0,1,5,6,25,26,30,31,124]]
3675         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])
3676         self.assertTrue(m0.computeFetchedNodeIds().isEqual(ref))
3677         self.assertTrue(MEDCoupling1SGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3678         self.assertEqual(m0.getAllGeoTypes(),[NORM_HEXA8])
3679         m0.convertAllToPoly()
3680         self.assertEqual(m0.getAllGeoTypes(),[NORM_POLYHED])
3681         self.assertTrue(MEDCoupling1DGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3682         pass
3683
3684     def testSwig2PartDefinition1(self):
3685         pd=PartDefinition.New(5,22,3)
3686         self.assertTrue(isinstance(pd,SlicePartDefinition))
3687         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3688         self.assertEqual(pd.getNumberOfElems(),6)
3689         self.assertEqual(pd.getEffectiveStop(),23)
3690         pd=PartDefinition.New(5,23,3)
3691         self.assertTrue(isinstance(pd,SlicePartDefinition))
3692         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3693         self.assertEqual(pd.getNumberOfElems(),6)
3694         self.assertEqual(pd.getEffectiveStop(),23)
3695         self.assertEqual(pd.getSlice(),slice(5,23,3))
3696         pd=PartDefinition.New(5,22,1)
3697         self.assertTrue(isinstance(pd,SlicePartDefinition))
3698         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3699         self.assertEqual(pd.getNumberOfElems(),17)
3700         self.assertEqual(pd.getEffectiveStop(),22)
3701         pd=PartDefinition.New(5,23,3)+PartDefinition.New(23,27,3)
3702         self.assertTrue(isinstance(pd,SlicePartDefinition))
3703         self.assertEqual(pd.getNumberOfElems(),8)
3704         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20,23,26])))
3705         self.assertEqual(pd.getEffectiveStop(),29)
3706         pd=SlicePartDefinition(5,22,1)
3707         self.assertTrue(isinstance(pd,SlicePartDefinition))
3708         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3709         self.assertEqual(pd.getNumberOfElems(),17)
3710         self.assertEqual(pd.getEffectiveStop(),22)
3711         d=DataArrayInt([2,4,5,6,10])
3712         pd=PartDefinition.New(d)
3713         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3714         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3715         pd=DataArrayPartDefinition(d)
3716         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3717         pd=DataArrayPartDefinition(d)+DataArrayPartDefinition(DataArrayInt([12,14,20]))
3718         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3719         self.assertEqual(pd.getNumberOfElems(),8)
3720         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([2,4,5,6,10,12,14,20])))
3721         pass
3722
3723     def testSwig2SortEachPairToMakeALinkedList1(self):
3724         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)])
3725         d.sortEachPairToMakeALinkedList()
3726         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)])))
3727         pass
3728
3729     def testSwig2DAIIsRange(self):
3730         d=DataArrayInt([2,6,10])
3731         a,b=d.isRange()
3732         self.assertTrue(a)
3733         self.assertEqual(b,slice(2,11,4))
3734         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3735         #
3736         d=DataArrayInt([2,7,10])
3737         a,b=d.isRange()
3738         self.assertTrue(not a)
3739         self.assertTrue(b is None)
3740         #
3741         d=DataArrayInt([22,17,12])
3742         a,b=d.isRange()
3743         self.assertTrue(a)
3744         self.assertEqual(b,slice(22,11,-5))
3745         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3746         #
3747         d=DataArrayInt([22,16,12])
3748         a,b=d.isRange()
3749         self.assertTrue(not a)
3750         self.assertTrue(b is None)
3751         #
3752         d=DataArrayInt([33])
3753         a,b=d.isRange()
3754         self.assertTrue(a)
3755         self.assertEqual(b,slice(33,34,1))
3756         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3757         #
3758         d=DataArrayInt([])
3759         a,b=d.isRange()
3760         self.assertTrue(a)
3761         self.assertEqual(b,slice(0,0,1))
3762         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3763         #
3764         d=DataArrayInt([2,6,10,2])
3765         a,b=d.isRange()
3766         self.assertTrue(not a)
3767         self.assertTrue(b is None)
3768         pass
3769
3770     def testSwig2PartDefinitionComposeWith1(self):
3771         f=PartDefinition.New(DataArrayInt([0,1,2,3,6,7,8,9]))
3772         g=PartDefinition.New(4,14,1)
3773         g2=g.deepCpy()
3774         self.assertTrue(g2.isEqual(g)[0])
3775         h=f.composeWith(g)
3776         self.assertTrue(isinstance(h,DataArrayPartDefinition))
3777         self.assertTrue(h.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3778         f2=f.tryToSimplify()
3779         g2=g.tryToSimplify()
3780         self.assertEqual(f2.getHiddenCppPointer(),f.getHiddenCppPointer())# same because no simplification due to content of array
3781         self.assertEqual(g2.getHiddenCppPointer(),g.getHiddenCppPointer())# same because no simplification linked to type of PartDef
3782         p=PartDefinition.New(DataArrayInt([2,6,10]))
3783         p2=p.tryToSimplify()
3784         self.assertNotEqual(p2.getHiddenCppPointer(),p.getHiddenCppPointer())
3785         self.assertTrue(isinstance(p2,SlicePartDefinition))
3786         self.assertEqual(p2.getSlice(),slice(2,11,4))
3787         self.assertTrue(p2.isEqual(SlicePartDefinition(2,11,4))[0])
3788         self.assertTrue(p2.isEqual(p2.deepCpy())[0])
3789         self.assertTrue(not p2.isEqual(SlicePartDefinition(1,11,4))[0])
3790         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,10,4))[0])
3791         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,11,3))[0])
3792         pass
3793
3794     def testSwig2DAIGetIdsStrictlyNegative1(self):
3795         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3796         self.assertTrue(d.getIdsStrictlyNegative().isEqual(DataArrayInt([1,2,6])))
3797         pass
3798
3799     def testSwig2DAIReplaceOneValByInThis1(self):
3800         d=DataArrayInt([4,-5,-1,0,-5,99,-7,5])
3801         d.changeValue(-5,900)
3802         self.assertTrue(d.isEqual(DataArrayInt([4,900,-1,0,900,99,-7,5])))
3803         pass
3804
3805     def testSwig2DAIGetMinMaxValues1(self):
3806         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3807         a,b=d.getMinMaxValues()
3808         self.assertEqual(a,-7)
3809         self.assertEqual(b,99)
3810         pass
3811
3812     def testSwig2DAIBuildUniqueNotSorted1(self):
3813         d=DataArrayInt([-5,3,2,-1,2,3,-6,4,2,-5,3,7])
3814         self.assertTrue(d.buildUniqueNotSorted().isEqual(DataArrayInt([-5,3,2,-1,-6,4,7])))
3815         pass
3816
3817     def testSwig2UMeshChangeOrientationOfCells1(self):
3818         """ Here testing changeOrientationOfCell method on unstructured meshes lying on no coords."""
3819         m=MEDCouplingUMesh("mesh",1)
3820         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])
3821         cI=DataArrayInt([0,3,6,10,14,17,22,27])
3822         m.setConnectivity(c,cI)
3823         m.changeOrientationOfCells()
3824         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])))
3825         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3826         # testing 2D cells
3827         m=MEDCouplingUMesh("mesh",2)
3828         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])
3829         cI=DataArrayInt([0,4,9,15,22,31,42])
3830         m.setConnectivity(c,cI)
3831         m.changeOrientationOfCells()
3832         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])))
3833         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3834         pass
3835
3836     def testSwig2StructuredMeshCellLocation1(self):
3837         # 3D
3838         arrX=DataArrayDouble(5) ; arrX.iota()
3839         arrY=DataArrayDouble(4) ; arrY.iota()
3840         arrZ=DataArrayDouble(3) ; arrZ.iota()
3841         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3842         li=[]
3843         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)]
3844         self.assertEqual(24,m.getNumberOfCells())
3845         for i in xrange(m.getNumberOfCells()):
3846             li.append(m.getLocationFromCellId(i))
3847             pass
3848         self.assertEqual(liExp3D,li)
3849         self.assertRaises(InterpKernelException,m.getLocationFromCellId,24)
3850         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3851         # 2D
3852         arrX=DataArrayDouble(5) ; arrX.iota()
3853         arrY=DataArrayDouble(4) ; arrY.iota()
3854         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3855         li=[]
3856         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)]
3857         self.assertEqual(12,m.getNumberOfCells())
3858         for i in xrange(m.getNumberOfCells()):
3859             li.append(m.getLocationFromCellId(i))
3860             pass
3861         self.assertEqual(liExp2D,li)
3862         self.assertRaises(InterpKernelException,m.getLocationFromCellId,12)
3863         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3864         # 1D
3865         arrX=DataArrayDouble(5) ; arrX.iota()
3866         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3867         self.assertEqual(4,m.getNumberOfCells())
3868         for i in xrange(m.getNumberOfCells()):
3869             self.assertEqual((i,),m.getLocationFromCellId(i))
3870             pass
3871         self.assertRaises(InterpKernelException,m.getLocationFromCellId,4)
3872         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3873         pass
3874
3875     def testSwig2StructuredMeshNodeLocation1(self):
3876         # 3D
3877         arrX=DataArrayDouble(5) ; arrX.iota()
3878         arrY=DataArrayDouble(4) ; arrY.iota()
3879         arrZ=DataArrayDouble(3) ; arrZ.iota()
3880         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3881         li=[]
3882         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)]
3883         self.assertEqual(60,m.getNumberOfNodes())
3884         for i in xrange(m.getNumberOfNodes()):
3885             li.append(m.getLocationFromNodeId(i))
3886             pass
3887         self.assertEqual(liExp3D,li)
3888         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,60)
3889         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3890         # 2D
3891         arrX=DataArrayDouble(5) ; arrX.iota()
3892         arrY=DataArrayDouble(4) ; arrY.iota()
3893         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3894         li=[]
3895         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)]
3896         self.assertEqual(20,m.getNumberOfNodes())
3897         for i in xrange(m.getNumberOfNodes()):
3898             li.append(m.getLocationFromNodeId(i))
3899             pass
3900         self.assertEqual(liExp2D,li)
3901         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,20)
3902         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3903         # 1D
3904         arrX=DataArrayDouble(5) ; arrX.iota()
3905         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3906         self.assertEqual(5,m.getNumberOfNodes())
3907         for i in xrange(m.getNumberOfNodes()):
3908             self.assertEqual((i,),m.getLocationFromNodeId(i))
3909             pass
3910         self.assertRaises(InterpKernelException,m.getLocationFromCellId,5)
3911         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3912         pass
3913
3914     def testSwig2DataArrayPrintNotTooLong1(self):
3915         """ Now that DataArrayDouble and DataArrayInt and pickelized they can appear in YACS ports. Avoid to have too heavy string representation of them."""
3916         d=DataArrayDouble(2000) ; d.iota() ; d.rearrange(2)
3917         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3918         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3919         self.assertEqual(st1,st2)
3920         #
3921         d=DataArrayDouble(2002) ; d.iota() ; d.rearrange(2)
3922         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3923         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3924         self.assertEqual(st1,st2)
3925         self.assertIn(len(st2),xrange(0,1000)) # no more than 1000 characters
3926         ## Now for DataArrayInt
3927         d=DataArrayInt(2000) ; d.iota() ; d.rearrange(2)
3928         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3929         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3930         self.assertEqual(st1,st2)
3931         #
3932         d=DataArrayInt(2002) ; d.iota() ; d.rearrange(2)
3933         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3934         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3935         self.assertEqual(st1,st2)
3936         self.assertIn(len(st2),xrange(0,1000)) # no more than 1000 characters
3937         pass
3938
3939     def testExtrudedMeshWithoutZipCoords1(self):
3940         """This test checks that MEDCouplingUMesh.buildExtrudedMesh do not perform a zipCoords."""
3941         arr=DataArrayDouble([(0.,0.),(1.,0.),(2.,0.),(3.,0.)])
3942         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(arr)
3943         m.allocateCells()
3944         m.insertNextCell(NORM_SEG2,[1,2])
3945         arr1D=DataArrayDouble([(0.,0.),(0.,1.5),(0.,2.)])
3946         m1D=MEDCouplingUMesh("mesh1D",1) ; m1D.setCoords(arr1D)
3947         m1D.allocateCells()
3948         m1D.insertNextCell(NORM_SEG2,[0,1])
3949         m1D.insertNextCell(NORM_SEG2,[1,2])
3950         m2D=m.buildExtrudedMesh(m1D,0)
3951         self.assertEqual(m.getCoords().getHiddenCppPointer(),m2D.getCoords().getHiddenCppPointer())
3952         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)])
3953         self.assertTrue(m.getCoords().isEqual(coo,1e-12))
3954         self.assertTrue(m2D.getNodalConnectivity().isEqual(DataArrayInt([4,1,2,6,5,4,5,6,10,9])))
3955         self.assertTrue(m2D.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10])))
3956         pass
3957
3958     def testPointSetAreAllNodesFetched1(self):
3959         m=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
3960         m.setCoords(arr,arr)
3961         m=m.buildUnstructured()
3962         self.assertTrue(m.areAllNodesFetched())
3963         m2=m[[0,2,3,4,5]]
3964         self.assertTrue(not m2.areAllNodesFetched())
3965         m2.zipCoords()
3966         self.assertTrue(m2.areAllNodesFetched())
3967         pass
3968
3969     def testMEDCouplingPointSetComputeDiameterField1(self):
3970         arrX=DataArrayDouble([0.,1.1,1.7,2.1])
3971         arrY=DataArrayDouble([0.,0.7,0.8,1.9])
3972         arrZ=DataArrayDouble([0.,1.3,2.1,2.4])
3973         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
3974         f=m.computeDiameterField()
3975         f.checkCoherency()
3976         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])
3977         self.assertTrue(exp.isEqual(f.getArray(),1e-12))
3978         m1=m[::2]
3979         m2=m[1::2]
3980         m2.simplexize(PLANAR_FACE_5)
3981         m3=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
3982         f=m3.computeDiameterField()
3983         f.checkCoherency()
3984         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])
3985         self.assertTrue(exp2.isEqual(f.getArray(),1e-12))
3986         # TRI3 - spacedim = 2
3987         coo=DataArrayDouble([(1,1),(5,1.9),(2.1,3)])
3988         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3989         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3990             m.setNodalConnectivity(DataArrayInt(c))
3991             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3992             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3993             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3994             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3995             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3996         # TRI3 - spacedim = 3
3997         coo=DataArrayDouble([(1.3198537928820775,1.0991902391274959,-0.028645697595823361),(5.2486835106806335,2.2234012799688281,0.30368935050077939),(2.2973688139447361,3.1572023778066649,0.10937756365410012)])
3998         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3999         for c in [[0,1,2],[0,2,1],[2,1,0]]:
4000             m.setNodalConnectivity(DataArrayInt(c))
4001             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
4002             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4003             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
4004             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
4005             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
4006         # QUAD4 - spacedim = 2
4007         coo=DataArrayDouble([(0,2),(2,0),(6,4),(4,9)])
4008         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
4009         exp3=sqrt(85.)
4010         for delta in xrange(4):
4011             c=[(elt+delta)%4 for elt in xrange(4)]
4012             m.setNodalConnectivity(DataArrayInt(c))
4013             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
4014             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4015             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
4016             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
4017             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
4018             c.reverse()
4019             m.setNodalConnectivity(DataArrayInt(c))
4020             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
4021             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4022             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
4023             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
4024             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
4025         # QUAD4 - spacedim = 3
4026         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)])
4027         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
4028         for delta in xrange(4):
4029             c=[(elt+delta)%4 for elt in xrange(4)]
4030             m.setNodalConnectivity(DataArrayInt(c))
4031             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
4032             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4033             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
4034             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
4035             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
4036             c.reverse()
4037             m.setNodalConnectivity(DataArrayInt(c))
4038             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
4039             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4040             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
4041             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
4042             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
4043         # PENTA6
4044         # 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)
4045         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)])
4046         m=MEDCoupling1SGTUMesh("mesh",NORM_PENTA6) ; m.setCoords(coo)
4047         exp4=2.5041256256889888
4048         self.assertAlmostEqual(exp4,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
4049         for delta in xrange(3):
4050             c=[(elt+delta)%3 for elt in xrange(3)]
4051             c+=[elt+3 for elt in c]
4052             m.setNodalConnectivity(DataArrayInt(c))
4053             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
4054             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4055             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
4056             c.reverse()
4057             m.setNodalConnectivity(DataArrayInt(c))
4058             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
4059             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4060             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
4061         # HEXA8
4062         # 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)
4063         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)])
4064         m=MEDCoupling1SGTUMesh("mesh",NORM_HEXA8) ; m.setCoords(coo)
4065         exp5=2.5366409441884215
4066         self.assertAlmostEqual(exp5,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
4067         for delta in xrange(4):
4068             c=[(elt+delta)%4 for elt in xrange(4)]
4069             c+=[elt+4 for elt in c]
4070             m.setNodalConnectivity(DataArrayInt(c))
4071             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
4072             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4073             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
4074             c.reverse()
4075             m.setNodalConnectivity(DataArrayInt(c))
4076             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
4077             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4078             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
4079         # PYRA5 (1) 5th node is further 
4080         # 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)
4081         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)])
4082         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
4083         exp6=2.1558368027391386
4084         self.assertAlmostEqual(exp6,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
4085         for delta in xrange(4):
4086             c=[(elt+delta)%4 for elt in xrange(4)]
4087             c+=[4]
4088             m.setNodalConnectivity(DataArrayInt(c))
4089             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp6,12)
4090             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4091             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp6,12)
4092             pass
4093         # PYRA5 (2) 5th node is closer
4094         # 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)
4095         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)])
4096         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
4097         exp7=1.4413563787228953
4098         self.assertAlmostEqual(exp7,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
4099         for delta in xrange(4):
4100             c=[(elt+delta)%4 for elt in xrange(4)]
4101             c+=[4]
4102             m.setNodalConnectivity(DataArrayInt(c))
4103             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp7,12)
4104             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4105             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp7,12)
4106             pass
4107         # TETRA4
4108         # 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)
4109         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)])
4110         m=MEDCoupling1SGTUMesh("mesh",NORM_TETRA4) ; m.setCoords(coo)
4111         exp8=1.7131322579364157
4112         self.assertAlmostEqual(exp8,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
4113         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]]:
4114             for i in xrange(4):
4115                 m.setNodalConnectivity(DataArrayInt([(elt+i)%4 for elt in c]))
4116                 self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp8,12)
4117                 m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
4118                 self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp8,12)
4119                 pass
4120             pass
4121         pass
4122
4123     def testMEDCouplingSkyLineArray(self):
4124         index = DataArrayInt([ 0, 3, 5, 6, 6 ])
4125         value = DataArrayInt([ 1, 2, 3, 2, 3, 3 ])
4126
4127         sla0 = MEDCouplingSkyLineArray()
4128         self.assertEqual( -1, sla0.getNumberOf() )
4129         self.assertEqual( 0,  sla0.getLength() )
4130         sla0.set( index, value )
4131         self.assertTrue( index.isEqual( sla0.getIndexArray() ))
4132         self.assertTrue( value.isEqual( sla0.getValueArray() ))
4133         self.assertEqual( 4, sla0.getNumberOf() )
4134         self.assertEqual( 6, sla0.getLength() )
4135
4136         sla1 = MEDCouplingSkyLineArray( index, value )
4137         self.assertTrue( index.isEqual( sla1.getIndexArray() ))
4138         self.assertTrue( value.isEqual( sla1.getValueArray() ))
4139         self.assertEqual( 4, sla1.getNumberOf() )
4140         self.assertEqual( 6, sla1.getLength() )
4141
4142         sla2 = MEDCouplingSkyLineArray( sla1 )
4143         self.assertTrue( index.isEqual( sla2.getIndexArray() ))
4144         self.assertTrue( value.isEqual( sla2.getValueArray() ))
4145         self.assertEqual( 4, sla2.getNumberOf() )
4146         self.assertEqual( 6, sla2.getLength() )
4147
4148         indexVec = ivec(); indexVec.reserve( len( index ))
4149         for i in index: indexVec.push_back( i[0] )
4150         valueVec = ivec(); valueVec.reserve( len( value ))
4151         for i in value: valueVec.push_back( i[0] )
4152         sla3 = MEDCouplingSkyLineArray( indexVec, valueVec )
4153         self.assertTrue( index.isEqual( sla3.getIndexArray() ))
4154         self.assertTrue( value.isEqual( sla3.getValueArray() ))
4155         self.assertEqual( 4, sla3.getNumberOf() )
4156         self.assertEqual( 6, sla3.getLength() )
4157
4158         pass
4159    
4160     def testMEDCouplingUMeshgenerateGraph(self):
4161         # cartesian mesh 3x3
4162         arr=DataArrayDouble(4) ; arr.iota()
4163         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
4164         m=c.buildUnstructured()
4165         graph = m.generateGraph()
4166         # 0 1 2
4167         # 3 4 5
4168         # 6 7 8
4169         valRef=[ 0,1,3,
4170                  0,1,2,4,
4171                  1,2,5,
4172                  0,3,4,6,
4173                  1,3,4,5,7,
4174                  2,4,5,8,
4175                  3,6,7,
4176                  4,6,7,8,
4177                  5,7,8]
4178         self.assertEqual(valRef,list(graph.getValueArray().getValues()));
4179
4180         indRef=[0, 3, 7, 10, 14, 19, 23, 26, 30, 33]
4181         self.assertEqual(indRef,list(graph.getIndexArray().getValues()));
4182         pass
4183
4184     def testSwig2MEDCouplingCurveLinearReprQuick1(self):
4185         """Non regression test. Error in m.__str__ when m is a MEDCouplingCurveLinear with spaceDim != meshDim."""
4186         arr=DataArrayDouble(12) ; arr.iota() ; arr.rearrange(2)
4187         m=MEDCouplingCurveLinearMesh()
4188         m.setCoords(arr)
4189         m.setNodeGridStructure([3,2])
4190         m.checkCoherency()
4191         self.assertEqual(m.getMeshDimension(),2)
4192         self.assertEqual(m.getSpaceDimension(),2)
4193         self.assertTrue(not "mismatch" in m.__str__())
4194         self.assertTrue(not "mismatch" in m.__repr__())
4195         #
4196         arr=DataArrayDouble(18) ; arr.iota() ; arr.rearrange(3)
4197         m.setCoords(arr)
4198         self.assertEqual(m.getMeshDimension(),2)
4199         self.assertEqual(m.getSpaceDimension(),3)
4200         self.assertTrue(not "mismatch" in m.__str__())
4201         self.assertTrue(not "mismatch" in m.__repr__())# bug was here !
4202         pass
4203
4204     def testSwig2BugComputeOffsets1(self):
4205         """Non regression test. computeOffsets2 on empty array must return 0."""
4206         d=DataArrayInt([3])
4207         d.computeOffsets2()
4208         self.assertTrue(d.isEqual(DataArrayInt([0,3])))
4209         d=DataArrayInt([])
4210         d.computeOffsets()
4211         self.assertTrue(d.isEqual(DataArrayInt([])))
4212         d=DataArrayInt([])
4213         d.computeOffsets2()
4214         self.assertTrue(d.isEqual(DataArrayInt([0]))) # <- bug was here
4215         pass
4216
4217     def testSwig2Cartesianize1(self):
4218         """Test of engine of cartesianize mechanism in medcoupling"""
4219         # cyl 2D
4220         arr=DataArrayDouble([(3,0.2),(2,1.6)]) ; arr.setInfoOnComponents(["A","BB"])
4221         arr2=arr.cartesianize(AX_CYL)
4222         arr2_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836),(-0.05839904460257763,1.9991472060830102)]) ; arr2_exp.setInfoOnComponents(["A","BB"])
4223         self.assertTrue(arr2_exp.isEqual(arr2,1e-14))
4224         # spher 2D
4225         arr3=arr.cartesianize(AX_SPHER)
4226         self.assertTrue(arr2_exp.isEqual(arr3,1e-14))
4227         # cyl 3D
4228         arr=DataArrayDouble([(3,0.2,7.1),(2,1.6,12.3)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
4229         arr4=arr.cartesianize(AX_CYL)
4230         arr4_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836,7.1),(-0.05839904460257763,1.9991472060830102,12.3)]) ; arr4_exp.setInfoOnComponents(["A","BB","CCC"])
4231         self.assertTrue(arr4_exp.isEqual(arr4,1e-14))
4232         # spher 3D
4233         arr=DataArrayDouble([(3,0.2,0.5),(2,1.3,5.8)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
4234         arr5=arr.cartesianize(AX_SPHER)
4235         arr5_exp=DataArrayDouble([(0.5230462208645272,0.2857414527616764,2.940199733523725),(1.706499157790973,-0.8953424658735863,0.5349976572491747)]) ; arr5_exp.setInfoOnComponents(["A","BB","CCC"])
4236         self.assertTrue(arr5_exp.isEqual(arr5,1e-14))
4237         #
4238         m=MEDCouplingCMesh() ; m.setName("aa") ; m.setDescription("bbb") ; m.setTime(4.125,5,6) ; m.setTimeUnit("ms")
4239         arrX=DataArrayDouble([0,1,2]) ; arrX.setInfoOnComponent(0,"ccc")
4240         arrY=DataArrayDouble([3,4,5,6]) ; arrY.setInfoOnComponent(0,"dddd")
4241         m.setCoords(arrX,arrY)
4242         m2=m.buildCurveLinear()
4243         #
4244         self.assertTrue(isinstance(m2,MEDCouplingCurveLinearMesh))
4245         self.assertEqual(m2.getName(),"aa")
4246         self.assertEqual(m2.getDescription(),"bbb")
4247         self.assertEqual(m2.getTime(),[4.125,5,6])
4248         self.assertEqual(m2.getTimeUnit(),"ms")
4249         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"])
4250         self.assertTrue(m2.getCoords().isEqual(m2c_exp,1e-14))
4251         self.assertEqual(m2.getNodeGridStructure(),(3,4))
4252         pass
4253
4254     pass
4255
4256 if __name__ == '__main__':
4257     unittest.main()