Salome HOME
Ready for Salome9/py3 - Thanks a lot Gilles
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingBasicsTest5.py
1 #  -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
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@edf.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] = list(range(7, 12)) ; arr[:, 1] = 100 + arr[:, 0]
35         f.setArray(arr)
36         f.checkConsistencyLight()
37         ff=f[1:-1:2]
38         ff.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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] = list(range(7, 16)) ; arr[:, 1] = 100 + arr[:, 0]
65         f.setArray(arr)
66         f.checkConsistencyLight()
67         ff=f[1:-1:2]
68         ff.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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] = list(range(7, 25)) ; arr[:, 1] = 100 + arr[:, 0]
100         f.setArray(arr)
101         f.checkConsistencyLight()
102         ff=f[1:-1:2]
103         ff.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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] = list(range(7, 23)) ; arr[:, 1] = 100 + arr[:, 0]
134         f.setArray(arr)
135         f.checkConsistencyLight()
136         ff=f[1:-1:2]
137         ff.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
172         f.applyFunc(4,800.)
173         f.checkConsistencyLight()
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.checkConsistencyLight()
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.deepCopy();
207         coordsArr=DataArrayDouble.New(coords2,4,1);
208         mesh2.setCoords(coordsArr);
209         field = mesh1.fillFromAnalytic(ON_NODES,1,"x")
210         field.checkConsistencyLight()
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 range(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 range(24):
262             m.insertNextCell(NORM_QUAD4,conn[4*i:4*i+4])
263             pass
264         m.checkConsistency()
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, list(range(8))) ; m.setCoords(d)
292         self.assertTrue(m.computeCellCenterOfMass().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.deepCopy()
298         m2.convertQuadraticCellsToLinear()
299         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
300         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),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, list(range(6))) ; m.setCoords(d)
311         self.assertTrue(m.computeCellCenterOfMass().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.deepCopy()
316         m2.convertQuadraticCellsToLinear()
317         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
318         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),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, list(range(10))) ; m.setCoords(d)
329         self.assertTrue(m.computeCellCenterOfMass().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.deepCopy()
334         m2.convertQuadraticCellsToLinear() ; m2.checkConsistency()
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.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),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.computeCellCenterOfMass().isEqual(exp,1e-12))
342         # spaceDim=3 TRI3 becomes TRI2 ... for the moment
343         tri32D.changeSpaceDimension(3)
344         tri2=tri32D.deepCopy() ; tri2.convertQuadraticCellsToLinear()
345         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),float(tri2.getMeasureField(False).getArray()),13)
346         self.assertTrue(tri32D.computeCellCenterOfMass().isEqual(tri2.computeCellCenterOfMass(),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.deepCopy()
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.deepCopy()
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 range(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.checkConsistencyLight()
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.checkConsistencyLight()
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 range(1, maxNbCSN + 1):
541             ids=nbOfCellsSharingNodes.findIdsEqual(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.checkConsistencyLight()
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.deepCopy() ;  a2[ids]+=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
564         a2=a.deepCopy() ;  a2[ids]*=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
565         a2=a.deepCopy() ;  a2[ids]/=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
566         a2=a.deepCopy() ;  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.checkConsistencyLight()
594         m.checkConsistency()
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, list(range(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(False)
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.checkConsistency()
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().deepCopy())
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.checkConsistencyLight() ; m.checkConsistency() ; m.checkConsistency()
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.deepCopy() ; mcpy.insertNextCell([1,0,6,7])
725         c=m.getNodalConnectivity().deepCopy()
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.checkConsistency()
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.deepCopy() ; 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.deepCopy() ; 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().deepCopy()
773         c3=mcpy.getNodalConnectivity()[:]
774         mcpy.getNodalConnectivity().setIJ(int(c3.findIdsEqual(11)),0,24)
775         c2=DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()[11:]])
776         mcpy.setCoords(c2)
777         mcpy.checkConsistency()
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.checkConsistency()
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.checkConsistency()
798         ##
799         mcppy=mcpy.deepCopyConnectivityOnly()
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.deepCopy()
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.ExtractFromIndexedArraysSlice(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.checkConsistencyLight()
863         m.checkConsistency()
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.deepCopyConnectivityOnly()
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.checkConsistencyLight()
890         m.checkConsistency()
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.deepCopy()
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.deepCopy()
928         m3=m.deepCopyConnectivityOnly()
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.checkConsistencyLight()
947         mcpy0.checkConsistency()
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.checkConsistency()
967         self.assertTrue(not m_mrg2.isPacked())
968         m_mrg4,b=m_mrg2.copyWithNodalConnectivityPacked()
969         self.assertTrue(not b)
970         m_mrg4.checkConsistency()
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.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
1102         a,b=c2.buildPartAndReduceNodes(d20)
1103         a.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistency()
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.checkConsistency()
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.checkConsistency()
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.checkConsistency()
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.checkConsistency()
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.checkConsistency()
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.checkConsistency()
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.checkConsistency()
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.checkConsistencyLight();
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 range(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.checkConsistencyLight()
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.deepCopy() ; 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 testSwig2MeshOrientCorrectly2DCells1(self):
1487         m=MEDCouplingUMesh("mesh",2)
1488         coo=DataArrayDouble([1.,0.,0.5,-0.1,0.,1.,0.,0.,0.07,0.5,0.59,0.5],6,2)
1489         m.setCoords(coo)
1490         m.allocateCells()
1491         m.insertNextCell(NORM_TRI6,[3,0,2,1,5,4])
1492         m.insertNextCell(NORM_QPOLYG,[3,0,2,1,5,4])
1493         self.assertTrue(DataArrayDouble([-0.58093333350930543,-0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1494         m.changeSpaceDimension(3)
1495         m.orientCorrectly2DCells([0.,0.,-1.],False)
1496         #
1497         m.checkConsistencyLight()
1498         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([6,3,2,0,4,5,1, 32,3,2,0,4,5,1])))
1499         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14])))
1500         m.changeSpaceDimension(2)
1501         self.assertTrue(DataArrayDouble([0.58093333350930543,0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1502         pass
1503
1504     def testSwig2Hexa8HavingFacesWarped1(self):
1505         """ 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
1506         intersected with src the sum of intersection volume is greater than the volume of the trg cell.
1507         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
1508         GENERAL_24).
1509         """
1510         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)
1511         src=MEDCouplingUMesh("TBmesh3D",3) ; src.setCoords(srcCoo)
1512         src.allocateCells()
1513         src.insertNextCell(NORM_HEXA8,[0,1,4,3,8,9,12,11])
1514         src.insertNextCell(NORM_HEXA8,[1,2,5,4,9,10,13,12])
1515         src.insertNextCell(NORM_HEXA8,[4,5,7,6,12,13,15,14])
1516         src.insertNextCell(NORM_HEXA8,[8,9,12,11,16,17,20,19])
1517         src.insertNextCell(NORM_HEXA8,[9,10,13,12,17,18,21,20])
1518         src.checkConsistency()
1519         # trg is useless here but I keep it in case of MEDCouplingRemapper were expected to do something about warped NORM_HEXA8
1520         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)
1521         trg=MEDCouplingUMesh("MESH",3) ; trg.setCoords(trgCoo)
1522         trg.allocateCells()
1523         trg.insertNextCell(NORM_HEXA8,[0,1,3,2,4,5,7,6])
1524         #
1525         srcFace=src.buildDescendingConnectivity()[0]
1526         conn=MEDCoupling1SGTUMesh(srcFace).getNodalConnectivity() ; conn.rearrange(4)
1527         eqFaces=srcFace.computePlaneEquationOf3DFaces()
1528         nodeIdInCell=3
1529         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
1530         lambd=-e/(eqFaces[:,:3]**2).sumPerTuple()
1531         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
1532         shouldBeZero=(pts*eqFaces[:,:-1]).sumPerTuple()+eqFaces[:,3]# this line is useless only to be sure that pts are on the plane.
1533         check=(pts-srcFace.getCoords()[conn[:,nodeIdInCell]]).magnitude() # check contains the distance of the last point to its plane
1534         idsToTest=check.findIdsNotInRange(0.,1e-10)
1535         self.assertTrue(idsToTest.isEqual(DataArrayInt([17,18,19,20,22,23,24])))
1536         idsToTest2=idsToTest.findIdsNotInRange(18,22)
1537         self.assertTrue(idsToTest2.isEqual(DataArrayInt([0,4,5,6])))
1538         idsToTest2.rearrange(2)
1539         self.assertTrue(idsToTest2.sumPerTuple().isEqual(DataArrayInt([4,11])))
1540         pass
1541
1542     def testSwig2SortHexa8EachOther1(self):
1543         """
1544         testing MEDCoupling1SGTUMesh.sortHexa8EachOther method
1545         """
1546         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)])
1547         m1=MEDCouplingUMesh("m1",3) ; m1.setCoords(coords1)
1548         m1.allocateCells() ; m1.insertNextCell(NORM_HEXA8,[7,1,3,0,6,4,2,5])
1549         m1.checkConsistencyLight()
1550         #
1551         m2=m1.deepCopy() ; m2.setName("m2")
1552         #
1553         trs=[[0.,0.,-1.],[0.,0.,1.],[1.,0.,0.],[0.,-1.,0.],[-1.,0.,0.],[0.,1.,0.]]
1554         for i,t in enumerate(trs):
1555             for j in range(64):
1556                 j2=(j//16) ; j1=((j%16)//4) ; j0=(j%4)
1557                 m11=m1.deepCopy()
1558                 m11.rotate([0.,0.,0.],[0.,0.,1.],float(j0)*pi/2)
1559                 m11.rotate([0.,0.,0.],[0.,1.,0.],float(j1)*pi/2)
1560                 m11.rotate([0.,0.,0.],[1.,0.,0.],float(j2)*pi/2)
1561                 m11.translate(t)
1562                 #
1563                 m=MEDCouplingUMesh.MergeUMeshes(m2,m11)
1564                 m.mergeNodes(1e-12)
1565                 self.assertEqual(12,m.getNumberOfNodes())
1566                 m=MEDCoupling1SGTUMesh(m)
1567                 m.sortHexa8EachOther()
1568                 tmp0=m.buildUnstructured().tetrahedrize(PLANAR_FACE_6)[0].buildUnstructured()
1569                 self.assertEqual(20,tmp0.computeSkin().getNumberOfCells())
1570                 pass
1571             pass
1572         pass
1573
1574     def testSwig2normMinComputeAbs1(self):
1575         d=DataArrayDouble([4,-5,2,6.1,-7.33,1,-1,3e2,0.07,-0.009,-6,-1e30],4,3)
1576         d.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1577         d0=d.computeAbs()
1578         dExp=d.deepCopy() ; dExp.abs()
1579         self.assertTrue(dExp.isEqual(d0,1e-12))
1580         e=d0-DataArrayDouble([4,5,2,6.1,7.33,1,1,3e2,0.07,0.009,6,1e30],4,3)
1581         self.assertAlmostEqual(0.,e.normMin(),13)
1582         self.assertAlmostEqual(0.009,d.normMin(),13)
1583         #
1584         di=DataArrayInt([3,-12,5,6,14,16,-23,100,23,-1,0,-6],4,3)
1585         di.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1586         d0i=di.computeAbs()
1587         diExp=di.deepCopy() ; diExp.abs()
1588         self.assertTrue(diExp.isEqual(d0i))
1589         self.assertEqual([3,12,5,6,14,16,23,100,23,1,0,6],d0i.getValues())
1590         pass
1591
1592     def testSwig2GetCellsContainingPointsForNonConvexPolygon1(self):
1593         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)
1594         m=MEDCouplingUMesh("Intersect2D",2) ; m.setCoords(coo) ; m.allocateCells()
1595         m.insertNextCell(NORM_POLYGON,[6,3,4,5])
1596         m.insertNextCell(NORM_POLYGON,[4,0,1,2,6,5])
1597         m.checkConsistency()
1598         #
1599         self.assertTrue(m.getCellsContainingPoint((0.4,-0.4),1e-12).isEqual(DataArrayInt([0])))
1600         self.assertTrue(m.getCellsContainingPoint((-0.4,-0.4),1e-12).isEqual(DataArrayInt([1])))
1601         self.assertTrue(m.getCellsContainingPoint((0.,-0.4),1e-12).isEqual(DataArrayInt([0,1])))
1602         pass
1603
1604     def testSwig2GetCellsContainingPointsForNonConvexPolygon2(self):
1605         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)
1606         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1607         m.insertNextCell(NORM_QPOLYG,[8,5,4,9])
1608         m.insertNextCell(NORM_QPOLYG,[5,8,4,10])
1609         m.insertNextCell(NORM_QPOLYG,[16,8,5,15,21,9,22,17])
1610         m.insertNextCell(NORM_QPOLYG,[15,1,2,3,16,20,6,7,19,17])
1611         m.insertNextCell(NORM_QPOLYG,[15,5,8,16,22,10,21,18])
1612         m.insertNextCell(NORM_QPOLYG,[16,3,0,1,15,19,11,12,20,18])
1613         m.checkConsistency()
1614         self.assertTrue(m.getCellsContainingPoint([0.,0.27],1e-12).isEqual(DataArrayInt([2])))
1615         pass
1616
1617     def testSwig2DAIGetIdsEqualTuple1(self):
1618         da=DataArrayInt([0,7,1,2,4,1,2,1,1,2,0,1,2,1,5,1,1,2],9,2)
1619         self.assertTrue(da.findIdsEqualTuple([1,2]).isEqual(DataArrayInt([1,4,8])))
1620         self.assertTrue(da.findIdsEqualTuple((1,2)).isEqual(DataArrayInt([1,4,8])))
1621         self.assertTrue(da.findIdsEqualTuple(DataArrayInt([1,2])).isEqual(DataArrayInt([1,4,8])))
1622         da.rearrange(3)
1623         self.assertRaises(InterpKernelException,da.findIdsEqualTuple,[1,2])# mismatch nb of compo (3) and nb of elts in input tuple (2)
1624         self.assertTrue(da.findIdsEqualTuple([2,0,1]).isEqual(DataArrayInt([3])))
1625         self.assertTrue(da.findIdsEqualTuple([2,0,7]).isEqual(DataArrayInt([])))
1626         da.rearrange(1)
1627         self.assertTrue(da.findIdsEqualTuple(2).isEqual(DataArrayInt([3,6,9,12,17])))
1628         self.assertTrue(da.findIdsEqualTuple(2).isEqual(da.findIdsEqual(2)))
1629         pass
1630
1631     def testSwig2GaussNEStaticInfo1(self):
1632         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetWeightArrayFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.16666666666666666]),1e-12))
1633         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetRefCoordsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.,0.,1.,0.,0.,1.]),1e-12))
1634         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetLocsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.6666666666666667,0.16666666666666666,0.16666666666666666,0.6666666666666667]),1e-12))
1635         pass
1636
1637     def testSwigReverseNodalConnOnStructuredMesh(self):
1638         # 1D - standard
1639         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
1640         c.setCoordsAt(0,arr)
1641         rn,rni=c.getReverseNodalConnectivity()
1642         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1643         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1644         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1645         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1646         # 1D - limit
1647         c=MEDCouplingCMesh() ; arr=DataArrayDouble(1) ; arr.iota()
1648         c.setCoordsAt(0,arr)
1649         rn,rni=c.getReverseNodalConnectivity()
1650         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1651         self.assertTrue(rn.isEqual(DataArrayInt([0])))
1652         self.assertTrue(rni.isEqual(DataArrayInt([0,1])))
1653         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1654         # 1D - limit
1655         c=MEDCouplingCMesh() ; arr=DataArrayDouble(0) ; arr.iota()
1656         c.setCoordsAt(0,arr)
1657         rn,rni=c.getReverseNodalConnectivity()
1658         rn.isEqual(DataArrayInt([]))
1659         rni.isEqual(DataArrayInt([0]))
1660         # 2D - standard
1661         c=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; arr2=DataArrayDouble(4) ; arr.iota()
1662         c.setCoords(arr,arr2)
1663         rn,rni=c.getReverseNodalConnectivity()
1664         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1665         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])))
1666         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])))
1667         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1668         # 2D - limit
1669         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1670         c.setCoords(arr,arr2)
1671         rn,rni=c.getReverseNodalConnectivity()
1672         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1673         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1674         # 2D - limit
1675         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1676         c.setCoords(arr2,arr)
1677         rn,rni=c.getReverseNodalConnectivity()
1678         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1679         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1680         # 3D - standard
1681         c=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(3) ; arr1.iota() ; arr2=DataArrayDouble(4) ; arr2.iota()
1682         c.setCoords(arr0,arr1,arr2)
1683         rn,rni=c.getReverseNodalConnectivity()
1684         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])))
1685         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])))
1686         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1687         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1688         pass
1689
1690     def testSwig2CellToNodeDiscretization1(self):
1691         m=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(4) ; arr1.iota() ; m.setCoords(arr0,arr1)
1692         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(m) ; f.setTime(1.1,5,6)
1693         arr=DataArrayDouble(12) ; arr.iota()
1694         arr=DataArrayDouble.Meld(arr,arr+100.) ; arr.setInfoOnComponents(["aaa","bbb"])
1695         f.setArray(arr)
1696         f.checkConsistencyLight()
1697         #
1698         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.])
1699         ref=DataArrayDouble.Meld(ref,ref+100.) ; ref.setInfoOnComponents(["aaa","bbb"])
1700         f2=f.cellToNodeDiscretization()
1701         f2.checkConsistencyLight()
1702         self.assertEqual(f2.getTime()[1:],[5,6])
1703         self.assertAlmostEqual(f2.getTime()[0],1.1,15)
1704         self.assertEqual(f2.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
1705         self.assertTrue(f2.getArray().isEqual(ref,1e-12))
1706         rn,rni=m.getReverseNodalConnectivity()
1707         rni2=(rni.deltaShiftIndex()).convertToDblArr()
1708         arr2=(f.getArray()[rn]).accumulatePerChunck(rni)/rni2
1709         self.assertTrue(f2.getArray().isEqual(arr2,1e-12))
1710         del f2
1711         #
1712         u=m.buildUnstructured() ; f.setMesh(u) ; del m
1713         f3=f.cellToNodeDiscretization()
1714         f3.checkConsistencyLight()
1715         self.assertEqual(f3.getTime()[1:],[5,6])
1716         self.assertAlmostEqual(f3.getTime()[0],1.1,15)
1717         self.assertEqual(f3.getMesh().getHiddenCppPointer(),u.getHiddenCppPointer())
1718         self.assertTrue(f3.getArray().isEqual(ref,1e-12))
1719         pass
1720
1721     def testSwig2GetMeshSpaceDimensionCMesh1(self):
1722         c=MEDCouplingCMesh()
1723         arr0=DataArrayDouble([0,1,2])
1724         arr1=DataArrayDouble([0])
1725         c.setCoords(arr0,arr0,arr0)
1726         self.assertEqual(c.getMeshDimension(),3)
1727         self.assertEqual(c.getSpaceDimension(),3)
1728         #
1729         c.setCoords(arr0,arr0,arr1)
1730         self.assertEqual(c.getMeshDimension(),2)
1731         self.assertEqual(c.getSpaceDimension(),3)
1732         #
1733         c.setCoords(arr0,arr0)
1734         self.assertEqual(c.getMeshDimension(),2)
1735         self.assertEqual(c.getSpaceDimension(),2)
1736         #
1737         c.setCoords(arr0,arr1)
1738         self.assertEqual(c.getMeshDimension(),1)
1739         self.assertEqual(c.getSpaceDimension(),2)
1740         #
1741         c.setCoords(arr0)
1742         self.assertEqual(c.getMeshDimension(),1)
1743         self.assertEqual(c.getSpaceDimension(),1)
1744         #
1745         c.setCoords(arr1)
1746         self.assertEqual(c.getMeshDimension(),0)
1747         self.assertEqual(c.getSpaceDimension(),1)
1748         pass
1749
1750     def testSwig2BuildSpreadZonesWithPolyOnQPolyg1(self):
1751         nx=6
1752         ny=6
1753         m=MEDCouplingCMesh()
1754         arr1=DataArrayDouble(nx) ; arr1.iota()
1755         arr2=DataArrayDouble(ny) ; arr2.iota()
1756         m.setCoords(arr1,arr2)
1757         m=m.buildUnstructured()
1758         da=DataArrayInt.Range(nx-1,(nx-1)*(ny-1),nx)
1759         m2=m[da] ; m2.simplexize(0)
1760         dan=da.buildComplement(m.getNumberOfCells())
1761         m1=m[dan]
1762         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1763         #
1764         m.convertLinearCellsToQuadratic()
1765         m1=m[::2] ; m2=m[1::2] ; m2.convertAllToPoly()
1766         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1767         p=m.buildSpreadZonesWithPoly()
1768         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])))
1769         self.assertTrue(p.getNodalConnectivityIndex().isEqual(DataArrayInt([0,41])))
1770         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))
1771         pass
1772
1773     def testSwigExtendedSlice1(self):
1774         d=DataArrayInt([5,6,7])
1775         self.assertTrue(d[2:].isEqual(DataArrayInt([7])))
1776         self.assertTrue(d[3:].isEqual(DataArrayInt([])))
1777         try:
1778             d[4:]
1779         except InterpKernelException as e:
1780             self.assertTrue(True)
1781         else:
1782             self.assertTrue(False)
1783             pass
1784         d=DataArrayInt([5,6,7,8])
1785         self.assertEqual(d[-1],8)
1786         self.assertEqual(d[-4],5)
1787         try:
1788             d[-5]
1789         except InterpKernelException as e:
1790             self.assertTrue(True)
1791         else:
1792             self.assertTrue(False)
1793             pass
1794         self.assertTrue(d[2::-1].isEqual(DataArrayInt([7,6,5])))
1795         self.assertTrue(d[0::-1].isEqual(DataArrayInt([5])))
1796         self.assertTrue(d[-1::-1].isEqual(DataArrayInt([8,7,6,5])))
1797         self.assertTrue(d[-3::-1].isEqual(DataArrayInt([6,5])))
1798         self.assertTrue(d[-5::-1].isEqual(DataArrayInt([])))
1799         try:
1800             d[-6::-1]
1801         except InterpKernelException as e:
1802             self.assertTrue(True)
1803         else:
1804             self.assertTrue(False)
1805             pass
1806         d=DataArrayInt([])
1807         self.assertTrue(d[0:].isEqual(DataArrayInt([])))
1808         #
1809         d=DataArrayDouble([5,6,7])
1810         self.assertTrue(d[2:].isEqual(DataArrayDouble([7]),1e-12))
1811         self.assertTrue(d[3:].isEqual(DataArrayDouble([]),1e-12))
1812         try:
1813             d[4:]
1814         except InterpKernelException as e:
1815             self.assertTrue(True)
1816         else:
1817             self.assertTrue(False)
1818             pass
1819         d=DataArrayDouble([5,6,7,8])
1820         self.assertAlmostEqual(d[-1],8.,12)
1821         self.assertAlmostEqual(d[-4],5.,12)
1822         try:
1823             d[-5]
1824         except InterpKernelException as e:
1825             self.assertTrue(True)
1826         else:
1827             self.assertTrue(False)
1828             pass
1829         self.assertTrue(d[2::-1].isEqual(DataArrayDouble([7,6,5]),1e-12))
1830         self.assertTrue(d[0::-1].isEqual(DataArrayDouble([5]),1e-12))
1831         self.assertTrue(d[-1::-1].isEqual(DataArrayDouble([8,7,6,5]),1e-12))
1832         self.assertTrue(d[-3::-1].isEqual(DataArrayDouble([6,5]),1e-12))
1833         self.assertTrue(d[-5::-1].isEqual(DataArrayDouble([]),1e-12))
1834         try:
1835             d[-6::-1]
1836         except InterpKernelException as e:
1837             self.assertTrue(True)
1838         else:
1839             self.assertTrue(False)
1840             pass
1841         d=DataArrayDouble([])
1842         self.assertTrue(d[0:].isEqual(DataArrayDouble([]),1e-12))
1843         pass
1844
1845     def testSwig2Hexa27GP1(self):
1846         """ This test focused on shape functions of hexa27.
1847         """
1848         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.]])
1849         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1850         m.allocateCells()
1851         # the cell description is exactly those described in the description of HEXA27 in MED file 3.0.7 documentation
1852         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])
1853         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.]
1854         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]
1855         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]
1856         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1857         fGauss.setMesh(m)
1858         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1859         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1860         fGauss.setArray(arr)
1861         arrOfDisc=fGauss.getLocalizationOfDiscr()
1862         # the test is here
1863         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))
1864         #
1865         weights=27*[1]
1866         gCoords=refCoo
1867         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1868         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1869         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1870         pass
1871
1872     def testSwig2Pyra13GP1(self):
1873         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.]])
1874         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1875         m.allocateCells()
1876         # the cell description is exactly those described in the description of PYRA13 in MED file 3.0.7 documentation
1877         m.insertNextCell(NORM_PYRA13,[0,1,2,3,4,5,6,7,8,9,10,11,12])
1878         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]
1879         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]
1880         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]
1881         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1882         fGauss.setMesh(m)
1883         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
1884         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1885         fGauss.setArray(arr)
1886         arrOfDisc=fGauss.getLocalizationOfDiscr()
1887         # the test is here
1888         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))
1889         #
1890         weights=13*[1]
1891         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. !
1892         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
1893         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1894         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. !
1895         pass
1896
1897     def testSwig2Tri7GP1(self):
1898         coo=DataArrayDouble([[0,0],[0,2],[2,0],[0,1],[1,1],[1,0],[0.6666666666666667,0.6666666666666667]])
1899         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
1900         m.allocateCells()
1901         # the cell description is exactly those described in the description of TRI7 in MED file 3.0.7 documentation
1902         m.insertNextCell(NORM_TRI7, list(range(7)))
1903         refCoords=[0.,0.,1.,0.,0.,1.,0.5,0.,0.5,0.5,0.,0.5,0.3333333333333333,0.3333333333333333]
1904         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]
1905         weights=[0.062969590272413,0.062969590272413,0.062969590272413,0.066197076394253,0.066197076394253,0.066197076394253,0.1125]
1906         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1907         fGauss.setMesh(m)
1908         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
1909         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1910         fGauss.setArray(arr)
1911         arrOfDisc=fGauss.getLocalizationOfDiscr()
1912         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))
1913         #
1914         weights=7*[1]
1915         gaussCoords=refCoords
1916         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
1917         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1918         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1919         pass
1920
1921     def testSwig2StructuredDesc1(self):
1922         c=MEDCouplingCMesh()
1923         arr0=DataArrayDouble(3) ; arr0.iota()
1924         arr1=DataArrayDouble(4) ; arr1.iota()
1925         arr2=DataArrayDouble(5) ; arr2.iota()
1926         c.setCoords(arr0,arr1,arr2)
1927         #
1928         self.assertEqual(98,c.getNumberOfCellsOfSubLevelMesh())
1929         m=c.build1SGTSubLevelMesh()
1930         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])))
1931         self.assertEqual(NORM_QUAD4,m.getCellModelEnum())
1932         #
1933         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])))
1934         pass
1935
1936     def testSwig2Colinearize2D1(self):
1937         coo=DataArrayDouble([-5.,0.,-1.,0.,4.,3.,7.,0.,1.,6.,1.,0.,-3.,0.,6.,1.,5.,0.,3.,0.],10,2)
1938         #
1939         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1940         m.insertNextCell(NORM_POLYGON,[5,9,8,3,7,2,4,0,6,1])
1941         refPtr=m.getCoords().getHiddenCppPointer()
1942         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1943         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1944         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1945         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1946         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
1947         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1948         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1949         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1950         #
1951         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1952         m.insertNextCell(NORM_POLYGON,[8,3,7,2,4,0,6,1,5,9])
1953         refPtr=m.getCoords().getHiddenCppPointer()
1954         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1955         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1956         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1957         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1958         #
1959         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1960         m.insertNextCell(NORM_POLYGON,[3,7,2,4,0,6,1,5,9,8])
1961         refPtr=m.getCoords().getHiddenCppPointer()
1962         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1963         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1964         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,3,4,0])))
1965         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1966         #
1967         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1968         m.insertNextCell(NORM_POLYGON,[4,0,6,1,5,9,8,3,7,2,])
1969         refPtr=m.getCoords().getHiddenCppPointer()
1970         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1971         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1972         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,4,0,3])))
1973         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1974         ## false quadratic
1975         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)])
1976         coo2.setInfoOnComponents(["aa","bbbb"])
1977         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
1978         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
1979         refPtr=m.getCoords().getHiddenCppPointer()
1980         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1981         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
1982         self.assertEqual(["aa","bbbb"],m.getCoords().getInfoOnComponents())
1983         refPtr=m.getCoords().getHiddenCppPointer()
1984         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
1985         self.assertTrue(m.getCoords()[20:].isEqualWithoutConsideringStr(DataArrayDouble([(1.,0.),(4.,3.)]),1e-12))
1986         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
1987         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
1988         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
1989         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1990         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
1991         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
1992         # mix of quadratic and linear inside a QPOLYG cell
1993         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)])
1994         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
1995         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
1996         refPtr=m.getCoords().getHiddenCppPointer()
1997         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1998         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
1999         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
2000         self.assertTrue(m.getCoords()[20:].isEqual(DataArrayDouble([(1.,0.),(7.,6.)]),1e-12))
2001         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
2002         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
2003         pass
2004
2005     def testSwig2BoundingBoxForBBTree1(self):
2006         """ 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 !
2007         """
2008         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)
2009         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2010         m.allocateCells()
2011         m.insertNextCell(NORM_QPOLYG,[0,1,2,3,11,5,7,9,12,13,14,17,4,6,8,16])
2012         m.insertNextCell(NORM_QPOLYG,[3,0,9,11,15,16,10,17])
2013         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))
2014         pass
2015
2016     def testSwig2CartBuildUnstructuredOnExoticCases1(self):
2017         """ Test focusing on traduction from cartesian to unstructured mesh when spaceDim greater than meshDim.
2018         """
2019         #
2020         m=MEDCouplingCMesh()
2021         arrX=DataArrayDouble(3) ; arrX.iota()
2022         arrY=DataArrayDouble(4) ; arrY.iota()
2023         arrZ=DataArrayDouble(1) ; arrZ.iota()
2024         m.setCoords(arrX,arrY,arrZ)
2025         self.assertEqual(2,m.getMeshDimension())
2026         self.assertEqual(3,m.getSpaceDimension())
2027         mu=m.buildUnstructured()
2028         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])))
2029         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2030         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)])
2031         self.assertTrue(mu.getCoords().isEqual(coo0,1e-12))
2032         #
2033         m=MEDCouplingCMesh()
2034         arrX=DataArrayDouble(3) ; arrX.iota()
2035         arrY=DataArrayDouble(1) ; arrY.iota()
2036         arrZ=DataArrayDouble(4) ; arrZ.iota()
2037         m.setCoords(arrX,arrY,arrZ)
2038         self.assertEqual(2,m.getMeshDimension())
2039         self.assertEqual(3,m.getSpaceDimension())
2040         mu=m.buildUnstructured()
2041         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])))
2042         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2043         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)])
2044         self.assertTrue(mu.getCoords().isEqual(coo1,1e-12))
2045         #
2046         m=MEDCouplingCMesh()
2047         arrX=DataArrayDouble(1) ; arrX.iota() ; arrX+=9
2048         arrY=DataArrayDouble(3) ; arrY.iota()
2049         arrZ=DataArrayDouble(4) ; arrZ.iota()
2050         m.setCoords(arrX,arrY,arrZ)
2051         self.assertEqual(2,m.getMeshDimension())
2052         self.assertEqual(3,m.getSpaceDimension())
2053         mu=m.buildUnstructured()
2054         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])))
2055         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2056         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)])
2057         self.assertTrue(mu.getCoords().isEqual(coo2,1e-12))
2058         #
2059         m=MEDCouplingCMesh()
2060         arrX=DataArrayDouble(3) ; arrX.iota()
2061         arrY=DataArrayDouble(1) ; arrY.iota(7)
2062         arrZ=DataArrayDouble(1) ; arrZ.iota(8)
2063         m.setCoords(arrX,arrY,arrZ)
2064         self.assertEqual(1,m.getMeshDimension())
2065         self.assertEqual(3,m.getSpaceDimension())
2066         mu=m.buildUnstructured()
2067         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2068         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2069         coo3=DataArrayDouble([(0,7,8),(1,7,8),(2,7,8)])
2070         self.assertTrue(mu.getCoords().isEqual(coo3,1e-12))
2071         #
2072         m=MEDCouplingCMesh()
2073         arrX=DataArrayDouble(1) ; arrX.iota(7)
2074         arrY=DataArrayDouble(1) ; arrY.iota(8)
2075         arrZ=DataArrayDouble(3) ; arrZ.iota()
2076         m.setCoords(arrX,arrY,arrZ)
2077         self.assertEqual(1,m.getMeshDimension())
2078         self.assertEqual(3,m.getSpaceDimension())
2079         mu=m.buildUnstructured()
2080         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2081         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2082         coo4=DataArrayDouble([(7,8,0),(7,8,1),(7,8,2)])
2083         self.assertTrue(mu.getCoords().isEqual(coo4,1e-12))
2084         #
2085         m=MEDCouplingCMesh()
2086         arrX=DataArrayDouble(3) ; arrX.iota()
2087         arrY=DataArrayDouble(1) ; arrY.iota(7)
2088         m.setCoords(arrX,arrY)
2089         self.assertEqual(1,m.getMeshDimension())
2090         self.assertEqual(2,m.getSpaceDimension())
2091         mu=m.buildUnstructured()
2092         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2093         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2094         coo5=DataArrayDouble([(0,7),(1,7),(2,7)])
2095         self.assertTrue(mu.getCoords().isEqual(coo5,1e-12))
2096         #
2097         m=MEDCouplingCMesh()
2098         arrX=DataArrayDouble(1) ; arrX.iota(7)
2099         arrY=DataArrayDouble(3) ; arrY.iota()
2100         m.setCoords(arrX,arrY)
2101         self.assertEqual(1,m.getMeshDimension())
2102         self.assertEqual(2,m.getSpaceDimension())
2103         mu=m.buildUnstructured()
2104         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2105         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2106         coo6=DataArrayDouble([(7,0),(7,1),(7,2)])
2107         self.assertTrue(mu.getCoords().isEqual(coo6,1e-12))
2108         pass
2109
2110     def testSwig2Colinearize2D2(self):
2111         """ simple non regression test but that has revealed a bug"""
2112         coo=DataArrayDouble([(0,0),(0,0.5),(0,1),(1,1),(1,0),(0.5,0)])
2113         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2114         m.allocateCells() ; m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
2115         m.checkConsistency()
2116         refPtr=m.getCoords().getHiddenCppPointer()
2117         #
2118         m.colinearize2D(1e-12)
2119         m.checkConsistency()
2120         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2121         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_POLYGON,0,2,3,4])))
2122         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5])))
2123         pass
2124
2125     def testSwig2Colinearize2D3(self):
2126         """ colinearize was too agressive, potentially producing cells with one edge """
2127         # Flat polygon  with 3 edges - nothing should happen (min number of edges for a linear polyg)
2128         coo = DataArrayDouble([0.0,0.0,  2.0,0.0,   1.5,0.0,  1.0,0.0,  0.5,0.0], 5,2)
2129         m = MEDCouplingUMesh("m", 2)
2130         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2], [0,4]] ]
2131         m.setCoords(coo); m.setConnectivity(c, cI)
2132         m.colinearize2D(1e-10)
2133         m.checkConsistency()
2134         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2135         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2136
2137         # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg)
2138         m = MEDCouplingUMesh("m", 2)
2139         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,  2,3], [0,5]] ]
2140         m.setCoords(coo); m.setConnectivity(c, cI)
2141         m.colinearize2D(1e-10)
2142         m.checkConsistency()
2143         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2144         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2145
2146         # Flat polygon, 4 edges - one reduction should happen
2147         m = MEDCouplingUMesh("m", 2)
2148         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2,3], [0,5]] ]
2149         m.setCoords(coo); m.setConnectivity(c, cI)
2150         m.colinearize2D(1e-10)
2151         m.checkConsistency()
2152         self.assertEqual([NORM_POLYGON, 3,1,2], m.getNodalConnectivity().getValues())
2153         self.assertEqual([0,4], m.getNodalConnectivityIndex().getValues())
2154
2155         # Flat quad polygon, 3 edges - one reduction expected
2156         m = MEDCouplingUMesh("m", 2)
2157         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,3,  3,2,4], [0,7]] ]
2158         m.setCoords(coo); m.setConnectivity(c, cI)
2159         m.colinearize2D(1e-10)
2160         m.checkConsistency()
2161         self.assertEqual([NORM_QPOLYG, 3,1, 5,2], m.getNodalConnectivity().getValues())
2162         self.assertTrue( m.getCoords()[5].isEqual( DataArrayDouble([(1.5,0.0)]), 1.0e-12 ) )
2163         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2164
2165         # Now an actual (neutronic) case: circle made of 4 SEG3. Should be reduced to 2 SEG3
2166         m = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 1.0)
2167         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 7,5,3,1,  6,4,2,0], [0,9]] ]
2168         m.colinearize2D(1e-10)
2169         m.checkConsistency()
2170         self.assertEqual([NORM_QPOLYG, 3,5,  8,4], m.getNodalConnectivity().getValues())
2171         self.assertTrue( m.getCoords()[8].isEqual( DataArrayDouble([(1.0,0.0)]), 1.0e-12 ) )
2172         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2173
2174     def testSwig2CheckAndPreparePermutation2(self):
2175         a=DataArrayInt([10003,9999999,5,67])
2176         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([2,3,0,1])))
2177         a=DataArrayInt([10003,-9999999,5,67])
2178         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([3,0,1,2])))
2179         a=DataArrayInt([])
2180         self.assertTrue(DataArrayInt.checkAndPreparePermutation(a).isEqual(DataArrayInt([])))
2181         pass
2182
2183     def testSwig2ComputeNeighborsOfNodes1(self):
2184         arrX=DataArrayDouble(3) ; arrX.iota()
2185         arrY=DataArrayDouble(4) ; arrY.iota()
2186         arrZ=DataArrayDouble(5) ; arrZ.iota()
2187         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
2188         # 3D
2189         a,b=m.computeNeighborsOfNodes()
2190         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])))
2191         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])))
2192         # 2D
2193         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m=m.buildUnstructured()
2194         a,b=m.computeNeighborsOfNodes()
2195         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])))
2196         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2197         # 1D
2198         m=m.buildDescendingConnectivity()[0]
2199         a,b=m.computeNeighborsOfNodes()
2200         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])))
2201         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2202         pass
2203
2204     def testSwigBugOnUnpackingTuplesInDataArray1(self):
2205         inp=DataArrayDouble([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2206         it=inp.__iter__()
2207         r = next(it)
2208         self.assertRaises(StopIteration,r.__getitem__,4)
2209         self.assertEqual(len(r),3)
2210         a,b,c=r
2211         r = next(it)
2212         self.assertEqual(len(r),3)
2213         d,e,f=r
2214         r = next(it)
2215         self.assertEqual(len(r),3)
2216         g,h,i=r
2217         r = next(it)
2218         self.assertEqual(len(r),3)
2219         j,k,l=r
2220         self.assertTrue(inp.isEqual(DataArrayDouble([a,b,c,d,e,f,g,h,i,j,k,l],4,3),1e-12))
2221         ########
2222         inp=DataArrayInt([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2223         it=inp.__iter__()
2224         r = next(it)
2225         self.assertRaises(StopIteration,r.__getitem__,4)
2226         self.assertEqual(len(r),3)
2227         a,b,c=r
2228         r = next(it)
2229         self.assertEqual(len(r),3)
2230         d,e,f=r
2231         r = next(it)
2232         self.assertEqual(len(r),3)
2233         g,h,i=r
2234         r = next(it)
2235         self.assertEqual(len(r),3)
2236         j,k,l=r
2237         self.assertTrue(inp.isEqual(DataArrayInt([a,b,c,d,e,f,g,h,i,j,k,l],4,3)))
2238         pass
2239
2240     def testSwig2IMesh1(self):
2241         """ 1st test of image grid mesh.
2242         """
2243         m=MEDCouplingIMesh()
2244         self.assertEqual(m.getSpaceDimension(),-1)
2245         self.assertEqual(1,len(m.__repr__().split("\n")))
2246         self.assertEqual(6,len(m.__str__().split("\n")))
2247         self.assertRaises(InterpKernelException,m.getNodeStruct)
2248         self.assertRaises(InterpKernelException,m.getOrigin)
2249         self.assertRaises(InterpKernelException,m.getDXYZ)
2250         m.setSpaceDimension(3)
2251         self.assertEqual(9,len(m.__str__().split("\n")))
2252         self.assertEqual(4,len(m.__repr__().split("\n")))
2253         self.assertEqual((0,0,0),m.getNodeStruct())
2254         self.assertEqual((0.,0.,0.),m.getOrigin())
2255         self.assertEqual((0.,0.,0.),m.getDXYZ())
2256         self.assertRaises(InterpKernelException,m.setNodeStruct,[3,4])
2257         m.setNodeStruct([3,4,2])
2258         self.assertEqual((3,4,2),m.getNodeStruct())
2259         m.setOrigin(DataArrayDouble([1.5,2.5,3.5]))
2260         self.assertEqual((1.5,2.5,3.5),m.getOrigin())
2261         m.setDXYZ((0.5,1.,0.25))
2262         self.assertEqual((0.5,1.,0.25),m.getDXYZ())
2263         for it in DataArrayDouble([(1.5,2.5,3.5)]):
2264             m2=MEDCouplingIMesh("",3,DataArrayInt([3,4,2]),it,DataArrayDouble((0.5,1.,0.25)))
2265             pass
2266         self.assertEqual(3,m.getSpaceDimension())
2267         self.assertEqual((3,4,2),m2.getNodeStruct())
2268         self.assertEqual((1.5,2.5,3.5),m2.getOrigin())
2269         self.assertEqual((0.5,1.,0.25),m2.getDXYZ())
2270         self.assertEqual(24,m2.getNumberOfNodes())
2271         self.assertEqual(6,m2.getNumberOfCells())
2272         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2273         m2.setAxisUnit("m")
2274         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2275         m.setAxisUnit("m")
2276         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2277         m.setName("mesh")
2278         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2279         m2.setName("mesh")
2280         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2281         m2.setTime(1.1,0,3)
2282         self.assertTrue(not m.isEqual(m2,1e-12))
2283         m.setTime(1.1,0,3)
2284         self.assertTrue(m.isEqual(m2,1e-12))
2285         m.setTimeUnit("ms")
2286         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2287         m2.setTimeUnit("ms")
2288         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2289         #
2290         m2.setNodeStruct([3,2,4])
2291         self.assertTrue(not m.isEqual(m2,1e-12))
2292         m.setNodeStruct([3,2,4])
2293         self.assertTrue(m.isEqual(m2,1e-12))
2294         m.setOrigin(DataArrayDouble([1.5,3.5,2.5]))
2295         self.assertTrue(not m.isEqual(m2,1e-12))
2296         m2.setOrigin([1.5,3.5,2.5])
2297         self.assertTrue(m.isEqual(m2,1e-12))
2298         m.setDXYZ((0.5,0.25,1.))
2299         self.assertTrue(not m.isEqual(m2,1e-12))
2300         m2.setDXYZ(DataArrayDouble((0.5,0.25,1.)))
2301         self.assertTrue(m.isEqual(m2,1e-12))
2302         m2bis=m2.deepCopy()
2303         self.assertTrue(m2bis.isEqual(m2,1e-12))
2304         #
2305         self.assertEqual(6,m2bis.getNumberOfCells())#3,2,4
2306         m2bis.refineWithFactor([3,3,3])
2307         self.assertEqual(162,m2bis.getNumberOfCells())
2308         self.assertEqual((7,4,10),m2bis.getNodeStruct())
2309         self.assertEqual((1.5,3.5,2.5),m2bis.getOrigin())
2310         self.assertTrue(DataArrayDouble([0.16666666666666666,0.08333333333333333,0.3333333333333333]).isEqual(DataArrayDouble(m2bis.getDXYZ()),1e-12))
2311         #
2312         self.assertEqual(3,m.getMeshDimension())
2313         self.assertAlmostEqual(0.125,m.getMeasureOfAnyCell(),16);
2314         mu=MEDCoupling1SGTUMesh(m.buildUnstructured())
2315         mu.checkConsistency()
2316         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]"])
2317         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2318         self.assertEqual(NORM_HEXA8,mu.getCellModelEnum())
2319         self.assertTrue(mu.getCoords().isEqual(cooExp,1e-12))
2320         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])))
2321         bary=m.computeCellCenterOfMass()
2322         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]"])
2323         self.assertTrue(bary.isEqual(baryExp,1e-12))
2324         #
2325         c=m.convertToCartesian()
2326         c.checkConsistencyLight()
2327         self.assertEqual([1.1,0,3],c.getTime())
2328         self.assertEqual("ms",c.getTimeUnit())
2329         self.assertEqual(3,c.getMeshDimension())
2330         self.assertEqual(3,c.getSpaceDimension())
2331         arrX=DataArrayDouble([1.5,2.,2.5]) ; arrX.setInfoOnComponents(["X [m]"])
2332         self.assertTrue(c.getCoordsAt(0).isEqual(arrX,1e-12))
2333         arrY=DataArrayDouble([3.5,3.75]) ; arrY.setInfoOnComponents(["Y [m]"])
2334         self.assertTrue(c.getCoordsAt(1).isEqual(arrY,1e-12))
2335         arrZ=DataArrayDouble([2.5,3.5,4.5,5.5]) ; arrZ.setInfoOnComponents(["Z [m]"])
2336         self.assertTrue(c.getCoordsAt(2).isEqual(arrZ,1e-12))
2337         self.assertTrue(c.buildUnstructured().isEqual(m.buildUnstructured(),1e-12))
2338         #
2339         a,b=m.getCellsContainingPoints(baryExp,1e-12)
2340         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5])))
2341         self.assertTrue(b.isEqual(DataArrayInt([0,1,2,3,4,5,6])))
2342         for a,b in enumerate(baryExp):
2343             self.assertEqual(a,m.getCellContainingPoint(b,1e-12))
2344             pass
2345         #
2346         m.translate([1.,2.,4.])
2347         self.assertEqual((3,2,4),m.getNodeStruct())
2348         self.assertEqual((2.5,5.5,6.5),m.getOrigin())
2349         self.assertEqual((0.5,0.25,1.),m.getDXYZ())
2350         m.scale([0.,1.,3.],2.)
2351         self.assertAlmostEqual(1.,m.getMeasureOfAnyCell(),16);
2352         self.assertEqual((3,2,4),m.getNodeStruct())
2353         self.assertEqual((5.,10.,10.),m.getOrigin())
2354         self.assertEqual((1.,0.5,2.),m.getDXYZ())
2355         #
2356         f=m.getMeasureField(False)
2357         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(1.1,0,3) ; f2.setMesh(m) ; arr=DataArrayDouble(6) ; arr[:]=1. ; f2.setArray(arr) ; f2.setTimeUnit("ms")
2358         f2.setName("MeasureOfMesh_mesh")
2359         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2360         #
2361         m3=m.buildStructuredSubPart([(1,2),(0,1),(1,3)])
2362         self.assertEqual((2,2,3),m3.getNodeStruct())
2363         self.assertEqual((6.,10.,12.),m3.getOrigin())
2364         self.assertEqual((1.,0.5,2.),m3.getDXYZ())
2365         # now playing with 3D surf
2366         m4=MEDCouplingIMesh("",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m4.setAxisUnit("km")
2367         self.assertEqual([(1.5,2.5),(2.5,3.5),(3.5,4.25)],m4.getBoundingBox())
2368         self.assertEqual(3,m4.getSpaceDimension())
2369         self.assertEqual(2,m4.getMeshDimension())
2370         self.assertEqual(12,m4.getNumberOfNodes())
2371         self.assertEqual(6,m4.getNumberOfCells())
2372         mu=MEDCoupling1SGTUMesh(m4.buildUnstructured())
2373         mu.checkConsistency()
2374         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2375         self.assertEqual(NORM_QUAD4,mu.getCellModelEnum())
2376         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]"])
2377         self.assertTrue(mu.getCoords().isEqual(coordsExp,1e-12))
2378         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])))
2379         pass
2380
2381     def testSwig1GetValuesAsTuple1(self):
2382         d=DataArrayDouble()
2383         self.assertEqual(d.getValues(),[])
2384         self.assertEqual(d.getValuesAsTuple(),[])
2385         d=DataArrayDouble(24) ; d.iota() ; d.rearrange(3)
2386         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.])
2387         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.)])
2388         d=DataArrayInt()
2389         self.assertEqual(d.getValues(),[])
2390         self.assertEqual(d.getValuesAsTuple(),[])
2391         d=DataArrayInt(24) ; d.iota() ; d.rearrange(3)
2392         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])
2393         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)])
2394         pass
2395
2396     def testSwig2AMR1(self):
2397         self.assertEqual((1,3,12),MEDCouplingStructuredMesh.GetSplitVectFromStruct([3,4,5]))
2398         self.assertEqual((3,2),MEDCouplingStructuredMesh.GetDimensionsFromCompactFrmt([(1,4),(2,4)]))
2399         #
2400         amr=MEDCouplingCartesianAMRMesh("",2,[3,3],[0,0],[1,1])
2401         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2402         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithOverlap())
2403         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithoutOverlap())
2404         self.assertEqual(0,amr.getNumberOfPatches())
2405         self.assertEqual(1,amr.getMaxNumberOfLevelsRelativeToThis())
2406         self.assertEqual(2,amr.getSpaceDimension())
2407         amr.addPatch([(1,2),(0,1)],[4,4])
2408         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2409         self.assertEqual(20,amr.getNumberOfCellsRecursiveWithOverlap())
2410         self.assertEqual(19,amr.getNumberOfCellsRecursiveWithoutOverlap())
2411         self.assertEqual(1,amr.getNumberOfPatches())
2412         self.assertEqual(2,amr.getMaxNumberOfLevelsRelativeToThis())
2413         self.assertEqual(2,amr.getSpaceDimension())
2414         amr[0].addPatch([(2,3),(1,3)],[3,2])
2415         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2416         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2417         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2418         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2419         self.assertEqual(1,amr.getNumberOfPatches())
2420         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2421         self.assertEqual(2,amr.getSpaceDimension())
2422         amr[0].addPatch([(0,2),(3,4)],[3,2])
2423         self.assertEqual(16,amr[0].getMesh().getNumberOfCellsAtCurrentLevel())
2424         self.assertEqual(44,amr.getNumberOfCellsRecursiveWithOverlap())
2425         self.assertEqual(39,amr.getNumberOfCellsRecursiveWithoutOverlap())
2426         self.assertEqual(2,amr[0].getMesh().getNumberOfPatches())
2427         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2428         self.assertEqual(2,amr.getSpaceDimension())
2429         del amr[0][1]
2430         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2431         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2432         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2433         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2434         self.assertEqual(1,amr.getNumberOfPatches())
2435         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2436         self.assertEqual(2,amr.getSpaceDimension())
2437         pass
2438
2439     def testSwig2NonRegressionTestPAL1164(self):
2440         """ Test PAL1164 Protection of applyLin against error in compoId ( #CEA22584 ) """
2441         xarr=DataArrayDouble(3,1)
2442         xarr.iota(0.)
2443         cmesh=MEDCouplingCMesh()
2444         cmesh.setCoords(xarr,xarr,xarr)
2445         mesh=cmesh.buildUnstructured()
2446         f=mesh.fillFromAnalytic(ON_CELLS,1,"(x-5.)*(x-5.)+(y-5.)*(y-5.)+(z-5.)*(z-5.)")
2447         f.setName("MyField")
2448         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2449         self.assertRaises(InterpKernelException,f.applyLin,2.,0.,1)# compoId 1 whereas f has only one component !
2450         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2451         f.applyLin(2.,0.,0)# here it is OK !
2452         self.assertTrue(f.getArray().isEqual(DataArrayDouble([121.5,105.5,105.5,89.5,105.5,89.5,89.5,73.5]),1e-12))
2453         f.applyLin(2.,0.)
2454         self.assertTrue(f.getArray().isEqual(DataArrayDouble([243.,211.,211.,179.,211.,179.,179.,147.]),1e-12))
2455         pass
2456
2457     def testSwig2StructurizeMe1(self):
2458         arrx=DataArrayDouble(3) ; arrx.iota() ; arrx*=2.
2459         arry=DataArrayDouble(4) ; arry.iota() ; arry+=3.
2460         arrz=DataArrayDouble(5) ; arrz.iota() ; arrz*=0.5 ; arrz+=2.
2461         c=MEDCouplingCMesh() ; c.setCoords(arrx,arry,arrz)
2462         c.setName("mesh") ; c.setDescription("mesh descr") ; c.setTimeUnit("us") ; c.setTime(1.2,3,4)
2463         u=c.buildUnstructured()
2464         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])
2465         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])
2466         u.renumberCells(cp)
2467         u.renumberNodes(np,len(np))
2468         u=MEDCoupling1SGTUMesh(u)
2469         #
2470         e,d,f=u.structurizeMe()
2471         self.assertTrue(c.isEqual(e,1e-12))
2472         self.assertTrue(d.isEqual(cp))
2473         self.assertTrue(f.isEqual(np))
2474         pass
2475
2476     def testSwig2DenseMatrix1(self):
2477         m0=DenseMatrix(DataArrayDouble([2,3,4,5,1,6]),2,3)
2478         self.assertEqual(m0.getNumberOfRows(),2)
2479         self.assertEqual(m0.getNumberOfCols(),3)
2480         self.assertEqual(m0.getNbOfElems(),6)
2481         ref=m0.getData().getHiddenCppPointer()
2482         m00=m0.deepCopy()
2483         self.assertTrue(m0.isEqual(m00,1e-12))
2484         m00.getData().setIJ(0,0,2.1)
2485         self.assertTrue(not m0.isEqual(m00,1e-12))
2486         m00.getData().setIJ(0,0,2.)
2487         self.assertTrue(m0.isEqual(m00,1e-12))
2488         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2489         #
2490         m000=m0*DataArrayDouble([5,9,3])
2491         self.assertTrue(m000.getData().isEqual(DataArrayDouble([49.,52.]),1e-12))
2492         #
2493         m0.reShape(3,2)
2494         self.assertTrue(not m0.isEqual(m00,1e-12))
2495         self.assertEqual(m0.getNumberOfRows(),3)
2496         self.assertEqual(m0.getNumberOfCols(),2)
2497         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2498         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2499         m0.reShape(2,3)
2500         self.assertTrue(m0.isEqual(m00,1e-12))
2501         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2502         self.assertEqual(m0.getNumberOfRows(),2)
2503         self.assertEqual(m0.getNumberOfCols(),3)
2504         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2505         #m0np=m0.getData().toNumPyArray() ; m0np=matrix(m0np.reshape(m0.getNumberOfRows(),m0.getNumberOfCols()))
2506         m1=m0.deepCopy()
2507         self.assertEqual(m1.getNumberOfRows(),2)
2508         self.assertEqual(m1.getNumberOfCols(),3)
2509         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2510         m11=m0.deepCopy() ; m11+=m1
2511         self.assertEqual(m11.getNumberOfRows(),2)
2512         self.assertEqual(m11.getNumberOfCols(),3)
2513         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2514         m11=m11+m1
2515         self.assertEqual(m11.getNumberOfRows(),2)
2516         self.assertEqual(m11.getNumberOfCols(),3)
2517         self.assertTrue(m11.getData().isEqual(DataArrayDouble([6,9,12,15,3,18]),1e-12))
2518         m11=m11-m1
2519         self.assertEqual(m11.getNumberOfRows(),2)
2520         self.assertEqual(m11.getNumberOfCols(),3)
2521         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2522         m11-=m1
2523         self.assertEqual(m1.getNumberOfRows(),2)
2524         self.assertEqual(m1.getNumberOfCols(),3)
2525         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2526         m1.transpose()
2527         self.assertEqual(m1.getNumberOfRows(),3)
2528         self.assertEqual(m1.getNumberOfCols(),2)
2529         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,5,3,1,4,6]),1e-12))
2530         #m1np=m0np.transpose()
2531         m2=m0*m1
2532         self.assertEqual(m2.getNumberOfRows(),2)
2533         self.assertEqual(m2.getNumberOfCols(),2)
2534         self.assertTrue(m2.getData().isEqual(DataArrayDouble([29,37,37,62]),1e-12))
2535         pass
2536
2537     def testSwig2AMR2(self):
2538         """ 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."""
2539         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2540         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2541         MEDCouplingIMesh.CondenseFineToCoarse([5,7],fine,[(1,4),(2,4)],[4,4],coarse)
2542         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))
2543         # 3D
2544         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2545         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2546         MEDCouplingIMesh.CondenseFineToCoarse([5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4],coarse)
2547         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))
2548         # 1D
2549         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2550         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2551         MEDCouplingIMesh.CondenseFineToCoarse([5],fine,[(1,4)],[4],coarse)
2552         self.assertTrue(coarse.isEqual(DataArrayDouble([0,6,22,38,4]),1e-12))
2553         pass
2554
2555     def testSwig2AMR3(self):
2556         """ Test spread of coarse IMesh instance into a fine one, with a factor."""
2557         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2558         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2559         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7],fine,[(1,4),(2,4)],[4,4])
2560         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))
2561         # 3D
2562         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2563         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2564         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4])
2565         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))
2566         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",3,DataArrayInt([6,8,6]),[0.,0.,0.],DataArrayDouble((1.,1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2567         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",3,DataArrayInt([13,9,13]),[1.,2.,1.],DataArrayDouble((0.25,0.25,0.25)))) ; f.setArray(fine) ; f.setName("tutu") ; f.checkConsistencyLight()
2568         # 1D
2569         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2570         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2571         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5],fine,[(1,4)],[4])
2572         self.assertTrue(fine.isEqual(DataArrayDouble([1.,1.,1.,1.,2.,2.,2.,2.,3.,3.,3.,3.]),1e-12))
2573         pass
2574
2575     def testSwig2AMR4(self):
2576         """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."""
2577         im=MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04])
2578         b=im.computeCellCenterOfMass() ; b-=[1.,1.] ; b=b.magnitude()
2579         ids=b.findIdsInRange(0.4,0.7)
2580         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(im) ; f.setName("toto") ; arr=DataArrayDouble(im.getNumberOfCells()) ; arr[:]=0. ; arr[ids]=1. ; f.setArray(arr)
2581         # f.write("test.vti")
2582         amr=MEDCouplingCartesianAMRMesh(MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04]))
2583         arr2=DataArrayByte(im.getNumberOfCells()) ; arr2[:]=0 ; arr2[ids]=1
2584         bso=BoxSplittingOptions() ; bso.setEfficiencyGoal(0.5); bso.setEfficiencyThreshold(0.8) ; bso.setMaximumNbOfCellsInPatch(3000) ; bso.setMinimumPatchLength(6) ; bso.setMaximumPatchLength(11)
2585         amr.createPatchesFromCriterion(bso,arr2,[2,2])
2586         m=amr.getImageMesh() ; m=m.buildUnstructured() ; m.changeSpaceDimension(3,1.)
2587         self.assertEqual(12,amr.getNumberOfPatches())
2588         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)]]
2589         for i,bltr in enumerate(exp0):
2590             self.assertEqual(amr[i].getBLTRRange(),bltr)
2591             pass
2592         self.assertAlmostEqual(0.666666666667,amr[3].getMesh().getImageMesh().computeSquareness(),12)
2593         #
2594         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceToGlobalOfCompactFrmt([(8,32),(4,17)],[(0,24),(2,12)]),[(8,32),(6,16)])
2595         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceFromGlobalOfCompactFrmt([(8,32),(4,17)],[(8,32),(6,16)]),[(0,24),(2,12)])
2596         self.assertTrue(amr.getImageMesh().isEqual(im,1e-12))
2597         m=amr.getImageMesh().asSingleCell().build1SGTUnstructured()
2598         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3])))
2599         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([(0,0),(2,0),(0,2),(2,2)]),1e-12))
2600         pass
2601
2602     def testSwig2AMR5(self):
2603         """ Idem testAMR3, test spread of coarse IMesh instance into a fine one, with a factor, but here ghost is used !"""
2604         # 1D
2605         coarse=DataArrayDouble(5+2) ; coarse.iota(-1) #X=5 with ghostLev=1
2606         fine=DataArrayDouble(3*4+2) ; fine.iota(1000) #X=3 refined by 4 with ghostLev=1
2607         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5],fine,[(1,4)],[4],1)
2608         self.assertTrue(fine.isEqual(DataArrayDouble([0,1,1,1,1,2,2,2,2,3,3,3,3,4]),1e-12))
2609         coarse.iota(-1000)
2610         MEDCouplingIMesh.CondenseFineToCoarseGhost([5],fine,[(1,4)],[4],coarse,1)
2611         self.assertTrue(coarse.isEqual(DataArrayDouble([-1000.,-999.,4.,8.,12.,-995.,-994.]),1e-12))
2612         # 2D
2613         coarse=DataArrayDouble((5+2*1)*(7+2*1)) ; coarse.iota(0) #X=5,Y=7 with ghostLev=1
2614         fine=DataArrayDouble((3*4+2*1)*(2*4+2*1)) ; fine.iota(1000) #X=3,Y=2 refined by 4
2615         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5,7],fine,[(1,4),(2,4)],[4,4],1)
2616         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))
2617         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2618         coarse.iota(-1000)
2619         fine2=DataArrayDouble.Meld(fine,3*fine) ; coarse2=DataArrayDouble.Meld(coarse,3*coarse)
2620         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine,[(1,4),(2,4)],[4,4],coarse,1)
2621         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine2,[(1,4),(2,4)],[4,4],coarse2,1)
2622         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2623         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.])
2624         self.assertTrue(coarse.isEqual(coarseExp,1e-12))
2625         self.assertTrue(coarse2[:,0].isEqual(coarseExp,1e-12))
2626         self.assertTrue(coarse2[:,1].isEqual(3*coarseExp,1e-12))
2627         pass
2628
2629     def testSwig2AMR6(self):
2630         """ 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."""
2631         amr=MEDCouplingCartesianAMRMesh("",2,[6,6],[0,0],[1,1])
2632         da=DataArrayDouble((5+2)*(5+2)) ; da.iota() ; da+=0.9
2633         amr.addPatch([(1,4),(2,4)],[4,4])
2634         amr.addPatch([(0,1),(0,1)],[4,4])
2635         amr.addPatch([(4,5),(3,4)],[4,4])
2636         amr.addPatch([(4,5),(1,3)],[4,4])
2637         amr.addPatch([(0,1),(1,4)],[4,4])
2638         da0=DataArrayDouble((3*4+2)*(2*4+2)) ; da0.iota() ; da0[:]+=0.2
2639         da1=DataArrayDouble((1*4+2)*(1*4+2)) ; da1.iota() ; da1[:]+=0.4
2640         da2=DataArrayDouble((1*4+2)*(1*4+2)) ; da2.iota() ; da2[:]+=0.6
2641         da3=DataArrayDouble((1*4+2)*(2*4+2)) ; da3.iota() ; da3[:]+=0.7
2642         da4=DataArrayDouble((1*4+2)*(3*4+2)) ; da4.iota() ; da4[:]+=0.8
2643         self.assertEqual(5,amr.getNumberOfPatches())
2644         l=[da0,da1,da2,da3,da4]
2645         lCpy=[elt.deepCopy() for elt in l]
2646         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2647         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2648         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2649         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2650         #
2651         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2652         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2653         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2654         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(amr[2].getMesh().getImageMesh().buildWithGhost(1)) ; f2.setArray(da2) ; f2.setName("p2") ; f2.checkConsistencyLight()
2655         f3=MEDCouplingFieldDouble(ON_CELLS) ; f3.setMesh(amr[3].getMesh().getImageMesh().buildWithGhost(1)) ; f3.setArray(da3) ; f3.setName("p3") ; f3.checkConsistencyLight()
2656         f4=MEDCouplingFieldDouble(ON_CELLS) ; f4.setMesh(amr[4].getMesh().getImageMesh().buildWithGhost(1)) ; f4.setArray(da4) ; f4.setName("p4") ; f4.checkConsistencyLight()
2657         #
2658         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])
2659         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])
2660         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2661         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2662         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2663         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2664         #
2665         g0=amr.retrieveGridsAt(0)
2666         self.assertEqual(1,len(g0))
2667         self.assertTrue(isinstance(g0[0],MEDCouplingCartesianAMRPatchGF))
2668         g1=amr.retrieveGridsAt(1)
2669         self.assertEqual(5,len(g1))
2670         for i in range(5):
2671             self.assertTrue(isinstance(g1[i],MEDCouplingCartesianAMRPatch))
2672             pass
2673         pass
2674
2675     def testSwig2AMR7(self):
2676         """Idem testSwig2AMR6 except that we are in 1D"""
2677         amr=MEDCouplingCartesianAMRMesh("",1,[6],[0],[1])
2678         da=DataArrayDouble(5+2) ; da.iota() ; da+=0.9
2679         amr.addPatch([(1,4)],[4])
2680         amr.addPatch([(0,1)],[4])
2681         da0=DataArrayDouble(3*4+2) ; da0.iota() ; da0[:]+=0.2
2682         da1=DataArrayDouble(1*4+2) ; da1.iota() ; da1[:]+=0.4
2683         self.assertEqual(2,amr.getNumberOfPatches())
2684         l=[da0,da1]
2685         lCpy=[elt.deepCopy() for elt in l]
2686         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2687         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2688         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2689         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2690         #
2691         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2692         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2693         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2694         #
2695         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])
2696         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])
2697         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2698         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2699         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2700         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2701         pass
2702
2703     def testSwig2AMR8(self):
2704         """This test checks 'basic' operations for ghost update."""
2705         ghostSz=1
2706         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2707         amr.addPatch([(1,4),(2,4)],[4,4])
2708         amr.addPatch([(4,5),(3,5)],[4,4])
2709         amr.addPatch([(0,1),(4,6)],[4,4])
2710         amr[0].addPatch([(10,12),(5,8)],[2,2])
2711         amr[1].addPatch([(0,1),(0,5)],[2,2])
2712         amr[2].addPatch([(3,4),(0,3)],[2,2])
2713         m=amr.buildMeshFromPatchEnvelop()
2714         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,9,8,10,11])))
2715         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))
2716         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2717         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2718         att.alloc()
2719         d=att.getFieldOn(amr,"Field")
2720         self.assertEqual(56,d.getNumberOfTuples())
2721         self.assertEqual(1,d.getNumberOfComponents())
2722         d.iota() ; d+=0.1
2723         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2724         self.assertEqual(140,d0.getNumberOfTuples())
2725         self.assertEqual(1,d0.getNumberOfComponents())
2726         d0.iota() ; d0+=0.2
2727         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2728         self.assertEqual(60,d1.getNumberOfTuples())
2729         self.assertEqual(1,d1.getNumberOfComponents())
2730         d1.iota() ; d1+=0.3
2731         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2732         self.assertEqual(60,d2.getNumberOfTuples())
2733         self.assertEqual(1,d2.getNumberOfComponents())
2734         d2.iota() ; d2+=0.4
2735         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2736         self.assertEqual(48,d00.getNumberOfTuples())
2737         self.assertEqual(1,d00.getNumberOfComponents())
2738         d00.iota() ; d00+=0.5
2739         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2740         self.assertEqual(48,d10.getNumberOfTuples())
2741         self.assertEqual(1,d10.getNumberOfComponents())
2742         d10.iota() ; d10+=0.6
2743         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2744         self.assertEqual(32,d20.getNumberOfTuples())
2745         self.assertEqual(1,d20.getNumberOfComponents())
2746         d20.iota() ; d20+=0.7
2747         f=att.buildCellFieldOnRecurseWithoutOverlapWithoutGhost(amr,"Field")
2748         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])
2749         arrExp.setName("Field") ; arrExp.setInfoOnComponents(["X"])
2750         self.assertTrue(f.getArray().isEqual(arrExp,1e-12))
2751         m=MEDCoupling1SGTUMesh(f.getMesh())
2752         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])))
2753         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))
2754         # the test is here ! To be called after iteration with no remesh
2755         att.synchronizeAllGhostZones()
2756         f=att.buildCellFieldOnWithGhost(amr,"Field") ; f.checkConsistencyLight()
2757         ftmp=att.buildCellFieldOnWithoutGhost(amr,"Field") ; ftmp.checkConsistencyLight() ; self.assertTrue(ftmp.getArray().isEqualWithoutConsideringStr(DataArrayDouble([8.1,9.1,10.1,11.1,12.1,15.1,16.1,17.1,18.1,19.1,22.1,23.1,24.1,25.1,26.1,29.1,30.1,31.1,32.1,33.1,36.1,37.1,38.1,39.1,40.1,43.1,44.1,45.1,46.1,47.1]),1e-12))
2758         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2759         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2760         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2761         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2762         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2763         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2764         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))
2765         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))
2766         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))
2767         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))
2768         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))
2769         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))
2770         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))
2771         pass
2772
2773     def testSwig2AMR9(self):
2774         """ Equivalent to testSwig2AMR8 except that here the ghost level is 2 !"""
2775         ghostSz=2
2776         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2777         amr.addPatch([(1,4),(2,4)],[4,4])
2778         amr.addPatch([(4,5),(3,5)],[4,4])
2779         amr.addPatch([(0,1),(4,6)],[4,4])
2780         amr[0].addPatch([(10,12),(5,8)],[2,2])
2781         amr[1].addPatch([(0,1),(0,5)],[2,2])
2782         amr[2].addPatch([(3,4),(0,3)],[2,2])
2783         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2784         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2785         att.alloc()
2786         d=att.getFieldOn(amr,"Field")
2787         self.assertEqual(90,d.getNumberOfTuples())
2788         self.assertEqual(1,d.getNumberOfComponents())
2789         d.iota() ; d+=0.1
2790         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2791         self.assertEqual(192,d0.getNumberOfTuples())
2792         self.assertEqual(1,d0.getNumberOfComponents())
2793         d0.iota() ; d0+=0.2
2794         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2795         self.assertEqual(96,d1.getNumberOfTuples())
2796         self.assertEqual(1,d1.getNumberOfComponents())
2797         d1.iota() ; d1+=0.3
2798         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2799         self.assertEqual(96,d2.getNumberOfTuples())
2800         self.assertEqual(1,d2.getNumberOfComponents())
2801         d2.iota() ; d2+=0.4
2802         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2803         self.assertEqual(80,d00.getNumberOfTuples())
2804         self.assertEqual(1,d00.getNumberOfComponents())
2805         d00.iota() ; d00+=0.5
2806         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2807         self.assertEqual(84,d10.getNumberOfTuples())
2808         self.assertEqual(1,d10.getNumberOfComponents())
2809         d10.iota() ; d10+=0.6
2810         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2811         self.assertEqual(60,d20.getNumberOfTuples())
2812         self.assertEqual(1,d20.getNumberOfComponents())
2813         d20.iota() ; d20+=0.7
2814         # the test is here ! To be called after iteration with no remesh
2815         att.synchronizeAllGhostZones()
2816         f=att.buildCellFieldOnWithGhost(amr,"Field")
2817         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2818         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2819         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2820         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2821         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2822         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2823         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))
2824         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))
2825         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))
2826         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))
2827         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))
2828         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))
2829         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],1).isEqual(DataArrayInt([0,4])))
2830         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],2).isEqual(DataArrayInt([0,1,5,6])))
2831         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],1).isEqual(DataArrayInt([0,6,49,55])))
2832         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],2).isEqual(DataArrayInt([0,8,10,16,73,79,81,89])))
2833         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6,3],1).isEqual(DataArrayInt([0,6,49,55,224,230,273,279])))
2834         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])))
2835         pass
2836
2837     def testSwig2AMR10(self):
2838         """ 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."""
2839         szGhost=2
2840         amr=MEDCouplingCartesianAMRMesh("",2,[11,11],[0,0],[0.1,0.1])
2841         amr.addPatch([(3,8),(0,3)],[2,2])
2842         amr[0].addPatch([(0,10),(3,6)],[3,3])
2843         amr[0].addPatch([(2,6),(0,3)],[3,3])
2844         amr[0].addPatch([(6,10),(2,3)],[3,3])
2845         amr.addPatch([(3,8),(3,6)],[2,2])
2846         amr[1].addPatch([(0,4),(0,6)],[3,3])
2847         amr[1].addPatch([(7,10),(0,4)],[3,3])
2848         amr[1].addPatch([(4,7),(0,3)],[3,3])
2849         amr[1].addPatch([(4,7),(3,6)],[3,3])
2850         amr.addPatch([(0,3),(6,10)],[2,2])
2851         self.assertEqual(([(30,39),(27,36)],[6,6]),amr[1][3].getMesh().positionRelativeToGodFather())
2852         self.assertEqual(([(6,16),(6,12)],[2,2]),amr[1].getMesh().positionRelativeToGodFather())
2853         self.assertTrue(not MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(6,16),(6,12)]))
2854         self.assertTrue(MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(28,32),(35,37)]))
2855         da=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.])
2856         MEDCouplingStructuredMesh.AssignPartOfFieldOfDoubleUsing([3,4],da,[(1,3),(2,3)],DataArrayDouble([7.7,8.8]))
2857         self.assertTrue(da.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.7,8.8,9.,10.,11.]),1e-12))
2858         att=MEDCouplingAMRAttribute(amr,[("YY",1)],szGhost)
2859         att.spillNatures([IntensiveMaximum])
2860         att.alloc()
2861         yy=att.getFieldOn(amr,"YY") ; yy.iota(0.01)
2862         yy=att.getFieldOn(amr[0].getMesh(),"YY") ; yy.iota(0.02)
2863         yy=att.getFieldOn(amr[1].getMesh(),"YY") ; yy.iota(0.03)
2864         yy=att.getFieldOn(amr[0][0].getMesh(),"YY") ; yy.iota(0.04)
2865         yy=att.getFieldOn(amr[0][1].getMesh(),"YY") ; yy.iota(0.05)
2866         yy=att.getFieldOn(amr[0][2].getMesh(),"YY") ; yy.iota(0.06)
2867         yy=att.getFieldOn(amr[1][0].getMesh(),"YY") ; yy.iota(0.07)
2868         yy=att.getFieldOn(amr[1][1].getMesh(),"YY") ; yy.iota(0.08)
2869         yy=att.getFieldOn(amr[1][2].getMesh(),"YY") ; yy.iota(0.09)
2870         yy=att.getFieldOn(amr[1][3].getMesh(),"YY") ; yy.iota(0.10)
2871         yy=att.getFieldOn(amr[2].getMesh(),"YY") ; yy.iota(0.11)
2872         att2=att.deepCopy() ; att3=att2.deepCopy() ; att4=att3.deepCopy() ; att5=att4.deepCopy() ; att6=att5.deepCopy()
2873         ###
2874         att.synchronizeFineToCoarseBetween(2,1)
2875         ###
2876         for pos in [(),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(1,3)]:
2877             self.assertTrue(att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2878             pass
2879         for pos in [(0,),(1,)]:
2880             self.assertTrue(not att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2881             pass
2882         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))
2883         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))
2884         del att
2885         ####
2886         att2.synchronizeAllGhostZonesOfDirectChidrenOf(att2.getMyGodFather())
2887         ### 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.
2888         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])
2889         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((2,)),"YY").isEqualWithoutConsideringStr(exp2,1e-12))
2890         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])
2891         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((1,)),"YY").isEqualWithoutConsideringStr(exp3,1e-12))
2892         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])
2893         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((0,)),"YY").isEqualWithoutConsideringStr(exp4,1e-12))
2894         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)]:
2895             vals=att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY")
2896             l=vals.getNumberOfTuples()
2897             exps=DataArrayDouble(l) ; exps.iota(iot)
2898             self.assertTrue(vals.isEqualWithoutConsideringStr(exps,1e-12))
2899             pass
2900         del att2
2901         ###
2902         att3.synchronizeCoarseToFineBetween(1,2)
2903         ###
2904         for pos in [(),(0,),(1,),(2,)]:
2905             self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2906             pass
2907         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])
2908         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp5,1e-12))
2909         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])
2910         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp6,1e-12))
2911         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])
2912         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp7,1e-12))
2913         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])
2914         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp8,1e-12))
2915         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])
2916         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp9,1e-12))
2917         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])
2918         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp10,1e-12))
2919         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])
2920         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp11,1e-12))
2921         del att3
2922         ###
2923         att4.synchronizeAllGhostZonesAtASpecifiedLevel(2)
2924         for pos in [(),(0,),(1,),(2,)]:
2925             self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2926             pass
2927         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])
2928         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp12,1e-12))
2929         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]])
2930         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp13,1e-12))
2931         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])
2932         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp14,1e-12))
2933         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])
2934         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp15,1e-12))
2935         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])
2936         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp16,1e-12))
2937         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])
2938         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp17,1e-12))
2939         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])
2940         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp18,1e-12))
2941         del att4
2942         ###
2943         att5.synchronizeAllGhostZonesAtASpecifiedLevelUsingOnlyFather(2)
2944         for pos in [(),(0,),(1,),(2,)]:
2945             self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att6.getFieldOn(att6.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2946             pass
2947         att5.buildCellFieldOnWithGhost(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY")
2948         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])
2949         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp19,1e-12))
2950         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])
2951         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp20,1e-12))
2952         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])
2953         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp21,1e-12))
2954         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])
2955         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp22,1e-12))
2956         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])
2957         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp23,1e-12))
2958         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])
2959         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp24,1e-12))
2960         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])
2961         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp25,1e-12))
2962         pass
2963
2964     def testSwig2AMR11(self):
2965         """ Some tests in 3D with CondenseFineToCoarseGhost and SpreadCoarseToFineGhost"""
2966         coarse=DataArrayDouble((6+4)*(7+4)*(5+4)) ; coarse.iota()
2967         fine=DataArrayDouble((4*2+4)*(2*3+4)*(3*4+4))
2968         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
2969         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.])
2970         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.])
2971         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.])
2972         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.])
2973         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.])
2974         exp=DataArrayDouble.Aggregate([exp0,exp0,exp1,exp1,exp1,exp1,exp2,exp2,exp2,exp2,exp3,exp3,exp3,exp3,exp4,exp4])
2975         self.assertTrue(fine.isEqual(exp,1e-12))
2976         #
2977         fine.iota()
2978         coarse.iota(0.5)
2979         MEDCouplingIMesh.CondenseFineToCoarseGhost([6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],coarse,2)
2980         amr=MEDCouplingCartesianAMRMesh("mesh",3,[7,8,6],[0.,0.,0.],[1.,1.,1.])
2981         amr.addPatch([(1,5),(2,4),(1,4)],[2,3,4])
2982         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
2983         att.alloc()
2984         exp1=DataArrayDouble(990) ; exp1.iota(0.5)
2985         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])
2986         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.])
2987         exp1[ids]=vals
2988         self.assertTrue(coarse.isEqual(exp1,1e-12))
2989         #
2990         MEDCouplingStructuredMesh.MultiplyPartOf([10,11,9],[(3,7),(4,6),(3,6)],1/24.,coarse)
2991         exp2=DataArrayDouble(990) ; exp2.iota(0.5)
2992         exp2[ids]=vals/24.
2993         self.assertTrue(coarse.isEqual(exp2,1e-12))
2994         #
2995         coarse.iota(0.5) ; fine.iota(0.1)
2996         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
2997         #
2998         coarse.iota(0.5) ; fine.iota(0.1)
2999         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3000         exp00=DataArrayDouble.Aggregate([exp0,exp0]) ; exp00+=0.5
3001         self.assertTrue(fine[:240].isEqual(exp00,1e-12))
3002         exp44=DataArrayDouble.Aggregate([exp4,exp4]) ; exp44+=0.5
3003         self.assertTrue(fine[-240:].isEqual(exp44,1e-12))
3004         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))
3005         pass
3006
3007     def testSwig2AMR12(self):
3008         """ This test check the MEDCouplingAMRAttribute.projectTo method."""
3009         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3010         amr0.addPatch([(3,8),(0,3)],[2,2])
3011         amr0.addPatch([(3,8),(3,6)],[2,2])
3012         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3013         att0.alloc()
3014         att0.getFieldOn(amr0,"YY").iota(0.01)
3015         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3016         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3017         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3018         amr1.addPatch([(2,5),(1,4)],[2,2])
3019         att1=att0.projectTo(amr1)
3020         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqualWithoutConsideringStr(att0.getFieldOn(amr0,"YY"),1e-12))
3021         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))
3022         #
3023         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3024         amr0.addPatch([(2,5),(2,7)],[2,2])
3025         amr0.addPatch([(5,8),(2,7)],[2,2])
3026         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3027         att0.alloc()
3028         att0.getFieldOn(amr0,"YY").iota(0.01)
3029         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3030         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3031         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3032         amr1.addPatch([(3,6),(2,7)],[2,2])
3033         amr1.addPatch([(6,9),(2,7)],[2,2])
3034         att1=att0.projectTo(amr1)
3035         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqual(att0.getFieldOn(amr0,"YY"),1e-12))
3036         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))
3037         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))
3038         pass
3039
3040     def testSwig2AMR13(self):
3041         """ non regression test"""
3042         for fact,len1,len2 in [([2,2],64,48),([3,3],100,70),([4,4],144,96)]:
3043             amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3044             amr.addPatch([(1,3),(0,2)],fact)
3045             amr.addPatch([(1,3),(3,4)],fact)
3046             att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3047             att.alloc()
3048             att.getFieldOn(amr,"YY").iota(0.1)
3049             att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3050             att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3051             att.synchronizeAllGhostZonesOfDirectChidrenOf(amr)
3052             exp=DataArrayDouble(64) ; exp.iota(0.1)
3053             self.assertTrue(att.getFieldOn(amr,"YY").isEqualWithoutConsideringStr(exp,1e-12))
3054             exp0=DataArrayDouble(len1) ; exp0.iota(0.2)
3055             self.assertTrue(att.getFieldOn(amr[0].getMesh(),"YY").isEqualWithoutConsideringStr(exp0,1e-12))
3056             exp1=DataArrayDouble(len2) ; exp1.iota(0.3)
3057             self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(exp1,1e-12))
3058             pass
3059         pass
3060
3061     def testSwig2AMR14(self):
3062         """ non regression linked to VTHB write."""
3063         fact=[2,2] ; fact2=[3,3]
3064         amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3065         amr.addPatch([(1,3),(0,2)],fact)
3066         amr.addPatch([(1,3),(3,4)],fact)
3067         amr[0].addPatch([(1,3),(1,3)],fact2)
3068         amr[1].addPatch([(1,3),(1,2)],fact2)
3069         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3070         att.alloc()
3071         att.getFieldOn(amr,"YY").iota(0.1)
3072         att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3073         att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3074         att.getFieldOn(amr[0][0].getMesh(),"YY").iota(0.4)
3075         att.getFieldOn(amr[1][0].getMesh(),"YY").iota(0.5)
3076         self.assertEqual(amr[0].getBLTRRangeRelativeToGF(),[(2,6),(0,4)])
3077         self.assertEqual(amr[1].getBLTRRangeRelativeToGF(),[(2,6),(6,8)])
3078         self.assertEqual(amr[0][0].getBLTRRangeRelativeToGF(),[(9,15),(3,9)])
3079         self.assertEqual(amr[1][0].getBLTRRangeRelativeToGF(),[(9,15),(21,24)])
3080         pass
3081
3082     def testOrderConsecutiveCells1D1(self):
3083         """A line in several unconnected pieces:"""
3084         m2 = MEDCouplingUMesh.New("bla", 1)
3085         c = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,4,
3086                                NORM_SEG3,5,7,6, NORM_SEG3,7,9,8, NORM_SEG2,9,10,
3087                                NORM_SEG2,11,12,NORM_SEG2,12,13,
3088                                NORM_SEG2,14,15])
3089         cI = DataArrayInt([0,3,7,10,14,18,21,24,27,30])
3090         coords2 = DataArrayDouble([float(i) for i in range(32)], 16, 2)
3091         m2.setCoords(coords2);
3092         m2.setConnectivity(c, cI);
3093         m2.checkConsistency(1.0e-8);
3094
3095         # Shuffle a bit :-)
3096         m2.renumberCells(DataArrayInt([0,3,6,8,1,4,7,5,2]), True);
3097         res = m2.orderConsecutiveCells1D()
3098         expRes = [0,3,6,8,1,4,2,7,5]
3099         self.assertEqual(m2.getNumberOfCells(),res.getNumberOfTuples())
3100         self.assertEqual(expRes, res.getValues())
3101
3102         # A closed line (should also work)
3103         m3 = MEDCouplingUMesh.New("bla3", 1)
3104         conn3A = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,0])
3105         coord3 = coords2[0:5]
3106         c.reAlloc(10)
3107         cI.reAlloc(4)
3108
3109         m3.setCoords(coord3)
3110         m3.setConnectivity(conn3A, cI)
3111         m3.checkConsistency(1.0e-8)
3112         res2 = m3.orderConsecutiveCells1D()
3113         expRes2 = [0,1,2]
3114         self.assertEqual(m3.getNumberOfCells(),res2.getNumberOfTuples())
3115         self.assertEqual(expRes2, res2.getValues())
3116         pass
3117
3118     def testDADApplyFuncOnThis1(self):
3119         d=DataArrayDouble(5) ; d.iota(0.)
3120         d.applyFuncOnThis("2*x+1")
3121         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.]),1e-12))
3122         d=DataArrayDouble(6) ; d.iota(0.) ; d.rearrange(2)
3123         d.applyFuncOnThis("2*x+1")
3124         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.,11.],3,2),1e-12))
3125         d.applyFuncOnThis("1+2*3")
3126         self.assertTrue(d.isEqual(DataArrayDouble([(7.,7.),(7.,7.),(7.,7.)]),1e-12))
3127         pass
3128
3129     def testSwig2PointSetComputeFetchedNodeIds1(self):
3130         arr=DataArrayDouble(6) ; arr.iota()
3131         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3132         m=m.buildUnstructured()
3133         m0=m[[0,1,5,6,25,26,30,31,124]]
3134         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])
3135         self.assertTrue(m0.computeFetchedNodeIds().isEqual(ref))
3136         self.assertTrue(MEDCoupling1SGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3137         self.assertEqual(m0.getAllGeoTypes(),[NORM_HEXA8])
3138         m0.convertAllToPoly()
3139         self.assertEqual(m0.getAllGeoTypes(),[NORM_POLYHED])
3140         self.assertTrue(MEDCoupling1DGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3141         pass
3142
3143     def testSwig2PartDefinition1(self):
3144         pd=PartDefinition.New(5,22,3)
3145         self.assertTrue(isinstance(pd,SlicePartDefinition))
3146         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3147         self.assertEqual(pd.getNumberOfElems(),6)
3148         self.assertEqual(pd.getEffectiveStop(),23)
3149         pd=PartDefinition.New(5,23,3)
3150         self.assertTrue(isinstance(pd,SlicePartDefinition))
3151         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3152         self.assertEqual(pd.getNumberOfElems(),6)
3153         self.assertEqual(pd.getEffectiveStop(),23)
3154         self.assertEqual(pd.getSlice(),slice(5,23,3))
3155         pd=PartDefinition.New(5,22,1)
3156         self.assertTrue(isinstance(pd,SlicePartDefinition))
3157         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3158         self.assertEqual(pd.getNumberOfElems(),17)
3159         self.assertEqual(pd.getEffectiveStop(),22)
3160         pd=PartDefinition.New(5,23,3)+PartDefinition.New(23,27,3)
3161         self.assertTrue(isinstance(pd,SlicePartDefinition))
3162         self.assertEqual(pd.getNumberOfElems(),8)
3163         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20,23,26])))
3164         self.assertEqual(pd.getEffectiveStop(),29)
3165         pd=SlicePartDefinition(5,22,1)
3166         self.assertTrue(isinstance(pd,SlicePartDefinition))
3167         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3168         self.assertEqual(pd.getNumberOfElems(),17)
3169         self.assertEqual(pd.getEffectiveStop(),22)
3170         d=DataArrayInt([2,4,5,6,10])
3171         pd=PartDefinition.New(d)
3172         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3173         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3174         pd=DataArrayPartDefinition(d)
3175         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3176         pd=DataArrayPartDefinition(d)+DataArrayPartDefinition(DataArrayInt([12,14,20]))
3177         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3178         self.assertEqual(pd.getNumberOfElems(),8)
3179         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([2,4,5,6,10,12,14,20])))
3180         pass
3181
3182     def testSwig2SortEachPairToMakeALinkedList1(self):
3183         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)])
3184         d.sortEachPairToMakeALinkedList()
3185         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)])))
3186         d=DataArrayInt([(0,2),(1,2),(1,3)])
3187         d.sortEachPairToMakeALinkedList()
3188         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3189         d=DataArrayInt([(0,2),(1,2),(3,1)])
3190         d.sortEachPairToMakeALinkedList()
3191         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3192         d=DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])
3193         d.sortEachPairToMakeALinkedList()
3194         self.assertTrue(d.isEqual(DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])))
3195         pass
3196
3197     def testSwig2DAIIsRange(self):
3198         d=DataArrayInt([2,6,10])
3199         a,b=d.isRange()
3200         self.assertTrue(a)
3201         self.assertEqual(b,slice(2,11,4))
3202         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3203         #
3204         d=DataArrayInt([2,7,10])
3205         a,b=d.isRange()
3206         self.assertTrue(not a)
3207         self.assertTrue(b is None)
3208         #
3209         d=DataArrayInt([22,17,12])
3210         a,b=d.isRange()
3211         self.assertTrue(a)
3212         self.assertEqual(b,slice(22,11,-5))
3213         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3214         #
3215         d=DataArrayInt([22,16,12])
3216         a,b=d.isRange()
3217         self.assertTrue(not a)
3218         self.assertTrue(b is None)
3219         #
3220         d=DataArrayInt([33])
3221         a,b=d.isRange()
3222         self.assertTrue(a)
3223         self.assertEqual(b,slice(33,34,1))
3224         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3225         #
3226         d=DataArrayInt([])
3227         a,b=d.isRange()
3228         self.assertTrue(a)
3229         self.assertEqual(b,slice(0,0,1))
3230         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3231         #
3232         d=DataArrayInt([2,6,10,2])
3233         a,b=d.isRange()
3234         self.assertTrue(not a)
3235         self.assertTrue(b is None)
3236         pass
3237
3238     def testSwig2PartDefinitionComposeWith1(self):
3239         f=PartDefinition.New(DataArrayInt([0,1,2,3,6,7,8,9]))
3240         g=PartDefinition.New(4,14,1)
3241         g2=g.deepCopy()
3242         self.assertTrue(g2.isEqual(g)[0])
3243         h=f.composeWith(g)
3244         self.assertTrue(isinstance(h,DataArrayPartDefinition))
3245         self.assertTrue(h.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3246         f2=f.tryToSimplify()
3247         g2=g.tryToSimplify()
3248         self.assertEqual(f2.getHiddenCppPointer(),f.getHiddenCppPointer())# same because no simplification due to content of array
3249         self.assertEqual(g2.getHiddenCppPointer(),g.getHiddenCppPointer())# same because no simplification linked to type of PartDef
3250         p=PartDefinition.New(DataArrayInt([2,6,10]))
3251         p2=p.tryToSimplify()
3252         self.assertNotEqual(p2.getHiddenCppPointer(),p.getHiddenCppPointer())
3253         self.assertTrue(isinstance(p2,SlicePartDefinition))
3254         self.assertEqual(p2.getSlice(),slice(2,11,4))
3255         self.assertTrue(p2.isEqual(SlicePartDefinition(2,11,4))[0])
3256         self.assertTrue(p2.isEqual(p2.deepCopy())[0])
3257         self.assertTrue(not p2.isEqual(SlicePartDefinition(1,11,4))[0])
3258         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,10,4))[0])
3259         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,11,3))[0])
3260         pass
3261
3262     def testSwig2DAIGetIdsStrictlyNegative1(self):
3263         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3264         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([1,2,6])))
3265         pass
3266
3267     def testSwig2DAIReplaceOneValByInThis1(self):
3268         d=DataArrayInt([4,-5,-1,0,-5,99,-7,5])
3269         d.changeValue(-5,900)
3270         self.assertTrue(d.isEqual(DataArrayInt([4,900,-1,0,900,99,-7,5])))
3271         pass
3272
3273     def testSwig2DAIGetMinMaxValues1(self):
3274         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3275         a,b=d.getMinMaxValues()
3276         self.assertEqual(a,-7)
3277         self.assertEqual(b,99)
3278         pass
3279
3280     def testSwig2DAIBuildUniqueNotSorted1(self):
3281         d=DataArrayInt([-5,3,2,-1,2,3,-6,4,2,-5,3,7])
3282         self.assertTrue(d.buildUniqueNotSorted().isEqual(DataArrayInt([-5,3,2,-1,-6,4,7])))
3283         pass
3284
3285     def testSwig2UMeshChangeOrientationOfCells1(self):
3286         """ Here testing changeOrientationOfCell method on unstructured meshes lying on no coords."""
3287         m=MEDCouplingUMesh("mesh",1)
3288         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])
3289         cI=DataArrayInt([0,3,6,10,14,17,22,27])
3290         m.setConnectivity(c,cI)
3291         m.changeOrientationOfCells()
3292         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])))
3293         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3294         # testing 2D cells
3295         m=MEDCouplingUMesh("mesh",2)
3296         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])
3297         cI=DataArrayInt([0,4,9,15,22,31,42])
3298         m.setConnectivity(c,cI)
3299         m.changeOrientationOfCells()
3300         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])))
3301         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3302         pass
3303
3304     def testSwig2StructuredMeshCellLocation1(self):
3305         # 3D
3306         arrX=DataArrayDouble(5) ; arrX.iota()
3307         arrY=DataArrayDouble(4) ; arrY.iota()
3308         arrZ=DataArrayDouble(3) ; arrZ.iota()
3309         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3310         li=[]
3311         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)]
3312         self.assertEqual(24,m.getNumberOfCells())
3313         for i in range(m.getNumberOfCells()):
3314             li.append(m.getLocationFromCellId(i))
3315             pass
3316         self.assertEqual(liExp3D,li)
3317         self.assertRaises(InterpKernelException,m.getLocationFromCellId,24)
3318         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3319         # 2D
3320         arrX=DataArrayDouble(5) ; arrX.iota()
3321         arrY=DataArrayDouble(4) ; arrY.iota()
3322         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3323         li=[]
3324         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)]
3325         self.assertEqual(12,m.getNumberOfCells())
3326         for i in range(m.getNumberOfCells()):
3327             li.append(m.getLocationFromCellId(i))
3328             pass
3329         self.assertEqual(liExp2D,li)
3330         self.assertRaises(InterpKernelException,m.getLocationFromCellId,12)
3331         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3332         # 1D
3333         arrX=DataArrayDouble(5) ; arrX.iota()
3334         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3335         self.assertEqual(4,m.getNumberOfCells())
3336         for i in range(m.getNumberOfCells()):
3337             self.assertEqual((i,),m.getLocationFromCellId(i))
3338             pass
3339         self.assertRaises(InterpKernelException,m.getLocationFromCellId,4)
3340         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3341         pass
3342
3343     def testSwig2StructuredMeshNodeLocation1(self):
3344         # 3D
3345         arrX=DataArrayDouble(5) ; arrX.iota()
3346         arrY=DataArrayDouble(4) ; arrY.iota()
3347         arrZ=DataArrayDouble(3) ; arrZ.iota()
3348         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3349         li=[]
3350         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)]
3351         self.assertEqual(60,m.getNumberOfNodes())
3352         for i in range(m.getNumberOfNodes()):
3353             li.append(m.getLocationFromNodeId(i))
3354             pass
3355         self.assertEqual(liExp3D,li)
3356         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,60)
3357         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3358         # 2D
3359         arrX=DataArrayDouble(5) ; arrX.iota()
3360         arrY=DataArrayDouble(4) ; arrY.iota()
3361         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3362         li=[]
3363         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)]
3364         self.assertEqual(20,m.getNumberOfNodes())
3365         for i in range(m.getNumberOfNodes()):
3366             li.append(m.getLocationFromNodeId(i))
3367             pass
3368         self.assertEqual(liExp2D,li)
3369         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,20)
3370         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3371         # 1D
3372         arrX=DataArrayDouble(5) ; arrX.iota()
3373         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3374         self.assertEqual(5,m.getNumberOfNodes())
3375         for i in range(m.getNumberOfNodes()):
3376             self.assertEqual((i,),m.getLocationFromNodeId(i))
3377             pass
3378         self.assertRaises(InterpKernelException,m.getLocationFromCellId,5)
3379         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3380         pass
3381
3382     def testSwig2DataArrayPrintNotTooLong1(self):
3383         """ Now that DataArrayDouble and DataArrayInt and pickelized they can appear in YACS ports. Avoid to have too heavy string representation of them."""
3384         d=DataArrayDouble(2000) ; d.iota() ; d.rearrange(2)
3385         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3386         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3387         self.assertEqual(st1,st2)
3388         #
3389         d=DataArrayDouble(2002) ; d.iota() ; d.rearrange(2)
3390         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3391         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3392         self.assertEqual(st1,st2)
3393         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3394         ## Now for DataArrayInt
3395         d=DataArrayInt(2000) ; d.iota() ; d.rearrange(2)
3396         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3397         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3398         self.assertEqual(st1,st2)
3399         #
3400         d=DataArrayInt(2002) ; d.iota() ; d.rearrange(2)
3401         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3402         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3403         self.assertEqual(st1,st2)
3404         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3405         pass
3406
3407     def testExtrudedMeshWithoutZipCoords1(self):
3408         """This test checks that MEDCouplingUMesh.buildExtrudedMesh do not perform a zipCoords."""
3409         arr=DataArrayDouble([(0.,0.),(1.,0.),(2.,0.),(3.,0.)])
3410         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(arr)
3411         m.allocateCells()
3412         m.insertNextCell(NORM_SEG2,[1,2])
3413         arr1D=DataArrayDouble([(0.,0.),(0.,1.5),(0.,2.)])
3414         m1D=MEDCouplingUMesh("mesh1D",1) ; m1D.setCoords(arr1D)
3415         m1D.allocateCells()
3416         m1D.insertNextCell(NORM_SEG2,[0,1])
3417         m1D.insertNextCell(NORM_SEG2,[1,2])
3418         m2D=m.buildExtrudedMesh(m1D,0)
3419         self.assertEqual(m.getCoords().getHiddenCppPointer(),m2D.getCoords().getHiddenCppPointer())
3420         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)])
3421         self.assertTrue(m.getCoords().isEqual(coo,1e-12))
3422         self.assertTrue(m2D.getNodalConnectivity().isEqual(DataArrayInt([4,1,2,6,5,4,5,6,10,9])))
3423         self.assertTrue(m2D.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10])))
3424         pass
3425
3426     def testPointSetAreAllNodesFetched1(self):
3427         m=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
3428         m.setCoords(arr,arr)
3429         m=m.buildUnstructured()
3430         self.assertTrue(m.areAllNodesFetched())
3431         m2=m[[0,2,3,4,5]]
3432         self.assertTrue(not m2.areAllNodesFetched())
3433         m2.zipCoords()
3434         self.assertTrue(m2.areAllNodesFetched())
3435         pass
3436
3437     def testMEDCouplingPointSetComputeDiameterField1(self):
3438         arrX=DataArrayDouble([0.,1.1,1.7,2.1])
3439         arrY=DataArrayDouble([0.,0.7,0.8,1.9])
3440         arrZ=DataArrayDouble([0.,1.3,2.1,2.4])
3441         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
3442         f=m.computeDiameterField()
3443         f.checkConsistencyLight()
3444         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])
3445         self.assertTrue(exp.isEqual(f.getArray(),1e-12))
3446         m1=m[::2]
3447         m2=m[1::2]
3448         m2.simplexize(PLANAR_FACE_5)
3449         m3=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
3450         f=m3.computeDiameterField()
3451         f.checkConsistencyLight()
3452         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])
3453         self.assertTrue(exp2.isEqual(f.getArray(),1e-12))
3454         # TRI3 - spacedim = 2
3455         coo=DataArrayDouble([(1,1),(5,1.9),(2.1,3)])
3456         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3457         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3458             m.setNodalConnectivity(DataArrayInt(c))
3459             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3460             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3461             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3462             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3463             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3464         # TRI3 - spacedim = 3
3465         coo=DataArrayDouble([(1.3198537928820775,1.0991902391274959,-0.028645697595823361),(5.2486835106806335,2.2234012799688281,0.30368935050077939),(2.2973688139447361,3.1572023778066649,0.10937756365410012)])
3466         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3467         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3468             m.setNodalConnectivity(DataArrayInt(c))
3469             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3470             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3471             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3472             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3473             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3474         # QUAD4 - spacedim = 2
3475         coo=DataArrayDouble([(0,2),(2,0),(6,4),(4,9)])
3476         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3477         exp3=sqrt(85.)
3478         for delta in range(4):
3479             c = [(elt + delta) % 4 for elt in range(4)]
3480             m.setNodalConnectivity(DataArrayInt(c))
3481             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3482             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3483             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3484             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3485             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3486             c.reverse()
3487             m.setNodalConnectivity(DataArrayInt(c))
3488             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3489             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3490             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3491             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3492             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3493         # QUAD4 - spacedim = 3
3494         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)])
3495         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3496         for delta in range(4):
3497             c = [(elt + delta) % 4 for elt in range(4)]
3498             m.setNodalConnectivity(DataArrayInt(c))
3499             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3500             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3501             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3502             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3503             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3504             c.reverse()
3505             m.setNodalConnectivity(DataArrayInt(c))
3506             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3507             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3508             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3509             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3510             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3511         # PENTA6
3512         # 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)
3513         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)])
3514         m=MEDCoupling1SGTUMesh("mesh",NORM_PENTA6) ; m.setCoords(coo)
3515         exp4=2.5041256256889888
3516         self.assertAlmostEqual(exp4,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3517         for delta in range(3):
3518             c = [(elt + delta) % 3 for elt in range(3)]
3519             c+=[elt+3 for elt in c]
3520             m.setNodalConnectivity(DataArrayInt(c))
3521             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3522             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3523             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3524             c.reverse()
3525             m.setNodalConnectivity(DataArrayInt(c))
3526             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3527             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3528             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3529         # HEXA8
3530         # 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)
3531         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)])
3532         m=MEDCoupling1SGTUMesh("mesh",NORM_HEXA8) ; m.setCoords(coo)
3533         exp5=2.5366409441884215
3534         self.assertAlmostEqual(exp5,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3535         for delta in range(4):
3536             c = [(elt + delta) % 4 for elt in range(4)]
3537             c+=[elt+4 for elt in c]
3538             m.setNodalConnectivity(DataArrayInt(c))
3539             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3540             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3541             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3542             c.reverse()
3543             m.setNodalConnectivity(DataArrayInt(c))
3544             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3545             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3546             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3547         # PYRA5 (1) 5th node is further
3548         # 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)
3549         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)])
3550         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3551         exp6=2.1558368027391386
3552         self.assertAlmostEqual(exp6,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3553         for delta in range(4):
3554             c = [(elt + delta) % 4 for elt in range(4)]
3555             c+=[4]
3556             m.setNodalConnectivity(DataArrayInt(c))
3557             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp6,12)
3558             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3559             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp6,12)
3560             pass
3561         # PYRA5 (2) 5th node is closer
3562         # 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)
3563         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)])
3564         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3565         exp7=1.4413563787228953
3566         self.assertAlmostEqual(exp7,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3567         for delta in range(4):
3568             c = [(elt + delta) % 4 for elt in range(4)]
3569             c+=[4]
3570             m.setNodalConnectivity(DataArrayInt(c))
3571             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp7,12)
3572             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3573             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp7,12)
3574             pass
3575         # TETRA4
3576         # 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)
3577         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)])
3578         m=MEDCoupling1SGTUMesh("mesh",NORM_TETRA4) ; m.setCoords(coo)
3579         exp8=1.7131322579364157
3580         self.assertAlmostEqual(exp8,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3581         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]]:
3582             for i in range(4):
3583                 m.setNodalConnectivity(DataArrayInt([(elt+i)%4 for elt in c]))
3584                 self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp8,12)
3585                 m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3586                 self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp8,12)
3587                 pass
3588             pass
3589         pass
3590
3591     def testMEDCouplingSkyLineArray(self):
3592         index = DataArrayInt([ 0, 3, 5, 6, 6 ])
3593         value = DataArrayInt([ 1, 2, 3, 2, 3, 3 ])
3594
3595         sla0 = MEDCouplingSkyLineArray()
3596         self.assertEqual( -1, sla0.getNumberOf() )
3597         self.assertEqual( 0,  sla0.getLength() )
3598         sla0.set( index, value )
3599         self.assertTrue( index.isEqual( sla0.getIndexArray() ))
3600         self.assertTrue( value.isEqual( sla0.getValuesArray() ))
3601         self.assertEqual( 4, sla0.getNumberOf() )
3602         self.assertEqual( 6, sla0.getLength() )
3603
3604         sla1 = MEDCouplingSkyLineArray( index, value )
3605         self.assertTrue( index.isEqual( sla1.getIndexArray() ))
3606         self.assertTrue( value.isEqual( sla1.getValuesArray() ))
3607         self.assertEqual( 4, sla1.getNumberOf() )
3608         self.assertEqual( 6, sla1.getLength() )
3609
3610         sla2 = MEDCouplingSkyLineArray( sla1 )
3611         self.assertTrue( index.isEqual( sla2.getIndexArray() ))
3612         self.assertTrue( value.isEqual( sla2.getValuesArray() ))
3613         self.assertEqual( 4, sla2.getNumberOf() )
3614         self.assertEqual( 6, sla2.getLength() )
3615
3616         indexVec = ivec(); indexVec.reserve( len( index ))
3617         for i in index: indexVec.push_back( i[0] )
3618         valueVec = ivec(); valueVec.reserve( len( value ))
3619         for i in value: valueVec.push_back( i[0] )
3620         sla3 = MEDCouplingSkyLineArray( indexVec, valueVec )
3621         self.assertTrue( index.isEqual( sla3.getIndexArray() ))
3622         self.assertTrue( value.isEqual( sla3.getValuesArray() ))
3623         self.assertEqual( 4, sla3.getNumberOf() )
3624         self.assertEqual( 6, sla3.getLength() )
3625
3626         pass
3627
3628     def testMEDCouplingSkyLineArrayThreeLevels(self):
3629         #  [[28,1,4]] , [[2,35,8], [9,10,1,12]]
3630         superi = DataArrayInt([ 0,1,3 ])
3631         index = DataArrayInt ([ 0,3,6,10 ])
3632         value = DataArrayInt ([ 28,1,4,2,35,8,9,10,1,12 ])
3633
3634         sla0 = MEDCouplingSkyLineArray()
3635         self.assertEqual( -1, sla0.getSuperNumberOf() )
3636         self.assertEqual( -1, sla0.getNumberOf() )
3637         self.assertEqual( 0,  sla0.getLength() )
3638         sla0.set3( superi.deepCopy(), index.deepCopy(), value.deepCopy() )
3639         self.assertTrue( superi.isEqual( sla0.getSuperIndexArray() ))
3640
3641         pack = sla0.getSimplePackSafe(2)
3642         self.assertEqual([9,10,1,12], pack)
3643         ids = sla0.findPackIds([0,1], [9,10,1,12])
3644         self.assertEqual([-1,1], ids)
3645
3646         sla0.deletePack(1, 1)
3647         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3648         self.assertEqual([28,1,4,2,35,8], val.getValues())
3649         self.assertEqual([0,3,6], idx.getValues())
3650         self.assertEqual([0,1,2], si.getValues())
3651
3652         sla0.pushBackPack(0, [3,2,1,0])
3653         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3654         self.assertEqual([0,2,3], si.getValues())
3655         self.assertEqual([0,3,7,10], idx.getValues())
3656         self.assertEqual([28,1,4,3,2,1,0,  2,35,8], val.getValues())
3657
3658         # Build connectivity from POLYHED connectivity
3659         cI = [0,16,41]
3660         c = [NORM_POLYHED, 1,2,3,-1,  2,3,4,-1,  3,4,5,-1,  4,5,6,
3661              NORM_POLYHED, 7,8,9,10,-1,  9,10,11,12,-1,  3,4,5,6,-1,  5,6,7,8,-1,  9,10,11,12]
3662         sla0 = MEDCouplingSkyLineArray.BuildFromPolyhedronConn(DataArrayInt(c), DataArrayInt(cI))
3663         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3664         self.assertEqual([0,4,9], si.getValues())
3665         self.assertEqual([0,3,6,9,12,16,20,24,28,32], idx.getValues())
3666         self.assertEqual([1,2,3,  2,3,4,  3,4,5,  4,5,6,
3667                           7,8,9,10,   9,10,11,12,  3,4,5,6,  5,6,7,8,  9,10,11,12], val.getValues())
3668         c1, cI1 = sla0.convertToPolyhedronConn()
3669         self.assertEqual(c1.getValues(), c)
3670         self.assertEqual(cI1.getValues(), cI)
3671         pass
3672
3673     def testMEDCouplingSkyLineArrayThreeLevels2(self):
3674         si = [0, 9, 15, 21]
3675         siRef = [0, 9, 16, 22]
3676         idx = [0,4,8,12,16,20,23,26,29,  32,36,40,44,48,52,  56,60,64,68,72,76,80]
3677         c = [1,0,2,3,  5,7,6,4,  1,5,4,0,  0,4,6,2,  2,6,7,3,  3,7,8,  7,5,8,  5,1,8,  1,3,8,
3678              9,1,3,10,  11,12,7,5,  9,11,5,1,  1,5,7,3,  3,7,12,10,  10,12,11,9,
3679              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3680         idxRef = [0,4,8,12,16,20,23,26,29,32,36,40,44,48,52,55,58, 62, 66, 70, 74, 78, 82 ]
3681         cRef = [1,0,2,3,  5,7,6,4,  1,5,4,0,  0,4,6,2,  2,6,7,3,  3,7,8,  7,5,8,  5,1,8,  1,3,8,
3682              9,1,3,10,  11,12,7,5,  9,11,5,1,  3,7,12,10,  10,12,11,9,  3,7,8,  7,5,8,
3683              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3684         sla0 = MEDCouplingSkyLineArray()
3685         sla0.set3( DataArrayInt(si), DataArrayInt(idx), DataArrayInt(c) )
3686         ids = sla0.findPackIds([1], [1,5,7,3])
3687         sla0.deletePack(1, ids[0])
3688         sla0.pushBackPack(1, [3,7,8])
3689         sla0.pushBackPack(1, [7,5,8])
3690         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3691         self.assertEqual(siRef, si.getValues())
3692         self.assertEqual(idxRef, idx.getValues())
3693         self.assertEqual(cRef, val.getValues())
3694
3695         idxRef2 = [0,4,8,12,16,20,23,26,29,32,36,40,42,46,50,53,56, 60, 64, 68, 72, 76, 80 ]
3696         cRef2 = [1,0,2,3,  5,7,6,4,  1,5,4,0,  0,4,6,2,  2,6,7,3,  3,7,8,  7,5,8,  5,1,8,  1,3,8,
3697              9,1,3,10,  11,12,7,5,  300,300,  3,7,12,10,  10,12,11,9,  3,7,8,  7,5,8,
3698              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3699         sla0.replacePack(1,2, [300,300])
3700         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3701         self.assertEqual(siRef, si.getValues())
3702         self.assertEqual(idxRef2, idx.getValues())
3703         self.assertEqual(cRef2, val.getValues())
3704
3705         sla0.replacePack(1,2, [9,11,5,1])
3706         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3707         self.assertEqual(siRef, si.getValues())
3708         self.assertEqual(idxRef, idx.getValues())
3709         self.assertEqual(cRef, val.getValues())
3710
3711         sla0.replaceSimplePack(11, [300,300])  # 11 is the abs index of pack (superIdx=1,idx=2)
3712         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3713         self.assertEqual(siRef, si.getValues())
3714         self.assertEqual(idxRef2, idx.getValues())
3715         self.assertEqual(cRef2, val.getValues())
3716
3717         sla0.replaceSimplePack(11, [9,11,5,1])  # 11 is the abs index of pack (superIdx=1,idx=2)
3718         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3719         self.assertEqual(siRef, si.getValues())
3720         self.assertEqual(idxRef, idx.getValues())
3721         self.assertEqual(cRef, val.getValues())
3722         pass
3723
3724     def testMEDCouplingUMeshgenerateGraph(self):
3725         # cartesian mesh 3x3
3726         arr=DataArrayDouble(4) ; arr.iota()
3727         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
3728         m=c.buildUnstructured()
3729         graph = m.generateGraph()
3730         # 0 1 2
3731         # 3 4 5
3732         # 6 7 8
3733         valRef=[ 0,1,3,
3734                  0,1,2,4,
3735                  1,2,5,
3736                  0,3,4,6,
3737                  1,3,4,5,7,
3738                  2,4,5,8,
3739                  3,6,7,
3740                  4,6,7,8,
3741                  5,7,8]
3742         self.assertEqual(valRef,list(graph.getValuesArray().getValues()));
3743
3744         indRef=[0, 3, 7, 10, 14, 19, 23, 26, 30, 33]
3745         self.assertEqual(indRef,list(graph.getIndexArray().getValues()));
3746         pass
3747
3748     def testSwig2MEDCouplingCurveLinearReprQuick1(self):
3749         """Non regression test. Error in m.__str__ when m is a MEDCouplingCurveLinear with spaceDim != meshDim."""
3750         arr=DataArrayDouble(12) ; arr.iota() ; arr.rearrange(2)
3751         m=MEDCouplingCurveLinearMesh()
3752         m.setCoords(arr)
3753         m.setNodeGridStructure([3,2])
3754         m.checkConsistencyLight()
3755         self.assertEqual(m.getMeshDimension(),2)
3756         self.assertEqual(m.getSpaceDimension(),2)
3757         self.assertTrue(not "mismatch" in m.__str__())
3758         self.assertTrue(not "mismatch" in m.__repr__())
3759         #
3760         arr=DataArrayDouble(18) ; arr.iota() ; arr.rearrange(3)
3761         m.setCoords(arr)
3762         self.assertEqual(m.getMeshDimension(),2)
3763         self.assertEqual(m.getSpaceDimension(),3)
3764         self.assertTrue(not "mismatch" in m.__str__())
3765         self.assertTrue(not "mismatch" in m.__repr__())# bug was here !
3766         pass
3767
3768     def testSwig2BugComputeOffsets1(self):
3769         """Non regression test. computeOffsetsFull on empty array must return 0."""
3770         d=DataArrayInt([3])
3771         d.computeOffsetsFull()
3772         self.assertTrue(d.isEqual(DataArrayInt([0,3])))
3773         d=DataArrayInt([])
3774         d.computeOffsets()
3775         self.assertTrue(d.isEqual(DataArrayInt([])))
3776         d=DataArrayInt([])
3777         d.computeOffsetsFull()
3778         self.assertTrue(d.isEqual(DataArrayInt([0]))) # <- bug was here
3779         pass
3780
3781     def testSwig2Cartesianize1(self):
3782         """Test of engine of cartesianize mechanism in medcoupling"""
3783         # cyl 2D
3784         arr=DataArrayDouble([(3,0.2),(2,1.6)]) ; arr.setInfoOnComponents(["A","BB"])
3785         arr2=arr.cartesianize(AX_CYL)
3786         arr2_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836),(-0.05839904460257763,1.9991472060830102)]) ; arr2_exp.setInfoOnComponents(["A","BB"])
3787         self.assertTrue(arr2_exp.isEqual(arr2,1e-14))
3788         # spher 2D
3789         arr3=arr.cartesianize(AX_SPHER)
3790         self.assertTrue(arr2_exp.isEqual(arr3,1e-14))
3791         # cyl 3D
3792         arr=DataArrayDouble([(3,0.2,7.1),(2,1.6,12.3)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3793         arr4=arr.cartesianize(AX_CYL)
3794         arr4_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836,7.1),(-0.05839904460257763,1.9991472060830102,12.3)]) ; arr4_exp.setInfoOnComponents(["A","BB","CCC"])
3795         self.assertTrue(arr4_exp.isEqual(arr4,1e-14))
3796         # spher 3D
3797         arr=DataArrayDouble([(3,0.2,0.5),(2,1.3,5.8)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3798         arr5=arr.cartesianize(AX_SPHER)
3799         arr5_exp=DataArrayDouble([(0.5230462208645272,0.2857414527616764,2.940199733523725),(1.706499157790973,-0.8953424658735863,0.5349976572491747)]) ; arr5_exp.setInfoOnComponents(["A","BB","CCC"])
3800         self.assertTrue(arr5_exp.isEqual(arr5,1e-14))
3801         #
3802         m=MEDCouplingCMesh() ; m.setName("aa") ; m.setDescription("bbb") ; m.setTime(4.125,5,6) ; m.setTimeUnit("ms")
3803         arrX=DataArrayDouble([0,1,2]) ; arrX.setInfoOnComponent(0,"ccc")
3804         arrY=DataArrayDouble([3,4,5,6]) ; arrY.setInfoOnComponent(0,"dddd")
3805         m.setCoords(arrX,arrY)
3806         m2=m.buildCurveLinear()
3807         #
3808         self.assertTrue(isinstance(m2,MEDCouplingCurveLinearMesh))
3809         self.assertEqual(m2.getName(),"aa")
3810         self.assertEqual(m2.getDescription(),"bbb")
3811         self.assertEqual(m2.getTime(),[4.125,5,6])
3812         self.assertEqual(m2.getTimeUnit(),"ms")
3813         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"])
3814         self.assertTrue(m2.getCoords().isEqual(m2c_exp,1e-14))
3815         self.assertEqual(m2.getNodeGridStructure(),(3,4))
3816         pass
3817
3818     def testRemoveIdsFromIndexedArrays1(self):
3819         arr=DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,504,505,601,602])
3820         arrI=DataArrayInt([0,3,7,8,8,13,15])
3821         # case where all elts in inputs are in
3822         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3823         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([501,502],arr2,arrI2))
3824         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,503,504,505,601,602])))
3825         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,11,13])))
3826         # case where part of elts in inputs are in
3827         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3828         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([504,507],arr2,arrI2))
3829         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,505,601,602])))
3830         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,12,14])))
3831         # case where no elts in inputs are in
3832         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3833         self.assertTrue(not MEDCouplingUMesh.RemoveIdsFromIndexedArrays([1,5,701],arr2,arrI2))
3834         self.assertTrue(arr2.isEqual(arr))
3835         self.assertTrue(arrI2.isEqual(arrI))
3836         pass
3837
3838     def testFieldIntIsOnStage1(self):
3839         """ My first test with field int."""
3840         m=MEDCouplingCMesh()
3841         m.setName("mesh")
3842         arrX=DataArrayDouble([0,1,2,3])
3843         m.setCoords(arrX,arrX)
3844         f=MEDCouplingFieldInt(ON_CELLS)
3845         f.setMesh(m)
3846         arr=DataArrayInt(8) ; arr.iota() ;f.setArray(arr)
3847         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
3848         arr=DataArrayInt(9) ; arr.iota() ;f.setArray(arr)
3849         f.checkConsistencyLight()
3850         f.setTimeUnit("ms")
3851         self.assertEqual(f.getTimeUnit(),"ms")
3852         f.setTime(3.2,5,6)
3853         a,b,c=f.getTime()
3854         self.assertEqual(b,5)
3855         self.assertEqual(c,6)
3856         self.assertEqual(a,3.2,12)
3857         pass
3858
3859     def testNoThrowOn1DGTU2UOnNullCells(self):
3860         """ Non regression test : no throw when trying to convert 1DGTUMesh to UMesh on an empty mesh"""
3861         m=MEDCoupling1DGTUMesh("",NORM_POLYGON) ; m.setCoords(DataArrayDouble([],0,3))
3862         m.setNodalConnectivity(DataArrayInt([]),DataArrayInt([0]))
3863         m=m.buildUnstructured()
3864         pass
3865
3866     def testExplodeMeshIntoMicroEdges1(self):
3867         """ test for new functionality MEDCouplingUMesh.explodeMeshIntoMicroEdges"""
3868         m=MEDCouplingUMesh("mesh",2)
3869         coo=DataArrayDouble([2,0,10,0,12,0,0,3,4,5,10,5,12,7,3,2.5,7,2.5,6,0,10,2.5,11,2.5,11,0,7,5],14,2)
3870         m.setCoords(coo)
3871         m.allocateCells()
3872         # here a mix of quadratic, linear cells. Non conform but conform considering micro edges
3873         m.insertNextCell(NORM_TRI6,[0,4,1,7,8,9])
3874         m.insertNextCell(NORM_TRI6,[1,5,2,10,11,12])
3875         m.insertNextCell(NORM_TRI6,[5,1,4,10,8,13])
3876         m.insertNextCell(NORM_TRI3,[3,4,7])
3877         m.insertNextCell(NORM_TRI3,[3,7,0])
3878         m.insertNextCell(NORM_TRI3,[6,2,11])
3879         m.insertNextCell(NORM_TRI3,[6,11,5])
3880         m.insertNextCell(NORM_TRI3,[6,5,13])
3881         m.insertNextCell(NORM_TRI3,[6,13,4])
3882         edges,d,di,rd,rdi=m.explodeMeshIntoMicroEdges() # <- new method
3883         self.assertTrue(MEDCoupling1SGTUMesh(edges).getNodalConnectivity().isEqual(DataArrayInt([0,7,7,4,4,8,8,1,1,9,9,0,1,10,10,5,5,11,11,2,2,12,12,1,4,13,13,5,3,4,7,3,0,3,6,2,11,6,5,6,13,6,4,6])))
3884         self.assertEqual(edges.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer())
3885         self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,7,6,3,2,12,13,14,1,15,15,0,16,17,9,18,18,8,19,19,13,20,20,12,21])))
3886         self.assertTrue(di.isEqual(DataArrayInt([0,6,12,18,21,24,27,30,33,36])))
3887         self.assertTrue(rd.isEqual(DataArrayInt([0,4,0,3,0,2,0,2,0,0,1,2,1,2,1,6,1,5,1,1,2,8,2,7,3,3,4,4,5,5,6,6,7,7,8,8])))
3888         self.assertTrue(rdi.isEqual(DataArrayInt([0,2,4,6,8,9,10,12,14,16,18,19,20,22,24,25,27,28,29,31,33,35,36])))
3889         pass
3890
3891     def testFieldIntIsOnStage2(self):
3892         """ Very important test to check that isEqual of MEDCouplingFieldInt is OK !"""
3893         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3894         m1=m1.buildUnstructured() ; m1.setName("mesh")
3895         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setMesh(m1)
3896         arr1=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr1.setInfoOnComponents(["aa","bbb"])
3897         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
3898         #
3899         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3900         m2=m2.buildUnstructured() ; m2.setName("mesh")
3901         f2=MEDCouplingFieldInt(ON_CELLS) ; f2.setMesh(m2)
3902         arr2=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr2.setInfoOnComponents(["aa","bbb"])
3903         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
3904         #
3905         self.assertTrue(f1.isEqual(f2,1e-12,0.))
3906         f1.getArray()[:]*=2
3907         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
3908         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
3909         f1.getArray()[:]/=2
3910         self.assertTrue(f1.isEqual(f2,1e-12,0.))
3911         #
3912         f1.setName("F1")
3913         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
3914         f1.setName("f1")
3915         self.assertTrue(f1.isEqual(f2,1e-12,0.))
3916         #
3917         f1.getArray().setInfoOnComponents(["aa","bbbb"])
3918         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
3919         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
3920         f1.getArray().setInfoOnComponents(["aa","bbb"])
3921         self.assertTrue(f1.isEqual(f2,1e-12,0.))
3922         #
3923         f3=f2.deepCopy()
3924         self.assertTrue(f1.isEqual(f3,1e-12,0.))
3925         #
3926         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
3927             f4=MEDCouplingFieldInt(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
3928             arr4=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr4.setInfoOnComponents(["aa","bbb"])
3929             f4.setArray(arr4) ; f4.setName("f1")
3930             self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
3931             pass
3932         pass
3933
3934     def testDADSymmetry1(self):
3935         arr=DataArrayDouble([2,3,4],1,3)
3936         res=arr.symmetry3DPlane([0.,0.,0.],[0.,0.,2.])
3937         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-4],1,3),1e-14))
3938         #
3939         res=arr.symmetry3DPlane([-1000,100,-1],[0.,0.,2.])
3940         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-6],1,3),1e-14))
3941         #
3942         res=arr.symmetry3DPlane([0,0,0],[1.,0.,0.])
3943         self.assertTrue(res.isEqual(DataArrayDouble([-2,3,4],1,3),1e-14))
3944         #
3945         res=arr.symmetry3DPlane([0,0,0],[0.,1.,0.])
3946         self.assertTrue(res.isEqual(DataArrayDouble([2,-3,4],1,3),1e-14))
3947         #
3948         res=arr.symmetry3DPlane([0,0,0],[-1.,1.,0.])
3949         self.assertTrue(res.isEqual(DataArrayDouble([3,2,4],1,3),1e-14))
3950         #
3951         plane=[5.,4.,-7.]
3952         a=DataArrayDouble(DataArrayDouble.GiveBaseForPlane(plane))
3953         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[1]).magnitude()[0],0.,13)
3954         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[2]).magnitude()[0],0.,13)
3955         self.assertAlmostEqual(DataArrayDouble.Dot(a[1],a[2]).magnitude()[0],0.,13)
3956         coo=DataArrayDouble.Aggregate([10*a[0]+10*a[1],-10*a[0]+10*a[1],-10*a[0]-10*a[1],10*a[0]-10*a[1]])
3957         m=MEDCouplingUMesh("",2) ; m.setCoords(coo) ; m.allocateCells()
3958         m.insertNextCell(NORM_QUAD4,[0,1,2,3])
3959         d,_=m.distanceToPoint(arr)
3960         res=arr.symmetry3DPlane([0.,0.,0.],plane) #
3961         d2,_=m.distanceToPoint(res)
3962         self.assertAlmostEqual(abs(d-d2),0.,12)
3963         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[0])[0],0.,12)
3964         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[1])[0],0.,12)
3965         self.assertAlmostEqual((res-arr).magnitude()[0]-2*d,0.,12)
3966         self.assertTrue(res.isEqual(DataArrayDouble([2.666666666666667,3.5333333333333333,3.0666666666666666],1,3),1e-12))
3967         pass
3968
3969     def testExtrudedMeshBuildUnstructured1(self):
3970         """ Non reg test. ExtrudedMesh.buildUnstructured used to modify the coordinates of this. It used to lead to an extra amount of memory consumtion. The aim of the test here is to check that buildUnstructured method do not alter the content of the mesh"""
3971         arr=DataArrayDouble(11) ; arr.iota()
3972         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3973         m=m.buildUnstructured()
3974         faces=MEDCouplingCMesh() ; faces.setCoords(arr,arr)
3975         faces=faces.buildUnstructured()
3976         faces.setCoords(m.getCoords())
3977         em=MEDCouplingMappedExtrudedMesh(m,faces,0)
3978         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12))
3979         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
3980         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
3981         pass
3982
3983     def testExtrudedMeshFromCMesh1(self):
3984         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
3985         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ)
3986         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
3987         self.assertTrue(ex.buildUnstructured().isEqual(mesh3D.buildUnstructured(),1e-12))
3988         pass
3989
3990     def testCylSpherPolarCartFiesta(self):
3991         """Test to check new capabilities from to cyl spher polar cart conversions"""
3992         da0=DataArrayDouble([(7,13,2.1),(15,2,-4.2),(-6,12,1.4),(-1,10,-3.5),(-2.1,-3.3,2.7),(-1.4,-0.2,-4),(1.2,-1.3,2.8),(2.5,-0.4,-3)])
3993         self.assertTrue(da0.fromCartToCyl().fromCylToCart().isEqual(da0,1e-12))
3994         self.assertTrue(da0.fromCartToSpher().fromSpherToCart().isEqual(da0,1e-12))
3995         da1=da0[:,:2]
3996         self.assertTrue(da1.fromCartToPolar().fromPolarToCart().isEqual(da1,1e-12))
3997         #
3998         da2=da0[::-1]
3999         pt=[-2.1,0.3,1.1]
4000         vect=[1.,-0.5,0.7]
4001         #
4002         expected=DataArrayDouble([(2.023252607860588,14.699865529518792,1.4934531458504392),(10.91440936818929,7.5640431386495965,8.384564361982669),(-7.1057844983810705,7.853310978767742,-8.354240440239513),(-8.414001990391881,-1.1910713519565301,-6.405928468241733),(-4.35426264858532,1.5616250027467273,1.0916611827536211),(-2.0571195416878396,-2.0266572603615365,-3.1082019786735042),(-1.5714718759210784,0.39735366651452453,2.8883535460356216),(0.8733250236104675,-3.800053532703407,0.45485882614734185)])
4003         da4=da0.fromCartToCylGiven(da2,pt,vect)
4004         self.assertTrue(da4.isEqual(expected,1e-12))
4005         #
4006         m=MEDCouplingUMesh.Build0DMeshFromCoords(da2)
4007         self.assertEqual(m.getDirectAccessOfCoordsArrIfInStructure().getHiddenCppPointer(),da2.getHiddenCppPointer())
4008         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m) ; f0.setArray(da0)
4009         f=f0.computeVectorFieldCyl(pt,vect)
4010         f.checkConsistencyLight()
4011         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
4012         self.assertTrue(f.getArray().isEqual(expected,1e-12))
4013         pass
4014
4015     def testDAIIndicesOfSubPart(self):
4016         a=DataArrayInt([9,10,0,6,4,11,3,8])
4017         b=DataArrayInt([6,0,11,8])
4018         c=a.indicesOfSubPart(b)
4019         self.assertTrue(c.isEqual(DataArrayInt([3,2,5,7])))
4020         #
4021         d=DataArrayInt([9,10,0,6,4,11,0,8])
4022         self.assertRaises(InterpKernelException,d.indicesOfSubPart,b) # 0 appears twice in the d array
4023         f=DataArrayInt([6,0,11,8,12])
4024         self.assertRaises(InterpKernelException,a.indicesOfSubPart,f) # 12 in f does not exist in a
4025         pass
4026
4027     def testDACirPermAndRev1(self):
4028         d=DataArrayInt([1,2,3,4,5,6])
4029         d2=d.deepCopy() ; d2.circularPermutation(1)
4030         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4031         d2=d.deepCopy() ; d2.circularPermutation()
4032         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4033         d2=d.deepCopy() ; d2.circularPermutation(2)
4034         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4035         d2=d.deepCopy() ; d2.circularPermutation(3)
4036         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4037         d2=d.deepCopy() ; d2.circularPermutation(4)
4038         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4039         d2=d.deepCopy() ; d2.circularPermutation(5)
4040         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4041         d2=d.deepCopy() ; d2.circularPermutation(6)
4042         self.assertTrue(d2.isEqual(d))
4043         d2=d.deepCopy() ; d2.circularPermutation(7)
4044         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4045         d2=d.deepCopy() ; d2.circularPermutation(-1)
4046         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4047         d2=d.deepCopy() ; d2.circularPermutation(-2)
4048         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4049         d2=d.deepCopy() ; d2.circularPermutation(-3)
4050         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4051         d2=d.deepCopy() ; d2.circularPermutation(-4)
4052         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4053         d2=d.deepCopy() ; d2.circularPermutation(-5)
4054         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4055         d2=d.deepCopy() ; d2.circularPermutation(-6)
4056         self.assertTrue(d2.isEqual(d))
4057         d2=d.deepCopy() ; d2.circularPermutation(-7)
4058         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4059         ####
4060         d=DataArrayInt([1,2,3,4,5,6],2,3)
4061         d2=d.deepCopy() ; d2.circularPermutationPerTuple(0)
4062         self.assertTrue(d2.isEqual(d))
4063         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4064         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4065         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4066         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4067         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4068         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4069         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4070         self.assertTrue(d2.isEqual(d))
4071         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4072         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4073         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4074         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4075         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4076         self.assertTrue(d2.isEqual(d))
4077         d.setInfoOnComponents(["a","b","c"])
4078         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4079         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4080         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4081         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4082         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4083         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4084         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4085         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4086         d2=d.deepCopy() ; d2.circularPermutationPerTuple(4)
4087         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4088         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4089         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4090         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4091         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4092         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4093         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4094         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-4)
4095         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4096         ####
4097         d2=d.deepCopy() ; d2.reversePerTuple()
4098         d3Exp=DataArrayInt([3,2,1,6,5,4],2,3) ; d3Exp.setInfoOnComponents(["c","b","a"])
4099         self.assertTrue(d3Exp.isEqual(d2))
4100         pass
4101
4102     def testDAExplodeComponents1(self):
4103         d=DataArrayDouble([(1,2),(3,4),(5,6)])
4104         d.setName("toto")
4105         d.setInfoOnComponents(["a","b"])
4106         d2=d.explodeComponents()
4107         self.assertEqual(len(d2),2)
4108         #
4109         d3=DataArrayDouble([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4110         self.assertTrue(d3.isEqual(d2[0],1e-14))
4111         d4=DataArrayDouble([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4112         self.assertTrue(d4.isEqual(d2[1],1e-14))
4113         #
4114         d=DataArrayInt([(1,2),(3,4),(5,6)])
4115         d.setName("toto")
4116         d.setInfoOnComponents(["a","b"])
4117         d2=d.explodeComponents()
4118         self.assertEqual(len(d2),2)
4119         #
4120         d3=DataArrayInt([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4121         self.assertTrue(d3.isEqual(d2[0]))
4122         d4=DataArrayInt([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4123         self.assertTrue(d4.isEqual(d2[1]))
4124         pass
4125
4126     def testVoronoi2D_1(self):
4127         """ Check of voronize on 2D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4128         tmp=MEDCouplingCMesh("mesh")
4129         arr=DataArrayDouble(5) ; arr.iota()
4130         tmp.setCoords(arr,arr)
4131         tmp=tmp.build1SGTUnstructured()
4132         conn=tmp.getNodalConnectivity()
4133         conn.rearrange(4)
4134         conn.reversePerTuple()
4135         conn.circularPermutationPerTuple(2)
4136         conn.rearrange(1)
4137         coo=tmp.getCoords().deepCopy()
4138         coo.circularPermutationPerTuple(2) ; coo*=0.1
4139         coo.reverse()
4140         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4141         coo2*=0.14
4142         coo2.circularPermutationPerTuple(2)
4143         tmp.getCoords()[:]+=coo2*coo
4144         #
4145         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4146         field.setName("MyFieldPG") ; field.setMesh(tmp)
4147         field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4148         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4149         field.setArray(arr)
4150         field.checkConsistencyLight()
4151         ####
4152         fieldOnCell=field.voronoize(1e-12) # hot point
4153         fieldOnCell.checkConsistencyLight()
4154         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),112)
4155         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),256)
4156         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4157         meaRef=field.getMesh().getMeasureField(True).getArray()
4158         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4159         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4160         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4161         mea.rearrange(7)
4162         mea2=mea.sumPerTuple()
4163         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4164         pass
4165
4166     def testVoronoi2D_2(self):
4167         """More aggressive 2D test. No warping here. To check data"""
4168         tmp=MEDCouplingCMesh("mesh")
4169         arr=DataArrayDouble([-1.,1.])
4170         tmp.setCoords(arr,arr)
4171         tmp=tmp.buildUnstructured()
4172         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4173         field.setName("MyFieldPG") ; field.setMesh(tmp)
4174         field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4175         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4176         field.setArray(arr)
4177         field.checkConsistencyLight()
4178         #
4179         fieldOnCell=field.voronoize(1e-12) # hot point
4180         fieldOnCell.checkConsistencyLight()
4181         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4182         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),16)
4183         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4184         meaRef=DataArrayDouble([0.65,0.4710714285714285,0.59875,0.68,0.73875,0.4,0.46142857142857235])
4185         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4186         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4187         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4188         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4189         #
4190         gsPt=field.getLocalizationOfDiscr()
4191         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4192         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4193         self.assertTrue(b.isIota(8))
4194         #
4195         self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),22)# last little test to reduce chance of errors. For humans there 21 but last tiny edge is split into 2 subedges due to alg
4196         pass
4197
4198     def testVoronoi3D_1(self):
4199         """ Check of voronize on 3D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4200         tmp=MEDCouplingCMesh("mesh")
4201         arr=DataArrayDouble(5) ; arr.iota()
4202         tmp.setCoords(arr,arr)
4203         tmp=tmp.build1SGTUnstructured()
4204         conn=tmp.getNodalConnectivity()
4205         conn.rearrange(4)
4206         conn.reversePerTuple()
4207         conn.circularPermutationPerTuple(2)
4208         conn.rearrange(1)
4209         coo=tmp.getCoords().deepCopy()
4210         coo.circularPermutationPerTuple(2) ; coo*=0.1
4211         coo.reverse()
4212         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4213         coo2*=0.14
4214         coo2.circularPermutationPerTuple(2)
4215         tmp.getCoords()[:]+=coo2*coo
4216         #
4217         tmp.changeSpaceDimension(3,0.)
4218         #
4219         arrZ=DataArrayDouble(5) ; arrZ.iota()
4220         mz=MEDCouplingCMesh() ; mz.setCoords(arrZ) ; mz=mz.buildUnstructured()
4221         mz.changeSpaceDimension(3,0.)
4222         mz.getCoords().circularPermutationPerTuple(1)
4223         tmp=tmp.buildUnstructured().buildExtrudedMesh(mz,0)
4224         #
4225         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4226         field.setName("MyFieldPG") ; field.setMesh(tmp)
4227         field.setGaussLocalizationOnType(NORM_HEXA8,[-1,-1,-1,  1,-1,-1,  1,1,-1,  -1,1,-1, -1,-1,1, 1,-1,1, 1,1,1, -1,1,1],[0.8,-0.8,0., 0.8,0.8,0., -0.8,0.8,0., -0.8,-0.8,0., 0.,0.,0., 0.2,0.2,0., 0.1,0.3,0.],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4228         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4229         field.setArray(arr)
4230         field.checkConsistencyLight()
4231         ####
4232         fieldOnCell=field.voronoize(1e-12) # hot point
4233         fieldOnCell.checkConsistencyLight()
4234         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4235         meaRef=field.getMesh().getMeasureField(True).getArray()
4236         mea=fieldOnCell.getMesh().getMeasureField(False).getArray()
4237         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4238         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4239         mea.rearrange(7)
4240         mea2=mea.sumPerTuple()
4241         delta=(meaRef-mea2)
4242         delta.abs()
4243         delta/=meaRef
4244         self.assertEqual(len(delta.findIdsNotInRange(0,1e-2)),0) # 1e-2 because hexa8 are warped !
4245         pass
4246
4247     def testVoronoi3D_2(self):
4248         """More aggressive 3D test. No warping here. To check data"""
4249         tmp=MEDCouplingCMesh("mesh")
4250         arr=DataArrayDouble([-1.,1.])
4251         tmp.setCoords(arr,arr,arr)
4252         tmp=tmp.buildUnstructured()
4253         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4254         field.setName("MyFieldPG") ; field.setMesh(tmp)
4255         field.setGaussLocalizationOnType(NORM_HEXA8,[-1,-1,-1,  1,-1,-1,  1,1,-1,  -1,1,-1, -1,-1,1, 1,-1,1, 1,1,1, -1,1,1],[0.8,-0.8,0., 0.8,0.8,0., -0.8,0.8,0., -0.8,-0.8,0., 0.,0.,0., 0.2,0.2,0., 0.1,0.3,0.],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4256         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4257         field.setArray(arr)
4258         field.checkConsistencyLight()
4259         #
4260         fieldOnCell=field.voronoize(1e-12) # hot point
4261         fieldOnCell.checkConsistencyLight()
4262         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4263         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),34)
4264         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4265         meaRef=DataArrayDouble([1.3,0.9421428571428572,1.1975,1.36,1.4775,0.8,0.922857142857143])
4266         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4267         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4268         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4269         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4270         #
4271         gsPt=field.getLocalizationOfDiscr()
4272         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4273         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4274         self.assertTrue(b.isIota(8))
4275         #
4276         self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),2*7+21)
4277         pass
4278
4279     def testVoronoi3DSurf_1(self):
4280         tmp=MEDCouplingCMesh("mesh")
4281         arr=DataArrayDouble(5) ; arr.iota()
4282         tmp.setCoords(arr,arr)
4283         tmp=tmp.build1SGTUnstructured()
4284         conn=tmp.getNodalConnectivity()
4285         conn.rearrange(4)
4286         conn.reversePerTuple()
4287         conn.circularPermutationPerTuple(2)
4288         conn.rearrange(1)
4289         coo=tmp.getCoords().deepCopy()
4290         coo.circularPermutationPerTuple(2) ; coo*=0.1
4291         coo.reverse()
4292         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4293         coo2*=0.14
4294         coo2.circularPermutationPerTuple(2)
4295         tmp.getCoords()[:]+=coo2*coo
4296         #
4297         tmp.changeSpaceDimension(3,0.)    # force 3D surf
4298         tmp.rotate([0,0,0],[1,0,0],pi/3)  # force 3D surf
4299         #
4300         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4301         field.setName("MyFieldPG") ; field.setMesh(tmp)
4302         field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
4303         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4304         field.setArray(arr)
4305         field.checkConsistencyLight()
4306         #####
4307         fieldOnCell=field.voronoize(1e-12);
4308         fieldOnCell.checkConsistencyLight()
4309         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4310         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),2)
4311         self.assertEqual(field.getMesh().getSpaceDimension(),fieldOnCell.getMesh().getSpaceDimension())
4312         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4313         meaRef=field.getMesh().getMeasureField(True).getArray()
4314         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4315         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4316         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4317         mea.rearrange(7)
4318         mea2=mea.sumPerTuple()
4319         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4320         pass
4321
4322     def testVoronoi1D_1(self):
4323         tmp=MEDCouplingCMesh("mesh")
4324         arr=DataArrayDouble(5) ; arr.iota()
4325         tmp.setCoords(arr)
4326         tmp=tmp.build1SGTUnstructured()
4327         tmp1=tmp.deepCopy()
4328         tmp.changeSpaceDimension(2,0.)
4329         tmp.getCoords()[:,1]=pi/(len(arr)-1)*tmp.getCoords()[:,0]
4330         tmp.getCoords()[:,0]=1.
4331         tmp.setCoords(tmp.getCoords().fromPolarToCart())
4332         tmp.changeSpaceDimension(3,1.)
4333         #
4334         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4335         field.setName("MyFieldPG") ; field.setMesh(tmp)
4336         field.setGaussLocalizationOnType(NORM_SEG2,[-1.,1.],[-0.9,-0.8,0.2,0.4,0.5,0.9],[0.1,0.1,0.1,0.1,0.1,0.5])
4337         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4338         field.setArray(arr)
4339         field.checkConsistencyLight()
4340         ####
4341         fieldOnCell=field.voronoize(1e-12);
4342         fieldOnCell.checkConsistencyLight()
4343         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4344         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),1)
4345         assert(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4346         meaRef=field.getMesh().getMeasureField(True).getArray()
4347         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4348         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4349         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),6)
4350         mea.rearrange(6)
4351         mea2=mea.sumPerTuple()
4352         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4353         pass
4354
4355     def testFieldDoubleConvertToLinear1(self):
4356         da=DataArrayDouble([0,0, 1,0, 2,0, 3,0, 0.5,0, 1.5,0, 2.5,0, 0,0.5, 0.5,0.5, 1, 0.5, 1.5,0.5, 2,0.5, 3,0.5, 0,1, 1,1, 2,1, 2.5,1, 3,1],18,2)
4357         da.setInfoOnComponents(["g","h"])
4358         m=MEDCouplingUMesh("mesh",2)
4359         m.setCoords(da)
4360         m.allocateCells()
4361         m.insertNextCell(NORM_TRI6,[0,1,13,4,9,7])
4362         m.insertNextCell(NORM_TRI6,[1,2,14,5,10,9])
4363         m.insertNextCell(NORM_QUAD8,[2,3,17,15,6,12,16,11])
4364         refPtr=m.getHiddenCppPointer()
4365         f=MEDCouplingFieldDouble(ON_NODES)
4366         f.setName("aa")
4367         f.setMesh(m)
4368         arr=DataArrayDouble(18*2) ; arr.iota()
4369         arr.rearrange(2)
4370         arr.setInfoOnComponents(["bb","ccc"])
4371         f.setArray(arr)
4372         f.setTime(0.5,2,3)
4373         f.checkConsistencyLight()
4374         #
4375         f1=f.convertQuadraticCellsToLinear()
4376         self.assertTrue(f.getMesh().getHiddenCppPointer(),refPtr)
4377         self.assertTrue(f1.getMesh().getHiddenCppPointer()!=refPtr)
4378         f1.checkConsistencyLight()
4379         self.assertEqual(f1.getName(),"aa")
4380         self.assertEqual(f1.getTypeOfField(),ON_NODES)
4381         da0=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)])
4382         da0.setInfoOnComponents(["g","h"])
4383         self.assertTrue(f1.getMesh().getCoords().isEqual(da0,1e-12))
4384         self.assertTrue(f1.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4385         self.assertTrue(f1.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4386         da2=DataArrayDouble([(0,1),(2,3),(4,5),(6,7),(26,27),(28,29),(30,31),(34,35)])
4387         da2.setInfoOnComponents(["bb","ccc"])
4388         self.assertTrue(f1.getArray().isEqual(da2,1e-12))
4389         self.assertEqual(f1.getTime(),[0.5,2,3])
4390         #
4391         f2=MEDCouplingFieldDouble(ON_CELLS)
4392         f2.setName("aa")
4393         f2.setMesh(m)
4394         arr=DataArrayDouble(3*2) ; arr.iota()
4395         arr.rearrange(2)
4396         arr.setInfoOnComponents(["bb","ccc"])
4397         f2.setArray(arr)
4398         f2.setTime(0.5,2,3)
4399         f2.checkConsistencyLight()
4400         f3=f2.convertQuadraticCellsToLinear()
4401         self.assertEqual(f2.getMesh().getHiddenCppPointer(),refPtr)
4402         f3.checkConsistencyLight()
4403         self.assertTrue(f3.getMesh().getHiddenCppPointer()!=refPtr)
4404         self.assertTrue(f3.getMesh().getCoords().isEqual(da0,1e-12))
4405         self.assertTrue(f3.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4406         self.assertTrue(f3.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4407         self.assertEqual(f2.getArray().getHiddenCppPointer(),f3.getArray().getHiddenCppPointer())
4408         self.assertEqual(f3.getTime(),[0.5,2,3])
4409         pass
4410
4411     def testBuild1DMeshFromCoords1(self):
4412         da=DataArrayDouble([(3,4),(5,6),(7,8)])
4413         da.setName("ZeArr")
4414         da0=da.deepCopy()
4415         m=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4416         m.checkConsistencyLight()
4417         self.assertEqual(da0.getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
4418         self.assertTrue(da.isEqual(da0,1e-12))
4419         self.assertEqual(m.getName(),da.getName())
4420         self.assertEqual(m.getMeshDimension(),1)
4421         self.assertTrue(isinstance(m,MEDCouplingUMesh))
4422         m1=MEDCoupling1SGTUMesh(m)
4423         m1.checkConsistencyLight()
4424         self.assertTrue(m1.getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2])))
4425         #
4426         da0.setName("")
4427         m2=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4428         m2.checkConsistencyLight()
4429         self.assertEqual(da0.getHiddenCppPointer(),m2.getCoords().getHiddenCppPointer())
4430         self.assertEqual(m2.getName(),"Mesh")
4431         pass
4432
4433     def testVoronoi3D_3(self):
4434         """Non regression test to check MEDCouplingUMesh::clipSingle3DCellByPlane"""
4435         coo=DataArrayDouble([0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],4,3)
4436         m=MEDCouplingUMesh("mesh",3)
4437         m.setCoords(coo) ; m.allocateCells()
4438         m.insertNextCell(NORM_TETRA4,[0,2,3,1])
4439         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4440         f.setMesh(m) ; f.setName("field")
4441         f.setGaussLocalizationOnType(NORM_TETRA4,[0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105], [0.041667,0.041667,0.041667,0.041667])
4442         f.setArray(DataArrayDouble([0,1,2,3]))
4443         f3=f.voronoize(1e-12)
4444         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4445         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4446         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4447         pass
4448     
4449     def testVoronoi3D_4(self):
4450         """Idem testVoronoi3D_3 except that here quadratic cells are considered"""
4451         coo=DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5],10,3)
4452         m=MEDCouplingUMesh("mesh",3)
4453         m.setCoords(coo) ; m.allocateCells()
4454         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4455         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4456         f.setMesh(m) ; f.setName("field")
4457         f.setGaussLocalizationOnType(NORM_TETRA10,[0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105], [0.041667,0.041667,0.041667,0.041667])
4458         f.setArray(DataArrayDouble([0,1,2,3]))
4459         f3=f.voronoize(1e-12)
4460         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4461         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4462         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4463         pass
4464
4465     def testConvertQuadToLin4Gauss_1(self):
4466         coo=DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5],10,3)
4467         m=MEDCouplingUMesh("mesh",3)
4468         m.setCoords(coo) ; m.allocateCells()
4469         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4470         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4471         f.setMesh(m) ; f.setName("field")
4472         aaaa=[0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5]
4473         bbbb=[0.1381966011250105,0.1381966011250105,0.1381966011250105,0.1381966011250105,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.1381966011250105]
4474         cccc=[0.041667,0.041667,0.041667,0.041667]
4475         f.setGaussLocalizationOnType(NORM_TETRA10,aaaa,bbbb,cccc)
4476         f.setArray(DataArrayDouble([0,1,2,3]))
4477         f.setTime(1.,2,3)
4478         #
4479         mcpy=m.deepCopy() ; mcpy.convertQuadraticCellsToLinear() ; mcpy.zipCoords()
4480         #
4481         f2=f.convertQuadraticCellsToLinear()
4482         f2.checkConsistencyLight()
4483         self.assertTrue(f2.getMesh().isEqual(mcpy,1e-12))
4484         self.assertTrue(f2.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4485         self.assertEqual(f2.getNbOfGaussLocalization(),1)
4486         gl=f2.getGaussLocalization(0)
4487         self.assertEqual(gl.getType(),NORM_TETRA4)
4488         self.assertTrue(DataArrayDouble(gl.getRefCoords()).isEqual(DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0]),1e-12))
4489         self.assertTrue(DataArrayDouble(gl.getGaussCoords()).isEqual(DataArrayDouble(bbbb),1e-12))
4490         self.assertTrue(DataArrayDouble(gl.getWeights()).isEqual(DataArrayDouble(cccc),1e-12))
4491         self.assertEqual(f2.getName(),"field")
4492         self.assertEqual(f2.getTime(),[1.,2,3])
4493         pass
4494
4495     def testDADCumSum1(self):
4496         d=DataArrayDouble([3.,2.,4.,5.])
4497         self.assertTrue(d.cumSum().isEqual(DataArrayDouble([0.,3.,5.,9.,14.]),1e-12))
4498         d2=DataArrayDouble([])
4499         self.assertTrue(d2.cumSum().isEqual(DataArrayDouble([0.]),1e-12))
4500         d.rearrange(2)
4501         self.assertRaises(InterpKernelException,d.cumSum)
4502         pass
4503
4504     def testDAIFromLinkedListOfPairToList1(self):
4505         d=DataArrayInt([(5,7),(7,3),(3,12),(12,17)])
4506         zeRes=DataArrayInt([5,7,3,12,17])
4507         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4508         d.rearrange(1)
4509         self.assertRaises(InterpKernelException,d.fromLinkedListOfPairToList)
4510         d.rearrange(2)
4511         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4512         d2=DataArrayInt([(5,7)])
4513         self.assertTrue(d2.fromLinkedListOfPairToList().isEqual(DataArrayInt([5,7])))
4514         d3=DataArrayInt([(5,7),(7,3),(4,12),(12,17)])
4515         self.assertRaises(InterpKernelException,d3.fromLinkedListOfPairToList) # not a linked list of pair
4516         d4=DataArrayInt([(5,7),(7,3),(12,3),(12,17)])
4517         self.assertRaises(InterpKernelException,d4.fromLinkedListOfPairToList) # not a linked list of pair, but can be repaired !
4518         d4.sortEachPairToMakeALinkedList()
4519         self.assertTrue(d4.fromLinkedListOfPairToList().isEqual(zeRes))
4520         pass
4521
4522     def testUMeshExplodeIntoEdges1(self):
4523         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured()
4524         self.assertEqual(m.getMeshDimension(),3)
4525         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4526         b0,b1,b2,b3,b4=m.explode3DMeshTo1D()
4527         self.assertTrue(a0.isEqual(b0,1e-12))
4528         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4529         #
4530         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4531         self.assertEqual(m.getMeshDimension(),2)
4532         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4533         b0,b1,b2,b3,b4=m.buildDescendingConnectivity()
4534         self.assertTrue(a0.isEqual(b0,1e-12))
4535         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4536         pass
4537
4538     def testUMeshComputeEnlargedNeighborsOfNodes(self):
4539         m=MEDCouplingCMesh() ; arr=DataArrayDouble(4) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4540         a,b=m.computeEnlargedNeighborsOfNodes()
4541         self.assertTrue(a.isEqual(DataArrayInt([1,4,5,0,2,4,5,6,1,3,5,6,7,2,6,7,0,1,5,8,9,0,1,2,4,6,8,9,10,1,2,3,5,7,9,10,11,2,3,6,10,11,4,5,9,12,13,4,5,6,8,10,12,13,14,5,6,7,9,11,13,14,15,6,7,10,14,15,8,9,13,8,9,10,12,14,9,10,11,13,15,10,11,14])))
4542         self.assertTrue(b.isEqual(DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84])))
4543         pass
4544
4545     def testDAIfindIdsExt1(self):
4546         d=DataArrayInt([4,6,-2,3,7,0,10])
4547         self.assertTrue(d.findIdsGreaterOrEqualTo(3).isEqual(DataArrayInt([0,1,3,4,6])))
4548         self.assertTrue(d.findIdsGreaterThan(3).isEqual(DataArrayInt([0,1,4,6])))
4549         self.assertTrue(d.findIdsLowerThan(3).isEqual(DataArrayInt([2,5])))
4550         self.assertTrue(d.findIdsLowerOrEqualTo(3).isEqual(DataArrayInt([2,3,5])))
4551         pass
4552
4553     def testDAFacto1(self):
4554         """Test focused of new wrapped methods for MEDCouplingFieldInt thanks to code factorization."""
4555         d=DataArrayDouble(7) ; d.iota()
4556         m=MEDCouplingUMesh.Build1DMeshFromCoords(d)
4557         f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(m) ; arr=DataArrayInt(6) ; arr.iota() ; f.setArray(arr) ; f.checkConsistencyLight()
4558         f_0=f[::2] # test is here
4559         self.assertTrue(f_0.getArray().isEqual(DataArrayInt([0,2,4])))
4560         self.assertTrue(f_0.getMesh().isEqual(m[[0,2,4]],1e-12))
4561         #
4562         f2=MEDCouplingFieldInt(ON_NODES) ; f2.setMesh(m) ; arr=DataArrayInt(7) ; arr.iota() ; f2.setArray(arr) ; f2.checkConsistencyLight()
4563         f_1=f2[::2] # test is here
4564         self.assertTrue(f_1.getArray().isEqual(DataArrayInt([0,1,2,3,4,5])))
4565         m_1=m[[0,2,4]] ; m_1.zipCoords()
4566         self.assertTrue(f_1.getMesh().isEqual(m_1,1e-12))
4567         pass
4568
4569     def testFieldFloatIsOnStage1(self):
4570         """ My first test with field int."""
4571         m=MEDCouplingCMesh()
4572         m.setName("mesh")
4573         arrX=DataArrayDouble([0,1,2,3])
4574         m.setCoords(arrX,arrX)
4575         f=MEDCouplingFieldFloat(ON_CELLS)
4576         f.setMesh(m)
4577         arr=DataArrayFloat(8) ; arr.iota() ;f.setArray(arr)
4578         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
4579         arr=DataArrayFloat(9) ; arr.iota() ;f.setArray(arr)
4580         f.checkConsistencyLight()
4581         f.setTimeUnit("ms")
4582         self.assertEqual(f.getTimeUnit(),"ms")
4583         f.setTime(3.2,5,6)
4584         a,b,c=f.getTime()
4585         self.assertEqual(b,5)
4586         self.assertEqual(c,6)
4587         self.assertEqual(a,3.2,12)
4588         pass
4589
4590     def testFieldFloatIsOnStage2(self):
4591         """ Very important test to check that isEqual of MEDCouplingFieldFloat is OK !"""
4592         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4593         m1=m1.buildUnstructured() ; m1.setName("mesh")
4594         f1=MEDCouplingFieldFloat(ON_CELLS) ; f1.setMesh(m1)
4595         arr1=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr1.setInfoOnComponents(["aa","bbb"])
4596         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
4597         #
4598         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4599         m2=m2.buildUnstructured() ; m2.setName("mesh")
4600         f2=MEDCouplingFieldFloat(ON_CELLS) ; f2.setMesh(m2)
4601         arr2=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr2.setInfoOnComponents(["aa","bbb"])
4602         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
4603         #
4604         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4605         f1.getArray()[:]*=2
4606         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4607         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4608         f1.getArray()[:]/=2
4609         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4610         #
4611         f1.setName("F1")
4612         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4613         f1.setName("f1")
4614         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4615         #
4616         f1.getArray().setInfoOnComponents(["aa","bbbb"])
4617         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4618         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4619         f1.getArray().setInfoOnComponents(["aa","bbb"])
4620         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4621         #
4622         f3=f2.deepCopy()
4623         self.assertTrue(f1.isEqual(f3,1e-12,0.))
4624         #
4625         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
4626             f4=MEDCouplingFieldFloat(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
4627             arr4=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr4.setInfoOnComponents(["aa","bbb"])
4628             f4.setArray(arr4) ; f4.setName("f1")
4629             self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
4630             pass
4631         pass
4632
4633     def testLTGTDAD1(self):
4634         d=DataArrayDouble(10) ; d.iota()
4635         self.assertTrue(d.findIdsLowerThan(0).empty())
4636         self.assertTrue(d.findIdsLowerThan(1).isEqual(DataArrayInt([0])))
4637         d-=5.
4638         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([0,1,2,3,4])))
4639         self.assertTrue(d.findIdsGreaterThan(0.).isEqual(DataArrayInt([6,7,8,9])))
4640         self.assertTrue(d.convertToFloatArr().isEqual(DataArrayFloat([-5,-4,-3,-2,-1,0,1,2,3,4]),1e-7))
4641         self.assertTrue(d.convertToFloatArr().convertToDblArr().isEqual(d,1e-12))
4642         pass
4643
4644     def testMapII1(self):
4645         """ Test optimized maps for renumbering. Typical usage local to global in parallel mode"""
4646         d=DataArrayInt([1003,1007])
4647         m=d.invertArrayN2O2O2NOptimized()
4648         d2=DataArrayInt([1003,1003,1007,1003,1007])
4649         d2.transformWithIndArr(m)
4650         self.assertTrue(d2.isEqual(DataArrayInt([0,0,1,0,1])))
4651         pass
4652
4653     def testDAICheckUniformAndGuess1(self):
4654         d=DataArrayInt([3,3],1,2)
4655         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non single compo
4656         d=DataArrayInt([])
4657         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# empty
4658         d=DataArrayInt()
4659         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non allocated
4660         d=DataArrayInt([3,3,3])
4661         self.assertEqual(3,d.checkUniformAndGuess())
4662         d=DataArrayInt([7])
4663         self.assertEqual(7,d.checkUniformAndGuess())
4664         d=DataArrayInt([3,4,3])
4665         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non uniform
4666         pass
4667     
4668     pass
4669
4670 if __name__ == '__main__':
4671     unittest.main()