Salome HOME
Load interpolation matrix from the outside
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingBasicsTest5.py
1 #  -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 from MEDCoupling import *
21 import unittest
22 from math import pi,e,sqrt,cos,sin
23 from datetime import datetime
24 from MEDCouplingDataForTest import MEDCouplingDataForTest
25 import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@edf.fr
26
27 class MEDCouplingBasicsTest5(unittest.TestCase):
28     def testSwig2FieldDoubleBuildSubPartRange1(self):
29         #ON_CELLS
30         m=MEDCouplingDataForTest.build2DTargetMesh_1()
31         f=MEDCouplingFieldDouble(ON_CELLS)
32         f.setMesh(m)
33         arr = DataArrayDouble(5, 2) ; arr[:, 0] = list(range(7, 12)) ; arr[:, 1] = 100 + arr[:, 0]
34         f.setArray(arr)
35         f.checkConsistencyLight()
36         ff=f[1:-1:2]
37         ff.checkConsistencyLight()
38         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
39         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
40         self.assertTrue(2,ff.getMesh().getNumberOfCells())
41         self.assertTrue(ff.getArray().isEqual(arr[[1,3]],1e-12))
42         #
43         a,b=f.buildSubMeshDataRange(2,5,1)
44         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
45         self.assertEqual(b,slice(2,5,1))
46         ff=f[2:]
47         ff.checkConsistencyLight()
48         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
49         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
50         self.assertTrue(3,ff.getMesh().getNumberOfCells())
51         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4]],1e-12))
52         #
53         ff=f[-2:0:-1]
54         ff.checkConsistencyLight()
55         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
56         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
57         self.assertTrue(3,ff.getMesh().getNumberOfCells())
58         self.assertTrue(ff.getArray().isEqual(arr[[3,2,1]],1e-12))
59         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[3,2,1],1],1e-12))
60         #ON_NODES
61         f=MEDCouplingFieldDouble(ON_NODES)
62         f.setMesh(m)
63         arr = DataArrayDouble(9, 2) ; arr[:, 0] = list(range(7, 16)) ; arr[:, 1] = 100 + arr[:, 0]
64         f.setArray(arr)
65         f.checkConsistencyLight()
66         ff=f[1:-1:2]
67         ff.checkConsistencyLight()
68         self.assertTrue((m.buildPartOfMySelf([1,3],False)).isEqual(ff.getMesh(),1e-12))
69         self.assertTrue(6,ff.getMesh().getNumberOfNodes())
70         self.assertTrue(2,ff.getMesh().getNumberOfCells())
71         self.assertTrue(ff.getArray().isEqual(arr[[1,2,3,4,6,7]],1e-12))
72         #
73         m2=m.buildPartRange(2,5,1)
74         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(m2,1e-12))
75         m2,b=m.buildPartRangeAndReduceNodes(2,5,1)
76         self.assertTrue(m.buildPartOfMySelf([2,3,4],False).isEqual(m2,1e-12))
77         self.assertTrue(b.isEqual(DataArrayInt([-1,-1,0,1,2,3,4,5,6])))
78         a,b=f.buildSubMeshDataRange(2,5,1)
79         self.assertTrue(m.buildPartOfMySelf([2,3,4],False).isEqual(a,1e-12))
80         self.assertTrue(b.isEqual(DataArrayInt([2,3,4,5,6,7,8])))
81         ff=f[2:]
82         ff.checkConsistencyLight()
83         self.assertTrue((m.buildPartOfMySelf([2,3,4],False)).isEqual(ff.getMesh(),1e-12))
84         self.assertTrue(7,ff.getMesh().getNumberOfNodes())
85         self.assertTrue(3,ff.getMesh().getNumberOfCells())
86         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4,5,6,7,8]],1e-12))
87         #
88         ff=f[-2:0:-1]
89         ff.checkConsistencyLight()
90         self.assertTrue((m.buildPartOfMySelf([3,2,1],False)).isEqual(ff.getMesh(),1e-12))
91         self.assertTrue(7,ff.getMesh().getNumberOfNodes())
92         self.assertTrue(3,ff.getMesh().getNumberOfCells())
93         self.assertTrue(ff.getArray().isEqual(arr[[1,2,3,4,5,6,7]],1e-12))
94         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[1,2,3,4,5,6,7],1],1e-12))
95         #ON_GAUSS_NE
96         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
97         f.setMesh(m)
98         arr = DataArrayDouble(18, 2) ; arr[:, 0] = list(range(7, 25)) ; arr[:, 1] = 100 + arr[:, 0]
99         f.setArray(arr)
100         f.checkConsistencyLight()
101         ff=f[1:-1:2]
102         ff.checkConsistencyLight()
103         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
104         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
105         self.assertTrue(2,ff.getMesh().getNumberOfCells())
106         self.assertTrue(ff.getArray().isEqual(arr[[4,5,6,10,11,12,13]],1e-12))
107         #
108         a,b=f.buildSubMeshDataRange(2,5,1)
109         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
110         self.assertEqual(b,slice(7,18,1))
111         ff=f[2:]
112         ff.checkConsistencyLight()
113         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
114         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
115         self.assertTrue(3,ff.getMesh().getNumberOfCells())
116         self.assertTrue(ff.getArray().isEqual(arr[[7,8,9,10,11,12,13,14,15,16,17]],1e-12))
117         #
118         ff=f[-2:0:-1]
119         ff.checkConsistencyLight()
120         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
121         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
122         self.assertTrue(3,ff.getMesh().getNumberOfCells())
123         self.assertTrue(ff.getArray().isEqual(arr[[10,11,12,13,7,8,9,4,5,6]],1e-12))
124         self.assertTrue(f[-2:0:-1,1].getArray().isEqual(arr[[10,11,12,13,7,8,9,4,5,6],1],1e-12))
125         #ON_GAUSS_PT
126         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
127         f.setMesh(m)
128         f.setGaussLocalizationOnCells([0,4],[0,0,1,0,1,1,1,0],[1.1,1.1,2.2,2.2],[0.2,0.8]);
129         f.setGaussLocalizationOnCells([3],[0,0,1,0,1,1,1,0],[1.1,1.1,2.2,2.2,3.,3.],[0.2,0.4,0.4]);
130         f.setGaussLocalizationOnCells([1],[0,0,1,0,1,0],[1.1,1.1,2.2,2.2,3.,3.,4.,4.],[0.1,0.1,0.4,0.4]);
131         f.setGaussLocalizationOnCells([2],[0,0,1,0,1,0],[1.1,1.1,2.2,2.2,3.,3.,4.,4.,5.,5.],[0.1,0.1,0.4,0.3,0.1]);
132         arr = DataArrayDouble(16, 2) ; arr[:, 0] = list(range(7, 23)) ; arr[:, 1] = 100 + arr[:, 0]
133         f.setArray(arr)
134         f.checkConsistencyLight()
135         ff=f[1:-1:2]
136         ff.checkConsistencyLight()
137         self.assertTrue((m.buildPartOfMySelf([1,3],True)).isEqual(ff.getMesh(),1e-12))
138         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
139         self.assertTrue(2,ff.getMesh().getNumberOfCells())
140         self.assertTrue(ff.getArray().isEqual(arr[[2,3,4,5,11,12,13]],1e-12))
141         #
142         a,b=f.buildSubMeshDataRange(2,5,1)
143         self.assertTrue(m.buildPartOfMySelf([2,3,4],True).isEqual(a,1e-12))
144         self.assertEqual(b,slice(6,16,1))
145         ff=f[2:]
146         ff.checkConsistencyLight()
147         self.assertTrue((m.buildPartOfMySelf([2,3,4],True)).isEqual(ff.getMesh(),1e-12))
148         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
149         self.assertTrue(3,ff.getMesh().getNumberOfCells())
150         self.assertTrue(ff.getArray().isEqual(arr[[6,7,8,9,10,11,12,13,14,15]],1e-12))
151         #
152         ff=f[-2:0:-1]
153         ff.checkConsistencyLight()
154         self.assertTrue((m.buildPartOfMySelf([3,2,1],True)).isEqual(ff.getMesh(),1e-12))
155         self.assertTrue(9,ff.getMesh().getNumberOfNodes())
156         self.assertTrue(3,ff.getMesh().getNumberOfCells())
157         self.assertTrue(ff.getArray().isEqual(arr[[11,12,13,6,7,8,9,10,2,3,4,5]],1e-12))
158         self.assertTrue(f[-2:0:-1,0].getArray().isEqual(arr[[11,12,13,6,7,8,9,10,2,3,4,5],0],1e-12))
159         pass
160
161     def testSwig2FieldDoubleApplyFuncBug1(self):
162         f=MEDCouplingFieldDouble(ON_CELLS)
163         f.setMesh(MEDCouplingDataForTest.build2DTargetMesh_1())
164         f.applyFunc(3,700.)
165         f.checkConsistencyLight()
166         self.assertEqual(3,f.getArray().getNumberOfComponents())
167         f.getArray().rearrange(1)
168         self.assertTrue(f.getArray().isUniform(700.,1e-10))
169         f.getArray().rearrange(3)
170         f.checkConsistencyLight()
171         f.applyFunc(4,800.)
172         f.checkConsistencyLight()
173         self.assertEqual(4,f.getArray().getNumberOfComponents())
174         f.getArray().rearrange(1)
175         self.assertTrue(f.getArray().isUniform(800.,1e-10))
176         f.getArray().rearrange(4)
177         f.checkConsistencyLight()
178         pass
179
180     def testSwig2ComputeTupleIdsNearTupleBug1(self):
181         coords=[1.1,0.0, 1.1,0.0 ];
182         coordsArr=DataArrayDouble(coords,2,2);
183         mesh=MEDCouplingUMesh();
184         mesh.setCoords(coordsArr);
185         points=[1.1, 0.002]
186         c,cI=mesh.getNodeIdsNearPoints(points,0.00185);
187         self.assertTrue(c.isEqual(DataArrayInt([])))
188         self.assertTrue(cI.isEqual(DataArrayInt([0,0])))
189         c,cI=mesh.getNodeIdsNearPoints(points,0.00200000000000001);
190         self.assertTrue(c.isEqual(DataArrayInt([0,1])))
191         self.assertTrue(cI.isEqual(DataArrayInt([0,2])))
192         pass
193
194     def testSwig2NonRegressionBugChangeUnderlyingWithZeroCells(self):
195         coords1=[0.,1.,2.,3.]
196         coords2=[2.,1.,0.,3.] #0 <==> #2
197         # mesh 1
198         mesh1=MEDCouplingUMesh.New();
199         coordsArr=DataArrayDouble.New(coords1,4,1);
200         mesh1.setCoords(coordsArr);
201         mesh1.setMeshDimension(0);
202         mesh1.allocateCells(0);
203         mesh1.finishInsertingCells();
204         # mesh 2
205         mesh2=mesh1.deepCopy();
206         coordsArr=DataArrayDouble.New(coords2,4,1);
207         mesh2.setCoords(coordsArr);
208         field = mesh1.fillFromAnalytic(ON_NODES,1,"x")
209         field.checkConsistencyLight()
210         levOfCheck = 10
211         field.changeUnderlyingMesh( mesh2, levOfCheck, 1e-13, 0 )
212         self.assertTrue( field.getArray().getValues() == coords2 )
213         pass
214
215     def testSwig2UMeshDistanceToMesh2(self):
216         sz=5
217         m=MEDCouplingCMesh()
218         arr=DataArrayDouble(sz+1) ; arr.iota() ; arr/=sz
219         m.setCoords(arr,arr,arr)
220         m=m.buildUnstructured()
221         m1=m.computeSkin()
222         m1.zipCoords()
223         c=m1.getCoords()[:]
224         d=2*(c-[0.5,0.5,0.5])+[0.5,0.5,0.5]
225         time_deb = datetime.now()
226         #print "go.."
227         a,b=m1.distanceToPoints(d)
228         #print 'time spent in distanceToPoints %s ' %str(datetime.now() - time_deb)
229         time_deb = datetime.now()
230         a1=DataArrayDouble(len(d))
231         b1=DataArrayInt(len(d))
232         m1s = [m1[i] for i in range(m1.getNumberOfCells())]
233         for j,pt in enumerate(d):
234             eter=1e308
235             fter=-1
236             for i,miter in enumerate(m1s):
237                 e,f=miter.distanceToPoint(pt)
238                 self.assertEqual(0,f)
239                 if e<eter:
240                     eter=e ; fter=i
241                     pass
242                 pass
243             a1[j]=eter
244             b1[j]=fter
245             pass
246         #print 'time spent in naive distanceToPoints  %s ' %str(datetime.now() - time_deb)
247         self.assertTrue(a.isEqual(a1,1e-12))
248         self.assertTrue(b.isEqual(b1))
249         self.assertTrue(a.isEqual(DataArrayDouble([0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706631,0.714142842854285,0.5196152422706631,0.5196152422706632,0.5099019513592784,0.5099019513592785,0.5099019513592784,0.5099019513592785,0.5196152422706631,0.5196152422706632,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592784,0.7071067811865475,0.5099019513592784,0.5099019513592785,0.5,0.5,0.5,0.5,0.5099019513592785,0.5099019513592785,0.7071067811865476,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592784,0.7071067811865475,0.5099019513592784,0.5099019513592785,0.5,0.5,0.5,0.5,0.5099019513592785,0.5099019513592785,0.7071067811865476,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706631,0.714142842854285,0.5196152422706631,0.5196152422706632,0.5099019513592784,0.5099019513592785,0.5099019513592784,0.5099019513592785,0.5196152422706631,0.5196152422706632,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.7071067811865475,0.5099019513592785,0.5,0.5,0.5099019513592785,0.7071067811865476,0.714142842854285,0.5196152422706632,0.5099019513592785,0.5099019513592785,0.5196152422706632,0.714142842854285,0.8660254037844386,0.714142842854285,0.7071067811865476,0.7071067811865476,0.714142842854285,0.8660254037844386]),1e-12))
250         self.assertTrue(b.isEqual(DataArrayInt([0,0,3,7,9,9,0,0,3,7,9,9,12,12,14,16,17,17,26,26,28,30,31,31,33,33,36,40,42,42,33,33,36,40,42,42,0,0,3,7,11,9,0,9,12,17,26,31,33,42,33,33,36,40,42,42,45,45,47,49,51,51,45,50,52,53,56,57,58,63,58,58,60,62,63,63,85,85,87,89,91,91,85,90,92,93,96,97,98,103,98,98,100,102,103,103,105,105,108,112,116,114,105,114,117,122,131,136,138,147,138,138,141,145,147,147,105,105,108,112,114,114,105,105,108,112,114,114,117,117,119,121,122,122,131,131,133,135,136,136,138,138,141,145,147,147,138,138,141,145,147,147])))
251         pass
252
253     def testSwig2NonRegressionBugDistance1(self):
254         pt=DataArrayDouble([(8.8452994616207476,3.1547005383792515,3.1547005383792515)])
255         coo=DataArrayDouble([(8,0,0),(8,0,8),(8,8,8),(8,8,0),(16,0,0),(16,0,8),(16,8,8),(16,8,0),(8,0,4),(8,4,8),(8,8,4),(8,4,0),(16,0,4),(16,4,8),(16,8,4),(16,4,0),(12,0,0),(12,0,8),(12,8,8),(12,8,0),(8,4,4),(16,4,4),(12,0,4),(12,4,8),(12,8,4),(12,4,0)])
256         conn=DataArrayInt([4,15,21,12,4,16,25,15,12,22,16,4,0,8,20,11,16,0,11,25,22,8,0,16,15,7,14,21,15,25,19,7,7,19,24,14,11,20,10,3,25,11,3,19,19,3,10,24,12,21,13,5,13,23,17,5,5,17,22,12,8,1,9,20,23,9,1,17,17,1,8,22,21,14,6,13,14,24,18,6 ,6,18,23,13,20,9,2,10,24,10,2,18,18,2,9,23])
257         m=MEDCouplingUMesh("mesh",2)
258         m.setCoords(coo)
259         m.allocateCells()
260         for i in range(24):
261             m.insertNextCell(NORM_QUAD4,conn[4*i:4*i+4])
262             pass
263         m.checkConsistency()
264         m0=m[3] ; m0.zipCoords()
265         expectedDist=0.8452994616207476
266         a,b=m0.distanceToPoint(pt)
267         self.assertAlmostEqual(expectedDist,a,14)
268         self.assertEqual(0,b)
269         #
270         a,b=m.distanceToPoint(pt)
271         self.assertAlmostEqual(expectedDist,a,14)
272         self.assertEqual(3,b)
273         #
274         fd=MEDCouplingFieldDiscretization.New(ON_CELLS)
275         self.assertEqual(24,fd.getNumberOfTuples(m))
276         fd=MEDCouplingFieldDiscretization.New(ON_NODES)
277         self.assertEqual(26,fd.getNumberOfTuples(m))
278         pass
279
280     def testSwig2AreaBarySeg3Quad8Tri6QPolyg(self):
281         #QUAD8 representing a circle of center zeBary and radius zeRadius
282         zeBary=[5,6]
283         zeRadius=3
284         d=DataArrayDouble(8,2)
285         d[:,0]=zeRadius
286         d[:,1]=[87,-100,-170,110,5,-130,175,95] # angle in degree
287         d[:,1]*=pi/180. # angle in radian
288         d=d.fromPolarToCart()
289         d+=zeBary
290         m = MEDCouplingUMesh("quad8", 2) ; m.allocateCells() ; m.insertNextCell(NORM_QUAD8, list(range(8))) ; m.setCoords(d)
291         self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
292         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
293         tri32D=m.buildDescendingConnectivity()[0][0] ; tri32D.zipCoords()
294         # spaceDim=3 QUAD8 becomes QUAD4 ... for the moment
295         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
296         m2=m.deepCopy()
297         m2.convertQuadraticCellsToLinear()
298         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
299         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),1e-13))
300         #TRI6 representing a circle of center zeBary and radius zeRadius
301         zeBary=[5,6]
302         zeRadius=3
303         d=DataArrayDouble(6,2)
304         d[:,0]=zeRadius
305         d[:,1]=[87,-100,110,5,175,95] # angle in degree
306         d[:,1]*=pi/180. # angle in radian
307         d=d.fromPolarToCart()
308         d+=zeBary
309         m = MEDCouplingUMesh("tri6", 2) ; m.allocateCells() ; m.insertNextCell(NORM_TRI6, list(range(6))) ; m.setCoords(d)
310         self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
311         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
312         # spaceDim=3 TRI6 becomes TRI3 ... for the moment
313         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
314         m2=m.deepCopy()
315         m2.convertQuadraticCellsToLinear()
316         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
317         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),1e-13))
318         # QPOLYG representing a circle of center zeBary and radius zeRadius
319         zeBary=[5,6]
320         zeRadius=3
321         d=DataArrayDouble(10,2)
322         d[:,0]=zeRadius
323         d[:,1]=[87,-80,-100,-170,110,5,-90,-130,175,95] # angle in degree
324         d[:,1]*=pi/180. # angle in radian
325         d=d.fromPolarToCart()
326         d+=zeBary
327         m = MEDCouplingUMesh("qpolyg", 2) ; m.allocateCells() ; m.insertNextCell(NORM_QPOLYG, list(range(10))) ; m.setCoords(d)
328         self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13))
329         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12)
330         # spaceDim=3 QPOLYG becomes POLYG ... for the moment
331         m.setCoords(m.getCoords().changeNbOfComponents(3,0.))
332         m2=m.deepCopy()
333         m2.convertQuadraticCellsToLinear() ; m2.checkConsistency()
334         self.assertTrue(m2.getAllGeoTypes()==[NORM_POLYGON] and m2.getNodalConnectivity().getValues()==[5,0,1,2,3,4])
335         self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),float(m2.getMeasureField(False).getArray()),12)
336         self.assertTrue(m.computeCellCenterOfMass().isEqual(m2.computeCellCenterOfMass(),1e-13))
337         # TRI3
338         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),(87+100)*pi/180*zeRadius,13)
339         exp=DataArrayDouble(1,2) ; exp[:,0]=3 ; exp[:,1]=(87-100)/2. ; exp[:,1]*=pi/180. ;  exp=exp.fromPolarToCart() ; exp+=DataArrayDouble([5,6],1,2)
340         self.assertTrue(tri32D.computeCellCenterOfMass().isEqual(exp,1e-12))
341         # spaceDim=3 TRI3 becomes TRI2 ... for the moment
342         tri32D.changeSpaceDimension(3)
343         tri2=tri32D.deepCopy() ; tri2.convertQuadraticCellsToLinear()
344         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),float(tri2.getMeasureField(False).getArray()),13)
345         self.assertTrue(tri32D.computeCellCenterOfMass().isEqual(tri2.computeCellCenterOfMass(),1e-12))
346         tri32D.changeSpaceDimension(1)
347         self.assertAlmostEqual(float(tri32D.getMeasureField(False).getArray()),-0.67795240172962323,12)
348         pass
349
350     # this bug 5/6/2013 is swig specific
351     def testSwigNonRegressionBugRotate3D1(self):
352         m=MEDCouplingUMesh.New()
353         dataArray=DataArrayDouble.New(100,3)
354         dataArray[:]=0.
355         dataArray[0]=[0.,1,3]
356         m.setCoords(dataArray[0])
357         m1=m.deepCopy()
358         m.rotate([0.,0.,3.],[1.,0.,0.],0.5*pi)
359         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([0.,0.,4.],1,3),1e-15))
360         #
361         d1=DataArrayDouble([0.,0.,3.],1,3) ; d2=DataArrayDouble([1.,0.,0.],1,3)
362         pts=[[0.,0.,3.],[(0.,0.,3.)],DataArrayDouble([0.,0.,3.],1,3),list(d1)[0]]
363         vec=[[1.,0.,0.],[(1.,0.,0.)],DataArrayDouble([1.,0.,0.],1,3),list(d2)[0]]
364         for p in pts:
365             for v in vec:
366                 m2=m1.deepCopy()
367                 m2.rotate(p,v,0.5*pi)
368                 self.assertTrue(m2.getCoords().isEqual(DataArrayDouble([0.,0.,4.],1,3),1e-15))
369                 pass
370         pass
371
372     def testSwig2DataArrayCount1(self):
373         d=DataArrayInt([])
374         self.assertEqual(0,d.getNumberOfTuples())
375         self.assertEqual(1,d.getNumberOfComponents())
376         self.assertEqual(0,d.count(0))
377         self.assertEqual(0,d.count(1))
378         self.assertEqual(0,d.count(-1))
379         d=DataArrayInt([2,1,-2,-3,2,0,0,7,2,-2,3,0])
380         self.assertEqual(12,d.getNumberOfTuples())
381         self.assertEqual(1,d.getNumberOfComponents())
382         self.assertEqual(3,d.count(0))
383         self.assertEqual(1,d.count(1))
384         self.assertEqual(0,d.count(-1))
385         self.assertEqual(2,d.count(-2))
386         self.assertEqual(3,d.count(2))
387         e=d.getDifferentValues()
388         f=DataArrayInt()
389         for it in e:
390             f.pushBackSilent(d.count(int(it)))
391             pass
392         self.assertEqual(12,f.accumulate()[0])
393         #
394         eps=1e-12
395         d=DataArrayDouble([])
396         self.assertEqual(0,d.getNumberOfTuples())
397         self.assertEqual(1,d.getNumberOfComponents())
398         self.assertEqual(0,d.count(0,eps))
399         self.assertEqual(0,d.count(1,eps))
400         self.assertEqual(0,d.count(-1,eps))
401         d=DataArrayDouble([2,1,-2,-3,2,0,eps/10,7,2+eps/10,-2,3,0])
402         self.assertEqual(12,d.getNumberOfTuples())
403         self.assertEqual(1,d.getNumberOfComponents())
404         self.assertEqual(3,d.count(0,eps))
405         self.assertEqual(1,d.count(1,eps))
406         self.assertEqual(0,d.count(-1,eps))
407         self.assertEqual(2,d.count(-2,eps))
408         self.assertEqual(3,d.count(2,eps))
409         self.assertEqual(3,d.count(2,eps))
410         self.assertEqual(2,d.count(2,eps/100))
411         e=d.getDifferentValues(eps)
412         f=DataArrayInt()
413         for it in e:
414             f.pushBackSilent(d.count(float(it),eps))
415             pass
416         self.assertEqual(12,f.accumulate()[0])
417         pass
418
419     def testSwig2DataArrayGetSlice1(self):
420         s=slice(2,18,1)
421         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),16)
422         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),16)
423         self.assertEqual(DataArray.GetSlice(s,0,4),slice(2,6,1))
424         self.assertEqual(DataArray.GetSlice(s,1,4),slice(6,10,1))
425         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,14,1))
426         self.assertEqual(DataArray.GetSlice(s,3,4),slice(14,18,1))
427         #
428         s=slice(2,18,2)
429         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),8)
430         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),8)
431         self.assertEqual(DataArray.GetSlice(s,0,4),slice(2,6,2))
432         self.assertEqual(DataArray.GetSlice(s,1,4),slice(6,10,2))
433         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,14,2))
434         self.assertEqual(DataArray.GetSlice(s,3,4),slice(14,18,2))
435         #
436         s=slice(1,18,1)
437         self.assertEqual(DataArray.GetSlice(s,0,4),slice(1,5,1))
438         self.assertEqual(DataArray.GetSlice(s,1,4),slice(5,9,1))
439         self.assertEqual(DataArray.GetSlice(s,2,4),slice(9,13,1))
440         self.assertEqual(DataArray.GetSlice(s,3,4),slice(13,18,1))# 18 not 17
441         #
442         s=slice(1,18,2)
443         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9)
444         self.assertEqual(DataArray.GetNumberOfItemGivenBES(s),9)
445         self.assertEqual(DataArray.GetSlice(s,0,4),slice(1,5,2))
446         self.assertEqual(DataArray.GetSlice(s,1,4),slice(5,9,2))
447         self.assertEqual(DataArray.GetSlice(s,2,4),slice(9,13,2))
448         self.assertEqual(DataArray.GetSlice(s,3,4),slice(13,18,2))# 18 not 17
449         #
450         s=slice(18,2,-1)
451         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-1))
452         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-1))
453         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-1))
454         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,2,-1))
455         #
456         s=slice(18,2,-2)
457         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2))
458         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2))
459         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2))
460         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,2,-2))
461         #
462         s=slice(18,1,-1)
463         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-1))
464         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-1))
465         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-1))
466         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,1,-1))# 1 not 2
467         #
468         s=slice(18,1,-2)
469         self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9)
470         self.assertRaises(InterpKernelException,DataArray.GetNumberOfItemGivenBES,s)
471         self.assertEqual(sum([DataArray.GetNumberOfItemGivenBESRelative(DataArray.GetSlice(s, i, 4)) for i in range(4)]), DataArray.GetNumberOfItemGivenBESRelative(s))
472         self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2))
473         self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2))
474         self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2))
475         self.assertEqual(DataArray.GetSlice(s,3,4),slice(6,1,-2))# 1 not 2
476         self.assertRaises(InterpKernelException,DataArray.GetSlice,slice(0,None,2),0,4)
477         #
478         d=DataArrayInt.Range(0,18,1)
479         s=slice(2,None,1)
480         self.assertEqual(d.getNumberOfItemGivenBES(s),16)
481         self.assertEqual(d.getNumberOfItemGivenBESRelative(s),16)
482         self.assertEqual(d.getSlice(s,0,4),slice(2,6,1))
483         self.assertEqual(d.getSlice(s,1,4),slice(6,10,1))
484         self.assertEqual(d.getSlice(s,2,4),slice(10,14,1))
485         self.assertEqual(d.getSlice(s,3,4),slice(14,18,1))
486         #
487         d=DataArrayInt.Range(0,18,1)
488         s=slice(2,-2,1)
489         self.assertEqual(d.getSlice(s,0,4),slice(2,5,1))
490         self.assertEqual(d.getSlice(s,1,4),slice(5,8,1))
491         self.assertEqual(d.getSlice(s,2,4),slice(8,11,1))
492         self.assertEqual(d.getSlice(s,3,4),slice(11,16,1))
493         #
494         d=DataArrayInt.Range(0,18,1)
495         s=slice(None,None,1)
496         self.assertEqual(d.getSlice(s,0,4),slice(0,4,1))
497         self.assertEqual(d.getSlice(s,1,4),slice(4,8,1))
498         self.assertEqual(d.getSlice(s,2,4),slice(8,12,1))
499         self.assertEqual(d.getSlice(s,3,4),slice(12,18,1))
500         #
501         d=DataArrayInt.Range(0,18,1)
502         s=slice(None,2,-2)
503         self.assertRaises(InterpKernelException,d.getNumberOfItemGivenBES,s)
504         self.assertEqual(d.getNumberOfItemGivenBESRelative(s),8)
505         self.assertEqual(d.getSlice(s,0,4),slice(17,13,-2))
506         self.assertEqual(d.getSlice(s,1,4),slice(13,9,-2))
507         self.assertEqual(d.getSlice(s,2,4),slice(9,5,-2))
508         self.assertEqual(d.getSlice(s,3,4),slice(5,2,-2))
509         pass
510
511     def testSwig2AccumulatePerChunk1(self):
512         arr=DataArrayDouble(11) ; arr.iota()
513         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
514         m=m.buildUnstructured()
515         m0=m[::2] ; ids0=m0.simplexize(0) ; m1=m[1::2]
516         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m0,m1) ; m.setName("mesh")
517         m.checkConsecutiveCellTypesForMEDFileFrmt()
518         #
519         formula="7-sqrt((x-5.)*(x-5.)+(y-5.)*(y-5.))"
520         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
521         f.fillFromAnalytic(1,formula)
522         f.setName("Field1") ; f.setTime(1.1,1,-1)
523         f.checkConsistencyLight()
524         #
525         arr=f.getArray()
526         arr2=DataArrayDouble(len(arr),2) ; arr2[:,0]=arr
527         arr2=DataArrayDouble(len(arr),2) ; arr2[:,0]=arr ; arr2[:,1]=2*arr
528         f.setArray(arr2)
529         f.checkConsistencyLight()
530         # here the compact code to obviously put field on cell to nodes
531         rn,rni=f.getMesh().getReverseNodalConnectivity()
532         arr2=f.getArray()[rn]
533         arr4=arr2.accumulatePerChunck(rni)
534         nbOfCellsSharingNodes=rni.deltaShiftIndex()
535         arr4/=nbOfCellsSharingNodes.convertToDblArr()
536         #
537         maxNbCSN=nbOfCellsSharingNodes.getMaxValue()[0]
538         arr3=DataArrayDouble(f.getMesh().getNumberOfNodes(),f.getArray().getNumberOfComponents()) ; arr3[:]=0.
539         for i in range(1, maxNbCSN + 1):
540             ids=nbOfCellsSharingNodes.findIdsEqual(i)
541             if len(ids)==0:
542                 continue
543             for j in range(i):
544                 rni2=rni[ids] ; rni2+=j
545                 arr3[ids]+=arr2[rni2]
546                 pass
547             arr3[ids]/=i
548             pass
549         fNode=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; fNode.setMesh(m)
550         fNode.setName("Field1Node") ; fNode.setTime(1.1,1,-1)
551         fNode.setArray(arr3) ; fNode.checkConsistencyLight()
552         self.assertTrue(arr3.isEqual(arr4,1e-12))
553         #
554         d=DataArrayInt.Range(0,20,1)
555         self.assertTrue(d.accumulatePerChunck([2,4,12]).isEqual(DataArrayInt([5,60])))
556         #
557         a=DataArrayDouble(12) ; a.iota() ; a.rearrange(3)
558         b=DataArrayDouble(12) ; b.iota(20) ; b.rearrange(3)
559         ids=DataArrayInt([])
560         self.assertEqual(len(a[ids]),0)
561         self.assertEqual(len(b[ids]),0)
562         a2=a.deepCopy() ;  a2[ids]+=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
563         a2=a.deepCopy() ;  a2[ids]*=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
564         a2=a.deepCopy() ;  a2[ids]/=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
565         a2=a.deepCopy() ;  a2[ids]-=b[ids] ; self.assertTrue(a2.isEqual(a,1e-15))
566         pass
567
568     def testSwig2CheckAndPreparePermutation1(self):
569         a=DataArrayInt([10003,9999999,5,67])
570         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([2,3,0,1])))
571         a=DataArrayInt([10003,-9999999,5,67])
572         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([3,0,1,2])))
573         a=DataArrayInt([])
574         self.assertTrue(a.checkAndPreparePermutation().isEqual(DataArrayInt([])))
575         a=DataArrayInt([])
576         a.iota();
577         self.assertTrue(a.isEqual(DataArrayInt([])))
578         pass
579
580     def testSwig21SGTUMesh1(self):
581         m=MEDCoupling1GTUMesh.New("m",NORM_PENTA6)
582         m.__repr__() ; m.__str__()
583         self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
584         m.setCoords(DataArrayDouble(20,3))
585         m.allocateCells()
586         m.__repr__() ; m.__str__()
587         m.insertNextCell([0,1,2,5,7,2])
588         self.assertEqual(1,m.getNumberOfCells())
589         self.assertTrue(DataArrayInt([6]).isEqual(m.computeNbOfNodesPerCell()))
590         self.assertTrue(DataArrayInt([5]).isEqual(m.computeNbOfFacesPerCell()))
591         m.__repr__() ; m.__str__()
592         m.checkConsistencyLight()
593         m.checkConsistency()
594         #
595         cm=MEDCouplingCMesh() ; cm.setName("m")
596         arr0=DataArrayDouble(6) ; arr0.iota()
597         arr1=DataArrayDouble([0,1])
598         cm.setCoords(arr0,arr1,arr1) ; um=cm.buildUnstructured()
599         #
600         m=MEDCoupling1SGTUMesh("m",NORM_QUAD4)
601         mem_m=m.getHeapMemorySize()
602         m.allocateCells(5)
603         self.assertIn(m.getHeapMemorySize() - mem_m, list(range(5 * 4 * 4, 5 * 4 * 4 + 32)))
604         self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20)
605         m.setCoords(um.getCoords())
606         m.insertNextCell([1,0,6,7])
607         self.assertEqual(1,m.getNumberOfCells())
608         m.insertNextCell([2,1,7,8])
609         m.insertNextCell([3,2,8,9])
610         m.insertNextCell([4,3,9,10])
611         m.insertNextCell([5,4,10,11])
612         self.assertEqual(5,m.getNumberOfCells())
613         self.assertRaises(InterpKernelException,m.insertNextCell,[0,6,7])
614         self.assertRaises(InterpKernelException,m.insertNextCell,[0,6,7,1,2])
615         self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20)
616         f=m.getMeasureField(False)
617         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
618         self.assertTrue(f.getArray().isUniform(1,1e-14))
619         self.assertEqual(m.getType(),10)
620         self.assertEqual(m.getCellModelEnum(),NORM_QUAD4)
621         mo=MEDCoupling1SGTUMesh("m",NORM_QUAD4) ; mo.setCoords(m.getCoords())
622         mo.setNodalConnectivity(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11]))
623         self.assertTrue(m.isEqual(mo,1e-12))
624         #
625         mo2=MEDCoupling1SGTUMesh.Merge1SGTUMeshesOnSameCoords([m[[0,1]],m[[2]],m[[3,4]]])
626         mo2.setName(m.getName())
627         self.assertTrue(m.isEqual(mo2,1e-12))
628         #
629         mp0=m[[0]] ; mp0.zipCoords() ; mp1=m[2] ; mp1.zipCoords() ; mp2=m[4] ; mp2.zipCoords()
630         mo3=MEDCoupling1SGTUMesh.Merge1SGTUMeshes([mp0,mp1,mp2])
631         self.assertTrue(isinstance(mo3,MEDCoupling1SGTUMesh))
632         mo3.setName(m.getName())
633         m_ref=m[(0,2,4)] ; m_ref.zipCoords()
634         m_ref.tryToShareSameCoordsPermute(mo3,1e-12)
635         self.assertTrue(m_ref.isEqual(mo3,1e-12))
636         #
637         m1=um.buildDescendingConnectivity()[0]
638         ids=m1.getCellIdsFullyIncludedInNodeIds(DataArrayInt.Range(0,12,1))
639         m1=m1[ids]
640         m1c=m1.convertIntoSingleGeoTypeMesh()
641         self.assertTrue(isinstance(m1c,MEDCoupling1SGTUMesh))
642         self.assertEqual(m1c.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
643         m1c.checkConsistency()
644         self.assertTrue(m1c.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11])))
645         self.assertEqual(20,m1c.getNodalConnectivityLength())
646         self.assertTrue(m.isEqual(m1c,1e-12))
647         m.getNodalConnectivity().setIJ(1,0,1)
648         self.assertTrue(not m.isEqual(m1c,1e-12))
649         m.getNodalConnectivity().setIJ(1,0,0)
650         self.assertTrue(m.isEqual(m1c,1e-12))
651         m1c.setCoords(m.getCoords().deepCopy())
652         self.assertTrue(m.isEqual(m1c,1e-12))
653         m1c.getCoords().setIJ(0,1,0.1)
654         self.assertTrue(not m.isEqual(m1c,1e-12))
655         m1c.getCoords().setIJ(0,1,0)
656         self.assertTrue(m.isEqual(m1c,1e-12))
657         m1c.getCoords().setInfoOnComponent(1,"X")
658         self.assertTrue(not m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
659         m.getCoords().setInfoOnComponent(1,"X")
660         self.assertTrue(m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
661         m.setName("m2")
662         self.assertTrue(not m.isEqual(m1c,1e-12) and m.isEqualWithoutConsideringStr(m1c,1e-12))
663         #
664         m.checkConsistencyLight() ; m.checkConsistency() ; m.checkConsistency()
665         self.assertEqual(m.getMeshDimension(),2)
666         self.assertTrue(m.giveCellsWithType(NORM_QUAD4).isEqual(DataArrayInt([0,1,2,3,4])))
667         self.assertTrue(m.giveCellsWithType(NORM_TRI3).isEqual(DataArrayInt([])))
668         self.assertEqual(m.getNumberOfCellsWithType(NORM_QUAD4),5)
669         self.assertEqual(m.getNumberOfCellsWithType(NORM_TRI3),0)
670         self.assertEqual(m.getTypeOfCell(3),NORM_QUAD4)
671         self.assertRaises(InterpKernelException,m.getTypeOfCell,5)
672         self.assertEqual(m.getAllGeoTypes(),[NORM_QUAD4])
673         self.assertEqual(m.getDistributionOfTypes(),[[NORM_QUAD4,5,-1]])
674         ##
675         pfl1=DataArrayInt([1,3,4])
676         a,b,c=m.splitProfilePerType(pfl1)
677         d,e,f=m.buildUnstructured().splitProfilePerType(pfl1)
678         self.assertTrue(a==[[4,3,0]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2])) and len(c)==1 and c[0].getHiddenCppPointer()==pfl1.getHiddenCppPointer())
679         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and len(c)==1 and c[0].isEqual(f[0]))
680         #
681         pfl2=DataArrayInt([0,1,2,3])
682         a,b,c=m.splitProfilePerType(pfl2)
683         d,e,f=m.buildUnstructured().splitProfilePerType(pfl2)
684         self.assertTrue(a==[[4,4,0]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2,3])) and len(c)==1 and c[0].getHiddenCppPointer()==pfl2.getHiddenCppPointer())
685         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and len(c)==1 and c[0].isEqual(f[0]))
686         #
687         pfl3=DataArrayInt([0,1,2,3,4])
688         a,b,c=m.splitProfilePerType(pfl3)
689         d,e,f=m.buildUnstructured().splitProfilePerType(pfl3)
690         self.assertTrue(a==[[4,5,-1]] and len(b)==1 and b[0].isEqual(DataArrayInt([0,1,2,3,4])) and c==[])
691         self.assertTrue(a==d and len(b)==1 and b[0].isEqual(e[0]) and c==[])
692         #
693         invalidPfl=DataArrayInt([1,2,3,4,5])
694         self.assertRaises(InterpKernelException,m.splitProfilePerType,invalidPfl)
695         self.assertRaises(InterpKernelException,m.buildUnstructured().splitProfilePerType,invalidPfl)
696         ##
697         pfl1=DataArrayInt([1,2,3])
698         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,3,0],[pfl1])
699         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,3,0],[pfl1])
700         self.assertTrue(a.isEqual(b) and pfl1.getHiddenCppPointer(),a.getHiddenCppPointer())
701         #
702         pfl2=DataArrayInt([0,1,2,3])
703         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl2])
704         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl2])
705         self.assertTrue(a.isEqual(b) and pfl2.getHiddenCppPointer()==a.getHiddenCppPointer())
706         #
707         pfl3=DataArrayInt([0,1,2,3,4])
708         a=m.checkTypeConsistencyAndContig([NORM_QUAD4,4,0],[pfl3])
709         b=m.buildUnstructured().checkTypeConsistencyAndContig([NORM_QUAD4,5,0],[pfl3])
710         self.assertTrue(a.isEqual(b) and pfl3.getHiddenCppPointer()==a.getHiddenCppPointer())
711         #
712         invalidPfl=DataArrayInt([1,2,3,4,5])
713         self.assertRaises(InterpKernelException,m.checkTypeConsistencyAndContig,[NORM_QUAD4,5,0],[invalidPfl])
714         self.assertRaises(InterpKernelException,m.buildUnstructured().checkTypeConsistencyAndContig,[NORM_QUAD4,5,0],[invalidPfl])
715         ##
716         self.assertTrue(DataArrayInt([4,4,4,4,4]).isEqual(m.computeNbOfNodesPerCell()))
717         ##
718         self.assertEqual(m.getNodeIdsOfCell(1),[2,1,7,8])
719         ##
720         self.assertTrue(m.computeIsoBarycenterOfNodesPerCell().isEqual(DataArrayDouble([(0.5,0.5,0),(1.5,0.5,0),(2.5,0.5,0),(3.5,0.5,0),(4.5,0.5,0)]),1e-13))
721         ##
722         ref=m.getCoords().getHiddenCppPointer()
723         mcpy=m.deepCopy() ; mcpy.insertNextCell([1,0,6,7])
724         c=m.getNodalConnectivity().deepCopy()
725         o2n=DataArrayInt([2,0,1,4,3])
726         m.renumberCells(o2n,False)
727         c.rearrange(4) ; c.renumberInPlace(o2n) ; c.rearrange(1)
728         self.assertTrue(c.isEqual(m.getNodalConnectivity()))
729         self.assertEqual(ref,m.getCoords().getHiddenCppPointer())
730         m2=mcpy.mergeMyselfWith(m)
731         self.assertTrue(isinstance(m2,MEDCoupling1SGTUMesh))
732         self.assertEqual(11,m2.getNumberOfCells())
733         self.assertEqual(48,m2.getNumberOfNodes())
734         self.assertTrue(m2.getCoords().isEqual(DataArrayDouble.Aggregate([m.getCoords(),m.getCoords()]),1e-12))
735         self.assertTrue(m2.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,1,0,6,7,26,25,31,32,27,26,32,33,25,24,30,31,29,28,34,35,28,27,33,34])))
736         ##
737         mu=m.buildUnstructured()
738         mu.checkConsistency()
739         self.assertEqual(mu.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
740         self.assertEqual(2,mu.getMeshDimension())
741         self.assertEqual([NORM_QUAD4],mu.getAllGeoTypes())
742         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,2,1,7,8,4,3,2,8,9,4,1,0,6,7,4,5,4,10,11,4,4,3,9,10])))
743         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25])))
744         ##
745         for typ in [0,1]:
746             mcpy2=m.deepCopy() ; umcpy2=mcpy2.buildUnstructured()
747             ids=mcpy2.simplexize(typ) ; ids2=umcpy2.simplexize(typ)
748             self.assertTrue(ids.isEqual(ids2))
749             mcpy3=umcpy2.convertIntoSingleGeoTypeMesh()
750             self.assertTrue(mcpy2.isEqual(mcpy3,1e-14))
751             pass
752         um1=um.convertIntoSingleGeoTypeMesh()
753         self.assertEqual(8,um1.getNumberOfNodesPerCell())
754         for typ in [PLANAR_FACE_5,PLANAR_FACE_6]:
755             mcpy2=um1.deepCopy() ; umcpy2=mcpy2.buildUnstructured()
756             ids=mcpy2.simplexize(typ) ; ids2=umcpy2.simplexize(typ)
757             self.assertTrue(ids.isEqual(ids2))
758             mcpy3=umcpy2.convertIntoSingleGeoTypeMesh()
759             self.assertTrue(mcpy2.isEqual(mcpy3,1e-14))
760             pass
761         ##
762         self.assertRaises(InterpKernelException,mcpy.mergeMyselfWithOnSameCoords,m)
763         mcpy.tryToShareSameCoords(m,1e-14)
764         m3=mcpy.mergeMyselfWithOnSameCoords(m)
765         self.assertTrue(isinstance(m3,MEDCoupling1SGTUMesh))
766         self.assertEqual(11,m3.getNumberOfCells())
767         self.assertEqual(24,m3.getNumberOfNodes())
768         self.assertEqual(m3.getCoords().getHiddenCppPointer(),mcpy.getCoords().getHiddenCppPointer())
769         self.assertTrue(m3.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,1,0,6,7,2,1,7,8,3,2,8,9,1,0,6,7,5,4,10,11,4,3,9,10])))
770         ##
771         ref=mcpy.getCoords().deepCopy()
772         c3=mcpy.getNodalConnectivity()[:]
773         mcpy.getNodalConnectivity().setIJ(int(c3.findIdsEqual(11)),0,24)
774         c2=DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()[11:]])
775         mcpy.setCoords(c2)
776         mcpy.checkConsistency()
777         a,b=mcpy.getNodeIdsInUse()
778         self.assertEqual(12,b)
779         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])))
780         ids=mcpy.zipCoordsTraducer()
781         self.assertTrue(ids.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])))
782         self.assertTrue(mcpy.getCoords().isEqual(ref[:12],1e-12))
783         self.assertTrue(mcpy.getNodalConnectivity().isEqual(c3))
784         mcpy.checkConsistency()
785         ##
786         m4=mcpy[DataArrayInt([0,3,4])]
787         m5=mcpy.buildPartOfMySelfKeepCoords(DataArrayInt([0,3,4]))
788         self.assertTrue(isinstance(m4,MEDCoupling1SGTUMesh))
789         self.assertTrue(m4.isEqual(m5,-1e-14))# < 0 not a bug it proves that coordinates pointer are equal
790         self.assertTrue(m4.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,4,3,9,10,5,4,10,11])))
791         m6=mcpy[::2]
792         self.assertTrue(isinstance(m6,MEDCoupling1SGTUMesh))
793         self.assertTrue(m6.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,3,2,8,9,5,4,10,11])))
794         ##
795         mcpy.setCoords(DataArrayDouble.Aggregate([mcpy.getCoords(),mcpy.getCoords()]))
796         mcpy.checkConsistency()
797         ##
798         mcppy=mcpy.deepCopyConnectivityOnly()
799         self.assertTrue(mcppy.isEqual(mcpy,1e-12))
800         self.assertTrue(mcppy.getCoords().getHiddenCppPointer()==mcpy.getCoords().getHiddenCppPointer())
801         self.assertTrue(mcppy.getNodalConnectivity().isEqual(mcpy.getNodalConnectivity()))
802         self.assertTrue(mcppy.getNodalConnectivity().getHiddenCppPointer()!=mcpy.getNodalConnectivity().getHiddenCppPointer())
803         ##
804         a,b=mcpy.getReverseNodalConnectivity()
805         self.assertTrue(a.isEqual(DataArrayInt([0,5,0,1,5,1,2,2,3,3,4,4,0,5,0,1,5,1,2,2,3,3,4,4])))
806         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,9,11,12,14,17,19,21,23,24,24,24,24,24,24,24,24,24,24,24,24,24])))
807         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds([0,1,6,7],False).isEqual(DataArrayInt([0,1,5])))
808         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds([0,1,6,7],True).isEqual(DataArrayInt([0,5])))
809         self.assertTrue(mcpy.getCellsInBoundingBox([(0,1),(0,1),(0,1)],1e-12).isEqual(DataArrayInt([0,1,5])))
810         f=mcpy.buildOrthogonalField()
811         self.assertEqual(f.getMesh().getHiddenCppPointer(),mcpy.getHiddenCppPointer())
812         self.assertTrue(f.getArray().isEqual(DataArrayDouble(6*[(0,0,-1)]),1e-12))
813         mcpy.changeSpaceDimension(2)
814         self.assertEqual(1,mcpy.getCellContainingPoint([1.5,0.5],1e-12))
815         ##
816         self.assertTrue(mcpy.fillCellIdsToKeepFromNodeIds(DataArrayInt([6,7]),False).isEqual(DataArrayInt([0,1,5])))
817         ##
818         mcpy2=mcpy.deepCopy()
819         self.assertEqual([None,None],mcpy.checkGeoEquivalWith(mcpy2,1,1e-12))#fast equal
820         mcpy.checkFastEquivalWith(mcpy2,1e-12)
821         mcpy2.renumberCells([0,2,4,3,1,5])
822         mcpy.checkFastEquivalWith(mcpy2,1e-12)
823         self.assertEqual([None,None],mcpy.checkGeoEquivalWith(mcpy2,1,1e-12))#fast equal
824         mcpy2.renumberCells([0,2,4,3,1,5])
825         mcpy2.renumberCells([1,3,5,0,2,4])
826         self.assertRaises(InterpKernelException,mcpy.checkFastEquivalWith,mcpy2,1e-12)
827         self.assertRaises(InterpKernelException,mcpy.checkGeoEquivalWith,mcpy2,1,1e-12)#fast equal
828         pass
829
830     def testSwig21DGTUMesh1(self):
831         a0=DataArrayInt([0,2,3,5,6,8])
832         a1=DataArrayInt([0,4,7,11,14,18,21,25])
833         a2=DataArrayInt([0,1,4,5])
834         self.assertTrue(DataArrayInt.AggregateIndexes([a0,a1,a2]).isEqual(DataArrayInt([0,2,3,5,6,8,12,15,19,22,26,29,33,34,37,38])))
835         self.assertEqual(a1[3:].front(),11)
836         self.assertEqual(a1[4:].convertToDblArr().front(),14.)
837         a1c=DataArrayInt([5,7,1,2, 8,11,0, 5,6,3,12, 1,5,2, 13,12,11,7, 6,1,0, 20,21,19,17])
838         d,e=MEDCouplingUMesh.ExtractFromIndexedArraysSlice(1,5,2,a1c,a1)
839         self.assertTrue(d.isEqual(DataArrayInt([8,11,0,1,5,2])))
840         self.assertTrue(e.isEqual(DataArrayInt([0,3,6])))
841         #
842         m=MEDCouplingDataForTest.build2DTargetMesh_1()[0,3,4]
843         ref=DataArrayInt([0,3,4,1,6,7,4,3,7,8,5,4])
844         self.assertTrue(m.convertNodalConnectivityToStaticGeoTypeMesh().isEqual(ref))
845         d,e=m.convertNodalConnectivityToDynamicGeoTypeMesh()
846         self.assertTrue(d.isEqual(ref))
847         self.assertTrue(e.isEqual(DataArrayInt.Range(0,13,4)))
848         self.assertTrue(m.fillCellIdsToKeepFromNodeIds(DataArrayInt([6,7]),False).isEqual(DataArrayInt([1,2])))
849         #
850         m=MEDCoupling1GTUMesh.New("m",NORM_POLYHED)
851         self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
852         m.__repr__() ; m.__str__()
853         m.setCoords(DataArrayDouble(20,3))
854         m.allocateCells()
855         m.__repr__() ; m.__str__()
856         m.insertNextCell([0,1,2,5,7,2,-1,1,3])
857         self.assertEqual(1,m.getNumberOfCells())
858         self.assertTrue(DataArrayInt([8]).isEqual(m.computeNbOfNodesPerCell()))
859         self.assertTrue(DataArrayInt([2]).isEqual(m.computeNbOfFacesPerCell()))
860         m.__repr__() ; m.__str__()
861         m.checkConsistencyLight()
862         m.checkConsistency()
863         #
864         cm=MEDCouplingCMesh() ; cm.setName("m")
865         arr0=DataArrayDouble(6) ; arr0.iota()
866         arr1=DataArrayDouble([0,1])
867         cm.setCoords(arr0,arr1,arr1) ; um=cm.buildUnstructured() ; um.convertAllToPoly()
868         um2=um.deepCopyConnectivityOnly()
869         self.assertTrue(um2.isEqual(um,1e-12))
870         self.assertEqual(um2.getCoords().getHiddenCppPointer(),um.getCoords().getHiddenCppPointer())
871         self.assertTrue(um2.getNodalConnectivity().isEqual(um.getNodalConnectivity()))
872         self.assertTrue(um2.getNodalConnectivity().getHiddenCppPointer()!=um.getNodalConnectivity().getHiddenCppPointer())
873         self.assertTrue(um2.getNodalConnectivityIndex().isEqual(um.getNodalConnectivityIndex()))
874         self.assertTrue(um2.getNodalConnectivityIndex().getHiddenCppPointer()!=um.getNodalConnectivityIndex().getHiddenCppPointer())
875         #
876         self.assertRaises(InterpKernelException,MEDCoupling1SGTUMesh.New,"m",NORM_POLYHED)
877         m=MEDCoupling1DGTUMesh("m",NORM_POLYHED)
878         m.allocateCells(5)
879         self.assertEqual(15,m.getNodalConnectivity().getNbOfElemAllocated())
880         self.assertEqual(6,m.getNodalConnectivityIndex().getNbOfElemAllocated())
881         m.setCoords(um.getCoords())
882         m.insertNextCell([1,0,6,7,-1,7,6,1])
883         self.assertEqual(1,m.getNumberOfCells())
884         m.insertNextCell([2,1,7,8,-1,2,1,-1,8,-1,7])
885         m.insertNextCell([3,2,8,9])
886         m.insertNextCell([4,3,9,10,-1,5,3,9])
887         m.insertNextCell([5,4,10,11,-1,11,10,-1,5])
888         m.checkConsistencyLight()
889         m.checkConsistency()
890         self.assertEqual(5,m.getNumberOfCells())
891         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40])))
892         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5])))
893         #
894         m4=m.deepCopy()
895         self.assertTrue(m.isEqual(m4,1e-12))
896         m4.getNodalConnectivity().setIJ(2,0,5)
897         self.assertTrue(not m.isEqual(m4,1e-12))
898         m4.getNodalConnectivity().setIJ(2,0,6)
899         self.assertTrue(m.isEqual(m4,1e-12))
900         m4.getNodalConnectivityIndex().setIJ(2,0,21)
901         self.assertTrue(not m.isEqual(m4,1e-12))
902         m4.getNodalConnectivityIndex().setIJ(2,0,19)
903         self.assertTrue(m.isEqual(m4,1e-12))
904         m4.getCoords().setIJ(10,1,1.1)
905         self.assertTrue(not m.isEqual(m4,1e-12))
906         m4.getCoords().setIJ(10,1,1.)
907         self.assertTrue(m.isEqual(m4,1e-12))
908         m4.getNodalConnectivity().pushBackSilent(7)
909         self.assertTrue(not m.isEqual(m4,1e-12))
910         self.assertEqual(7,m4.getNodalConnectivity().popBackSilent())
911         self.assertTrue(m.isEqual(m4,1e-12))
912         m4.setName("m4")
913         self.assertTrue(not m.isEqual(m4,1e-12))
914         m4.setName("m")
915         self.assertTrue(m.isEqual(m4,1e-12))
916         #
917         self.assertEqual(6,m.getNodalConnectivityIndex().getNbOfElemAllocated())
918         self.assertEqual(60,m.getNodalConnectivity().getNbOfElemAllocated())
919         self.assertTrue(m.computeNbOfNodesPerCell().isEqual(DataArrayInt([7,8,4,7,7])))
920         self.assertTrue(m.computeNbOfFacesPerCell().isEqual(DataArrayInt([2,4,1,2,3])))
921         self.assertEqual(m.getNodeIdsOfCell(1),[2,1,7,8,-1,2,1,-1,8,-1,7])
922         f=m.computeIsoBarycenterOfNodesPerCell()
923         self.assertTrue(DataArrayDouble([(0.5714285714285714,0.5714285714285714,0),(1.5,0.5,0),(2.5,0.5,0),(3.5714285714285712,0.42857142857142855,0),(4.5714285714285712,0.5714285714285714,0)]).isEqual(f,1e-14))
924         mu0=m.buildUnstructured()
925         o2n=[1,2,0,4,3]
926         m2=m.deepCopy()
927         m3=m.deepCopyConnectivityOnly()
928         self.assertTrue(m3.isEqual(m,1e-12))
929         self.assertEqual(m3.getCoords().getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
930         self.assertTrue(m3.getNodalConnectivity().getHiddenCppPointer()!=m.getNodalConnectivity().getHiddenCppPointer())
931         self.assertTrue(m3.getNodalConnectivity().isEqual(m.getNodalConnectivity()))
932         self.assertTrue(m3.getNodalConnectivityIndex().getHiddenCppPointer()!=m.getNodalConnectivityIndex().getHiddenCppPointer())
933         self.assertTrue(m3.getNodalConnectivityIndex().isEqual(m.getNodalConnectivityIndex()))
934         m.renumberCells(o2n)
935         mu0.renumberCells(o2n)
936         self.assertTrue(mu0.isEqual(m.buildUnstructured(),1e-12))
937         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,12,23,32,40])))
938         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([3,2,8,9,1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,5,4,10,11,-1,11,10,-1,5,4,3,9,10,-1,5,3,9])))
939         #
940         mcpy0=m.buildUnstructured()
941         self.assertTrue(isinstance(mcpy0,MEDCouplingUMesh))
942         self.assertTrue(mcpy0.getNodalConnectivity().isEqual(DataArrayInt([31,3,2,8,9,31,1,0,6,7,-1,7,6,1,31,2,1,7,8,-1,2,1,-1,8,-1,7,31,5,4,10,11,-1,11,10,-1,5,31,4,3,9,10,-1,5,3,9])))
943         self.assertTrue(mcpy0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,14,26,36,45])))
944         self.assertEqual(mcpy0.getAllGeoTypes(),[NORM_POLYHED])
945         mcpy0.checkConsistencyLight()
946         mcpy0.checkConsistency()
947         mcpy1=mcpy0.convertIntoSingleGeoTypeMesh()
948         self.assertTrue(mcpy1.isEqual(m,1e-12))
949         #
950         m_mrg=MEDCoupling1DGTUMesh.Merge1DGTUMeshes([m2,m,m2])
951         self.assertTrue(m_mrg.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40,44,52,63,72,80,88,99,103,111,120])))
952         self.assertTrue(m_mrg.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5,27,26,32,33,25,24,30,31,-1,31,30,25,26,25,31,32,-1,26,25,-1,32,-1,31,29,28,34,35,-1,35,34,-1,29,28,27,33,34,-1,29,27,33,49,48,54,55,-1,55,54,49,50,49,55,56,-1,50,49,-1,56,-1,55,51,50,56,57,52,51,57,58,-1,53,51,57,53,52,58,59,-1,59,58,-1,53])))
953         m_mrg2=MEDCoupling1DGTUMesh.Merge1DGTUMeshesOnSameCoords([m3,m,m3])
954         self.assertTrue(m_mrg2.getNodalConnectivityIndex().isEqual(DataArrayInt([0,8,19,23,31,40,44,52,63,72,80,88,99,103,111,120])))
955         self.assertTrue(m_mrg2.getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5,3,2,8,9,1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,5,4,10,11,-1,11,10,-1,5,4,3,9,10,-1,5,3,9,1,0,6,7,-1,7,6,1,2,1,7,8,-1,2,1,-1,8,-1,7,3,2,8,9,4,3,9,10,-1,5,3,9,5,4,10,11,-1,11,10,-1,5])))
956         a,b=m_mrg2.getReverseNodalConnectivity()
957         self.assertTrue(b.isEqual(DataArrayInt([0,3,15,24,33,39,48,54,66,75,84,93,99,99,99,99,99,99,99,99,99,99,99,99,99])))
958         self.assertTrue(a.isEqual(DataArrayInt([0,6,10,0,0,1,1,6,6,7,7,10,10,11,11,1,1,2,5,7,7,11,11,12,2,3,3,5,9,9,12,13,13,3,4,8,9,13,14,3,4,4,8,8,9,13,14,14,0,0,6,6,10,10,0,0,1,1,6,6,7,7,10,10,11,11,1,1,2,5,7,7,11,11,12,2,3,3,5,9,9,12,13,13,3,4,4,8,8,9,13,14,14,4,4,8,8,14,14])))
959         self.assertTrue(m_mrg2.fillCellIdsToKeepFromNodeIds([7],False).isEqual(DataArrayInt([0,1,6,7,10,11])))
960         self.assertTrue(m_mrg2.fillCellIdsToKeepFromNodeIds([0,1,6,7],True).isEqual(DataArrayInt([0,6,10])))
961         #
962         self.assertTrue(m_mrg2.isPacked())
963         self.assertEqual(120,m_mrg2.getNodalConnectivityIndex().popBackSilent())
964         self.assertEqual(m_mrg2.getNumberOfCells(),14)
965         m_mrg2.checkConsistency()
966         self.assertTrue(not m_mrg2.isPacked())
967         m_mrg4,b=m_mrg2.copyWithNodalConnectivityPacked()
968         self.assertTrue(not b)
969         m_mrg4.checkConsistency()
970         self.assertEqual(m_mrg4.getNumberOfCells(),14)
971         self.assertTrue(m_mrg4.getNodalConnectivityIndex().isEqual(m_mrg2.getNodalConnectivityIndex()))
972         self.assertEqual(len(m_mrg4.getNodalConnectivity()),111)
973         self.assertEqual(len(m_mrg2.getNodalConnectivity()),120)
974         self.assertTrue(m_mrg4.getNodalConnectivity().isEqual(m_mrg2.getNodalConnectivity()[:111]))
975         #
976         m0=m_mrg2[:5]
977         m1=m_mrg2[[5,6,7,8,9]]
978         m2=m_mrg2[10:]
979         self.assertTrue(m1.isEqualWithoutConsideringStr(m,1e-12))
980         a,b=m.checkGeoEquivalWith(m0,12,1e-12)
981         self.assertTrue(a.isEqual(DataArrayInt(o2n)))
982         self.assertTrue(b is None)
983         pass
984
985     def testSwig2DADAreIncludedInMe1(self):
986         a=DataArrayDouble(30) ; a.iota() ; a.rearrange(3)
987         p=DataArrayInt([5,2,1,9])
988         b,c=a.areIncludedInMe(a[p],1e-12)
989         self.assertTrue(b)
990         self.assertTrue(c.isEqual(p))
991         d=a[p]
992         d.setIJ(3,1,28.1)
993         b,c=a.areIncludedInMe(d,1e-12)
994         self.assertTrue(not b)
995         self.assertTrue(c.isEqual(DataArrayInt([5,2,1,10])))
996         pass
997
998     def testSwig2DADesallocate1(self):
999         d=DataArrayDouble([(1,2),(6,7),(6,8)]) ; d.setInfoOnComponents(["aa","bbb"])
1000         self.assertTrue(d.isAllocated())
1001         d.checkAllocated()
1002         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1003         ref=d.getHeapMemorySize()
1004         d.desallocate()
1005         self.assertEqual(ref-d.getHeapMemorySize(),6*8)
1006         self.assertTrue(not d.isAllocated())
1007         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1008         self.assertRaises(InterpKernelException,d.checkAllocated)
1009         #
1010         d=DataArrayInt([(1,2),(6,7),(6,8)]) ; d.setInfoOnComponents(["aa","bbb"])
1011         self.assertTrue(d.isAllocated())
1012         d.checkAllocated()
1013         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1014         ref=d.getHeapMemorySize()
1015         d.desallocate()
1016         self.assertEqual(ref-d.getHeapMemorySize(),6*4)
1017         self.assertTrue(not d.isAllocated())
1018         self.assertEqual(d.getInfoOnComponents(),["aa","bbb"])
1019         self.assertRaises(InterpKernelException,d.checkAllocated)
1020         pass
1021
1022     def testSwig2IsPartStructured1(self):
1023         #dim 1
1024         d10=DataArrayInt([2,3,4,5,6,7,8,9,10,11])
1025         a,b=MEDCouplingStructuredMesh.IsPartStructured(d10,[13])
1026         self.assertTrue(a) ; self.assertEqual(b,[(2,12)])
1027         d11=DataArrayInt([2,3,4,5,6,7,8,10,9,11])
1028         a,b=MEDCouplingStructuredMesh.IsPartStructured(d11,[13])
1029         self.assertTrue(not a)
1030         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d10,[11])
1031         #dim 2
1032         st=[10,4]
1033         d20=DataArrayInt([1,2,3,4,11,12,13,14,21,22,23,24])
1034         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1035         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(0,3)])
1036         self.assertEqual(12,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt(b))
1037         self.assertEqual(0,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt([(1,5),(1,3),(2,2)]))
1038         self.assertEqual(0,MEDCouplingStructuredMesh.DeduceNumberOfGivenRangeInCompactFrmt([(5,5),(3,3),(2,2)]))
1039         self.assertEqual(36,MEDCouplingStructuredMesh.DeduceNumberOfGivenStructure([3,2,6]))
1040         self.assertEqual(126,MEDCouplingStructuredMesh.DeduceNumberOfGivenStructure((3,7,6)))
1041         d20=DataArrayInt([1,2,3,4,12,11,13,14,21,22,23,24])
1042         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1043         self.assertTrue(not a)
1044         d20=DataArrayInt([1,2,3,4,11,12,13,15,21,22,23,24])
1045         a,b=MEDCouplingStructuredMesh.IsPartStructured(d20,st)
1046         self.assertTrue(not a)
1047         d21=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39])
1048         a,b=MEDCouplingStructuredMesh.IsPartStructured(d21,st)
1049         self.assertTrue(a) ; self.assertEqual(b,[(0,10),(0,4)])
1050         d22=DataArrayInt([1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44])
1051         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d22,st)
1052         a,b=MEDCouplingStructuredMesh.IsPartStructured(d22,[10,5])
1053         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(0,5)])
1054         #dim 3
1055         d30=DataArrayInt([11,12,13,14,21,22,23,24,51,52,53,54,61,62,63,64])
1056         a,b=MEDCouplingStructuredMesh.IsPartStructured(d30,[10,4,2])
1057         self.assertTrue(a) ; self.assertEqual(b,[(1,5),(1,3),(0,2)])
1058         d31=DataArrayInt([11,12,13,14,21,22,24,23,51,52,53,54,61,62,63,64])
1059         a,b=MEDCouplingStructuredMesh.IsPartStructured(d31,[10,4,2])
1060         self.assertTrue(not a)
1061         self.assertRaises(InterpKernelException,MEDCouplingStructuredMesh.IsPartStructured,d30,[10,4,1])
1062         pass
1063
1064     def testSwig2PartStructured1(self):
1065         c=MEDCouplingCMesh() ; c.setName("toto")
1066         arr0=DataArrayDouble(10); arr0.iota()
1067         arr1=DataArrayDouble(4) ; arr1.iota(3)
1068         c.setCoords(arr0,arr1)
1069         self.assertEqual(c.getNodeGridStructure(),(10,4))
1070         self.assertEqual(c.getCellGridStructure(),(9,3))
1071         d20=DataArrayInt([1,2,3,4,10,11,12,13,19,20,21,22])
1072         self.assertEqual(27,c.getNumberOfCells())
1073         self.assertEqual(40,c.getNumberOfNodes())
1074         self.assertEqual(2,c.getMeshDimension())
1075         c.checkConsistencyLight()
1076         #
1077         arr2=MEDCouplingStructuredMesh.BuildExplicitIdsFrom([9,3],[(1,5),(0,3)])
1078         self.assertTrue(arr2.isEqual(DataArrayInt([1,2,3,4,10,11,12,13,19,20,21,22])))
1079         # CMesh
1080         c2=c.buildStructuredSubPart([(1,5),(0,3)])
1081         c2.checkConsistencyLight()
1082         self.assertTrue(isinstance(c2,MEDCouplingCMesh))
1083         self.assertEqual(12,c2.getNumberOfCells())
1084         self.assertEqual(20,c2.getNumberOfNodes())
1085         self.assertEqual(2,c2.getMeshDimension())
1086         self.assertEqual("toto",c2.getName())
1087         self.assertTrue(c2.getCoordsAt(0).isEqual(DataArrayDouble([1.,2.,3.,4.,5.]),1e-12))
1088         self.assertTrue(c2.getCoordsAt(1).isEqual(DataArrayDouble([3.,4.,5.,6.]),1e-12))
1089         #
1090         a,b=c.buildPartAndReduceNodes(d20)
1091         a.checkConsistencyLight()
1092         exp2=DataArrayInt([-1,0,1,2,3,4,-1,-1,-1,-1,-1,5,6,7,8,9,-1,-1,-1,-1,-1,10,11,12,13,14,-1,-1,-1,-1,-1,15,16,17,18,19,-1,-1,-1,-1])
1093         self.assertTrue(exp2.isEqual(b))
1094         self.assertTrue(isinstance(a,MEDCouplingCMesh))
1095         self.assertTrue(a.buildUnstructured().isEqual(c.buildUnstructured().buildPartAndReduceNodes(d20)[0],1e-12))
1096         # CurveLinearMesh
1097         c2=MEDCouplingCurveLinearMesh() ; c2.setName("toto")
1098         c2.setCoords(c.buildUnstructured().getCoords())
1099         c2.setNodeGridStructure([10,4])
1100         c2.checkConsistencyLight()
1101         a,b=c2.buildPartAndReduceNodes(d20)
1102         a.checkConsistencyLight()
1103         self.assertTrue(exp2.isEqual(b))
1104         self.assertTrue(isinstance(a,MEDCouplingCurveLinearMesh))
1105         self.assertTrue(a.buildUnstructured().isEqual(c2.buildUnstructured().buildPartAndReduceNodes(d20)[0],1e-12))
1106         pass
1107
1108     def testSwig2FindPermutationFromFirstToSecond1(self):
1109         ids1=DataArrayInt([3,1,103,4,6,10,-7,205])
1110         ids2=DataArrayInt([-7,1,205,10,6,3,103,4])
1111         ids3=DataArrayInt.FindPermutationFromFirstToSecond(ids1,ids2)
1112         self.assertTrue(ids3.isEqual(DataArrayInt([5,1,6,7,4,3,0,2])))
1113         ids2ToTest=ids1.renumber(ids3)
1114         self.assertTrue(ids2ToTest.isEqual(ids2))
1115         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103]))
1116         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103,2]))
1117         self.assertRaises(InterpKernelException,DataArrayInt.FindPermutationFromFirstToSecond,DataArrayInt([3,1,103]),DataArrayInt([1,103,1]))
1118         self.assertTrue(DataArrayInt.FindPermutationFromFirstToSecond(DataArrayInt([]),DataArrayInt([])).empty())
1119         pass
1120
1121     def testSwig2BugStructuredMeshGetNodeIdsOfCell1(self):
1122         m=MEDCouplingCMesh("mesh")
1123         coordsX=DataArrayDouble([0,1.1,2.2,3.3,4.4]) ; coordsX.setInfoOnComponents(["XX [m]"])
1124         coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
1125         m.setCoords(coordsX,coordsY)
1126         self.assertEqual([2,3,8,7],m.getNodeIdsOfCell(2))
1127         self.assertEqual([3,4,9,8],m.getNodeIdsOfCell(3))
1128         self.assertEqual([7,8,13,12],m.getNodeIdsOfCell(6))
1129         self.assertEqual([8,9,14,13],m.getNodeIdsOfCell(7))
1130         pass
1131
1132     def testSwig2ThrowOnDAIInvertN2O2ON2(self):
1133         p1=DataArrayInt([3,5,8])
1134         p2=DataArrayInt([0,3,4,5,6,7,8,9,10])
1135         p1.transformWithIndArr(p2.invertArrayN2O2O2N(11))
1136         self.assertTrue(p1.isEqual(DataArrayInt([1,3,6])))
1137         self.assertTrue(p2.invertArrayN2O2O2N(11).isEqual(DataArrayInt([0,-1,-1,1,2,3,4,5,6,7,8])))
1138         self.assertRaises(InterpKernelException,p2.invertArrayN2O2O2N,10)
1139         pass
1140
1141     def testSwig2ComputeEffectiveNbOfNodesPerCell1(self):
1142         coords=DataArrayDouble([ 0.241310763507 , 0.0504777305619 , 0.0682283524903 , 0.252501053866 , -0.0625176732937 , 0.137272639894 ,
1143                  0.152262663601 , 0.241816569527 , 0.133812556197 , 0.18047750211 , -0.0789949051358 , 0.339098173401 ,
1144                  0.151741971857 , 0.238885278571 , 0.137715037333 , 0.242532155481 , -0.0928169086456 , 0.0678043417367 ,
1145                  0.240941965335 , -0.015461491464 , 0.0617186345825 , 0.24127650112 , 0.0499427876717 , 0.0679634099148 ,
1146                  -0.145828917428 , 0.206291632565 , 0.0310071927543 , 0.0125651775307 , 0.266262085828 , 0.105228430543 ,
1147                  -0.0994066533286 , 0.233224271238 , 0.0572213839567 , -0.0951345338317 , 0.234819509426 , 0.0592126284538 ,
1148                  0.136580574205 , -0.205486212579 , 0.0572866072014 , 0.0637270784978 , -0.168886355238 , 0.446614057077 ,
1149                  0.041337157151 , -0.213402568198 , 0.372407095999 , 0.0411601970268 , -0.202387875756 , 0.411334979491 ,
1150                  -0.108355701857 , 0.193636239335 , 0.204886756738 , 0.00639779029829 , 0.155296981517 , 0.252585892979 ,
1151                  0.0262473111702 , -0.112919732543 , 0.424286639249 ,-0.224103052733 , -0.139430015438 , -0.0122352295701 ,
1152                 -0.0312760589481 , -0.274272003594 , 0.0323959636568 , -0.166663422532 , -0.217754445175 , 0.00392109070364 ,
1153                  -0.30586619777 , -0.0475168041091 , -0.0144585228182 , -0.280881480586 , 0.135571293538 , 0.00623923647986 ,
1154                  -0.25548538234 , 0.156819217766 , 0.0645277879769 , -0.131567009284 , 0.184133752309 , 0.206021802753 ,
1155                  -0.196204010965 , 0.151602971681 , 0.212974777736 , -0.183713879463 , 0.0802946639531 , 0.260115662599 ,
1156                  -0.244241178767 , -0.0738873389604 , 0.144590565817 , -0.155804057829 , -0.164892720025 , 0.210613950558 ,
1157                  -0.170950800428 , -0.215099334026 , 0.00610122860092 , -0.30552634869 , -0.0490020791904 , -0.0132786533145 ,
1158                  0.271831011884 , 0.15105657296 , 0.0230534827908 , 0.281919192283 , 0.0898544306288 , -0.0625201489143 ,
1159                  0.260240727276 , -0.0120688706637 , -0.0532316588626 , 0.244947737722 , 0.0197984684293 , 0.0309341209233 ,
1160                  0.23439631578 , 0.229825279875 , 0.0508520585381 , 0.160921316875 , 0.265078502128 , 0.121716560626 ,
1161                  -0.315088694175 , 0.0747700471918 , -0.245836615071 , -0.327728781776 , 0.0857114674649 , -0.239431905957 ,
1162                  -0.308385460634 , 0.145142997084 , -0.149886828433 , 0.0488236045164 , 0.309462801914 , 0.0849169148265 ,
1163                 -0.0244964803395 , 0.33145611751 , -0.0476415818061 , 0.0060567994229 , 0.32418412014 , 0.0367779543812 ,
1164                  -0.0950221448063 , 0.236675326003 , 0.0572594453983 , 0.248723023186 , 0.0886648784791 , -0.176629430538 ,
1165                  0.116796984 , 0.256596599567 , -0.292863523603 , 0.118024552914 , 0.229154257843 , -0.34233232501 ,
1166                  0.217507892549 , -0.0417822335742 , -0.176771782888 , -0.224429321304 , 0.0125595300114 , -0.362064725588 ,
1167                  0.0937301100955 , -0.0500824832657 , -0.299713548444 , -0.244162220397 , 0.0383853931293 , -0.389856984411 ,
1168                  -0.0281989366102 , 0.097392811563 , -0.458244577284 , -0.385010847162 , 0.10122766194 , -0.140052859922 ,
1169                  -0.377936358012 , 0.110875172128 , -0.176207095463 , 0.244483045556 , -0.0991073977045 , 0.0575134372934 ,
1170                 0.262605120167 , -0.100243191645 , -0.0495620806935 , 0.240306880972 , -0.136153701579 , -0.114745281696 ,
1171                  0.215763176129 , -0.0836766059189 , -0.183249640616 , 0.237870396603 , -0.132449578286 , -0.121598854639 ,
1172                  -0.0637683083097 , -0.27921020214 , -0.149112321992 , -0.0856211014977 , -0.2973233473 , -0.0446878139589 ,
1173                  0.104675342288 , -0.0625908305324 , -0.290346256534 , 0.0248264249186 , -0.247797708548 , -0.165830884019 ,
1174                  0.0719302438309 , -0.178468260473 , -0.211432157345 , 0.142871843159 , -0.208769948542 , 0.0454101128246 ,
1175                  0.167803379307 , -0.207851396623 , -0.088802726124 , 0.12868717152 , -0.230920439715 , 0.00760508389036 ,
1176                  -0.0372812069535 , -0.286740286332 , 0.00963701291166 ], 69, 3)
1177         connN = [ #polyhedron 0
1178             0 , 1 , 3 , 4 , 2 , -1 , 1 , 5 , 6 , 7 , 0 , -1 , 0 , 7 , 8 , 10 , 11 , 9 , 2 , -1 , 1 , 5 , 12 , 14 , 15 , 13 , 3 , -1 , 16 , 9 , 2 , 4 , 17 , -1
1179             , 4 , 3 , 13 , 18 , 17 , -1 , 5 , 6 , 19 , 21 , 20 , 12 , -1 , 6 , 7 , 8 , 23 , 22 , 19 , -1 , 23 , 24 , 10 , 8 , -1 , 25 , 11 , 9 , 16 , -1
1180             , 24 , 26 , 25 , 11 , 10 , -1 , 12 , 14 , 20 , -1 , 27 , 28 , 29 , 15 , 13 , 18 , -1 , 14 , 15 , 29 , 30 , 21 , 20 , -1 , 26 , 27 , 18 , 17 , 16 , 25 , -1
1181             , 22 , 19 , 21 , 30 , 31 , -1 , 22 , 31 , 28 , 27 , 26 , 24 , 23 , -1 , 31 , 30 , 29 , 28,
1182             # polyhedron 1
1183             0 , 7 , 8 , 10 , 11 , 9 , 2 , -1 , 32 , 0 , 7 , 35 , 34 , 33 , -1 , 32 , 0 , 2 , 37 , 36 , -1 , 35 , 7 , 8 , 40 , 39 , 38 , -1
1184             , 2 , 37 , 41 , 9 , -1 , 40 , 8 , 10 , 44 , 43 , 42 , -1 , 41 , 9 , 11 , 44 , 43 , -1 , 44 , 11 , 10 , -1 , 32 , 33 , 45 , 47 , 46 , 36 , -1
1185             , 33 , 34 , 48 , 45 , -1 , 35 , 34 , 48 , 50 , 49 , 38 , -1 , 41 , 43 , 42 , 46 , 36 , 37 , -1 , 38 , 39 , 51 , 49 , -1
1186             , 39 , 40 , 42 , 46 , 47 , 52 , 51 , -1 , 45 , 47 , 52 , 50 , 48 , -1 , 52 , 51 , 49 , 50,
1187             # polyhedron 2
1188             6 , 7 , 8 , 23 , 22 , 19 , -1 , 6 , 35 , 7 , -1 , 6 , 35 , 38 , 19 , -1 , 35 , 7 , 8 , 40 , 39 , 38 , -1 , 53 , 22 , 19 , 38 , 39 , 54 , -1
1189             , 23 , 53 , 54 , 40 , 8 , -1 , 53 , 22 , 23 , -1 , 39 , 54 , 40,
1190             # polyhedron 3
1191             35 , 34 , 48 , 50 , 49 , 38 , -1 , 6 , 35 , 34 , 56 , 55 , 5 , -1 , 6 , 35 , 38 , 19 , -1 , 34 , 56 , 57 , 59 , 58 , 48 , -1
1192             , 60 , 61 , 21 , 19 , 38 , 49 , -1 , 62 , 50 , 48 , 58 , -1 , 60 , 63 , 64 , 62 , 50 , 49 , -1 , 5 , 6 , 19 , 21 , 20 , 12 , -1
1193             , 55 , 5 , 12 , 65 , -1 , 66 , 67 , 65 , 55 , 56 , 57 , -1 , 63 , 66 , 57 , 59 , 64 , -1 , 64 , 62 , 58 , 59 , -1
1194             , 60 , 63 , 66 , 67 , 68 , 61 , -1 , 61 , 68 , 20 , 21 , -1 , 67 , 68 , 20 , 12 , 65]
1195         meshN=MEDCouplingUMesh.New()
1196         meshN.setName("ForBary")
1197         meshN.setMeshDimension(3) ; meshN.setCoords(coords)
1198         meshN.allocateCells(4)
1199         meshN.insertNextCell(NORM_POLYHED,113,connN);
1200         meshN.insertNextCell(NORM_POLYHED,99,connN[113:])
1201         meshN.insertNextCell(NORM_POLYHED,43,connN[212:])
1202         meshN.insertNextCell(NORM_POLYHED,92,connN[255:])
1203         d=meshN.computeEffectiveNbOfNodesPerCell()
1204         e=meshN.computeNbOfNodesPerCell()
1205         self.assertTrue(d.isEqual(DataArrayInt([32,28,12,26])))
1206         self.assertTrue(e.isEqual(DataArrayInt([96,84,36,78])))
1207         m0=MEDCoupling1DGTUMesh(meshN)
1208         c=MEDCouplingCMesh()
1209         arr=DataArrayDouble(3) ; arr.iota(10)
1210         c.setCoords(arr,arr,arr)
1211         m10=c.buildUnstructured()
1212         m11=c.build1SGTUnstructured()
1213         m12=MEDCoupling1SGTUMesh.New(m10)
1214         self.assertTrue(m12.isEqual(m11,1e-12))
1215         m12.setCoords(m0.getCoords()) # m12 is not OK geometrically but the aim of the test is only connectivity values
1216         m3=MEDCoupling1GTUMesh.AggregateOnSameCoordsToUMesh([m12,m0])
1217         m3.checkConsistencyLight()
1218         self.assertEqual(m3.getCoords().getHiddenCppPointer(),m12.getCoords().getHiddenCppPointer())
1219         self.assertTrue(m3.getNodalConnectivity().isEqual(DataArrayInt([18,1,0,3,4,10,9,12,13,18,2,1,4,5,11,10,13,14,18,4,3,6,7,13,12,15,16,18,5,4,7,8,14,13,16,17,18,10,9,12,13,19,18,21,22,18,11,10,13,14,20,19,22,23,18,13,12,15,16,22,21,24,25,18,14,13,16,17,23,22,25,26,31,0,1,3,4,2,-1,1,5,6,7,0,-1,0,7,8,10,11,9,2,-1,1,5,12,14,15,13,3,-1,16,9,2,4,17,-1,4,3,13,18,17,-1,5,6,19,21,20,12,-1,6,7,8,23,22,19,-1,23,24,10,8,-1,25,11,9,16,-1,24,26,25,11,10,-1,12,14,20,-1,27,28,29,15,13,18,-1,14,15,29,30,21,20,-1,26,27,18,17,16,25,-1,22,19,21,30,31,-1,22,31,28,27,26,24,23,-1,31,30,29,28,31,0,7,8,10,11,9,2,-1,32,0,7,35,34,33,-1,32,0,2,37,36,-1,35,7,8,40,39,38,-1,2,37,41,9,-1,40,8,10,44,43,42,-1,41,9,11,44,43,-1,44,11,10,-1,32,33,45,47,46,36,-1,33,34,48,45,-1,35,34,48,50,49,38,-1,41,43,42,46,36,37,-1,38,39,51,49,-1,39,40,42,46,47,52,51,-1,45,47,52,50,48,-1,52,51,49,50,31,6,7,8,23,22,19,-1,6,35,7,-1,6,35,38,19,-1,35,7,8,40,39,38,-1,53,22,19,38,39,54,-1,23,53,54,40,8,-1,53,22,23,-1,39,54,40,31,35,34,48,50,49,38,-1,6,35,34,56,55,5,-1,6,35,38,19,-1,34,56,57,59,58,48,-1,60,61,21,19,38,49,-1,62,50,48,58,-1,60,63,64,62,50,49,-1,5,6,19,21,20,12,-1,55,5,12,65,-1,66,67,65,55,56,57,-1,63,66,57,59,64,-1,64,62,58,59,-1,60,63,66,67,68,61,-1,61,68,20,21,-1,67,68,20,12,65])))
1220         self.assertTrue(m3.getNodalConnectivityIndex().isEqual(DataArrayInt([0,9,18,27,36,45,54,63,72,186,286,330,423])))
1221         pass
1222
1223     def testSwig2Tetrahedrize1(self):
1224         d=DataArrayInt([0,3,6,10,14,20])
1225         d2=d.buildExplicitArrOfSliceOnScaledArr(slice(0,5,2))
1226         self.assertTrue(d2.isEqual(DataArrayInt([0,0,0, 2,2,2,2, 4,4,4,4,4,4])))
1227         m=MEDCouplingUMesh("Penta6",3)
1228         m.setCoords(DataArrayDouble([0,0,0,0,1,0,1,0,0,0,0,2,0,1,2,1,0,2],6,3)) ; m.getCoords().setInfoOnComponents(["X","YY","ZZZ"])
1229         m.allocateCells()
1230         m.insertNextCell(NORM_PENTA6,[1,2,0,4,5,3])
1231         st=m.getCoords().getHiddenCppPointer()
1232         c,a,b=m.tetrahedrize(PLANAR_FACE_5)
1233         c.checkConsistency()
1234         self.assertTrue(a.isEqual(DataArrayInt([0,0,0])))
1235         self.assertEqual(0,b)
1236         self.assertEqual(m.getCoords().getHiddenCppPointer(),c.getCoords().getHiddenCppPointer())
1237         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([1,2,0,4,4,3,5,0,5,0,2,4])))
1238         del m,c
1239         #
1240         m2=MEDCouplingUMesh("octa12",3)
1241         coords=DataArrayDouble([1.,0.,0.,0.5,0.8660254037844386,0.,-0.5,0.8660254037844387,0.,-1.,1.2246467991473532e-16,0.,-0.5,-0.8660254037844384,0.,0.5,-0.866025403784439,0.,1.,0.,2.,0.5,0.8660254037844386,2.,-0.5,0.8660254037844387,2.,-1.,1.2246467991473532e-16,2.,-0.5,-0.8660254037844384,2.,0.5,-0.866025403784439,2.0],12,3)
1242         m2.setCoords(coords)
1243         m2.allocateCells()
1244         m2.insertNextCell(NORM_HEXGP12,[3,2,1,0,5,4,9,8,7,6,11,10])
1245         c,a,b=m2.tetrahedrize(PLANAR_FACE_5)
1246         c.checkConsistency()
1247         self.assertTrue(a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0])))
1248         self.assertEqual(0,b)
1249         self.assertEqual(c.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1250         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,4,9,9,10,8,4,8,4,2,9,2,5,4,8,8,10,11,4,11,4,5,8,2,1,5,8,8,11,7,5,7,5,1,8,1,0,5,7,7,11,6,5,6,5,0,7])))
1251         del m2,coords,c
1252         #
1253         coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.],8,3) ; coords.setInfoOnComponents(["X","YY","ZZZ"])
1254         m3=MEDCouplingUMesh("hexa8",3)
1255         m3.setCoords(coords)
1256         m3.allocateCells(0)
1257         m3.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1258         st=m3.getCoords().getHiddenCppPointer()
1259         c,a,b=m3.tetrahedrize(PLANAR_FACE_5)
1260         c.checkConsistency()
1261         a.isEqual(DataArrayInt([0,0,0,0,0]))
1262         self.assertEqual(0,b)
1263         self.assertEqual(m3.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1264         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,6,2,1,3,7,6,4,3,0,4,1,6,4,5,1,3,6,1,4])))
1265         #
1266         m4=MEDCouplingUMesh("hexa8",3)
1267         m4.setCoords(coords)
1268         m4.allocateCells(0)
1269         m4.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1270         c,a,b=m4.tetrahedrize(PLANAR_FACE_6)
1271         c.checkConsistency()
1272         a.isEqual(DataArrayInt([0,0,0,0,0,0]))
1273         self.assertEqual(0,b)
1274         self.assertEqual(c.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1275         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,6,2,5,3,2,1,5,3,7,6,5,3,4,7,5,3,1,0,5,3,0,4,5])))
1276         #
1277         m4=MEDCouplingUMesh("hexa8",3)
1278         m4.setCoords(coords)
1279         m4.allocateCells(0)
1280         m4.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1281         st=m4.getCoords().getHiddenCppPointer()
1282         c,a,b=m4.tetrahedrize(GENERAL_24)
1283         c.checkConsistency()
1284         a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
1285         self.assertEqual(7,b)
1286         self.assertTrue(c.getCoords().getHiddenCppPointer()!=coords.getHiddenCppPointer())
1287         self.assertTrue(c.getCoords()[:8].isEqual(coords,0))
1288         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,7,8,14,7,6,8,14,6,2,8,14,2,3,8,14,3,2,9,14,2,1,9,14,1,0,9,14,0,3,9,14,3,0,10,14,0,4,10,14,4,7,10,14,7,3,10,14,2,6,11,14,6,5,11,14,5,1,11,14,1,2,11,14,7,4,12,14,4,5,12,14,5,6,12,14,6,7,12,14,1,5,13,14,5,4,13,14,4,0,13,14,0,1,13,14])))
1289         m4CoordsExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.,0.5,1.,1.,0.5,0.5,0.,0.,0.5,1.,1.,0.5,1.,0.5,0.5,2.,0.5,0.,1.,0.5,0.5,1.],15,3)
1290         m4CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1291         self.assertTrue(c.getCoords().isEqual(m4CoordsExp,1e-12))
1292         self.assertAlmostEqual(2.,c.getMeasureField(False).accumulate()[0],12)
1293         #
1294         m6=MEDCouplingUMesh("hexa8",3)
1295         m6.setCoords(coords)
1296         m6.allocateCells(0)
1297         m6.insertNextCell(NORM_HEXA8,[3,2,1,0,7,6,5,4])
1298         st=m6.getCoords().getHiddenCppPointer()
1299         c,a,b=m6.tetrahedrize(GENERAL_48)
1300         c.checkConsistency()
1301         a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
1302         self.assertEqual(19,b)
1303         self.assertTrue(c.getCoords().getHiddenCppPointer()!=coords.getHiddenCppPointer())
1304         self.assertTrue(c.getCoords()[:8].isEqual(coords,0))
1305         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,20,8,26,3,8,21,26,3,9,20,26,3,22,9,26,3,21,12,26,3,12,22,26,8,10,2,23,8,2,13,23,8,20,10,23,8,26,20,23,8,13,21,23,8,21,26,23,12,26,21,25,12,21,16,25,12,22,26,25,12,17,22,25,12,16,0,25,12,0,17,25,21,23,13,18,21,13,1,18,21,26,23,18,21,25,26,18,21,1,16,18,21,16,25,18,9,11,20,24,9,20,26,24,9,7,11,24,9,14,7,24,9,26,22,24,9,22,14,24,20,6,10,15,20,10,23,15,20,11,6,15,20,24,11,15,20,23,26,15,20,26,24,15,22,24,26,19,22,26,25,19,22,14,24,19,22,4,14,19,22,25,17,19,22,17,4,19,26,15,23,5,26,23,18,5,26,24,15,5,26,19,24,5,26,18,25,5,26,25,19,5])))
1306         m6CoordsExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.,0.5,1.,0.,0.,1.,1.,1.,1.,1.,0.5,1.,2.,0.,0.5,0.,1.,0.5,0.,0.,0.5,2.,1.,0.5,2.,0.5,0.,0.,0.,0.,1.,1.,0.,1.,0.5,0.,2.,0.5,1.,1.,0.5,0.5,0.,0.,0.5,1.,1.,0.5,1.,0.5,0.5,2.,0.5,0.,1.,0.5,0.5,1.],27,3)
1307         m6CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1308         self.assertTrue(c.getCoords().isEqual(m6CoordsExp,1e-12))
1309         self.assertAlmostEqual(2.,c.getMeasureField(False).accumulate()[0],12)
1310         #
1311         m7=MEDCouplingUMesh("polyhed",3)
1312         coords=DataArrayDouble([1.,0.,0.,0.5,0.8660254037844386,0.,-0.5,0.8660254037844387,0.,-1.,0.,0.,-0.5,-0.8660254037844384,0.,0.5,-0.866025403784439,0.,1.,0.,2.,0.5,0.8660254037844386,2.,-0.5,0.8660254037844387,2.,-1.,0.,2.,-0.5,-0.8660254037844384,2.,0.5,-0.866025403784439,2.0],12,3) ; coords.setInfoOnComponents(["X","YY","ZZZ"])
1313         m7.setCoords(coords)
1314         m7.allocateCells()
1315         m7.insertNextCell(NORM_POLYHED,[3,2,1,0,5,4,-1,9,10,11,6,7,8,-1,3,9,8,2,-1,2,8,7,1,-1,1,7,6,0,-1,0,6,11,5,-1,5,11,10,4,-1,4,10,9,3])
1316         c,a,b=m7.tetrahedrize(PLANAR_FACE_5)
1317         c.checkConsistency()
1318         self.assertTrue(a.isEqual(DataArrayInt([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])))
1319         self.assertEqual(9,b)
1320         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,12,20,2,1,12,20,1,0,12,20,0,5,12,20,5,4,12,20,4,3,12,20,9,10,13,20,10,11,13,20,11,6,13,20,6,7,13,20,7,8,13,20,8,9,13,20,3,9,14,20,9,8,14,20,8,2,14,20,2,3,14,20,2,8,15,20,8,7,15,20,7,1,15,20,1,2,15,20,1,7,16,20,7,6,16,20,6,0,16,20,0,1,16,20,0,6,17,20,6,11,17,20,11,5,17,20,5,0,17,20,5,11,18,20,11,10,18,20,10,4,18,20,4,5,18,20,4,10,19,20,10,9,19,20,9,3,19,20,3,4,19,20])))
1321         self.assertAlmostEqual(5.196152422706635,c.getMeasureField(False).accumulate()[0],12)
1322         m7CoordsExp=DataArrayDouble([1.0,0.0,0.0,0.5,0.8660254037844386,0.0,-0.5,0.8660254037844387,0.0,-1.0,0.,0.0,-0.5,-0.8660254037844384,0.0,0.5,-0.866025403784439,0.0,1.0,0.0,2.0,0.5,0.8660254037844386,2.0,-0.5,0.8660254037844387,2.0,-1.0,0.,2.0,-0.5,-0.8660254037844384,2.0,0.5,-0.866025403784439,2.0,0.0,0.0,0.0,0.0,0.,2.0,-0.75,0.4330127018922194,1.0,0.0,0.8660254037844386,1.0,0.75,0.4330127018922193,1.0,0.75,-0.4330127018922195,1.0,0.0,-0.8660254037844387,1.0,-0.75,-0.4330127018922191,1.0,0.0,0.,1.0],21,3)
1323         m7CoordsExp.setInfoOnComponents(["X","YY","ZZZ"])
1324         self.assertTrue(c.getCoords().isEqual(m7CoordsExp,1e-12))
1325         del m7,coords,c
1326         #
1327         coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0.,0.,2.,1.,0.,2.,1.,1.,2.,0.,1.,2.],8,3) ; coords.setInfoOnComponents(["X","YY","ZZZ"])
1328         m8=MEDCouplingUMesh("pyra5",3)
1329         m8.setCoords(coords)
1330         m8.allocateCells(0)
1331         m8.insertNextCell(NORM_PYRA5,[3,2,1,0,7])
1332         st=m8.getCoords().getHiddenCppPointer()
1333         c,a,b=m8.tetrahedrize(PLANAR_FACE_5)
1334         self.assertEqual(m8.getCoords().getHiddenCppPointer(),coords.getHiddenCppPointer())
1335         c.checkConsistency()
1336         self.assertTrue(a.isEqual(DataArrayInt([0,0])))
1337         self.assertEqual(0,b)
1338         self.assertTrue(c.getNodalConnectivity().isEqual(DataArrayInt([3,2,1,7,3,1,0,7])))
1339         self.assertAlmostEqual(0.6666666666666667,c.getMeasureField(False).accumulate()[0],12)
1340         pass
1341
1342     def testDualMesh3D1(self):
1343         arr=DataArrayDouble(2) ; arr.iota()
1344         c=MEDCouplingCMesh() ; c.setCoords(arr,arr,arr)
1345         m=c.buildUnstructured()
1346         t=m.tetrahedrize(PLANAR_FACE_5)[0]
1347         d=t.computeDualMesh()
1348         self.assertTrue(d.getNodalConnectivityIndex().isEqual(DataArrayInt([0,29,118,207,236,325,354,383,472])))
1349         self.assertTrue(d.getNodalConnectivity().isEqual(DataArrayInt([26,11,42,8,-1,25,8,42,10,-1,29,10,42,11,-1,0,26,8,25,-1,0,25,10,29,-1,0,29,11,26,24,9,42,8,-1,26,8,42,11,-1,27,11,42,9,-1,1,24,8,26,-1,1,26,11,27,-1,30,13,43,12,-1,24,12,43,15,-1,32,15,43,13,-1,1,30,12,24,-1,1,32,13,30,-1,35,17,44,16,-1,32,16,44,19,-1,27,19,44,17,-1,1,35,16,32,-1,1,27,17,35,-1,24,15,46,9,-1,27,9,46,19,-1,32,19,46,15,27,9,42,11,-1,29,11,42,10,-1,28,10,42,9,-1,2,29,10,28,-1,2,27,11,29,-1,27,17,44,19,-1,38,19,44,18,-1,37,18,44,17,-1,2,37,17,27,-1,2,38,18,37,-1,28,21,45,23,-1,41,23,45,22,-1,38,22,45,21,-1,2,41,22,38,-1,2,28,23,41,-1,27,19,46,9,-1,28,9,46,21,-1,38,21,46,19,35,16,44,17,-1,36,18,44,16,-1,37,17,44,18,-1,3,36,16,35,-1,3,35,17,37,-1,3,37,18,36,24,8,42,9,-1,25,10,42,8,-1,28,9,42,10,-1,4,25,8,24,-1,4,28,10,25,-1,24,15,43,12,-1,31,12,43,14,-1,34,14,43,15,-1,4,24,12,31,-1,4,31,14,34,-1,34,21,45,20,-1,40,20,45,23,-1,28,23,45,21,-1,4,34,20,40,-1,4,40,23,28,-1,24,9,46,15,-1,28,21,46,9,-1,34,15,46,21,30,12,43,13,-1,31,14,43,12,-1,33,13,43,14,-1,5,31,12,30,-1,5,30,13,33,-1,5,33,14,31,40,23,45,20,-1,39,20,45,22,-1,41,22,45,23,-1,6,40,20,39,-1,6,39,22,41,-1,6,41,23,40,32,13,43,15,-1,34,15,43,14,-1,33,14,43,13,-1,7,33,13,32,-1,7,34,14,33,-1,32,19,44,16,-1,36,16,44,18,-1,38,18,44,19,-1,7,32,16,36,-1,7,36,18,38,-1,34,20,45,21,-1,39,22,45,20,-1,38,21,45,22,-1,7,39,20,34,-1,7,38,22,39,-1,32,15,46,19,-1,38,19,46,21,-1,34,21,46,15])))
1350         self.assertTrue(d.getCoords().isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,0.,1.,0.,1.,1.,0.,0.,0.,1.,1.,0.,1.,0.,1.,1.,1.,1.,1.,0.3333333333333333,0.,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.,0.6666666666666666,0.,0.6666666666666666,1.,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.3333333333333333,1.,0.6666666666666666,0.3333333333333333,0.6666666666666666,1.,0.6666666666666666,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.,0.6666666666666666,1.,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.3333333333333333,0.3333333333333333,0.6666666666666666,1.,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.3333333333333333,1.,0.6666666666666666,0.,0.6666666666666666,0.6666666666666666,0.5,0.,0.5,0.,0.,0.5,0.5,0.,0.,0.5,0.5,0.,0.,0.5,0.5,0.,0.5,0.,1.,0.,0.5,0.5,0.,1.,1.,0.5,0.5,1.,0.5,1.,0.5,0.5,1.,1.,0.5,0.,1.,1.,0.5,0.5,1.,0.,0.5,1.,0.5,0.5,1.,1.,0.,0.5,1.,0.,1.,0.5,0.25,0.25,0.25,0.75,0.25,0.75,0.75,0.75,0.25,0.25,0.75,0.75,0.5,0.5,0.5],47,3),1e-12))
1351         self.assertAlmostEqual(1.,d.getMeasureField(False).accumulate()[0],1e-13)
1352         pass
1353
1354     def testDualMesh2D1(self):
1355         arr=DataArrayDouble(5) ; arr.iota()
1356         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
1357         m=c.buildUnstructured()
1358         m.simplexize(0)
1359         t=MEDCoupling1SGTUMesh(m)
1360         d=t.computeDualMesh()
1361         self.assertTrue(d.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,12,20,28,34,42,54,66,78,86,94,106,118,130,138,146,158,170,182,190,196,204,212,220,224])))
1362         self.assertTrue(d.getNodalConnectivity().isEqual(DataArrayInt([26,81,25,0,25,81,27,82,29,83,30,1,30,83,31,84,33,85,34,2,34,85,35,86,37,87,38,3,38,87,39,88,41,4,27,81,26,5,42,89,28,82,29,82,28,89,43,90,45,91,32,84,31,83,33,84,32,91,46,92,48,93,36,86,35,85,37,86,36,93,49,94,51,95,40,88,39,87,41,88,40,95,52,96,54,9,43,89,42,10,55,97,44,90,45,90,44,97,56,98,58,99,47,92,46,91,48,92,47,99,59,100,61,101,50,94,49,93,51,94,50,101,62,102,64,103,53,96,52,95,54,96,53,103,65,104,67,14,56,97,55,15,68,105,57,98,58,98,57,105,69,106,71,107,60,100,59,99,61,100,60,107,72,108,74,109,63,102,62,101,64,102,63,109,75,110,77,111,66,104,65,103,67,104,66,111,78,112,80,19,69,105,68,20,70,106,71,106,70,21,73,108,72,107,74,108,73,22,76,110,75,109,77,110,76,23,79,112,78,111,80,112,79,24])))
1363         self.assertTrue(d.getCoords().isEqual(DataArrayDouble([0.,0.,1.,0.,2.,0.,3.,0.,4.,0.,0.,1.,1.,1.,2.,1.,3.,1.,4.,1.,0.,2.,1.,2.,2.,2.,3.,2.,4.,2.,0.,3.,1.,3.,2.,3.,3.,3.,4.,3.,0.,4.,1.,4.,2.,4.,3.,4.,4.,4.,0.5,0.,0.,0.5,0.5,0.5,0.5,1.,1.,0.5,1.5,0.,1.5,0.5,1.5,1.,2.,0.5,2.5,0.,2.5,0.5,2.5,1.,3.,0.5,3.5,0.,3.5,0.5,3.5,1.,4.,0.5,0.,1.5,0.5,1.5,0.5,2.,1.,1.5,1.5,1.5,1.5,2.,2.,1.5,2.5,1.5,2.5,2.,3.,1.5,3.5,1.5,3.5,2.,4.,1.5,0.,2.5,0.5,2.5,0.5,3.,1.,2.5,1.5,2.5,1.5,3.,2.,2.5,2.5,2.5,2.5,3.,3.,2.5,3.5,2.5,3.5,3.,4.,2.5,0.,3.5,0.5,3.5,0.5,4.,1.,3.5,1.5,3.5,1.5,4.,2.,3.5,2.5,3.5,2.5,4.,3.,3.5,3.5,3.5,3.5,4.,4.,3.5,0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,1.3333333333333333,0.3333333333333333,1.6666666666666665,0.6666666666666666,2.333333333333333,0.3333333333333333,2.6666666666666665,0.6666666666666666,3.333333333333333,0.3333333333333333,3.6666666666666665,0.6666666666666666,0.3333333333333333,1.3333333333333333,0.6666666666666666,1.6666666666666665,1.3333333333333333,1.3333333333333333,1.6666666666666665,1.6666666666666665,2.333333333333333,1.3333333333333333,2.6666666666666665,1.6666666666666665,3.333333333333333,1.3333333333333333,3.6666666666666665,1.6666666666666665,0.3333333333333333,2.333333333333333,0.6666666666666666,2.6666666666666665,1.3333333333333333,2.333333333333333,1.6666666666666665,2.6666666666666665,2.333333333333333,2.333333333333333,2.6666666666666665,2.6666666666666665,3.333333333333333,2.333333333333333,3.6666666666666665,2.6666666666666665,0.3333333333333333,3.333333333333333,0.6666666666666666,3.6666666666666665,1.3333333333333333,3.333333333333333,1.6666666666666665,3.6666666666666665,2.333333333333333,3.333333333333333,2.6666666666666665,3.6666666666666665,3.333333333333333,3.333333333333333,3.6666666666666665,3.6666666666666665],113,2),1e-12))
1364         self.assertAlmostEqual(16.,d.getMeasureField(False).accumulate()[0],1e-13)
1365         pass
1366
1367     def testSwig2LoadBalanceBBox1(self):
1368         arr=DataArrayDouble(5) ; arr.iota()
1369         t=MEDCouplingCMesh() ; t.setCoords(arr,arr)
1370         arr=DataArrayDouble(16) ; arr.iota() ; arr*=2./15
1371         s=MEDCouplingCMesh() ; s.setCoords(arr,arr[:]) ; s.translate([2.,1.])
1372         #
1373         s1=s.build1SGTUnstructured()
1374         t1=t.build1SGTUnstructured()
1375         w=MEDCouplingPointSet.ComputeNbOfInteractionsWithSrcCells(s1,t1,1e-12)
1376         wExp=DataArrayInt([0,0,0,0,0,0,64,64,0,0,64,64,0,0,0,0])
1377         self.assertTrue(w.isEqual(wExp))
1378         slcs=w.splitInBalancedSlices(4)
1379         self.assertEqual(len(slcs),4)
1380         self.assertEqual(slcs,[slice(0,7,1),slice(7,8,1),slice(8,11,1),slice(11,16,1)])
1381         bbs=s1.getBoundingBoxForBBTree()
1382         bbt=t1.getBoundingBoxForBBTree()
1383         self.assertTrue(bbt.computeNbOfInteractionsWith(bbs,1e-12).isEqual(wExp))
1384         pass
1385
1386     def testKrSpatialDiscretization2(self):
1387         srcPointCoordsXY=DataArrayDouble([0.8401877171547095,0.39438292681909304,0.7830992237586059,0.7984400334760733,0.9116473579367843,0.19755136929338396,0.335222755714889,0.768229594811904,0.2777747108031878,0.5539699557954305,0.47739705186216025,0.6288709247619244,0.36478447279184334,0.5134009101956155,0.9522297251747128,0.9161950680037007,0.6357117279599009,0.7172969294326831,0.14160255535580338,0.6069688762570586,0.01630057162432958,0.24288677062973696,0.13723157678601872,0.8041767542269904,0.15667908925408455,0.4009443942461835,0.12979044678145574,0.10880880202576929,0.998924518003559,0.21825690531090688,0.5129323944043984,0.8391122346926072,0.6126398325956612,0.29603161769734304,0.6375522677030192,0.5242871900667843,0.493582986990727,0.9727750238835695,0.29251678441302703,0.7713576977939148,0.5267449792133388,0.7699138362751873,0.4002286220901779,0.8915294520051822,0.2833147460051415,0.3524583472648907,0.8077245200088827,0.9190264739650424,0.06975527623191256,0.9493270753646861,0.5259953502221011,0.08605584785624214,0.19221384599442307,0.6632269270081198,0.8902326025488938,0.3488929352485076,0.06417132078864207,0.02002304886468828,0.4577017372742769,0.06309583832653977,0.23827995417559517,0.9706341316786754,0.9022080734848082,0.8509197867712563,0.2666657493760184,0.5397603407221662,0.3752069763723793,0.7602487363667454,0.5125353641400744,0.6677237607854063,0.5316064341606602,0.039280343353413204,0.4376375965949323,0.9318350562508382,0.9308097953585953,0.7209523430657351,0.28429340305006756,0.7385343149018168,0.6399788165651163,0.3540486797476414,0.687861390266503,0.16597416632155615,0.4401045276038835,0.880075236260926,0.829201093329676,0.3303371296871161,0.22896817104377232,0.8933724145839793,0.35036017855180435,0.6866699083180492,0.9564682529105192,0.5886401331930609,0.6573040395310633,0.8586763259296661,0.4395599194986559,0.9239697889070817,0.39843666665183225,0.8147668963366965,0.6842185252738271,0.9109720307919067,0.4824906566564416,0.21582495896882609,0.9502523741453198,0.9201282537170352,0.14766001475400292,0.8810621695039152,0.641080596317109,0.43195341826973177,0.6195964839400707,0.281059412416564,0.7860020980173732,0.3074578737409124,0.44703357920378145,0.22610662515559543,0.18753310953617705,0.27623467206779617,0.5564437553083728,0.4165012805799494,0.16960708618611428,0.9068039338601771,0.10317118843233734,0.1260753390966334,0.49544406658757667,0.7604752284290619,0.9847516650262995,0.9350039865518939,0.6844450168704823,0.3831883312124705,0.7497708824229291,0.36866354167864823,0.2941603620043771,0.2322615386137094,0.5844885006474743,0.24441273568403568,0.15238979186508328,0.7321485158671385,0.12547490472228962,0.7934703881821923,0.164101933671209,0.7450713891280216,0.07452980059875632,0.9501040316885822,0.05252926240327268,0.5215633798025378,0.1762106563785163,0.24006237240511102,0.797798051870334,0.732654411686889,0.6565636529850605,0.9674051385221095,0.6394583455470663,0.7597348418830591,0.09348047715308166,0.13490241166898162,0.5202100698464597,0.07823214171371988,0.06990639775521419,0.2046550862512808,0.4614204733918516,0.8196772801781433,0.5733186283955903,0.7555808353962288,0.05193881879185271,0.1578071285774033,0.9999935710802644,0.204328610656936,0.8899556444445419,0.12546847580255405,0.9977989993047895,0.054057577650089554,0.8705398649305757,0.07232879943788462,0.004161608873010431,0.9230691273338484,0.5938921792404224,0.180372265717188,0.16313149927329806,0.3916902306450951,0.9130266774040771,0.8196951527240198,0.35909536870154335,0.552485022485482,0.5794299941414176,0.452575845854625,0.687387434620125,0.09964006352221597,0.5308079880340062,0.7572938323753392,0.30429514977349675,0.9922284614258579,0.5769711125534824,0.877613778169087,0.7478092963564253,0.6289099313453351,0.03542090674649035,0.7478028669710285,0.8332385420022712,0.9253765511910322,0.8732713427735824,0.8310375408413995],100,2)
1388         srcFieldValsOnPoints=DataArrayDouble([0.7643742528498438,-0.023507696856211995,1.1082895131907775,0.6299357452572031,0.8892623544912389,0.72212114810697,0.9196401044320336,-0.759961711221917,0.40801932617748826,0.8441134300809151,0.982483804252809,0.6752368914020778,0.9924403977479798,1.1063334970204484,0.9403055261137516,0.3624481886322733,1.1344772505996308,0.7522965618948239,0.17077741651388564,0.6504551671311436,0.45843479588425423,0.41098905950326753,1.0681420394050904,-0.3483587903820091,0.5620151050607809,1.384969776596035,0.7948875141132845,0.7931192000237167,1.062498042490183,1.3709072529577366,0.44929346605311893,-0.4469683401788374,0.9035857424514101,0.6137249300593463,0.6355610879026966,1.4318174829507697,0.3097567072129551,-0.20515052260807165,0.6922559820922779,1.0341638749443423,1.3072652153341024,0.38511367353000436,0.9160514929274943,0.54513408530581,0.722252267913328,0.06684522818576251,0.10571899758067793,0.3193844999960903,0.5213532270828706,-0.04834998649603944,1.2408805068350615,-0.7632951295676795,0.5980054665011202,0.9064738717547436,1.1541070755096696,1.008234260272265,1.2225806960553827,1.0788560195121106,0.9818990282104452,0.5621951325841853,1.0796757508374188,0.5082872315589883,-0.9153702001062469,0.9560418838920791,0.9251098559152824,1.1603063610984021,1.2122303611181837,0.7379539363312343,0.6877611899207183,0.723966552446608,0.5596025827162566,0.8849725005989729,1.0908363665075547,0.08956512916455672,-0.10247645571248344,0.3236718069555875,1.069478546398975,1.3900071080692746,1.0322398863403262,0.45315515354558034,0.4249870238786733,1.030226761858634,0.974024629584669,1.2838885424020365,1.3451943506525155,1.4029933267831995,0.6025539675442462,1.2947650597767038,1.0006061239483002,-0.4017336259949164,0.8771165113201297,0.9158909024218246,1.403798605551443,0.4742904006425974,0.3671787905896653,0.20646491720419674,0.40739337434288925,0.7341932402033597,-0.4295893651836911,-0.3187777570661546],100,1)
1389         targetPointCoordsXY=DataArrayDouble([-0.5,-0.5,-0.5,-0.35,-0.5,-0.2,-0.5,-0.05,-0.5,0.1,-0.5,0.25,-0.5,0.4,-0.5,0.55,-0.5,0.7,-0.5,0.85,-0.5,1.0,-0.5,1.15,-0.5,1.3,-0.5,1.45,-0.35,-0.5,-0.35,-0.35,-0.35,-0.2,-0.35,-0.05,-0.35,0.1,-0.35,0.25,-0.35,0.4,-0.35,0.55,-0.35,0.7,-0.35,0.85,-0.35,1.0,-0.35,1.15,-0.35,1.3,-0.35,1.45,-0.2,-0.5,-0.2,-0.35,-0.2,-0.2,-0.2,-0.05,-0.2,0.1,-0.2,0.25,-0.2,0.4,-0.2,0.55,-0.2,0.7,-0.2,0.85,-0.2,1.0,-0.2,1.15,-0.2,1.3,-0.2,1.45,-0.05,-0.5,-0.05,-0.35,-0.05,-0.2,-0.05,-0.05,-0.05,0.1,-0.05,0.25,-0.05,0.4,-0.05,0.55,-0.05,0.7,-0.05,0.85,-0.05,1.0,-0.05,1.15,-0.05,1.3,-0.05,1.45,0.1,-0.5,0.1,-0.35,0.1,-0.2,0.1,-0.05,0.1,0.1,0.1,0.25,0.1,0.4,0.1,0.55,0.1,0.7,0.1,0.85,0.1,1.0,0.1,1.15,0.1,1.3,0.1,1.45,0.25,-0.5,0.25,-0.35,0.25,-0.2,0.25,-0.05,0.25,0.1,0.25,0.25,0.25,0.4,0.25,0.55,0.25,0.7,0.25,0.85,0.25,1.0,0.25,1.15,0.25,1.3,0.25,1.45,0.4,-0.5,0.4,-0.35,0.4,-0.2,0.4,-0.05,0.4,0.1,0.4,0.25,0.4,0.4,0.4,0.55,0.4,0.7,0.4,0.85,0.4,1.0,0.4,1.15,0.4,1.3,0.4,1.45,0.55,-0.5,0.55,-0.35,0.55,-0.2,0.55,-0.05,0.55,0.1,0.55,0.25,0.55,0.4,0.55,0.55,0.55,0.7,0.55,0.85,0.55,1.0,0.55,1.15,0.55,1.3,0.55,1.45,0.7,-0.5,0.7,-0.35,0.7,-0.2,0.7,-0.05,0.7,0.1,0.7,0.25,0.7,0.4,0.7,0.55,0.7,0.7,0.7,0.85,0.7,1.0,0.7,1.15,0.7,1.3,0.7,1.45,0.85,-0.5,0.85,-0.35,0.85,-0.2,0.85,-0.05,0.85,0.1,0.85,0.25,0.85,0.4,0.85,0.55,0.85,0.7,0.85,0.85,0.85,1.0,0.85,1.15,0.85,1.3,0.85,1.45,1.0,-0.5,1.0,-0.35,1.0,-0.2,1.0,-0.05,1.0,0.1,1.0,0.25,1.0,0.4,1.0,0.55,1.0,0.7,1.0,0.85,1.0,1.0,1.0,1.15,1.0,1.3,1.0,1.45,1.15,-0.5,1.15,-0.35,1.15,-0.2,1.15,-0.05,1.15,0.1,1.15,0.25,1.15,0.4,1.15,0.55,1.15,0.7,1.15,0.85,1.15,1.0,1.15,1.15,1.15,1.3,1.15,1.45,1.3,-0.5,1.3,-0.35,1.3,-0.2,1.3,-0.05,1.3,0.1,1.3,0.25,1.3,0.4,1.3,0.55,1.3,0.7,1.3,0.85,1.3,1.0,1.3,1.15,1.3,1.3,1.3,1.45,1.45,-0.5,1.45,-0.35,1.45,-0.2,1.45,-0.05,1.45,0.1,1.45,0.25,1.45,0.4,1.45,0.55,1.45,0.7,1.45,0.85,1.45,1.0,1.45,1.15,1.45,1.3,1.45,1.45],196,2)
1390         targetFieldValsExpected=DataArrayDouble([1.645976003316459, 1.454458180060204, 1.286087532859835, 1.147305389930914, 1.040143042030752, 0.9592075185603157, 0.8932542207607532, 0.8296417057622609, 0.7572539678257579, 0.6669048311361028, 0.551329882743212, 0.4064445075734602, 0.2323703965460786, 0.03253142054561309, 1.615321686989539, 1.414941300553572, 1.238383118538708, 1.096701655702075, 0.9955792747382535, 0.9271194507282707, 0.8741000712825546, 0.8201879508155141, 0.7537335933761495, 0.6656210809234322, 0.5470285414729397, 0.3927301586610237, 0.2044036897887453, -0.01181672742825013, 1.609602552867195, 1.400625195269133, 1.213287847440801, 1.065318574929208, 0.9717609562002842, 0.9182626517777217, 0.8760698972315855, 0.8258196104516153, 0.7586487405165288, 0.6686168424854784, 0.5434121624038266, 0.3741815029337978, 0.1661376046619205, -0.0704038088420833, 1.635421686625182, 1.422642113482769, 1.225977424080963, 1.066864693789366, 0.9864801043792362, 0.9486639217909161, 0.9075176697327381, 0.8471248730261529, 0.7660983406349626, 0.6675300501188994, 0.5320013361909732, 0.3404583135353376, 0.1074346390951333, -0.1520751802856468, 1.695346918429566, 1.489526279573347, 1.297678617961701, 1.139921240332637, 1.080508463804929, 1.036847769764088, 0.9687840669352359, 0.8790397822170175, 0.76938768351059, 0.6441978169925557, 0.4915328571013788, 0.2742929463574293, 0.0148214290833748, -0.2671755287427691, 1.782761788232491, 1.59423004798623, 1.422317125787222, 1.286999529473285, 1.20500638941831, 1.127058114031519, 1.022332539190471, 0.8945753999401338, 0.7469190939381181, 0.582396906110898, 0.4015920181411496, 0.1584700483835366, -0.1251860255418387, -0.4254052799545267, 1.881794862747652, 1.712890309994015, 1.557517508390291, 1.422727414977963, 1.308048056353061, 1.187569766723152, 1.03942150436647, 0.8677583087532357, 0.6766652050643343, 0.4703897480238999, 0.2497994532908829, -0.02005989176786582, -0.3224387891441491, -0.6331519303649853, 1.973114284621266, 1.820187301531605, 1.673403730111759, 1.528504440482262, 1.379693463484634, 1.207642134784147, 1.008217764780293, 0.7863328498822348, 0.5465383049529959, 0.2944879513187435, 0.03250657765404452, -0.2670900851421072, -0.5806516907976924, -0.8911331026431459, 2.038729888975378, 1.895652364645637, 1.751759791756183, 1.594035761810714, 1.403016809171641, 1.171403152610878, 0.913267035125007, 0.6343281031932027, 0.3434843176189371, 0.04195410032095204, -0.2645533663891493, -0.58577400250975, -0.8958218846257981, -1.192230697656513, 2.064018033720731, 1.922048791644444, 1.773847180028208, 1.600340336378483, 1.361620036333164, 1.060873411411508, 0.7373484802125152, 0.3868966266761109, 0.04316272760227413, -0.3009370030949727, -0.6505233805563486, -0.9669887470696283, -1.250005719852354, -1.519122595631787, 2.039938287785342, 1.887400820799651, 1.722008733683987, 1.523879290022419, 1.23834392230135, 0.8606985727866472, 0.4844892131548788, 0.08077959236877175, -0.3195742594962179, -0.726291368696764, -1.094357645641832, -1.359078900303776, -1.604725656501341, -1.845297168323687, 1.965762248218393, 1.791665198563286, 1.595056719739704, 1.353692777435502, 1.033006623003495, 0.6416349531117889, 0.2290046916364761, -0.1993180965088852, -0.6311618804827295, -1.051489875129883, -1.409404344854132, -1.681249363331096, -1.917859637689007, -2.145034400762945, 1.849053542205925, 1.648479366622312, 1.418493963148431, 1.141939527533839, 0.8042385795619003, 0.4127534639189761, -0.008572116677791453, -0.4428317297963555, -0.8745477268718713, -1.281769237471681, -1.635421857742795, -1.926210204560556, -2.175577364628722, -2.405762639746138, 1.701519686999922, 1.475879908746998, 1.219065416294153, 0.9203732349759972, 0.5740137315474942, 0.1856460506119944, -0.2298288912529738, -0.6558565521653752, -1.075391078040103, -1.469402631469075, -1.820558929095151, -2.123592211415966, -2.388177455227765, -2.628832075944413])
1391         coeffsExpected=DataArrayDouble([0.3953237723894342,-0.17220705170185724,0.620727139132215,-0.01938292763088709,-0.007524685306185282,0.0016277944443884584,-0.0005209587893117361,-1.8992696595839718,-0.13154330748345855,0.11248800965389728,-0.47310750305033406,0.03685741122098605,0.21362468750754374,0.8082608687799991,-0.6775548200221704,-0.027683208482275873,-0.007806877014495724,-0.013539239795959668,0.3478535665778018,0.005145793726360813,0.03708618549628136,-0.18235332489209385,-0.04517273339177797,-0.081755114492025,0.12791746560435255,0.09659355695676189,-0.024809653129318366,0.08327587452569823,-1.790380673650165,-0.10622983512164165,0.14989029282340274,0.05949513762355707,0.004548072841131278,0.011252095917834793,-0.004848057194721367,-0.2658537133108412,0.016651579133606154,-0.021640915366981317,0.008975511042160175,-0.021052213988815974,-0.09347841701844657,0.03533229488135717,-0.014556185287109863,-0.27228591670520086,0.002989987191209683,-0.5489428537951813,-0.02134456783001304,-0.22462281620064825,0.005230853443767429,-0.1894678262257301,0.0033140729457334884,5.295483062326795,-0.2724500716060311,0.026433905662192683,0.01368706308878908,-0.03014264855048227,0.053679001877659956,0.08109477254132096,-0.005004603067203444,0.016907143132293558,0.2105509502082437,0.003657404455024417,-4.904755847017426,0.01634808163992959,-0.008325515865305198,0.062188432751569676,-0.013114633511406406,0.11020519384963083,-0.008599402366091309,-0.012125149710784723,0.31723729052927313,-0.10298398036815914,-0.07250078775612204,0.39976713701763433,0.45897498107347223,0.01018626210400031,0.20163425809089347,0.19729093298588943,0.42863333455911523,0.015595097081693168,0.06060353651437489,-0.16379444813161725,-0.43290344196574165,-0.5931022701412187,1.1906610004748832,0.44418106894148945,0.06536220001548931,0.010261694323554562,-0.05943099382075491,-0.04939614579484797,0.002234505477641322,-0.011262130967449935,0.09644905007708474,-0.029518792883267808,0.41564004027396634,-0.18459770295961597,0.3100981306103734,-0.2509873737065425,0.5434321443668653,0.3009912967350914,1.9560655796099518,-0.7143435150084513,-1.5123449469879784])
1392         #
1393         nbOfInputPoints=100;
1394         f=MEDCouplingFieldDouble.New(ON_NODES_KR,ONE_TIME);
1395         mesh=MEDCoupling1SGTUMesh.New("aMesh",NORM_POINT1);
1396         mesh.setCoords(srcPointCoordsXY);
1397         f.setMesh(mesh);
1398         f.setArray(srcFieldValsOnPoints);
1399         f.checkConsistencyLight();
1400         #
1401         res0=f.getValueOn([-0.5,-0.5]);
1402         self.assertAlmostEqual(targetFieldValsExpected.getIJ(0,0),res0[0],10)
1403         #
1404         valuesToTest=f.getValueOnMulti(targetPointCoordsXY);
1405         self.assertEqual(196,valuesToTest.getNumberOfTuples());
1406         self.assertEqual(1,valuesToTest.getNumberOfComponents());
1407         for i in range(40):
1408             self.assertAlmostEqual(targetFieldValsExpected[i],valuesToTest.getIJ(i,0),10)
1409             pass
1410         fd=f.getDiscretization()
1411         del f
1412         self.assertTrue(isinstance(fd,MEDCouplingFieldDiscretizationKriging))
1413         coeffs,isDrift=fd.computeVectorOfCoefficients(mesh,srcFieldValsOnPoints)
1414         self.assertEqual(3,isDrift)
1415         self.assertTrue(coeffsExpected.isEqual(coeffs,1e-8))
1416         # testing matrix
1417         pts3=[-0.5,-0.5,-0.5,-0.35,-0.35,-0.2]
1418         mesh.setCoords(srcPointCoordsXY[:4])
1419         m,nbCols=fd.computeEvaluationMatrixOnGivenPts(mesh,pts3)
1420         self.assertTrue(m.isEqual(DataArrayDouble([0.05768877688524917,-4.438982030395039,1.9495386255911573,3.431754627918642,0.11803848510231275,-4.138339658420563,1.6630742187104417,3.357226954607818,0.14630203028580618,-3.5156045565871734,1.414680070737206,2.954622455564169]),1e-12))
1421         if MEDCouplingHasNumPyBindings():
1422             import numpy as np
1423             m0=m.toNumPyArray() ; m0=m0.reshape(3,nbCols) ; m0=np.matrix(m0)
1424             srcFieldValsOnPoints2=DataArrayDouble(4,2) ; srcFieldValsOnPoints2[:,0]=srcFieldValsOnPoints[:4] ; srcFieldValsOnPoints2[:,1]=2*srcFieldValsOnPoints[:4]
1425             n0=srcFieldValsOnPoints2.toNumPyArray() ; n0=n0.reshape(4,2) ; n0=np.matrix(n0)
1426             #
1427             f=MEDCouplingFieldDouble.New(ON_NODES_KR,ONE_TIME) ;  f.setMesh(mesh) ; f.setArray(srcFieldValsOnPoints2) ; f.checkConsistencyLight()
1428             self.assertTrue(DataArrayDouble(np.array((m0*n0))).isEqual(f.getValueOnMulti(pts3),1e-14))
1429             pass
1430         #
1431         pass
1432
1433     # test the when input slice is all the same object is return by MEDCouplingMesh.buildPartRange
1434     def testSwig2MeshPartSlice1(self):
1435         a=DataArrayDouble(4) ; a.iota()
1436         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m=c.buildUnstructured()
1437         fc0=c.getMeasureField(False) ; fc1=fc0[:] ; fc2=fc0*fc1 ; fc2.setName(fc0.getName())
1438         self.assertEqual(fc0.getMesh().getHiddenCppPointer(),fc1.getMesh().getHiddenCppPointer())
1439         self.assertEqual(fc2.getMesh().getHiddenCppPointer(),fc1.getMesh().getHiddenCppPointer())
1440         self.assertTrue(fc2.isEqual(fc1,1e-12,1e-12))
1441         #
1442         fm0=m.getMeasureField(False) ; fm1=fm0[:] ; fm2=fm0*fm1 ; fm2.setName(fm0.getName())
1443         self.assertEqual(fm0.getMesh().getHiddenCppPointer(),fm1.getMesh().getHiddenCppPointer())
1444         self.assertEqual(fm2.getMesh().getHiddenCppPointer(),fm1.getMesh().getHiddenCppPointer())
1445         self.assertTrue(fm2.isEqual(fm1,1e-12,1e-12))
1446         pass
1447
1448     # test the correct behaviour when attempting to aggregate two fields whose mesh is null
1449     def testSwig2MergeFieldsOnFieldsHavingNoMesh(self):
1450         a=DataArrayDouble(4) ; a.iota() ; a*=1.5
1451         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; f1=c.getMeasureField(False)
1452         f1.setMesh(None) ; f2=f1.deepCopy() ; f2*=2
1453         f3=MEDCouplingFieldDouble.MergeFields(f1,f2)
1454         daExp=DataArrayDouble([2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5])
1455         self.assertTrue(f3.getArray().isEqual(daExp,1e-12))
1456         self.assertEqual(f3.getTypeOfField(),ON_CELLS)
1457         self.assertEqual(f3.getMesh(),None)
1458         f4=MEDCouplingFieldDouble.MergeFields([f1,f2])
1459         self.assertTrue(f4.getArray().isEqual(daExp,1e-12))
1460         self.assertEqual(f4.getTypeOfField(),ON_CELLS)
1461         self.assertEqual(f4.getMesh(),None)
1462         pass
1463
1464     # test a simple node to cell conversion of a field
1465     def testSwig2NodeToCellDiscretization1(self):
1466         f=MEDCouplingFieldDouble(ON_NODES) ; f.setTime(1.1,2,3)
1467         a1=DataArrayDouble(4) ; a1.iota()
1468         a2=DataArrayDouble(3) ; a2.iota()
1469         m=MEDCouplingCMesh() ; m.setCoords(a1,a2)
1470         f.setMesh(m)
1471         arr=DataArrayDouble([21.,121.,20.,120.,19.,119.,18.,118.,17.,117.,16.,116.,15.,115.,14.,114.,13.,113.,12.,112.,11.,111.,10.,110.],12,2) ; arr.setInfoOnComponents(["aa [km]","bbb [kJ]"])
1472         f.setArray(arr) ; f.setName("toto")
1473         #
1474         f2=f.nodeToCellDiscretization()
1475         self.assertEqual(ON_CELLS,f2.getTypeOfField())
1476         self.assertEqual("toto",f2.getName())
1477         self.assertEqual([1.1,2,3],f2.getTime())
1478         self.assertEqual(["aa [km]","bbb [kJ]"],f2.getArray().getInfoOnComponents())
1479         self.assertEqual(6,f2.getArray().getNumberOfTuples())
1480         self.assertEqual(f.getMesh().getHiddenCppPointer(),f2.getMesh().getHiddenCppPointer())
1481         exp=DataArrayDouble([18.5,118.5,17.5,117.5,16.5,116.5,14.5,114.5,13.5,113.5,12.5,112.5],6,2) ; exp.setInfoOnComponents(["aa [km]","bbb [kJ]"])
1482         self.assertTrue(f2.getArray().isEqual(exp,1e-13))
1483         pass
1484
1485     def testSwig2MeshOrientCorrectly2DCells1(self):
1486         m=MEDCouplingUMesh("mesh",2)
1487         coo=DataArrayDouble([1.,0.,0.5,-0.1,0.,1.,0.,0.,0.07,0.5,0.59,0.5],6,2)
1488         m.setCoords(coo)
1489         m.allocateCells()
1490         m.insertNextCell(NORM_TRI6,[3,0,2,1,5,4])
1491         m.insertNextCell(NORM_QPOLYG,[3,0,2,1,5,4])
1492         self.assertTrue(DataArrayDouble([-0.58093333350930543,-0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1493         m.changeSpaceDimension(3)
1494         m.orientCorrectly2DCells([0.,0.,-1.],False)
1495         #
1496         m.checkConsistencyLight()
1497         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([6,3,2,0,4,5,1, 32,3,2,0,4,5,1])))
1498         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14])))
1499         m.changeSpaceDimension(2)
1500         self.assertTrue(DataArrayDouble([0.58093333350930543,0.58093333350930543]).isEqual(m.getMeasureField(False).getArray(),1e-12))
1501         pass
1502
1503     def testSwig2Hexa8HavingFacesWarped1(self):
1504         """ This test is bases on a "error" of interpolation detected. After investigation cell #3 of src is warped that leads to the fact that when trg is
1505         intersected with src the sum of intersection volume is greater than the volume of the trg cell.
1506         A test that can be done is to split the cell #3 of src into tetrohedrons and by summing all the volumes it does not fit the volume computed of cell#3 unsplitted (expect for
1507         GENERAL_24).
1508         """
1509         srcCoo=DataArrayDouble([0.15694071546650565,0.09383333333333337,6.920842121738133,0.15774332475430292,0.185486666666667,6.920682472824616,0.1585459340420992,0.27713999999999994,6.9205228239111,0.07427195882345167,0.05782666666666668,6.937285959830335,0.06343673343819695,0.11347333333333297,6.939441220162809,0.05260150805294228,0.16911999999999996,6.941596480495282,0.014076262238703396,0.04800666666666667,6.949259628344076,0.014076262238703396,0.07092000000000007,6.949259628344076,0.15407499632681992,0.09383333333333338,6.897607484780063,0.15489234394181514,0.18548666666666702,6.897567331066572,0.15570969155680933,0.27714,6.897527177353081,0.06988819198237989,0.05782666666666669,6.901743317269663,0.05885399917995321,0.11347333333333298,6.9022853924017955,0.047819806377526586,0.16912,6.902827467533927,0.0085871208577874,0.048006666666666684,6.9047548457815076,0.0085871208577874,0.07092000000000008,6.9047548457815076,0.153883333333333,0.09383333333333338,6.820902,0.154701666666667,0.18548666666666702,6.820902,0.15551999999999996,0.27714,6.820902,0.06959499999999999,0.05782666666666669,6.820902,0.058547499999999975,0.11347333333333298,6.820902,0.04749999999999999,0.16912,6.820902],22,3)
1510         src=MEDCouplingUMesh("TBmesh3D",3) ; src.setCoords(srcCoo)
1511         src.allocateCells()
1512         src.insertNextCell(NORM_HEXA8,[0,1,4,3,8,9,12,11])
1513         src.insertNextCell(NORM_HEXA8,[1,2,5,4,9,10,13,12])
1514         src.insertNextCell(NORM_HEXA8,[4,5,7,6,12,13,15,14])
1515         src.insertNextCell(NORM_HEXA8,[8,9,12,11,16,17,20,19])
1516         src.insertNextCell(NORM_HEXA8,[9,10,13,12,17,18,21,20])
1517         src.checkConsistency()
1518         # trg is useless here but I keep it in case of MEDCouplingRemapper were expected to do something about warped NORM_HEXA8
1519         trgCoo=DataArrayDouble([0.0960891897852753,0.105088620541845,6.8598,0.0599574480546212,0.118434267436059,6.8598,0.113514510609589,0.14874473653263,6.8598,0.0831322609794463,0.167319109733883,6.8598,0.0960891897852753,0.105088620541845,6.92146666666667,0.0599574480546212,0.118434267436059,6.92146666666667,0.113514510609589,0.14874473653263,6.92146666666667,0.0831322609794463,0.167319109733883,6.92146666666667],8,3)
1520         trg=MEDCouplingUMesh("MESH",3) ; trg.setCoords(trgCoo)
1521         trg.allocateCells()
1522         trg.insertNextCell(NORM_HEXA8,[0,1,3,2,4,5,7,6])
1523         #
1524         srcFace=src.buildDescendingConnectivity()[0]
1525         conn=MEDCoupling1SGTUMesh(srcFace).getNodalConnectivity() ; conn.rearrange(4)
1526         eqFaces=srcFace.computePlaneEquationOf3DFaces()
1527         nodeIdInCell=3
1528         e=(srcFace.getCoords()[conn[:,nodeIdInCell]]*eqFaces[:,:-1]).sumPerTuple()+eqFaces[:,3]# e represent the error between the expected 'a*X+b*Y+c*Z+d' in eqFaces and 0. Closer e to 0. is closer the 4th point is to the plane built with the 3 first points
1529         lambd=-e/(eqFaces[:,:3]**2).sumPerTuple()
1530         pts=lambd*eqFaces[:,:-1]+srcFace.getCoords()[conn[:,nodeIdInCell]]#pts represent the projection of the last points of each NORM_QUAD4 to the plane defined by the 3 first points of the NORM_QUAD4 cell
1531         shouldBeZero=(pts*eqFaces[:,:-1]).sumPerTuple()+eqFaces[:,3]# this line is useless only to be sure that pts are on the plane.
1532         check=(pts-srcFace.getCoords()[conn[:,nodeIdInCell]]).magnitude() # check contains the distance of the last point to its plane
1533         idsToTest=check.findIdsNotInRange(0.,1e-10)
1534         self.assertTrue(idsToTest.isEqual(DataArrayInt([17,18,19,20,22,23,24])))
1535         idsToTest2=idsToTest.findIdsNotInRange(18,22)
1536         self.assertTrue(idsToTest2.isEqual(DataArrayInt([0,4,5,6])))
1537         idsToTest2.rearrange(2)
1538         self.assertTrue(idsToTest2.sumPerTuple().isEqual(DataArrayInt([4,11])))
1539         pass
1540
1541     def testSwig2SortHexa8EachOther1(self):
1542         """
1543         testing MEDCoupling1SGTUMesh.sortHexa8EachOther method
1544         """
1545         coords1=DataArrayDouble([(-0.5,0.5,-0.5),(0.5,-0.5,-0.5),(-0.5,-0.5,0.5),(-0.5,-0.5,-0.5),(0.5,-0.5,0.5),(-0.5,0.5,0.5),(0.5,0.5,0.5),(0.5,0.5,-0.5)])
1546         m1=MEDCouplingUMesh("m1",3) ; m1.setCoords(coords1)
1547         m1.allocateCells() ; m1.insertNextCell(NORM_HEXA8,[7,1,3,0,6,4,2,5])
1548         m1.checkConsistencyLight()
1549         #
1550         m2=m1.deepCopy() ; m2.setName("m2")
1551         #
1552         trs=[[0.,0.,-1.],[0.,0.,1.],[1.,0.,0.],[0.,-1.,0.],[-1.,0.,0.],[0.,1.,0.]]
1553         for i,t in enumerate(trs):
1554             for j in range(64):
1555                 j2=(j//16) ; j1=((j%16)//4) ; j0=(j%4)
1556                 m11=m1.deepCopy()
1557                 m11.rotate([0.,0.,0.],[0.,0.,1.],float(j0)*pi/2)
1558                 m11.rotate([0.,0.,0.],[0.,1.,0.],float(j1)*pi/2)
1559                 m11.rotate([0.,0.,0.],[1.,0.,0.],float(j2)*pi/2)
1560                 m11.translate(t)
1561                 #
1562                 m=MEDCouplingUMesh.MergeUMeshes(m2,m11)
1563                 m.mergeNodes(1e-12)
1564                 self.assertEqual(12,m.getNumberOfNodes())
1565                 m=MEDCoupling1SGTUMesh(m)
1566                 m.sortHexa8EachOther()
1567                 tmp0=m.buildUnstructured().tetrahedrize(PLANAR_FACE_6)[0].buildUnstructured()
1568                 self.assertEqual(20,tmp0.computeSkin().getNumberOfCells())
1569                 pass
1570             pass
1571         pass
1572
1573     def testSwig2normMinComputeAbs1(self):
1574         d=DataArrayDouble([4,-5,2,6.1,-7.33,1,-1,3e2,0.07,-0.009,-6,-1e30],4,3)
1575         d.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1576         d0=d.computeAbs()
1577         dExp=d.deepCopy() ; dExp.abs()
1578         self.assertTrue(dExp.isEqual(d0,1e-12))
1579         e=d0-DataArrayDouble([4,5,2,6.1,7.33,1,1,3e2,0.07,0.009,6,1e30],4,3)
1580         self.assertAlmostEqual(0.,e.normMin(),13)
1581         self.assertAlmostEqual(0.009,d.normMin(),13)
1582         #
1583         di=DataArrayInt([3,-12,5,6,14,16,-23,100,23,-1,0,-6],4,3)
1584         di.setInfoOnComponents(["XX [m]","YYY [km]","ABSJJ [MW]"])
1585         d0i=di.computeAbs()
1586         diExp=di.deepCopy() ; diExp.abs()
1587         self.assertTrue(diExp.isEqual(d0i))
1588         self.assertEqual([3,12,5,6,14,16,23,100,23,1,0,6],d0i.getValues())
1589         pass
1590
1591     def testSwig2GetCellsContainingPointsForNonConvexPolygon1(self):
1592         coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,0.,-0.5,0.,0.,0.5,0.,],7,2)
1593         m=MEDCouplingUMesh("Intersect2D",2) ; m.setCoords(coo) ; m.allocateCells()
1594         m.insertNextCell(NORM_POLYGON,[6,3,4,5])
1595         m.insertNextCell(NORM_POLYGON,[4,0,1,2,6,5])
1596         m.checkConsistency()
1597         #
1598         self.assertTrue(m.getCellsContainingPoint((0.4,-0.4),1e-12).isEqual(DataArrayInt([0])))
1599         self.assertTrue(m.getCellsContainingPoint((-0.4,-0.4),1e-12).isEqual(DataArrayInt([1])))
1600         self.assertTrue(m.getCellsContainingPoint((0.,-0.4),1e-12).isEqual(DataArrayInt([0,1])))
1601         pass
1602
1603     def testSwig2GetCellsContainingPointsForNonConvexPolygon2(self):
1604         coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,-2.0816681711721685e-17,-2.0816681711721685e-17,-0.17677669529663687,0.1767766952966369,0.,0.5,0.5,0.,0.17677669529663684,-0.17677669529663692,0.17677669529663692,0.17677669529663684,-0.17677669529663692,-0.17677669529663687,0.,-0.5,-0.5,0.,0.33838834764831843,-0.3383883476483185,-0.33838834764831843,0.33838834764831843,-0.21213203435596423,0.21213203435596426,0.2121320343559642,-0.2121320343559643,0.21213203435596426,0.2121320343559642,-0.21213203435596423,-0.21213203435596428,0.3560660171779821,-0.35606601717798214,-0.35606601717798214,0.35606601717798214,0.19445436482630052,-0.19445436482630063,-0.19445436482630055,0.19445436482630057,0.,0.27],24,2)
1605         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1606         m.insertNextCell(NORM_QPOLYG,[8,5,4,9])
1607         m.insertNextCell(NORM_QPOLYG,[5,8,4,10])
1608         m.insertNextCell(NORM_QPOLYG,[16,8,5,15,21,9,22,17])
1609         m.insertNextCell(NORM_QPOLYG,[15,1,2,3,16,20,6,7,19,17])
1610         m.insertNextCell(NORM_QPOLYG,[15,5,8,16,22,10,21,18])
1611         m.insertNextCell(NORM_QPOLYG,[16,3,0,1,15,19,11,12,20,18])
1612         m.checkConsistency()
1613         self.assertTrue(m.getCellsContainingPoint([0.,0.27],1e-12).isEqual(DataArrayInt([2])))
1614         pass
1615
1616     def testSwig2DAIGetIdsEqualTuple1(self):
1617         da=DataArrayInt([0,7,1,2,4,1,2,1,1,2,0,1,2,1,5,1,1,2],9,2)
1618         self.assertTrue(da.findIdsEqualTuple([1,2]).isEqual(DataArrayInt([1,4,8])))
1619         self.assertTrue(da.findIdsEqualTuple((1,2)).isEqual(DataArrayInt([1,4,8])))
1620         self.assertTrue(da.findIdsEqualTuple(DataArrayInt([1,2])).isEqual(DataArrayInt([1,4,8])))
1621         da.rearrange(3)
1622         self.assertRaises(InterpKernelException,da.findIdsEqualTuple,[1,2])# mismatch nb of compo (3) and nb of elts in input tuple (2)
1623         self.assertTrue(da.findIdsEqualTuple([2,0,1]).isEqual(DataArrayInt([3])))
1624         self.assertTrue(da.findIdsEqualTuple([2,0,7]).isEqual(DataArrayInt([])))
1625         da.rearrange(1)
1626         self.assertTrue(da.findIdsEqualTuple(2).isEqual(DataArrayInt([3,6,9,12,17])))
1627         self.assertTrue(da.findIdsEqualTuple(2).isEqual(da.findIdsEqual(2)))
1628         pass
1629
1630     def testSwig2GaussNEStaticInfo1(self):
1631         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetWeightArrayFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.16666666666666666]),1e-12))
1632         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetRefCoordsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.,0.,1.,0.,0.,1.]),1e-12))
1633         self.assertTrue(DataArrayDouble(MEDCouplingFieldDiscretizationGaussNE.GetLocsFromGeometricType(NORM_TRI3)).isEqual(DataArrayDouble([0.16666666666666666,0.16666666666666666,0.6666666666666667,0.16666666666666666,0.16666666666666666,0.6666666666666667]),1e-12))
1634         pass
1635
1636     def testSwigReverseNodalConnOnStructuredMesh(self):
1637         # 1D - standard
1638         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
1639         c.setCoordsAt(0,arr)
1640         rn,rni=c.getReverseNodalConnectivity()
1641         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1642         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1643         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1644         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1645         # 1D - limit
1646         c=MEDCouplingCMesh() ; arr=DataArrayDouble(1) ; arr.iota()
1647         c.setCoordsAt(0,arr)
1648         rn,rni=c.getReverseNodalConnectivity()
1649         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1650         self.assertTrue(rn.isEqual(DataArrayInt([0])))
1651         self.assertTrue(rni.isEqual(DataArrayInt([0,1])))
1652         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1653         # 1D - limit
1654         c=MEDCouplingCMesh() ; arr=DataArrayDouble(0) ; arr.iota()
1655         c.setCoordsAt(0,arr)
1656         rn,rni=c.getReverseNodalConnectivity()
1657         rn.isEqual(DataArrayInt([]))
1658         rni.isEqual(DataArrayInt([0]))
1659         # 2D - standard
1660         c=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; arr2=DataArrayDouble(4) ; arr.iota()
1661         c.setCoords(arr,arr2)
1662         rn,rni=c.getReverseNodalConnectivity()
1663         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1664         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,0,4,0,1,4,5,1,2,5,6,2,3,6,7,3,7,4,8,4,5,8,9,5,6,9,10,6,7,10,11,7,11,8,8,9,9,10,10,11,11])))
1665         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,8,10,14,18,22,24,26,30,34,38,40,41,43,45,47,48])))
1666         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1667         # 2D - limit
1668         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1669         c.setCoords(arr,arr2)
1670         rn,rni=c.getReverseNodalConnectivity()
1671         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1672         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1673         # 2D - limit
1674         c=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota() ; arr2=DataArrayDouble(1) ; arr.iota()
1675         c.setCoords(arr2,arr)
1676         rn,rni=c.getReverseNodalConnectivity()
1677         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8])))
1678         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,9,11,13,15,17,18])))
1679         # 3D - standard
1680         c=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(3) ; arr1.iota() ; arr2=DataArrayDouble(4) ; arr2.iota()
1681         c.setCoords(arr0,arr1,arr2)
1682         rn,rni=c.getReverseNodalConnectivity()
1683         self.assertTrue(rn.isEqual(DataArrayInt([0,0,1,1,2,2,3,3,0,4,0,1,4,5,1,2,5,6,2,3,6,7,3,7,4,4,5,5,6,6,7,7,0,8,0,1,8,9,1,2,9,10,2,3,10,11,3,11,0,4,8,12,0,1,4,5,8,9,12,13,1,2,5,6,9,10,13,14,2,3,6,7,10,11,14,15,3,7,11,15,4,12,4,5,12,13,5,6,13,14,6,7,14,15,7,15,8,16,8,9,16,17,9,10,17,18,10,11,18,19,11,19,8,12,16,20,8,9,12,13,16,17,20,21,9,10,13,14,17,18,21,22,10,11,14,15,18,19,22,23,11,15,19,23,12,20,12,13,20,21,13,14,21,22,14,15,22,23,15,23,16,16,17,17,18,18,19,19,16,20,16,17,20,21,17,18,21,22,18,19,22,23,19,23,20,20,21,21,22,22,23,23])))
1684         self.assertTrue(rni.isEqual(DataArrayInt([0,1,3,5,7,8,10,14,18,22,24,25,27,29,31,32,34,38,42,46,48,52,60,68,76,80,82,86,90,94,96,98,102,106,110,112,116,124,132,140,144,146,150,154,158,160,161,163,165,167,168,170,174,178,182,184,185,187,189,191,192])))
1685         rn2,rni2=c.buildUnstructured().getReverseNodalConnectivity()
1686         self.assertTrue(rn.isEqual(rn2)) ; self.assertTrue(rni.isEqual(rni2))
1687         pass
1688
1689     def testSwig2CellToNodeDiscretization1(self):
1690         m=MEDCouplingCMesh() ; arr0=DataArrayDouble(5) ; arr0.iota() ; arr1=DataArrayDouble(4) ; arr1.iota() ; m.setCoords(arr0,arr1)
1691         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(m) ; f.setTime(1.1,5,6)
1692         arr=DataArrayDouble(12) ; arr.iota()
1693         arr=DataArrayDouble.Meld(arr,arr+100.) ; arr.setInfoOnComponents(["aaa","bbb"])
1694         f.setArray(arr)
1695         f.checkConsistencyLight()
1696         #
1697         ref=DataArrayDouble([0.,0.5,1.5,2.5,3.,2.,2.5,3.5,4.5,5.,6.,6.5,7.5,8.5,9.,8.,8.5,9.5,10.5,11.])
1698         ref=DataArrayDouble.Meld(ref,ref+100.) ; ref.setInfoOnComponents(["aaa","bbb"])
1699         f2=f.cellToNodeDiscretization()
1700         f2.checkConsistencyLight()
1701         self.assertEqual(f2.getTime()[1:],[5,6])
1702         self.assertAlmostEqual(f2.getTime()[0],1.1,15)
1703         self.assertEqual(f2.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
1704         self.assertTrue(f2.getArray().isEqual(ref,1e-12))
1705         rn,rni=m.getReverseNodalConnectivity()
1706         rni2=(rni.deltaShiftIndex()).convertToDblArr()
1707         arr2=(f.getArray()[rn]).accumulatePerChunck(rni)/rni2
1708         self.assertTrue(f2.getArray().isEqual(arr2,1e-12))
1709         del f2
1710         #
1711         u=m.buildUnstructured() ; f.setMesh(u) ; del m
1712         f3=f.cellToNodeDiscretization()
1713         f3.checkConsistencyLight()
1714         self.assertEqual(f3.getTime()[1:],[5,6])
1715         self.assertAlmostEqual(f3.getTime()[0],1.1,15)
1716         self.assertEqual(f3.getMesh().getHiddenCppPointer(),u.getHiddenCppPointer())
1717         self.assertTrue(f3.getArray().isEqual(ref,1e-12))
1718         pass
1719
1720     def testSwig2GetMeshSpaceDimensionCMesh1(self):
1721         c=MEDCouplingCMesh()
1722         arr0=DataArrayDouble([0,1,2])
1723         arr1=DataArrayDouble([0])
1724         c.setCoords(arr0,arr0,arr0)
1725         self.assertEqual(c.getMeshDimension(),3)
1726         self.assertEqual(c.getSpaceDimension(),3)
1727         #
1728         c.setCoords(arr0,arr0,arr1)
1729         self.assertEqual(c.getMeshDimension(),2)
1730         self.assertEqual(c.getSpaceDimension(),3)
1731         #
1732         c.setCoords(arr0,arr0)
1733         self.assertEqual(c.getMeshDimension(),2)
1734         self.assertEqual(c.getSpaceDimension(),2)
1735         #
1736         c.setCoords(arr0,arr1)
1737         self.assertEqual(c.getMeshDimension(),1)
1738         self.assertEqual(c.getSpaceDimension(),2)
1739         #
1740         c.setCoords(arr0)
1741         self.assertEqual(c.getMeshDimension(),1)
1742         self.assertEqual(c.getSpaceDimension(),1)
1743         #
1744         c.setCoords(arr1)
1745         self.assertEqual(c.getMeshDimension(),0)
1746         self.assertEqual(c.getSpaceDimension(),1)
1747         pass
1748
1749     def testSwig2BuildSpreadZonesWithPolyOnQPolyg1(self):
1750         nx=6
1751         ny=6
1752         m=MEDCouplingCMesh()
1753         arr1=DataArrayDouble(nx) ; arr1.iota()
1754         arr2=DataArrayDouble(ny) ; arr2.iota()
1755         m.setCoords(arr1,arr2)
1756         m=m.buildUnstructured()
1757         da=DataArrayInt.Range(nx-1,(nx-1)*(ny-1),nx)
1758         m2=m[da] ; m2.simplexize(0)
1759         dan=da.buildComplement(m.getNumberOfCells())
1760         m1=m[dan]
1761         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1762         #
1763         m.convertLinearCellsToQuadratic()
1764         m1=m[::2] ; m2=m[1::2] ; m2.convertAllToPoly()
1765         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
1766         p=m.buildSpreadZonesWithPoly()
1767         self.assertTrue(p.getNodalConnectivity().isEqual(DataArrayInt([32,1,0,6,12,18,24,30,31,32,33,34,35,29,23,17,11,5,4,3,2,36,37,94,62,72,83,84,86,89,99,92,93,82,71,60,51,49,46,43,40])))
1768         self.assertTrue(p.getNodalConnectivityIndex().isEqual(DataArrayInt([0,41])))
1769         self.assertTrue(p.getCoords().isEqual(DataArrayDouble([0.,0.,1.,0.,2.,0.,3.,0.,4.,0.,5.,0.,0.,1.,1.,1.,2.,1.,3.,1.,4.,1.,5.,1.,0.,2.,1.,2.,2.,2.,3.,2.,4.,2.,5.,2.,0.,3.,1.,3.,2.,3.,3.,3.,4.,3.,5.,3.,0.,4.,1.,4.,2.,4.,3.,4.,4.,4.,5.,4.,0.,5.,1.,5.,2.,5.,3.,5.,4.,5.,5.,5.,0.5,0.,0.,0.5,0.5,1.,1.,0.5,1.5,0.,1.5,1.,2.,0.5,2.5,0.,2.5,1.,3.,0.5,3.5,0.,3.5,1.,4.,0.5,4.5,0.,4.5,1.,5.,0.5,1.,1.5,1.5,2.,2.,1.5,2.5,2.,3.,1.5,3.5,2.,4.,1.5,4.5,2.,5.,1.5,0.5,2.,0.,2.5,0.5,3.,1.,2.5,2.,2.5,2.5,3.,3.,2.5,3.5,3.,4.,2.5,4.5,3.,5.,2.5,0.,3.5,0.5,4.,1.,3.5,1.5,3.,1.5,4.,2.,3.5,3.,3.5,3.5,4.,4.,3.5,4.5,4.,5.,3.5,0.,4.5,0.5,5.,1.,4.5,1.5,5.,2.,4.5,2.5,4.,2.5,5.,3.,4.5,4.,4.5,4.5,5.,5.,4.5,0.,1.5,0.5,1.5,1.5,2.5,2.5,3.5,3.5,4.5,3.5,5.0],100,2),1e-13))
1770         pass
1771
1772     def testSwigExtendedSlice1(self):
1773         d=DataArrayInt([5,6,7])
1774         self.assertTrue(d[2:].isEqual(DataArrayInt([7])))
1775         self.assertTrue(d[3:].isEqual(DataArrayInt([])))
1776         try:
1777             d[4:]
1778         except InterpKernelException as e:
1779             self.assertTrue(True)
1780         else:
1781             self.assertTrue(False)
1782             pass
1783         d=DataArrayInt([5,6,7,8])
1784         self.assertEqual(d[-1],8)
1785         self.assertEqual(d[-4],5)
1786         try:
1787             d[-5]
1788         except InterpKernelException as e:
1789             self.assertTrue(True)
1790         else:
1791             self.assertTrue(False)
1792             pass
1793         self.assertTrue(d[2::-1].isEqual(DataArrayInt([7,6,5])))
1794         self.assertTrue(d[0::-1].isEqual(DataArrayInt([5])))
1795         self.assertTrue(d[-1::-1].isEqual(DataArrayInt([8,7,6,5])))
1796         self.assertTrue(d[-3::-1].isEqual(DataArrayInt([6,5])))
1797         self.assertTrue(d[-5::-1].isEqual(DataArrayInt([])))
1798         try:
1799             d[-6::-1]
1800         except InterpKernelException as e:
1801             self.assertTrue(True)
1802         else:
1803             self.assertTrue(False)
1804             pass
1805         d=DataArrayInt([])
1806         self.assertTrue(d[0:].isEqual(DataArrayInt([])))
1807         #
1808         d=DataArrayDouble([5,6,7])
1809         self.assertTrue(d[2:].isEqual(DataArrayDouble([7]),1e-12))
1810         self.assertTrue(d[3:].isEqual(DataArrayDouble([]),1e-12))
1811         try:
1812             d[4:]
1813         except InterpKernelException as e:
1814             self.assertTrue(True)
1815         else:
1816             self.assertTrue(False)
1817             pass
1818         d=DataArrayDouble([5,6,7,8])
1819         self.assertAlmostEqual(d[-1],8.,12)
1820         self.assertAlmostEqual(d[-4],5.,12)
1821         try:
1822             d[-5]
1823         except InterpKernelException as e:
1824             self.assertTrue(True)
1825         else:
1826             self.assertTrue(False)
1827             pass
1828         self.assertTrue(d[2::-1].isEqual(DataArrayDouble([7,6,5]),1e-12))
1829         self.assertTrue(d[0::-1].isEqual(DataArrayDouble([5]),1e-12))
1830         self.assertTrue(d[-1::-1].isEqual(DataArrayDouble([8,7,6,5]),1e-12))
1831         self.assertTrue(d[-3::-1].isEqual(DataArrayDouble([6,5]),1e-12))
1832         self.assertTrue(d[-5::-1].isEqual(DataArrayDouble([]),1e-12))
1833         try:
1834             d[-6::-1]
1835         except InterpKernelException as e:
1836             self.assertTrue(True)
1837         else:
1838             self.assertTrue(False)
1839             pass
1840         d=DataArrayDouble([])
1841         self.assertTrue(d[0:].isEqual(DataArrayDouble([]),1e-12))
1842         pass
1843
1844     def testSwig2Hexa27GP1(self):
1845         """ This test focused on shape functions of hexa27.
1846         """
1847         coo=DataArrayDouble([[0.,2.,2.],[0.,0.,2.],[2.,0.,2.],[2.,2.,2.],[0.,2.,0.],[0.,0.,0.],[2.,0.,0.],[2.,2.,0.], [0.,1.,2.],[1.,0.,2.],[2.,1.,2.],[1.,2.,2.], [0.,1.,0.],[1.,0.,0.],[2.,1.,0.],[1.,2.,0.], [0.,2.,1.],[0.,0.,1.],[2.,0.,1.],[2.,2.,1.], [1.,1.,2.], [0.,1.,1.],[1.,0.,1.],[2.,1.,1.],[1.,2.,1.], [1.,1.,0.], [1.,1.,1.]])
1848         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1849         m.allocateCells()
1850         # the cell description is exactly those described in the description of HEXA27 in MED file 3.0.7 documentation
1851         m.insertNextCell(NORM_HEXA27,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])
1852         refCoo=[-1.,-1.,-1.,-1.,1.,-1.,1.,1.,-1.,1.,-1.,-1.,-1.,-1.,1.,-1.,1.,1.,1.,1.,1.,1.,-1.,1.,-1.,0.,-1.,0.,1.,-1.,1.,0.,-1.,0.,-1.,-1.,-1.,0.,1.,0.,1.,1.,1.,0.,1.,0.,-1.,1.,-1.,-1.,0.,-1.,1.,0.,1.,1.,0.,1.,-1.,0.,0.,0.,-1.,-1.,0.,0.,0.,1.,0.,1.,0.,0.,0.,-1.,0.,0.,0.,1.,0.,0.,0.]
1853         weights=[0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.43895747599451346,0.7023319615912209,0.43895747599451346,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.43895747599451346,0.27434842249657115,0.1714677640603571,0.27434842249657115,0.1714677640603571]
1854         gCoords=[-0.774596669241483,-0.774596669241483,-0.774596669241483,-0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.0,0.0,-0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,-0.774596669241483,0.774596669241483,0.0,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,-0.774596669241483,-0.774596669241483,0.0,-0.774596669241483,0.0,0.0,-0.774596669241483,0.774596669241483,0.0,0.0,-0.774596669241483,0.0,0.0,0.0,0.0,0.0,0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.0,0.774596669241483,0.0,0.0,0.774596669241483,0.774596669241483,0.774596669241483,-0.774596669241483,-0.774596669241483,0.774596669241483,-0.774596669241483,0.0,0.774596669241483,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,-0.774596669241483,0.774596669241483,0.0,0.0,0.774596669241483,0.0,0.774596669241483,0.774596669241483,0.774596669241483,-0.774596669241483,0.774596669241483,0.774596669241483,0.0,0.774596669241483,0.774596669241483,0.774596669241483]
1855         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1856         fGauss.setMesh(m)
1857         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1858         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1859         fGauss.setArray(arr)
1860         arrOfDisc=fGauss.getLocalizationOfDiscr()
1861         # the test is here
1862         self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([0.2254033307585172,1.7745966692414836,1.7745966692414834,0.22540333075851715,1.7745966692414834,1.,0.22540333075851715,1.7745966692414836,0.22540333075851715,0.22540333075851715,1.,1.7745966692414834,0.2254033307585171,1.,1.,0.22540333075851715,1.0000000000000002,0.2254033307585171,0.22540333075851715,0.22540333075851715,1.7745966692414838,0.22540333075851715,0.22540333075851715,1.,0.22540333075851715,0.22540333075851715,0.22540333075851715,1.,1.7745966692414832,1.7745966692414834,1.,1.774596669241483,1.,1.0000000000000002,1.7745966692414832,0.22540333075851712,1.,1.,1.774596669241483,1.,1.,1.,1.,1.,0.2254033307585171,1.,0.22540333075851715,1.7745966692414834,1.,0.2254033307585171,1.,1.0000000000000002,0.22540333075851715,0.2254033307585171,1.7745966692414834,1.7745966692414834,1.7745966692414836,1.7745966692414832,1.7745966692414834,1.0000000000000002,1.7745966692414834,1.7745966692414836,0.22540333075851712,1.7745966692414832,1.,1.7745966692414834,1.774596669241483,1.,1.,1.7745966692414832,1.0000000000000002,0.22540333075851712,1.7745966692414836,0.22540333075851715,1.7745966692414836,1.7745966692414832,0.22540333075851715,1.,1.7745966692414836,0.22540333075851715,0.22540333075851715],27,3),1e-12))
1863         #
1864         weights=27*[1]
1865         gCoords=refCoo
1866         fGauss.setGaussLocalizationOnType(NORM_HEXA27,refCoo,gCoords,weights)
1867         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1868         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1869         pass
1870
1871     def testSwig2Pyra13GP1(self):
1872         coo=DataArrayDouble([[0.,2.,0.],[2.,2.,0.],[2.,0.,0.],[0.,0.,0.],[1.,1.,2.],[1.,2.,0.],[2.,1.,0.],[1.,0.,0.],[0.,1.,0.],[0.5,1.5,1.],[1.5,1.5,1.],[1.5,0.5,1.],[0.5,0.5,1.]])
1873         m=MEDCouplingUMesh("mesh",3) ; m.setCoords(coo)
1874         m.allocateCells()
1875         # the cell description is exactly those described in the description of PYRA13 in MED file 3.0.7 documentation
1876         m.insertNextCell(NORM_PYRA13,[0,1,2,3,4,5,6,7,8,9,10,11,12])
1877         refCoords=[1.,0.,0.,0.,-1.,0.,-1.,0.,0.,0.,1.,0.,0.,0.,1.,0.5,-0.5,0.,-0.5,-0.5,0.,-0.5,0.5,0.,0.5,0.5,0.,0.5,0.,0.5,0.,-0.5,0.5,-0.5,0.,0.5,0.,0.5,0.5]
1878         gaussCoords=[0.,0.,0.5,0.21210450275,0.21210450275,0.5,-0.21210450275,0.21210450275,0.5,-0.21210450275,-0.21210450275,0.5,0.21210450275,-0.21210450275,0.5,0.,0.,0.07579099449999999,0.,0.,0.9242090055000001,0.5394929090572634,0.,0.17359176399999998,0.,0.5394929090572634,0.17359176399999998,-0.5394929090572634,0.,0.17359176399999998,0.,-0.5394929090572634,0.17359176399999998,0.1133235629427366,0.,0.826408236,0.,0.1133235629427366,0.826408236,-0.1133235629427366,0.,0.826408236,0.,-0.1133235629427366,0.826408236,0.5826406005183961,0.5826406005183961,-0.053206449499999975,-0.5826406005183961,0.5826406005183961,-0.053206449499999975,-0.5826406005183961,-0.5826406005183961,-0.053206449499999975,0.5826406005183961,-0.5826406005183961,-0.053206449499999975,0.5532064495,0.,0.5,0.,0.5532064495,0.5,-0.5532064495,0.,0.5,0.,-0.5532064495,0.5,-0.029434151018396033,-0.029434151018396033,1.0532064495,0.029434151018396033,-0.029434151018396033,1.0532064495,0.029434151018396033,0.029434151018396033,1.0532064495,-0.029434151018396033,0.029434151018396033,1.0532064495]
1879         weights=[0.0492545926875,0.031210562625,0.031210562625,0.031210562625,0.031210562625,0.10663554205740113,0.0007171281994273535,0.0816994048010844,0.0816994048010844,0.0816994048010844,0.0816994048010844,0.0036048554264914074,0.0036048554264914074,0.0036048554264914074,0.0036048554264914074,0.008958181586640837,0.008958181586640837,0.008958181586640837,0.008958181586640837,0.002018983875,0.002018983875,0.002018983875,0.002018983875,2.286237794882217e-05,2.286237794882217e-05,2.286237794882217e-05,2.286237794882217e-05]
1880         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1881         fGauss.setMesh(m)
1882         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
1883         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1884         fGauss.setArray(arr)
1885         arrOfDisc=fGauss.getLocalizationOfDiscr()
1886         # the test is here
1887         self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([1.,1.,1.,0.5757909945,1.,1.,1.,0.5757909945,1.,1.4242090055,1.,1.,1.,1.4242090055,1.,1.,1.,0.151581989,1.,1.,1.848418011,0.4605070909427367,1.5394929090572635,0.347183528,0.4605070909427367,0.4605070909427367,0.347183528,1.5394929090572638,0.4605070909427366,0.347183528,1.5394929090572635,1.5394929090572638,0.347183528,0.8866764370572636,1.1133235629427367,1.652816472,0.8866764370572636,0.8866764370572636,1.652816472,1.1133235629427367,0.8866764370572636,1.652816472,1.1133235629427365,1.1133235629427367,1.652816472,-0.16528120103679209,1.,-0.106412899,1.,-0.1652812010367921,-0.106412899,2.1652812010367914,1.,-0.106412899,1.,2.165281201036791,-0.106412899,0.4467935505,1.5532064495,1.,0.4467935505,0.4467935505,1.,1.5532064495,0.4467935505,1.,1.5532064495,1.5532064495,1.,1.0588683020367922,1.,2.106412899,1.,1.0588683020367922,2.106412899,0.9411316979632077,1.,2.106412899,1.,0.9411316979632078,2.106412899],27,3),1e-12))
1888         #
1889         weights=13*[1]
1890         gaussCoords=refCoords[:] ; gaussCoords[14]=0.9999999999999 # change z of point #4 0.999... instead of 1. because with shape function it leads to division by 0. !
1891         fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights)
1892         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1893         self.assertTrue(arrOfDisc2.isEqual(coo,1e-10)) # be less exigent 1e-10 instead of 1e-12 due to shape function sensitivity around 0.,0.,1. !
1894         pass
1895
1896     def testSwig2Tri7GP1(self):
1897         coo=DataArrayDouble([[0,0],[0,2],[2,0],[0,1],[1,1],[1,0],[0.6666666666666667,0.6666666666666667]])
1898         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
1899         m.allocateCells()
1900         # the cell description is exactly those described in the description of TRI7 in MED file 3.0.7 documentation
1901         m.insertNextCell(NORM_TRI7, list(range(7)))
1902         refCoords=[0.,0.,1.,0.,0.,1.,0.5,0.,0.5,0.5,0.,0.5,0.3333333333333333,0.3333333333333333]
1903         gaussCoords=[0.3333333333333333,0.3333333333333333,0.470142064105115,0.470142064105115,0.05971587178977,0.470142064105115,0.470142064105115,0.05971587178977,0.101286507323456,0.101286507323456,0.797426985353088,0.101286507323456,0.101286507323456,0.797426985353088]
1904         weights=[0.062969590272413,0.062969590272413,0.062969590272413,0.066197076394253,0.066197076394253,0.066197076394253,0.1125]
1905         fGauss=MEDCouplingFieldDouble(ON_GAUSS_PT) ; fGauss.setName("fGauss")
1906         fGauss.setMesh(m)
1907         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
1908         arr=DataArrayDouble(fGauss.getNumberOfTuplesExpected()) ; arr.iota()
1909         fGauss.setArray(arr)
1910         arrOfDisc=fGauss.getLocalizationOfDiscr()
1911         self.assertTrue(arrOfDisc.isEqual(DataArrayDouble([0.666666666666667,0.666666666666667,0.9402841282102293,0.9402841282102293,0.9402841282102299,0.11943174357954002,0.11943174357953992,0.9402841282102299,0.20257301464691194,0.20257301464691196,0.20257301464691205,1.5948539707061757,1.5948539707061757,0.20257301464691202],7,2),1e-12))
1912         #
1913         weights=7*[1]
1914         gaussCoords=refCoords
1915         fGauss.setGaussLocalizationOnType(NORM_TRI7,refCoords,gaussCoords,weights)
1916         arrOfDisc2=fGauss.getLocalizationOfDiscr()
1917         self.assertTrue(arrOfDisc2.isEqual(coo,1e-12))
1918         pass
1919
1920     def testSwig2StructuredDesc1(self):
1921         c=MEDCouplingCMesh()
1922         arr0=DataArrayDouble(3) ; arr0.iota()
1923         arr1=DataArrayDouble(4) ; arr1.iota()
1924         arr2=DataArrayDouble(5) ; arr2.iota()
1925         c.setCoords(arr0,arr1,arr2)
1926         #
1927         self.assertEqual(98,c.getNumberOfCellsOfSubLevelMesh())
1928         m=c.build1SGTSubLevelMesh()
1929         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([0,12,15,3,12,24,27,15,24,36,39,27,36,48,51,39,3,15,18,6,15,27,30,18,27,39,42,30,39,51,54,42,6,18,21,9,18,30,33,21,30,42,45,33,42,54,57,45,1,13,16,4,13,25,28,16,25,37,40,28,37,49,52,40,4,16,19,7,16,28,31,19,28,40,43,31,40,52,55,43,7,19,22,10,19,31,34,22,31,43,46,34,43,55,58,46,2,14,17,5,14,26,29,17,26,38,41,29,38,50,53,41,5,17,20,8,17,29,32,20,29,41,44,32,41,53,56,44,8,20,23,11,20,32,35,23,32,44,47,35,44,56,59,47,0,12,13,1,12,24,25,13,24,36,37,25,36,48,49,37,1,13,14,2,13,25,26,14,25,37,38,26,37,49,50,38,3,15,16,4,15,27,28,16,27,39,40,28,39,51,52,40,4,16,17,5,16,28,29,17,28,40,41,29,40,52,53,41,6,18,19,7,18,30,31,19,30,42,43,31,42,54,55,43,7,19,20,8,19,31,32,20,31,43,44,32,43,55,56,44,9,21,22,10,21,33,34,22,33,45,46,34,45,57,58,46,10,22,23,11,22,34,35,23,34,46,47,35,46,58,59,47,0,1,4,3,3,4,7,6,6,7,10,9,1,2,5,4,4,5,8,7,7,8,11,10,12,13,16,15,15,16,19,18,18,19,22,21,13,14,17,16,16,17,20,19,19,20,23,22,24,25,28,27,27,28,31,30,30,31,34,33,25,26,29,28,28,29,32,31,31,32,35,34,36,37,40,39,39,40,43,42,42,43,46,45,37,38,41,40,40,41,44,43,43,44,47,46,48,49,52,51,51,52,55,54,54,55,58,57,49,50,53,52,52,53,56,55,55,56,59,58])))
1930         self.assertEqual(NORM_QUAD4,m.getCellModelEnum())
1931         #
1932         self.assertTrue(MEDCouplingStructuredMesh.Build1GTNodalConnectivityOfSubLevelMesh([3,7]).isEqual(DataArrayInt([0,3,3,6,6,9,9,12,12,15,15,18,1,4,4,7,7,10,10,13,13,16,16,19,2,5,5,8,8,11,11,14,14,17,17,20,0,1,1,2,3,4,4,5,6,7,7,8,9,10,10,11,12,13,13,14,15,16,16,17,18,19,19,20])))
1933         pass
1934
1935     def testSwig2Colinearize2D1(self):
1936         coo=DataArrayDouble([-5.,0.,-1.,0.,4.,3.,7.,0.,1.,6.,1.,0.,-3.,0.,6.,1.,5.,0.,3.,0.],10,2)
1937         #
1938         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1939         m.insertNextCell(NORM_POLYGON,[5,9,8,3,7,2,4,0,6,1])
1940         refPtr=m.getCoords().getHiddenCppPointer()
1941         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1942         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1943         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1944         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1945         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
1946         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1947         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1948         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1949         #
1950         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1951         m.insertNextCell(NORM_POLYGON,[8,3,7,2,4,0,6,1,5,9])
1952         refPtr=m.getCoords().getHiddenCppPointer()
1953         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1954         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1955         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,0,3,4])))
1956         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1957         #
1958         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1959         m.insertNextCell(NORM_POLYGON,[3,7,2,4,0,6,1,5,9,8])
1960         refPtr=m.getCoords().getHiddenCppPointer()
1961         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1962         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1963         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,3,4,0])))
1964         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1965         #
1966         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells()
1967         m.insertNextCell(NORM_POLYGON,[4,0,6,1,5,9,8,3,7,2,])
1968         refPtr=m.getCoords().getHiddenCppPointer()
1969         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1970         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1971         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,4,0,3])))
1972         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4])))
1973         ## false quadratic
1974         coo2=DataArrayDouble([(-5,0),(-1,0),(4,3),(7,0),(1,6),(1,0),(-3,0),(6,1),(5,0),(3,0),(2,0),(4,0),(6,0),(6.5,0.5),(5,2),(2.5,4.5),(-2,3),(-4,0),(-2,0),(0,0)])
1975         coo2.setInfoOnComponents(["aa","bbbb"])
1976         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
1977         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
1978         refPtr=m.getCoords().getHiddenCppPointer()
1979         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1980         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
1981         self.assertEqual(["aa","bbbb"],m.getCoords().getInfoOnComponents())
1982         refPtr=m.getCoords().getHiddenCppPointer()
1983         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
1984         self.assertTrue(m.getCoords()[20:].isEqualWithoutConsideringStr(DataArrayDouble([(1.,0.),(4.,3.)]),1e-12))
1985         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
1986         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
1987         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([])))
1988         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
1989         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
1990         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
1991         # mix of quadratic and linear inside a QPOLYG cell
1992         coo2=DataArrayDouble([(-5,0),(-1,0),(7.,6.),(7,0),(1,6),(1,0),(-3,0),(8.2426406871192839,3),(5,0),(3,0),  (2,0),(4,0),(6,0),(7.9196888946291288,1.3764116995614091),(7.9196888946291288,4.6235883004385911),(4,7.2426406871192848),(-2,3),(-4,0),(-2,0),(0,0)])
1993         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo2) ; m.allocateCells()
1994         m.insertNextCell(NORM_QPOLYG,[5,9,8,3,7,2,4,0,6,1,10,11,12,13,14,15,16,17,18,19])
1995         refPtr=m.getCoords().getHiddenCppPointer()
1996         self.assertTrue(m.colinearize2D(1e-12).isEqual(DataArrayInt([0])))
1997         self.assertNotEqual(refPtr,m.getCoords().getHiddenCppPointer())#not same coordinates here
1998         self.assertTrue(coo2.isEqual(m.getCoords()[:20],1e-12))
1999         self.assertTrue(m.getCoords()[20:].isEqual(DataArrayDouble([(1.,0.),(7.,6.)]),1e-12))
2000         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,3,4,20,21,16])))
2001         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7])))
2002         pass
2003
2004     def testSwig2BoundingBoxForBBTree1(self):
2005         """ This test appears simple but it checks that bounding box are correctly computed for quadratic polygons. It can help a lot to reduce the amount of intersections !
2006         """
2007         coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,0.45,0.,0.3181980515339464,0.31819805153394637,0.,0.45,-0.31819805153394637,0.3181980515339464,-0.45,0.,-0.3181980515339465,-0.31819805153394637,0.,-0.45,0.3181980515339463,-0.3181980515339465,-0.5,0.0,0.0,0.5,0.5,0.0,0.0,-0.5,-0.4090990257669732,-0.4090990257669732,0.40909902576697316,-0.4090990257669732],18,2)
2008         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2009         m.allocateCells()
2010         m.insertNextCell(NORM_QPOLYG,[0,1,2,3,11,5,7,9,12,13,14,17,4,6,8,16])
2011         m.insertNextCell(NORM_QPOLYG,[3,0,9,11,15,16,10,17])
2012         self.assertTrue(m.getBoundingBoxForBBTree().isEqual(DataArrayDouble([-0.5,0.5,-0.5,0.5,-0.5,0.5,-0.5,-0.31819805153394637],2,4),1e-12))
2013         pass
2014
2015     def testSwig2CartBuildUnstructuredOnExoticCases1(self):
2016         """ Test focusing on traduction from cartesian to unstructured mesh when spaceDim greater than meshDim.
2017         """
2018         #
2019         m=MEDCouplingCMesh()
2020         arrX=DataArrayDouble(3) ; arrX.iota()
2021         arrY=DataArrayDouble(4) ; arrY.iota()
2022         arrZ=DataArrayDouble(1) ; arrZ.iota()
2023         m.setCoords(arrX,arrY,arrZ)
2024         self.assertEqual(2,m.getMeshDimension())
2025         self.assertEqual(3,m.getSpaceDimension())
2026         mu=m.buildUnstructured()
2027         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
2028         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2029         coo0=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,1,0),(1,1,0),(2,1,0),(0,2,0),(1,2,0),(2,2,0),(0,3,0),(1,3,0),(2,3,0)])
2030         self.assertTrue(mu.getCoords().isEqual(coo0,1e-12))
2031         #
2032         m=MEDCouplingCMesh()
2033         arrX=DataArrayDouble(3) ; arrX.iota()
2034         arrY=DataArrayDouble(1) ; arrY.iota()
2035         arrZ=DataArrayDouble(4) ; arrZ.iota()
2036         m.setCoords(arrX,arrY,arrZ)
2037         self.assertEqual(2,m.getMeshDimension())
2038         self.assertEqual(3,m.getSpaceDimension())
2039         mu=m.buildUnstructured()
2040         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
2041         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2042         coo1=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,0,1),(1,0,1),(2,0,1),(0,0,2),(1,0,2),(2,0,2),(0,0,3),(1,0,3),(2,0,3)])
2043         self.assertTrue(mu.getCoords().isEqual(coo1,1e-12))
2044         #
2045         m=MEDCouplingCMesh()
2046         arrX=DataArrayDouble(1) ; arrX.iota() ; arrX+=9
2047         arrY=DataArrayDouble(3) ; arrY.iota()
2048         arrZ=DataArrayDouble(4) ; arrZ.iota()
2049         m.setCoords(arrX,arrY,arrZ)
2050         self.assertEqual(2,m.getMeshDimension())
2051         self.assertEqual(3,m.getSpaceDimension())
2052         mu=m.buildUnstructured()
2053         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,3,4,4,2,1,4,5,4,4,3,6,7,4,5,4,7,8,4,7,6,9,10,4,8,7,10,11])))
2054         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2055         coo2=DataArrayDouble([(9,0,0),(9,1,0),(9,2,0),(9,0,1),(9,1,1),(9,2,1),(9,0,2),(9,1,2),(9,2,2),(9,0,3),(9,1,3),(9,2,3)])
2056         self.assertTrue(mu.getCoords().isEqual(coo2,1e-12))
2057         #
2058         m=MEDCouplingCMesh()
2059         arrX=DataArrayDouble(3) ; arrX.iota()
2060         arrY=DataArrayDouble(1) ; arrY.iota(7)
2061         arrZ=DataArrayDouble(1) ; arrZ.iota(8)
2062         m.setCoords(arrX,arrY,arrZ)
2063         self.assertEqual(1,m.getMeshDimension())
2064         self.assertEqual(3,m.getSpaceDimension())
2065         mu=m.buildUnstructured()
2066         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2067         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2068         coo3=DataArrayDouble([(0,7,8),(1,7,8),(2,7,8)])
2069         self.assertTrue(mu.getCoords().isEqual(coo3,1e-12))
2070         #
2071         m=MEDCouplingCMesh()
2072         arrX=DataArrayDouble(1) ; arrX.iota(7)
2073         arrY=DataArrayDouble(1) ; arrY.iota(8)
2074         arrZ=DataArrayDouble(3) ; arrZ.iota()
2075         m.setCoords(arrX,arrY,arrZ)
2076         self.assertEqual(1,m.getMeshDimension())
2077         self.assertEqual(3,m.getSpaceDimension())
2078         mu=m.buildUnstructured()
2079         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2080         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2081         coo4=DataArrayDouble([(7,8,0),(7,8,1),(7,8,2)])
2082         self.assertTrue(mu.getCoords().isEqual(coo4,1e-12))
2083         #
2084         m=MEDCouplingCMesh()
2085         arrX=DataArrayDouble(3) ; arrX.iota()
2086         arrY=DataArrayDouble(1) ; arrY.iota(7)
2087         m.setCoords(arrX,arrY)
2088         self.assertEqual(1,m.getMeshDimension())
2089         self.assertEqual(2,m.getSpaceDimension())
2090         mu=m.buildUnstructured()
2091         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2092         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2093         coo5=DataArrayDouble([(0,7),(1,7),(2,7)])
2094         self.assertTrue(mu.getCoords().isEqual(coo5,1e-12))
2095         #
2096         m=MEDCouplingCMesh()
2097         arrX=DataArrayDouble(1) ; arrX.iota(7)
2098         arrY=DataArrayDouble(3) ; arrY.iota()
2099         m.setCoords(arrX,arrY)
2100         self.assertEqual(1,m.getMeshDimension())
2101         self.assertEqual(2,m.getSpaceDimension())
2102         mu=m.buildUnstructured()
2103         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2104         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2105         coo6=DataArrayDouble([(7,0),(7,1),(7,2)])
2106         self.assertTrue(mu.getCoords().isEqual(coo6,1e-12))
2107         pass
2108
2109     def testSwig2Colinearize2D2(self):
2110         """ simple non regression test but that has revealed a bug"""
2111         coo=DataArrayDouble([(0,0),(0,0.5),(0,1),(1,1),(1,0),(0.5,0)])
2112         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2113         m.allocateCells() ; m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
2114         m.checkConsistency()
2115         refPtr=m.getCoords().getHiddenCppPointer()
2116         #
2117         m.colinearize2D(1e-12)
2118         m.checkConsistency()
2119         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2120         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_POLYGON,0,2,3,4])))
2121         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5])))
2122         pass
2123
2124     def testSwig2Colinearize2D3(self):
2125         """ colinearize was too aggressive, potentially producing cells with one edge """
2126         # Flat polygon  with 3 edges - nothing should happen (min number of edges for a linear polyg)
2127         coo = DataArrayDouble([0.0,0.0,  2.0,0.0,   1.5,0.0,  1.0,0.0,  0.5,0.0], 5,2)
2128         m = MEDCouplingUMesh("m", 2)
2129         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2], [0,4]] ]
2130         m.setCoords(coo); m.setConnectivity(c, cI)
2131         m.colinearize2D(1e-10)
2132         m.checkConsistency()
2133         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2134         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2135
2136         # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg)
2137         m = MEDCouplingUMesh("m", 2)
2138         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,  2,3], [0,5]] ]
2139         m.setCoords(coo); m.setConnectivity(c, cI)
2140         m.colinearize2D(1e-10)
2141         m.checkConsistency()
2142         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2143         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2144
2145         # Flat polygon, 4 edges - one reduction should happen
2146         m = MEDCouplingUMesh("m", 2)
2147         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2,3], [0,5]] ]
2148         m.setCoords(coo); m.setConnectivity(c, cI)
2149         m.colinearize2D(1e-10)
2150         m.checkConsistency()
2151         self.assertEqual([NORM_POLYGON, 3,1,2], m.getNodalConnectivity().getValues())
2152         self.assertEqual([0,4], m.getNodalConnectivityIndex().getValues())
2153
2154         # Flat quad polygon, 3 edges - one reduction expected
2155         m = MEDCouplingUMesh("m", 2)
2156         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,3,  3,2,4], [0,7]] ]
2157         m.setCoords(coo); m.setConnectivity(c, cI)
2158         m.colinearize2D(1e-10)
2159         m.checkConsistency()
2160         self.assertEqual([NORM_QPOLYG, 3,1, 5,2], m.getNodalConnectivity().getValues())
2161         self.assertTrue( m.getCoords()[5].isEqual( DataArrayDouble([(1.5,0.0)]), 1.0e-12 ) )
2162         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2163
2164         # Now an actual (neutronic) case: circle made of 4 SEG3. Should be reduced to 2 SEG3
2165         m = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 1.0)
2166         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 7,5,3,1,  6,4,2,0], [0,9]] ]
2167         m.colinearize2D(1e-10)
2168         m.checkConsistency()
2169         self.assertEqual([NORM_QPOLYG, 3,5,  8,4], m.getNodalConnectivity().getValues())
2170         self.assertTrue( m.getCoords()[8].isEqual( DataArrayDouble([(1.0,0.0)]), 1.0e-12 ) )
2171         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2172
2173     def testSwig2CheckAndPreparePermutation2(self):
2174         a=DataArrayInt([10003,9999999,5,67])
2175         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([2,3,0,1])))
2176         a=DataArrayInt([10003,-9999999,5,67])
2177         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([3,0,1,2])))
2178         a=DataArrayInt([])
2179         self.assertTrue(DataArrayInt.checkAndPreparePermutation(a).isEqual(DataArrayInt([])))
2180         pass
2181
2182     def testSwig2ComputeNeighborsOfNodes1(self):
2183         arrX=DataArrayDouble(3) ; arrX.iota()
2184         arrY=DataArrayDouble(4) ; arrY.iota()
2185         arrZ=DataArrayDouble(5) ; arrZ.iota()
2186         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
2187         # 3D
2188         a,b=m.computeNeighborsOfNodes()
2189         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])))
2190         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])))
2191         # 2D
2192         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m=m.buildUnstructured()
2193         a,b=m.computeNeighborsOfNodes()
2194         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])))
2195         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2196         # 1D
2197         m=m.buildDescendingConnectivity()[0]
2198         a,b=m.computeNeighborsOfNodes()
2199         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])))
2200         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2201         pass
2202
2203     def testSwigBugOnUnpackingTuplesInDataArray1(self):
2204         inp=DataArrayDouble([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2205         it=inp.__iter__()
2206         r = next(it)
2207         self.assertRaises(StopIteration,r.__getitem__,4)
2208         self.assertEqual(len(r),3)
2209         a,b,c=r
2210         r = next(it)
2211         self.assertEqual(len(r),3)
2212         d,e,f=r
2213         r = next(it)
2214         self.assertEqual(len(r),3)
2215         g,h,i=r
2216         r = next(it)
2217         self.assertEqual(len(r),3)
2218         j,k,l=r
2219         self.assertTrue(inp.isEqual(DataArrayDouble([a,b,c,d,e,f,g,h,i,j,k,l],4,3),1e-12))
2220         ########
2221         inp=DataArrayInt([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2222         it=inp.__iter__()
2223         r = next(it)
2224         self.assertRaises(StopIteration,r.__getitem__,4)
2225         self.assertEqual(len(r),3)
2226         a,b,c=r
2227         r = next(it)
2228         self.assertEqual(len(r),3)
2229         d,e,f=r
2230         r = next(it)
2231         self.assertEqual(len(r),3)
2232         g,h,i=r
2233         r = next(it)
2234         self.assertEqual(len(r),3)
2235         j,k,l=r
2236         self.assertTrue(inp.isEqual(DataArrayInt([a,b,c,d,e,f,g,h,i,j,k,l],4,3)))
2237         pass
2238
2239     def testSwig2IMesh1(self):
2240         """ 1st test of image grid mesh.
2241         """
2242         m=MEDCouplingIMesh()
2243         self.assertEqual(m.getSpaceDimension(),-1)
2244         self.assertEqual(1,len(m.__repr__().split("\n")))
2245         self.assertEqual(6,len(m.__str__().split("\n")))
2246         self.assertRaises(InterpKernelException,m.getNodeStruct)
2247         self.assertRaises(InterpKernelException,m.getOrigin)
2248         self.assertRaises(InterpKernelException,m.getDXYZ)
2249         m.setSpaceDimension(3)
2250         self.assertEqual(9,len(m.__str__().split("\n")))
2251         self.assertEqual(4,len(m.__repr__().split("\n")))
2252         self.assertEqual((0,0,0),m.getNodeStruct())
2253         self.assertEqual((0.,0.,0.),m.getOrigin())
2254         self.assertEqual((0.,0.,0.),m.getDXYZ())
2255         self.assertRaises(InterpKernelException,m.setNodeStruct,[3,4])
2256         m.setNodeStruct([3,4,2])
2257         self.assertEqual((3,4,2),m.getNodeStruct())
2258         m.setOrigin(DataArrayDouble([1.5,2.5,3.5]))
2259         self.assertEqual((1.5,2.5,3.5),m.getOrigin())
2260         m.setDXYZ((0.5,1.,0.25))
2261         self.assertEqual((0.5,1.,0.25),m.getDXYZ())
2262         for it in DataArrayDouble([(1.5,2.5,3.5)]):
2263             m2=MEDCouplingIMesh("",3,DataArrayInt([3,4,2]),it,DataArrayDouble((0.5,1.,0.25)))
2264             pass
2265         self.assertEqual(3,m.getSpaceDimension())
2266         self.assertEqual((3,4,2),m2.getNodeStruct())
2267         self.assertEqual((1.5,2.5,3.5),m2.getOrigin())
2268         self.assertEqual((0.5,1.,0.25),m2.getDXYZ())
2269         self.assertEqual(24,m2.getNumberOfNodes())
2270         self.assertEqual(6,m2.getNumberOfCells())
2271         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2272         m2.setAxisUnit("m")
2273         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2274         m.setAxisUnit("m")
2275         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2276         m.setName("mesh")
2277         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2278         m2.setName("mesh")
2279         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2280         m2.setTime(1.1,0,3)
2281         self.assertTrue(not m.isEqual(m2,1e-12))
2282         m.setTime(1.1,0,3)
2283         self.assertTrue(m.isEqual(m2,1e-12))
2284         m.setTimeUnit("ms")
2285         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2286         m2.setTimeUnit("ms")
2287         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2288         #
2289         m2.setNodeStruct([3,2,4])
2290         self.assertTrue(not m.isEqual(m2,1e-12))
2291         m.setNodeStruct([3,2,4])
2292         self.assertTrue(m.isEqual(m2,1e-12))
2293         m.setOrigin(DataArrayDouble([1.5,3.5,2.5]))
2294         self.assertTrue(not m.isEqual(m2,1e-12))
2295         m2.setOrigin([1.5,3.5,2.5])
2296         self.assertTrue(m.isEqual(m2,1e-12))
2297         m.setDXYZ((0.5,0.25,1.))
2298         self.assertTrue(not m.isEqual(m2,1e-12))
2299         m2.setDXYZ(DataArrayDouble((0.5,0.25,1.)))
2300         self.assertTrue(m.isEqual(m2,1e-12))
2301         m2bis=m2.deepCopy()
2302         self.assertTrue(m2bis.isEqual(m2,1e-12))
2303         #
2304         self.assertEqual(6,m2bis.getNumberOfCells())#3,2,4
2305         m2bis.refineWithFactor([3,3,3])
2306         self.assertEqual(162,m2bis.getNumberOfCells())
2307         self.assertEqual((7,4,10),m2bis.getNodeStruct())
2308         self.assertEqual((1.5,3.5,2.5),m2bis.getOrigin())
2309         self.assertTrue(DataArrayDouble([0.16666666666666666,0.08333333333333333,0.3333333333333333]).isEqual(DataArrayDouble(m2bis.getDXYZ()),1e-12))
2310         #
2311         self.assertEqual(3,m.getMeshDimension())
2312         self.assertAlmostEqual(0.125,m.getMeasureOfAnyCell(),16);
2313         mu=MEDCoupling1SGTUMesh(m.buildUnstructured())
2314         mu.checkConsistency()
2315         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]"])
2316         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2317         self.assertEqual(NORM_HEXA8,mu.getCellModelEnum())
2318         self.assertTrue(mu.getCoords().isEqual(cooExp,1e-12))
2319         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])))
2320         bary=m.computeCellCenterOfMass()
2321         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]"])
2322         self.assertTrue(bary.isEqual(baryExp,1e-12))
2323         #
2324         c=m.convertToCartesian()
2325         c.checkConsistencyLight()
2326         self.assertEqual([1.1,0,3],c.getTime())
2327         self.assertEqual("ms",c.getTimeUnit())
2328         self.assertEqual(3,c.getMeshDimension())
2329         self.assertEqual(3,c.getSpaceDimension())
2330         arrX=DataArrayDouble([1.5,2.,2.5]) ; arrX.setInfoOnComponents(["X [m]"])
2331         self.assertTrue(c.getCoordsAt(0).isEqual(arrX,1e-12))
2332         arrY=DataArrayDouble([3.5,3.75]) ; arrY.setInfoOnComponents(["Y [m]"])
2333         self.assertTrue(c.getCoordsAt(1).isEqual(arrY,1e-12))
2334         arrZ=DataArrayDouble([2.5,3.5,4.5,5.5]) ; arrZ.setInfoOnComponents(["Z [m]"])
2335         self.assertTrue(c.getCoordsAt(2).isEqual(arrZ,1e-12))
2336         self.assertTrue(c.buildUnstructured().isEqual(m.buildUnstructured(),1e-12))
2337         #
2338         a,b=m.getCellsContainingPoints(baryExp,1e-12)
2339         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5])))
2340         self.assertTrue(b.isEqual(DataArrayInt([0,1,2,3,4,5,6])))
2341         for a,b in enumerate(baryExp):
2342             self.assertEqual(a,m.getCellContainingPoint(b,1e-12))
2343             pass
2344         #
2345         m.translate([1.,2.,4.])
2346         self.assertEqual((3,2,4),m.getNodeStruct())
2347         self.assertEqual((2.5,5.5,6.5),m.getOrigin())
2348         self.assertEqual((0.5,0.25,1.),m.getDXYZ())
2349         m.scale([0.,1.,3.],2.)
2350         self.assertAlmostEqual(1.,m.getMeasureOfAnyCell(),16);
2351         self.assertEqual((3,2,4),m.getNodeStruct())
2352         self.assertEqual((5.,10.,10.),m.getOrigin())
2353         self.assertEqual((1.,0.5,2.),m.getDXYZ())
2354         #
2355         f=m.getMeasureField(False)
2356         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(1.1,0,3) ; f2.setMesh(m) ; arr=DataArrayDouble(6) ; arr[:]=1. ; f2.setArray(arr) ; f2.setTimeUnit("ms")
2357         f2.setName("MeasureOfMesh_mesh")
2358         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2359         #
2360         m3=m.buildStructuredSubPart([(1,2),(0,1),(1,3)])
2361         self.assertEqual((2,2,3),m3.getNodeStruct())
2362         self.assertEqual((6.,10.,12.),m3.getOrigin())
2363         self.assertEqual((1.,0.5,2.),m3.getDXYZ())
2364         # now playing with 3D surf
2365         m4=MEDCouplingIMesh("",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m4.setAxisUnit("km")
2366         self.assertEqual([(1.5,2.5),(2.5,3.5),(3.5,4.25)],m4.getBoundingBox())
2367         self.assertEqual(3,m4.getSpaceDimension())
2368         self.assertEqual(2,m4.getMeshDimension())
2369         self.assertEqual(12,m4.getNumberOfNodes())
2370         self.assertEqual(6,m4.getNumberOfCells())
2371         mu=MEDCoupling1SGTUMesh(m4.buildUnstructured())
2372         mu.checkConsistency()
2373         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2374         self.assertEqual(NORM_QUAD4,mu.getCellModelEnum())
2375         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]"])
2376         self.assertTrue(mu.getCoords().isEqual(coordsExp,1e-12))
2377         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])))
2378         pass
2379
2380     def testSwig1GetValuesAsTuple1(self):
2381         d=DataArrayDouble()
2382         self.assertEqual(d.getValues(),[])
2383         self.assertEqual(d.getValuesAsTuple(),[])
2384         d=DataArrayDouble(24) ; d.iota() ; d.rearrange(3)
2385         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.])
2386         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.)])
2387         d=DataArrayInt()
2388         self.assertEqual(d.getValues(),[])
2389         self.assertEqual(d.getValuesAsTuple(),[])
2390         d=DataArrayInt(24) ; d.iota() ; d.rearrange(3)
2391         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])
2392         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)])
2393         pass
2394
2395     def testSwig2AMR1(self):
2396         self.assertEqual((1,3,12),MEDCouplingStructuredMesh.GetSplitVectFromStruct([3,4,5]))
2397         self.assertEqual((3,2),MEDCouplingStructuredMesh.GetDimensionsFromCompactFrmt([(1,4),(2,4)]))
2398         #
2399         amr=MEDCouplingCartesianAMRMesh("",2,[3,3],[0,0],[1,1])
2400         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2401         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithOverlap())
2402         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithoutOverlap())
2403         self.assertEqual(0,amr.getNumberOfPatches())
2404         self.assertEqual(1,amr.getMaxNumberOfLevelsRelativeToThis())
2405         self.assertEqual(2,amr.getSpaceDimension())
2406         amr.addPatch([(1,2),(0,1)],[4,4])
2407         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2408         self.assertEqual(20,amr.getNumberOfCellsRecursiveWithOverlap())
2409         self.assertEqual(19,amr.getNumberOfCellsRecursiveWithoutOverlap())
2410         self.assertEqual(1,amr.getNumberOfPatches())
2411         self.assertEqual(2,amr.getMaxNumberOfLevelsRelativeToThis())
2412         self.assertEqual(2,amr.getSpaceDimension())
2413         amr[0].addPatch([(2,3),(1,3)],[3,2])
2414         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2415         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2416         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2417         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2418         self.assertEqual(1,amr.getNumberOfPatches())
2419         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2420         self.assertEqual(2,amr.getSpaceDimension())
2421         amr[0].addPatch([(0,2),(3,4)],[3,2])
2422         self.assertEqual(16,amr[0].getMesh().getNumberOfCellsAtCurrentLevel())
2423         self.assertEqual(44,amr.getNumberOfCellsRecursiveWithOverlap())
2424         self.assertEqual(39,amr.getNumberOfCellsRecursiveWithoutOverlap())
2425         self.assertEqual(2,amr[0].getMesh().getNumberOfPatches())
2426         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2427         self.assertEqual(2,amr.getSpaceDimension())
2428         del amr[0][1]
2429         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2430         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2431         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2432         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2433         self.assertEqual(1,amr.getNumberOfPatches())
2434         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2435         self.assertEqual(2,amr.getSpaceDimension())
2436         pass
2437
2438     def testSwig2NonRegressionTestPAL1164(self):
2439         """ Test PAL1164 Protection of applyLin against error in compoId ( #CEA22584 ) """
2440         xarr=DataArrayDouble(3,1)
2441         xarr.iota(0.)
2442         cmesh=MEDCouplingCMesh()
2443         cmesh.setCoords(xarr,xarr,xarr)
2444         mesh=cmesh.buildUnstructured()
2445         f=mesh.fillFromAnalytic(ON_CELLS,1,"(x-5.)*(x-5.)+(y-5.)*(y-5.)+(z-5.)*(z-5.)")
2446         f.setName("MyField")
2447         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2448         self.assertRaises(InterpKernelException,f.applyLin,2.,0.,1)# compoId 1 whereas f has only one component !
2449         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2450         f.applyLin(2.,0.,0)# here it is OK !
2451         self.assertTrue(f.getArray().isEqual(DataArrayDouble([121.5,105.5,105.5,89.5,105.5,89.5,89.5,73.5]),1e-12))
2452         f.applyLin(2.,0.)
2453         self.assertTrue(f.getArray().isEqual(DataArrayDouble([243.,211.,211.,179.,211.,179.,179.,147.]),1e-12))
2454         pass
2455
2456     def testSwig2StructurizeMe1(self):
2457         arrx=DataArrayDouble(3) ; arrx.iota() ; arrx*=2.
2458         arry=DataArrayDouble(4) ; arry.iota() ; arry+=3.
2459         arrz=DataArrayDouble(5) ; arrz.iota() ; arrz*=0.5 ; arrz+=2.
2460         c=MEDCouplingCMesh() ; c.setCoords(arrx,arry,arrz)
2461         c.setName("mesh") ; c.setDescription("mesh descr") ; c.setTimeUnit("us") ; c.setTime(1.2,3,4)
2462         u=c.buildUnstructured()
2463         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])
2464         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])
2465         u.renumberCells(cp)
2466         u.renumberNodes(np,len(np))
2467         u=MEDCoupling1SGTUMesh(u)
2468         #
2469         e,d,f=u.structurizeMe()
2470         self.assertTrue(c.isEqual(e,1e-12))
2471         self.assertTrue(d.isEqual(cp))
2472         self.assertTrue(f.isEqual(np))
2473         pass
2474
2475     def testSwig2DenseMatrix1(self):
2476         m0=DenseMatrix(DataArrayDouble([2,3,4,5,1,6]),2,3)
2477         self.assertEqual(m0.getNumberOfRows(),2)
2478         self.assertEqual(m0.getNumberOfCols(),3)
2479         self.assertEqual(m0.getNbOfElems(),6)
2480         ref=m0.getData().getHiddenCppPointer()
2481         m00=m0.deepCopy()
2482         self.assertTrue(m0.isEqual(m00,1e-12))
2483         m00.getData().setIJ(0,0,2.1)
2484         self.assertTrue(not m0.isEqual(m00,1e-12))
2485         m00.getData().setIJ(0,0,2.)
2486         self.assertTrue(m0.isEqual(m00,1e-12))
2487         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2488         #
2489         m000=m0*DataArrayDouble([5,9,3])
2490         self.assertTrue(m000.getData().isEqual(DataArrayDouble([49.,52.]),1e-12))
2491         #
2492         m0.reShape(3,2)
2493         self.assertTrue(not m0.isEqual(m00,1e-12))
2494         self.assertEqual(m0.getNumberOfRows(),3)
2495         self.assertEqual(m0.getNumberOfCols(),2)
2496         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2497         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2498         m0.reShape(2,3)
2499         self.assertTrue(m0.isEqual(m00,1e-12))
2500         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2501         self.assertEqual(m0.getNumberOfRows(),2)
2502         self.assertEqual(m0.getNumberOfCols(),3)
2503         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2504         #m0np=m0.getData().toNumPyArray() ; m0np=matrix(m0np.reshape(m0.getNumberOfRows(),m0.getNumberOfCols()))
2505         m1=m0.deepCopy()
2506         self.assertEqual(m1.getNumberOfRows(),2)
2507         self.assertEqual(m1.getNumberOfCols(),3)
2508         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2509         m11=m0.deepCopy() ; m11+=m1
2510         self.assertEqual(m11.getNumberOfRows(),2)
2511         self.assertEqual(m11.getNumberOfCols(),3)
2512         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2513         m11=m11+m1
2514         self.assertEqual(m11.getNumberOfRows(),2)
2515         self.assertEqual(m11.getNumberOfCols(),3)
2516         self.assertTrue(m11.getData().isEqual(DataArrayDouble([6,9,12,15,3,18]),1e-12))
2517         m11=m11-m1
2518         self.assertEqual(m11.getNumberOfRows(),2)
2519         self.assertEqual(m11.getNumberOfCols(),3)
2520         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2521         m11-=m1
2522         self.assertEqual(m1.getNumberOfRows(),2)
2523         self.assertEqual(m1.getNumberOfCols(),3)
2524         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2525         m1.transpose()
2526         self.assertEqual(m1.getNumberOfRows(),3)
2527         self.assertEqual(m1.getNumberOfCols(),2)
2528         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,5,3,1,4,6]),1e-12))
2529         #m1np=m0np.transpose()
2530         m2=m0*m1
2531         self.assertEqual(m2.getNumberOfRows(),2)
2532         self.assertEqual(m2.getNumberOfCols(),2)
2533         self.assertTrue(m2.getData().isEqual(DataArrayDouble([29,37,37,62]),1e-12))
2534         pass
2535
2536     def testSwig2AMR2(self):
2537         """ 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."""
2538         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2539         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2540         MEDCouplingIMesh.CondenseFineToCoarse([5,7],fine,[(1,4),(2,4)],[4,4],coarse)
2541         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))
2542         # 3D
2543         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2544         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2545         MEDCouplingIMesh.CondenseFineToCoarse([5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4],coarse)
2546         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))
2547         # 1D
2548         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2549         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2550         MEDCouplingIMesh.CondenseFineToCoarse([5],fine,[(1,4)],[4],coarse)
2551         self.assertTrue(coarse.isEqual(DataArrayDouble([0,6,22,38,4]),1e-12))
2552         pass
2553
2554     def testSwig2AMR3(self):
2555         """ Test spread of coarse IMesh instance into a fine one, with a factor."""
2556         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2557         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2558         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7],fine,[(1,4),(2,4)],[4,4])
2559         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))
2560         # 3D
2561         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2562         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2563         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4])
2564         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))
2565         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()
2566         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()
2567         # 1D
2568         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2569         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2570         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5],fine,[(1,4)],[4])
2571         self.assertTrue(fine.isEqual(DataArrayDouble([1.,1.,1.,1.,2.,2.,2.,2.,3.,3.,3.,3.]),1e-12))
2572         pass
2573
2574     def testSwig2AMR4(self):
2575         """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."""
2576         im=MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04])
2577         b=im.computeCellCenterOfMass() ; b-=[1.,1.] ; b=b.magnitude()
2578         ids=b.findIdsInRange(0.4,0.7)
2579         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(im) ; f.setName("toto") ; arr=DataArrayDouble(im.getNumberOfCells()) ; arr[:]=0. ; arr[ids]=1. ; f.setArray(arr)
2580         # f.write("test.vti")
2581         amr=MEDCouplingCartesianAMRMesh(MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04]))
2582         arr2=DataArrayByte(im.getNumberOfCells()) ; arr2[:]=0 ; arr2[ids]=1
2583         bso=BoxSplittingOptions() ; bso.setEfficiencyGoal(0.5); bso.setEfficiencyThreshold(0.8) ; bso.setMaximumNbOfCellsInPatch(3000) ; bso.setMinimumPatchLength(6) ; bso.setMaximumPatchLength(11)
2584         amr.createPatchesFromCriterion(bso,arr2,[2,2])
2585         m=amr.getImageMesh() ; m=m.buildUnstructured() ; m.changeSpaceDimension(3,1.)
2586         self.assertEqual(12,amr.getNumberOfPatches())
2587         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)]]
2588         for i,bltr in enumerate(exp0):
2589             self.assertEqual(amr[i].getBLTRRange(),bltr)
2590             pass
2591         self.assertAlmostEqual(0.666666666667,amr[3].getMesh().getImageMesh().computeSquareness(),12)
2592         #
2593         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceToGlobalOfCompactFrmt([(8,32),(4,17)],[(0,24),(2,12)]),[(8,32),(6,16)])
2594         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceFromGlobalOfCompactFrmt([(8,32),(4,17)],[(8,32),(6,16)]),[(0,24),(2,12)])
2595         self.assertTrue(amr.getImageMesh().isEqual(im,1e-12))
2596         m=amr.getImageMesh().asSingleCell().build1SGTUnstructured()
2597         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3])))
2598         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([(0,0),(2,0),(0,2),(2,2)]),1e-12))
2599         pass
2600
2601     def testSwig2AMR5(self):
2602         """ Idem testAMR3, test spread of coarse IMesh instance into a fine one, with a factor, but here ghost is used !"""
2603         # 1D
2604         coarse=DataArrayDouble(5+2) ; coarse.iota(-1) #X=5 with ghostLev=1
2605         fine=DataArrayDouble(3*4+2) ; fine.iota(1000) #X=3 refined by 4 with ghostLev=1
2606         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5],fine,[(1,4)],[4],1)
2607         self.assertTrue(fine.isEqual(DataArrayDouble([0,1,1,1,1,2,2,2,2,3,3,3,3,4]),1e-12))
2608         coarse.iota(-1000)
2609         MEDCouplingIMesh.CondenseFineToCoarseGhost([5],fine,[(1,4)],[4],coarse,1)
2610         self.assertTrue(coarse.isEqual(DataArrayDouble([-1000.,-999.,4.,8.,12.,-995.,-994.]),1e-12))
2611         # 2D
2612         coarse=DataArrayDouble((5+2*1)*(7+2*1)) ; coarse.iota(0) #X=5,Y=7 with ghostLev=1
2613         fine=DataArrayDouble((3*4+2*1)*(2*4+2*1)) ; fine.iota(1000) #X=3,Y=2 refined by 4
2614         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5,7],fine,[(1,4),(2,4)],[4,4],1)
2615         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))
2616         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2617         coarse.iota(-1000)
2618         fine2=DataArrayDouble.Meld(fine,3*fine) ; coarse2=DataArrayDouble.Meld(coarse,3*coarse)
2619         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine,[(1,4),(2,4)],[4,4],coarse,1)
2620         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine2,[(1,4),(2,4)],[4,4],coarse2,1)
2621         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2622         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.])
2623         self.assertTrue(coarse.isEqual(coarseExp,1e-12))
2624         self.assertTrue(coarse2[:,0].isEqual(coarseExp,1e-12))
2625         self.assertTrue(coarse2[:,1].isEqual(3*coarseExp,1e-12))
2626         pass
2627
2628     def testSwig2AMR6(self):
2629         """ 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."""
2630         amr=MEDCouplingCartesianAMRMesh("",2,[6,6],[0,0],[1,1])
2631         da=DataArrayDouble((5+2)*(5+2)) ; da.iota() ; da+=0.9
2632         amr.addPatch([(1,4),(2,4)],[4,4])
2633         amr.addPatch([(0,1),(0,1)],[4,4])
2634         amr.addPatch([(4,5),(3,4)],[4,4])
2635         amr.addPatch([(4,5),(1,3)],[4,4])
2636         amr.addPatch([(0,1),(1,4)],[4,4])
2637         da0=DataArrayDouble((3*4+2)*(2*4+2)) ; da0.iota() ; da0[:]+=0.2
2638         da1=DataArrayDouble((1*4+2)*(1*4+2)) ; da1.iota() ; da1[:]+=0.4
2639         da2=DataArrayDouble((1*4+2)*(1*4+2)) ; da2.iota() ; da2[:]+=0.6
2640         da3=DataArrayDouble((1*4+2)*(2*4+2)) ; da3.iota() ; da3[:]+=0.7
2641         da4=DataArrayDouble((1*4+2)*(3*4+2)) ; da4.iota() ; da4[:]+=0.8
2642         self.assertEqual(5,amr.getNumberOfPatches())
2643         l=[da0,da1,da2,da3,da4]
2644         lCpy=[elt.deepCopy() for elt in l]
2645         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2646         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2647         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2648         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2649         #
2650         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2651         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2652         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2653         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(amr[2].getMesh().getImageMesh().buildWithGhost(1)) ; f2.setArray(da2) ; f2.setName("p2") ; f2.checkConsistencyLight()
2654         f3=MEDCouplingFieldDouble(ON_CELLS) ; f3.setMesh(amr[3].getMesh().getImageMesh().buildWithGhost(1)) ; f3.setArray(da3) ; f3.setName("p3") ; f3.checkConsistencyLight()
2655         f4=MEDCouplingFieldDouble(ON_CELLS) ; f4.setMesh(amr[4].getMesh().getImageMesh().buildWithGhost(1)) ; f4.setArray(da4) ; f4.setName("p4") ; f4.checkConsistencyLight()
2656         #
2657         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])
2658         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])
2659         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2660         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2661         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2662         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2663         #
2664         g0=amr.retrieveGridsAt(0)
2665         self.assertEqual(1,len(g0))
2666         self.assertTrue(isinstance(g0[0],MEDCouplingCartesianAMRPatchGF))
2667         g1=amr.retrieveGridsAt(1)
2668         self.assertEqual(5,len(g1))
2669         for i in range(5):
2670             self.assertTrue(isinstance(g1[i],MEDCouplingCartesianAMRPatch))
2671             pass
2672         pass
2673
2674     def testSwig2AMR7(self):
2675         """Idem testSwig2AMR6 except that we are in 1D"""
2676         amr=MEDCouplingCartesianAMRMesh("",1,[6],[0],[1])
2677         da=DataArrayDouble(5+2) ; da.iota() ; da+=0.9
2678         amr.addPatch([(1,4)],[4])
2679         amr.addPatch([(0,1)],[4])
2680         da0=DataArrayDouble(3*4+2) ; da0.iota() ; da0[:]+=0.2
2681         da1=DataArrayDouble(1*4+2) ; da1.iota() ; da1[:]+=0.4
2682         self.assertEqual(2,amr.getNumberOfPatches())
2683         l=[da0,da1]
2684         lCpy=[elt.deepCopy() for elt in l]
2685         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2686         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2687         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2688         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2689         #
2690         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2691         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2692         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2693         #
2694         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])
2695         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])
2696         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2697         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2698         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2699         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2700         pass
2701
2702     def testSwig2AMR8(self):
2703         """This test checks 'basic' operations for ghost update."""
2704         ghostSz=1
2705         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2706         amr.addPatch([(1,4),(2,4)],[4,4])
2707         amr.addPatch([(4,5),(3,5)],[4,4])
2708         amr.addPatch([(0,1),(4,6)],[4,4])
2709         amr[0].addPatch([(10,12),(5,8)],[2,2])
2710         amr[1].addPatch([(0,1),(0,5)],[2,2])
2711         amr[2].addPatch([(3,4),(0,3)],[2,2])
2712         m=amr.buildMeshFromPatchEnvelop()
2713         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,9,8,10,11])))
2714         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))
2715         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2716         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2717         att.alloc()
2718         d=att.getFieldOn(amr,"Field")
2719         self.assertEqual(56,d.getNumberOfTuples())
2720         self.assertEqual(1,d.getNumberOfComponents())
2721         d.iota() ; d+=0.1
2722         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2723         self.assertEqual(140,d0.getNumberOfTuples())
2724         self.assertEqual(1,d0.getNumberOfComponents())
2725         d0.iota() ; d0+=0.2
2726         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2727         self.assertEqual(60,d1.getNumberOfTuples())
2728         self.assertEqual(1,d1.getNumberOfComponents())
2729         d1.iota() ; d1+=0.3
2730         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2731         self.assertEqual(60,d2.getNumberOfTuples())
2732         self.assertEqual(1,d2.getNumberOfComponents())
2733         d2.iota() ; d2+=0.4
2734         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2735         self.assertEqual(48,d00.getNumberOfTuples())
2736         self.assertEqual(1,d00.getNumberOfComponents())
2737         d00.iota() ; d00+=0.5
2738         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2739         self.assertEqual(48,d10.getNumberOfTuples())
2740         self.assertEqual(1,d10.getNumberOfComponents())
2741         d10.iota() ; d10+=0.6
2742         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2743         self.assertEqual(32,d20.getNumberOfTuples())
2744         self.assertEqual(1,d20.getNumberOfComponents())
2745         d20.iota() ; d20+=0.7
2746         f=att.buildCellFieldOnRecurseWithoutOverlapWithoutGhost(amr,"Field")
2747         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])
2748         arrExp.setName("Field") ; arrExp.setInfoOnComponents(["X"])
2749         self.assertTrue(f.getArray().isEqual(arrExp,1e-12))
2750         m=MEDCoupling1SGTUMesh(f.getMesh())
2751         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])))
2752         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))
2753         # the test is here ! To be called after iteration with no remesh
2754         att.synchronizeAllGhostZones()
2755         f=att.buildCellFieldOnWithGhost(amr,"Field") ; f.checkConsistencyLight()
2756         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))
2757         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2758         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2759         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2760         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2761         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2762         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2763         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))
2764         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))
2765         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))
2766         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))
2767         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))
2768         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))
2769         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))
2770         pass
2771
2772     def testSwig2AMR9(self):
2773         """ Equivalent to testSwig2AMR8 except that here the ghost level is 2 !"""
2774         ghostSz=2
2775         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2776         amr.addPatch([(1,4),(2,4)],[4,4])
2777         amr.addPatch([(4,5),(3,5)],[4,4])
2778         amr.addPatch([(0,1),(4,6)],[4,4])
2779         amr[0].addPatch([(10,12),(5,8)],[2,2])
2780         amr[1].addPatch([(0,1),(0,5)],[2,2])
2781         amr[2].addPatch([(3,4),(0,3)],[2,2])
2782         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2783         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2784         att.alloc()
2785         d=att.getFieldOn(amr,"Field")
2786         self.assertEqual(90,d.getNumberOfTuples())
2787         self.assertEqual(1,d.getNumberOfComponents())
2788         d.iota() ; d+=0.1
2789         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2790         self.assertEqual(192,d0.getNumberOfTuples())
2791         self.assertEqual(1,d0.getNumberOfComponents())
2792         d0.iota() ; d0+=0.2
2793         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2794         self.assertEqual(96,d1.getNumberOfTuples())
2795         self.assertEqual(1,d1.getNumberOfComponents())
2796         d1.iota() ; d1+=0.3
2797         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2798         self.assertEqual(96,d2.getNumberOfTuples())
2799         self.assertEqual(1,d2.getNumberOfComponents())
2800         d2.iota() ; d2+=0.4
2801         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2802         self.assertEqual(80,d00.getNumberOfTuples())
2803         self.assertEqual(1,d00.getNumberOfComponents())
2804         d00.iota() ; d00+=0.5
2805         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2806         self.assertEqual(84,d10.getNumberOfTuples())
2807         self.assertEqual(1,d10.getNumberOfComponents())
2808         d10.iota() ; d10+=0.6
2809         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2810         self.assertEqual(60,d20.getNumberOfTuples())
2811         self.assertEqual(1,d20.getNumberOfComponents())
2812         d20.iota() ; d20+=0.7
2813         # the test is here ! To be called after iteration with no remesh
2814         att.synchronizeAllGhostZones()
2815         f=att.buildCellFieldOnWithGhost(amr,"Field")
2816         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2817         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2818         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2819         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2820         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2821         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2822         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))
2823         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))
2824         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))
2825         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))
2826         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))
2827         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))
2828         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],1).isEqual(DataArrayInt([0,4])))
2829         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],2).isEqual(DataArrayInt([0,1,5,6])))
2830         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],1).isEqual(DataArrayInt([0,6,49,55])))
2831         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],2).isEqual(DataArrayInt([0,8,10,16,73,79,81,89])))
2832         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6,3],1).isEqual(DataArrayInt([0,6,49,55,224,230,273,279])))
2833         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])))
2834         pass
2835
2836     def testSwig2AMR10(self):
2837         """ 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."""
2838         szGhost=2
2839         amr=MEDCouplingCartesianAMRMesh("",2,[11,11],[0,0],[0.1,0.1])
2840         amr.addPatch([(3,8),(0,3)],[2,2])
2841         amr[0].addPatch([(0,10),(3,6)],[3,3])
2842         amr[0].addPatch([(2,6),(0,3)],[3,3])
2843         amr[0].addPatch([(6,10),(2,3)],[3,3])
2844         amr.addPatch([(3,8),(3,6)],[2,2])
2845         amr[1].addPatch([(0,4),(0,6)],[3,3])
2846         amr[1].addPatch([(7,10),(0,4)],[3,3])
2847         amr[1].addPatch([(4,7),(0,3)],[3,3])
2848         amr[1].addPatch([(4,7),(3,6)],[3,3])
2849         amr.addPatch([(0,3),(6,10)],[2,2])
2850         self.assertEqual(([(30,39),(27,36)],[6,6]),amr[1][3].getMesh().positionRelativeToGodFather())
2851         self.assertEqual(([(6,16),(6,12)],[2,2]),amr[1].getMesh().positionRelativeToGodFather())
2852         self.assertTrue(not MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(6,16),(6,12)]))
2853         self.assertTrue(MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(28,32),(35,37)]))
2854         da=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.])
2855         MEDCouplingStructuredMesh.AssignPartOfFieldOfDoubleUsing([3,4],da,[(1,3),(2,3)],DataArrayDouble([7.7,8.8]))
2856         self.assertTrue(da.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.7,8.8,9.,10.,11.]),1e-12))
2857         att=MEDCouplingAMRAttribute(amr,[("YY",1)],szGhost)
2858         att.spillNatures([IntensiveMaximum])
2859         att.alloc()
2860         yy=att.getFieldOn(amr,"YY") ; yy.iota(0.01)
2861         yy=att.getFieldOn(amr[0].getMesh(),"YY") ; yy.iota(0.02)
2862         yy=att.getFieldOn(amr[1].getMesh(),"YY") ; yy.iota(0.03)
2863         yy=att.getFieldOn(amr[0][0].getMesh(),"YY") ; yy.iota(0.04)
2864         yy=att.getFieldOn(amr[0][1].getMesh(),"YY") ; yy.iota(0.05)
2865         yy=att.getFieldOn(amr[0][2].getMesh(),"YY") ; yy.iota(0.06)
2866         yy=att.getFieldOn(amr[1][0].getMesh(),"YY") ; yy.iota(0.07)
2867         yy=att.getFieldOn(amr[1][1].getMesh(),"YY") ; yy.iota(0.08)
2868         yy=att.getFieldOn(amr[1][2].getMesh(),"YY") ; yy.iota(0.09)
2869         yy=att.getFieldOn(amr[1][3].getMesh(),"YY") ; yy.iota(0.10)
2870         yy=att.getFieldOn(amr[2].getMesh(),"YY") ; yy.iota(0.11)
2871         att2=att.deepCopy() ; att3=att2.deepCopy() ; att4=att3.deepCopy() ; att5=att4.deepCopy() ; att6=att5.deepCopy()
2872         ###
2873         att.synchronizeFineToCoarseBetween(2,1)
2874         ###
2875         for pos in [(),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(1,3)]:
2876             self.assertTrue(att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2877             pass
2878         for pos in [(0,),(1,)]:
2879             self.assertTrue(not att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2880             pass
2881         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))
2882         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))
2883         del att
2884         ####
2885         att2.synchronizeAllGhostZonesOfDirectChidrenOf(att2.getMyGodFather())
2886         ### 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.
2887         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])
2888         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((2,)),"YY").isEqualWithoutConsideringStr(exp2,1e-12))
2889         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])
2890         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((1,)),"YY").isEqualWithoutConsideringStr(exp3,1e-12))
2891         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])
2892         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((0,)),"YY").isEqualWithoutConsideringStr(exp4,1e-12))
2893         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)]:
2894             vals=att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY")
2895             l=vals.getNumberOfTuples()
2896             exps=DataArrayDouble(l) ; exps.iota(iot)
2897             self.assertTrue(vals.isEqualWithoutConsideringStr(exps,1e-12))
2898             pass
2899         del att2
2900         ###
2901         att3.synchronizeCoarseToFineBetween(1,2)
2902         ###
2903         for pos in [(),(0,),(1,),(2,)]:
2904             self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2905             pass
2906         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])
2907         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp5,1e-12))
2908         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])
2909         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp6,1e-12))
2910         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])
2911         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp7,1e-12))
2912         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])
2913         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp8,1e-12))
2914         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])
2915         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp9,1e-12))
2916         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])
2917         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp10,1e-12))
2918         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])
2919         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp11,1e-12))
2920         del att3
2921         ###
2922         att4.synchronizeAllGhostZonesAtASpecifiedLevel(2)
2923         for pos in [(),(0,),(1,),(2,)]:
2924             self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2925             pass
2926         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])
2927         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp12,1e-12))
2928         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]])
2929         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp13,1e-12))
2930         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])
2931         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp14,1e-12))
2932         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])
2933         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp15,1e-12))
2934         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])
2935         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp16,1e-12))
2936         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])
2937         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp17,1e-12))
2938         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])
2939         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp18,1e-12))
2940         del att4
2941         ###
2942         att5.synchronizeAllGhostZonesAtASpecifiedLevelUsingOnlyFather(2)
2943         for pos in [(),(0,),(1,),(2,)]:
2944             self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att6.getFieldOn(att6.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2945             pass
2946         att5.buildCellFieldOnWithGhost(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY")
2947         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])
2948         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp19,1e-12))
2949         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])
2950         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp20,1e-12))
2951         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])
2952         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp21,1e-12))
2953         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])
2954         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp22,1e-12))
2955         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])
2956         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp23,1e-12))
2957         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])
2958         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp24,1e-12))
2959         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])
2960         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp25,1e-12))
2961         pass
2962
2963     def testSwig2AMR11(self):
2964         """ Some tests in 3D with CondenseFineToCoarseGhost and SpreadCoarseToFineGhost"""
2965         coarse=DataArrayDouble((6+4)*(7+4)*(5+4)) ; coarse.iota()
2966         fine=DataArrayDouble((4*2+4)*(2*3+4)*(3*4+4))
2967         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
2968         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.])
2969         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.])
2970         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.])
2971         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.])
2972         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.])
2973         exp=DataArrayDouble.Aggregate([exp0,exp0,exp1,exp1,exp1,exp1,exp2,exp2,exp2,exp2,exp3,exp3,exp3,exp3,exp4,exp4])
2974         self.assertTrue(fine.isEqual(exp,1e-12))
2975         #
2976         fine.iota()
2977         coarse.iota(0.5)
2978         MEDCouplingIMesh.CondenseFineToCoarseGhost([6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],coarse,2)
2979         amr=MEDCouplingCartesianAMRMesh("mesh",3,[7,8,6],[0.,0.,0.],[1.,1.,1.])
2980         amr.addPatch([(1,5),(2,4),(1,4)],[2,3,4])
2981         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
2982         att.alloc()
2983         exp1=DataArrayDouble(990) ; exp1.iota(0.5)
2984         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])
2985         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.])
2986         exp1[ids]=vals
2987         self.assertTrue(coarse.isEqual(exp1,1e-12))
2988         #
2989         MEDCouplingStructuredMesh.MultiplyPartOf([10,11,9],[(3,7),(4,6),(3,6)],1/24.,coarse)
2990         exp2=DataArrayDouble(990) ; exp2.iota(0.5)
2991         exp2[ids]=vals/24.
2992         self.assertTrue(coarse.isEqual(exp2,1e-12))
2993         #
2994         coarse.iota(0.5) ; fine.iota(0.1)
2995         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
2996         #
2997         coarse.iota(0.5) ; fine.iota(0.1)
2998         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
2999         exp00=DataArrayDouble.Aggregate([exp0,exp0]) ; exp00+=0.5
3000         self.assertTrue(fine[:240].isEqual(exp00,1e-12))
3001         exp44=DataArrayDouble.Aggregate([exp4,exp4]) ; exp44+=0.5
3002         self.assertTrue(fine[-240:].isEqual(exp44,1e-12))
3003         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))
3004         pass
3005
3006     def testSwig2AMR12(self):
3007         """ This test check the MEDCouplingAMRAttribute.projectTo method."""
3008         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3009         amr0.addPatch([(3,8),(0,3)],[2,2])
3010         amr0.addPatch([(3,8),(3,6)],[2,2])
3011         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3012         att0.alloc()
3013         att0.getFieldOn(amr0,"YY").iota(0.01)
3014         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3015         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3016         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3017         amr1.addPatch([(2,5),(1,4)],[2,2])
3018         att1=att0.projectTo(amr1)
3019         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqualWithoutConsideringStr(att0.getFieldOn(amr0,"YY"),1e-12))
3020         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))
3021         #
3022         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3023         amr0.addPatch([(2,5),(2,7)],[2,2])
3024         amr0.addPatch([(5,8),(2,7)],[2,2])
3025         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3026         att0.alloc()
3027         att0.getFieldOn(amr0,"YY").iota(0.01)
3028         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3029         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3030         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3031         amr1.addPatch([(3,6),(2,7)],[2,2])
3032         amr1.addPatch([(6,9),(2,7)],[2,2])
3033         att1=att0.projectTo(amr1)
3034         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqual(att0.getFieldOn(amr0,"YY"),1e-12))
3035         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))
3036         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))
3037         pass
3038
3039     def testSwig2AMR13(self):
3040         """ non regression test"""
3041         for fact,len1,len2 in [([2,2],64,48),([3,3],100,70),([4,4],144,96)]:
3042             amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3043             amr.addPatch([(1,3),(0,2)],fact)
3044             amr.addPatch([(1,3),(3,4)],fact)
3045             att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3046             att.alloc()
3047             att.getFieldOn(amr,"YY").iota(0.1)
3048             att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3049             att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3050             att.synchronizeAllGhostZonesOfDirectChidrenOf(amr)
3051             exp=DataArrayDouble(64) ; exp.iota(0.1)
3052             self.assertTrue(att.getFieldOn(amr,"YY").isEqualWithoutConsideringStr(exp,1e-12))
3053             exp0=DataArrayDouble(len1) ; exp0.iota(0.2)
3054             self.assertTrue(att.getFieldOn(amr[0].getMesh(),"YY").isEqualWithoutConsideringStr(exp0,1e-12))
3055             exp1=DataArrayDouble(len2) ; exp1.iota(0.3)
3056             self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(exp1,1e-12))
3057             pass
3058         pass
3059
3060     def testSwig2AMR14(self):
3061         """ non regression linked to VTHB write."""
3062         fact=[2,2] ; fact2=[3,3]
3063         amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3064         amr.addPatch([(1,3),(0,2)],fact)
3065         amr.addPatch([(1,3),(3,4)],fact)
3066         amr[0].addPatch([(1,3),(1,3)],fact2)
3067         amr[1].addPatch([(1,3),(1,2)],fact2)
3068         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3069         att.alloc()
3070         att.getFieldOn(amr,"YY").iota(0.1)
3071         att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3072         att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3073         att.getFieldOn(amr[0][0].getMesh(),"YY").iota(0.4)
3074         att.getFieldOn(amr[1][0].getMesh(),"YY").iota(0.5)
3075         self.assertEqual(amr[0].getBLTRRangeRelativeToGF(),[(2,6),(0,4)])
3076         self.assertEqual(amr[1].getBLTRRangeRelativeToGF(),[(2,6),(6,8)])
3077         self.assertEqual(amr[0][0].getBLTRRangeRelativeToGF(),[(9,15),(3,9)])
3078         self.assertEqual(amr[1][0].getBLTRRangeRelativeToGF(),[(9,15),(21,24)])
3079         pass
3080
3081     def testOrderConsecutiveCells1D1(self):
3082         """A line in several unconnected pieces:"""
3083         m2 = MEDCouplingUMesh.New("bla", 1)
3084         c = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,4,
3085                                NORM_SEG3,5,7,6, NORM_SEG3,7,9,8, NORM_SEG2,9,10,
3086                                NORM_SEG2,11,12,NORM_SEG2,12,13,
3087                                NORM_SEG2,14,15])
3088         cI = DataArrayInt([0,3,7,10,14,18,21,24,27,30])
3089         coords2 = DataArrayDouble([float(i) for i in range(32)], 16, 2)
3090         m2.setCoords(coords2);
3091         m2.setConnectivity(c, cI);
3092         m2.checkConsistency(1.0e-8);
3093
3094         # Shuffle a bit :-)
3095         m2.renumberCells(DataArrayInt([0,3,6,8,1,4,7,5,2]), True);
3096         res = m2.orderConsecutiveCells1D()
3097         expRes = [0,3,6,8,1,4,2,7,5]
3098         self.assertEqual(m2.getNumberOfCells(),res.getNumberOfTuples())
3099         self.assertEqual(expRes, res.getValues())
3100
3101         # A closed line (should also work)
3102         m3 = MEDCouplingUMesh.New("bla3", 1)
3103         conn3A = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,0])
3104         coord3 = coords2[0:5]
3105         c.reAlloc(10)
3106         cI.reAlloc(4)
3107
3108         m3.setCoords(coord3)
3109         m3.setConnectivity(conn3A, cI)
3110         m3.checkConsistency(1.0e-8)
3111         res2 = m3.orderConsecutiveCells1D()
3112         expRes2 = [0,1,2]
3113         self.assertEqual(m3.getNumberOfCells(),res2.getNumberOfTuples())
3114         self.assertEqual(expRes2, res2.getValues())
3115         pass
3116
3117     def testDADApplyFuncOnThis1(self):
3118         d=DataArrayDouble(5) ; d.iota(0.)
3119         d.applyFuncOnThis("2*x+1")
3120         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.]),1e-12))
3121         d=DataArrayDouble(6) ; d.iota(0.) ; d.rearrange(2)
3122         d.applyFuncOnThis("2*x+1")
3123         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.,11.],3,2),1e-12))
3124         d.applyFuncOnThis("1+2*3")
3125         self.assertTrue(d.isEqual(DataArrayDouble([(7.,7.),(7.,7.),(7.,7.)]),1e-12))
3126         pass
3127
3128     def testSwig2PointSetComputeFetchedNodeIds1(self):
3129         arr=DataArrayDouble(6) ; arr.iota()
3130         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3131         m=m.buildUnstructured()
3132         m0=m[[0,1,5,6,25,26,30,31,124]]
3133         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])
3134         self.assertTrue(m0.computeFetchedNodeIds().isEqual(ref))
3135         self.assertTrue(MEDCoupling1SGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3136         self.assertEqual(m0.getAllGeoTypes(),[NORM_HEXA8])
3137         m0.convertAllToPoly()
3138         self.assertEqual(m0.getAllGeoTypes(),[NORM_POLYHED])
3139         self.assertTrue(MEDCoupling1DGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3140         pass
3141
3142     def testSwig2PartDefinition1(self):
3143         pd=PartDefinition.New(5,22,3)
3144         self.assertTrue(isinstance(pd,SlicePartDefinition))
3145         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3146         self.assertEqual(pd.getNumberOfElems(),6)
3147         self.assertEqual(pd.getEffectiveStop(),23)
3148         pd=PartDefinition.New(5,23,3)
3149         self.assertTrue(isinstance(pd,SlicePartDefinition))
3150         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3151         self.assertEqual(pd.getNumberOfElems(),6)
3152         self.assertEqual(pd.getEffectiveStop(),23)
3153         self.assertEqual(pd.getSlice(),slice(5,23,3))
3154         pd=PartDefinition.New(5,22,1)
3155         self.assertTrue(isinstance(pd,SlicePartDefinition))
3156         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3157         self.assertEqual(pd.getNumberOfElems(),17)
3158         self.assertEqual(pd.getEffectiveStop(),22)
3159         pd=PartDefinition.New(5,23,3)+PartDefinition.New(23,27,3)
3160         self.assertTrue(isinstance(pd,SlicePartDefinition))
3161         self.assertEqual(pd.getNumberOfElems(),8)
3162         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20,23,26])))
3163         self.assertEqual(pd.getEffectiveStop(),29)
3164         pd=SlicePartDefinition(5,22,1)
3165         self.assertTrue(isinstance(pd,SlicePartDefinition))
3166         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3167         self.assertEqual(pd.getNumberOfElems(),17)
3168         self.assertEqual(pd.getEffectiveStop(),22)
3169         d=DataArrayInt([2,4,5,6,10])
3170         pd=PartDefinition.New(d)
3171         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3172         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3173         pd=DataArrayPartDefinition(d)
3174         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3175         pd=DataArrayPartDefinition(d)+DataArrayPartDefinition(DataArrayInt([12,14,20]))
3176         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3177         self.assertEqual(pd.getNumberOfElems(),8)
3178         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([2,4,5,6,10,12,14,20])))
3179         pass
3180
3181     def testSwig2SortEachPairToMakeALinkedList1(self):
3182         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)])
3183         d.sortEachPairToMakeALinkedList()
3184         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)])))
3185         d=DataArrayInt([(0,2),(1,2),(1,3)])
3186         d.sortEachPairToMakeALinkedList()
3187         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3188         d=DataArrayInt([(0,2),(1,2),(3,1)])
3189         d.sortEachPairToMakeALinkedList()
3190         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3191         d=DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])
3192         d.sortEachPairToMakeALinkedList()
3193         self.assertTrue(d.isEqual(DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])))
3194         pass
3195
3196     def testSwig2DAIIsRange(self):
3197         d=DataArrayInt([2,6,10])
3198         a,b=d.isRange()
3199         self.assertTrue(a)
3200         self.assertEqual(b,slice(2,11,4))
3201         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3202         #
3203         d=DataArrayInt([2,7,10])
3204         a,b=d.isRange()
3205         self.assertTrue(not a)
3206         self.assertTrue(b is None)
3207         #
3208         d=DataArrayInt([22,17,12])
3209         a,b=d.isRange()
3210         self.assertTrue(a)
3211         self.assertEqual(b,slice(22,11,-5))
3212         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3213         #
3214         d=DataArrayInt([22,16,12])
3215         a,b=d.isRange()
3216         self.assertTrue(not a)
3217         self.assertTrue(b is None)
3218         #
3219         d=DataArrayInt([33])
3220         a,b=d.isRange()
3221         self.assertTrue(a)
3222         self.assertEqual(b,slice(33,34,1))
3223         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3224         #
3225         d=DataArrayInt([])
3226         a,b=d.isRange()
3227         self.assertTrue(a)
3228         self.assertEqual(b,slice(0,0,1))
3229         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3230         #
3231         d=DataArrayInt([2,6,10,2])
3232         a,b=d.isRange()
3233         self.assertTrue(not a)
3234         self.assertTrue(b is None)
3235         pass
3236
3237     def testSwig2PartDefinitionComposeWith1(self):
3238         f=PartDefinition.New(DataArrayInt([0,1,2,3,6,7,8,9]))
3239         g=PartDefinition.New(4,14,1)
3240         g2=g.deepCopy()
3241         self.assertTrue(g2.isEqual(g)[0])
3242         h=f.composeWith(g)
3243         self.assertTrue(isinstance(h,DataArrayPartDefinition))
3244         self.assertTrue(h.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3245         f2=f.tryToSimplify()
3246         g2=g.tryToSimplify()
3247         self.assertEqual(f2.getHiddenCppPointer(),f.getHiddenCppPointer())# same because no simplification due to content of array
3248         self.assertEqual(g2.getHiddenCppPointer(),g.getHiddenCppPointer())# same because no simplification linked to type of PartDef
3249         p=PartDefinition.New(DataArrayInt([2,6,10]))
3250         p2=p.tryToSimplify()
3251         self.assertNotEqual(p2.getHiddenCppPointer(),p.getHiddenCppPointer())
3252         self.assertTrue(isinstance(p2,SlicePartDefinition))
3253         self.assertEqual(p2.getSlice(),slice(2,11,4))
3254         self.assertTrue(p2.isEqual(SlicePartDefinition(2,11,4))[0])
3255         self.assertTrue(p2.isEqual(p2.deepCopy())[0])
3256         self.assertTrue(not p2.isEqual(SlicePartDefinition(1,11,4))[0])
3257         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,10,4))[0])
3258         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,11,3))[0])
3259         pass
3260
3261     def testSwig2DAIGetIdsStrictlyNegative1(self):
3262         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3263         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([1,2,6])))
3264         pass
3265
3266     def testSwig2DAIReplaceOneValByInThis1(self):
3267         d=DataArrayInt([4,-5,-1,0,-5,99,-7,5])
3268         d.changeValue(-5,900)
3269         self.assertTrue(d.isEqual(DataArrayInt([4,900,-1,0,900,99,-7,5])))
3270         pass
3271
3272     def testSwig2DAIGetMinMaxValues1(self):
3273         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3274         a,b=d.getMinMaxValues()
3275         self.assertEqual(a,-7)
3276         self.assertEqual(b,99)
3277         pass
3278
3279     def testSwig2DAIBuildUniqueNotSorted1(self):
3280         d=DataArrayInt([-5,3,2,-1,2,3,-6,4,2,-5,3,7])
3281         self.assertTrue(d.buildUniqueNotSorted().isEqual(DataArrayInt([-5,3,2,-1,-6,4,7])))
3282         pass
3283
3284     def testSwig2UMeshChangeOrientationOfCells1(self):
3285         """ Here testing changeOrientationOfCell method on unstructured meshes lying on no coords."""
3286         m=MEDCouplingUMesh("mesh",1)
3287         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])
3288         cI=DataArrayInt([0,3,6,10,14,17,22,27])
3289         m.setConnectivity(c,cI)
3290         m.changeOrientationOfCells()
3291         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])))
3292         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3293         # testing 2D cells
3294         m=MEDCouplingUMesh("mesh",2)
3295         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])
3296         cI=DataArrayInt([0,4,9,15,22,31,42])
3297         m.setConnectivity(c,cI)
3298         m.changeOrientationOfCells()
3299         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])))
3300         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3301         pass
3302
3303     def testSwig2StructuredMeshCellLocation1(self):
3304         # 3D
3305         arrX=DataArrayDouble(5) ; arrX.iota()
3306         arrY=DataArrayDouble(4) ; arrY.iota()
3307         arrZ=DataArrayDouble(3) ; arrZ.iota()
3308         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3309         li=[]
3310         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)]
3311         self.assertEqual(24,m.getNumberOfCells())
3312         for i in range(m.getNumberOfCells()):
3313             li.append(m.getLocationFromCellId(i))
3314             pass
3315         self.assertEqual(liExp3D,li)
3316         self.assertRaises(InterpKernelException,m.getLocationFromCellId,24)
3317         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3318         # 2D
3319         arrX=DataArrayDouble(5) ; arrX.iota()
3320         arrY=DataArrayDouble(4) ; arrY.iota()
3321         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3322         li=[]
3323         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)]
3324         self.assertEqual(12,m.getNumberOfCells())
3325         for i in range(m.getNumberOfCells()):
3326             li.append(m.getLocationFromCellId(i))
3327             pass
3328         self.assertEqual(liExp2D,li)
3329         self.assertRaises(InterpKernelException,m.getLocationFromCellId,12)
3330         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3331         # 1D
3332         arrX=DataArrayDouble(5) ; arrX.iota()
3333         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3334         self.assertEqual(4,m.getNumberOfCells())
3335         for i in range(m.getNumberOfCells()):
3336             self.assertEqual((i,),m.getLocationFromCellId(i))
3337             pass
3338         self.assertRaises(InterpKernelException,m.getLocationFromCellId,4)
3339         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3340         pass
3341
3342     def testSwig2StructuredMeshNodeLocation1(self):
3343         # 3D
3344         arrX=DataArrayDouble(5) ; arrX.iota()
3345         arrY=DataArrayDouble(4) ; arrY.iota()
3346         arrZ=DataArrayDouble(3) ; arrZ.iota()
3347         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3348         li=[]
3349         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)]
3350         self.assertEqual(60,m.getNumberOfNodes())
3351         for i in range(m.getNumberOfNodes()):
3352             li.append(m.getLocationFromNodeId(i))
3353             pass
3354         self.assertEqual(liExp3D,li)
3355         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,60)
3356         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3357         # 2D
3358         arrX=DataArrayDouble(5) ; arrX.iota()
3359         arrY=DataArrayDouble(4) ; arrY.iota()
3360         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3361         li=[]
3362         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)]
3363         self.assertEqual(20,m.getNumberOfNodes())
3364         for i in range(m.getNumberOfNodes()):
3365             li.append(m.getLocationFromNodeId(i))
3366             pass
3367         self.assertEqual(liExp2D,li)
3368         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,20)
3369         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3370         # 1D
3371         arrX=DataArrayDouble(5) ; arrX.iota()
3372         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3373         self.assertEqual(5,m.getNumberOfNodes())
3374         for i in range(m.getNumberOfNodes()):
3375             self.assertEqual((i,),m.getLocationFromNodeId(i))
3376             pass
3377         self.assertRaises(InterpKernelException,m.getLocationFromCellId,5)
3378         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3379         pass
3380
3381     def testSwig2DataArrayPrintNotTooLong1(self):
3382         """ Now that DataArrayDouble and DataArrayInt and pickelized they can appear in YACS ports. Avoid to have too heavy string representation of them."""
3383         d=DataArrayDouble(2000) ; d.iota() ; d.rearrange(2)
3384         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3385         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3386         self.assertEqual(st1,st2)
3387         #
3388         d=DataArrayDouble(2002) ; d.iota() ; d.rearrange(2)
3389         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3390         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3391         self.assertEqual(st1,st2)
3392         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3393         ## Now for DataArrayInt
3394         d=DataArrayInt(2000) ; d.iota() ; d.rearrange(2)
3395         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3396         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3397         self.assertEqual(st1,st2)
3398         #
3399         d=DataArrayInt(2002) ; d.iota() ; d.rearrange(2)
3400         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3401         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3402         self.assertEqual(st1,st2)
3403         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3404         pass
3405
3406     def testExtrudedMeshWithoutZipCoords1(self):
3407         """This test checks that MEDCouplingUMesh.buildExtrudedMesh do not perform a zipCoords."""
3408         arr=DataArrayDouble([(0.,0.),(1.,0.),(2.,0.),(3.,0.)])
3409         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(arr)
3410         m.allocateCells()
3411         m.insertNextCell(NORM_SEG2,[1,2])
3412         arr1D=DataArrayDouble([(0.,0.),(0.,1.5),(0.,2.)])
3413         m1D=MEDCouplingUMesh("mesh1D",1) ; m1D.setCoords(arr1D)
3414         m1D.allocateCells()
3415         m1D.insertNextCell(NORM_SEG2,[0,1])
3416         m1D.insertNextCell(NORM_SEG2,[1,2])
3417         m2D=m.buildExtrudedMesh(m1D,0)
3418         self.assertEqual(m.getCoords().getHiddenCppPointer(),m2D.getCoords().getHiddenCppPointer())
3419         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)])
3420         self.assertTrue(m.getCoords().isEqual(coo,1e-12))
3421         self.assertTrue(m2D.getNodalConnectivity().isEqual(DataArrayInt([4,1,2,6,5,4,5,6,10,9])))
3422         self.assertTrue(m2D.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10])))
3423         pass
3424
3425     def testPointSetAreAllNodesFetched1(self):
3426         m=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
3427         m.setCoords(arr,arr)
3428         m=m.buildUnstructured()
3429         self.assertTrue(m.areAllNodesFetched())
3430         m2=m[[0,2,3,4,5]]
3431         self.assertTrue(not m2.areAllNodesFetched())
3432         m2.zipCoords()
3433         self.assertTrue(m2.areAllNodesFetched())
3434         pass
3435
3436     def testMEDCouplingPointSetComputeDiameterField1(self):
3437         arrX=DataArrayDouble([0.,1.1,1.7,2.1])
3438         arrY=DataArrayDouble([0.,0.7,0.8,1.9])
3439         arrZ=DataArrayDouble([0.,1.3,2.1,2.4])
3440         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
3441         f=m.computeDiameterField()
3442         f.checkConsistencyLight()
3443         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])
3444         self.assertTrue(exp.isEqual(f.getArray(),1e-12))
3445         m1=m[::2]
3446         m2=m[1::2]
3447         m2.simplexize(PLANAR_FACE_5)
3448         m3=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
3449         f=m3.computeDiameterField()
3450         f.checkConsistencyLight()
3451         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])
3452         self.assertTrue(exp2.isEqual(f.getArray(),1e-12))
3453         # TRI3 - spacedim = 2
3454         coo=DataArrayDouble([(1,1),(5,1.9),(2.1,3)])
3455         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3456         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3457             m.setNodalConnectivity(DataArrayInt(c))
3458             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3459             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3460             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3461             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3462             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3463         # TRI3 - spacedim = 3
3464         coo=DataArrayDouble([(1.3198537928820775,1.0991902391274959,-0.028645697595823361),(5.2486835106806335,2.2234012799688281,0.30368935050077939),(2.2973688139447361,3.1572023778066649,0.10937756365410012)])
3465         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3466         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3467             m.setNodalConnectivity(DataArrayInt(c))
3468             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3469             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3470             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3471             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3472             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3473         # QUAD4 - spacedim = 2
3474         coo=DataArrayDouble([(0,2),(2,0),(6,4),(4,9)])
3475         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3476         exp3=sqrt(85.)
3477         for delta in range(4):
3478             c = [(elt + delta) % 4 for elt in range(4)]
3479             m.setNodalConnectivity(DataArrayInt(c))
3480             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3481             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3482             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3483             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3484             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3485             c.reverse()
3486             m.setNodalConnectivity(DataArrayInt(c))
3487             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3488             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3489             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3490             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3491             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3492         # QUAD4 - spacedim = 3
3493         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)])
3494         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3495         for delta in range(4):
3496             c = [(elt + delta) % 4 for elt in range(4)]
3497             m.setNodalConnectivity(DataArrayInt(c))
3498             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3499             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3500             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3501             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3502             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3503             c.reverse()
3504             m.setNodalConnectivity(DataArrayInt(c))
3505             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3506             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3507             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3508             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3509             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3510         # PENTA6
3511         # 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)
3512         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)])
3513         m=MEDCoupling1SGTUMesh("mesh",NORM_PENTA6) ; m.setCoords(coo)
3514         exp4=2.5041256256889888
3515         self.assertAlmostEqual(exp4,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3516         for delta in range(3):
3517             c = [(elt + delta) % 3 for elt in range(3)]
3518             c+=[elt+3 for elt in c]
3519             m.setNodalConnectivity(DataArrayInt(c))
3520             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3521             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3522             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3523             c.reverse()
3524             m.setNodalConnectivity(DataArrayInt(c))
3525             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3526             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3527             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3528         # HEXA8
3529         # 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)
3530         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)])
3531         m=MEDCoupling1SGTUMesh("mesh",NORM_HEXA8) ; m.setCoords(coo)
3532         exp5=2.5366409441884215
3533         self.assertAlmostEqual(exp5,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3534         for delta in range(4):
3535             c = [(elt + delta) % 4 for elt in range(4)]
3536             c+=[elt+4 for elt in c]
3537             m.setNodalConnectivity(DataArrayInt(c))
3538             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3539             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3540             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3541             c.reverse()
3542             m.setNodalConnectivity(DataArrayInt(c))
3543             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3544             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3545             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3546         # PYRA5 (1) 5th node is further
3547         # 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)
3548         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)])
3549         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3550         exp6=2.1558368027391386
3551         self.assertAlmostEqual(exp6,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3552         for delta in range(4):
3553             c = [(elt + delta) % 4 for elt in range(4)]
3554             c+=[4]
3555             m.setNodalConnectivity(DataArrayInt(c))
3556             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp6,12)
3557             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3558             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp6,12)
3559             pass
3560         # PYRA5 (2) 5th node is closer
3561         # 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)
3562         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)])
3563         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3564         exp7=1.4413563787228953
3565         self.assertAlmostEqual(exp7,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3566         for delta in range(4):
3567             c = [(elt + delta) % 4 for elt in range(4)]
3568             c+=[4]
3569             m.setNodalConnectivity(DataArrayInt(c))
3570             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp7,12)
3571             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3572             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp7,12)
3573             pass
3574         # TETRA4
3575         # 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)
3576         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)])
3577         m=MEDCoupling1SGTUMesh("mesh",NORM_TETRA4) ; m.setCoords(coo)
3578         exp8=1.7131322579364157
3579         self.assertAlmostEqual(exp8,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3580         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]]:
3581             for i in range(4):
3582                 m.setNodalConnectivity(DataArrayInt([(elt+i)%4 for elt in c]))
3583                 self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp8,12)
3584                 m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3585                 self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp8,12)
3586                 pass
3587             pass
3588         pass
3589
3590     def testMEDCouplingSkyLineArray(self):
3591         index = DataArrayInt([ 0, 3, 5, 6, 6 ])
3592         value = DataArrayInt([ 1, 2, 3, 2, 3, 3 ])
3593
3594         sla0 = MEDCouplingSkyLineArray()
3595         self.assertEqual( -1, sla0.getNumberOf() )
3596         self.assertEqual( 0,  sla0.getLength() )
3597         sla0.set( index, value )
3598         self.assertTrue( index.isEqual( sla0.getIndexArray() ))
3599         self.assertTrue( value.isEqual( sla0.getValuesArray() ))
3600         self.assertEqual( 4, sla0.getNumberOf() )
3601         self.assertEqual( 6, sla0.getLength() )
3602
3603         sla1 = MEDCouplingSkyLineArray( index, value )
3604         self.assertTrue( index.isEqual( sla1.getIndexArray() ))
3605         self.assertTrue( value.isEqual( sla1.getValuesArray() ))
3606         self.assertEqual( 4, sla1.getNumberOf() )
3607         self.assertEqual( 6, sla1.getLength() )
3608
3609         sla2 = MEDCouplingSkyLineArray( sla1 )
3610         self.assertTrue( index.isEqual( sla2.getIndexArray() ))
3611         self.assertTrue( value.isEqual( sla2.getValuesArray() ))
3612         self.assertEqual( 4, sla2.getNumberOf() )
3613         self.assertEqual( 6, sla2.getLength() )
3614
3615         indexVec = ivec(); indexVec.reserve( len( index ))
3616         for i in index: indexVec.push_back( i[0] )
3617         valueVec = ivec(); valueVec.reserve( len( value ))
3618         for i in value: valueVec.push_back( i[0] )
3619         sla3 = MEDCouplingSkyLineArray( indexVec, valueVec )
3620         self.assertTrue( index.isEqual( sla3.getIndexArray() ))
3621         self.assertTrue( value.isEqual( sla3.getValuesArray() ))
3622         self.assertEqual( 4, sla3.getNumberOf() )
3623         self.assertEqual( 6, sla3.getLength() )
3624
3625         pass
3626
3627     def testMEDCouplingSkyLineArrayThreeLevels(self):
3628         #  [[28,1,4]] , [[2,35,8], [9,10,1,12]]
3629         superi = DataArrayInt([ 0,1,3 ])
3630         index = DataArrayInt ([ 0,3,6,10 ])
3631         value = DataArrayInt ([ 28,1,4,2,35,8,9,10,1,12 ])
3632
3633         sla0 = MEDCouplingSkyLineArray()
3634         self.assertEqual( -1, sla0.getSuperNumberOf() )
3635         self.assertEqual( -1, sla0.getNumberOf() )
3636         self.assertEqual( 0,  sla0.getLength() )
3637         sla0.set3( superi.deepCopy(), index.deepCopy(), value.deepCopy() )
3638         self.assertTrue( superi.isEqual( sla0.getSuperIndexArray() ))
3639
3640         pack = sla0.getSimplePackSafe(2)
3641         self.assertEqual([9,10,1,12], pack)
3642         ids = sla0.findPackIds([0,1], [9,10,1,12])
3643         self.assertEqual([-1,1], ids)
3644
3645         sla0.deletePack(1, 1)
3646         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3647         self.assertEqual([28,1,4,2,35,8], val.getValues())
3648         self.assertEqual([0,3,6], idx.getValues())
3649         self.assertEqual([0,1,2], si.getValues())
3650
3651         sla0.pushBackPack(0, [3,2,1,0])
3652         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3653         self.assertEqual([0,2,3], si.getValues())
3654         self.assertEqual([0,3,7,10], idx.getValues())
3655         self.assertEqual([28,1,4,3,2,1,0,  2,35,8], val.getValues())
3656
3657         # Build connectivity from POLYHED connectivity
3658         cI = [0,16,41]
3659         c = [NORM_POLYHED, 1,2,3,-1,  2,3,4,-1,  3,4,5,-1,  4,5,6,
3660              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]
3661         sla0 = MEDCouplingSkyLineArray.BuildFromPolyhedronConn(DataArrayInt(c), DataArrayInt(cI))
3662         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3663         self.assertEqual([0,4,9], si.getValues())
3664         self.assertEqual([0,3,6,9,12,16,20,24,28,32], idx.getValues())
3665         self.assertEqual([1,2,3,  2,3,4,  3,4,5,  4,5,6,
3666                           7,8,9,10,   9,10,11,12,  3,4,5,6,  5,6,7,8,  9,10,11,12], val.getValues())
3667         c1, cI1 = sla0.convertToPolyhedronConn()
3668         self.assertEqual(c1.getValues(), c)
3669         self.assertEqual(cI1.getValues(), cI)
3670         pass
3671
3672     def testMEDCouplingSkyLineArrayThreeLevels2(self):
3673         si = [0, 9, 15, 21]
3674         siRef = [0, 9, 16, 22]
3675         idx = [0,4,8,12,16,20,23,26,29,  32,36,40,44,48,52,  56,60,64,68,72,76,80]
3676         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,
3677              9,1,3,10,  11,12,7,5,  9,11,5,1,  1,5,7,3,  3,7,12,10,  10,12,11,9,
3678              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3679         idxRef = [0,4,8,12,16,20,23,26,29,32,36,40,44,48,52,55,58, 62, 66, 70, 74, 78, 82 ]
3680         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,
3681              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,
3682              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3683         sla0 = MEDCouplingSkyLineArray()
3684         sla0.set3( DataArrayInt(si), DataArrayInt(idx), DataArrayInt(c) )
3685         ids = sla0.findPackIds([1], [1,5,7,3])
3686         sla0.deletePack(1, ids[0])
3687         sla0.pushBackPack(1, [3,7,8])
3688         sla0.pushBackPack(1, [7,5,8])
3689         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3690         self.assertEqual(siRef, si.getValues())
3691         self.assertEqual(idxRef, idx.getValues())
3692         self.assertEqual(cRef, val.getValues())
3693
3694         idxRef2 = [0,4,8,12,16,20,23,26,29,32,36,40,42,46,50,53,56, 60, 64, 68, 72, 76, 80 ]
3695         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,
3696              9,1,3,10,  11,12,7,5,  300,300,  3,7,12,10,  10,12,11,9,  3,7,8,  7,5,8,
3697              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3698         sla0.replacePack(1,2, [300,300])
3699         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3700         self.assertEqual(siRef, si.getValues())
3701         self.assertEqual(idxRef2, idx.getValues())
3702         self.assertEqual(cRef2, val.getValues())
3703
3704         sla0.replacePack(1,2, [9,11,5,1])
3705         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3706         self.assertEqual(siRef, si.getValues())
3707         self.assertEqual(idxRef, idx.getValues())
3708         self.assertEqual(cRef, val.getValues())
3709
3710         sla0.replaceSimplePack(11, [300,300])  # 11 is the abs index of pack (superIdx=1,idx=2)
3711         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3712         self.assertEqual(siRef, si.getValues())
3713         self.assertEqual(idxRef2, idx.getValues())
3714         self.assertEqual(cRef2, val.getValues())
3715
3716         sla0.replaceSimplePack(11, [9,11,5,1])  # 11 is the abs index of pack (superIdx=1,idx=2)
3717         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3718         self.assertEqual(siRef, si.getValues())
3719         self.assertEqual(idxRef, idx.getValues())
3720         self.assertEqual(cRef, val.getValues())
3721         pass
3722
3723     def testMEDCouplingUMeshgenerateGraph(self):
3724         # cartesian mesh 3x3
3725         arr=DataArrayDouble(4) ; arr.iota()
3726         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
3727         m=c.buildUnstructured()
3728         graph = m.generateGraph()
3729         # 0 1 2
3730         # 3 4 5
3731         # 6 7 8
3732         valRef=[ 0,1,3,
3733                  0,1,2,4,
3734                  1,2,5,
3735                  0,3,4,6,
3736                  1,3,4,5,7,
3737                  2,4,5,8,
3738                  3,6,7,
3739                  4,6,7,8,
3740                  5,7,8]
3741         self.assertEqual(valRef,list(graph.getValuesArray().getValues()));
3742
3743         indRef=[0, 3, 7, 10, 14, 19, 23, 26, 30, 33]
3744         self.assertEqual(indRef,list(graph.getIndexArray().getValues()));
3745         pass
3746
3747     def testSwig2MEDCouplingCurveLinearReprQuick1(self):
3748         """Non regression test. Error in m.__str__ when m is a MEDCouplingCurveLinear with spaceDim != meshDim."""
3749         arr=DataArrayDouble(12) ; arr.iota() ; arr.rearrange(2)
3750         m=MEDCouplingCurveLinearMesh()
3751         m.setCoords(arr)
3752         m.setNodeGridStructure([3,2])
3753         m.checkConsistencyLight()
3754         self.assertEqual(m.getMeshDimension(),2)
3755         self.assertEqual(m.getSpaceDimension(),2)
3756         self.assertTrue(not "mismatch" in m.__str__())
3757         self.assertTrue(not "mismatch" in m.__repr__())
3758         #
3759         arr=DataArrayDouble(18) ; arr.iota() ; arr.rearrange(3)
3760         m.setCoords(arr)
3761         self.assertEqual(m.getMeshDimension(),2)
3762         self.assertEqual(m.getSpaceDimension(),3)
3763         self.assertTrue(not "mismatch" in m.__str__())
3764         self.assertTrue(not "mismatch" in m.__repr__())# bug was here !
3765         pass
3766
3767     def testSwig2BugComputeOffsets1(self):
3768         """Non regression test. computeOffsetsFull on empty array must return 0."""
3769         d=DataArrayInt([3])
3770         d.computeOffsetsFull()
3771         self.assertTrue(d.isEqual(DataArrayInt([0,3])))
3772         d=DataArrayInt([])
3773         d.computeOffsets()
3774         self.assertTrue(d.isEqual(DataArrayInt([])))
3775         d=DataArrayInt([])
3776         d.computeOffsetsFull()
3777         self.assertTrue(d.isEqual(DataArrayInt([0]))) # <- bug was here
3778         pass
3779
3780     def testSwig2Cartesianize1(self):
3781         """Test of engine of cartesianize mechanism in medcoupling"""
3782         # cyl 2D
3783         arr=DataArrayDouble([(3,0.2),(2,1.6)]) ; arr.setInfoOnComponents(["A","BB"])
3784         arr2=arr.cartesianize(AX_CYL)
3785         arr2_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836),(-0.05839904460257763,1.9991472060830102)]) ; arr2_exp.setInfoOnComponents(["A","BB"])
3786         self.assertTrue(arr2_exp.isEqual(arr2,1e-14))
3787         # spher 2D
3788         arr3=arr.cartesianize(AX_SPHER)
3789         self.assertTrue(arr2_exp.isEqual(arr3,1e-14))
3790         # cyl 3D
3791         arr=DataArrayDouble([(3,0.2,7.1),(2,1.6,12.3)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3792         arr4=arr.cartesianize(AX_CYL)
3793         arr4_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836,7.1),(-0.05839904460257763,1.9991472060830102,12.3)]) ; arr4_exp.setInfoOnComponents(["A","BB","CCC"])
3794         self.assertTrue(arr4_exp.isEqual(arr4,1e-14))
3795         # spher 3D
3796         arr=DataArrayDouble([(3,0.2,0.5),(2,1.3,5.8)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3797         arr5=arr.cartesianize(AX_SPHER)
3798         arr5_exp=DataArrayDouble([(0.5230462208645272,0.2857414527616764,2.940199733523725),(1.706499157790973,-0.8953424658735863,0.5349976572491747)]) ; arr5_exp.setInfoOnComponents(["A","BB","CCC"])
3799         self.assertTrue(arr5_exp.isEqual(arr5,1e-14))
3800         #
3801         m=MEDCouplingCMesh() ; m.setName("aa") ; m.setDescription("bbb") ; m.setTime(4.125,5,6) ; m.setTimeUnit("ms")
3802         arrX=DataArrayDouble([0,1,2]) ; arrX.setInfoOnComponent(0,"ccc")
3803         arrY=DataArrayDouble([3,4,5,6]) ; arrY.setInfoOnComponent(0,"dddd")
3804         m.setCoords(arrX,arrY)
3805         m2=m.buildCurveLinear()
3806         #
3807         self.assertTrue(isinstance(m2,MEDCouplingCurveLinearMesh))
3808         self.assertEqual(m2.getName(),"aa")
3809         self.assertEqual(m2.getDescription(),"bbb")
3810         self.assertEqual(m2.getTime(),[4.125,5,6])
3811         self.assertEqual(m2.getTimeUnit(),"ms")
3812         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"])
3813         self.assertTrue(m2.getCoords().isEqual(m2c_exp,1e-14))
3814         self.assertEqual(m2.getNodeGridStructure(),(3,4))
3815         pass
3816
3817     def testRemoveIdsFromIndexedArrays1(self):
3818         arr=DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,504,505,601,602])
3819         arrI=DataArrayInt([0,3,7,8,8,13,15])
3820         # case where all elts in inputs are in
3821         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3822         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([501,502],arr2,arrI2))
3823         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,503,504,505,601,602])))
3824         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,11,13])))
3825         # case where part of elts in inputs are in
3826         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3827         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([504,507],arr2,arrI2))
3828         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,505,601,602])))
3829         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,12,14])))
3830         # case where no elts in inputs are in
3831         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3832         self.assertTrue(not MEDCouplingUMesh.RemoveIdsFromIndexedArrays([1,5,701],arr2,arrI2))
3833         self.assertTrue(arr2.isEqual(arr))
3834         self.assertTrue(arrI2.isEqual(arrI))
3835         pass
3836
3837     def testFieldIntIsOnStage1(self):
3838         """ My first test with field int."""
3839         m=MEDCouplingCMesh()
3840         m.setName("mesh")
3841         arrX=DataArrayDouble([0,1,2,3])
3842         m.setCoords(arrX,arrX)
3843         f=MEDCouplingFieldInt(ON_CELLS)
3844         f.setMesh(m)
3845         arr=DataArrayInt(8) ; arr.iota() ;f.setArray(arr)
3846         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
3847         arr=DataArrayInt(9) ; arr.iota() ;f.setArray(arr)
3848         f.checkConsistencyLight()
3849         f.setTimeUnit("ms")
3850         self.assertEqual(f.getTimeUnit(),"ms")
3851         f.setTime(3.2,5,6)
3852         a,b,c=f.getTime()
3853         self.assertEqual(b,5)
3854         self.assertEqual(c,6)
3855         self.assertEqual(a,3.2,12)
3856         pass
3857
3858     def testNoThrowOn1DGTU2UOnNullCells(self):
3859         """ Non regression test : no throw when trying to convert 1DGTUMesh to UMesh on an empty mesh"""
3860         m=MEDCoupling1DGTUMesh("",NORM_POLYGON) ; m.setCoords(DataArrayDouble([],0,3))
3861         m.setNodalConnectivity(DataArrayInt([]),DataArrayInt([0]))
3862         m=m.buildUnstructured()
3863         pass
3864
3865     def testExplodeMeshIntoMicroEdges1(self):
3866         """ test for new functionality MEDCouplingUMesh.explodeMeshIntoMicroEdges"""
3867         m=MEDCouplingUMesh("mesh",2)
3868         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)
3869         m.setCoords(coo)
3870         m.allocateCells()
3871         # here a mix of quadratic, linear cells. Non conform but conform considering micro edges
3872         m.insertNextCell(NORM_TRI6,[0,4,1,7,8,9])
3873         m.insertNextCell(NORM_TRI6,[1,5,2,10,11,12])
3874         m.insertNextCell(NORM_TRI6,[5,1,4,10,8,13])
3875         m.insertNextCell(NORM_TRI3,[3,4,7])
3876         m.insertNextCell(NORM_TRI3,[3,7,0])
3877         m.insertNextCell(NORM_TRI3,[6,2,11])
3878         m.insertNextCell(NORM_TRI3,[6,11,5])
3879         m.insertNextCell(NORM_TRI3,[6,5,13])
3880         m.insertNextCell(NORM_TRI3,[6,13,4])
3881         edges,d,di,rd,rdi=m.explodeMeshIntoMicroEdges() # <- new method
3882         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])))
3883         self.assertEqual(edges.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer())
3884         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])))
3885         self.assertTrue(di.isEqual(DataArrayInt([0,6,12,18,21,24,27,30,33,36])))
3886         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])))
3887         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])))
3888         pass
3889
3890     def testFieldIntIsOnStage2(self):
3891         """ Very important test to check that isEqual of MEDCouplingFieldInt is OK !"""
3892         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3893         m1=m1.buildUnstructured() ; m1.setName("mesh")
3894         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setMesh(m1)
3895         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"])
3896         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
3897         #
3898         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3899         m2=m2.buildUnstructured() ; m2.setName("mesh")
3900         f2=MEDCouplingFieldInt(ON_CELLS) ; f2.setMesh(m2)
3901         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"])
3902         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
3903         #
3904         self.assertTrue(f1.isEqual(f2,1e-12,0))
3905         f1.getArray()[:]*=2
3906         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3907         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0))
3908         f1.getArray()[:]/=2
3909         self.assertTrue(f1.isEqual(f2,1e-12,0))
3910         #
3911         f1.setName("F1")
3912         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3913         f1.setName("f1")
3914         self.assertTrue(f1.isEqual(f2,1e-12,0))
3915         #
3916         f1.getArray().setInfoOnComponents(["aa","bbbb"])
3917         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3918         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0))
3919         f1.getArray().setInfoOnComponents(["aa","bbb"])
3920         self.assertTrue(f1.isEqual(f2,1e-12,0))
3921         #
3922         f3=f2.deepCopy()
3923         self.assertTrue(f1.isEqual(f3,1e-12,0))
3924         #
3925         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
3926             f4=MEDCouplingFieldInt(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
3927             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"])
3928             f4.setArray(arr4) ; f4.setName("f1")
3929             self.assertEqual(f1.isEqual(f4,1e-12,0),expected)
3930             pass
3931         pass
3932
3933     def testDADSymmetry1(self):
3934         arr=DataArrayDouble([2,3,4],1,3)
3935         res=arr.symmetry3DPlane([0.,0.,0.],[0.,0.,2.])
3936         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-4],1,3),1e-14))
3937         #
3938         res=arr.symmetry3DPlane([-1000,100,-1],[0.,0.,2.])
3939         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-6],1,3),1e-14))
3940         #
3941         res=arr.symmetry3DPlane([0,0,0],[1.,0.,0.])
3942         self.assertTrue(res.isEqual(DataArrayDouble([-2,3,4],1,3),1e-14))
3943         #
3944         res=arr.symmetry3DPlane([0,0,0],[0.,1.,0.])
3945         self.assertTrue(res.isEqual(DataArrayDouble([2,-3,4],1,3),1e-14))
3946         #
3947         res=arr.symmetry3DPlane([0,0,0],[-1.,1.,0.])
3948         self.assertTrue(res.isEqual(DataArrayDouble([3,2,4],1,3),1e-14))
3949         #
3950         plane=[5.,4.,-7.]
3951         a=DataArrayDouble(DataArrayDouble.GiveBaseForPlane(plane))
3952         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[1]).magnitude()[0],0.,13)
3953         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[2]).magnitude()[0],0.,13)
3954         self.assertAlmostEqual(DataArrayDouble.Dot(a[1],a[2]).magnitude()[0],0.,13)
3955         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]])
3956         m=MEDCouplingUMesh("",2) ; m.setCoords(coo) ; m.allocateCells()
3957         m.insertNextCell(NORM_QUAD4,[0,1,2,3])
3958         d,_=m.distanceToPoint(arr)
3959         res=arr.symmetry3DPlane([0.,0.,0.],plane) #
3960         d2,_=m.distanceToPoint(res)
3961         self.assertAlmostEqual(abs(d-d2),0.,12)
3962         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[0])[0],0.,12)
3963         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[1])[0],0.,12)
3964         self.assertAlmostEqual((res-arr).magnitude()[0]-2*d,0.,12)
3965         self.assertTrue(res.isEqual(DataArrayDouble([2.666666666666667,3.5333333333333333,3.0666666666666666],1,3),1e-12))
3966         pass
3967
3968     def testExtrudedMeshBuildUnstructured1(self):
3969         """ 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"""
3970         arr=DataArrayDouble(11) ; arr.iota()
3971         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3972         m=m.buildUnstructured()
3973         faces=MEDCouplingCMesh() ; faces.setCoords(arr,arr)
3974         faces=faces.buildUnstructured()
3975         faces.setCoords(m.getCoords())
3976         em=MEDCouplingMappedExtrudedMesh(m,faces,0)
3977         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12))
3978         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
3979         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
3980         pass
3981
3982     def testExtrudedMeshFromCMesh1(self):
3983         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
3984         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ)
3985         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
3986         self.assertTrue(ex.buildUnstructured().isEqual(mesh3D.buildUnstructured(),1e-12))
3987         pass
3988
3989     def testCylSpherPolarCartFiesta(self):
3990         """Test to check new capabilities from to cyl spher polar cart conversions"""
3991         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)])
3992         self.assertTrue(da0.fromCartToCyl().fromCylToCart().isEqual(da0,1e-12))
3993         self.assertTrue(da0.fromCartToSpher().fromSpherToCart().isEqual(da0,1e-12))
3994         da1=da0[:,:2]
3995         self.assertTrue(da1.fromCartToPolar().fromPolarToCart().isEqual(da1,1e-12))
3996         #
3997         da2=da0[::-1]
3998         pt=[-2.1,0.3,1.1]
3999         vect=[1.,-0.5,0.7]
4000         #
4001         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)])
4002         da4=da0.fromCartToCylGiven(da2,pt,vect)
4003         self.assertTrue(da4.isEqual(expected,1e-12))
4004         #
4005         m=MEDCouplingUMesh.Build0DMeshFromCoords(da2)
4006         self.assertEqual(m.getDirectAccessOfCoordsArrIfInStructure().getHiddenCppPointer(),da2.getHiddenCppPointer())
4007         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m) ; f0.setArray(da0)
4008         f=f0.computeVectorFieldCyl(pt,vect)
4009         f.checkConsistencyLight()
4010         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
4011         self.assertTrue(f.getArray().isEqual(expected,1e-12))
4012         pass
4013
4014     def testDAIIndicesOfSubPart(self):
4015         a=DataArrayInt([9,10,0,6,4,11,3,8])
4016         b=DataArrayInt([6,0,11,8])
4017         c=a.indicesOfSubPart(b)
4018         self.assertTrue(c.isEqual(DataArrayInt([3,2,5,7])))
4019         #
4020         d=DataArrayInt([9,10,0,6,4,11,0,8])
4021         self.assertRaises(InterpKernelException,d.indicesOfSubPart,b) # 0 appears twice in the d array
4022         f=DataArrayInt([6,0,11,8,12])
4023         self.assertRaises(InterpKernelException,a.indicesOfSubPart,f) # 12 in f does not exist in a
4024         pass
4025
4026     def testDACirPermAndRev1(self):
4027         d=DataArrayInt([1,2,3,4,5,6])
4028         d2=d.deepCopy() ; d2.circularPermutation(1)
4029         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4030         d2=d.deepCopy() ; d2.circularPermutation()
4031         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4032         d2=d.deepCopy() ; d2.circularPermutation(2)
4033         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4034         d2=d.deepCopy() ; d2.circularPermutation(3)
4035         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4036         d2=d.deepCopy() ; d2.circularPermutation(4)
4037         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4038         d2=d.deepCopy() ; d2.circularPermutation(5)
4039         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4040         d2=d.deepCopy() ; d2.circularPermutation(6)
4041         self.assertTrue(d2.isEqual(d))
4042         d2=d.deepCopy() ; d2.circularPermutation(7)
4043         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4044         d2=d.deepCopy() ; d2.circularPermutation(-1)
4045         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4046         d2=d.deepCopy() ; d2.circularPermutation(-2)
4047         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4048         d2=d.deepCopy() ; d2.circularPermutation(-3)
4049         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4050         d2=d.deepCopy() ; d2.circularPermutation(-4)
4051         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4052         d2=d.deepCopy() ; d2.circularPermutation(-5)
4053         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4054         d2=d.deepCopy() ; d2.circularPermutation(-6)
4055         self.assertTrue(d2.isEqual(d))
4056         d2=d.deepCopy() ; d2.circularPermutation(-7)
4057         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4058         ####
4059         d=DataArrayInt([1,2,3,4,5,6],2,3)
4060         d2=d.deepCopy() ; d2.circularPermutationPerTuple(0)
4061         self.assertTrue(d2.isEqual(d))
4062         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4063         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4064         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4065         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4066         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4067         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4068         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4069         self.assertTrue(d2.isEqual(d))
4070         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4071         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4072         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4073         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4074         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4075         self.assertTrue(d2.isEqual(d))
4076         d.setInfoOnComponents(["a","b","c"])
4077         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4078         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4079         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4080         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4081         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4082         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4083         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4084         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4085         d2=d.deepCopy() ; d2.circularPermutationPerTuple(4)
4086         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4087         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4088         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4089         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4090         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4091         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4092         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4093         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-4)
4094         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4095         ####
4096         d2=d.deepCopy() ; d2.reversePerTuple()
4097         d3Exp=DataArrayInt([3,2,1,6,5,4],2,3) ; d3Exp.setInfoOnComponents(["c","b","a"])
4098         self.assertTrue(d3Exp.isEqual(d2))
4099         pass
4100
4101     def testDAExplodeComponents1(self):
4102         d=DataArrayDouble([(1,2),(3,4),(5,6)])
4103         d.setName("toto")
4104         d.setInfoOnComponents(["a","b"])
4105         d2=d.explodeComponents()
4106         self.assertEqual(len(d2),2)
4107         #
4108         d3=DataArrayDouble([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4109         self.assertTrue(d3.isEqual(d2[0],1e-14))
4110         d4=DataArrayDouble([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4111         self.assertTrue(d4.isEqual(d2[1],1e-14))
4112         #
4113         d=DataArrayInt([(1,2),(3,4),(5,6)])
4114         d.setName("toto")
4115         d.setInfoOnComponents(["a","b"])
4116         d2=d.explodeComponents()
4117         self.assertEqual(len(d2),2)
4118         #
4119         d3=DataArrayInt([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4120         self.assertTrue(d3.isEqual(d2[0]))
4121         d4=DataArrayInt([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4122         self.assertTrue(d4.isEqual(d2[1]))
4123         pass
4124
4125     def testVoronoi2D_1(self):
4126         """ Check of voronize on 2D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4127         tmp=MEDCouplingCMesh("mesh")
4128         arr=DataArrayDouble(5) ; arr.iota()
4129         tmp.setCoords(arr,arr)
4130         tmp=tmp.build1SGTUnstructured()
4131         conn=tmp.getNodalConnectivity()
4132         conn.rearrange(4)
4133         conn.reversePerTuple()
4134         conn.circularPermutationPerTuple(2)
4135         conn.rearrange(1)
4136         coo=tmp.getCoords().deepCopy()
4137         coo.circularPermutationPerTuple(2) ; coo*=0.1
4138         coo.reverse()
4139         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4140         coo2*=0.14
4141         coo2.circularPermutationPerTuple(2)
4142         tmp.getCoords()[:]+=coo2*coo
4143         #
4144         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4145         field.setName("MyFieldPG") ; field.setMesh(tmp)
4146         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])
4147         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4148         field.setArray(arr)
4149         field.checkConsistencyLight()
4150         ####
4151         fieldOnCell=field.voronoize(1e-12) # hot point
4152         fieldOnCell.checkConsistencyLight()
4153         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),112)
4154         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),256)
4155         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4156         meaRef=field.getMesh().getMeasureField(True).getArray()
4157         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4158         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4159         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4160         mea.rearrange(7)
4161         mea2=mea.sumPerTuple()
4162         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4163         pass
4164
4165     def testVoronoi2D_2(self):
4166         """More aggressive 2D test. No warping here. To check data"""
4167         tmp=MEDCouplingCMesh("mesh")
4168         arr=DataArrayDouble([-1.,1.])
4169         tmp.setCoords(arr,arr)
4170         tmp=tmp.buildUnstructured()
4171         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4172         field.setName("MyFieldPG") ; field.setMesh(tmp)
4173         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])
4174         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4175         field.setArray(arr)
4176         field.checkConsistencyLight()
4177         #
4178         fieldOnCell=field.voronoize(1e-12) # hot point
4179         fieldOnCell.checkConsistencyLight()
4180         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4181         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),16)
4182         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4183         meaRef=DataArrayDouble([0.65,0.4710714285714285,0.59875,0.68,0.73875,0.4,0.46142857142857235])
4184         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4185         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4186         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4187         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4188         #
4189         gsPt=field.getLocalizationOfDiscr()
4190         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4191         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4192         self.assertTrue(b.isIota(8))
4193         #
4194         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
4195         pass
4196
4197     def testVoronoi3D_1(self):
4198         """ Check of voronize on 3D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4199         tmp=MEDCouplingCMesh("mesh")
4200         arr=DataArrayDouble(5) ; arr.iota()
4201         tmp.setCoords(arr,arr)
4202         tmp=tmp.build1SGTUnstructured()
4203         conn=tmp.getNodalConnectivity()
4204         conn.rearrange(4)
4205         conn.reversePerTuple()
4206         conn.circularPermutationPerTuple(2)
4207         conn.rearrange(1)
4208         coo=tmp.getCoords().deepCopy()
4209         coo.circularPermutationPerTuple(2) ; coo*=0.1
4210         coo.reverse()
4211         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4212         coo2*=0.14
4213         coo2.circularPermutationPerTuple(2)
4214         tmp.getCoords()[:]+=coo2*coo
4215         #
4216         tmp.changeSpaceDimension(3,0.)
4217         #
4218         arrZ=DataArrayDouble(5) ; arrZ.iota()
4219         mz=MEDCouplingCMesh() ; mz.setCoords(arrZ) ; mz=mz.buildUnstructured()
4220         mz.changeSpaceDimension(3,0.)
4221         mz.getCoords().circularPermutationPerTuple(1)
4222         tmp=tmp.buildUnstructured().buildExtrudedMesh(mz,0)
4223         #
4224         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4225         field.setName("MyFieldPG") ; field.setMesh(tmp)
4226         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])
4227         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4228         field.setArray(arr)
4229         field.checkConsistencyLight()
4230         ####
4231         fieldOnCell=field.voronoize(1e-12) # hot point
4232         fieldOnCell.checkConsistencyLight()
4233         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4234         meaRef=field.getMesh().getMeasureField(True).getArray()
4235         mea=fieldOnCell.getMesh().getMeasureField(False).getArray()
4236         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4237         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4238         mea.rearrange(7)
4239         mea2=mea.sumPerTuple()
4240         delta=(meaRef-mea2)
4241         delta.abs()
4242         delta/=meaRef
4243         self.assertEqual(len(delta.findIdsNotInRange(0,1e-2)),0) # 1e-2 because hexa8 are warped !
4244         pass
4245
4246     def testVoronoi3D_2(self):
4247         """More aggressive 3D test. No warping here. To check data"""
4248         tmp=MEDCouplingCMesh("mesh")
4249         arr=DataArrayDouble([-1.,1.])
4250         tmp.setCoords(arr,arr,arr)
4251         tmp=tmp.buildUnstructured()
4252         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4253         field.setName("MyFieldPG") ; field.setMesh(tmp)
4254         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])
4255         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4256         field.setArray(arr)
4257         field.checkConsistencyLight()
4258         #
4259         fieldOnCell=field.voronoize(1e-12) # hot point
4260         fieldOnCell.checkConsistencyLight()
4261         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4262         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),34)
4263         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4264         meaRef=DataArrayDouble([1.3,0.9421428571428572,1.1975,1.36,1.4775,0.8,0.922857142857143])
4265         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4266         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4267         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4268         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4269         #
4270         gsPt=field.getLocalizationOfDiscr()
4271         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4272         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4273         self.assertTrue(b.isIota(8))
4274         #
4275         self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),2*7+21)
4276         pass
4277
4278     def testVoronoi3D_8(self):
4279         """More aggressive 3D test. Bug EDF 15094"""
4280         mesh = MEDCouplingUMesh("myMeshForAnthony",3)
4281         coords = [2.20449946892035, 0.0015302058397972198, -0.014025000000000001, 2.20449522028465, 0.00459061457029268, -0.0109750000232271, 2.20449946892035, 0.0015302058397972198, -0.0125000000116135, 2.20577243296484, 0.00153108944037966, -0.0137555135576553, 2.20517315768831, 0.0045920262990614006, -0.010764118475206199, 2.2054749202977, 0.0015308829283677198, -0.012259816016430801, 2.20449787568164, 0.00306041094231961, -0.0125000000116135, 2.20449787568164, 0.00306041094231961, -0.011737500017420301, 2.20449946892035, 0.0015302058397972198, -0.0132625000058068, 2.20513595094259, 0.0015306476400884401, -0.0138902567788277, 2.20483418898648, 0.0045913204346770395, -0.0108695592492167, 2.20498719460902, 0.00153054438408247, -0.0123799080140222, 2.20547332635401, 0.0030617651191343705, -0.012259816016430801, 2.20532457012796, 0.00306155860717217, -0.0115119672458185, 2.20562367663127, 0.0015309861843736902, -0.013007664787043, 2.20582504233773, 0.0045933837758852306, -0.010139577890770399, 2.20642582267143, 0.004594634833691141, -0.009125379014333041, 2.20612543250458, 0.00459400930478819, -0.00963247845255172, 2.2069524110381, 0.004595731395029229, -0.00776049693994639, 2.20668911685476, 0.004595183114360191, -0.00844293797713971, 2.20832419990944, 0.0076643330146060895, -0.0108392857142857, 2.20832419990944, 0.0076643330146060895, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.0108392857142857, 2.2062381754171, 0.00459424407928538, -0.00868052596233734, 2.20832419990944, 0.0076643330146060895, -0.00975535714285714, 2.20768462042811, 0.00766211325442122, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.00975535714285714, 2.20768462042811, 0.00766211325442122, -0.0108392857142857, 2.20737554490036, 0.00612882358882901, -0.009982332364309381, 2.20763883863969, 0.00612955462931014, -0.00821596275568748, 2.2066421405633703, 0.00612678727660696, -0.00867597726688296, 2.20643557437203, 0.006126213741329251, -0.0104894318025281, 2.2065952932276, 0.00459498773715731, -0.00822051145114186, 2.20603160887741, 0.00459381392758531, -0.00941005192655387]
4282         da = DataArrayDouble.New(coords,35,3)
4283         mesh.setCoords(da)
4284         mesh.allocateCells()
4285         mesh.insertNextCell(NORM_PENTA15, [0, 2, 1, 3, 5, 4, 8, 7, 6, 14, 13, 12, 9, 11, 10])
4286         mesh.insertNextCell(NORM_HEXA20, [20, 23, 22, 21, 16, 15, 24, 18, 28, 27, 26, 25, 17, 34, 33, 19, 29, 32, 31, 30])
4287         mesh.zipCoords()
4288         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4289         f.setMesh(mesh)
4290         f.setName("myFieldForAnthony")
4291         f.setGaussLocalizationOnCells([0],[-1, 1, 0, -1, 0, 0, -1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, -1, 0.5, 0, -1, 0, 0.5, -1, 0.5, 0.5, 1, 0.5, 0, 1, 0, 0.5, 1, 0.5, 0.5, 0, 1, 0, 0, 0, 0, 0, 0, 1],[-0.774597, 0.333333, 0.333333, -0.774597, 0.470142, 0.470142, -0.774597, 0.0597159, 0.470142, -0.774597, 0.470142, 0.0597159, -0.774597, 0.101287, 0.101287, -0.774597, 0.797427, 0.101287, -0.774597, 0.101287, 0.797427, 0, 0.333333, 0.333333, 0, 0.470142, 0.470142, 0, 0.0597159, 0.470142, 0, 0.470142, 0.0597159, 0, 0.101287, 0.101287, 0, 0.797427, 0.101287, 0, 0.101287, 0.797427, 0.774597, 0.333333, 0.333333, 0.774597, 0.470142, 0.470142, 0.774597, 0.0597159, 0.470142, 0.774597, 0.470142, 0.0597159, 0.774597, 0.101287, 0.101287, 0.774597, 0.797427, 0.101287, 0.774597, 0.101287, 0.797427],[0.0625, 0.0367762, 0.0367762, 0.0367762, 0.0349831, 0.0349831, 0.0349831, 0.1, 0.0588418, 0.0588418, 0.0588418, 0.055973, 0.055973, 0.055973, 0.0625, 0.0367762, 0.0367762, 0.0367762, 0.0349831, 0.0349831, 0.0349831])
4292         f.setGaussLocalizationOnCells([1],[-1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 0, -1, 0, 1, -1, 1, 0, -1, 0, -1, -1, -1, 0, 1, 0, 1, 1, 1, 0, 1, 0, -1, 1, -1, -1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0],[-0.774597, -0.774597, -0.774597, -0.774597, -0.774597, 0, -0.774597, -0.774597, 0.774597, -0.774597, 0, -0.774597, -0.774597, 0, 0, -0.774597, 0, 0.774597, -0.774597, 0.774597, -0.774597, -0.774597, 0.774597, 0, -0.774597, 0.774597, 0.774597, 0, -0.774597, -0.774597, 0, -0.774597, 0, 0, -0.774597, 0.774597, 0, 0, -0.774597, 0, 0, 0, 0, 0, 0.774597, 0, 0.774597, -0.774597, 0, 0.774597, 0, 0, 0.774597, 0.774597, 0.774597, -0.774597, -0.774597, 0.774597, -0.774597, 0, 0.774597, -0.774597, 0.774597, 0.774597, 0, -0.774597, 0.774597, 0, 0, 0.774597, 0, 0.774597, 0.774597, 0.774597, -0.774597, 0.774597, 0.774597, 0, 0.774597, 0.774597, 0.774597],[0.171468, 0.274348, 0.171468, 0.274348, 0.438957, 0.274348, 0.171468, 0.274348, 0.171468, 0.274348, 0.438957, 0.274348, 0.438957, 0.702332, 0.438957, 0.274348, 0.438957, 0.274348, 0.171468, 0.274348, 0.171468, 0.274348, 0.438957, 0.274348, 0.171468, 0.274348, 0.171468])
4293         arr = DataArrayDouble(48, 3)
4294         arr[:, 0] = list(range(48))
4295         arr[:, 1] = 100 + arr[:, 0]
4296         arr[:, 2] = 200 + arr[:, 0]
4297         f.setArray(arr)
4298         fieldOnCell=f.voronoize(1e-12) # hot point
4299         fieldOnCell.checkConsistencyLight()
4300         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),48)
4301         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),127)
4302         meaRef=f.getMesh().getMeasureField(True).getArray(); meaRef.rearrange(2); meaRef2 = meaRef.sumPerTuple()
4303         mea=fieldOnCell.getMesh().getMeasureField(True).getArray(); mea.rearrange(48); mea2 = mea.sumPerTuple()
4304         self.assertTrue(mea2.isEqual(meaRef2,1e-9))
4305         pass
4306
4307     def testVoronoi3DSurf_1(self):
4308         tmp=MEDCouplingCMesh("mesh")
4309         arr=DataArrayDouble(5) ; arr.iota()
4310         tmp.setCoords(arr,arr)
4311         tmp=tmp.build1SGTUnstructured()
4312         conn=tmp.getNodalConnectivity()
4313         conn.rearrange(4)
4314         conn.reversePerTuple()
4315         conn.circularPermutationPerTuple(2)
4316         conn.rearrange(1)
4317         coo=tmp.getCoords().deepCopy()
4318         coo.circularPermutationPerTuple(2) ; coo*=0.1
4319         coo.reverse()
4320         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4321         coo2*=0.14
4322         coo2.circularPermutationPerTuple(2)
4323         tmp.getCoords()[:]+=coo2*coo
4324         #
4325         tmp.changeSpaceDimension(3,0.)    # force 3D surf
4326         tmp.rotate([0,0,0],[1,0,0],pi/3)  # force 3D surf
4327         #
4328         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4329         field.setName("MyFieldPG") ; field.setMesh(tmp)
4330         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])
4331         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4332         field.setArray(arr)
4333         field.checkConsistencyLight()
4334         #####
4335         fieldOnCell=field.voronoize(1e-12);
4336         fieldOnCell.checkConsistencyLight()
4337         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4338         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),2)
4339         self.assertEqual(field.getMesh().getSpaceDimension(),fieldOnCell.getMesh().getSpaceDimension())
4340         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4341         meaRef=field.getMesh().getMeasureField(True).getArray()
4342         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4343         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4344         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4345         mea.rearrange(7)
4346         mea2=mea.sumPerTuple()
4347         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4348         pass
4349
4350     def testVoronoi1D_1(self):
4351         tmp=MEDCouplingCMesh("mesh")
4352         arr=DataArrayDouble(5) ; arr.iota()
4353         tmp.setCoords(arr)
4354         tmp=tmp.build1SGTUnstructured()
4355         tmp1=tmp.deepCopy()
4356         tmp.changeSpaceDimension(2,0.)
4357         tmp.getCoords()[:,1]=pi/(len(arr)-1)*tmp.getCoords()[:,0]
4358         tmp.getCoords()[:,0]=1.
4359         tmp.setCoords(tmp.getCoords().fromPolarToCart())
4360         tmp.changeSpaceDimension(3,1.)
4361         #
4362         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4363         field.setName("MyFieldPG") ; field.setMesh(tmp)
4364         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])
4365         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4366         field.setArray(arr)
4367         field.checkConsistencyLight()
4368         ####
4369         fieldOnCell=field.voronoize(1e-12);
4370         fieldOnCell.checkConsistencyLight()
4371         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4372         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),1)
4373         assert(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4374         meaRef=field.getMesh().getMeasureField(True).getArray()
4375         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4376         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4377         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),6)
4378         mea.rearrange(6)
4379         mea2=mea.sumPerTuple()
4380         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4381         pass
4382
4383     def testFieldDoubleConvertToLinear1(self):
4384         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)
4385         da.setInfoOnComponents(["g","h"])
4386         m=MEDCouplingUMesh("mesh",2)
4387         m.setCoords(da)
4388         m.allocateCells()
4389         m.insertNextCell(NORM_TRI6,[0,1,13,4,9,7])
4390         m.insertNextCell(NORM_TRI6,[1,2,14,5,10,9])
4391         m.insertNextCell(NORM_QUAD8,[2,3,17,15,6,12,16,11])
4392         refPtr=m.getHiddenCppPointer()
4393         f=MEDCouplingFieldDouble(ON_NODES)
4394         f.setName("aa")
4395         f.setMesh(m)
4396         arr=DataArrayDouble(18*2) ; arr.iota()
4397         arr.rearrange(2)
4398         arr.setInfoOnComponents(["bb","ccc"])
4399         f.setArray(arr)
4400         f.setTime(0.5,2,3)
4401         f.checkConsistencyLight()
4402         #
4403         f1=f.convertQuadraticCellsToLinear()
4404         self.assertTrue(f.getMesh().getHiddenCppPointer(),refPtr)
4405         self.assertTrue(f1.getMesh().getHiddenCppPointer()!=refPtr)
4406         f1.checkConsistencyLight()
4407         self.assertEqual(f1.getName(),"aa")
4408         self.assertEqual(f1.getTypeOfField(),ON_NODES)
4409         da0=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)])
4410         da0.setInfoOnComponents(["g","h"])
4411         self.assertTrue(f1.getMesh().getCoords().isEqual(da0,1e-12))
4412         self.assertTrue(f1.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4413         self.assertTrue(f1.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4414         da2=DataArrayDouble([(0,1),(2,3),(4,5),(6,7),(26,27),(28,29),(30,31),(34,35)])
4415         da2.setInfoOnComponents(["bb","ccc"])
4416         self.assertTrue(f1.getArray().isEqual(da2,1e-12))
4417         self.assertEqual(f1.getTime(),[0.5,2,3])
4418         #
4419         f2=MEDCouplingFieldDouble(ON_CELLS)
4420         f2.setName("aa")
4421         f2.setMesh(m)
4422         arr=DataArrayDouble(3*2) ; arr.iota()
4423         arr.rearrange(2)
4424         arr.setInfoOnComponents(["bb","ccc"])
4425         f2.setArray(arr)
4426         f2.setTime(0.5,2,3)
4427         f2.checkConsistencyLight()
4428         f3=f2.convertQuadraticCellsToLinear()
4429         self.assertEqual(f2.getMesh().getHiddenCppPointer(),refPtr)
4430         f3.checkConsistencyLight()
4431         self.assertTrue(f3.getMesh().getHiddenCppPointer()!=refPtr)
4432         self.assertTrue(f3.getMesh().getCoords().isEqual(da0,1e-12))
4433         self.assertTrue(f3.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4434         self.assertTrue(f3.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4435         self.assertEqual(f2.getArray().getHiddenCppPointer(),f3.getArray().getHiddenCppPointer())
4436         self.assertEqual(f3.getTime(),[0.5,2,3])
4437         pass
4438
4439     def testBuild1DMeshFromCoords1(self):
4440         da=DataArrayDouble([(3,4),(5,6),(7,8)])
4441         da.setName("ZeArr")
4442         da0=da.deepCopy()
4443         m=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4444         m.checkConsistencyLight()
4445         self.assertEqual(da0.getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
4446         self.assertTrue(da.isEqual(da0,1e-12))
4447         self.assertEqual(m.getName(),da.getName())
4448         self.assertEqual(m.getMeshDimension(),1)
4449         self.assertTrue(isinstance(m,MEDCouplingUMesh))
4450         m1=MEDCoupling1SGTUMesh(m)
4451         m1.checkConsistencyLight()
4452         self.assertTrue(m1.getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2])))
4453         #
4454         da0.setName("")
4455         m2=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4456         m2.checkConsistencyLight()
4457         self.assertEqual(da0.getHiddenCppPointer(),m2.getCoords().getHiddenCppPointer())
4458         self.assertEqual(m2.getName(),"Mesh")
4459         pass
4460
4461     def testVoronoi3D_3(self):
4462         """Non regression test to check MEDCouplingUMesh::clipSingle3DCellByPlane"""
4463         coo=DataArrayDouble([0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],4,3)
4464         m=MEDCouplingUMesh("mesh",3)
4465         m.setCoords(coo) ; m.allocateCells()
4466         m.insertNextCell(NORM_TETRA4,[0,2,3,1])
4467         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4468         f.setMesh(m) ; f.setName("field")
4469         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])
4470         f.setArray(DataArrayDouble([0,1,2,3]))
4471         f3=f.voronoize(1e-12)
4472         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4473         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4474         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4475         pass
4476
4477     def testVoronoi3D_4(self):
4478         """Idem testVoronoi3D_3 except that here quadratic cells are considered"""
4479         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)
4480         m=MEDCouplingUMesh("mesh",3)
4481         m.setCoords(coo) ; m.allocateCells()
4482         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4483         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4484         f.setMesh(m) ; f.setName("field")
4485         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])
4486         f.setArray(DataArrayDouble([0,1,2,3]))
4487         f3=f.voronoize(1e-12)
4488         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4489         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4490         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4491         pass
4492
4493     def testVoronoi3D_5(self):
4494         """ Cell 0 of Barreau_Elga_V11.rmed and sslv07b.rmed. HEXA8 cut regularly into 8 parts"""
4495         coo=DataArrayDouble([(0.024,0.024,1.2),(0.024,0.048,1.2),(0.048,0.024,1.2),(0.048,0.048,1.2),(0.024,0.024,1.6),(0.024,0.048,1.6),(0.048,0.024,1.6),(0.048,0.048,1.6)])
4496         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4497         m.insertNextCell(NORM_HEXA8,[0,2,6,4,1,3,7,5])
4498         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4499         f.setGaussLocalizationOnType(NORM_HEXA8,[-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0],[-0.577350269189626, -0.577350269189626, -0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626],[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
4500         arr=DataArrayDouble(8) ; arr.iota() ; f.setArray(arr)
4501         f.checkConsistencyLight()
4502         #
4503         vol=f.getMesh().getMeasureField(False).getIJ(0,0)
4504         f2=f.voronoize(1e-12)
4505         f2.checkConsistencyLight()
4506         self.assertEqual(f2.getNumberOfTuples(),8)
4507         volRef=vol/8
4508         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isUniform(volRef,1e-12))
4509         pass
4510
4511     def testVoronoi3D_6(self):
4512         """ Cell 0 of brokenshire.med (and pace.med). TETRA10 split into 4 parts"""
4513         coo=DataArrayDouble([(50.,-50.,200.0),(50.0,-30.,200.0),(30.,-50.,200.0),(50.,-50.,180.0),(50.,-40.,200.0),(40.,-50.,200.0),(50.,-50.,190.0),(40.,-40.,200.0),(50.,-40.,190.0),(40.,-50.,190.0)])
4514         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4515         m.insertNextCell(NORM_TETRA10,[2,0,1,3,5,4,7,9,6,8])
4516         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4517         f.setGaussLocalizationOnType(NORM_TETRA10,[0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0.5, 0.5, 0.5, 0, 0.5, 0, 0, 0.5, 0, 0.5],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105],[0.041666666666666664, 0.041666666666666664, 0.041666666666666664, 0.041666666666666664])
4518         arr=DataArrayDouble(4) ; arr.iota() ; f.setArray(arr)
4519         f.checkConsistencyLight()
4520         f2=f.voronoize(1e-12)
4521         f2.checkConsistencyLight()
4522         self.assertEqual(f2.getNumberOfTuples(),4)
4523         arr=f2.getMesh().getMeasureField(False).getArray()
4524         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(DataArrayDouble([378.0546928833331, 318.42621348333586, 318.4262134833361, 318.4262134833278]),1e-6))
4525         pass
4526
4527     def testVoronoi3D_7(self):
4528         """ sslv07a.rmed. HEXA20 split into 27 parts """
4529         coo=DataArrayDouble([(-0.5,-0.5,0.0),(-0.25,-0.5,0.0),(0.0,-0.5,0.0),(-0.5,0.0,0.0),(-0.5,-0.25,0.0),(0.0,0.0,0.0),(0.0,-0.25,0.0),(-0.25,0.0,0.0),(-0.5,-0.5,1.0),(-0.25,-0.5,1.0),(0.0,-0.5,1.0),(0.0,-0.25,1.0),(0.0,0.0,1.0),(-0.25,0.0,1.0),(-0.5,0.0,1.0),(-0.5,-0.25,1.0),(-0.5,-0.5,0.5),(0.0,-0.5,0.5),(0.0,0.0,0.5),(-0.5,0.0,0.5)])
4530         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4531         m.insertNextCell(NORM_HEXA20,[0,3,5,2,8,14,12,10,4,7,6,1,15,13,11,9,16,19,18,17])
4532         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4533         f.setGaussLocalizationOnType(NORM_HEXA20,
4534                                      [-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],
4535                                      [-0.774597,-0.774597,-0.774597,-0.774597,-0.774597,0,-0.774597,-0.774597,0.774597,-0.774597,0,-0.774597,-0.774597,0,0,-0.774597,0,0.774597,-0.774597,0.774597,-0.774597,-0.774597,0.774597,0,-0.774597,0.774597,0.774597,0,-0.774597,-0.774597,0,-0.774597,0,0,-0.774597,0.774597,0,0,-0.774597,0,0,0,0,0,0.774597,0,0.774597,-0.774597,0,0.774597,0,0,0.774597,0.774597,0.774597,-0.774597,-0.774597,0.774597,-0.774597,0,0.774597,-0.774597,0.774597,0.774597,0,-0.774597,0.774597,0,0,0.774597,0,0.774597,0.774597,0.774597,-0.774597,0.774597,0.774597,0,0.774597,0.774597,0.774597],
4536                                      [0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.438957,0.702332,0.438957,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468])
4537         arr=DataArrayDouble(27) ; arr.iota() ; f.setArray(arr)
4538         f.checkConsistencyLight()
4539         f2=f.voronoize(1e-12)
4540         a=0.007187820185770747 ; b=0.0090870678008658 ; c=0.011488156225861077 ; d=0.014523687548277797
4541         ref=DataArrayDouble(27) ; ref[::2]=a ; ref[1::2]=b
4542         ref[[4,10,12,14,16,22]]=c ; ref[13]=d  # 6 cells 4,10,12,14,16,22 are the 6 cells boarding the most inner cell 13
4543         #
4544         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-7))
4545         pass
4546
4547     def testConvertQuadToLin4Gauss_1(self):
4548         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)
4549         m=MEDCouplingUMesh("mesh",3)
4550         m.setCoords(coo) ; m.allocateCells()
4551         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4552         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4553         f.setMesh(m) ; f.setName("field")
4554         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]
4555         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]
4556         cccc=[0.041667,0.041667,0.041667,0.041667]
4557         f.setGaussLocalizationOnType(NORM_TETRA10,aaaa,bbbb,cccc)
4558         f.setArray(DataArrayDouble([0,1,2,3]))
4559         f.setTime(1.,2,3)
4560         #
4561         mcpy=m.deepCopy() ; mcpy.convertQuadraticCellsToLinear() ; mcpy.zipCoords()
4562         #
4563         f2=f.convertQuadraticCellsToLinear()
4564         f2.checkConsistencyLight()
4565         self.assertTrue(f2.getMesh().isEqual(mcpy,1e-12))
4566         self.assertTrue(f2.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4567         self.assertEqual(f2.getNbOfGaussLocalization(),1)
4568         gl=f2.getGaussLocalization(0)
4569         self.assertEqual(gl.getType(),NORM_TETRA4)
4570         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))
4571         self.assertTrue(DataArrayDouble(gl.getGaussCoords()).isEqual(DataArrayDouble(bbbb),1e-12))
4572         self.assertTrue(DataArrayDouble(gl.getWeights()).isEqual(DataArrayDouble(cccc),1e-12))
4573         self.assertEqual(f2.getName(),"field")
4574         self.assertEqual(f2.getTime(),[1.,2,3])
4575         pass
4576
4577     def testDADCumSum1(self):
4578         d=DataArrayDouble([3.,2.,4.,5.])
4579         self.assertTrue(d.cumSum().isEqual(DataArrayDouble([0.,3.,5.,9.,14.]),1e-12))
4580         d2=DataArrayDouble([])
4581         self.assertTrue(d2.cumSum().isEqual(DataArrayDouble([0.]),1e-12))
4582         d.rearrange(2)
4583         self.assertRaises(InterpKernelException,d.cumSum)
4584         pass
4585
4586     def testDAIFromLinkedListOfPairToList1(self):
4587         d=DataArrayInt([(5,7),(7,3),(3,12),(12,17)])
4588         zeRes=DataArrayInt([5,7,3,12,17])
4589         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4590         d.rearrange(1)
4591         self.assertRaises(InterpKernelException,d.fromLinkedListOfPairToList)
4592         d.rearrange(2)
4593         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4594         d2=DataArrayInt([(5,7)])
4595         self.assertTrue(d2.fromLinkedListOfPairToList().isEqual(DataArrayInt([5,7])))
4596         d3=DataArrayInt([(5,7),(7,3),(4,12),(12,17)])
4597         self.assertRaises(InterpKernelException,d3.fromLinkedListOfPairToList) # not a linked list of pair
4598         d4=DataArrayInt([(5,7),(7,3),(12,3),(12,17)])
4599         self.assertRaises(InterpKernelException,d4.fromLinkedListOfPairToList) # not a linked list of pair, but can be repaired !
4600         d4.sortEachPairToMakeALinkedList()
4601         self.assertTrue(d4.fromLinkedListOfPairToList().isEqual(zeRes))
4602         pass
4603
4604     def testUMeshExplodeIntoEdges1(self):
4605         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured()
4606         self.assertEqual(m.getMeshDimension(),3)
4607         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4608         b0,b1,b2,b3,b4=m.explode3DMeshTo1D()
4609         self.assertTrue(a0.isEqual(b0,1e-12))
4610         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4611         #
4612         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4613         self.assertEqual(m.getMeshDimension(),2)
4614         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4615         b0,b1,b2,b3,b4=m.buildDescendingConnectivity()
4616         self.assertTrue(a0.isEqual(b0,1e-12))
4617         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4618         pass
4619
4620     def testUMeshComputeEnlargedNeighborsOfNodes(self):
4621         m=MEDCouplingCMesh() ; arr=DataArrayDouble(4) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4622         a,b=m.computeEnlargedNeighborsOfNodes()
4623         aExp=DataArrayInt([1,4,5,0,2,4,5,6,1,3,5,6,7,2,6,7,0,1,5,8,9,0,1,2,4,6,8,9,10,1,2,3,5,7,9,10,11,2,3,6,10,11,4,5,9,12,13,4,5,6,8,10,12,13,14,5,6,7,9,11,13,14,15,6,7,10,14,15,8,9,13,8,9,10,12,14,9,10,11,13,15,10,11,14])
4624         bExp=DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84])
4625         self.assertTrue(a.isEqual(aExp))
4626         self.assertTrue(b.isEqual(bExp))
4627         m2=m[[1,2,3]]
4628         c,d=m2.computeEnlargedNeighborsOfNodes()
4629         cExp=DataArrayInt([2,5,6,1,3,5,6,7,2,6,7,5,8,9,1,2,4,6,8,9,1,2,3,5,7,2,3,6,4,5,9,4,5,8])
4630         dExp=DataArrayInt([0,0,3,8,11,14,20,25,28,31,34,34,34,34,34,34,34])
4631         self.assertTrue(c.isEqual(cExp))
4632         self.assertTrue(d.isEqual(dExp))
4633         pass
4634
4635     def testDAIfindIdsExt1(self):
4636         d=DataArrayInt([4,6,-2,3,7,0,10])
4637         self.assertTrue(d.findIdsGreaterOrEqualTo(3).isEqual(DataArrayInt([0,1,3,4,6])))
4638         self.assertTrue(d.findIdsGreaterThan(3).isEqual(DataArrayInt([0,1,4,6])))
4639         self.assertTrue(d.findIdsLowerThan(3).isEqual(DataArrayInt([2,5])))
4640         self.assertTrue(d.findIdsLowerOrEqualTo(3).isEqual(DataArrayInt([2,3,5])))
4641         pass
4642
4643     def testDAFacto1(self):
4644         """Test focused of new wrapped methods for MEDCouplingFieldInt thanks to code factorization."""
4645         d=DataArrayDouble(7) ; d.iota()
4646         m=MEDCouplingUMesh.Build1DMeshFromCoords(d)
4647         f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(m) ; arr=DataArrayInt(6) ; arr.iota() ; f.setArray(arr) ; f.checkConsistencyLight()
4648         f_0=f[::2] # test is here
4649         self.assertTrue(f_0.getArray().isEqual(DataArrayInt([0,2,4])))
4650         self.assertTrue(f_0.getMesh().isEqual(m[[0,2,4]],1e-12))
4651         #
4652         f2=MEDCouplingFieldInt(ON_NODES) ; f2.setMesh(m) ; arr=DataArrayInt(7) ; arr.iota() ; f2.setArray(arr) ; f2.checkConsistencyLight()
4653         f_1=f2[::2] # test is here
4654         self.assertTrue(f_1.getArray().isEqual(DataArrayInt([0,1,2,3,4,5])))
4655         m_1=m[[0,2,4]] ; m_1.zipCoords()
4656         self.assertTrue(f_1.getMesh().isEqual(m_1,1e-12))
4657         pass
4658
4659     def testFieldFloatIsOnStage1(self):
4660         """ My first test with field int."""
4661         m=MEDCouplingCMesh()
4662         m.setName("mesh")
4663         arrX=DataArrayDouble([0,1,2,3])
4664         m.setCoords(arrX,arrX)
4665         f=MEDCouplingFieldFloat(ON_CELLS)
4666         f.setMesh(m)
4667         arr=DataArrayFloat(8) ; arr.iota() ;f.setArray(arr)
4668         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
4669         arr=DataArrayFloat(9) ; arr.iota() ;f.setArray(arr)
4670         f.checkConsistencyLight()
4671         f.setTimeUnit("ms")
4672         self.assertEqual(f.getTimeUnit(),"ms")
4673         f.setTime(3.2,5,6)
4674         a,b,c=f.getTime()
4675         self.assertEqual(b,5)
4676         self.assertEqual(c,6)
4677         self.assertEqual(a,3.2,12)
4678         pass
4679
4680     def testFieldFloatIsOnStage2(self):
4681         """ Very important test to check that isEqual of MEDCouplingFieldFloat is OK !"""
4682         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4683         m1=m1.buildUnstructured() ; m1.setName("mesh")
4684         f1=MEDCouplingFieldFloat(ON_CELLS) ; f1.setMesh(m1)
4685         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"])
4686         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
4687         #
4688         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4689         m2=m2.buildUnstructured() ; m2.setName("mesh")
4690         f2=MEDCouplingFieldFloat(ON_CELLS) ; f2.setMesh(m2)
4691         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"])
4692         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
4693         #
4694         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4695         f1.getArray()[:]*=2
4696         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4697         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4698         f1.getArray()[:]/=2
4699         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4700         #
4701         f1.setName("F1")
4702         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4703         f1.setName("f1")
4704         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4705         #
4706         f1.getArray().setInfoOnComponents(["aa","bbbb"])
4707         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4708         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4709         f1.getArray().setInfoOnComponents(["aa","bbb"])
4710         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4711         #
4712         f3=f2.deepCopy()
4713         self.assertTrue(f1.isEqual(f3,1e-12,0.))
4714         #
4715         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
4716             f4=MEDCouplingFieldFloat(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
4717             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"])
4718             f4.setArray(arr4) ; f4.setName("f1")
4719             self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
4720             pass
4721         pass
4722
4723     def testLTGTDAD1(self):
4724         d=DataArrayDouble(10) ; d.iota()
4725         self.assertTrue(d.findIdsLowerThan(0).empty())
4726         self.assertTrue(d.findIdsLowerThan(1).isEqual(DataArrayInt([0])))
4727         d-=5.
4728         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([0,1,2,3,4])))
4729         self.assertTrue(d.findIdsGreaterThan(0.).isEqual(DataArrayInt([6,7,8,9])))
4730         self.assertTrue(d.convertToFloatArr().isEqual(DataArrayFloat([-5,-4,-3,-2,-1,0,1,2,3,4]),1e-7))
4731         self.assertTrue(d.convertToFloatArr().convertToDblArr().isEqual(d,1e-12))
4732         pass
4733
4734     def testMapII1(self):
4735         """ Test optimized maps for renumbering. Typical usage local to global in parallel mode"""
4736         d=DataArrayInt([1003,1007])
4737         m=d.invertArrayN2O2O2NOptimized()
4738         d2=DataArrayInt([1003,1003,1007,1003,1007])
4739         d2.transformWithIndArr(m)
4740         self.assertTrue(d2.isEqual(DataArrayInt([0,0,1,0,1])))
4741         pass
4742
4743     def testDAICheckUniformAndGuess1(self):
4744         d=DataArrayInt([3,3],1,2)
4745         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non single compo
4746         d=DataArrayInt([])
4747         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# empty
4748         d=DataArrayInt()
4749         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non allocated
4750         d=DataArrayInt([3,3,3])
4751         self.assertEqual(3,d.checkUniformAndGuess())
4752         d=DataArrayInt([7])
4753         self.assertEqual(7,d.checkUniformAndGuess())
4754         d=DataArrayInt([3,4,3])
4755         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non uniform
4756         pass
4757
4758     def testUMComputePlaneEquationOf3DFaces1(self):
4759         """ Consequence of an invalid traduction of matrix inversion transposition."""
4760         m=MEDCoupling1SGTUMesh("msh",NORM_QUAD4)
4761         m.setCoords(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,2,0),(1,2,0),(2,2,0),(0,4,0),(1,4,0),(2,4,0),(0,0,3),(1,0,3),(2,0,3),(0,2,3),(1,2,3),(2,2,3),(0,4,3),(1,4,3),(2,4,3)]))
4762         m.setNodalConnectivity(DataArrayInt([0,1,4,3,9,12,13,10,0,9,10,1,1,10,13,4,4,13,12,3,3,12,9,0,1,2,5,4,10,13,14,11,1,10,11,2,2,11,14,5,5,14,13,4,3,4,7,6,12,15,16,13,4,13,16,7,7,16,15,6,6,15,12,3,4,5,8,7,13,16,17,14,5,14,17,8,8,17,16,7]))
4763         m=m.buildUnstructured()
4764         ref=DataArrayDouble([(0,0,1,0),(0,0,1,-3),(0,1,0,0),(1,0,0,-1),(0,1,0,-2),(1,0,0,0),(0,0,1,0),(0,0,1,-3),(0,1,0,0),(1,0,0,-2),(0,1,0,-2),(0,0,1,0),(0,0,1,-3),(1,0,0,-1),(0,1,0,-4),(1,0,0,0),(0,0,1,0),(0,0,1,-3),(1,0,0,-2),(0,1,0,-4)])
4765         res=m.computePlaneEquationOf3DFaces()
4766         self.assertTrue(res.isEqual(ref,1e-12))
4767         pass
4768
4769     def testBugInComputationOfEqOfPlane1(self):
4770         coo=DataArrayDouble([-1.0, 1.0, -0.3872983455657959, -1.0, 1.0, 0.3872983455657959, -1.0, 1.0, 0.693649172782898, 1.0, 1.0, 0.693649172782898, 1.0, 1.0, 0.3872983455657959, 1.0, 1.0, -0.3872983455657959],6,3)
4771         m=MEDCouplingUMesh("",2)
4772         m.setCoords(coo)
4773         m.allocateCells()
4774         m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
4775         self.assertTrue(m.computePlaneEquationOf3DFaces().isEqual(DataArrayDouble([0,1,0,-1],1,4),1e-12))
4776         pass
4777
4778     def testSimplifyPolyhedra(self):
4779         mesh = MEDCouplingUMesh('mesh', 3)
4780         coo = DataArrayDouble([(-0.01225,-0.0212176,0.02),(-0.00634107,-0.0236652,0.02),(1.50019e-18,-0.0245,0.02),(0.00634107,-0.0236652,0.02),(0.01225,-0.0212176,0.02),(-0.0153864,-0.02665,0),(-0.00714085,-0.02665,0),(1.63184e-18,-0.02665,0),(0.00714085,-0.02665,0),(0.0153864,-0.02665,0),(-0.00714085,-0.02665,0.0101475),(1.63184e-18,-0.02665,0.013145),(0.00714085,-0.02665,0.0101475),(-0.013,-0.0225167,0.02),(-0.0067293,-0.0251141,0.02),(1.59204e-18,-0.026,0.02),(0.0067293,-0.0251141,0.02),(0.013,-0.0225167,0.02),(-0.0161658,-0.028,0),(-0.00750258,-0.028,0),(1.71451e-18,-0.028,0),(0.00750258,-0.028,0),(0.0161658,-0.028,0),(-0.00750258,-0.028,0.0105625),(1.71451e-18,-0.028,0.0136825),(0.00750258,-0.028,0.0105625)])
4781         mesh.setCoords(coo)
4782         c = DataArrayInt([31, 13, 14, 15, 16, 17, 4, 3, 2, 1, 0, -1, 18, 5, 6, 7, 8, 9, 22, 21, 20, 19, -1, 19, 23, 18, -1, 23, 14, 13, 18, -1, 20, 24, 23, 19, -1, 24, 15, 14, 23, -1, 21, 25, 24, 20, -1, 25, 16, 15, 24, -1, 22, 25, 21, -1, 22, 17, 16, 25, -1, 9, 4, 17, 22, -1, 8, 12, 9, -1, 12, 3, 4, 9, -1, 7, 11, 12, 8, -1, 11, 2, 3, 12, -1, 6, 10, 11, 7, -1, 10, 1, 2, 11, -1, 5, 10, 6, -1, 5, 0, 1, 10, -1, 18, 13, 0, 5])
4783         cI = DataArrayInt([0, 108])
4784         mesh.setConnectivity(c, cI)
4785         mesh.simplifyPolyhedra(1.0e-8)
4786         c, cI = mesh.getNodalConnectivity(), mesh.getNodalConnectivityIndex()
4787         tgt_c = DataArrayInt([31, 23, 18, 19, 20, 21, 22, 25, 24, -1, 12, 9, 8, 7, 6, 5, 10, 11, -1, 13, 14, 15, 16, 17, 4, 3, 2, 1, 0, -1, 18, 5, 6, 7, 8, 9, 22, 21, 20, 19, -1, 23, 14, 13, 18, -1, 24, 15, 14, 23, -1, 25, 16, 15, 24, -1, 22, 17, 16, 25, -1, 9, 4, 17, 22, -1, 12, 3, 4, 9, -1, 11, 2, 3, 12, -1, 10, 1, 2, 11, -1, 5, 0, 1, 10, -1, 18, 13, 0, 5])
4788         tgt_cI = DataArrayInt([0, 90])
4789         self.assertEqual(c.getValues(), tgt_c.getValues())
4790         self.assertEqual(cI.getValues(), tgt_cI.getValues())
4791         pass
4792
4793     pass
4794
4795 if __name__ == '__main__':
4796     unittest.main()