Salome HOME
b5b326bc48c68a98f60aca749294c7def4b359d0
[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 testSwig2ColinearizeKeepingConform2D1(self):
2005         eps = 1.0e-6
2006         # Just to get a nice coords array ...
2007         mm = MEDCouplingCMesh(); arr = DataArrayDouble([0.0, 1.0,2.0])
2008         mm.setCoords(arr, arr);  mm = mm.buildUnstructured();   coo = mm.getCoords()
2009          
2010         mesh = MEDCouplingUMesh("M", 2)
2011         mesh.setCoords(coo)
2012         c = [NORM_POLYGON, 0,1,4,7,6,3,  NORM_QUAD4, 1,2,5,4,  NORM_QUAD4,4,5,8,7]
2013         cI = [0, 7,12,17]
2014         mm.setConnectivity(DataArrayInt(c),DataArrayInt(cI))
2015         mm.checkConsistencyLight()
2016         
2017         mm.colinearizeKeepingConform2D(eps)
2018         c = mm.getNodalConnectivity().getValues()
2019         cI = mm.getNodalConnectivityIndex().getValues()
2020         self.assertEqual(c, [NORM_POLYGON, 0, 1, 4, 7, 6, NORM_POLYGON, 1, 2, 5, 4, NORM_POLYGON, 4, 5, 8, 7])
2021         self.assertEqual(cI, [0,6,11,16])
2022         pass
2023
2024     def testSwig2BoundingBoxForBBTree1(self):
2025         """ 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 !
2026         """
2027         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)
2028         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2029         m.allocateCells()
2030         m.insertNextCell(NORM_QPOLYG,[0,1,2,3,11,5,7,9,12,13,14,17,4,6,8,16])
2031         m.insertNextCell(NORM_QPOLYG,[3,0,9,11,15,16,10,17])
2032         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))
2033         pass
2034
2035     def testSwig2CartBuildUnstructuredOnExoticCases1(self):
2036         """ Test focusing on traduction from cartesian to unstructured mesh when spaceDim greater than meshDim.
2037         """
2038         #
2039         m=MEDCouplingCMesh()
2040         arrX=DataArrayDouble(3) ; arrX.iota()
2041         arrY=DataArrayDouble(4) ; arrY.iota()
2042         arrZ=DataArrayDouble(1) ; arrZ.iota()
2043         m.setCoords(arrX,arrY,arrZ)
2044         self.assertEqual(2,m.getMeshDimension())
2045         self.assertEqual(3,m.getSpaceDimension())
2046         mu=m.buildUnstructured()
2047         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])))
2048         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2049         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)])
2050         self.assertTrue(mu.getCoords().isEqual(coo0,1e-12))
2051         #
2052         m=MEDCouplingCMesh()
2053         arrX=DataArrayDouble(3) ; arrX.iota()
2054         arrY=DataArrayDouble(1) ; arrY.iota()
2055         arrZ=DataArrayDouble(4) ; arrZ.iota()
2056         m.setCoords(arrX,arrY,arrZ)
2057         self.assertEqual(2,m.getMeshDimension())
2058         self.assertEqual(3,m.getSpaceDimension())
2059         mu=m.buildUnstructured()
2060         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])))
2061         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2062         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)])
2063         self.assertTrue(mu.getCoords().isEqual(coo1,1e-12))
2064         #
2065         m=MEDCouplingCMesh()
2066         arrX=DataArrayDouble(1) ; arrX.iota() ; arrX+=9
2067         arrY=DataArrayDouble(3) ; arrY.iota()
2068         arrZ=DataArrayDouble(4) ; arrZ.iota()
2069         m.setCoords(arrX,arrY,arrZ)
2070         self.assertEqual(2,m.getMeshDimension())
2071         self.assertEqual(3,m.getSpaceDimension())
2072         mu=m.buildUnstructured()
2073         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])))
2074         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30])))
2075         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)])
2076         self.assertTrue(mu.getCoords().isEqual(coo2,1e-12))
2077         #
2078         m=MEDCouplingCMesh()
2079         arrX=DataArrayDouble(3) ; arrX.iota()
2080         arrY=DataArrayDouble(1) ; arrY.iota(7)
2081         arrZ=DataArrayDouble(1) ; arrZ.iota(8)
2082         m.setCoords(arrX,arrY,arrZ)
2083         self.assertEqual(1,m.getMeshDimension())
2084         self.assertEqual(3,m.getSpaceDimension())
2085         mu=m.buildUnstructured()
2086         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2087         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2088         coo3=DataArrayDouble([(0,7,8),(1,7,8),(2,7,8)])
2089         self.assertTrue(mu.getCoords().isEqual(coo3,1e-12))
2090         #
2091         m=MEDCouplingCMesh()
2092         arrX=DataArrayDouble(1) ; arrX.iota(7)
2093         arrY=DataArrayDouble(1) ; arrY.iota(8)
2094         arrZ=DataArrayDouble(3) ; arrZ.iota()
2095         m.setCoords(arrX,arrY,arrZ)
2096         self.assertEqual(1,m.getMeshDimension())
2097         self.assertEqual(3,m.getSpaceDimension())
2098         mu=m.buildUnstructured()
2099         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2100         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2101         coo4=DataArrayDouble([(7,8,0),(7,8,1),(7,8,2)])
2102         self.assertTrue(mu.getCoords().isEqual(coo4,1e-12))
2103         #
2104         m=MEDCouplingCMesh()
2105         arrX=DataArrayDouble(3) ; arrX.iota()
2106         arrY=DataArrayDouble(1) ; arrY.iota(7)
2107         m.setCoords(arrX,arrY)
2108         self.assertEqual(1,m.getMeshDimension())
2109         self.assertEqual(2,m.getSpaceDimension())
2110         mu=m.buildUnstructured()
2111         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2112         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2113         coo5=DataArrayDouble([(0,7),(1,7),(2,7)])
2114         self.assertTrue(mu.getCoords().isEqual(coo5,1e-12))
2115         #
2116         m=MEDCouplingCMesh()
2117         arrX=DataArrayDouble(1) ; arrX.iota(7)
2118         arrY=DataArrayDouble(3) ; arrY.iota()
2119         m.setCoords(arrX,arrY)
2120         self.assertEqual(1,m.getMeshDimension())
2121         self.assertEqual(2,m.getSpaceDimension())
2122         mu=m.buildUnstructured()
2123         self.assertTrue(mu.getNodalConnectivity().isEqual(DataArrayInt([1,0,1,1,1,2])))
2124         self.assertTrue(mu.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2125         coo6=DataArrayDouble([(7,0),(7,1),(7,2)])
2126         self.assertTrue(mu.getCoords().isEqual(coo6,1e-12))
2127         pass
2128
2129     def testSwig2Colinearize2D2(self):
2130         """ simple non regression test but that has revealed a bug"""
2131         coo=DataArrayDouble([(0,0),(0,0.5),(0,1),(1,1),(1,0),(0.5,0)])
2132         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
2133         m.allocateCells() ; m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
2134         m.checkConsistency()
2135         refPtr=m.getCoords().getHiddenCppPointer()
2136         #
2137         m.colinearize2D(1e-12)
2138         m.checkConsistency()
2139         self.assertEqual(refPtr,m.getCoords().getHiddenCppPointer())
2140         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([NORM_POLYGON,0,2,3,4])))
2141         self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5])))
2142         pass
2143
2144     def testSwig2Colinearize2D3(self):
2145         """ colinearize was too aggressive, potentially producing cells with one edge """
2146         # Flat polygon  with 3 edges - nothing should happen (min number of edges for a linear polyg)
2147         coo = DataArrayDouble([0.0,0.0,  2.0,0.0,   1.5,0.0,  1.0,0.0,  0.5,0.0], 5,2)
2148         m = MEDCouplingUMesh("m", 2)
2149         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2], [0,4]] ]
2150         m.setCoords(coo); m.setConnectivity(c, cI)
2151         m.colinearize2D(1e-10)
2152         m.checkConsistency()
2153         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2154         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2155
2156         # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg)
2157         m = MEDCouplingUMesh("m", 2)
2158         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,  2,3], [0,5]] ]
2159         m.setCoords(coo); m.setConnectivity(c, cI)
2160         m.colinearize2D(1e-10)
2161         m.checkConsistency()
2162         self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues())
2163         self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues())
2164
2165         # Flat polygon, 4 edges - one reduction should happen
2166         m = MEDCouplingUMesh("m", 2)
2167         c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2,3], [0,5]] ]
2168         m.setCoords(coo); m.setConnectivity(c, cI)
2169         m.colinearize2D(1e-10)
2170         m.checkConsistency()
2171         self.assertEqual([NORM_POLYGON, 3,1,2], m.getNodalConnectivity().getValues())
2172         self.assertEqual([0,4], m.getNodalConnectivityIndex().getValues())
2173
2174         # Flat quad polygon, 3 edges - one reduction expected
2175         m = MEDCouplingUMesh("m", 2)
2176         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,3,  3,2,4], [0,7]] ]
2177         m.setCoords(coo); m.setConnectivity(c, cI)
2178         m.colinearize2D(1e-10)
2179         m.checkConsistency()
2180         self.assertEqual([NORM_QPOLYG, 3,1, 5,2], m.getNodalConnectivity().getValues())
2181         self.assertTrue( m.getCoords()[5].isEqual( DataArrayDouble([(1.5,0.0)]), 1.0e-12 ) )
2182         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2183
2184         # Now an actual (neutronic) case: circle made of 4 SEG3. Should be reduced to 2 SEG3
2185         m = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 1.0)
2186         c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 7,5,3,1,  6,4,2,0], [0,9]] ]
2187         m.colinearize2D(1e-10)
2188         m.checkConsistency()
2189         self.assertEqual([NORM_QPOLYG, 3,5,  8,4], m.getNodalConnectivity().getValues())
2190         self.assertTrue( m.getCoords()[8].isEqual( DataArrayDouble([(1.0,0.0)]), 1.0e-12 ) )
2191         self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues())
2192
2193     def testSwig2Colinearize2D4(self):
2194         """ From ALAMOS. Colinearize around last seg in the connectivity was buggy. """
2195         mesh = MEDCouplingUMesh('C3', 2)
2196         coo = DataArrayDouble([(-31.838400909874,21.557335816426),(-34.588400909874,16.794196095611),(-33.298676775512,19.225000000000),(-33.547226066398,19.368500000000),(-32.750140188627,22.083728734445),(-35.500140188627,17.320589013630),
2197                                (-35.044270549250,17.057392554621),(-32.619779010901,22.008464673393),(-32.554667298175,21.970872408523),(-32.745177043525,22.080863261284),(-32.747658616076,22.082295997864),(-32.682478027213,22.044663967338)])
2198         mesh.setCoords(coo)
2199         c = DataArrayInt([32, 0, 1, 5, 4, 9, 7, 2, 6, 3, 10, 11, 8])
2200         cI = DataArrayInt([0, 13])
2201         mesh.setConnectivity(c, cI)
2202         mesh.colinearize2D(1.0e-8)
2203         coo = mesh.getCoords()
2204         self.assertEqual(coo.getNumberOfTuples(), 13)
2205         lstPt = coo[12]
2206         self.assertAlmostEqual(lstPt[0,0], -32.29427054925)
2207         self.assertAlmostEqual(lstPt[0,1], 21.8205322754351)
2208         pass
2209
2210     def testSwig2CheckAndPreparePermutation2(self):
2211         a=DataArrayInt([10003,9999999,5,67])
2212         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([2,3,0,1])))
2213         a=DataArrayInt([10003,-9999999,5,67])
2214         self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([3,0,1,2])))
2215         a=DataArrayInt([])
2216         self.assertTrue(DataArrayInt.checkAndPreparePermutation(a).isEqual(DataArrayInt([])))
2217         pass
2218
2219     def testSwig2ComputeNeighborsOfNodes1(self):
2220         arrX=DataArrayDouble(3) ; arrX.iota()
2221         arrY=DataArrayDouble(4) ; arrY.iota()
2222         arrZ=DataArrayDouble(5) ; arrZ.iota()
2223         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
2224         # 3D
2225         a,b=m.computeNeighborsOfNodes()
2226         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])))
2227         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])))
2228         # 2D
2229         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m=m.buildUnstructured()
2230         a,b=m.computeNeighborsOfNodes()
2231         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])))
2232         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2233         # 1D
2234         m=m.buildDescendingConnectivity()[0]
2235         a,b=m.computeNeighborsOfNodes()
2236         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])))
2237         self.assertTrue(b.isEqual(DataArrayInt([0,2,5,7,10,14,17,20,24,27,29,32,34])))
2238         pass
2239
2240     def testSwigBugOnUnpackingTuplesInDataArray1(self):
2241         inp=DataArrayDouble([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2242         it=inp.__iter__()
2243         r = next(it)
2244         self.assertRaises(StopIteration,r.__getitem__,4)
2245         self.assertEqual(len(r),3)
2246         a,b,c=r
2247         r = next(it)
2248         self.assertEqual(len(r),3)
2249         d,e,f=r
2250         r = next(it)
2251         self.assertEqual(len(r),3)
2252         g,h,i=r
2253         r = next(it)
2254         self.assertEqual(len(r),3)
2255         j,k,l=r
2256         self.assertTrue(inp.isEqual(DataArrayDouble([a,b,c,d,e,f,g,h,i,j,k,l],4,3),1e-12))
2257         ########
2258         inp=DataArrayInt([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
2259         it=inp.__iter__()
2260         r = next(it)
2261         self.assertRaises(StopIteration,r.__getitem__,4)
2262         self.assertEqual(len(r),3)
2263         a,b,c=r
2264         r = next(it)
2265         self.assertEqual(len(r),3)
2266         d,e,f=r
2267         r = next(it)
2268         self.assertEqual(len(r),3)
2269         g,h,i=r
2270         r = next(it)
2271         self.assertEqual(len(r),3)
2272         j,k,l=r
2273         self.assertTrue(inp.isEqual(DataArrayInt([a,b,c,d,e,f,g,h,i,j,k,l],4,3)))
2274         pass
2275
2276     def testSwig2IMesh1(self):
2277         """ 1st test of image grid mesh.
2278         """
2279         m=MEDCouplingIMesh()
2280         self.assertEqual(m.getSpaceDimension(),-1)
2281         self.assertEqual(1,len(m.__repr__().split("\n")))
2282         self.assertEqual(6,len(m.__str__().split("\n")))
2283         self.assertRaises(InterpKernelException,m.getNodeStruct)
2284         self.assertRaises(InterpKernelException,m.getOrigin)
2285         self.assertRaises(InterpKernelException,m.getDXYZ)
2286         m.setSpaceDimension(3)
2287         self.assertEqual(9,len(m.__str__().split("\n")))
2288         self.assertEqual(4,len(m.__repr__().split("\n")))
2289         self.assertEqual((0,0,0),m.getNodeStruct())
2290         self.assertEqual((0.,0.,0.),m.getOrigin())
2291         self.assertEqual((0.,0.,0.),m.getDXYZ())
2292         self.assertRaises(InterpKernelException,m.setNodeStruct,[3,4])
2293         m.setNodeStruct([3,4,2])
2294         self.assertEqual((3,4,2),m.getNodeStruct())
2295         m.setOrigin(DataArrayDouble([1.5,2.5,3.5]))
2296         self.assertEqual((1.5,2.5,3.5),m.getOrigin())
2297         m.setDXYZ((0.5,1.,0.25))
2298         self.assertEqual((0.5,1.,0.25),m.getDXYZ())
2299         for it in DataArrayDouble([(1.5,2.5,3.5)]):
2300             m2=MEDCouplingIMesh("",3,DataArrayInt([3,4,2]),it,DataArrayDouble((0.5,1.,0.25)))
2301             pass
2302         self.assertEqual(3,m.getSpaceDimension())
2303         self.assertEqual((3,4,2),m2.getNodeStruct())
2304         self.assertEqual((1.5,2.5,3.5),m2.getOrigin())
2305         self.assertEqual((0.5,1.,0.25),m2.getDXYZ())
2306         self.assertEqual(24,m2.getNumberOfNodes())
2307         self.assertEqual(6,m2.getNumberOfCells())
2308         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2309         m2.setAxisUnit("m")
2310         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2311         m.setAxisUnit("m")
2312         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2313         m.setName("mesh")
2314         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2315         m2.setName("mesh")
2316         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2317         m2.setTime(1.1,0,3)
2318         self.assertTrue(not m.isEqual(m2,1e-12))
2319         m.setTime(1.1,0,3)
2320         self.assertTrue(m.isEqual(m2,1e-12))
2321         m.setTimeUnit("ms")
2322         self.assertTrue(not m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2323         m2.setTimeUnit("ms")
2324         self.assertTrue(m.isEqual(m2,1e-12)) ; self.assertTrue(m.isEqualWithoutConsideringStr(m2,1e-12))
2325         #
2326         m2.setNodeStruct([3,2,4])
2327         self.assertTrue(not m.isEqual(m2,1e-12))
2328         m.setNodeStruct([3,2,4])
2329         self.assertTrue(m.isEqual(m2,1e-12))
2330         m.setOrigin(DataArrayDouble([1.5,3.5,2.5]))
2331         self.assertTrue(not m.isEqual(m2,1e-12))
2332         m2.setOrigin([1.5,3.5,2.5])
2333         self.assertTrue(m.isEqual(m2,1e-12))
2334         m.setDXYZ((0.5,0.25,1.))
2335         self.assertTrue(not m.isEqual(m2,1e-12))
2336         m2.setDXYZ(DataArrayDouble((0.5,0.25,1.)))
2337         self.assertTrue(m.isEqual(m2,1e-12))
2338         m2bis=m2.deepCopy()
2339         self.assertTrue(m2bis.isEqual(m2,1e-12))
2340         #
2341         self.assertEqual(6,m2bis.getNumberOfCells())#3,2,4
2342         m2bis.refineWithFactor([3,3,3])
2343         self.assertEqual(162,m2bis.getNumberOfCells())
2344         self.assertEqual((7,4,10),m2bis.getNodeStruct())
2345         self.assertEqual((1.5,3.5,2.5),m2bis.getOrigin())
2346         self.assertTrue(DataArrayDouble([0.16666666666666666,0.08333333333333333,0.3333333333333333]).isEqual(DataArrayDouble(m2bis.getDXYZ()),1e-12))
2347         #
2348         self.assertEqual(3,m.getMeshDimension())
2349         self.assertAlmostEqual(0.125,m.getMeasureOfAnyCell(),16);
2350         mu=MEDCoupling1SGTUMesh(m.buildUnstructured())
2351         mu.checkConsistency()
2352         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]"])
2353         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2354         self.assertEqual(NORM_HEXA8,mu.getCellModelEnum())
2355         self.assertTrue(mu.getCoords().isEqual(cooExp,1e-12))
2356         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])))
2357         bary=m.computeCellCenterOfMass()
2358         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]"])
2359         self.assertTrue(bary.isEqual(baryExp,1e-12))
2360         #
2361         c=m.convertToCartesian()
2362         c.checkConsistencyLight()
2363         self.assertEqual([1.1,0,3],c.getTime())
2364         self.assertEqual("ms",c.getTimeUnit())
2365         self.assertEqual(3,c.getMeshDimension())
2366         self.assertEqual(3,c.getSpaceDimension())
2367         arrX=DataArrayDouble([1.5,2.,2.5]) ; arrX.setInfoOnComponents(["X [m]"])
2368         self.assertTrue(c.getCoordsAt(0).isEqual(arrX,1e-12))
2369         arrY=DataArrayDouble([3.5,3.75]) ; arrY.setInfoOnComponents(["Y [m]"])
2370         self.assertTrue(c.getCoordsAt(1).isEqual(arrY,1e-12))
2371         arrZ=DataArrayDouble([2.5,3.5,4.5,5.5]) ; arrZ.setInfoOnComponents(["Z [m]"])
2372         self.assertTrue(c.getCoordsAt(2).isEqual(arrZ,1e-12))
2373         self.assertTrue(c.buildUnstructured().isEqual(m.buildUnstructured(),1e-12))
2374         #
2375         a,b=m.getCellsContainingPoints(baryExp,1e-12)
2376         self.assertTrue(a.isEqual(DataArrayInt([0,1,2,3,4,5])))
2377         self.assertTrue(b.isEqual(DataArrayInt([0,1,2,3,4,5,6])))
2378         for a,b in enumerate(baryExp):
2379             self.assertEqual(a,m.getCellContainingPoint(b,1e-12))
2380             pass
2381         #
2382         m.translate([1.,2.,4.])
2383         self.assertEqual((3,2,4),m.getNodeStruct())
2384         self.assertEqual((2.5,5.5,6.5),m.getOrigin())
2385         self.assertEqual((0.5,0.25,1.),m.getDXYZ())
2386         m.scale([0.,1.,3.],2.)
2387         self.assertAlmostEqual(1.,m.getMeasureOfAnyCell(),16);
2388         self.assertEqual((3,2,4),m.getNodeStruct())
2389         self.assertEqual((5.,10.,10.),m.getOrigin())
2390         self.assertEqual((1.,0.5,2.),m.getDXYZ())
2391         #
2392         f=m.getMeasureField(False)
2393         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setTime(1.1,0,3) ; f2.setMesh(m) ; arr=DataArrayDouble(6) ; arr[:]=1. ; f2.setArray(arr) ; f2.setTimeUnit("ms")
2394         f2.setName("MeasureOfMesh_mesh")
2395         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2396         #
2397         m3=m.buildStructuredSubPart([(1,2),(0,1),(1,3)])
2398         self.assertEqual((2,2,3),m3.getNodeStruct())
2399         self.assertEqual((6.,10.,12.),m3.getOrigin())
2400         self.assertEqual((1.,0.5,2.),m3.getDXYZ())
2401         # now playing with 3D surf
2402         m4=MEDCouplingIMesh("",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m4.setAxisUnit("km")
2403         self.assertEqual([(1.5,2.5),(2.5,3.5),(3.5,4.25)],m4.getBoundingBox())
2404         self.assertEqual(3,m4.getSpaceDimension())
2405         self.assertEqual(2,m4.getMeshDimension())
2406         self.assertEqual(12,m4.getNumberOfNodes())
2407         self.assertEqual(6,m4.getNumberOfCells())
2408         mu=MEDCoupling1SGTUMesh(m4.buildUnstructured())
2409         mu.checkConsistency()
2410         self.assertTrue(isinstance(mu,MEDCoupling1SGTUMesh))
2411         self.assertEqual(NORM_QUAD4,mu.getCellModelEnum())
2412         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]"])
2413         self.assertTrue(mu.getCoords().isEqual(coordsExp,1e-12))
2414         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])))
2415         pass
2416
2417     def testSwig1GetValuesAsTuple1(self):
2418         d=DataArrayDouble()
2419         self.assertEqual(d.getValues(),[])
2420         self.assertEqual(d.getValuesAsTuple(),[])
2421         d=DataArrayDouble(24) ; d.iota() ; d.rearrange(3)
2422         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.])
2423         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.)])
2424         d=DataArrayInt()
2425         self.assertEqual(d.getValues(),[])
2426         self.assertEqual(d.getValuesAsTuple(),[])
2427         d=DataArrayInt(24) ; d.iota() ; d.rearrange(3)
2428         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])
2429         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)])
2430         pass
2431
2432     def testSwig2AMR1(self):
2433         self.assertEqual((1,3,12),MEDCouplingStructuredMesh.GetSplitVectFromStruct([3,4,5]))
2434         self.assertEqual((3,2),MEDCouplingStructuredMesh.GetDimensionsFromCompactFrmt([(1,4),(2,4)]))
2435         #
2436         amr=MEDCouplingCartesianAMRMesh("",2,[3,3],[0,0],[1,1])
2437         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2438         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithOverlap())
2439         self.assertEqual(4,amr.getNumberOfCellsRecursiveWithoutOverlap())
2440         self.assertEqual(0,amr.getNumberOfPatches())
2441         self.assertEqual(1,amr.getMaxNumberOfLevelsRelativeToThis())
2442         self.assertEqual(2,amr.getSpaceDimension())
2443         amr.addPatch([(1,2),(0,1)],[4,4])
2444         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2445         self.assertEqual(20,amr.getNumberOfCellsRecursiveWithOverlap())
2446         self.assertEqual(19,amr.getNumberOfCellsRecursiveWithoutOverlap())
2447         self.assertEqual(1,amr.getNumberOfPatches())
2448         self.assertEqual(2,amr.getMaxNumberOfLevelsRelativeToThis())
2449         self.assertEqual(2,amr.getSpaceDimension())
2450         amr[0].addPatch([(2,3),(1,3)],[3,2])
2451         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2452         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2453         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2454         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2455         self.assertEqual(1,amr.getNumberOfPatches())
2456         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2457         self.assertEqual(2,amr.getSpaceDimension())
2458         amr[0].addPatch([(0,2),(3,4)],[3,2])
2459         self.assertEqual(16,amr[0].getMesh().getNumberOfCellsAtCurrentLevel())
2460         self.assertEqual(44,amr.getNumberOfCellsRecursiveWithOverlap())
2461         self.assertEqual(39,amr.getNumberOfCellsRecursiveWithoutOverlap())
2462         self.assertEqual(2,amr[0].getMesh().getNumberOfPatches())
2463         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2464         self.assertEqual(2,amr.getSpaceDimension())
2465         del amr[0][1]
2466         self.assertEqual(amr[0].getBLTRRange(),[(1,2),(0,1)])
2467         self.assertEqual(4,amr.getNumberOfCellsAtCurrentLevel())
2468         self.assertEqual(32,amr.getNumberOfCellsRecursiveWithOverlap())
2469         self.assertEqual(29,amr.getNumberOfCellsRecursiveWithoutOverlap())
2470         self.assertEqual(1,amr.getNumberOfPatches())
2471         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2472         self.assertEqual(2,amr.getSpaceDimension())
2473         pass
2474
2475     def testSwig2NonRegressionTestPAL1164(self):
2476         """ Test PAL1164 Protection of applyLin against error in compoId ( #CEA22584 ) """
2477         xarr=DataArrayDouble(3,1)
2478         xarr.iota(0.)
2479         cmesh=MEDCouplingCMesh()
2480         cmesh.setCoords(xarr,xarr,xarr)
2481         mesh=cmesh.buildUnstructured()
2482         f=mesh.fillFromAnalytic(ON_CELLS,1,"(x-5.)*(x-5.)+(y-5.)*(y-5.)+(z-5.)*(z-5.)")
2483         f.setName("MyField")
2484         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2485         self.assertRaises(InterpKernelException,f.applyLin,2.,0.,1)# compoId 1 whereas f has only one component !
2486         self.assertTrue(f.getArray().isEqual(DataArrayDouble([60.75,52.75,52.75,44.75,52.75,44.75,44.75,36.75]),1e-12))
2487         f.applyLin(2.,0.,0)# here it is OK !
2488         self.assertTrue(f.getArray().isEqual(DataArrayDouble([121.5,105.5,105.5,89.5,105.5,89.5,89.5,73.5]),1e-12))
2489         f.applyLin(2.,0.)
2490         self.assertTrue(f.getArray().isEqual(DataArrayDouble([243.,211.,211.,179.,211.,179.,179.,147.]),1e-12))
2491         pass
2492
2493     def testSwig2StructurizeMe1(self):
2494         arrx=DataArrayDouble(3) ; arrx.iota() ; arrx*=2.
2495         arry=DataArrayDouble(4) ; arry.iota() ; arry+=3.
2496         arrz=DataArrayDouble(5) ; arrz.iota() ; arrz*=0.5 ; arrz+=2.
2497         c=MEDCouplingCMesh() ; c.setCoords(arrx,arry,arrz)
2498         c.setName("mesh") ; c.setDescription("mesh descr") ; c.setTimeUnit("us") ; c.setTime(1.2,3,4)
2499         u=c.buildUnstructured()
2500         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])
2501         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])
2502         u.renumberCells(cp)
2503         u.renumberNodes(np,len(np))
2504         u=MEDCoupling1SGTUMesh(u)
2505         #
2506         e,d,f=u.structurizeMe()
2507         self.assertTrue(c.isEqual(e,1e-12))
2508         self.assertTrue(d.isEqual(cp))
2509         self.assertTrue(f.isEqual(np))
2510         pass
2511
2512     def testSwig2DenseMatrix1(self):
2513         m0=DenseMatrix(DataArrayDouble([2,3,4,5,1,6]),2,3)
2514         self.assertEqual(m0.getNumberOfRows(),2)
2515         self.assertEqual(m0.getNumberOfCols(),3)
2516         self.assertEqual(m0.getNbOfElems(),6)
2517         ref=m0.getData().getHiddenCppPointer()
2518         m00=m0.deepCopy()
2519         self.assertTrue(m0.isEqual(m00,1e-12))
2520         m00.getData().setIJ(0,0,2.1)
2521         self.assertTrue(not m0.isEqual(m00,1e-12))
2522         m00.getData().setIJ(0,0,2.)
2523         self.assertTrue(m0.isEqual(m00,1e-12))
2524         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2525         #
2526         m000=m0*DataArrayDouble([5,9,3])
2527         self.assertTrue(m000.getData().isEqual(DataArrayDouble([49.,52.]),1e-12))
2528         #
2529         m0.reShape(3,2)
2530         self.assertTrue(not m0.isEqual(m00,1e-12))
2531         self.assertEqual(m0.getNumberOfRows(),3)
2532         self.assertEqual(m0.getNumberOfCols(),2)
2533         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2534         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2535         m0.reShape(2,3)
2536         self.assertTrue(m0.isEqual(m00,1e-12))
2537         self.assertEqual(ref,m0.getData().getHiddenCppPointer())
2538         self.assertEqual(m0.getNumberOfRows(),2)
2539         self.assertEqual(m0.getNumberOfCols(),3)
2540         self.assertTrue(m0.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2541         #m0np=m0.getData().toNumPyArray() ; m0np=matrix(m0np.reshape(m0.getNumberOfRows(),m0.getNumberOfCols()))
2542         m1=m0.deepCopy()
2543         self.assertEqual(m1.getNumberOfRows(),2)
2544         self.assertEqual(m1.getNumberOfCols(),3)
2545         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2546         m11=m0.deepCopy() ; m11+=m1
2547         self.assertEqual(m11.getNumberOfRows(),2)
2548         self.assertEqual(m11.getNumberOfCols(),3)
2549         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2550         m11=m11+m1
2551         self.assertEqual(m11.getNumberOfRows(),2)
2552         self.assertEqual(m11.getNumberOfCols(),3)
2553         self.assertTrue(m11.getData().isEqual(DataArrayDouble([6,9,12,15,3,18]),1e-12))
2554         m11=m11-m1
2555         self.assertEqual(m11.getNumberOfRows(),2)
2556         self.assertEqual(m11.getNumberOfCols(),3)
2557         self.assertTrue(m11.getData().isEqual(DataArrayDouble([4,6,8,10,2,12]),1e-12))
2558         m11-=m1
2559         self.assertEqual(m1.getNumberOfRows(),2)
2560         self.assertEqual(m1.getNumberOfCols(),3)
2561         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,3,4,5,1,6]),1e-12))
2562         m1.transpose()
2563         self.assertEqual(m1.getNumberOfRows(),3)
2564         self.assertEqual(m1.getNumberOfCols(),2)
2565         self.assertTrue(m1.getData().isEqual(DataArrayDouble([2,5,3,1,4,6]),1e-12))
2566         #m1np=m0np.transpose()
2567         m2=m0*m1
2568         self.assertEqual(m2.getNumberOfRows(),2)
2569         self.assertEqual(m2.getNumberOfCols(),2)
2570         self.assertTrue(m2.getData().isEqual(DataArrayDouble([29,37,37,62]),1e-12))
2571         pass
2572
2573     def testSwig2AMR2(self):
2574         """ 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."""
2575         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2576         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2577         MEDCouplingIMesh.CondenseFineToCoarse([5,7],fine,[(1,4),(2,4)],[4,4],coarse)
2578         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))
2579         # 3D
2580         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2581         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2582         MEDCouplingIMesh.CondenseFineToCoarse([5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4],coarse)
2583         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))
2584         # 1D
2585         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2586         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2587         MEDCouplingIMesh.CondenseFineToCoarse([5],fine,[(1,4)],[4],coarse)
2588         self.assertTrue(coarse.isEqual(DataArrayDouble([0,6,22,38,4]),1e-12))
2589         pass
2590
2591     def testSwig2AMR3(self):
2592         """ Test spread of coarse IMesh instance into a fine one, with a factor."""
2593         coarse=DataArrayDouble(35) ; coarse.iota(0) #X=5,Y=7
2594         fine=DataArrayDouble(3*2*4*4) ; fine.iota(0) #X=3,Y=2 refined by 4
2595         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7],fine,[(1,4),(2,4)],[4,4])
2596         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))
2597         # 3D
2598         coarse=DataArrayDouble(175) ; coarse.iota(0) #X=5,Y=7,Z=5
2599         fine=DataArrayDouble(3*2*3*4*4*4) ; fine.iota(0) #X=3,Y=2,Z=3 refined by 4
2600         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5,7,5],fine,[(1,4),(2,4),(1,4)],[4,4,4])
2601         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))
2602         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()
2603         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()
2604         # 1D
2605         coarse=DataArrayDouble(5) ; coarse.iota(0) #X=5
2606         fine=DataArrayDouble(3*4) ; fine.iota(0) #X=3 refined by 4
2607         MEDCouplingIMesh.SpreadCoarseToFine(coarse,[5],fine,[(1,4)],[4])
2608         self.assertTrue(fine.isEqual(DataArrayDouble([1.,1.,1.,1.,2.,2.,2.,2.,3.,3.,3.,3.]),1e-12))
2609         pass
2610
2611     def testSwig2AMR4(self):
2612         """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."""
2613         im=MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04])
2614         b=im.computeCellCenterOfMass() ; b-=[1.,1.] ; b=b.magnitude()
2615         ids=b.findIdsInRange(0.4,0.7)
2616         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(im) ; f.setName("toto") ; arr=DataArrayDouble(im.getNumberOfCells()) ; arr[:]=0. ; arr[ids]=1. ; f.setArray(arr)
2617         # f.write("test.vti")
2618         amr=MEDCouplingCartesianAMRMesh(MEDCouplingIMesh("mesh",2,[51,51],[0.,0.],[0.04,0.04]))
2619         arr2=DataArrayByte(im.getNumberOfCells()) ; arr2[:]=0 ; arr2[ids]=1
2620         bso=BoxSplittingOptions() ; bso.setEfficiencyGoal(0.5); bso.setEfficiencyThreshold(0.8) ; bso.setMaximumNbOfCellsInPatch(3000) ; bso.setMinimumPatchLength(6) ; bso.setMaximumPatchLength(11)
2621         amr.createPatchesFromCriterion(bso,arr2,[2,2])
2622         m=amr.getImageMesh() ; m=m.buildUnstructured() ; m.changeSpaceDimension(3,1.)
2623         self.assertEqual(12,amr.getNumberOfPatches())
2624         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)]]
2625         for i,bltr in enumerate(exp0):
2626             self.assertEqual(amr[i].getBLTRRange(),bltr)
2627             pass
2628         self.assertAlmostEqual(0.666666666667,amr[3].getMesh().getImageMesh().computeSquareness(),12)
2629         #
2630         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceToGlobalOfCompactFrmt([(8,32),(4,17)],[(0,24),(2,12)]),[(8,32),(6,16)])
2631         self.assertEqual(MEDCouplingStructuredMesh.ChangeReferenceFromGlobalOfCompactFrmt([(8,32),(4,17)],[(8,32),(6,16)]),[(0,24),(2,12)])
2632         self.assertTrue(amr.getImageMesh().isEqual(im,1e-12))
2633         m=amr.getImageMesh().asSingleCell().build1SGTUnstructured()
2634         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3])))
2635         self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(DataArrayDouble([(0,0),(2,0),(0,2),(2,2)]),1e-12))
2636         pass
2637
2638     def testSwig2AMR5(self):
2639         """ Idem testAMR3, test spread of coarse IMesh instance into a fine one, with a factor, but here ghost is used !"""
2640         # 1D
2641         coarse=DataArrayDouble(5+2) ; coarse.iota(-1) #X=5 with ghostLev=1
2642         fine=DataArrayDouble(3*4+2) ; fine.iota(1000) #X=3 refined by 4 with ghostLev=1
2643         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5],fine,[(1,4)],[4],1)
2644         self.assertTrue(fine.isEqual(DataArrayDouble([0,1,1,1,1,2,2,2,2,3,3,3,3,4]),1e-12))
2645         coarse.iota(-1000)
2646         MEDCouplingIMesh.CondenseFineToCoarseGhost([5],fine,[(1,4)],[4],coarse,1)
2647         self.assertTrue(coarse.isEqual(DataArrayDouble([-1000.,-999.,4.,8.,12.,-995.,-994.]),1e-12))
2648         # 2D
2649         coarse=DataArrayDouble((5+2*1)*(7+2*1)) ; coarse.iota(0) #X=5,Y=7 with ghostLev=1
2650         fine=DataArrayDouble((3*4+2*1)*(2*4+2*1)) ; fine.iota(1000) #X=3,Y=2 refined by 4
2651         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[5,7],fine,[(1,4),(2,4)],[4,4],1)
2652         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))
2653         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2654         coarse.iota(-1000)
2655         fine2=DataArrayDouble.Meld(fine,3*fine) ; coarse2=DataArrayDouble.Meld(coarse,3*coarse)
2656         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine,[(1,4),(2,4)],[4,4],coarse,1)
2657         MEDCouplingIMesh.CondenseFineToCoarseGhost([5,7],fine2,[(1,4),(2,4)],[4,4],coarse2,1)
2658         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(MEDCouplingIMesh("",2,DataArrayInt([8,10]),[0.,0.],DataArrayDouble((1.,1.)))) ; f.setArray(coarse) ; f.setName("tutu") ; f.checkConsistencyLight()
2659         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.])
2660         self.assertTrue(coarse.isEqual(coarseExp,1e-12))
2661         self.assertTrue(coarse2[:,0].isEqual(coarseExp,1e-12))
2662         self.assertTrue(coarse2[:,1].isEqual(3*coarseExp,1e-12))
2663         pass
2664
2665     def testSwig2AMR6(self):
2666         """ 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."""
2667         amr=MEDCouplingCartesianAMRMesh("",2,[6,6],[0,0],[1,1])
2668         da=DataArrayDouble((5+2)*(5+2)) ; da.iota() ; da+=0.9
2669         amr.addPatch([(1,4),(2,4)],[4,4])
2670         amr.addPatch([(0,1),(0,1)],[4,4])
2671         amr.addPatch([(4,5),(3,4)],[4,4])
2672         amr.addPatch([(4,5),(1,3)],[4,4])
2673         amr.addPatch([(0,1),(1,4)],[4,4])
2674         da0=DataArrayDouble((3*4+2)*(2*4+2)) ; da0.iota() ; da0[:]+=0.2
2675         da1=DataArrayDouble((1*4+2)*(1*4+2)) ; da1.iota() ; da1[:]+=0.4
2676         da2=DataArrayDouble((1*4+2)*(1*4+2)) ; da2.iota() ; da2[:]+=0.6
2677         da3=DataArrayDouble((1*4+2)*(2*4+2)) ; da3.iota() ; da3[:]+=0.7
2678         da4=DataArrayDouble((1*4+2)*(3*4+2)) ; da4.iota() ; da4[:]+=0.8
2679         self.assertEqual(5,amr.getNumberOfPatches())
2680         l=[da0,da1,da2,da3,da4]
2681         lCpy=[elt.deepCopy() for elt in l]
2682         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2683         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2684         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2685         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2686         #
2687         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2688         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2689         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2690         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(amr[2].getMesh().getImageMesh().buildWithGhost(1)) ; f2.setArray(da2) ; f2.setName("p2") ; f2.checkConsistencyLight()
2691         f3=MEDCouplingFieldDouble(ON_CELLS) ; f3.setMesh(amr[3].getMesh().getImageMesh().buildWithGhost(1)) ; f3.setArray(da3) ; f3.setName("p3") ; f3.checkConsistencyLight()
2692         f4=MEDCouplingFieldDouble(ON_CELLS) ; f4.setMesh(amr[4].getMesh().getImageMesh().buildWithGhost(1)) ; f4.setArray(da4) ; f4.setName("p4") ; f4.checkConsistencyLight()
2693         #
2694         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])
2695         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])
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         #
2701         g0=amr.retrieveGridsAt(0)
2702         self.assertEqual(1,len(g0))
2703         self.assertTrue(isinstance(g0[0],MEDCouplingCartesianAMRPatchGF))
2704         g1=amr.retrieveGridsAt(1)
2705         self.assertEqual(5,len(g1))
2706         for i in range(5):
2707             self.assertTrue(isinstance(g1[i],MEDCouplingCartesianAMRPatch))
2708             pass
2709         pass
2710
2711     def testSwig2AMR7(self):
2712         """Idem testSwig2AMR6 except that we are in 1D"""
2713         amr=MEDCouplingCartesianAMRMesh("",1,[6],[0],[1])
2714         da=DataArrayDouble(5+2) ; da.iota() ; da+=0.9
2715         amr.addPatch([(1,4)],[4])
2716         amr.addPatch([(0,1)],[4])
2717         da0=DataArrayDouble(3*4+2) ; da0.iota() ; da0[:]+=0.2
2718         da1=DataArrayDouble(1*4+2) ; da1.iota() ; da1[:]+=0.4
2719         self.assertEqual(2,amr.getNumberOfPatches())
2720         l=[da0,da1]
2721         lCpy=[elt.deepCopy() for elt in l]
2722         l2=[DataArrayDouble.Meld(elt,3*elt) for elt in l]
2723         amr.fillCellFieldOnPatchGhostAdv(0,da,1,l,False)
2724         amr.fillCellFieldOnPatchGhostAdv(0,DataArrayDouble.Meld(da,3*da),1,l2,False)
2725         amr.fillCellFieldOnPatchOnlyOnGhostZone(0,da,lCpy[0],1)
2726         #
2727         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(amr.getImageMesh().buildWithGhost(1)) ; f.setArray(da) ; f.setName("all")
2728         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setMesh(amr[0].getMesh().getImageMesh().buildWithGhost(1)) ; f0.setArray(da0) ; f0.setName("p0") ; f0.checkConsistencyLight()
2729         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setMesh(amr[1].getMesh().getImageMesh().buildWithGhost(1)) ; f1.setArray(da1) ; f1.setName("p1") ; f1.checkConsistencyLight()
2730         #
2731         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])
2732         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])
2733         self.assertTrue(da0.isEqual(da0Exp,1e-12))
2734         self.assertTrue(l2[0][:,0].isEqual(da0Exp,1e-12))
2735         self.assertTrue(l2[0][:,1].isEqual(3*da0Exp,1e-12))
2736         self.assertTrue(lCpy[0].isEqual(da0Exp2,1e-12))
2737         pass
2738
2739     def testSwig2AMR8(self):
2740         """This test checks 'basic' operations for ghost update."""
2741         ghostSz=1
2742         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2743         amr.addPatch([(1,4),(2,4)],[4,4])
2744         amr.addPatch([(4,5),(3,5)],[4,4])
2745         amr.addPatch([(0,1),(4,6)],[4,4])
2746         amr[0].addPatch([(10,12),(5,8)],[2,2])
2747         amr[1].addPatch([(0,1),(0,5)],[2,2])
2748         amr[2].addPatch([(3,4),(0,3)],[2,2])
2749         m=amr.buildMeshFromPatchEnvelop()
2750         self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,9,8,10,11])))
2751         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))
2752         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2753         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2754         att.alloc()
2755         d=att.getFieldOn(amr,"Field")
2756         self.assertEqual(56,d.getNumberOfTuples())
2757         self.assertEqual(1,d.getNumberOfComponents())
2758         d.iota() ; d+=0.1
2759         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2760         self.assertEqual(140,d0.getNumberOfTuples())
2761         self.assertEqual(1,d0.getNumberOfComponents())
2762         d0.iota() ; d0+=0.2
2763         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2764         self.assertEqual(60,d1.getNumberOfTuples())
2765         self.assertEqual(1,d1.getNumberOfComponents())
2766         d1.iota() ; d1+=0.3
2767         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2768         self.assertEqual(60,d2.getNumberOfTuples())
2769         self.assertEqual(1,d2.getNumberOfComponents())
2770         d2.iota() ; d2+=0.4
2771         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2772         self.assertEqual(48,d00.getNumberOfTuples())
2773         self.assertEqual(1,d00.getNumberOfComponents())
2774         d00.iota() ; d00+=0.5
2775         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2776         self.assertEqual(48,d10.getNumberOfTuples())
2777         self.assertEqual(1,d10.getNumberOfComponents())
2778         d10.iota() ; d10+=0.6
2779         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2780         self.assertEqual(32,d20.getNumberOfTuples())
2781         self.assertEqual(1,d20.getNumberOfComponents())
2782         d20.iota() ; d20+=0.7
2783         f=att.buildCellFieldOnRecurseWithoutOverlapWithoutGhost(amr,"Field")
2784         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])
2785         arrExp.setName("Field") ; arrExp.setInfoOnComponents(["X"])
2786         self.assertTrue(f.getArray().isEqual(arrExp,1e-12))
2787         m=MEDCoupling1SGTUMesh(f.getMesh())
2788         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])))
2789         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))
2790         # the test is here ! To be called after iteration with no remesh
2791         att.synchronizeAllGhostZones()
2792         f=att.buildCellFieldOnWithGhost(amr,"Field") ; f.checkConsistencyLight()
2793         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))
2794         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2795         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2796         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2797         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2798         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2799         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2800         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))
2801         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))
2802         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))
2803         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))
2804         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))
2805         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))
2806         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))
2807         pass
2808
2809     def testSwig2AMR9(self):
2810         """ Equivalent to testSwig2AMR8 except that here the ghost level is 2 !"""
2811         ghostSz=2
2812         amr=MEDCouplingCartesianAMRMesh("",2,[6,7],[0,0],[1,1])
2813         amr.addPatch([(1,4),(2,4)],[4,4])
2814         amr.addPatch([(4,5),(3,5)],[4,4])
2815         amr.addPatch([(0,1),(4,6)],[4,4])
2816         amr[0].addPatch([(10,12),(5,8)],[2,2])
2817         amr[1].addPatch([(0,1),(0,5)],[2,2])
2818         amr[2].addPatch([(3,4),(0,3)],[2,2])
2819         self.assertEqual(3,amr.getMaxNumberOfLevelsRelativeToThis())
2820         att=MEDCouplingAMRAttribute(amr,[("Field",["X"])],ghostSz)
2821         att.alloc()
2822         d=att.getFieldOn(amr,"Field")
2823         self.assertEqual(90,d.getNumberOfTuples())
2824         self.assertEqual(1,d.getNumberOfComponents())
2825         d.iota() ; d+=0.1
2826         d0=att.getFieldOn(amr[0].getMesh(),"Field")
2827         self.assertEqual(192,d0.getNumberOfTuples())
2828         self.assertEqual(1,d0.getNumberOfComponents())
2829         d0.iota() ; d0+=0.2
2830         d1=att.getFieldOn(amr[1].getMesh(),"Field")
2831         self.assertEqual(96,d1.getNumberOfTuples())
2832         self.assertEqual(1,d1.getNumberOfComponents())
2833         d1.iota() ; d1+=0.3
2834         d2=att.getFieldOn(amr[2].getMesh(),"Field")
2835         self.assertEqual(96,d2.getNumberOfTuples())
2836         self.assertEqual(1,d2.getNumberOfComponents())
2837         d2.iota() ; d2+=0.4
2838         d00=att.getFieldOn(amr[0][0].getMesh(),"Field")
2839         self.assertEqual(80,d00.getNumberOfTuples())
2840         self.assertEqual(1,d00.getNumberOfComponents())
2841         d00.iota() ; d00+=0.5
2842         d10=att.getFieldOn(amr[1][0].getMesh(),"Field")
2843         self.assertEqual(84,d10.getNumberOfTuples())
2844         self.assertEqual(1,d10.getNumberOfComponents())
2845         d10.iota() ; d10+=0.6
2846         d20=att.getFieldOn(amr[2][0].getMesh(),"Field")
2847         self.assertEqual(60,d20.getNumberOfTuples())
2848         self.assertEqual(1,d20.getNumberOfComponents())
2849         d20.iota() ; d20+=0.7
2850         # the test is here ! To be called after iteration with no remesh
2851         att.synchronizeAllGhostZones()
2852         f=att.buildCellFieldOnWithGhost(amr,"Field")
2853         f0=att.buildCellFieldOnWithGhost(amr[0].getMesh(),"Field")
2854         f1=att.buildCellFieldOnWithGhost(amr[1].getMesh(),"Field")
2855         f2=att.buildCellFieldOnWithGhost(amr[2].getMesh(),"Field")
2856         f00=att.buildCellFieldOnWithGhost(amr[0][0].getMesh(),"Field")
2857         f10=att.buildCellFieldOnWithGhost(amr[1][0].getMesh(),"Field")
2858         f20=att.buildCellFieldOnWithGhost(amr[2][0].getMesh(),"Field")
2859         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))
2860         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))
2861         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))
2862         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))
2863         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))
2864         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))
2865         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],1).isEqual(DataArrayInt([0,4])))
2866         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([3],2).isEqual(DataArrayInt([0,1,5,6])))
2867         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],1).isEqual(DataArrayInt([0,6,49,55])))
2868         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6],2).isEqual(DataArrayInt([0,8,10,16,73,79,81,89])))
2869         self.assertTrue(MEDCouplingStructuredMesh.ComputeCornersGhost([5,6,3],1).isEqual(DataArrayInt([0,6,49,55,224,230,273,279])))
2870         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])))
2871         pass
2872
2873     def testSwig2AMR10(self):
2874         """ 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."""
2875         szGhost=2
2876         amr=MEDCouplingCartesianAMRMesh("",2,[11,11],[0,0],[0.1,0.1])
2877         amr.addPatch([(3,8),(0,3)],[2,2])
2878         amr[0].addPatch([(0,10),(3,6)],[3,3])
2879         amr[0].addPatch([(2,6),(0,3)],[3,3])
2880         amr[0].addPatch([(6,10),(2,3)],[3,3])
2881         amr.addPatch([(3,8),(3,6)],[2,2])
2882         amr[1].addPatch([(0,4),(0,6)],[3,3])
2883         amr[1].addPatch([(7,10),(0,4)],[3,3])
2884         amr[1].addPatch([(4,7),(0,3)],[3,3])
2885         amr[1].addPatch([(4,7),(3,6)],[3,3])
2886         amr.addPatch([(0,3),(6,10)],[2,2])
2887         self.assertEqual(([(30,39),(27,36)],[6,6]),amr[1][3].getMesh().positionRelativeToGodFather())
2888         self.assertEqual(([(6,16),(6,12)],[2,2]),amr[1].getMesh().positionRelativeToGodFather())
2889         self.assertTrue(not MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(6,16),(6,12)]))
2890         self.assertTrue(MEDCouplingStructuredMesh.AreRangesIntersect([(30,39),(27,36)],[(28,32),(35,37)]))
2891         da=DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.])
2892         MEDCouplingStructuredMesh.AssignPartOfFieldOfDoubleUsing([3,4],da,[(1,3),(2,3)],DataArrayDouble([7.7,8.8]))
2893         self.assertTrue(da.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.7,8.8,9.,10.,11.]),1e-12))
2894         att=MEDCouplingAMRAttribute(amr,[("YY",1)],szGhost)
2895         att.spillNatures([IntensiveMaximum])
2896         att.alloc()
2897         yy=att.getFieldOn(amr,"YY") ; yy.iota(0.01)
2898         yy=att.getFieldOn(amr[0].getMesh(),"YY") ; yy.iota(0.02)
2899         yy=att.getFieldOn(amr[1].getMesh(),"YY") ; yy.iota(0.03)
2900         yy=att.getFieldOn(amr[0][0].getMesh(),"YY") ; yy.iota(0.04)
2901         yy=att.getFieldOn(amr[0][1].getMesh(),"YY") ; yy.iota(0.05)
2902         yy=att.getFieldOn(amr[0][2].getMesh(),"YY") ; yy.iota(0.06)
2903         yy=att.getFieldOn(amr[1][0].getMesh(),"YY") ; yy.iota(0.07)
2904         yy=att.getFieldOn(amr[1][1].getMesh(),"YY") ; yy.iota(0.08)
2905         yy=att.getFieldOn(amr[1][2].getMesh(),"YY") ; yy.iota(0.09)
2906         yy=att.getFieldOn(amr[1][3].getMesh(),"YY") ; yy.iota(0.10)
2907         yy=att.getFieldOn(amr[2].getMesh(),"YY") ; yy.iota(0.11)
2908         att2=att.deepCopy() ; att3=att2.deepCopy() ; att4=att3.deepCopy() ; att5=att4.deepCopy() ; att6=att5.deepCopy()
2909         ###
2910         att.synchronizeFineToCoarseBetween(2,1)
2911         ###
2912         for pos in [(),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(1,3)]:
2913             self.assertTrue(att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2914             pass
2915         for pos in [(0,),(1,)]:
2916             self.assertTrue(not att.getFieldOn(att.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2917             pass
2918         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))
2919         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))
2920         del att
2921         ####
2922         att2.synchronizeAllGhostZonesOfDirectChidrenOf(att2.getMyGodFather())
2923         ### 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.
2924         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])
2925         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((2,)),"YY").isEqualWithoutConsideringStr(exp2,1e-12))
2926         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])
2927         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((1,)),"YY").isEqualWithoutConsideringStr(exp3,1e-12))
2928         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])
2929         self.assertTrue(att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition((0,)),"YY").isEqualWithoutConsideringStr(exp4,1e-12))
2930         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)]:
2931             vals=att2.getFieldOn(att2.getMyGodFather().getMeshAtPosition(pos),"YY")
2932             l=vals.getNumberOfTuples()
2933             exps=DataArrayDouble(l) ; exps.iota(iot)
2934             self.assertTrue(vals.isEqualWithoutConsideringStr(exps,1e-12))
2935             pass
2936         del att2
2937         ###
2938         att3.synchronizeCoarseToFineBetween(1,2)
2939         ###
2940         for pos in [(),(0,),(1,),(2,)]:
2941             self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2942             pass
2943         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])
2944         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp5,1e-12))
2945         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])
2946         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp6,1e-12))
2947         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])
2948         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp7,1e-12))
2949         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])
2950         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp8,1e-12))
2951         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])
2952         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp9,1e-12))
2953         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])
2954         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp10,1e-12))
2955         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])
2956         self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp11,1e-12))
2957         del att3
2958         ###
2959         att4.synchronizeAllGhostZonesAtASpecifiedLevel(2)
2960         for pos in [(),(0,),(1,),(2,)]:
2961             self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2962             pass
2963         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])
2964         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp12,1e-12))
2965         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]])
2966         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp13,1e-12))
2967         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])
2968         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp14,1e-12))
2969         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])
2970         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp15,1e-12))
2971         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])
2972         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp16,1e-12))
2973         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])
2974         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp17,1e-12))
2975         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])
2976         self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp18,1e-12))
2977         del att4
2978         ###
2979         att5.synchronizeAllGhostZonesAtASpecifiedLevelUsingOnlyFather(2)
2980         for pos in [(),(0,),(1,),(2,)]:
2981             self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att6.getFieldOn(att6.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12))
2982             pass
2983         att5.buildCellFieldOnWithGhost(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY")
2984         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])
2985         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,0)),"YY").isEqualWithoutConsideringStr(exp19,1e-12))
2986         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])
2987         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,1)),"YY").isEqualWithoutConsideringStr(exp20,1e-12))
2988         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])
2989         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((0,2)),"YY").isEqualWithoutConsideringStr(exp21,1e-12))
2990         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])
2991         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,0)),"YY").isEqualWithoutConsideringStr(exp22,1e-12))
2992         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])
2993         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,1)),"YY").isEqualWithoutConsideringStr(exp23,1e-12))
2994         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])
2995         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,2)),"YY").isEqualWithoutConsideringStr(exp24,1e-12))
2996         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])
2997         self.assertTrue(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp25,1e-12))
2998         pass
2999
3000     def testSwig2AMR11(self):
3001         """ Some tests in 3D with CondenseFineToCoarseGhost and SpreadCoarseToFineGhost"""
3002         coarse=DataArrayDouble((6+4)*(7+4)*(5+4)) ; coarse.iota()
3003         fine=DataArrayDouble((4*2+4)*(2*3+4)*(3*4+4))
3004         MEDCouplingIMesh.SpreadCoarseToFineGhost(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3005         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.])
3006         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.])
3007         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.])
3008         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.])
3009         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.])
3010         exp=DataArrayDouble.Aggregate([exp0,exp0,exp1,exp1,exp1,exp1,exp2,exp2,exp2,exp2,exp3,exp3,exp3,exp3,exp4,exp4])
3011         self.assertTrue(fine.isEqual(exp,1e-12))
3012         #
3013         fine.iota()
3014         coarse.iota(0.5)
3015         MEDCouplingIMesh.CondenseFineToCoarseGhost([6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],coarse,2)
3016         amr=MEDCouplingCartesianAMRMesh("mesh",3,[7,8,6],[0.,0.,0.],[1.,1.,1.])
3017         amr.addPatch([(1,5),(2,4),(1,4)],[2,3,4])
3018         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3019         att.alloc()
3020         exp1=DataArrayDouble(990) ; exp1.iota(0.5)
3021         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])
3022         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.])
3023         exp1[ids]=vals
3024         self.assertTrue(coarse.isEqual(exp1,1e-12))
3025         #
3026         MEDCouplingStructuredMesh.MultiplyPartOf([10,11,9],[(3,7),(4,6),(3,6)],1/24.,coarse)
3027         exp2=DataArrayDouble(990) ; exp2.iota(0.5)
3028         exp2[ids]=vals/24.
3029         self.assertTrue(coarse.isEqual(exp2,1e-12))
3030         #
3031         coarse.iota(0.5) ; fine.iota(0.1)
3032         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3033         #
3034         coarse.iota(0.5) ; fine.iota(0.1)
3035         MEDCouplingIMesh.SpreadCoarseToFineGhostZone(coarse,[6,7,5],fine,[(1,5),(2,4),(1,4)],[2,3,4],2)
3036         exp00=DataArrayDouble.Aggregate([exp0,exp0]) ; exp00+=0.5
3037         self.assertTrue(fine[:240].isEqual(exp00,1e-12))
3038         exp44=DataArrayDouble.Aggregate([exp4,exp4]) ; exp44+=0.5
3039         self.assertTrue(fine[-240:].isEqual(exp44,1e-12))
3040         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))
3041         pass
3042
3043     def testSwig2AMR12(self):
3044         """ This test check the MEDCouplingAMRAttribute.projectTo method."""
3045         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3046         amr0.addPatch([(3,8),(0,3)],[2,2])
3047         amr0.addPatch([(3,8),(3,6)],[2,2])
3048         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3049         att0.alloc()
3050         att0.getFieldOn(amr0,"YY").iota(0.01)
3051         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3052         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3053         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3054         amr1.addPatch([(2,5),(1,4)],[2,2])
3055         att1=att0.projectTo(amr1)
3056         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqualWithoutConsideringStr(att0.getFieldOn(amr0,"YY"),1e-12))
3057         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))
3058         #
3059         amr0=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3060         amr0.addPatch([(2,5),(2,7)],[2,2])
3061         amr0.addPatch([(5,8),(2,7)],[2,2])
3062         att0=MEDCouplingAMRAttribute(amr0,[("YY",1)],2)
3063         att0.alloc()
3064         att0.getFieldOn(amr0,"YY").iota(0.01)
3065         att0.getFieldOn(amr0[0].getMesh(),"YY").iota(0.02)
3066         att0.getFieldOn(amr0[1].getMesh(),"YY").iota(0.03)
3067         amr1=MEDCouplingCartesianAMRMesh("mesh",2,[11,11],[0.,0.],[1.,1.])
3068         amr1.addPatch([(3,6),(2,7)],[2,2])
3069         amr1.addPatch([(6,9),(2,7)],[2,2])
3070         att1=att0.projectTo(amr1)
3071         self.assertTrue(att1.getFieldOn(amr1,"YY").isEqual(att0.getFieldOn(amr0,"YY"),1e-12))
3072         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))
3073         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))
3074         pass
3075
3076     def testSwig2AMR13(self):
3077         """ non regression test"""
3078         for fact,len1,len2 in [([2,2],64,48),([3,3],100,70),([4,4],144,96)]:
3079             amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3080             amr.addPatch([(1,3),(0,2)],fact)
3081             amr.addPatch([(1,3),(3,4)],fact)
3082             att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3083             att.alloc()
3084             att.getFieldOn(amr,"YY").iota(0.1)
3085             att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3086             att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3087             att.synchronizeAllGhostZonesOfDirectChidrenOf(amr)
3088             exp=DataArrayDouble(64) ; exp.iota(0.1)
3089             self.assertTrue(att.getFieldOn(amr,"YY").isEqualWithoutConsideringStr(exp,1e-12))
3090             exp0=DataArrayDouble(len1) ; exp0.iota(0.2)
3091             self.assertTrue(att.getFieldOn(amr[0].getMesh(),"YY").isEqualWithoutConsideringStr(exp0,1e-12))
3092             exp1=DataArrayDouble(len2) ; exp1.iota(0.3)
3093             self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(exp1,1e-12))
3094             pass
3095         pass
3096
3097     def testSwig2AMR14(self):
3098         """ non regression linked to VTHB write."""
3099         fact=[2,2] ; fact2=[3,3]
3100         amr=MEDCouplingCartesianAMRMesh("mesh",2,[5,5],[0.,0.],[1.,1.])
3101         amr.addPatch([(1,3),(0,2)],fact)
3102         amr.addPatch([(1,3),(3,4)],fact)
3103         amr[0].addPatch([(1,3),(1,3)],fact2)
3104         amr[1].addPatch([(1,3),(1,2)],fact2)
3105         att=MEDCouplingAMRAttribute(amr,[("YY",1)],2)
3106         att.alloc()
3107         att.getFieldOn(amr,"YY").iota(0.1)
3108         att.getFieldOn(amr[0].getMesh(),"YY").iota(0.2)
3109         att.getFieldOn(amr[1].getMesh(),"YY").iota(0.3)
3110         att.getFieldOn(amr[0][0].getMesh(),"YY").iota(0.4)
3111         att.getFieldOn(amr[1][0].getMesh(),"YY").iota(0.5)
3112         self.assertEqual(amr[0].getBLTRRangeRelativeToGF(),[(2,6),(0,4)])
3113         self.assertEqual(amr[1].getBLTRRangeRelativeToGF(),[(2,6),(6,8)])
3114         self.assertEqual(amr[0][0].getBLTRRangeRelativeToGF(),[(9,15),(3,9)])
3115         self.assertEqual(amr[1][0].getBLTRRangeRelativeToGF(),[(9,15),(21,24)])
3116         pass
3117
3118     def testOrderConsecutiveCells1D1(self):
3119         """A line in several unconnected pieces:"""
3120         m2 = MEDCouplingUMesh.New("bla", 1)
3121         c = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,4,
3122                                NORM_SEG3,5,7,6, NORM_SEG3,7,9,8, NORM_SEG2,9,10,
3123                                NORM_SEG2,11,12,NORM_SEG2,12,13,
3124                                NORM_SEG2,14,15])
3125         cI = DataArrayInt([0,3,7,10,14,18,21,24,27,30])
3126         coords2 = DataArrayDouble([float(i) for i in range(32)], 16, 2)
3127         m2.setCoords(coords2);
3128         m2.setConnectivity(c, cI);
3129         m2.checkConsistency(1.0e-8);
3130
3131         # Shuffle a bit :-)
3132         m2.renumberCells(DataArrayInt([0,3,6,8,1,4,7,5,2]), True);
3133         res = m2.orderConsecutiveCells1D()
3134         expRes = [0,3,6,8,1,4,2,7,5]
3135         self.assertEqual(m2.getNumberOfCells(),res.getNumberOfTuples())
3136         self.assertEqual(expRes, res.getValues())
3137
3138         # A closed line (should also work)
3139         m3 = MEDCouplingUMesh.New("bla3", 1)
3140         conn3A = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,0])
3141         coord3 = coords2[0:5]
3142         c.reAlloc(10)
3143         cI.reAlloc(4)
3144
3145         m3.setCoords(coord3)
3146         m3.setConnectivity(conn3A, cI)
3147         m3.checkConsistency(1.0e-8)
3148         res2 = m3.orderConsecutiveCells1D()
3149         expRes2 = [0,1,2]
3150         self.assertEqual(m3.getNumberOfCells(),res2.getNumberOfTuples())
3151         self.assertEqual(expRes2, res2.getValues())
3152         pass
3153
3154     def testDADApplyFuncOnThis1(self):
3155         d=DataArrayDouble(5) ; d.iota(0.)
3156         d.applyFuncOnThis("2*x+1")
3157         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.]),1e-12))
3158         d=DataArrayDouble(6) ; d.iota(0.) ; d.rearrange(2)
3159         d.applyFuncOnThis("2*x+1")
3160         self.assertTrue(d.isEqual(DataArrayDouble([1.,3.,5.,7.,9.,11.],3,2),1e-12))
3161         d.applyFuncOnThis("1+2*3")
3162         self.assertTrue(d.isEqual(DataArrayDouble([(7.,7.),(7.,7.),(7.,7.)]),1e-12))
3163         pass
3164
3165     def testSwig2PointSetComputeFetchedNodeIds1(self):
3166         arr=DataArrayDouble(6) ; arr.iota()
3167         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
3168         m=m.buildUnstructured()
3169         m0=m[[0,1,5,6,25,26,30,31,124]]
3170         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])
3171         self.assertTrue(m0.computeFetchedNodeIds().isEqual(ref))
3172         self.assertTrue(MEDCoupling1SGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3173         self.assertEqual(m0.getAllGeoTypes(),[NORM_HEXA8])
3174         m0.convertAllToPoly()
3175         self.assertEqual(m0.getAllGeoTypes(),[NORM_POLYHED])
3176         self.assertTrue(MEDCoupling1DGTUMesh(m0).computeFetchedNodeIds().isEqual(ref))
3177         pass
3178
3179     def testSwig2PartDefinition1(self):
3180         pd=PartDefinition.New(5,22,3)
3181         self.assertTrue(isinstance(pd,SlicePartDefinition))
3182         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3183         self.assertEqual(pd.getNumberOfElems(),6)
3184         self.assertEqual(pd.getEffectiveStop(),23)
3185         pd=PartDefinition.New(5,23,3)
3186         self.assertTrue(isinstance(pd,SlicePartDefinition))
3187         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20])))
3188         self.assertEqual(pd.getNumberOfElems(),6)
3189         self.assertEqual(pd.getEffectiveStop(),23)
3190         self.assertEqual(pd.getSlice(),slice(5,23,3))
3191         pd=PartDefinition.New(5,22,1)
3192         self.assertTrue(isinstance(pd,SlicePartDefinition))
3193         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3194         self.assertEqual(pd.getNumberOfElems(),17)
3195         self.assertEqual(pd.getEffectiveStop(),22)
3196         pd=PartDefinition.New(5,23,3)+PartDefinition.New(23,27,3)
3197         self.assertTrue(isinstance(pd,SlicePartDefinition))
3198         self.assertEqual(pd.getNumberOfElems(),8)
3199         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,8,11,14,17,20,23,26])))
3200         self.assertEqual(pd.getEffectiveStop(),29)
3201         pd=SlicePartDefinition(5,22,1)
3202         self.assertTrue(isinstance(pd,SlicePartDefinition))
3203         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])))
3204         self.assertEqual(pd.getNumberOfElems(),17)
3205         self.assertEqual(pd.getEffectiveStop(),22)
3206         d=DataArrayInt([2,4,5,6,10])
3207         pd=PartDefinition.New(d)
3208         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3209         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3210         pd=DataArrayPartDefinition(d)
3211         self.assertEqual(pd.toDAI().getHiddenCppPointer(),d.getHiddenCppPointer())
3212         pd=DataArrayPartDefinition(d)+DataArrayPartDefinition(DataArrayInt([12,14,20]))
3213         self.assertTrue(isinstance(pd,DataArrayPartDefinition))
3214         self.assertEqual(pd.getNumberOfElems(),8)
3215         self.assertTrue(pd.toDAI().isEqual(DataArrayInt([2,4,5,6,10,12,14,20])))
3216         pass
3217
3218     def testSwig2SortEachPairToMakeALinkedList1(self):
3219         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)])
3220         d.sortEachPairToMakeALinkedList()
3221         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)])))
3222         d=DataArrayInt([(0,2),(1,2),(1,3)])
3223         d.sortEachPairToMakeALinkedList()
3224         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3225         d=DataArrayInt([(0,2),(1,2),(3,1)])
3226         d.sortEachPairToMakeALinkedList()
3227         self.assertTrue(d.isEqual(DataArrayInt([(0,2),(2,1),(1,3)])))
3228         d=DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])
3229         d.sortEachPairToMakeALinkedList()
3230         self.assertTrue(d.isEqual(DataArrayInt([(8,6062),(6062,472),(472,6292),(6292,960)])))
3231         pass
3232
3233     def testSwig2DAIIsRange(self):
3234         d=DataArrayInt([2,6,10])
3235         a,b=d.isRange()
3236         self.assertTrue(a)
3237         self.assertEqual(b,slice(2,11,4))
3238         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3239         #
3240         d=DataArrayInt([2,7,10])
3241         a,b=d.isRange()
3242         self.assertTrue(not a)
3243         self.assertTrue(b is None)
3244         #
3245         d=DataArrayInt([22,17,12])
3246         a,b=d.isRange()
3247         self.assertTrue(a)
3248         self.assertEqual(b,slice(22,11,-5))
3249         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3250         #
3251         d=DataArrayInt([22,16,12])
3252         a,b=d.isRange()
3253         self.assertTrue(not a)
3254         self.assertTrue(b is None)
3255         #
3256         d=DataArrayInt([33])
3257         a,b=d.isRange()
3258         self.assertTrue(a)
3259         self.assertEqual(b,slice(33,34,1))
3260         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3261         #
3262         d=DataArrayInt([])
3263         a,b=d.isRange()
3264         self.assertTrue(a)
3265         self.assertEqual(b,slice(0,0,1))
3266         self.assertTrue(DataArrayInt.Range(b.start,b.stop,b.step).isEqual(d))
3267         #
3268         d=DataArrayInt([2,6,10,2])
3269         a,b=d.isRange()
3270         self.assertTrue(not a)
3271         self.assertTrue(b is None)
3272         pass
3273
3274     def testSwig2PartDefinitionComposeWith1(self):
3275         f=PartDefinition.New(DataArrayInt([0,1,2,3,6,7,8,9]))
3276         g=PartDefinition.New(4,14,1)
3277         g2=g.deepCopy()
3278         self.assertTrue(g2.isEqual(g)[0])
3279         h=f.composeWith(g)
3280         self.assertTrue(isinstance(h,DataArrayPartDefinition))
3281         self.assertTrue(h.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3282         f2=f.tryToSimplify()
3283         g2=g.tryToSimplify()
3284         self.assertEqual(f2.getHiddenCppPointer(),f.getHiddenCppPointer())# same because no simplification due to content of array
3285         self.assertEqual(g2.getHiddenCppPointer(),g.getHiddenCppPointer())# same because no simplification linked to type of PartDef
3286         p=PartDefinition.New(DataArrayInt([2,6,10]))
3287         p2=p.tryToSimplify()
3288         self.assertNotEqual(p2.getHiddenCppPointer(),p.getHiddenCppPointer())
3289         self.assertTrue(isinstance(p2,SlicePartDefinition))
3290         self.assertEqual(p2.getSlice(),slice(2,11,4))
3291         self.assertTrue(p2.isEqual(SlicePartDefinition(2,11,4))[0])
3292         self.assertTrue(p2.isEqual(p2.deepCopy())[0])
3293         self.assertTrue(not p2.isEqual(SlicePartDefinition(1,11,4))[0])
3294         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,10,4))[0])
3295         self.assertTrue(not p2.isEqual(SlicePartDefinition(2,11,3))[0])
3296         pass
3297
3298     def testSwig2DAIGetIdsStrictlyNegative1(self):
3299         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3300         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([1,2,6])))
3301         pass
3302
3303     def testSwig2DAIReplaceOneValByInThis1(self):
3304         d=DataArrayInt([4,-5,-1,0,-5,99,-7,5])
3305         d.changeValue(-5,900)
3306         self.assertTrue(d.isEqual(DataArrayInt([4,900,-1,0,900,99,-7,5])))
3307         pass
3308
3309     def testSwig2DAIGetMinMaxValues1(self):
3310         d=DataArrayInt([4,-5,-1,0,3,99,-7])
3311         a,b=d.getMinMaxValues()
3312         self.assertEqual(a,-7)
3313         self.assertEqual(b,99)
3314         pass
3315
3316     def testSwig2DAIBuildUniqueNotSorted1(self):
3317         d=DataArrayInt([-5,3,2,-1,2,3,-6,4,2,-5,3,7])
3318         self.assertTrue(d.buildUniqueNotSorted().isEqual(DataArrayInt([-5,3,2,-1,-6,4,7])))
3319         pass
3320
3321     def testSwig2UMeshChangeOrientationOfCells1(self):
3322         """ Here testing changeOrientationOfCell method on unstructured meshes lying on no coords."""
3323         m=MEDCouplingUMesh("mesh",1)
3324         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])
3325         cI=DataArrayInt([0,3,6,10,14,17,22,27])
3326         m.setConnectivity(c,cI)
3327         m.changeOrientationOfCells()
3328         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])))
3329         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3330         # testing 2D cells
3331         m=MEDCouplingUMesh("mesh",2)
3332         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])
3333         cI=DataArrayInt([0,4,9,15,22,31,42])
3334         m.setConnectivity(c,cI)
3335         m.changeOrientationOfCells()
3336         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])))
3337         self.assertTrue(m.getNodalConnectivityIndex().isEqual(cI))
3338         pass
3339
3340     def testSwig2StructuredMeshCellLocation1(self):
3341         # 3D
3342         arrX=DataArrayDouble(5) ; arrX.iota()
3343         arrY=DataArrayDouble(4) ; arrY.iota()
3344         arrZ=DataArrayDouble(3) ; arrZ.iota()
3345         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3346         li=[]
3347         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)]
3348         self.assertEqual(24,m.getNumberOfCells())
3349         for i in range(m.getNumberOfCells()):
3350             li.append(m.getLocationFromCellId(i))
3351             pass
3352         self.assertEqual(liExp3D,li)
3353         self.assertRaises(InterpKernelException,m.getLocationFromCellId,24)
3354         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3355         # 2D
3356         arrX=DataArrayDouble(5) ; arrX.iota()
3357         arrY=DataArrayDouble(4) ; arrY.iota()
3358         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3359         li=[]
3360         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)]
3361         self.assertEqual(12,m.getNumberOfCells())
3362         for i in range(m.getNumberOfCells()):
3363             li.append(m.getLocationFromCellId(i))
3364             pass
3365         self.assertEqual(liExp2D,li)
3366         self.assertRaises(InterpKernelException,m.getLocationFromCellId,12)
3367         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3368         # 1D
3369         arrX=DataArrayDouble(5) ; arrX.iota()
3370         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3371         self.assertEqual(4,m.getNumberOfCells())
3372         for i in range(m.getNumberOfCells()):
3373             self.assertEqual((i,),m.getLocationFromCellId(i))
3374             pass
3375         self.assertRaises(InterpKernelException,m.getLocationFromCellId,4)
3376         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3377         pass
3378
3379     def testSwig2StructuredMeshNodeLocation1(self):
3380         # 3D
3381         arrX=DataArrayDouble(5) ; arrX.iota()
3382         arrY=DataArrayDouble(4) ; arrY.iota()
3383         arrZ=DataArrayDouble(3) ; arrZ.iota()
3384         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
3385         li=[]
3386         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)]
3387         self.assertEqual(60,m.getNumberOfNodes())
3388         for i in range(m.getNumberOfNodes()):
3389             li.append(m.getLocationFromNodeId(i))
3390             pass
3391         self.assertEqual(liExp3D,li)
3392         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,60)
3393         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3394         # 2D
3395         arrX=DataArrayDouble(5) ; arrX.iota()
3396         arrY=DataArrayDouble(4) ; arrY.iota()
3397         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
3398         li=[]
3399         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)]
3400         self.assertEqual(20,m.getNumberOfNodes())
3401         for i in range(m.getNumberOfNodes()):
3402             li.append(m.getLocationFromNodeId(i))
3403             pass
3404         self.assertEqual(liExp2D,li)
3405         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,20)
3406         self.assertRaises(InterpKernelException,m.getLocationFromNodeId,-1)
3407         # 1D
3408         arrX=DataArrayDouble(5) ; arrX.iota()
3409         m=MEDCouplingCMesh() ; m.setCoords(arrX)
3410         self.assertEqual(5,m.getNumberOfNodes())
3411         for i in range(m.getNumberOfNodes()):
3412             self.assertEqual((i,),m.getLocationFromNodeId(i))
3413             pass
3414         self.assertRaises(InterpKernelException,m.getLocationFromCellId,5)
3415         self.assertRaises(InterpKernelException,m.getLocationFromCellId,-1)
3416         pass
3417
3418     def testSwig2DataArrayPrintNotTooLong1(self):
3419         """ Now that DataArrayDouble and DataArrayInt and pickelized they can appear in YACS ports. Avoid to have too heavy string representation of them."""
3420         d=DataArrayDouble(2000) ; d.iota() ; d.rearrange(2)
3421         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3422         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3423         self.assertEqual(st1,st2)
3424         #
3425         d=DataArrayDouble(2002) ; d.iota() ; d.rearrange(2)
3426         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3427         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3428         self.assertEqual(st1,st2)
3429         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3430         ## Now for DataArrayInt
3431         d=DataArrayInt(2000) ; d.iota() ; d.rearrange(2)
3432         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3433         self.assertEqual(st0,st1) # 1000 tuples ( >=0 and <= 1000) -> str(d)==d.repr()
3434         self.assertEqual(st1,st2)
3435         #
3436         d=DataArrayInt(2002) ; d.iota() ; d.rearrange(2)
3437         st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong()
3438         self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong()
3439         self.assertEqual(st1,st2)
3440         self.assertIn(len(st2), list(range(0, 1000)))  # no more than 1000 characters
3441         pass
3442
3443     def testExtrudedMeshWithoutZipCoords1(self):
3444         """This test checks that MEDCouplingUMesh.buildExtrudedMesh do not perform a zipCoords."""
3445         arr=DataArrayDouble([(0.,0.),(1.,0.),(2.,0.),(3.,0.)])
3446         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(arr)
3447         m.allocateCells()
3448         m.insertNextCell(NORM_SEG2,[1,2])
3449         arr1D=DataArrayDouble([(0.,0.),(0.,1.5),(0.,2.)])
3450         m1D=MEDCouplingUMesh("mesh1D",1) ; m1D.setCoords(arr1D)
3451         m1D.allocateCells()
3452         m1D.insertNextCell(NORM_SEG2,[0,1])
3453         m1D.insertNextCell(NORM_SEG2,[1,2])
3454         m2D=m.buildExtrudedMesh(m1D,0)
3455         self.assertEqual(m.getCoords().getHiddenCppPointer(),m2D.getCoords().getHiddenCppPointer())
3456         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)])
3457         self.assertTrue(m.getCoords().isEqual(coo,1e-12))
3458         self.assertTrue(m2D.getNodalConnectivity().isEqual(DataArrayInt([4,1,2,6,5,4,5,6,10,9])))
3459         self.assertTrue(m2D.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10])))
3460         pass
3461
3462     def testPointSetAreAllNodesFetched1(self):
3463         m=MEDCouplingCMesh() ; arr=DataArrayDouble(10) ; arr.iota()
3464         m.setCoords(arr,arr)
3465         m=m.buildUnstructured()
3466         self.assertTrue(m.areAllNodesFetched())
3467         m2=m[[0,2,3,4,5]]
3468         self.assertTrue(not m2.areAllNodesFetched())
3469         m2.zipCoords()
3470         self.assertTrue(m2.areAllNodesFetched())
3471         pass
3472
3473     def testMEDCouplingPointSetComputeDiameterField1(self):
3474         arrX=DataArrayDouble([0.,1.1,1.7,2.1])
3475         arrY=DataArrayDouble([0.,0.7,0.8,1.9])
3476         arrZ=DataArrayDouble([0.,1.3,2.1,2.4])
3477         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ) ; m=m.buildUnstructured()
3478         f=m.computeDiameterField()
3479         f.checkConsistencyLight()
3480         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])
3481         self.assertTrue(exp.isEqual(f.getArray(),1e-12))
3482         m1=m[::2]
3483         m2=m[1::2]
3484         m2.simplexize(PLANAR_FACE_5)
3485         m3=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
3486         f=m3.computeDiameterField()
3487         f.checkConsistencyLight()
3488         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])
3489         self.assertTrue(exp2.isEqual(f.getArray(),1e-12))
3490         # TRI3 - spacedim = 2
3491         coo=DataArrayDouble([(1,1),(5,1.9),(2.1,3)])
3492         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3493         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3494             m.setNodalConnectivity(DataArrayInt(c))
3495             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3496             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3497             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3498             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3499             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3500         # TRI3 - spacedim = 3
3501         coo=DataArrayDouble([(1.3198537928820775,1.0991902391274959,-0.028645697595823361),(5.2486835106806335,2.2234012799688281,0.30368935050077939),(2.2973688139447361,3.1572023778066649,0.10937756365410012)])
3502         m=MEDCoupling1SGTUMesh("mesh",NORM_TRI3) ; m.setCoords(coo)
3503         for c in [[0,1,2],[0,2,1],[2,1,0]]:
3504             m.setNodalConnectivity(DataArrayInt(c))
3505             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],4.1,12)
3506             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3507             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],4.1,12)
3508             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3509             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],4.1,12)
3510         # QUAD4 - spacedim = 2
3511         coo=DataArrayDouble([(0,2),(2,0),(6,4),(4,9)])
3512         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3513         exp3=sqrt(85.)
3514         for delta in range(4):
3515             c = [(elt + delta) % 4 for elt in range(4)]
3516             m.setNodalConnectivity(DataArrayInt(c))
3517             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3518             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3519             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3520             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3521             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3522             c.reverse()
3523             m.setNodalConnectivity(DataArrayInt(c))
3524             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3525             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3526             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3527             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3528             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3529         # QUAD4 - spacedim = 3
3530         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)])
3531         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo)
3532         for delta in range(4):
3533             c = [(elt + delta) % 4 for elt in range(4)]
3534             m.setNodalConnectivity(DataArrayInt(c))
3535             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3536             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3537             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3538             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3539             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3540             c.reverse()
3541             m.setNodalConnectivity(DataArrayInt(c))
3542             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12)
3543             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3544             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp3,12)
3545             m3=m.buildUnstructured() ; m3.convertLinearCellsToQuadratic(1)
3546             self.assertAlmostEqual(m3.computeDiameterField().getArray()[0],exp3,12)
3547         # PENTA6
3548         # 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)
3549         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)])
3550         m=MEDCoupling1SGTUMesh("mesh",NORM_PENTA6) ; m.setCoords(coo)
3551         exp4=2.5041256256889888
3552         self.assertAlmostEqual(exp4,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3553         for delta in range(3):
3554             c = [(elt + delta) % 3 for elt in range(3)]
3555             c+=[elt+3 for elt in c]
3556             m.setNodalConnectivity(DataArrayInt(c))
3557             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3558             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3559             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3560             c.reverse()
3561             m.setNodalConnectivity(DataArrayInt(c))
3562             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12)
3563             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3564             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp4,12)
3565         # HEXA8
3566         # 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)
3567         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)])
3568         m=MEDCoupling1SGTUMesh("mesh",NORM_HEXA8) ; m.setCoords(coo)
3569         exp5=2.5366409441884215
3570         self.assertAlmostEqual(exp5,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3571         for delta in range(4):
3572             c = [(elt + delta) % 4 for elt in range(4)]
3573             c+=[elt+4 for elt in c]
3574             m.setNodalConnectivity(DataArrayInt(c))
3575             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3576             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3577             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3578             c.reverse()
3579             m.setNodalConnectivity(DataArrayInt(c))
3580             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12)
3581             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3582             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12)
3583         # PYRA5 (1) 5th node is further
3584         # 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)
3585         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)])
3586         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3587         exp6=2.1558368027391386
3588         self.assertAlmostEqual(exp6,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3589         for delta in range(4):
3590             c = [(elt + delta) % 4 for elt in range(4)]
3591             c+=[4]
3592             m.setNodalConnectivity(DataArrayInt(c))
3593             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp6,12)
3594             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3595             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp6,12)
3596             pass
3597         # PYRA5 (2) 5th node is closer
3598         # 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)
3599         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)])
3600         m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo)
3601         exp7=1.4413563787228953
3602         self.assertAlmostEqual(exp7,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3603         for delta in range(4):
3604             c = [(elt + delta) % 4 for elt in range(4)]
3605             c+=[4]
3606             m.setNodalConnectivity(DataArrayInt(c))
3607             self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp7,12)
3608             m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3609             self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp7,12)
3610             pass
3611         # TETRA4
3612         # 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)
3613         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)])
3614         m=MEDCoupling1SGTUMesh("mesh",NORM_TETRA4) ; m.setCoords(coo)
3615         exp8=1.7131322579364157
3616         self.assertAlmostEqual(exp8,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter
3617         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]]:
3618             for i in range(4):
3619                 m.setNodalConnectivity(DataArrayInt([(elt+i)%4 for elt in c]))
3620                 self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp8,12)
3621                 m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0)
3622                 self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp8,12)
3623                 pass
3624             pass
3625         pass
3626
3627     def testMEDCouplingSkyLineArray(self):
3628         index = DataArrayInt([ 0, 3, 5, 6, 6 ])
3629         value = DataArrayInt([ 1, 2, 3, 2, 3, 3 ])
3630
3631         sla0 = MEDCouplingSkyLineArray()
3632         self.assertEqual( -1, sla0.getNumberOf() )
3633         self.assertEqual( 0,  sla0.getLength() )
3634         sla0.set( index, value )
3635         self.assertTrue( index.isEqual( sla0.getIndexArray() ))
3636         self.assertTrue( value.isEqual( sla0.getValuesArray() ))
3637         self.assertEqual( 4, sla0.getNumberOf() )
3638         self.assertEqual( 6, sla0.getLength() )
3639
3640         sla1 = MEDCouplingSkyLineArray( index, value )
3641         self.assertTrue( index.isEqual( sla1.getIndexArray() ))
3642         self.assertTrue( value.isEqual( sla1.getValuesArray() ))
3643         self.assertEqual( 4, sla1.getNumberOf() )
3644         self.assertEqual( 6, sla1.getLength() )
3645
3646         sla2 = MEDCouplingSkyLineArray( sla1 )
3647         self.assertTrue( index.isEqual( sla2.getIndexArray() ))
3648         self.assertTrue( value.isEqual( sla2.getValuesArray() ))
3649         self.assertEqual( 4, sla2.getNumberOf() )
3650         self.assertEqual( 6, sla2.getLength() )
3651
3652         indexVec = ivec(); indexVec.reserve( len( index ))
3653         for i in index: indexVec.push_back( i[0] )
3654         valueVec = ivec(); valueVec.reserve( len( value ))
3655         for i in value: valueVec.push_back( i[0] )
3656         sla3 = MEDCouplingSkyLineArray( indexVec, valueVec )
3657         self.assertTrue( index.isEqual( sla3.getIndexArray() ))
3658         self.assertTrue( value.isEqual( sla3.getValuesArray() ))
3659         self.assertEqual( 4, sla3.getNumberOf() )
3660         self.assertEqual( 6, sla3.getLength() )
3661
3662         pass
3663
3664     def testMEDCouplingSkyLineArrayThreeLevels(self):
3665         #  [[28,1,4]] , [[2,35,8], [9,10,1,12]]
3666         superi = DataArrayInt([ 0,1,3 ])
3667         index = DataArrayInt ([ 0,3,6,10 ])
3668         value = DataArrayInt ([ 28,1,4,2,35,8,9,10,1,12 ])
3669
3670         sla0 = MEDCouplingSkyLineArray()
3671         self.assertEqual( -1, sla0.getSuperNumberOf() )
3672         self.assertEqual( -1, sla0.getNumberOf() )
3673         self.assertEqual( 0,  sla0.getLength() )
3674         sla0.set3( superi.deepCopy(), index.deepCopy(), value.deepCopy() )
3675         self.assertTrue( superi.isEqual( sla0.getSuperIndexArray() ))
3676
3677         pack = sla0.getSimplePackSafe(2)
3678         self.assertEqual([9,10,1,12], pack)
3679         ids = sla0.findPackIds([0,1], [9,10,1,12])
3680         self.assertEqual([-1,1], ids)
3681
3682         sla0.deletePack(1, 1)
3683         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3684         self.assertEqual([28,1,4,2,35,8], val.getValues())
3685         self.assertEqual([0,3,6], idx.getValues())
3686         self.assertEqual([0,1,2], si.getValues())
3687
3688         sla0.pushBackPack(0, [3,2,1,0])
3689         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3690         self.assertEqual([0,2,3], si.getValues())
3691         self.assertEqual([0,3,7,10], idx.getValues())
3692         self.assertEqual([28,1,4,3,2,1,0,  2,35,8], val.getValues())
3693
3694         # Build connectivity from POLYHED connectivity
3695         cI = [0,16,41]
3696         c = [NORM_POLYHED, 1,2,3,-1,  2,3,4,-1,  3,4,5,-1,  4,5,6,
3697              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]
3698         sla0 = MEDCouplingSkyLineArray.BuildFromPolyhedronConn(DataArrayInt(c), DataArrayInt(cI))
3699         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3700         self.assertEqual([0,4,9], si.getValues())
3701         self.assertEqual([0,3,6,9,12,16,20,24,28,32], idx.getValues())
3702         self.assertEqual([1,2,3,  2,3,4,  3,4,5,  4,5,6,
3703                           7,8,9,10,   9,10,11,12,  3,4,5,6,  5,6,7,8,  9,10,11,12], val.getValues())
3704         c1, cI1 = sla0.convertToPolyhedronConn()
3705         self.assertEqual(c1.getValues(), c)
3706         self.assertEqual(cI1.getValues(), cI)
3707         pass
3708
3709     def testMEDCouplingSkyLineArrayThreeLevels2(self):
3710         si = [0, 9, 15, 21]
3711         siRef = [0, 9, 16, 22]
3712         idx = [0,4,8,12,16,20,23,26,29,  32,36,40,44,48,52,  56,60,64,68,72,76,80]
3713         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,
3714              9,1,3,10,  11,12,7,5,  9,11,5,1,  1,5,7,3,  3,7,12,10,  10,12,11,9,
3715              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3716         idxRef = [0,4,8,12,16,20,23,26,29,32,36,40,44,48,52,55,58, 62, 66, 70, 74, 78, 82 ]
3717         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,
3718              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,
3719              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3720         sla0 = MEDCouplingSkyLineArray()
3721         sla0.set3( DataArrayInt(si), DataArrayInt(idx), DataArrayInt(c) )
3722         ids = sla0.findPackIds([1], [1,5,7,3])
3723         sla0.deletePack(1, ids[0])
3724         sla0.pushBackPack(1, [3,7,8])
3725         sla0.pushBackPack(1, [7,5,8])
3726         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3727         self.assertEqual(siRef, si.getValues())
3728         self.assertEqual(idxRef, idx.getValues())
3729         self.assertEqual(cRef, val.getValues())
3730
3731         idxRef2 = [0,4,8,12,16,20,23,26,29,32,36,40,42,46,50,53,56, 60, 64, 68, 72, 76, 80 ]
3732         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,
3733              9,1,3,10,  11,12,7,5,  300,300,  3,7,12,10,  10,12,11,9,  3,7,8,  7,5,8,
3734              11,5,7,12,  14,16,15,13,  11,14,13,5,  5,13,15,7,  7,15,16,12,  12,16,14,11]
3735         sla0.replacePack(1,2, [300,300])
3736         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3737         self.assertEqual(siRef, si.getValues())
3738         self.assertEqual(idxRef2, idx.getValues())
3739         self.assertEqual(cRef2, val.getValues())
3740
3741         sla0.replacePack(1,2, [9,11,5,1])
3742         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3743         self.assertEqual(siRef, si.getValues())
3744         self.assertEqual(idxRef, idx.getValues())
3745         self.assertEqual(cRef, val.getValues())
3746
3747         sla0.replaceSimplePack(11, [300,300])  # 11 is the abs index of pack (superIdx=1,idx=2)
3748         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3749         self.assertEqual(siRef, si.getValues())
3750         self.assertEqual(idxRef2, idx.getValues())
3751         self.assertEqual(cRef2, val.getValues())
3752
3753         sla0.replaceSimplePack(11, [9,11,5,1])  # 11 is the abs index of pack (superIdx=1,idx=2)
3754         si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray()
3755         self.assertEqual(siRef, si.getValues())
3756         self.assertEqual(idxRef, idx.getValues())
3757         self.assertEqual(cRef, val.getValues())
3758         pass
3759
3760     def testMEDCouplingUMeshgenerateGraph(self):
3761         # cartesian mesh 3x3
3762         arr=DataArrayDouble(4) ; arr.iota()
3763         c=MEDCouplingCMesh() ; c.setCoords(arr,arr)
3764         m=c.buildUnstructured()
3765         graph = m.generateGraph()
3766         # 0 1 2
3767         # 3 4 5
3768         # 6 7 8
3769         valRef=[ 0,1,3,
3770                  0,1,2,4,
3771                  1,2,5,
3772                  0,3,4,6,
3773                  1,3,4,5,7,
3774                  2,4,5,8,
3775                  3,6,7,
3776                  4,6,7,8,
3777                  5,7,8]
3778         self.assertEqual(valRef,list(graph.getValuesArray().getValues()));
3779
3780         indRef=[0, 3, 7, 10, 14, 19, 23, 26, 30, 33]
3781         self.assertEqual(indRef,list(graph.getIndexArray().getValues()));
3782         pass
3783
3784     def testSwig2MEDCouplingCurveLinearReprQuick1(self):
3785         """Non regression test. Error in m.__str__ when m is a MEDCouplingCurveLinear with spaceDim != meshDim."""
3786         arr=DataArrayDouble(12) ; arr.iota() ; arr.rearrange(2)
3787         m=MEDCouplingCurveLinearMesh()
3788         m.setCoords(arr)
3789         m.setNodeGridStructure([3,2])
3790         m.checkConsistencyLight()
3791         self.assertEqual(m.getMeshDimension(),2)
3792         self.assertEqual(m.getSpaceDimension(),2)
3793         self.assertTrue(not "mismatch" in m.__str__())
3794         self.assertTrue(not "mismatch" in m.__repr__())
3795         #
3796         arr=DataArrayDouble(18) ; arr.iota() ; arr.rearrange(3)
3797         m.setCoords(arr)
3798         self.assertEqual(m.getMeshDimension(),2)
3799         self.assertEqual(m.getSpaceDimension(),3)
3800         self.assertTrue(not "mismatch" in m.__str__())
3801         self.assertTrue(not "mismatch" in m.__repr__())# bug was here !
3802         pass
3803
3804     def testSwig2BugComputeOffsets1(self):
3805         """Non regression test. computeOffsetsFull on empty array must return 0."""
3806         d=DataArrayInt([3])
3807         d.computeOffsetsFull()
3808         self.assertTrue(d.isEqual(DataArrayInt([0,3])))
3809         d=DataArrayInt([])
3810         d.computeOffsets()
3811         self.assertTrue(d.isEqual(DataArrayInt([])))
3812         d=DataArrayInt([])
3813         d.computeOffsetsFull()
3814         self.assertTrue(d.isEqual(DataArrayInt([0]))) # <- bug was here
3815         pass
3816
3817     def testSwig2Cartesianize1(self):
3818         """Test of engine of cartesianize mechanism in medcoupling"""
3819         # cyl 2D
3820         arr=DataArrayDouble([(3,0.2),(2,1.6)]) ; arr.setInfoOnComponents(["A","BB"])
3821         arr2=arr.cartesianize(AX_CYL)
3822         arr2_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836),(-0.05839904460257763,1.9991472060830102)]) ; arr2_exp.setInfoOnComponents(["A","BB"])
3823         self.assertTrue(arr2_exp.isEqual(arr2,1e-14))
3824         # spher 2D
3825         arr3=arr.cartesianize(AX_SPHER)
3826         self.assertTrue(arr2_exp.isEqual(arr3,1e-14))
3827         # cyl 3D
3828         arr=DataArrayDouble([(3,0.2,7.1),(2,1.6,12.3)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3829         arr4=arr.cartesianize(AX_CYL)
3830         arr4_exp=DataArrayDouble([(2.940199733523725,0.5960079923851836,7.1),(-0.05839904460257763,1.9991472060830102,12.3)]) ; arr4_exp.setInfoOnComponents(["A","BB","CCC"])
3831         self.assertTrue(arr4_exp.isEqual(arr4,1e-14))
3832         # spher 3D
3833         arr=DataArrayDouble([(3,0.2,0.5),(2,1.3,5.8)]) ; arr.setInfoOnComponents(["A","BB","CCC"])
3834         arr5=arr.cartesianize(AX_SPHER)
3835         arr5_exp=DataArrayDouble([(0.5230462208645272,0.2857414527616764,2.940199733523725),(1.706499157790973,-0.8953424658735863,0.5349976572491747)]) ; arr5_exp.setInfoOnComponents(["A","BB","CCC"])
3836         self.assertTrue(arr5_exp.isEqual(arr5,1e-14))
3837         #
3838         m=MEDCouplingCMesh() ; m.setName("aa") ; m.setDescription("bbb") ; m.setTime(4.125,5,6) ; m.setTimeUnit("ms")
3839         arrX=DataArrayDouble([0,1,2]) ; arrX.setInfoOnComponent(0,"ccc")
3840         arrY=DataArrayDouble([3,4,5,6]) ; arrY.setInfoOnComponent(0,"dddd")
3841         m.setCoords(arrX,arrY)
3842         m2=m.buildCurveLinear()
3843         #
3844         self.assertTrue(isinstance(m2,MEDCouplingCurveLinearMesh))
3845         self.assertEqual(m2.getName(),"aa")
3846         self.assertEqual(m2.getDescription(),"bbb")
3847         self.assertEqual(m2.getTime(),[4.125,5,6])
3848         self.assertEqual(m2.getTimeUnit(),"ms")
3849         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"])
3850         self.assertTrue(m2.getCoords().isEqual(m2c_exp,1e-14))
3851         self.assertEqual(m2.getNodeGridStructure(),(3,4))
3852         pass
3853
3854     def testRemoveIdsFromIndexedArrays1(self):
3855         arr=DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,504,505,601,602])
3856         arrI=DataArrayInt([0,3,7,8,8,13,15])
3857         # case where all elts in inputs are in
3858         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3859         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([501,502],arr2,arrI2))
3860         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,503,504,505,601,602])))
3861         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,11,13])))
3862         # case where part of elts in inputs are in
3863         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3864         self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([504,507],arr2,arrI2))
3865         self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,505,601,602])))
3866         self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,12,14])))
3867         # case where no elts in inputs are in
3868         arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
3869         self.assertTrue(not MEDCouplingUMesh.RemoveIdsFromIndexedArrays([1,5,701],arr2,arrI2))
3870         self.assertTrue(arr2.isEqual(arr))
3871         self.assertTrue(arrI2.isEqual(arrI))
3872         pass
3873
3874     def testFieldIntIsOnStage1(self):
3875         """ My first test with field int."""
3876         m=MEDCouplingCMesh()
3877         m.setName("mesh")
3878         arrX=DataArrayDouble([0,1,2,3])
3879         m.setCoords(arrX,arrX)
3880         f=MEDCouplingFieldInt(ON_CELLS)
3881         f.setMesh(m)
3882         arr=DataArrayInt(8) ; arr.iota() ;f.setArray(arr)
3883         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
3884         arr=DataArrayInt(9) ; arr.iota() ;f.setArray(arr)
3885         f.checkConsistencyLight()
3886         f.setTimeUnit("ms")
3887         self.assertEqual(f.getTimeUnit(),"ms")
3888         f.setTime(3.2,5,6)
3889         a,b,c=f.getTime()
3890         self.assertEqual(b,5)
3891         self.assertEqual(c,6)
3892         self.assertEqual(a,3.2,12)
3893         pass
3894
3895     def testNoThrowOn1DGTU2UOnNullCells(self):
3896         """ Non regression test : no throw when trying to convert 1DGTUMesh to UMesh on an empty mesh"""
3897         m=MEDCoupling1DGTUMesh("",NORM_POLYGON) ; m.setCoords(DataArrayDouble([],0,3))
3898         m.setNodalConnectivity(DataArrayInt([]),DataArrayInt([0]))
3899         m=m.buildUnstructured()
3900         pass
3901
3902     def testExplodeMeshIntoMicroEdges1(self):
3903         """ test for new functionality MEDCouplingUMesh.explodeMeshIntoMicroEdges"""
3904         m=MEDCouplingUMesh("mesh",2)
3905         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)
3906         m.setCoords(coo)
3907         m.allocateCells()
3908         # here a mix of quadratic, linear cells. Non conform but conform considering micro edges
3909         m.insertNextCell(NORM_TRI6,[0,4,1,7,8,9])
3910         m.insertNextCell(NORM_TRI6,[1,5,2,10,11,12])
3911         m.insertNextCell(NORM_TRI6,[5,1,4,10,8,13])
3912         m.insertNextCell(NORM_TRI3,[3,4,7])
3913         m.insertNextCell(NORM_TRI3,[3,7,0])
3914         m.insertNextCell(NORM_TRI3,[6,2,11])
3915         m.insertNextCell(NORM_TRI3,[6,11,5])
3916         m.insertNextCell(NORM_TRI3,[6,5,13])
3917         m.insertNextCell(NORM_TRI3,[6,13,4])
3918         edges,d,di,rd,rdi=m.explodeMeshIntoMicroEdges() # <- new method
3919         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])))
3920         self.assertEqual(edges.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer())
3921         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])))
3922         self.assertTrue(di.isEqual(DataArrayInt([0,6,12,18,21,24,27,30,33,36])))
3923         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])))
3924         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])))
3925         pass
3926
3927     def testFieldIntIsOnStage2(self):
3928         """ Very important test to check that isEqual of MEDCouplingFieldInt is OK !"""
3929         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3930         m1=m1.buildUnstructured() ; m1.setName("mesh")
3931         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setMesh(m1)
3932         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"])
3933         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
3934         #
3935         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
3936         m2=m2.buildUnstructured() ; m2.setName("mesh")
3937         f2=MEDCouplingFieldInt(ON_CELLS) ; f2.setMesh(m2)
3938         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"])
3939         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
3940         #
3941         self.assertTrue(f1.isEqual(f2,1e-12,0))
3942         f1.getArray()[:]*=2
3943         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3944         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0))
3945         f1.getArray()[:]/=2
3946         self.assertTrue(f1.isEqual(f2,1e-12,0))
3947         #
3948         f1.setName("F1")
3949         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3950         f1.setName("f1")
3951         self.assertTrue(f1.isEqual(f2,1e-12,0))
3952         #
3953         f1.getArray().setInfoOnComponents(["aa","bbbb"])
3954         self.assertTrue(not f1.isEqual(f2,1e-12,0))
3955         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0))
3956         f1.getArray().setInfoOnComponents(["aa","bbb"])
3957         self.assertTrue(f1.isEqual(f2,1e-12,0))
3958         #
3959         f3=f2.deepCopy()
3960         self.assertTrue(f1.isEqual(f3,1e-12,0))
3961         #
3962         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
3963             f4=MEDCouplingFieldInt(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
3964             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"])
3965             f4.setArray(arr4) ; f4.setName("f1")
3966             self.assertEqual(f1.isEqual(f4,1e-12,0),expected)
3967             pass
3968         pass
3969
3970     def testDADSymmetry1(self):
3971         arr=DataArrayDouble([2,3,4],1,3)
3972         res=arr.symmetry3DPlane([0.,0.,0.],[0.,0.,2.])
3973         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-4],1,3),1e-14))
3974         #
3975         res=arr.symmetry3DPlane([-1000,100,-1],[0.,0.,2.])
3976         self.assertTrue(res.isEqual(DataArrayDouble([2,3,-6],1,3),1e-14))
3977         #
3978         res=arr.symmetry3DPlane([0,0,0],[1.,0.,0.])
3979         self.assertTrue(res.isEqual(DataArrayDouble([-2,3,4],1,3),1e-14))
3980         #
3981         res=arr.symmetry3DPlane([0,0,0],[0.,1.,0.])
3982         self.assertTrue(res.isEqual(DataArrayDouble([2,-3,4],1,3),1e-14))
3983         #
3984         res=arr.symmetry3DPlane([0,0,0],[-1.,1.,0.])
3985         self.assertTrue(res.isEqual(DataArrayDouble([3,2,4],1,3),1e-14))
3986         #
3987         plane=[5.,4.,-7.]
3988         a=DataArrayDouble(DataArrayDouble.GiveBaseForPlane(plane))
3989         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[1]).magnitude()[0],0.,13)
3990         self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[2]).magnitude()[0],0.,13)
3991         self.assertAlmostEqual(DataArrayDouble.Dot(a[1],a[2]).magnitude()[0],0.,13)
3992         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]])
3993         m=MEDCouplingUMesh("",2) ; m.setCoords(coo) ; m.allocateCells()
3994         m.insertNextCell(NORM_QUAD4,[0,1,2,3])
3995         d,_=m.distanceToPoint(arr)
3996         res=arr.symmetry3DPlane([0.,0.,0.],plane) #
3997         d2,_=m.distanceToPoint(res)
3998         self.assertAlmostEqual(abs(d-d2),0.,12)
3999         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[0])[0],0.,12)
4000         self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[1])[0],0.,12)
4001         self.assertAlmostEqual((res-arr).magnitude()[0]-2*d,0.,12)
4002         self.assertTrue(res.isEqual(DataArrayDouble([2.666666666666667,3.5333333333333333,3.0666666666666666],1,3),1e-12))
4003         pass
4004
4005     def testExtrudedMeshBuildUnstructured1(self):
4006         """ 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"""
4007         arr=DataArrayDouble(11) ; arr.iota()
4008         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
4009         m=m.buildUnstructured()
4010         faces=MEDCouplingCMesh() ; faces.setCoords(arr,arr)
4011         faces=faces.buildUnstructured()
4012         faces.setCoords(m.getCoords())
4013         em=MEDCouplingMappedExtrudedMesh(m,faces,0)
4014         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12))
4015         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
4016         self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
4017         pass
4018
4019     def testExtrudedMeshFromCMesh1(self):
4020         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
4021         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ)
4022         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
4023         self.assertTrue(ex.buildUnstructured().isEqual(mesh3D.buildUnstructured(),1e-12))
4024         pass
4025
4026     def testCylSpherPolarCartFiesta(self):
4027         """Test to check new capabilities from to cyl spher polar cart conversions"""
4028         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)])
4029         self.assertTrue(da0.fromCartToCyl().fromCylToCart().isEqual(da0,1e-12))
4030         self.assertTrue(da0.fromCartToSpher().fromSpherToCart().isEqual(da0,1e-12))
4031         da1=da0[:,:2]
4032         self.assertTrue(da1.fromCartToPolar().fromPolarToCart().isEqual(da1,1e-12))
4033         #
4034         da2=da0[::-1]
4035         pt=[-2.1,0.3,1.1]
4036         vect=[1.,-0.5,0.7]
4037         #
4038         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)])
4039         da4=da0.fromCartToCylGiven(da2,pt,vect)
4040         self.assertTrue(da4.isEqual(expected,1e-12))
4041         #
4042         m=MEDCouplingUMesh.Build0DMeshFromCoords(da2)
4043         self.assertEqual(m.getDirectAccessOfCoordsArrIfInStructure().getHiddenCppPointer(),da2.getHiddenCppPointer())
4044         f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m) ; f0.setArray(da0)
4045         f=f0.computeVectorFieldCyl(pt,vect)
4046         f.checkConsistencyLight()
4047         self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
4048         self.assertTrue(f.getArray().isEqual(expected,1e-12))
4049         pass
4050
4051     def testDAIIndicesOfSubPart(self):
4052         a=DataArrayInt([9,10,0,6,4,11,3,8])
4053         b=DataArrayInt([6,0,11,8])
4054         c=a.indicesOfSubPart(b)
4055         self.assertTrue(c.isEqual(DataArrayInt([3,2,5,7])))
4056         #
4057         d=DataArrayInt([9,10,0,6,4,11,0,8])
4058         self.assertRaises(InterpKernelException,d.indicesOfSubPart,b) # 0 appears twice in the d array
4059         f=DataArrayInt([6,0,11,8,12])
4060         self.assertRaises(InterpKernelException,a.indicesOfSubPart,f) # 12 in f does not exist in a
4061         pass
4062
4063     def testDACirPermAndRev1(self):
4064         d=DataArrayInt([1,2,3,4,5,6])
4065         d2=d.deepCopy() ; d2.circularPermutation(1)
4066         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4067         d2=d.deepCopy() ; d2.circularPermutation()
4068         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4069         d2=d.deepCopy() ; d2.circularPermutation(2)
4070         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4071         d2=d.deepCopy() ; d2.circularPermutation(3)
4072         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4073         d2=d.deepCopy() ; d2.circularPermutation(4)
4074         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4075         d2=d.deepCopy() ; d2.circularPermutation(5)
4076         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4077         d2=d.deepCopy() ; d2.circularPermutation(6)
4078         self.assertTrue(d2.isEqual(d))
4079         d2=d.deepCopy() ; d2.circularPermutation(7)
4080         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4081         d2=d.deepCopy() ; d2.circularPermutation(-1)
4082         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4083         d2=d.deepCopy() ; d2.circularPermutation(-2)
4084         self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
4085         d2=d.deepCopy() ; d2.circularPermutation(-3)
4086         self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
4087         d2=d.deepCopy() ; d2.circularPermutation(-4)
4088         self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
4089         d2=d.deepCopy() ; d2.circularPermutation(-5)
4090         self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
4091         d2=d.deepCopy() ; d2.circularPermutation(-6)
4092         self.assertTrue(d2.isEqual(d))
4093         d2=d.deepCopy() ; d2.circularPermutation(-7)
4094         self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
4095         ####
4096         d=DataArrayInt([1,2,3,4,5,6],2,3)
4097         d2=d.deepCopy() ; d2.circularPermutationPerTuple(0)
4098         self.assertTrue(d2.isEqual(d))
4099         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4100         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4101         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4102         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4103         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4104         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4105         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4106         self.assertTrue(d2.isEqual(d))
4107         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4108         self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
4109         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4110         self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
4111         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4112         self.assertTrue(d2.isEqual(d))
4113         d.setInfoOnComponents(["a","b","c"])
4114         d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
4115         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4116         d2=d.deepCopy() ; d2.circularPermutationPerTuple()
4117         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4118         d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
4119         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4120         d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
4121         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4122         d2=d.deepCopy() ; d2.circularPermutationPerTuple(4)
4123         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4124         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
4125         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4126         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
4127         self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
4128         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
4129         self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
4130         d2=d.deepCopy() ; d2.circularPermutationPerTuple(-4)
4131         self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
4132         ####
4133         d2=d.deepCopy() ; d2.reversePerTuple()
4134         d3Exp=DataArrayInt([3,2,1,6,5,4],2,3) ; d3Exp.setInfoOnComponents(["c","b","a"])
4135         self.assertTrue(d3Exp.isEqual(d2))
4136         pass
4137
4138     def testDAExplodeComponents1(self):
4139         d=DataArrayDouble([(1,2),(3,4),(5,6)])
4140         d.setName("toto")
4141         d.setInfoOnComponents(["a","b"])
4142         d2=d.explodeComponents()
4143         self.assertEqual(len(d2),2)
4144         #
4145         d3=DataArrayDouble([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4146         self.assertTrue(d3.isEqual(d2[0],1e-14))
4147         d4=DataArrayDouble([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4148         self.assertTrue(d4.isEqual(d2[1],1e-14))
4149         #
4150         d=DataArrayInt([(1,2),(3,4),(5,6)])
4151         d.setName("toto")
4152         d.setInfoOnComponents(["a","b"])
4153         d2=d.explodeComponents()
4154         self.assertEqual(len(d2),2)
4155         #
4156         d3=DataArrayInt([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
4157         self.assertTrue(d3.isEqual(d2[0]))
4158         d4=DataArrayInt([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
4159         self.assertTrue(d4.isEqual(d2[1]))
4160         pass
4161
4162     def testVoronoi2D_1(self):
4163         """ Check of voronize on 2D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4164         tmp=MEDCouplingCMesh("mesh")
4165         arr=DataArrayDouble(5) ; arr.iota()
4166         tmp.setCoords(arr,arr)
4167         tmp=tmp.build1SGTUnstructured()
4168         conn=tmp.getNodalConnectivity()
4169         conn.rearrange(4)
4170         conn.reversePerTuple()
4171         conn.circularPermutationPerTuple(2)
4172         conn.rearrange(1)
4173         coo=tmp.getCoords().deepCopy()
4174         coo.circularPermutationPerTuple(2) ; coo*=0.1
4175         coo.reverse()
4176         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4177         coo2*=0.14
4178         coo2.circularPermutationPerTuple(2)
4179         tmp.getCoords()[:]+=coo2*coo
4180         #
4181         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4182         field.setName("MyFieldPG") ; field.setMesh(tmp)
4183         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])
4184         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4185         field.setArray(arr)
4186         field.checkConsistencyLight()
4187         ####
4188         fieldOnCell=field.voronoize(1e-12) # hot point
4189         fieldOnCell.checkConsistencyLight()
4190         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),112)
4191         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),256)
4192         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4193         meaRef=field.getMesh().getMeasureField(True).getArray()
4194         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4195         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4196         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4197         mea.rearrange(7)
4198         mea2=mea.sumPerTuple()
4199         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4200         pass
4201
4202     def testVoronoi2D_2(self):
4203         """More aggressive 2D test. No warping here. To check data"""
4204         tmp=MEDCouplingCMesh("mesh")
4205         arr=DataArrayDouble([-1.,1.])
4206         tmp.setCoords(arr,arr)
4207         tmp=tmp.buildUnstructured()
4208         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4209         field.setName("MyFieldPG") ; field.setMesh(tmp)
4210         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])
4211         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4212         field.setArray(arr)
4213         field.checkConsistencyLight()
4214         #
4215         fieldOnCell=field.voronoize(1e-12) # hot point
4216         fieldOnCell.checkConsistencyLight()
4217         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4218         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),16)
4219         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4220         meaRef=DataArrayDouble([0.65,0.4710714285714285,0.59875,0.68,0.73875,0.4,0.46142857142857235])
4221         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4222         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4223         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4224         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4225         #
4226         gsPt=field.getLocalizationOfDiscr()
4227         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4228         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4229         self.assertTrue(b.isIota(8))
4230         #
4231         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
4232         pass
4233
4234     def testVoronoi3D_1(self):
4235         """ Check of voronize on 3D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
4236         tmp=MEDCouplingCMesh("mesh")
4237         arr=DataArrayDouble(5) ; arr.iota()
4238         tmp.setCoords(arr,arr)
4239         tmp=tmp.build1SGTUnstructured()
4240         conn=tmp.getNodalConnectivity()
4241         conn.rearrange(4)
4242         conn.reversePerTuple()
4243         conn.circularPermutationPerTuple(2)
4244         conn.rearrange(1)
4245         coo=tmp.getCoords().deepCopy()
4246         coo.circularPermutationPerTuple(2) ; coo*=0.1
4247         coo.reverse()
4248         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4249         coo2*=0.14
4250         coo2.circularPermutationPerTuple(2)
4251         tmp.getCoords()[:]+=coo2*coo
4252         #
4253         tmp.changeSpaceDimension(3,0.)
4254         #
4255         arrZ=DataArrayDouble(5) ; arrZ.iota()
4256         mz=MEDCouplingCMesh() ; mz.setCoords(arrZ) ; mz=mz.buildUnstructured()
4257         mz.changeSpaceDimension(3,0.)
4258         mz.getCoords().circularPermutationPerTuple(1)
4259         tmp=tmp.buildUnstructured().buildExtrudedMesh(mz,0)
4260         #
4261         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4262         field.setName("MyFieldPG") ; field.setMesh(tmp)
4263         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])
4264         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4265         field.setArray(arr)
4266         field.checkConsistencyLight()
4267         ####
4268         fieldOnCell=field.voronoize(1e-12) # hot point
4269         fieldOnCell.checkConsistencyLight()
4270         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4271         meaRef=field.getMesh().getMeasureField(True).getArray()
4272         mea=fieldOnCell.getMesh().getMeasureField(False).getArray()
4273         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4274         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4275         mea.rearrange(7)
4276         mea2=mea.sumPerTuple()
4277         delta=(meaRef-mea2)
4278         delta.abs()
4279         delta/=meaRef
4280         self.assertEqual(len(delta.findIdsNotInRange(0,1e-2)),0) # 1e-2 because hexa8 are warped !
4281         pass
4282
4283     def testVoronoi3D_2(self):
4284         """More aggressive 3D test. No warping here. To check data"""
4285         tmp=MEDCouplingCMesh("mesh")
4286         arr=DataArrayDouble([-1.,1.])
4287         tmp.setCoords(arr,arr,arr)
4288         tmp=tmp.buildUnstructured()
4289         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4290         field.setName("MyFieldPG") ; field.setMesh(tmp)
4291         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])
4292         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4293         field.setArray(arr)
4294         field.checkConsistencyLight()
4295         #
4296         fieldOnCell=field.voronoize(1e-12) # hot point
4297         fieldOnCell.checkConsistencyLight()
4298         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
4299         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),34)
4300         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4301         meaRef=DataArrayDouble([1.3,0.9421428571428572,1.1975,1.36,1.4775,0.8,0.922857142857143])
4302         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4303         self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
4304         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4305         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4306         #
4307         gsPt=field.getLocalizationOfDiscr()
4308         a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
4309         self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
4310         self.assertTrue(b.isIota(8))
4311         #
4312         self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),2*7+21)
4313         pass
4314
4315     def testVoronoi3D_8(self):
4316         """More aggressive 3D test. Bug EDF 15094"""
4317         mesh = MEDCouplingUMesh("myMeshForAnthony",3)
4318         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]
4319         da = DataArrayDouble.New(coords,35,3)
4320         mesh.setCoords(da)
4321         mesh.allocateCells()
4322         mesh.insertNextCell(NORM_PENTA15, [0, 2, 1, 3, 5, 4, 8, 7, 6, 14, 13, 12, 9, 11, 10])
4323         mesh.insertNextCell(NORM_HEXA20, [20, 23, 22, 21, 16, 15, 24, 18, 28, 27, 26, 25, 17, 34, 33, 19, 29, 32, 31, 30])
4324         mesh.zipCoords()
4325         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4326         f.setMesh(mesh)
4327         f.setName("myFieldForAnthony")
4328         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])
4329         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])
4330         arr = DataArrayDouble(48, 3)
4331         arr[:, 0] = list(range(48))
4332         arr[:, 1] = 100 + arr[:, 0]
4333         arr[:, 2] = 200 + arr[:, 0]
4334         f.setArray(arr)
4335         fieldOnCell=f.voronoize(1e-12) # hot point
4336         fieldOnCell.checkConsistencyLight()
4337         self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),48)
4338         self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),127)
4339         meaRef=f.getMesh().getMeasureField(True).getArray(); meaRef.rearrange(2); meaRef2 = meaRef.sumPerTuple()
4340         mea=fieldOnCell.getMesh().getMeasureField(True).getArray(); mea.rearrange(48); mea2 = mea.sumPerTuple()
4341         self.assertTrue(mea2.isEqual(meaRef2,1e-9))
4342         pass
4343
4344     def testVoronoi3DSurf_1(self):
4345         tmp=MEDCouplingCMesh("mesh")
4346         arr=DataArrayDouble(5) ; arr.iota()
4347         tmp.setCoords(arr,arr)
4348         tmp=tmp.build1SGTUnstructured()
4349         conn=tmp.getNodalConnectivity()
4350         conn.rearrange(4)
4351         conn.reversePerTuple()
4352         conn.circularPermutationPerTuple(2)
4353         conn.rearrange(1)
4354         coo=tmp.getCoords().deepCopy()
4355         coo.circularPermutationPerTuple(2) ; coo*=0.1
4356         coo.reverse()
4357         coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
4358         coo2*=0.14
4359         coo2.circularPermutationPerTuple(2)
4360         tmp.getCoords()[:]+=coo2*coo
4361         #
4362         tmp.changeSpaceDimension(3,0.)    # force 3D surf
4363         tmp.rotate([0,0,0],[1,0,0],pi/3)  # force 3D surf
4364         #
4365         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4366         field.setName("MyFieldPG") ; field.setMesh(tmp)
4367         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])
4368         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4369         field.setArray(arr)
4370         field.checkConsistencyLight()
4371         #####
4372         fieldOnCell=field.voronoize(1e-12);
4373         fieldOnCell.checkConsistencyLight()
4374         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4375         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),2)
4376         self.assertEqual(field.getMesh().getSpaceDimension(),fieldOnCell.getMesh().getSpaceDimension())
4377         self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4378         meaRef=field.getMesh().getMeasureField(True).getArray()
4379         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4380         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4381         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
4382         mea.rearrange(7)
4383         mea2=mea.sumPerTuple()
4384         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4385         pass
4386
4387     def testVoronoi1D_1(self):
4388         tmp=MEDCouplingCMesh("mesh")
4389         arr=DataArrayDouble(5) ; arr.iota()
4390         tmp.setCoords(arr)
4391         tmp=tmp.build1SGTUnstructured()
4392         tmp1=tmp.deepCopy()
4393         tmp.changeSpaceDimension(2,0.)
4394         tmp.getCoords()[:,1]=pi/(len(arr)-1)*tmp.getCoords()[:,0]
4395         tmp.getCoords()[:,0]=1.
4396         tmp.setCoords(tmp.getCoords().fromPolarToCart())
4397         tmp.changeSpaceDimension(3,1.)
4398         #
4399         field=MEDCouplingFieldDouble(ON_GAUSS_PT)
4400         field.setName("MyFieldPG") ; field.setMesh(tmp)
4401         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])
4402         arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
4403         field.setArray(arr)
4404         field.checkConsistencyLight()
4405         ####
4406         fieldOnCell=field.voronoize(1e-12);
4407         fieldOnCell.checkConsistencyLight()
4408         self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
4409         self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),1)
4410         assert(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
4411         meaRef=field.getMesh().getMeasureField(True).getArray()
4412         mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
4413         self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
4414         self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),6)
4415         mea.rearrange(6)
4416         mea2=mea.sumPerTuple()
4417         self.assertTrue(mea2.isEqual(meaRef,1e-12))
4418         pass
4419
4420     def testFieldDoubleConvertToLinear1(self):
4421         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)
4422         da.setInfoOnComponents(["g","h"])
4423         m=MEDCouplingUMesh("mesh",2)
4424         m.setCoords(da)
4425         m.allocateCells()
4426         m.insertNextCell(NORM_TRI6,[0,1,13,4,9,7])
4427         m.insertNextCell(NORM_TRI6,[1,2,14,5,10,9])
4428         m.insertNextCell(NORM_QUAD8,[2,3,17,15,6,12,16,11])
4429         refPtr=m.getHiddenCppPointer()
4430         f=MEDCouplingFieldDouble(ON_NODES)
4431         f.setName("aa")
4432         f.setMesh(m)
4433         arr=DataArrayDouble(18*2) ; arr.iota()
4434         arr.rearrange(2)
4435         arr.setInfoOnComponents(["bb","ccc"])
4436         f.setArray(arr)
4437         f.setTime(0.5,2,3)
4438         f.checkConsistencyLight()
4439         #
4440         f1=f.convertQuadraticCellsToLinear()
4441         self.assertTrue(f.getMesh().getHiddenCppPointer(),refPtr)
4442         self.assertTrue(f1.getMesh().getHiddenCppPointer()!=refPtr)
4443         f1.checkConsistencyLight()
4444         self.assertEqual(f1.getName(),"aa")
4445         self.assertEqual(f1.getTypeOfField(),ON_NODES)
4446         da0=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)])
4447         da0.setInfoOnComponents(["g","h"])
4448         self.assertTrue(f1.getMesh().getCoords().isEqual(da0,1e-12))
4449         self.assertTrue(f1.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4450         self.assertTrue(f1.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4451         da2=DataArrayDouble([(0,1),(2,3),(4,5),(6,7),(26,27),(28,29),(30,31),(34,35)])
4452         da2.setInfoOnComponents(["bb","ccc"])
4453         self.assertTrue(f1.getArray().isEqual(da2,1e-12))
4454         self.assertEqual(f1.getTime(),[0.5,2,3])
4455         #
4456         f2=MEDCouplingFieldDouble(ON_CELLS)
4457         f2.setName("aa")
4458         f2.setMesh(m)
4459         arr=DataArrayDouble(3*2) ; arr.iota()
4460         arr.rearrange(2)
4461         arr.setInfoOnComponents(["bb","ccc"])
4462         f2.setArray(arr)
4463         f2.setTime(0.5,2,3)
4464         f2.checkConsistencyLight()
4465         f3=f2.convertQuadraticCellsToLinear()
4466         self.assertEqual(f2.getMesh().getHiddenCppPointer(),refPtr)
4467         f3.checkConsistencyLight()
4468         self.assertTrue(f3.getMesh().getHiddenCppPointer()!=refPtr)
4469         self.assertTrue(f3.getMesh().getCoords().isEqual(da0,1e-12))
4470         self.assertTrue(f3.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
4471         self.assertTrue(f3.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
4472         self.assertEqual(f2.getArray().getHiddenCppPointer(),f3.getArray().getHiddenCppPointer())
4473         self.assertEqual(f3.getTime(),[0.5,2,3])
4474         pass
4475
4476     def testBuild1DMeshFromCoords1(self):
4477         da=DataArrayDouble([(3,4),(5,6),(7,8)])
4478         da.setName("ZeArr")
4479         da0=da.deepCopy()
4480         m=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4481         m.checkConsistencyLight()
4482         self.assertEqual(da0.getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
4483         self.assertTrue(da.isEqual(da0,1e-12))
4484         self.assertEqual(m.getName(),da.getName())
4485         self.assertEqual(m.getMeshDimension(),1)
4486         self.assertTrue(isinstance(m,MEDCouplingUMesh))
4487         m1=MEDCoupling1SGTUMesh(m)
4488         m1.checkConsistencyLight()
4489         self.assertTrue(m1.getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2])))
4490         #
4491         da0.setName("")
4492         m2=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
4493         m2.checkConsistencyLight()
4494         self.assertEqual(da0.getHiddenCppPointer(),m2.getCoords().getHiddenCppPointer())
4495         self.assertEqual(m2.getName(),"Mesh")
4496         pass
4497
4498     def testVoronoi3D_3(self):
4499         """Non regression test to check MEDCouplingUMesh::clipSingle3DCellByPlane"""
4500         coo=DataArrayDouble([0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],4,3)
4501         m=MEDCouplingUMesh("mesh",3)
4502         m.setCoords(coo) ; m.allocateCells()
4503         m.insertNextCell(NORM_TETRA4,[0,2,3,1])
4504         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4505         f.setMesh(m) ; f.setName("field")
4506         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])
4507         f.setArray(DataArrayDouble([0,1,2,3]))
4508         f3=f.voronoize(1e-12)
4509         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4510         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4511         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4512         pass
4513
4514     def testVoronoi3D_4(self):
4515         """Idem testVoronoi3D_3 except that here quadratic cells are considered"""
4516         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)
4517         m=MEDCouplingUMesh("mesh",3)
4518         m.setCoords(coo) ; m.allocateCells()
4519         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4520         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4521         f.setMesh(m) ; f.setName("field")
4522         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])
4523         f.setArray(DataArrayDouble([0,1,2,3]))
4524         f3=f.voronoize(1e-12)
4525         ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
4526         self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
4527         self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4528         pass
4529
4530     def testVoronoi3D_5(self):
4531         """ Cell 0 of Barreau_Elga_V11.rmed and sslv07b.rmed. HEXA8 cut regularly into 8 parts"""
4532         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)])
4533         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4534         m.insertNextCell(NORM_HEXA8,[0,2,6,4,1,3,7,5])
4535         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4536         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])
4537         arr=DataArrayDouble(8) ; arr.iota() ; f.setArray(arr)
4538         f.checkConsistencyLight()
4539         #
4540         vol=f.getMesh().getMeasureField(False).getIJ(0,0)
4541         f2=f.voronoize(1e-12)
4542         f2.checkConsistencyLight()
4543         self.assertEqual(f2.getNumberOfTuples(),8)
4544         volRef=vol/8
4545         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isUniform(volRef,1e-12))
4546         pass
4547
4548     def testVoronoi3D_6(self):
4549         """ Cell 0 of brokenshire.med (and pace.med). TETRA10 split into 4 parts"""
4550         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)])
4551         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4552         m.insertNextCell(NORM_TETRA10,[2,0,1,3,5,4,7,9,6,8])
4553         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4554         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])
4555         arr=DataArrayDouble(4) ; arr.iota() ; f.setArray(arr)
4556         f.checkConsistencyLight()
4557         f2=f.voronoize(1e-12)
4558         f2.checkConsistencyLight()
4559         self.assertEqual(f2.getNumberOfTuples(),4)
4560         arr=f2.getMesh().getMeasureField(False).getArray()
4561         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(DataArrayDouble([378.0546928833331, 318.42621348333586, 318.4262134833361, 318.4262134833278]),1e-6))
4562         pass
4563
4564     def testVoronoi3D_7(self):
4565         """ sslv07a.rmed. HEXA20 split into 27 parts """
4566         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)])
4567         m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
4568         m.insertNextCell(NORM_HEXA20,[0,3,5,2,8,14,12,10,4,7,6,1,15,13,11,9,16,19,18,17])
4569         f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
4570         f.setGaussLocalizationOnType(NORM_HEXA20,
4571                                      [-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],
4572                                      [-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],
4573                                      [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])
4574         arr=DataArrayDouble(27) ; arr.iota() ; f.setArray(arr)
4575         f.checkConsistencyLight()
4576         f2=f.voronoize(1e-12)
4577         a=0.007187820185770747 ; b=0.0090870678008658 ; c=0.011488156225861077 ; d=0.014523687548277797
4578         ref=DataArrayDouble(27) ; ref[::2]=a ; ref[1::2]=b
4579         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
4580         #
4581         self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-7))
4582         pass
4583
4584     def testConvertQuadToLin4Gauss_1(self):
4585         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)
4586         m=MEDCouplingUMesh("mesh",3)
4587         m.setCoords(coo) ; m.allocateCells()
4588         m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
4589         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
4590         f.setMesh(m) ; f.setName("field")
4591         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]
4592         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]
4593         cccc=[0.041667,0.041667,0.041667,0.041667]
4594         f.setGaussLocalizationOnType(NORM_TETRA10,aaaa,bbbb,cccc)
4595         f.setArray(DataArrayDouble([0,1,2,3]))
4596         f.setTime(1.,2,3)
4597         #
4598         mcpy=m.deepCopy() ; mcpy.convertQuadraticCellsToLinear() ; mcpy.zipCoords()
4599         #
4600         f2=f.convertQuadraticCellsToLinear()
4601         f2.checkConsistencyLight()
4602         self.assertTrue(f2.getMesh().isEqual(mcpy,1e-12))
4603         self.assertTrue(f2.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
4604         self.assertEqual(f2.getNbOfGaussLocalization(),1)
4605         gl=f2.getGaussLocalization(0)
4606         self.assertEqual(gl.getType(),NORM_TETRA4)
4607         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))
4608         self.assertTrue(DataArrayDouble(gl.getGaussCoords()).isEqual(DataArrayDouble(bbbb),1e-12))
4609         self.assertTrue(DataArrayDouble(gl.getWeights()).isEqual(DataArrayDouble(cccc),1e-12))
4610         self.assertEqual(f2.getName(),"field")
4611         self.assertEqual(f2.getTime(),[1.,2,3])
4612         pass
4613
4614     def testDADCumSum1(self):
4615         d=DataArrayDouble([3.,2.,4.,5.])
4616         self.assertTrue(d.cumSum().isEqual(DataArrayDouble([0.,3.,5.,9.,14.]),1e-12))
4617         d2=DataArrayDouble([])
4618         self.assertTrue(d2.cumSum().isEqual(DataArrayDouble([0.]),1e-12))
4619         d.rearrange(2)
4620         self.assertRaises(InterpKernelException,d.cumSum)
4621         pass
4622
4623     def testDAIFromLinkedListOfPairToList1(self):
4624         d=DataArrayInt([(5,7),(7,3),(3,12),(12,17)])
4625         zeRes=DataArrayInt([5,7,3,12,17])
4626         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4627         d.rearrange(1)
4628         self.assertRaises(InterpKernelException,d.fromLinkedListOfPairToList)
4629         d.rearrange(2)
4630         self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
4631         d2=DataArrayInt([(5,7)])
4632         self.assertTrue(d2.fromLinkedListOfPairToList().isEqual(DataArrayInt([5,7])))
4633         d3=DataArrayInt([(5,7),(7,3),(4,12),(12,17)])
4634         self.assertRaises(InterpKernelException,d3.fromLinkedListOfPairToList) # not a linked list of pair
4635         d4=DataArrayInt([(5,7),(7,3),(12,3),(12,17)])
4636         self.assertRaises(InterpKernelException,d4.fromLinkedListOfPairToList) # not a linked list of pair, but can be repaired !
4637         d4.sortEachPairToMakeALinkedList()
4638         self.assertTrue(d4.fromLinkedListOfPairToList().isEqual(zeRes))
4639         pass
4640
4641     def testUMeshExplodeIntoEdges1(self):
4642         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured()
4643         self.assertEqual(m.getMeshDimension(),3)
4644         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4645         b0,b1,b2,b3,b4=m.explode3DMeshTo1D()
4646         self.assertTrue(a0.isEqual(b0,1e-12))
4647         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4648         #
4649         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4650         self.assertEqual(m.getMeshDimension(),2)
4651         a0,a1,a2,a3,a4=m.explodeIntoEdges()
4652         b0,b1,b2,b3,b4=m.buildDescendingConnectivity()
4653         self.assertTrue(a0.isEqual(b0,1e-12))
4654         self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
4655         pass
4656
4657     def testUMeshComputeEnlargedNeighborsOfNodes(self):
4658         m=MEDCouplingCMesh() ; arr=DataArrayDouble(4) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4659         a,b=m.computeEnlargedNeighborsOfNodes()
4660         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])
4661         bExp=DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84])
4662         self.assertTrue(a.isEqual(aExp))
4663         self.assertTrue(b.isEqual(bExp))
4664         m2=m[[1,2,3]]
4665         c,d=m2.computeEnlargedNeighborsOfNodes()
4666         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])
4667         dExp=DataArrayInt([0,0,3,8,11,14,20,25,28,31,34,34,34,34,34,34,34])
4668         self.assertTrue(c.isEqual(cExp))
4669         self.assertTrue(d.isEqual(dExp))
4670         pass
4671
4672     def testDAIfindIdsExt1(self):
4673         d=DataArrayInt([4,6,-2,3,7,0,10])
4674         self.assertTrue(d.findIdsGreaterOrEqualTo(3).isEqual(DataArrayInt([0,1,3,4,6])))
4675         self.assertTrue(d.findIdsGreaterThan(3).isEqual(DataArrayInt([0,1,4,6])))
4676         self.assertTrue(d.findIdsLowerThan(3).isEqual(DataArrayInt([2,5])))
4677         self.assertTrue(d.findIdsLowerOrEqualTo(3).isEqual(DataArrayInt([2,3,5])))
4678         pass
4679
4680     def testDAFacto1(self):
4681         """Test focused of new wrapped methods for MEDCouplingFieldInt thanks to code factorization."""
4682         d=DataArrayDouble(7) ; d.iota()
4683         m=MEDCouplingUMesh.Build1DMeshFromCoords(d)
4684         f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(m) ; arr=DataArrayInt(6) ; arr.iota() ; f.setArray(arr) ; f.checkConsistencyLight()
4685         f_0=f[::2] # test is here
4686         self.assertTrue(f_0.getArray().isEqual(DataArrayInt([0,2,4])))
4687         self.assertTrue(f_0.getMesh().isEqual(m[[0,2,4]],1e-12))
4688         #
4689         f2=MEDCouplingFieldInt(ON_NODES) ; f2.setMesh(m) ; arr=DataArrayInt(7) ; arr.iota() ; f2.setArray(arr) ; f2.checkConsistencyLight()
4690         f_1=f2[::2] # test is here
4691         self.assertTrue(f_1.getArray().isEqual(DataArrayInt([0,1,2,3,4,5])))
4692         m_1=m[[0,2,4]] ; m_1.zipCoords()
4693         self.assertTrue(f_1.getMesh().isEqual(m_1,1e-12))
4694         pass
4695
4696     def testFieldFloatIsOnStage1(self):
4697         """ My first test with field int."""
4698         m=MEDCouplingCMesh()
4699         m.setName("mesh")
4700         arrX=DataArrayDouble([0,1,2,3])
4701         m.setCoords(arrX,arrX)
4702         f=MEDCouplingFieldFloat(ON_CELLS)
4703         f.setMesh(m)
4704         arr=DataArrayFloat(8) ; arr.iota() ;f.setArray(arr)
4705         self.assertRaises(InterpKernelException,f.checkConsistencyLight)
4706         arr=DataArrayFloat(9) ; arr.iota() ;f.setArray(arr)
4707         f.checkConsistencyLight()
4708         f.setTimeUnit("ms")
4709         self.assertEqual(f.getTimeUnit(),"ms")
4710         f.setTime(3.2,5,6)
4711         a,b,c=f.getTime()
4712         self.assertEqual(b,5)
4713         self.assertEqual(c,6)
4714         self.assertEqual(a,3.2,12)
4715         pass
4716
4717     def testFieldFloatIsOnStage2(self):
4718         """ Very important test to check that isEqual of MEDCouplingFieldFloat is OK !"""
4719         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4720         m1=m1.buildUnstructured() ; m1.setName("mesh")
4721         f1=MEDCouplingFieldFloat(ON_CELLS) ; f1.setMesh(m1)
4722         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"])
4723         f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
4724         #
4725         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
4726         m2=m2.buildUnstructured() ; m2.setName("mesh")
4727         f2=MEDCouplingFieldFloat(ON_CELLS) ; f2.setMesh(m2)
4728         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"])
4729         f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
4730         #
4731         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4732         f1.getArray()[:]*=2
4733         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4734         self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4735         f1.getArray()[:]/=2
4736         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4737         #
4738         f1.setName("F1")
4739         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4740         f1.setName("f1")
4741         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4742         #
4743         f1.getArray().setInfoOnComponents(["aa","bbbb"])
4744         self.assertTrue(not f1.isEqual(f2,1e-12,0.))
4745         self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
4746         f1.getArray().setInfoOnComponents(["aa","bbb"])
4747         self.assertTrue(f1.isEqual(f2,1e-12,0.))
4748         #
4749         f3=f2.deepCopy()
4750         self.assertTrue(f1.isEqual(f3,1e-12,0.))
4751         #
4752         for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
4753             f4=MEDCouplingFieldFloat(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
4754             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"])
4755             f4.setArray(arr4) ; f4.setName("f1")
4756             self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
4757             pass
4758         pass
4759
4760     def testLTGTDAD1(self):
4761         d=DataArrayDouble(10) ; d.iota()
4762         self.assertTrue(d.findIdsLowerThan(0).empty())
4763         self.assertTrue(d.findIdsLowerThan(1).isEqual(DataArrayInt([0])))
4764         d-=5.
4765         self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([0,1,2,3,4])))
4766         self.assertTrue(d.findIdsGreaterThan(0.).isEqual(DataArrayInt([6,7,8,9])))
4767         self.assertTrue(d.convertToFloatArr().isEqual(DataArrayFloat([-5,-4,-3,-2,-1,0,1,2,3,4]),1e-7))
4768         self.assertTrue(d.convertToFloatArr().convertToDblArr().isEqual(d,1e-12))
4769         pass
4770
4771     def testMapII1(self):
4772         """ Test optimized maps for renumbering. Typical usage local to global in parallel mode"""
4773         d=DataArrayInt([1003,1007])
4774         m=d.invertArrayN2O2O2NOptimized()
4775         d2=DataArrayInt([1003,1003,1007,1003,1007])
4776         d2.transformWithIndArr(m)
4777         self.assertTrue(d2.isEqual(DataArrayInt([0,0,1,0,1])))
4778         pass
4779
4780     def testDAICheckUniformAndGuess1(self):
4781         d=DataArrayInt([3,3],1,2)
4782         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non single compo
4783         d=DataArrayInt([])
4784         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# empty
4785         d=DataArrayInt()
4786         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non allocated
4787         d=DataArrayInt([3,3,3])
4788         self.assertEqual(3,d.checkUniformAndGuess())
4789         d=DataArrayInt([7])
4790         self.assertEqual(7,d.checkUniformAndGuess())
4791         d=DataArrayInt([3,4,3])
4792         self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non uniform
4793         pass
4794
4795     def testUMComputePlaneEquationOf3DFaces1(self):
4796         """ Consequence of an invalid traduction of matrix inversion transposition."""
4797         m=MEDCoupling1SGTUMesh("msh",NORM_QUAD4)
4798         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)]))
4799         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]))
4800         m=m.buildUnstructured()
4801         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)])
4802         res=m.computePlaneEquationOf3DFaces()
4803         self.assertTrue(res.isEqual(ref,1e-12))
4804         pass
4805
4806     def testBugInComputationOfEqOfPlane1(self):
4807         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)
4808         m=MEDCouplingUMesh("",2)
4809         m.setCoords(coo)
4810         m.allocateCells()
4811         m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
4812         self.assertTrue(m.computePlaneEquationOf3DFaces().isEqual(DataArrayDouble([0,1,0,-1],1,4),1e-12))
4813         pass
4814
4815     def testSimplifyPolyhedra(self):
4816         mesh = MEDCouplingUMesh('mesh', 3)
4817         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)])
4818         mesh.setCoords(coo)
4819         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])
4820         cI = DataArrayInt([0, 108])
4821         mesh.setConnectivity(c, cI)
4822         mesh.simplifyPolyhedra(1.0e-8)
4823         c, cI = mesh.getNodalConnectivity(), mesh.getNodalConnectivityIndex()
4824         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])
4825         tgt_cI = DataArrayInt([0, 90])
4826         self.assertEqual(c.getValues(), tgt_c.getValues())
4827         self.assertEqual(cI.getValues(), tgt_cI.getValues())
4828         pass
4829
4830     pass
4831
4832 if __name__ == '__main__':
4833     unittest.main()