Salome HOME
69b96d1071b6a0eea42b644c3dc3ba025aa1df34
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
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 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 import platform
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest
27
28 class MEDLoaderTest3(unittest.TestCase):
29     def testMEDMesh1(self):
30         fileName="Pyfile18.med"
31         mname="ExampleOfMultiDimW"
32         medmesh=MEDFileMesh.New(fileName,mname)
33         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
34         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
35         m1_0=medmesh.getLevel0Mesh(True)
36         m1_1=ReadUMeshFromFile(fileName,mname,0)
37         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
38         m2_0=medmesh.getLevelM1Mesh(True)
39         m2_1=ReadUMeshFromFile(fileName,mname,-1)
40         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
41         pass
42
43     def testMEDMesh2(self):
44         fileName="Pyfile10.med"
45         mname="3DToto"
46         outFileName="MEDFileMesh1.med"
47         medmesh=MEDFileUMesh.New(fileName,mname)
48         self.assertEqual((0,),medmesh.getNonEmptyLevels())
49         m1_0=medmesh.getLevel0Mesh(True)
50         m1_1=ReadUMeshFromFile(fileName,mname,0)
51         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
52         g1_0=medmesh.getGroup(0,"mesh2",True)
53         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
54         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
55         g1_0=medmesh.getGroup(0,"mesh3",True)
56         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
57         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
58         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
59         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
60         g1_1.setName(g1_0.getName())
61         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
62         g1_0=medmesh.getFamily(0,"Family_-3",True)
63         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
64         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
65         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
66         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
67         g1_1.setName(g1_0.getName())
68         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
69         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
70         medmesh.write(outFileName,2);
71         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
72         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
73         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
74         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
75         famn=medmesh.getFamilyNameGivenId(0)
76         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
77         #without renum
78         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
79         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
80         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
81         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
82         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
83         pass
84
85     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
86     def testMEDMesh3(self):
87         outFileName="MEDFileMesh3.med"
88         c=DataArrayDouble.New()
89         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
90         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
91         c.setValues(coords,9,2)
92         m=MEDCouplingUMesh.New();
93         m.setMeshDimension(2);
94         m.allocateCells(5);
95         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
96         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
97         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
98         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
99         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
100         m.finishInsertingCells();
101         m.setCoords(c)
102         m.checkConsistencyLight()
103         m1=MEDCouplingUMesh.New();
104         m1.setMeshDimension(1);
105         m1.allocateCells(3);
106         m1.insertNextCell(NORM_SEG2,2,[1,4])
107         m1.insertNextCell(NORM_SEG2,2,[3,6])
108         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
109         m1.finishInsertingCells();
110         m1.setCoords(c)
111         m1.checkConsistencyLight()
112         m2=MEDCouplingUMesh.New();
113         m2.setMeshDimension(0);
114         m2.allocateCells(4);
115         m2.insertNextCell(NORM_POINT1,1,[1])
116         m2.insertNextCell(NORM_POINT1,1,[3])
117         m2.insertNextCell(NORM_POINT1,1,[2])
118         m2.insertNextCell(NORM_POINT1,1,[6])
119         m2.finishInsertingCells();
120         m2.setCoords(c)
121         m2.checkConsistencyLight()
122         #
123         mm=MEDFileUMesh.New()
124         self.assertTrue(mm.getUnivNameWrStatus())
125         mm.setName("MyFirstMEDCouplingMEDmesh")
126         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
127         mm.setCoords(c)
128         mm.setMeshAtLevel(-1,m1);
129         mm.setMeshAtLevel(0,m);
130         mm.setMeshAtLevel(-2,m2);
131         # playing with groups
132         g1_2=DataArrayInt.New()
133         g1_2.setValues([1,3],2,1)
134         g1_2.setName("G1")
135         g2_2=DataArrayInt.New()
136         g2_2.setValues([1,2,3],3,1)
137         g2_2.setName("G2")
138         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
139         g1_1=DataArrayInt.New()
140         g1_1.setValues([0,1,2],3,1)
141         g1_1.setName("G1")
142         g2_1=DataArrayInt.New()
143         g2_1.setValues([0,2],2,1)
144         g2_1.setName("G2")
145         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
146         g1_N=DataArrayInt.New()
147         g1_N.setValues(range(8),8,1)
148         g1_N.setName("G1")
149         g2_N=DataArrayInt.New()
150         g2_N.setValues(range(9),9,1)
151         g2_N.setName("G2")
152         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
153         mm.createGroupOnAll(0,"GrpOnAllCell")
154         # check content of mm
155         t=mm.getGroupArr(0,"G1",False)
156         self.assertTrue(g1_2.isEqual(t));
157         t=mm.getGroupArr(0,"G2",False)
158         self.assertTrue(g2_2.isEqual(t));
159         t=mm.getGroupArr(-1,"G1",False)
160         self.assertTrue(g1_1.isEqual(t));
161         t=mm.getGroupArr(-1,"G2",False)
162         self.assertTrue(g2_1.isEqual(t));
163         t=mm.getGroupArr(1,"G1",False)
164         self.assertTrue(g1_N.isEqual(t));
165         t=mm.getGroupArr(1,"G2",False)
166         self.assertTrue(g2_N.isEqual(t));
167         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
168         t=mm.getGroupArr(0,"GrpOnAllCell")
169         self.assertTrue(t.getValues()==range(5))
170         #
171         mmCpy=mm.deepCopy()
172         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
173         mmCpy.write(outFileName,2);
174         #
175         mm=MEDFileMesh.New(outFileName)
176         #
177         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
178         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
179         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
180         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
181         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
182         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
183         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
184         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
185         self.assertEqual(3,len(lmm))
186         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
187         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
188         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
189         #
190         self.assertTrue(mm.getUnivNameWrStatus())
191         self.assertTrue(isinstance(mm.getUnivName(),str))
192         self.assertTrue(len(mm.getUnivName())!=0)
193         mbis=mm.getMeshAtLevel(0)
194         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
195         self.assertTrue(m.isEqual(mbis,1e-12));
196         #
197         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
198         pass
199
200     # this test is the testMEDMesh3 except that permutation is dealed here
201     def testMEDMesh4(self):
202         outFileName="MEDFileMesh4.med"
203         c=DataArrayDouble.New()
204         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
205         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
206         c.setValues(coords,9,2)
207         c.setInfoOnComponent(0,"abcdef [km]")
208         c.setInfoOnComponent(1,"ghij [MW]")
209         m=MEDCouplingUMesh.New();
210         m.setMeshDimension(2);
211         m.allocateCells(5);
212         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
213         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
214         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
215         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
216         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
217         m.finishInsertingCells();
218         m.setCoords(c)
219         m.checkConsistencyLight()
220         m1=MEDCouplingUMesh.New();
221         m1.setMeshDimension(1);
222         m1.allocateCells(3);
223         m1.insertNextCell(NORM_SEG2,2,[1,4])
224         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
225         m1.insertNextCell(NORM_SEG2,2,[3,6])
226         m1.finishInsertingCells();
227         m1.setCoords(c)
228         m1.checkConsistencyLight()
229         m2=MEDCouplingUMesh.New();
230         m2.setMeshDimension(0);
231         m2.allocateCells(4);
232         m2.insertNextCell(NORM_POINT1,1,[1])
233         m2.insertNextCell(NORM_POINT1,1,[3])
234         m2.insertNextCell(NORM_POINT1,1,[2])
235         m2.insertNextCell(NORM_POINT1,1,[6])
236         m2.finishInsertingCells();
237         m2.setCoords(c)
238         m2.checkConsistencyLight()
239         #
240         mm=MEDFileUMesh.New()
241         mm.setName("My2ndMEDCouplingMEDmesh")
242         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
243         mm.setCoords(c)
244         renumNode=DataArrayInt.New()
245         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
246         mm.setRenumFieldArr(1,renumNode)
247         mm.setMeshAtLevel(-1,m1,True);
248         mm.setMeshAtLevel(0,m,True);
249         mm.setMeshAtLevel(-2,m2,True);
250         mm.removeMeshAtLevel(-2)
251         mm.setMeshAtLevel(-2,m2,True);
252         # playing with groups
253         g1_2=DataArrayInt.New()
254         g1_2.setValues([2,3],2,1)
255         g1_2.setName("G1")
256         g2_2=DataArrayInt.New()
257         g2_2.setValues([2,0,3],3,1)
258         g2_2.setName("G2")
259         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
260         g1_1=DataArrayInt.New()
261         g1_1.setValues([0,2,1],3,1)
262         g1_1.setName("G1")
263         g2_1=DataArrayInt.New()
264         g2_1.setValues([0,2],2,1)
265         g2_1.setName("G2")
266         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
267         g1_N=DataArrayInt.New()
268         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
269         g1_N.setName("G1")
270         g2_N=DataArrayInt.New()
271         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
272         g2_N.setName("G2")
273         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
274         # check content of mm
275         t=mm.getGroupArr(0,"G1",True)
276         self.assertTrue(g1_2.isEqual(t));
277         t=mm.getGroupArr(0,"G2",True)
278         self.assertTrue(g2_2.isEqual(t));
279         t=mm.getGroupArr(-1,"G1",True)
280         self.assertTrue(g1_1.isEqual(t));
281         t=mm.getGroupArr(-1,"G2",True)
282         self.assertTrue(g2_1.isEqual(t));
283         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
284         #
285         mm.write(outFileName,2);
286         mm2=MEDFileMesh.New(outFileName)
287         res=mm.isEqual(mm2,1e-12)
288         self.assertTrue(res[0])
289         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
290         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
291         mm2.keepFamIdsOnlyOnLevs([3],[-1])
292         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
293             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
294             pass
295         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
296         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
297         #
298         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
299         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
300         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
301         self.assertTrue(not mm2.existsFamily("Family_-8"))
302         mm2.createGroupOnAll(-1,"GrpOnAllFace")
303         self.assertTrue(mm2.existsFamily("Family_-8"))
304         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
305         pass
306
307     #testing persistence of retrieved arrays
308     def testMEDMesh5(self):
309         fileName="Pyfile18.med"
310         mname="ExampleOfMultiDimW"
311         medmesh=MEDFileUMesh.New(fileName,mname)
312         m1_0=medmesh.getLevel0Mesh(True)
313         da1=medmesh.getFamilyFieldAtLevel(0)
314         del medmesh
315         self.assertEqual(20,m1_0.getNumberOfCells())
316         self.assertEqual(20,da1.getNumberOfTuples())
317         pass
318
319     def testMEDMesh6(self):
320         outFileName="MEDFileMesh5.med"
321         m=MEDFileCMesh.New()
322         m.setTime(-1,-1,2.3)
323         m1=MEDCouplingCMesh.New();
324         da=DataArrayDouble.New()
325         da.setValues([0.,1.,2.],3,1)
326         da.setInfoOnComponent(0,"XX [mm]")
327         m1.setCoordsAt(0,da)
328         da=DataArrayDouble.New()
329         da.setValues([0.,1.2],2,1)
330         da.setInfoOnComponent(0,"YY [km]")
331         m1.setCoordsAt(1,da)
332         da=DataArrayDouble.New()
333         da.setValues([0.,1.3],2,1)
334         da.setInfoOnComponent(0,"ZZ [um]")
335         m1.setCoordsAt(2,da)
336         m.setMesh(m1)
337         self.assertTrue(m[0].isEqual(m1,1e-12))
338         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
339         m.setName("myFirstCartMesh")
340         m.setDescription("mmmmpppppppp")
341         m.setTimeValue(2.3)
342         m.setTimeUnit("ms")
343         da=DataArrayInt.New()
344         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
345         m.setFamilyFieldArr(1,da)
346         m.setFamilyId("family1",1)
347         da=m.getFamilyArr(1,"family1")
348         expected1=[2,4,9]
349         self.assertEqual(expected1,da.getValues())
350         self.assertTrue(m.getUnivNameWrStatus())
351         m.write(outFileName,2);
352         mm=MEDFileMesh.New(outFileName)
353         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
354         self.assertTrue(isinstance(mm,MEDFileCMesh))
355         self.assertTrue(isinstance(mm.getUnivName(),str))
356         self.assertTrue(len(mm.getUnivName())!=0)
357         self.assertTrue(m.isEqual(mm,1e-12)[0])
358         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
359         m2=mm.getMesh()
360         tt=m.getTime()
361         m1.setTime(tt[2],tt[0],tt[1])
362         m1.setName(m.getName())
363         m1.setTimeUnit(m.getTimeUnit())
364         m1.setDescription(m.getDescription())
365         self.assertTrue(m2.isEqual(m1,1e-12));
366         pass
367
368     def testMEDMesh7(self):
369         fileName="Pyfile24.med"
370         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
371         m=MEDFileUMesh.New()
372         m.setCoords(m2.getCoords())
373         m.setMeshAtLevel(0,m2)
374         m.setMeshAtLevel(-1,m1)
375         m.setMeshAtLevel(-2,m0)
376         m.setFamilyFieldArr(0,f2)
377         m.setFamilyFieldArr(-1,f1)
378         m.setFamilyFieldArr(-2,f0)
379         m.setFamilyFieldArr(1,p)
380         m.setRenumFieldArr(0,n2)
381         m.setRenumFieldArr(-1,n1)
382         m.setRenumFieldArr(-2,n0)
383         nbOfFams=len(fns)
384         for i in xrange(nbOfFams):
385             m.addFamily(fns[i],fids[i])
386             pass
387         nbOfGrps=len(grpns)
388         for i in xrange(nbOfGrps):
389             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
390             pass
391         m.setName(m2.getName())
392         m.setDescription(m2.getDescription())
393         #
394         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
395         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
396         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
397         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
398         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
399         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
400         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
401         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
402         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
403         #
404         m.write(fileName,2)
405         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
406         pass
407
408     def funcToTestDelItem(self,ff):
409         del ff[[0.02,(3,4)]]
410         pass
411
412     #emulation of pointe.med file.
413     def testMEDField1(self):
414         mm=MEDFileMesh.New("Pyfile17.med")
415         mm.write("Pyfile17_bis.med",2)
416         ff=MEDFileFieldMultiTS("Pyfile17.med")
417         tsExpected=[[1,2],[3,4],[5,6]]
418         self.assertEqual(3,len(ff))
419         for pos,f1ts in enumerate(ff):
420             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
421             self.assertEqual(type(f1ts),MEDFileField1TS)
422             pass
423         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
424         self.assertEqual([3,4],ff[1].getTime()[:-1])
425         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
426         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
427         ff.write("Pyfile17_bis.med",0)
428         #
429         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
430         self.assertEqual([(1,2),(3,4),(5,6)],ts)
431         self.funcToTestDelItem(ff)
432         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
433         self.assertEqual([(1,2)],ts)
434         pass
435
436     #profiles
437     def testMEDField2(self):
438         mm=MEDFileMesh.New("Pyfile19.med")
439         mm.write("Pyfile19_bis.med",2)
440         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
441         ff.write("Pyfile19_bis.med",0)
442         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
443         pass
444
445     #gauss points
446     def testMEDField3(self):
447         mm=MEDFileMesh.New("Pyfile13.med")
448         mm.write("Pyfile13_bis.med",2)
449         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
450         ff.write("Pyfile13_bis.med",0)
451         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
452         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
453         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
454         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
455         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
456         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
457         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
458         ff4=MEDFileField1TS.New("Pyfile13.med")
459         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
460         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
461         pass
462
463     #gauss NE
464     def testMEDField4(self):
465         mm=MEDFileMesh.New("Pyfile14.med")
466         mm.write("Pyfile14_bis.med",2)
467         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
468         ff.write("Pyfile14_bis.med",0)
469         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
470         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
471         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
472         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
473         pass
474
475     # MEDField get/set on pointe.med
476     def testMEDField5(self):
477         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
478         f=ff.getFieldAtLevel(ON_CELLS,0)
479         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
480         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
481         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
482         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
483         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
484         # no with renumbering
485         f=ff.getFieldAtLevel(ON_CELLS,0,1)
486         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
487         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
488         f=ff.getFieldAtLevel(ON_CELLS,0,3)
489         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
490         f=ff.getFieldAtLevel(ON_CELLS,0,2)
491         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
492         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
493         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
494         pass
495
496     # MEDField get/set on profiles nodes
497     def testMEDField6(self):
498         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
499         its=ff.getIterations()
500         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
501         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
502         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
503         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
504         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
505         its=ff.getIterations()
506         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
507         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
508         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
509         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
510         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
511         pass
512
513     # MEDField get/set on profiles cells
514     def testMEDField7(self):
515         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
516         its=ff.getIterations()
517         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
518         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
519         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
520         pass
521
522     #first test of assignation. No profile and types sorted by type.
523     def testMEDField8(self):
524         fname="Pyfile25.med"
525         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
526         m1=f1.getMesh()
527         mm1=MEDFileUMesh.New()
528         mm1.setCoords(m1.getCoords())
529         mm1.setMeshAtLevel(0,m1)
530         mm1.setName(m1.getName())
531         mm1.write(fname,2)
532         ff1=MEDFileField1TS.New()
533         ff1.setFieldNoProfileSBT(f1)
534         ff1.write(fname,0)
535         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
536         itt,orr,ti=ff1.getTime()
537         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
538         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
539         ff1.setTime(3,4,2.3)
540         itt,orr,ti=ff1.getTime()
541         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
542         da,infos=ff1.getUndergroundDataArrayExt()
543         f2.getArray().setName(da.getName())#da has the same name than f2
544         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
545         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
546         #
547         fname="Pyfile26.med"
548         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
549         m1=f1.getMesh()
550         mm1=MEDFileUMesh.New()
551         mm1.setCoords(m1.getCoords())
552         mm1.setMeshAtLevel(0,m1)
553         mm1.setName(m1.getName())
554         mm1.write(fname,2)
555         ff1=MEDFileField1TS.New()
556         ff1.setFieldNoProfileSBT(f1)
557         nv=1456.
558         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
559         ff1.write(fname,0)
560         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
561         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
562         f1.getArray().setIJ(0,0,nv)
563         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
564         #
565         fname="Pyfile27.med"
566         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
567         m1=f1.getMesh()
568         mm1=MEDFileUMesh.New()
569         mm1.setCoords(m1.getCoords())
570         mm1.setMeshAtLevel(0,m1)
571         mm1.setName(m1.getName())
572         mm1.write(fname,2)
573         ff1=MEDFileField1TS.New()
574         ff1.setFieldNoProfileSBT(f1)
575         ff1.write(fname,0)
576         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
577         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
578         da,infos=ff1.getUndergroundDataArrayExt()
579         f2.getArray().setName(da.getName())#da has the same name than f2
580         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
581         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
582         #
583         fname="Pyfile28.med"
584         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
585         f1InvalidCpy=f1.deepCopy()
586         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
587         f1InvalidCpy2=f1.deepCopy()
588         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
589         m1=f1.getMesh()
590         mm1=MEDFileUMesh.New()
591         mm1.setCoords(m1.getCoords())
592         mm1.setMeshAtLevel(0,m1)
593         mm1.setName(m1.getName())
594         mm1.write(fname,2)
595         ff1=MEDFileField1TS.New()
596         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
597         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
598         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
599         ff1.setFieldNoProfileSBT(f1)
600         ff1.write(fname,0)
601         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
602         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
603         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
604         sbt=ff2.getFieldSplitedByType2()
605         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
606         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
607         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
608         self.assertEqual(6,loc1.getNumberOfPointsInCells())
609         self.assertEqual(3,loc1.getNumberOfGaussPoints())
610         self.assertEqual(2,loc1.getDimension())
611         da,infos=ff2.getUndergroundDataArrayExt()
612         f2.getArray().setName(da.getName())#da has the same name than f2
613         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
614         self.assertEqual(53,da.getNumberOfTuples())
615         self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
616         #
617         pass
618     
619     def testMEDFileData1(self):
620         fname="Pyfile29.med"
621         d=MEDFileData.New()
622         #
623         m1=MEDLoaderDataForTest.build1DMesh_1()
624         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
625         mmm1=MEDFileMeshMultiTS.New() ;
626         mmm1.setOneTimeStep(mm1)
627         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
628         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
629         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
630         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
631         d.setMeshes(ms)
632         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
633             self.assertEqual(name,mmm.getName())
634             self.assertEqual(type(mmm),MEDFileUMesh)
635             pass
636         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
637         #
638         ff1=MEDFileFieldMultiTS.New()
639         ff21=MEDFileFieldMultiTS.New()
640         ff22=MEDFileFieldMultiTS.New()
641         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
642         f1.getArray().setInfoOnComponent(0,"power [kW]")
643         ff1.appendFieldNoProfileSBT(f1)
644         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
645         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
646         ff21.appendFieldNoProfileSBT(f21)
647         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
648         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
649         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
650         ff22.appendFieldNoProfileSBT(f22)
651         fs=MEDFileFields.New()
652         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
653         for name,fmts in zip(["f1","f21","f22"],fs):
654             self.assertEqual(name,fmts.getName())
655             pass
656         d.setFields(fs)
657         #
658         fname2="Pyfile29_2.med"
659         d.write(fname2,2)
660         #
661         d2=MEDFileData.New(fname2)
662         self.assertEqual(2,d2.getNumberOfMeshes())
663         self.assertEqual(3,d2.getNumberOfFields())
664         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
665         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
666         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
667         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
668         self.assertTrue(m1.isEqual(m1bis,1e-12))
669         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
670         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
671         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
672         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
673         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
674         pass
675     
676     def testMEDField9(self):
677         # first test field profile WR. Full type but with some type missing
678         fname="Pyfile30.med"
679         m1=MEDLoaderDataForTest.build2DMesh_3()
680         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
681         mm1.write(fname,2)
682         ff1=MEDFileField1TS.New()
683         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
684         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
685         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
686         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
687         #
688         ff1.setFieldProfile(f1,mm1,0,da)
689         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
690         ff1=ff1.deepCopy()
691         ff1.write(fname,0)
692         #
693         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
694         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
695         self.assertTrue(vals.isEqual(d,1e-14))
696         #
697         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
698         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
699         ff2.deepCpyGlobs(ff3)
700         sbt=ff2.getFieldSplitedByType2()
701         self.assertEqual(3,sbt[0][0])#TRI3
702         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
703         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
704         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
705         self.assertEqual(4,sbt[1][0])#QUAD4
706         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
707         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
708         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
709         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
710         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
711         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
712         self.assertTrue(vals.isEqual(d,1e-14))
713         pass
714     
715     def testMEDField10(self):
716         fname="Pyfile31.med"
717         m1=MEDLoaderDataForTest.build2DMesh_1()
718         m1.renumberCells([0,1,4,2,3,5],False)
719         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
720         mm1.write(fname,2)
721         ff1=MEDFileFieldMultiTS.New()
722         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
723         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
724         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
725         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
726         #
727         ff1.appendFieldProfile(f1,mm1,0,da)
728         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
729         ff1.appendFieldProfile(f1,mm1,0,da)
730         ff1=ff1.deepCopy()
731         ff1.write(fname,0)
732         #
733         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
734         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
735         self.assertTrue(vals.isEqual(e,1e-14))
736         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
737         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
738         self.assertTrue(vals.isEqual(d,1e-14))
739         #
740         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
741         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
742         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
743         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
744         self.assertTrue(vals.isEqual(e,1e-14))
745         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
746         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
747         self.assertTrue(vals.isEqual(d,1e-14))
748         pass
749     
750     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
751     def testMEDField11(self):
752         fname="Pyfile32.med"
753         m1=MEDLoaderDataForTest.build2DMesh_1()
754         m1.renumberCells([0,1,4,2,3,5],False)
755         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
756         mm1.write(fname,2)
757         ff1=MEDFileField1TS.New()
758         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
759         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
760         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
761         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
762         #
763         ff1.setFieldProfile(f1,mm1,0,da)
764         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
765         ff1.write(fname,0)
766         #
767         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
768         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
769         self.assertTrue(vals.isEqual(d,1e-14))
770         ## #
771         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
773         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
774         self.assertTrue(vals.isEqual(d,1e-14))
775         pass
776
777     def testMEDField12(self):
778         fname="Pyfile33.med"
779         m1=MEDLoaderDataForTest.build2DMesh_1()
780         m1.renumberCells([0,1,4,2,3,5],False)
781         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
782         mm1.write(fname,2)
783         ff1=MEDFileFieldMultiTS.New()
784         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
785         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
786         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
787         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
788         #
789         ff1.appendFieldProfile(f1,mm1,0,da)
790         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
791         ff1.appendFieldProfile(f1,mm1,0,da)
792         ff1.write(fname,0)
793         #
794         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
795         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
796         self.assertTrue(vals.isEqual(e,1e-14))
797         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
798         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
799         self.assertTrue(vals.isEqual(d,1e-14))
800         #
801         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
802         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
803         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
804         self.assertTrue(vals.isEqual(e,1e-14))
805         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
806         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
807         self.assertTrue(vals.isEqual(d,1e-14))
808         pass
809
810     def testMEDField13(self):
811         fname="Pyfile34.med"
812         m1=MEDLoaderDataForTest.build2DMesh_1()
813         m1.renumberCells([0,1,4,2,3,5],False)
814         tmp=m1.getName();
815         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
816         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
817         mm1.write(fname,2)
818         ff1=MEDFileField1TS.New()
819         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
820         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
821         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
822         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
823         #
824         ff1.setFieldProfile(f1,mm1,0,da)
825         ff1.write(fname,0)
826         #
827         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
828         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
829         self.assertTrue(vals.isEqual(d,1e-14))
830         #
831         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
832         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
833         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
834         self.assertTrue(vals.isEqual(d,1e-14))
835         pass
836
837     def testMEDField14(self):
838         fname="Pyfile35.med"
839         m1=MEDLoaderDataForTest.build2DMesh_1()
840         m1.renumberCells([0,1,4,2,3,5],False)
841         tmp=m1.getName();
842         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
843         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
844         mm1.write(fname,2)
845         ff1=MEDFileFieldMultiTS.New()
846         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
847         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
848         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
849         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
850         #
851         ff1.appendFieldProfile(f1,mm1,0,da)
852         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
853         ff1.appendFieldProfile(f1,mm1,0,da)
854         ff1.write(fname,0)
855         #
856         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
857         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
858         self.assertTrue(vals.isEqual(d,1e-14))
859         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
860         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
861         self.assertTrue(vals.isEqual(e,1e-14))
862         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
863         #
864         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
865         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
866         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
867         self.assertTrue(vals.isEqual(d,1e-14))
868         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
869         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
870         self.assertTrue(vals.isEqual(e,1e-14))
871         pass
872     # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
873     # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
874     # for the necessity of the test ! The idea is too create artificially a mesh having one more fictious cell per type and to roll back right after !
875     def testMEDField15(self):
876         fname="Pyfile36.med"
877         m0=MEDLoaderDataForTest.build2DMesh_1()
878         m0.renumberCells([0,1,4,2,3,5],False)
879         tmp=m0.getName();
880         m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
881         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
882         ff1=MEDFileField1TS.New()
883         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
884         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
885         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
886         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
887         #
888         ff1.setFieldProfile(f1,mm1,0,da)
889         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
890         mm1.write(fname,2)
891         ff1.write(fname,0)
892         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
893         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
894         self.assertTrue(p1.isIota(5))
895         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
896         pass
897     # Test for getFieldAtTopLevel method
898     def testMEDField16(self):
899         fname="Pyfile37.med"
900         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
901         m1=f1.getMesh()
902         mm1=MEDFileUMesh.New()
903         mm1.setCoords(m1.getCoords())
904         mm1.setMeshAtLevel(0,m1)
905         mm1.setName(m1.getName())
906         ff1=MEDFileField1TS.New()
907         ff1.setFieldNoProfileSBT(f1)
908         m2=m1.buildDescendingConnectivity()[0]
909         m2.sortCellsInMEDFileFrmt()
910         m2.setName(m1.getName())
911         mm1.setMeshAtLevel(-1,m2)
912         mm1.write(fname,2)
913         f2=m2.getMeasureField(True)
914         dd=DataArrayDouble.New()
915         dd.alloc(f2.getArray().getNumberOfTuples(),3)
916         dd[:,0]=f2.getArray()
917         dd[:,1]=2*f2.getArray()
918         dd[:,2]=3*f2.getArray()
919         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
920         f2.setArray(dd)
921         f2.copyTinyStringsFrom(f1)
922         f2.copyTinyAttrFrom(f1)
923         ff1.setFieldNoProfileSBT(f2)
924         ff1.write(fname,0)
925         # Reading Pyfile37.med
926         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
927         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
928         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
929         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
930         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
931         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
932         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
933         # More complex
934         fname="Pyfile38.med"
935         mm1.write(fname,2)
936         ff1=MEDFileField1TS.New()
937         ff1.setFieldNoProfileSBT(f2)
938         ff1.write(fname,0)
939         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
940         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
941         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
942         pass
943
944     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
945     def testMEDField17(self):
946         fname="Pyfile39.med"
947         m1=MEDLoaderDataForTest.build2DMesh_1()
948         m1.renumberCells([0,1,4,2,3,5],False)
949         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
950         mm1.write(fname,2)
951         ffs=MEDFileFields.New()
952         ff1=MEDFileFieldMultiTS.New()
953         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
954         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
955         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
956         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
957         #
958         ff1.appendFieldProfile(f1,mm1,0,da)
959         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
960         ff1.appendFieldProfile(f1,mm1,0,da)
961         ffs.resize(1)
962         ffs.setFieldAtPos(0,ff1)
963         ffs=ffs.deepCopy()
964         ffs.write(fname,0)
965         #
966         ffsr=MEDFileFields.New(fname)
967         ff3=ffsr.getFieldAtPos(0)
968         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
969         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
970         pass
971
972     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
973     def testMEDField18(self):
974         fname="Pyfile40.med"
975         m1=MEDLoaderDataForTest.build2DMesh_1()
976         m1.renumberCells([0,1,4,2,3,5],False)
977         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
978         mm1.write(fname,2)
979         ffs=MEDFileFields.New()
980         ff1=MEDFileFieldMultiTS.New()
981         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
982         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
983         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
984         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
985         #
986         ff1.appendFieldProfile(f1,mm1,0,da)
987         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
988         ff1.appendFieldProfile(f1,mm1,0,da)
989         ffs.pushField(ff1)
990         ffs.write(fname,0)
991         #
992         ffsr=MEDFileFields.New(fname)
993         ff3=ffsr.getFieldAtPos(0)
994         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
995         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
996         pass
997
998     def testMEDFieldBug1(self):
999         fname="Pyfile13.med"
1000         d=MEDFileData.New(fname)
1001         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1002         pass
1003
1004     def testMEDMesh8(self):
1005         m=MEDLoaderDataForTest.build1DMesh_1()
1006         m.convertQuadraticCellsToLinear()
1007         mm=MEDFileUMesh.New()
1008         mm.setMeshAtLevel(0,m)
1009         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1010         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1011         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1012         mm.setGroupsAtLevel(0,[g1,g2],False)
1013         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1014         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1015         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1016         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1017         mm.assignFamilyNameWithGroupName()
1018         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1019         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1020         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1021         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1022         #
1023         mm=MEDFileUMesh.New()
1024         mm.setMeshAtLevel(0,m)
1025         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1026         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1027         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1028         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1029         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1030         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1031         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1032         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1033         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1034         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1035         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1036         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1037         mm.changeFamilyId(5,6)
1038         g=mm.getGroupArr(0,"g3")
1039         self.assertTrue(g.isEqual(g3));
1040         g=mm.getGroupArr(0,"g2")
1041         self.assertTrue(g.isEqual(g2));
1042         g=mm.getGroupArr(0,"g1")
1043         self.assertTrue(g.isEqual(g1));
1044         pass
1045     
1046     # bug detected by gauthier
1047     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1048         fname="Pyfile41.med"
1049         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1050         m1=f1.getMesh()
1051         mm1=MEDFileUMesh.New()
1052         mm1.setCoords(m1.getCoords())
1053         mm1.setMeshAtLevel(0,m1)
1054         mm1.write(fname,2)
1055         ff1=MEDFileField1TS.New()
1056         ff1.setFieldNoProfileSBT(f1)
1057         ff1.write(fname,0)
1058         # writing mesh1 and field1, now creation of mesh2 and field2
1059         f2=f1.deepCopy()
1060         m2=f2.getMesh()
1061         m2.translate([0.5,0.6,0.7])
1062         m2.setName("3DSurfMesh_2")
1063         f2.getArray()[:]*=2.
1064         f2.setName("VectorFieldOnCells2")
1065         mm2=MEDFileUMesh.New()
1066         mm2.setCoords(m2.getCoords())
1067         mm2.setMeshAtLevel(0,m2)
1068         mm2.write(fname,0)
1069         ff2=MEDFileField1TS.New()
1070         ff2.setFieldNoProfileSBT(f2)
1071         ff2.write(fname,0)
1072         #
1073         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1074         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1075         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1076         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1077         pass
1078
1079     def testMEDLoaderMultiLevelCellField1(self):
1080         fname="Pyfile42.med"
1081         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1082         m=MEDFileUMesh.New()
1083         m.setCoords(m2.getCoords())
1084         m.setMeshAtLevel(0,m2)
1085         m.setMeshAtLevel(-1,m1)
1086         m.setMeshAtLevel(-2,m0)
1087         m.write(fname,2)
1088         #
1089         FieldName1="Field1"
1090         compNames1=["comp1","comp2","comp3"]
1091         ff1=MEDFileField1TS.New()
1092         da2=DataArrayDouble.New()
1093         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1094         da2.iota(7.)
1095         da2.rearrange(len(compNames1))
1096         da2.setInfoOnComponents(compNames1)
1097         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1098         ff1.setFieldNoProfileSBT(f2)
1099         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1100         da0=DataArrayDouble.New()
1101         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1102         da0.iota(190.)
1103         da0.rearrange(len(compNames1))
1104         da0.setInfoOnComponents(compNames1)
1105         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1106         ff1.setFieldNoProfileSBT(f0)
1107         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1108         da1=DataArrayDouble.New()
1109         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1110         da1.iota(90.)
1111         da1.rearrange(len(compNames1))
1112         da1.setInfoOnComponents(compNames1)
1113         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1114         ff1.setFieldNoProfileSBT(f1)
1115         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1116         #
1117         ff1.write(fname,0)
1118         #
1119         FieldName2="Field2"
1120         compNames2=["comp11","comp22"]
1121         ff2=MEDFileField1TS.New()
1122         da0=DataArrayDouble.New()
1123         da0.alloc(m0.getNumberOfCells()*2,1)
1124         da0.iota(-190.)
1125         da0.rearrange(2)
1126         da0.setInfoOnComponents(compNames2)
1127         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1128         ff2.setFieldNoProfileSBT(f0)
1129         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1130         da1=DataArrayDouble.New()
1131         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1132         da1.iota(-90.)
1133         da1.rearrange(len(compNames2))
1134         da1.setInfoOnComponents(compNames2)
1135         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1136         ff2.setFieldNoProfileSBT(f1)
1137         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1138         #
1139         ff2.write(fname,0)
1140         #
1141         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1142         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1143         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1144         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1145         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1146         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1147         pass
1148
1149     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1150         fname="Pyfile43.med"
1151         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1152         m=MEDFileUMesh.New()
1153         m.setMeshAtLevel(0,m2)
1154         m.setMeshAtLevel(-1,m1)
1155         m.setMeshAtLevel(-2,m0)
1156         f=MEDFileField1TS.New()
1157         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1158         ff.setName("NodeFieldPfl")
1159         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1160         ff.setArray(arr)
1161         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1162         f.setFieldProfile(ff,m,-2,pfl)
1163         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1164         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1165         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1166         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1167         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1168         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1169         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1170         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1171         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1172         expected1=[1.,10.,100.,2.,20.,200.]
1173         nodeCoordsWithValue1=[10.,2.5,0.]
1174         nodeCoordsWithValue2=[10.,3.75,0.]
1175         for i in xrange(3):
1176             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1177             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1178             pass
1179         for i in xrange(6):
1180             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1181             pass
1182         del tes0
1183         #
1184         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1185         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1186         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1187         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1188         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1189         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1190         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1191         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1192         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1193         for i in xrange(6):
1194             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1195             pass
1196         m.write(fname,2)
1197         f.write(fname,0)
1198         #
1199         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1200         f=MEDFileField1TS.New()
1201         f.setFieldProfile(ff,m,-2,pfl)
1202         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1203         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1204         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1205         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1206         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1207         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1208         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1209         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1210         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1211         expected2=[2.,20.,200.,1.,10.,100.]
1212         for i in xrange(3):
1213             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1214             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1215             pass
1216         for i in xrange(6):
1217             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1218             pass
1219         #
1220         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1221         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1222         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1223         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1224         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1225         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1226         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1227         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1228         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1229         for i in xrange(6):
1230             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1231             pass
1232         pass
1233
1234     def testBuildInnerBoundaryAlongM1Group1(self):
1235         fname="Pyfile44.med"
1236         m=MEDCouplingCMesh.New()
1237         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1238         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1239         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1240         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1241         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1242         m2.setName(m.getName())
1243         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1244         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1245         mm=MEDFileUMesh.New()
1246         mm.setMeshAtLevel(0,m)
1247         mm.setMeshAtLevel(-1,m2)
1248         mm.setGroupsAtLevel(-1,[grp,grp2])
1249         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1250         mm.setGroupsAtLevel(1,[grpNode])
1251         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1252         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1253         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1254         #
1255         self.assertEqual(30,mm.getNumberOfNodes())
1256         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1257         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1258         #
1259         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1260         self.assertEqual([15,16,17],nodes.getValues());
1261         self.assertEqual([7,8,9],cells.getValues());
1262         self.assertEqual([12,13,14],cells2.getValues());
1263         self.assertEqual(33,mm.getNumberOfNodes())
1264         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1265         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1266         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1267         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1268         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1269         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1270         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1271         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1272         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1273         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1274         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1275         #
1276         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1277         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1278         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1279         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1280         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1281         mm.write(fname,2)
1282         pass
1283
1284     def testBuildInnerBoundaryAlongM1Group2(self):
1285         fname="Pyfile45.med"
1286         m=MEDCouplingCMesh.New()
1287         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1288         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1289         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1290         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1291         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1292         m2.setName(m.getName())
1293         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1294         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1295         mm=MEDFileUMesh.New()
1296         mm.setMeshAtLevel(0,m)
1297         mm.setMeshAtLevel(-1,m2)
1298         mm.setGroupsAtLevel(-1,[grp,grp2])
1299         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1300         mm.setGroupsAtLevel(1,[grpNode])
1301         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1302         ref1=[4,9,8,14,15,4,10,9,15,16]
1303         ref2=[4,9,8,14,30,4,10,9,30,16]
1304         #
1305         self.assertEqual(30,mm.getNumberOfNodes())
1306         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1307         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1308         #
1309         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1310         self.assertEqual([15],nodes.getValues());
1311         self.assertEqual([7,8],cells.getValues());
1312         self.assertEqual([12,13],cells2.getValues());
1313         self.assertEqual(31,mm.getNumberOfNodes())
1314         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1315         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1316         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1317         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1318         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1319         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1320         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1321         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1322         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1323         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1324         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1325         #
1326         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1327         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1328         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1329         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1330         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1331         mm.write(fname,2)       
1332         pass
1333
1334     def testBuildInnerBoundaryAlongM1Group3(self):
1335         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1336         fname = "Pyfile73.med"
1337         m = MEDCouplingCMesh.New()
1338         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1339         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1340         m = m.buildUnstructured(); m.setName("simple")
1341         m2 = m.buildDescendingConnectivity()[0]
1342         m2.setName(m.getName())
1343             
1344         # A crack in two non connected parts of the mesh:
1345         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp") 
1346
1347         mm = MEDFileUMesh.New()
1348         mm.setMeshAtLevel(0,m)
1349         mm.setMeshAtLevel(-1,m2)
1350         mm.setGroupsAtLevel(-1,[grpSeg])
1351         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1352         self.assertEqual([1,13],nodes.getValues());
1353         self.assertEqual([0,6],cellsMod.getValues());
1354         self.assertEqual([1,7],cellsNotMod.getValues());
1355         self.assertEqual(17,mm.getNumberOfNodes())
1356         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1357         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1358         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1359         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1360         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1361         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1362         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1363         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1364
1365         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1366         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1367         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1368         #
1369         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1370         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1371         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1372         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1373         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1374         mm.write(fname,2)   
1375
1376     def testBuildInnerBoundaryAlongM1Group4(self):
1377         """ Test case where cells touch the M1 group on some nodes only and not on full egdes (triangle mesh for ex)
1378         """
1379         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1380                                0.,1., 1.,1., 2.,1., 3.,1.,
1381                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1382         conn = [3,0,4,1,  3,1,4,5,
1383                 3,5,9,10, 3,5,10,6,
1384                 3,2,6,7,  3,2,7,3,
1385                 3,4,8,9,  3,4,9,5,
1386                 3,1,5,6,  3,1,6,2,
1387                 3,6,10,11,3,6,11,7]
1388         # Only TRI3:
1389         connI = DataArrayInt()
1390         connI.alloc(13, 1); connI.iota(); connI *= 4
1391         m2 = MEDCouplingUMesh("2D", 2)
1392         m2.setCoords(coo)
1393         m2.setConnectivity(DataArrayInt(conn), connI)
1394         m2.checkConsistency()
1395         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1396         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1397         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1398         mfu = MEDFileUMesh()
1399         mfu.setMeshAtLevel(0, m2)
1400         mfu.setMeshAtLevel(-1, m1)
1401         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1402         nNod = m2.getNumberOfNodes()
1403         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1404         m2_bis = mfu.getMeshAtLevel(0)
1405         m2_bis.checkConsistency()
1406         m1_bis = mfu.getMeshAtLevel(-1)
1407         m1_bis.checkConsistency()
1408         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1409         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1410         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1411         self.assertEqual([6,7], nodesDup.getValues())
1412         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1413         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1414         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1415         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1416         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1417         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1418 #         mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1419         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1420         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1421         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1422         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1423         self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1424         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1425         m_bis0 = mfu.getMeshAtLevel(-1)
1426         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1427         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1428
1429     def testBuildInnerBoundary5(self):
1430         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1431         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1432         coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
1433         200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1434          200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546, 
1435          200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538, 
1436          0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483, 
1437          200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082, 
1438          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1439          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015, 
1440          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784, 
1441          97.16750463405486, 97.18018457127863], 46, 3)
1442         c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1443          39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1444          21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1445          14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1446          17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1447          24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1448          44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1449          44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1450          29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1451          21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1452          30, 2]
1453         cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1454          190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 
1455          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1456         m3 = MEDCouplingUMesh("3D", 3)
1457         m3.setCoords(coo)
1458         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1459         m3.checkConsistency()
1460         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1461         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1462         mfu = MEDFileUMesh()
1463         mfu.setMeshAtLevel(0, m3)
1464         mfu.setMeshAtLevel(-1, m2)
1465         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1466         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1467         mfu.setGroupsAtLevel(-1, [grpIds])
1468         nNod = m3.getNumberOfNodes()
1469         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1470         m3_bis = mfu.getMeshAtLevel(0)
1471         m3_bis.checkConsistency()
1472         m2_bis = mfu.getMeshAtLevel(-1)
1473         m2_bis.checkConsistency()
1474         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1475         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1476         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1477         self.assertEqual([3], nodesDup.getValues())
1478         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1479         self.assertEqual(set([22]), set(cells1.getValues()))
1480         self.assertEqual(set([77]), set(cells2.getValues()))
1481         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1482         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1483         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1484         m_bis0 = mfu.getMeshAtLevel(-1)
1485         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1486         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1487         pass
1488
1489     def testBasicConstructors(self):
1490         fname="Pyfile18.med"
1491         m=MEDFileMesh.New(fname)
1492         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1493         m=MEDFileMesh.New(fname)
1494         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1495         m=MEDFileUMesh(fname)
1496         m=MEDFileUMesh()
1497         self.testMEDMesh6()
1498         m=MEDFileCMesh("MEDFileMesh5.med")
1499         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1500         m=MEDFileCMesh()
1501         m=MEDFileMeshMultiTS()
1502         m=MEDFileMeshMultiTS(fname)
1503         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1504         m=MEDFileMeshes()
1505         m=MEDFileMeshes(fname)
1506         m=MEDFileField1TS()
1507         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1508         m=MEDFileFieldMultiTS()
1509         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1510         m=MEDFileFields()
1511         m=MEDFileFields(fname)
1512         m=MEDFileData()
1513         m=MEDFileData(fname)
1514         #
1515         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1516         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1517         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1518         m=MEDCouplingCMesh()
1519         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1520         m=MEDCouplingFieldTemplate(ON_NODES)
1521         m=MEDCouplingMultiFields([])
1522         m=MEDCouplingFieldOverTime([])
1523         pass
1524
1525     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1526     def testBugSemiPartialField(self):
1527         fname="Pyfile46.med"
1528         m=MEDLoaderDataForTest.build2DMesh_3()
1529         m=m[:10] ; m.setName("mesh")
1530         f=m.getMeasureField(ON_CELLS)
1531         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1532         f.setTime(5.5,3,4)
1533         f.setName("SemiPartialField")
1534         #
1535         f1=f[:6] ; f1.getMesh().setName(m.getName())
1536         f2=f[6:] ; f2.getMesh().setName(m.getName())
1537         #
1538         mm=MEDFileUMesh.New()
1539         mm.setMeshAtLevel(0,m)
1540         ff=MEDFileField1TS.New()
1541         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1542         mm.write(fname,2)
1543         ff.write(fname,0)
1544         #
1545         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1546         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1547         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1548         #
1549         fread.checkConsistencyLight()
1550         fread2.checkConsistencyLight()
1551         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1552         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1553         pass
1554
1555     def testUnPolyze1(self):
1556         fname="Pyfile47.med"
1557         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1558         ref=[13,14,14,12,12,12,12,12,12,12,12,13,12,14,14,13,15,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
1559         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1560         self.assertEqual(mm.unPolyze()[:3],(True,[[3,2,0],[4,3,2],[5,4,5],[14,2,9],[16,3,11],[31,2,14]],[[3,3,0],[4,3,3],[5,3,6],[14,3,9],[16,3,12],[18,1,15]]))
1561         mm.write(fname,2)
1562         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1563         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1564         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1565         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1566         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1567         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1568         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1569         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1570         # to test
1571         mm.setRenumFieldArr(0,None)
1572         mm.setFamilyFieldArr(-1,None)
1573         pass
1574
1575     def testUnPolyze2(self):
1576         fname="Pyfile48.med"
1577         mfd=MEDFileData.New()
1578         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1579         meshes=MEDFileMeshes.New()
1580         meshes.pushMesh(mm)
1581         mfd.setMeshes(meshes)
1582         fields=MEDFileFields.New()
1583         mfd.setFields(fields)
1584         ff=MEDFileFieldMultiTS.New()
1585         fields.pushField(ff)
1586         #
1587         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1588         f0_0.setTime(9.5,3,4)
1589         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1590         f0_0.setArray(da)
1591         f0_0.setMesh(mm.getMeshAtLevel(0))
1592         ff.appendFieldNoProfileSBT(f0_0)
1593         ff0=ff.getTimeStepAtPos(0)
1594         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1595         f0_1.setTime(9.5,3,4)
1596         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1597         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1598         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1599         f0_1.setArray(da)
1600         ff0.setFieldProfile(f0_1,mm,0,pfl)
1601         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1602         f0_2.setTime(9.5,3,4)
1603         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1604         da=DataArrayDouble.New([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.],8,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])#provoquer error
1605         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1606         f0_2.setArray(da)
1607         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1608         mfd.getFields().shallowCpyGlobs(ff0)
1609         #
1610         mfd.unPolyzeMeshes()
1611         #
1612         fmts=mfd.getFields()[0]
1613         self.assertEqual(fmts.getNumberOfTS(),1)
1614         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1615         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1616         self.assertEqual(entry,[((3,0),(38,40)),((4,0),(40,43)),((5,0),(43,46)),((14,0),(46,48)),((16,0),(48,49)),((18,0),(49,50)),((40,0),(0,38))])
1617         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1618         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1619         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1620         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1621         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1622         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1623         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1624         self.assertEqual([(3,[(0,(38,40),'NewPfl_0','')]),(4,[(0,(40,43),'','')]),(5,[(0,(43,46),'','')]),(14,[(0,(46,48),'NewPfl_1','')]),(16,[(0,(48,49),'NewPfl_2','')]),(18,[(0,(49,50),'','')]),(40,[(1,(0,38),'','')])],fmts.getFieldSplitedByType(3,4))
1625         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1626         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1627         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1628         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1629         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1630         self.assertEqual(ftest0.getMesh().getNodalConnectivity().getValues(),[14,4,5,6,7,14,26,27,28,29,16,20,21,22,23,24,25,18,30,31,32,33,34,35,36,37])
1631         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1632         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1633         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1634         self.assertEqual(ftest1.getMesh().getNodalConnectivity().getValues(),[3,0,1,2,3,3,4,5,4,6,7,8,9,4,10,11,12,13,4,14,15,16,17,5,18,19,20,21,22,5,23,24,25,26,27,5,31,32,33,34,35,36,37])
1635         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1636         #
1637         mfd.write(fname,2)
1638         pass
1639
1640     def testGaussWriteOnPfl1(self):
1641         fname="Pyfile49.med"
1642         fname2="Pyfile50.med"
1643         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1644         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1645         mQ8.allocateCells(1)
1646         mQ8.insertNextCell(NORM_QUAD8,range(8))
1647         mQ8.finishInsertingCells()
1648         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1649         mQ4.allocateCells(1)
1650         mQ4.insertNextCell(NORM_QUAD4,range(4))
1651         mQ4.finishInsertingCells()
1652         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1653         mT3.allocateCells(1)
1654         mT3.insertNextCell(NORM_TRI3,range(3))
1655         mT3.finishInsertingCells()
1656         
1657         tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]]
1658         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1659         ms[:]=(elt.deepCopy() for elt in ms)
1660         for m,t in zip(ms,tr):
1661             d=m.getCoords() ; d+= t
1662             pass
1663         m=MEDCouplingUMesh.MergeUMeshes(ms)
1664         m.setName("mesh")
1665         m2=m[:13] ; m2.setName(m.getName())
1666         ### Use case 1 : Pfl on all tri3 and on all quad4. If we were on CELLS or GAUSS_NE no pfl were needed. But here 2 discs in tri3.
1667         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1668         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1669         f.setMesh(m2)
1670         f.setTime(4.5,1,2)
1671         da=DataArrayDouble(34) ; da.iota(3.)
1672         f.setArray(da)
1673         f.setName("fieldCellOnPflWithoutPfl")
1674         fInvalid=f.deepCopy()
1675         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1676         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1677         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1678         f.checkConsistencyLight()
1679         fInvalid2=fInvalid.deepCopy()
1680         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1681         #
1682         mm=MEDFileUMesh()
1683         mm.setMeshAtLevel(0,m)
1684         mm.write(fname,2)
1685         #
1686         f1ts=MEDFileField1TS.New()
1687         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1688         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1689         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1690         f1ts.setFieldProfile(f,mm,0,pfl)
1691         f1ts.write(fname,0)
1692         #
1693         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1694         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1695         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1696         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1697         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1698         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1699         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1700         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1701         #
1702         dataRead=MEDFileData.New(fname)
1703         mRead=dataRead.getMeshes()[0]
1704         f1tsRead=dataRead.getFields()[0][0]
1705         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1706         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1707         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1708         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1709         f2_bis.checkConsistencyLight()
1710         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1711         #
1712         WriteField(fname2,f,True)
1713         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1714         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1715         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1716         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1717         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1718         m2=m[pfl] ; m2.setName(m.getName())
1719         f.setMesh(m2)
1720         f.setTime(4.5,1,2)
1721         da=DataArrayDouble(35) ; da.iota(3.)
1722         f.setArray(da)
1723         f.setName("fieldCellOnPflWithoutPfl2")
1724         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1725         f.setGaussLocalizationOnCells([2,4,5],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1726         f.setGaussLocalizationOnCells([6,7,8,9],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1727         f.checkConsistencyLight()
1728         #
1729         mm=MEDFileUMesh()
1730         mm.setMeshAtLevel(0,m)
1731         mm.write(fname,2)
1732         f1ts=MEDFileField1TS.New()
1733         f1ts.setFieldProfile(f,mm,0,pfl)
1734         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1735         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1736         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1737         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1738         f1ts.write(fname,0)
1739         dataRead=MEDFileData.New(fname)
1740         mRead=dataRead.getMeshes()[0]
1741         f1tsRead=dataRead.getFields()[0][0]
1742         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1743         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1744         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1745         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1746         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1747         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1748         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1749         #
1750         WriteField(fname2,f,True)
1751         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1752         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1753         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1754         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1755         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1756         f.setMesh(m)
1757         f.setTime(4.5,1,2)
1758         da=DataArrayDouble(60) ; da.iota(3.)
1759         f.setArray(da)
1760         f.setName("fieldCellWithoutPfl")
1761         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1762         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1763         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1764         f.setGaussLocalizationOnCells([13,14,15,17,18],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8],[0.8,0.1,0.03,0.07])
1765         f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1])
1766         f.checkConsistencyLight()
1767         mm=MEDFileUMesh()
1768         mm.setMeshAtLevel(0,m) 
1769         f1ts=MEDFileField1TS.New()
1770         f1ts.setFieldNoProfileSBT(f)
1771         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1772         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1773         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1774         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1775         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1776         mm.write(fname,2)
1777         f1ts.write(fname,0)
1778         #
1779         dataRead=MEDFileData.New(fname)
1780         mRead=dataRead.getMeshes()[0]
1781         f1tsRead=dataRead.getFields()[0][0]
1782         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1783         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1784         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1785         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1786         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1787         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1788         #
1789         WriteField(fname2,f,True)
1790         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1791         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1792         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1793         pass
1794
1795     # Testing profile on nodes when the profile is identity but not on all nodes.
1796     def testMEDFieldPflOnNode1(self):
1797         fname="Pyfile51.med"
1798         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
1799         m0=MEDCouplingUMesh("Mesh",2)
1800         m0.allocateCells(5)
1801         m0.insertNextCell(NORM_TRI3,[1,4,2])
1802         m0.insertNextCell(NORM_TRI3,[4,5,2])
1803         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1804         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1805         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1806         m0.finishInsertingCells()
1807         m0.setCoords(coo)
1808         m1=MEDCouplingUMesh(m0.getName(),1)
1809         m1.allocateCells(9)
1810         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1811         for i in xrange(9):
1812             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1813             pass
1814         m1.finishInsertingCells()
1815         m1.setCoords(coo)
1816         #
1817         m=MEDFileUMesh()
1818         m.setMeshAtLevel(0,m0)
1819         m.setMeshAtLevel(-1,m1)
1820         #
1821         dt=3 ; it=2 ; tim=4.5
1822         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1823         fieldNode0.setName("fieldNode0")
1824         fieldNode0.setTime(tim,dt,it)
1825         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1826         arr=DataArrayDouble([10,11,12,13,14])
1827         fieldNode0.setArray(arr)
1828         f0=MEDFileField1TS()
1829         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1830         m.write(fname,2) ; f0.write(fname,0)
1831         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1832         fieldNode1.setName("fieldNode1")
1833         fieldNode1.setTime(tim,dt,it)
1834         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1835         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1836         fieldNode1.setArray(arr1)
1837         f1=MEDFileField1TS()
1838         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1839         f1.write(fname,0)
1840         del m,f0,m0,m1,f1
1841         ## Reading from file
1842         m=MEDFileMesh.New(fname)
1843         m0=m.getMeshAtLevel(0)
1844         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1845         fieldNode0.setMesh(m00)
1846         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1847         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1848         ff0_1.checkConsistencyLight()
1849         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1850         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1851         ff0_2.checkConsistencyLight()
1852         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1853         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1854         ff0_3.checkConsistencyLight()
1855         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1856         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1857         ff0_4.checkConsistencyLight()
1858         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1859         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1860         m1=m.getMeshAtLevel(-1)
1861         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1862         fieldNode1.setMesh(m10)
1863         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1864         ff1_1.checkConsistencyLight()
1865         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1866         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1867         ff1_2.checkConsistencyLight()
1868         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1869         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1870         ff1_3.checkConsistencyLight()
1871         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1872         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1873         ff1_4.checkConsistencyLight()
1874         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1875         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,m0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
1876         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_NODES,0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
1877         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,0,m) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
1878         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1879         arr_r.setName(fieldNode1.getArray().getName())
1880         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1881         pfl1_r.setName(pfl1.getName())
1882         self.assertTrue(pfl1_r.isEqual(pfl1))
1883         pass
1884     
1885         # Testing profile on nodes when the profile is identity but not on all nodes.
1886     def testMEDFieldPflOnCell1(self):
1887         fname="Pyfile52.med"
1888         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
1889         m0=MEDCouplingUMesh("Mesh",2)
1890         m0.allocateCells(5)
1891         m0.insertNextCell(NORM_TRI3,[1,4,2])
1892         m0.insertNextCell(NORM_TRI3,[4,5,2])
1893         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1894         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1895         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1896         m0.finishInsertingCells()
1897         m0.setCoords(coo)
1898         m1=MEDCouplingUMesh(m0.getName(),1)
1899         m1.allocateCells(9)
1900         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1901         for i in xrange(9):
1902             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1903             pass
1904         m1.finishInsertingCells()
1905         m1.setCoords(coo)
1906         #
1907         m=MEDFileUMesh()
1908         m.setMeshAtLevel(0,m0)
1909         m.setMeshAtLevel(-1,m1)
1910         #
1911         dt=3 ; it=2 ; tim=4.5
1912         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1913         fieldCell0.setName("fieldCell0")
1914         fieldCell0.setTime(tim,dt,it)
1915         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1916         arr=DataArrayDouble([10,11,12])
1917         fieldCell0.setArray(arr)
1918         f0=MEDFileField1TS()
1919         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1920         m.write(fname,2) ; f0.write(fname,0)
1921         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1922         fieldCell1.setName("fieldCell1")
1923         fieldCell1.setTime(tim,dt,it)
1924         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1925         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1926         fieldCell1.setArray(arr1)
1927         f1=MEDFileField1TS()
1928         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1929         f1.write(fname,0)
1930         del m,f0,m0,m1,f1
1931         ## Reading from file
1932         m=MEDFileMesh.New(fname)
1933         m0=m.getMeshAtLevel(0)
1934         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1935         fieldCell0.setMesh(m00)
1936         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1937         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1938         ff0_1.checkConsistencyLight()
1939         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1940         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1941         ff0_2.checkConsistencyLight()
1942         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1943         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1944         ff0_3.checkConsistencyLight()
1945         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1946         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1947         ff0_4.checkConsistencyLight()
1948         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1949         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1950         m1=m.getMeshAtLevel(-1)
1951         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1952         fieldCell1.setMesh(m10)
1953         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1954         ff1_1.checkConsistencyLight()
1955         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1956         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1957         ff1_2.checkConsistencyLight()
1958         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1959         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1960         ff1_3.checkConsistencyLight()
1961         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1962         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1963         ff1_4.checkConsistencyLight()
1964         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1965         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,m0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
1966         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_CELLS,0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
1967         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,0,m) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
1968         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1969         arr_r.setName(fieldCell1.getArray().getName())
1970         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1971         pfl1_r.setName(pfl1.getName())
1972         self.assertTrue(pfl1_r.isEqual(pfl1))
1973         pass
1974
1975     def testMEDFileUMeshZipCoords1(self):
1976         m=MEDFileUMesh()
1977         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1978         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
1979         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1980         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1981         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1982         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1983         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1984         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1985         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1986         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1987         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1988         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1989         o2n=m.zipCoords()
1990         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1991         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1992         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1993         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1994         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1995         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1996         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1997         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1998         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1999         pass
2000
2001     def testMEDUMeshAddNodeGroup1(self):
2002         fname="Pyfile53.med"
2003         m=MEDFileUMesh()
2004         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2005         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2006         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2007         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2008         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2009         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2010         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2011         #
2012         mm=m.deepCopy()
2013         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2014         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2015         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2016         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2017         mm.setFamilyId("MyFam",2)
2018         mm.setFamilyId("MyOtherFam",3)
2019         mm.setFamilyId("MyOther-1",-1)
2020         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2021         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2022         #
2023         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2024         mm.addNodeGroup(daTest)
2025         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2026         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2027         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2028             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2029             pass
2030         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2031         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2032         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2033         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2034         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2035             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2036             pass
2037         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2038         da=DataArrayInt([3,12]) ; da.setName("grp0")
2039         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2040         da.setValues([1])
2041         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2042         mm.write(fname,2)
2043         mm=MEDFileMesh.New(fname)
2044         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2045         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2046         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2047             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2048             pass
2049         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2050         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2051         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2052         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2053         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2054             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2055             pass
2056         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2057         da=DataArrayInt([3,12]) ; da.setName("grp0")
2058         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2059         da.setValues([1])
2060         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2061         pass
2062
2063     def testMEDUMeshAddGroup1(self):
2064         fname="Pyfile54.med"
2065         m=MEDFileUMesh()
2066         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2067         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2068         for i in xrange(7):
2069             m0.insertNextCell(NORM_TRI3,[1,2,1])
2070             pass
2071         for i in xrange(4):
2072             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2073             pass
2074         for i in xrange(2):
2075             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2076             pass
2077         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2078         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2079         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2080         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2081         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2082         #
2083         mm=m.deepCopy()
2084         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2085         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2086         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2087         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2088         mm.setFamilyId("MyFam",2)
2089         mm.setFamilyId("MyOtherFam",3)
2090         mm.setFamilyId("MyOther-1",-1)
2091         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2092         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2093         #
2094         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2095         mm.addGroup(0,daTest)
2096         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2097         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2098         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2099             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2100             pass
2101         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2102         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2103         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2104         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2105         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2106             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2107             pass
2108         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2109         da=DataArrayInt([3,12]) ; da.setName("grp0")
2110         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2111         da.setValues([1])
2112         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2113         mm.write(fname,2)
2114         mm=MEDFileMesh.New(fname)
2115         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2116         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2117         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2118             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2119             pass
2120         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2121         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2122         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2123         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2124         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2125             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2126             pass
2127         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2128         da=DataArrayInt([3,12]) ; da.setName("grp0")
2129         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2130         da.setValues([1])
2131         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2132         pass
2133
2134     def testHeapMem1(self):
2135         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2136         a.alloc(0,1)
2137         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2138         #
2139         m=MEDCouplingCMesh()
2140         arr=DataArrayDouble(10,1) ; arr.iota(0)
2141         m.setCoords(arr,arr)
2142         m=m.buildUnstructured()
2143         m.setName("mm")
2144         f=m.getMeasureField(ON_CELLS)
2145         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100+4*strMulFac))
2146         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100+8*strMulFac))
2147         #
2148         mm=MEDFileUMesh()
2149         mm.setMeshAtLevel(0,m)
2150         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,4225+100+10*strMulFac))
2151         ff=MEDFileField1TS()
2152         ff.setFieldNoProfileSBT(f)
2153         self.assertIn(ff.getHeapMemorySize(),xrange(771-40,871+21+(4+1)*strMulFac))
2154         #
2155         fff=MEDFileFieldMultiTS()
2156         fff.appendFieldNoProfileSBT(f)
2157         self.assertIn(fff.getHeapMemorySize(),xrange(815-50,915+30+(6+2)*strMulFac))
2158         f.setTime(1.,0,-1)
2159         fff.appendFieldNoProfileSBT(f)
2160         self.assertIn(fff.getHeapMemorySize(),xrange(1594-90,1794+50+(10+1)*strMulFac))
2161         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(771-40,871+20+(4+1)*strMulFac))
2162         f2=f[:50]
2163         f2.setTime(2.,1,-1)
2164         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2165         fff.appendFieldProfile(f2,mm,0,pfl)
2166         self.assertIn(fff.getHeapMemorySize(),xrange(2348-130,2608+100+(10+2)*strMulFac))
2167         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(),xrange(204-10,204+10+2*strMulFac))
2168         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(738-50,838+30+4*strMulFac))
2169         pass
2170
2171     def testCurveLinearMesh1(self):
2172         fname="Pyfile55.med"
2173         mesh=MEDCouplingCurveLinearMesh();
2174         mesh.setTime(2.3,4,5);
2175         mesh.setTimeUnit("us");
2176         mesh.setName("Example of Cuve linear mesh");
2177         mesh.setDescription("buildCLMesh");
2178         a1=DataArrayDouble(3*20,1);
2179         a1.iota(7.) ; a1.rearrange(3);
2180         mesh.setCoords(a1);
2181         mesh.setNodeGridStructure([4,5]);
2182         mesh.checkConsistencyLight();
2183         #
2184         m=MEDFileCurveLinearMesh()
2185         m.setMesh(mesh)
2186         d=DataArrayInt(20) ; d.iota(4)
2187         m.setFamilyFieldArr(1,d)
2188         d3=DataArrayInt(20) ; d3.iota(400)
2189         m.setRenumFieldArr(1,d3)
2190         d2=DataArrayInt(12) ; d2.iota(40)
2191         m.setFamilyFieldArr(0,d2)
2192         d4=DataArrayInt(21) ; d4.iota(4000)
2193         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2194         d4.popBackSilent()
2195         m.setRenumFieldArr(1,d4)
2196         m.write(fname,2)
2197         #
2198         m1=MEDFileCurveLinearMesh(fname)
2199         mm=m1.getMesh()
2200         self.assertTrue(mm.isEqual(mesh,1e-12))
2201         self.assertEqual(mm.getSpaceDimension(),3)
2202         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2203         #
2204         m1=MEDFileMesh.New(fname)
2205         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2206         self.assertTrue(isinstance(m1.getUnivName(),str))
2207         self.assertTrue(len(m1.getUnivName())!=0)
2208         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2209         pass
2210
2211     def testParameters1(self):
2212         fname="Pyfile56.med"
2213         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2214         mm=MEDFileCMesh() ; mm.setMesh(m)
2215         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2216         data=MEDFileData()
2217         p=MEDFileParameters()
2218         data.setParams(p) ; data.setMeshes(ms)
2219         pts=MEDFileParameterMultiTS()
2220         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2221         pts.appendValue(1,2,3.4,567.89)
2222         pts.appendValue(2,3,5.6,999.123)
2223         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2224         p.pushParam(pts) ; p.pushParam(pts2)
2225         data.write(fname,2)
2226         p2=MEDFileParameters(fname)
2227         self.assertTrue(p.isEqual(p2,1e-14)[0])
2228         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2229         p3=p.deepCopy()
2230         pts4=pts2.deepCopy()
2231         pts3=pts2.deepCopy()
2232         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2233         pts2.eraseTimeStepIds([0])
2234         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2235         del pts3[[3.4]]
2236         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2237         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2238         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2239         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2240         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2241         p=p3
2242         self.assertTrue(p.isEqual(p2,1e-14)[0])
2243         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2244         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2245         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2246         self.assertEqual(p.getParamsNames(),('A','B'))
2247         ptsr=MEDFileParameterMultiTS(fname,"B")
2248         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2249         ptsr=MEDFileParameterMultiTS(fname)
2250         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2251         p1tsr=MEDFileParameterDouble1TS(fname)
2252         self.assertEqual(p1tsr.getName(),"A")
2253         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2254         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2255         self.assertEqual(p1tsr.getName(),"B")
2256         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2257         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2258         self.assertEqual(p1tsr.getName(),"B")
2259         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2260         data2=MEDFileData(fname)
2261         self.assertEqual(2,data2.getNumberOfParams())
2262         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2263         pass
2264
2265     def testNamesOnCellAndNodesInMeshes1(self):
2266         fname="Pyfile58.med"
2267         fname2="Pyfile59.med"
2268         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2269         m1=m.buildDescendingConnectivity()[0]
2270         m1.sortCellsInMEDFileFrmt()
2271         #
2272         mm=MEDFileUMesh()
2273         mm.setMeshAtLevel(0,m)
2274         mm.setMeshAtLevel(-1,m1)
2275         namesCellL0=DataArrayAsciiChar(6,16)
2276         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2277         mm.setNameFieldAtLevel(0,namesCellL0)
2278         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2279         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2280         mm.setNameFieldAtLevel(-1,namesCellL1)
2281         namesNodes=namesCellL1.subArray(4,16)
2282         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2283         mm.setNameFieldAtLevel(1,namesNodes)
2284         mm.write(fname,2)
2285         #
2286         mmr=MEDFileMesh.New(fname)
2287         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2288         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2289         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2290         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2291         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2292         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2293         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2294         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2295         mmCpy=mm.deepCopy()
2296         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2297         # remove names on nodes
2298         mmCpy.setNameFieldAtLevel(1,None)
2299         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2300         mm.setNameFieldAtLevel(1,None)
2301         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2302         mm.setNameFieldAtLevel(-1,None)
2303         mm.write(fname,2)
2304         mmr=MEDFileMesh.New(fname)
2305         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2306         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2307         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2308         #
2309         c=MEDCouplingCMesh()
2310         arr=DataArrayDouble([0.,1.1,2.3])
2311         c.setCoords(arr,arr)
2312         c.setName("cmesh")
2313         cc=MEDFileCMesh()
2314         cc.setMesh(c)
2315         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2316         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2317         cc.write(fname2,2)
2318         ccr=MEDFileMesh.New(fname2)
2319         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2320         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2321         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2322         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2323         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2324         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2325         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2326         ccCpy=cc.deepCopy()
2327         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2328         pass
2329
2330     def testToExportInExamples1(self):
2331         m=MEDCouplingCMesh()
2332         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2333         m.setCoords(arr,arr)
2334         m=m.buildUnstructured() ; m.setName("mesh")
2335         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2336         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2337         m2=m.computeSkin()
2338         mm=MEDFileUMesh()
2339         mm.setMeshAtLevel(0,m)
2340         mm.setMeshAtLevel(-1,m2)
2341         mm.setGroupsAtLevel(0,[grp1,grp2])
2342         mm.write("example.med",2)
2343         #
2344         m0=mm.getMeshAtLevel(0)
2345         m1=mm.getMeshAtLevel(-1)
2346         grp1=mm.getGroupArr(0,"grp1")
2347         grp2=mm.getGroupArr(0,"grp2")
2348         grps=[grp1,grp2]
2349         whichGrp=DataArrayInt(m0.getNumberOfCells())
2350         whichGrp.fillWithValue(-1)
2351         for grpId,grp in enumerate(grps):
2352             whichGrp[grp]=grpId
2353             pass
2354         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2355         e,f=a.areCellsIncludedIn(m1,2)
2356         self.assertTrue(e)
2357         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2358         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2359         c2.transformWithIndArr(whichGrp)
2360         splitOfM1=len(grps)*[None]
2361         for grpId,grp in enumerate(grps):
2362             tmp=c2.findIdsEqual(grpId)
2363             splitOfM1[grpId]=tmp
2364             pass
2365         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2366         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2367         pass
2368
2369     def testBugCorrection1(self):
2370         fs=MEDFileFields()
2371         fs.resize(3)
2372         self.assertEqual(fs[0],None)
2373         self.assertEqual(3,len(fs))
2374         pass
2375
2376     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2377         f1Name="Pyfile60.med"
2378         f2Name="Pyfile61.med"
2379         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2380         d1.write(f1Name,2)
2381         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2382         d2.write(f2Name,2)
2383         # reading and compare
2384         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2385         for mn in d1.getMeshes().getMeshesNames():
2386             m1=d1.getMeshes()[mn]
2387             m2=d2.getMeshes()[mn]
2388             for lev in m1.getNonEmptyLevels():
2389                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2390                 for grpName in grpsNames:
2391                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2392                     pass
2393                 pass
2394             pass
2395         for fieldn in d1.getFields().getFieldsNames():
2396             f1=d1.getFields()[fieldn]
2397             f2=d2.getFields()[fieldn]
2398             for it,order,tim in f1.getTimeSteps():
2399                 f1t=f1[it,order]
2400                 f2t=f2[it,order]
2401                 if len(f1t.getPflsReallyUsed())!=0:
2402                     # profile case
2403                     for lev in f1t.getNonEmptyLevels()[1]:
2404                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2405                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2406                         self.assertTrue(pfl1.isEqual(pfl2))
2407                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2408                         pass
2409                     pass
2410                 else:
2411                     # no profile case
2412                     for lev in f1t.getNonEmptyLevels()[1]:
2413                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2414                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2415                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2416                         pass
2417                     pass
2418                 pass
2419             pass
2420         pass
2421
2422     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2423         m=MEDCouplingCMesh()
2424         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2425         m.setCoords(arr,arr,arr)
2426         m=m.buildUnstructured()
2427         m2=m.buildDescendingConnectivity()[0]
2428         m.setName("mesh")
2429         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2430         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2431         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2432         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2433         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2434         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2435         mm=MEDFileUMesh()
2436         mm.setMeshAtLevel(0,m)
2437         mm.setGroupsAtLevel(0,[g1,g2])
2438         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2439         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2440         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2441         mm.normalizeFamIdsMEDFile()
2442         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2443         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2444         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2445         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2446         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2447         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2448         for g in mm.getGroupsOnSpecifiedLev(0):
2449             for f in mm.getFamiliesIdsOnGroup(g):
2450                 self.assertTrue(f<0)
2451                 pass
2452             pass
2453         #
2454         mm=MEDFileUMesh()
2455         mm.setMeshAtLevel(0,m)
2456         mm.setMeshAtLevel(-1,m2)
2457         mm.setGroupsAtLevel(0,[g1,g2])
2458         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2459         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2460         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2461         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2462         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2463         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2464         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2465         mm.normalizeFamIdsMEDFile()
2466         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2467         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2468         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2469         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2470         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2471         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2472         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2473         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2474         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2475         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2476         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2477         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2478         for lev in [0,-1]:
2479             for g in mm.getGroupsOnSpecifiedLev(lev):
2480                 for f in mm.getFamiliesIdsOnGroup(g):
2481                     self.assertTrue(f<0)
2482                     pass
2483                 pass
2484             pass
2485          #
2486         mm=MEDFileUMesh()
2487         mm.setMeshAtLevel(0,m)
2488         mm.setMeshAtLevel(-1,m2)
2489         mm.setGroupsAtLevel(0,[g1,g2])
2490         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2491         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2492         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2493         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2494         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2495         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2496         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2497         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2498         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2499         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2500         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2501         mm.normalizeFamIdsMEDFile()
2502         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2503         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2504         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2505         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2506         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2507         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2508         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2509         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2510         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2511         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2512         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2513         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2514         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2515         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2516         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2517         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2518         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2519         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2520         for lev in [0,-1]:
2521             for g in mm.getGroupsOnSpecifiedLev(lev):
2522                 for f in mm.getFamiliesIdsOnGroup(g):
2523                     self.assertTrue(f<0)
2524                     pass
2525                 pass
2526             pass
2527         for g in mm.getGroupsOnSpecifiedLev(1):
2528             for f in mm.getFamiliesIdsOnGroup(g):
2529                 self.assertTrue(f>0)
2530                 pass
2531             pass
2532         pass
2533     
2534     def testNonRegressionMantis22212ChangeGrpName(self):
2535         fileName="Pyfile62.med"
2536         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2537         m=MEDFileUMesh.New()
2538         m.setCoords(m2.getCoords())
2539         m.setMeshAtLevel(0,m2)
2540         m.setMeshAtLevel(-1,m1)
2541         m.setMeshAtLevel(-2,m0)
2542         m.setFamilyFieldArr(0,f2)
2543         m.setFamilyFieldArr(-1,f1)
2544         m.setFamilyFieldArr(-2,f0)
2545         m.setFamilyFieldArr(1,p)
2546         nbOfFams=len(fns)
2547         for i in xrange(nbOfFams):
2548             m.addFamily(fns[i],fids[i])
2549             pass
2550         nbOfGrps=len(grpns)
2551         for i in xrange(nbOfGrps):
2552             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2553             pass
2554         m.setName(m2.getName())
2555         m.setDescription(m2.getDescription())
2556         m.write(fileName,2)
2557         #
2558         mm0=MEDFileMesh.New(fileName)
2559         mm1=MEDFileMesh.New(fileName)
2560         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2561         for name in groupNamesIni:
2562             mm1.changeGroupName(name,name+'N')
2563             pass
2564         mm1.write(fileName,2)
2565         del mm1
2566         #
2567         mm2=MEDFileMesh.New(fileName)
2568         for name in groupNamesIni:
2569             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2570                 arr0=mm0.getGroupArr(lev,name)
2571                 arr2=mm2.getGroupArr(lev,name+'N')
2572                 arr0.setName(name+'N')
2573                 self.assertTrue(arr0.isEqual(arr2))
2574                 pass
2575             pass
2576         pass
2577
2578     def testInt32InMEDFileFieldStar1(self):
2579         fname="Pyfile63.med"
2580         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2581         arr=f1.getArray().convertToIntArr()
2582         f1.setArray(None)
2583         m1=f1.getMesh()
2584         mm1=MEDFileUMesh.New()
2585         mm1.setCoords(m1.getCoords())
2586         mm1.setMeshAtLevel(0,m1)
2587         mm1.setName(m1.getName())
2588         mm1.write(fname,2)
2589         ff1=MEDFileIntField1TS()
2590         ff1.setFieldNoProfileSBT(f1,arr)
2591         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2592         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2593         self.assertTrue(b.isEqual(arr))
2594         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2595         ff1.write(fname,0)
2596         ff2=MEDFileAnyTypeField1TS.New(fname)
2597         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2598         self.assertEqual(ff2.getTime(),[0,1,2.0])
2599         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2600         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2601         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2602         self.assertTrue(b.isEqual(arr))
2603         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2604         ff2.setTime(1,2,3.)
2605         c=ff2.getUndergroundDataArray() ; c*=2
2606         ff2.write(fname,0) # 2 time steps in 
2607         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2608         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2609         self.assertEqual(len(ffs1),2)
2610         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2611         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2612         self.assertTrue(b.isEqual(arr))
2613         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2614         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2615         self.assertTrue(b.isEqual(arr))
2616         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2617         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2618         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2619         self.assertTrue(b.isEqual(2*arr))
2620         f1.setTime(3.,1,2)
2621         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2622         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2623         for it in ffs1:
2624             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2625             bc+=b
2626             pass
2627         self.assertTrue(bc.isEqual(3*arr))
2628         nf1=MEDCouplingFieldDouble(ON_NODES)
2629         nf1.setTime(9.,10,-1)
2630         nf1.setMesh(f1.getMesh())
2631         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2632         nf1.setName("VectorFieldOnNodes")
2633         nff1=MEDFileIntField1TS.New()
2634         nff1.setFieldNoProfileSBT(nf1,narr)
2635         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2636         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2637         nff1.write(fname,0)
2638         #
2639         nf2=MEDCouplingFieldDouble(ON_NODES)
2640         nf2.setTime(19.,20,-11)
2641         nf2.setMesh(f1.getMesh())
2642         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2643         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2644         nff2=MEDFileIntField1TS.New()
2645         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2646         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2647         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2648         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2649         self.assertTrue(b.isEqual(npfl))
2650         self.assertTrue(a.isEqual(narr2))
2651         nff2.write(fname,0)
2652         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2653         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2654         self.assertTrue(b.isEqual(npfl))
2655         self.assertTrue(a.isEqual(narr2))
2656         #
2657         nf3=MEDCouplingFieldDouble(ON_NODES)
2658         nf3.setName("VectorFieldOnNodesDouble")
2659         nf3.setTime(29.,30,-21)
2660         nf3.setMesh(f1.getMesh())
2661         nf3.setArray(f1.getMesh().getCoords())
2662         nff3=MEDFileField1TS.New()
2663         nff3.setFieldNoProfileSBT(nf3)
2664         nff3.write(fname,0)
2665         fs=MEDFileFields(fname)
2666         self.assertEqual(len(fs),4)
2667         ffs=[it for it in fs]
2668         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2669         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2670         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2671         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2672         #
2673         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2674         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2675         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2676         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2677         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2678         #
2679         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2680         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2681         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2682         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2683         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2684         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2685         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2686         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2687         #
2688         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2689         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2690         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2691         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2692         pass
2693
2694     def testMEDFileFields1(self):
2695         fname="Pyfile64.med"
2696         f1=MEDCouplingFieldDouble(ON_NODES)
2697         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2698         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2699         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2700         f1.setMesh(m)
2701         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2702         f1.setArray(arr)
2703         f1.setName("Field1")
2704         ff1=MEDFileField1TS.New()
2705         ff1.setFieldNoProfileSBT(f1)
2706         self.assertEqual(ff1.getDtUnit(),"us")
2707         ff1.write(fname,0)
2708         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2709         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2710         #
2711         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2712         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2713         ff1s.setName("Field2")
2714         ff1s.write(fname,0)
2715         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2716         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2717         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2718         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2719         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2720         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2721         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2722         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2723         pass
2724
2725     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2726     def testMEDFileFields2(self):
2727         fname="Pyfile65.med"
2728         # to check that all is initialize 
2729         MEDFileField1TS().__str__()
2730         MEDFileFieldMultiTS().__str__()
2731         # building a mesh containing 4 tri3 + 5 quad4
2732         tri=MEDCouplingUMesh("tri",2)
2733         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2734         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2735         tris=[tri.deepCopy() for i in xrange(4)]
2736         for i,elt in enumerate(tris): elt.translate([i,0])
2737         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2738         quad=MEDCouplingUMesh("quad",2)
2739         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2740         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2741         quads=[quad.deepCopy() for i in xrange(5)]
2742         for i,elt in enumerate(quads): elt.translate([5+i,0])
2743         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2744         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2745         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2746         #
2747         fmts0_0=MEDFileFieldMultiTS()
2748         fmts0_1=MEDFileFieldMultiTS()
2749         # time steps
2750         for i in xrange(10):
2751             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2752             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2753             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2754             f.setTime(float(i+1)+0.1,i+1,-i-1)
2755             fmts0_0.appendFieldNoProfileSBT(f)
2756             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2757             self.assertEqual(fmts0_1.getName(),name1)
2758             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2759             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2760             if i>1:
2761                 # components names have been modified to generate errors
2762                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2763                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2764                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2765                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2766                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2767                 pass
2768             # add a mismatch of nb of compos
2769             pass
2770         fmts0_2=fmts0_0.deepCopy()
2771         fmts0_3=fmts0_0.deepCopy()
2772         fmts0_4=fmts0_0.deepCopy()
2773         fmts0_5=fmts0_0.shallowCpy()
2774         self.assertTrue(len(fmts0_0)==10 and len(fmts0_1)==10 and len(fmts0_2)==10 and len(fmts0_3)==10 and len(fmts0_4)==10 and len(fmts0_5)==10)
2775         del fmts0_2[::2]
2776         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2777         del fmts0_3[[1.1,(6,-6),9]]
2778         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2779         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2780         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2781         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2782         fmts0_7=fmts0_4[::-3]
2783         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2784         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2785         #
2786         fs0=MEDFileFields()
2787         fs0.pushField(fmts0_0)
2788         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2789         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2790         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2791         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2792         fs0.write(fname,2)
2793         fs0=MEDFileFields(fname)
2794         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2795         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2796         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2797         del fs1[["2ndField",3]]
2798         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2799         fs2=fs0[[0,"4thField"]]
2800         self.assertTrue(isinstance(fs2,MEDFileFields))
2801         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2802         #
2803         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2804         pass
2805
2806     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2807     def testMEDFileFields3(self):
2808         fname="Pyfile66.med"
2809         # building a mesh containing 4 tri3 + 5 quad4
2810         tri=MEDCouplingUMesh("tri",2)
2811         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2812         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2813         tris=[tri.deepCopy() for i in xrange(4)]
2814         for i,elt in enumerate(tris): elt.translate([i,0])
2815         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2816         quad=MEDCouplingUMesh("quad",2)
2817         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2818         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2819         quads=[quad.deepCopy() for i in xrange(5)]
2820         for i,elt in enumerate(quads): elt.translate([5+i,0])
2821         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2822         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2823         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2824         #
2825         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2826         #
2827         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2828         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2829         fmts0_0=MEDFileFieldMultiTS()
2830         fmts0_1=MEDFileFieldMultiTS()
2831         # time steps
2832         for i in xrange(10):
2833             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2834             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2835             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2836             f.setTime(float(i+1)+0.1,i+1,-i-1)
2837             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2838             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2839             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2840             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2841             pass
2842         #
2843         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2844         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2845         fmts0_0.zipPflsNames()
2846         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2847         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2848         fmts0_2=fmts0_0.deepCopy()
2849         fmts0_3=fmts0_0.deepCopy()
2850         fmts0_4=fmts0_0.deepCopy()
2851         fs0=MEDFileFields()
2852         fs0.pushField(fmts0_0)
2853         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2854         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2855         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2856         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2857         #
2858         fmts0_5=MEDFileFieldMultiTS()
2859         for i in xrange(7):
2860             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2861             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2862             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2863             f.setTime(float(i+1)+0.1,i+1,-i-1)
2864             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2865             pass
2866         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2867         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2868         fs0.checkGlobsCoherency()
2869         fs0.write(fname,0)
2870         pass
2871     
2872     def testSplitComponents1(self):
2873         fname="Pyfile67.med"
2874         # building a mesh containing 4 tri3 + 5 quad4
2875         tri=MEDCouplingUMesh("tri",2)
2876         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2877         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2878         tris=[tri.deepCopy() for i in xrange(4)]
2879         for i,elt in enumerate(tris): elt.translate([i,0])
2880         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2881         quad=MEDCouplingUMesh("quad",2)
2882         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2883         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2884         quads=[quad.deepCopy() for i in xrange(5)]
2885         for i,elt in enumerate(quads): elt.translate([5+i,0])
2886         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2887         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2888         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2889         #
2890         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2891         #
2892         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2893         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2894         fs=MEDFileFields()
2895         fmts0_1=MEDFileFieldMultiTS()
2896         # time steps
2897         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2898         for i in xrange(10):
2899             name1="1stField"
2900             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2901             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2902             f.setTime(float(i+1)+0.1,i+1,-i-1)
2903             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2904             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2905             pass
2906         fs.pushField(fmts0_1)
2907         self.assertEqual(1,len(fs))
2908         l=fmts0_1.splitComponents()
2909         self.assertEqual(3,len(l))
2910         for elt in l: self.assertEqual(10,len(elt))
2911         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2912         for elt in l:
2913             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2914             pass
2915         fs.pushFields(l)
2916         self.assertEqual(4,len(fs))
2917         for elt in fs: self.assertEqual(10,len(elt))
2918         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2919         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2920         #
2921         fs.write(fname,0) ; del fs
2922         #
2923         fs1=MEDFileFields(fname)
2924         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2925         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2926         self.assertEqual(4,len(fs1))
2927         for i in xrange(10):
2928             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2929                 f1ts=fs1[fieldName][i]
2930                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2931                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2932                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2933                 pass
2934             f1ts=fs1["1stField"][i]
2935             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2936             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2937             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2938             pass
2939         pass
2940
2941     def testMEDFileFieldConvertTo1(self):
2942         fname="Pyfile68.med"
2943         # building a mesh containing 4 tri3 + 5 quad4
2944         tri=MEDCouplingUMesh("tri",2)
2945         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2946         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2947         tris=[tri.deepCopy() for i in xrange(4)]
2948         for i,elt in enumerate(tris): elt.translate([i,0])
2949         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2950         quad=MEDCouplingUMesh("quad",2)
2951         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2952         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2953         quads=[quad.deepCopy() for i in xrange(5)]
2954         for i,elt in enumerate(quads): elt.translate([5+i,0])
2955         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2956         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2957         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2958         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2959         #
2960         ff0=MEDFileField1TS()
2961         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
2962         f0.checkConsistencyLight()
2963         ff0.setFieldNoProfileSBT(f0)
2964         #
2965         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2966         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2967         #
2968         ff0i=ff0.convertToInt()
2969         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2970         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2971         #
2972         ff1=ff0i.convertToDouble()
2973         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2974         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2975         # With profiles
2976         del arr,f0,ff0,ff1,ff0i,fspExp
2977         ff0=MEDFileField1TS()
2978         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
2979         f0.checkConsistencyLight()
2980         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2981         ff0.setFieldProfile(f0,mm,0,pfl)
2982         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2983         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2984         #
2985         ff0i=ff0.convertToInt()
2986         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2987         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2988         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2989         #
2990         ff1=ff0i.convertToDouble()
2991         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2992         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2993         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2994         ## MultiTimeSteps
2995         ff0=MEDFileFieldMultiTS()
2996         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(0.1,0,10)
2997         f0.checkConsistencyLight()
2998         ff0.appendFieldProfile(f0,mm,0,pfl)
2999         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(100) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(1.1,1,11)
3000         f0.checkConsistencyLight()
3001         ff0.appendFieldProfile(f0,mm,0,pfl)
3002         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(200) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(2.1,2,12)
3003         f0.checkConsistencyLight()
3004         ff0.appendFieldProfile(f0,mm,0,pfl)
3005         ff1=ff0.convertToInt()
3006         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3007         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3008         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3009             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3010             arr=ff1.getUndergroundDataArray(dt,it)
3011             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3012             pass
3013         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3014         #
3015         mm.write(fname,2)
3016         ff1.write(fname,0)
3017         #
3018         ff1=ff1.convertToDouble()
3019         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3020         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3021         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3022             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3023             arr=ff1.getUndergroundDataArray(dt,it)
3024             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3025             pass
3026         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3027         #
3028         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3029         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3030         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3031         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3032             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3033             arr=ff1.getUndergroundDataArray(dt,it)
3034             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3035             pass
3036         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3037         pass
3038
3039     def testMEDFileFieldPartialLoading(self):
3040         fname="Pyfile69.med"
3041         #
3042         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3043         a.alloc(0,1)
3044         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3045         # building a mesh containing 30 tri3 + 40 quad4
3046         tri=MEDCouplingUMesh("tri",2)
3047         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3048         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3049         tris=[tri.deepCopy() for i in xrange(30)]
3050         for i,elt in enumerate(tris): elt.translate([i,0])
3051         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3052         quad=MEDCouplingUMesh("quad",2)
3053         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3054         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3055         quads=[quad.deepCopy() for i in xrange(40)]
3056         for i,elt in enumerate(quads): elt.translate([40+i,0])
3057         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3058         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3059         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3060         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3061         #
3062         ff0=MEDFileField1TS()
3063         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3064         f0.checkConsistencyLight()
3065         ff0.setFieldNoProfileSBT(f0)
3066         ff0.write(fname,0)
3067         #
3068         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3069         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3070         # With profiles
3071         ff0=MEDFileField1TS()
3072         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:50]) ; arr=DataArrayDouble(50*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
3073         f0.checkConsistencyLight()
3074         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3075         ff0.setFieldProfile(f0,mm,0,pfl)
3076         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3077         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3078         ff0.write(fname,0)
3079         #
3080         ff0=MEDFileField1TS(fname,False)
3081         self.assertEqual(ff0.getName(),"FieldCell")
3082         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3083         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3084         heap_memory_ref=ff0.getHeapMemorySize()
3085         self.assertIn(heap_memory_ref,xrange(182,465+2*strMulFac))
3086         ff0.loadArrays() ##
3087         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3088         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3089         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3090         #
3091         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3092         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3093         heap_memory_ref=ff0.getHeapMemorySize()
3094         self.assertIn(heap_memory_ref,xrange(350,520+6*strMulFac))
3095         ff0.loadArrays() ##
3096         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3097         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3098         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3099         ff0.loadArrays() ##
3100         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3101         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3102         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3103         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3104         ff0.loadArrays() ##
3105         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3106         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3107         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3108         ff0.loadArraysIfNecessary() ##
3109         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3110         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3111         heap_memory_ref=ff0.getHeapMemorySize()
3112         self.assertIn(heap_memory_ref,xrange(1100,1384+2*strMulFac))
3113         ff0.unloadArrays()
3114         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3115         self.assertEqual(hmd,-800) # -50*8*2
3116         ff0.loadArrays() ##
3117         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3118         #
3119         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3120         heap_memory_ref=ff0.getHeapMemorySize()
3121         self.assertIn(heap_memory_ref,xrange(299,520+6*strMulFac))
3122         ff0.loadArrays() ##
3123         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3124         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3125         #
3126         fieldName="FieldCellMultiTS"
3127         ff0=MEDFileFieldMultiTS()
3128         for t in xrange(20):
3129             f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota(float(t+1000)) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName(fieldName)
3130             f0.setTime(float(t)+0.1,t,100+t)
3131             f0.checkConsistencyLight()
3132             ff0.appendFieldNoProfileSBT(f0)
3133             pass
3134         ff0.write(fname,0)
3135         #
3136         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3137         heap_memory_ref=ff0.getHeapMemorySize()
3138         self.assertIn(heap_memory_ref,xrange(5536,8212+(80+26)*strMulFac))
3139         ff0.loadArrays()
3140         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3141         del ff0
3142         #
3143         ffs=MEDFileFields(fname,False)
3144         heap_memory_ref=ffs.getHeapMemorySize()
3145         self.assertIn(heap_memory_ref,xrange(5335,9031+(80+50)*strMulFac))
3146         ffs.loadArrays()
3147         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3148         pass
3149
3150     def testMEDFileMeshReadSelector1(self):
3151         mrs=MEDFileMeshReadSelector()
3152         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3153         mrs.__str__() ; mrs.__repr__()
3154         #
3155         mrs=MEDFileMeshReadSelector(0)
3156         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3157         mrs=MEDFileMeshReadSelector(1)
3158         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3159         mrs=MEDFileMeshReadSelector(2)
3160         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3161         mrs=MEDFileMeshReadSelector(3)
3162         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3163         mrs=MEDFileMeshReadSelector(4)
3164         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3165         mrs=MEDFileMeshReadSelector(5)
3166         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3167         mrs=MEDFileMeshReadSelector(6)
3168         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3169         mrs=MEDFileMeshReadSelector(7)
3170         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3171         mrs=MEDFileMeshReadSelector(8)
3172         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3173         mrs=MEDFileMeshReadSelector(9)
3174         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3175         mrs=MEDFileMeshReadSelector(10)
3176         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3177         mrs=MEDFileMeshReadSelector(11)
3178         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3179         mrs=MEDFileMeshReadSelector(12)
3180         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3181         mrs=MEDFileMeshReadSelector(13)
3182         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3183         mrs=MEDFileMeshReadSelector(14)
3184         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3185         mrs=MEDFileMeshReadSelector(15)
3186         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3187         mrs=MEDFileMeshReadSelector(16)
3188         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3189         mrs=MEDFileMeshReadSelector(17)
3190         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3191         mrs=MEDFileMeshReadSelector(18)
3192         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3193         mrs=MEDFileMeshReadSelector(19)
3194         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3195         mrs=MEDFileMeshReadSelector(20)
3196         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3197         mrs=MEDFileMeshReadSelector(21)
3198         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3199         mrs=MEDFileMeshReadSelector(22)
3200         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3201         mrs=MEDFileMeshReadSelector(23)
3202         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3203         mrs=MEDFileMeshReadSelector(24)
3204         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3205         mrs=MEDFileMeshReadSelector(25)
3206         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3207         mrs=MEDFileMeshReadSelector(26)
3208         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3209         mrs=MEDFileMeshReadSelector(27)
3210         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3211         mrs=MEDFileMeshReadSelector(28)
3212         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3213         mrs=MEDFileMeshReadSelector(29)
3214         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3215         mrs=MEDFileMeshReadSelector(30)
3216         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3217         mrs=MEDFileMeshReadSelector(31)
3218         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3219         mrs=MEDFileMeshReadSelector(32)
3220         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3221         mrs=MEDFileMeshReadSelector(33)
3222         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3223         mrs=MEDFileMeshReadSelector(34)
3224         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3225         mrs=MEDFileMeshReadSelector(35)
3226         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3227         mrs=MEDFileMeshReadSelector(36)
3228         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3229         mrs=MEDFileMeshReadSelector(37)
3230         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3231         mrs=MEDFileMeshReadSelector(38)
3232         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3233         mrs=MEDFileMeshReadSelector(39)
3234         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3235         mrs=MEDFileMeshReadSelector(40)
3236         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3237         mrs=MEDFileMeshReadSelector(41)
3238         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3239         mrs=MEDFileMeshReadSelector(42)
3240         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3241         mrs=MEDFileMeshReadSelector(43)
3242         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3243         mrs=MEDFileMeshReadSelector(44)
3244         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3245         mrs=MEDFileMeshReadSelector(45)
3246         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3247         mrs=MEDFileMeshReadSelector(46)
3248         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3249         mrs=MEDFileMeshReadSelector(47)
3250         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3251         mrs=MEDFileMeshReadSelector(48)
3252         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3253         mrs=MEDFileMeshReadSelector(49)
3254         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3255         mrs=MEDFileMeshReadSelector(50)
3256         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3257         mrs=MEDFileMeshReadSelector(51)
3258         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3259         mrs=MEDFileMeshReadSelector(52)
3260         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3261         mrs=MEDFileMeshReadSelector(53)
3262         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3263         mrs=MEDFileMeshReadSelector(54)
3264         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3265         mrs=MEDFileMeshReadSelector(55)
3266         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3267         mrs=MEDFileMeshReadSelector(56)
3268         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3269         mrs=MEDFileMeshReadSelector(57)
3270         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3271         mrs=MEDFileMeshReadSelector(58)
3272         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3273         mrs=MEDFileMeshReadSelector(59)
3274         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3275         mrs=MEDFileMeshReadSelector(60)
3276         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3277         mrs=MEDFileMeshReadSelector(61)
3278         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3279         mrs=MEDFileMeshReadSelector(62)
3280         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3281         mrs=MEDFileMeshReadSelector(63)
3282         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3283         #
3284         mrs=MEDFileMeshReadSelector(63)
3285         mrs.setCellFamilyFieldReading(False)
3286         self.assertEqual(mrs.getCode(),62)
3287         mrs.setCellFamilyFieldReading(True)
3288         self.assertEqual(mrs.getCode(),63)
3289         mrs.setNodeFamilyFieldReading(False)
3290         self.assertEqual(mrs.getCode(),61)
3291         mrs.setNodeFamilyFieldReading(True)
3292         self.assertEqual(mrs.getCode(),63)
3293         mrs.setCellNameFieldReading(False)
3294         self.assertEqual(mrs.getCode(),59)
3295         mrs.setCellNameFieldReading(True)
3296         self.assertEqual(mrs.getCode(),63)
3297         mrs.setNodeNameFieldReading(False)
3298         self.assertEqual(mrs.getCode(),55)
3299         mrs.setNodeNameFieldReading(True)
3300         self.assertEqual(mrs.getCode(),63)
3301         mrs.setCellNumFieldReading(False)
3302         self.assertEqual(mrs.getCode(),47)
3303         mrs.setCellNumFieldReading(True)
3304         self.assertEqual(mrs.getCode(),63)
3305         mrs.setNodeNumFieldReading(False)
3306         self.assertEqual(mrs.getCode(),31)
3307         mrs.setNodeNumFieldReading(True)
3308         self.assertEqual(mrs.getCode(),63)
3309         pass
3310     
3311     def testPartialReadOfMeshes(self):
3312         fname="Pyfile70.med"
3313         # building a mesh containing 4 tri3 + 5 quad4
3314         tri=MEDCouplingUMesh("tri",2)
3315         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3316         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3317         tris=[tri.deepCopy() for i in xrange(4)]
3318         for i,elt in enumerate(tris): elt.translate([i,0])
3319         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3320         quad=MEDCouplingUMesh("quad",2)
3321         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3322         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3323         quads=[quad.deepCopy() for i in xrange(5)]
3324         for i,elt in enumerate(quads): elt.translate([5+i,0])
3325         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3326         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3327         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3328         m1=m.buildDescendingConnectivity()[0]
3329         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3330         #
3331         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3332         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3333         mm.setGroupsAtLevel(0,[grp0,grp1])
3334         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3335         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3336         mm.setGroupsAtLevel(-1,[grp2,grp3])
3337         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3338         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3339         mm.setGroupsAtLevel(1,[grp4,grp5])
3340         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3341         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3342         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3343         #
3344         mm.write(fname,2)
3345         ##
3346         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3347         b4_ref_heap_mem=mm.getHeapMemorySize()
3348         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3349         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3350         ref_heap_mem=mm.getHeapMemorySize()
3351         # check the gain of memory using 1GTUMesh instead of UMesh
3352         self.assertTrue(ref_heap_mem-b4_ref_heap_mem>=(32+9)*4*2-32)# 32+9=nbCells 4=sizeof(int) 2=the types+index -32=loss linked to vector
3353         #
3354         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3355         self.assertEqual(len(mm.getGroupsNames()),0)
3356         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3357         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3358         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3359         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3360         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3361         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3362         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3363         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3364         delta1=ref_heap_mem-mm.getHeapMemorySize()
3365         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3366         #
3367         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3368         self.assertEqual(len(mm.getGroupsNames()),6)
3369         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3370         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3371         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3372         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3373         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3374         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3375         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3376         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3377         delta2=ref_heap_mem-mm.getHeapMemorySize()
3378         self.assertTrue(delta2<delta1)
3379         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3380         #
3381         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3382         self.assertEqual(len(mm.getGroupsNames()),6)
3383         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3384         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3385         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3386         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3387         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3388         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3389         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3390         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3391         delta3=ref_heap_mem-mm.getHeapMemorySize()
3392         self.assertTrue(delta3<delta2)
3393         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3394         #
3395         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3396         self.assertEqual(len(mm.getGroupsNames()),6)
3397         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3398         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3399         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3400         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3401         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3402         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3403         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3404         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3405         delta4=ref_heap_mem-mm.getHeapMemorySize()
3406         self.assertTrue(delta4<delta3)
3407         self.assertTrue(delta4>=32*4*2)
3408         #
3409         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3410         self.assertEqual(len(mm.getGroupsNames()),6)
3411         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3412         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3413         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3414         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3415         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3416         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3417         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3418         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3419         delta5=ref_heap_mem-mm.getHeapMemorySize()
3420         self.assertTrue(delta5<delta4)
3421         self.assertEqual(delta5,0)
3422         pass
3423
3424     # this test checks that setFieldProfile perform a check of the array length
3425     # compared to the profile length. This test also checks that mesh attribute of field
3426     # is not used by setFieldProfile (because across this test mesh is equal to None)
3427     def testCheckCompatibilityPfl1(self):
3428         # building a mesh containing 4 tri3 + 5 quad4
3429         tri=MEDCouplingUMesh("tri",2)
3430         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3431         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3432         tris=[tri.deepCopy() for i in xrange(4)]
3433         for i,elt in enumerate(tris): elt.translate([i,0])
3434         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3435         quad=MEDCouplingUMesh("quad",2)
3436         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3437         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3438         quads=[quad.deepCopy() for i in xrange(5)]
3439         for i,elt in enumerate(quads): elt.translate([5+i,0])
3440         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3441         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3442         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3443         m1=m.buildDescendingConnectivity()[0]
3444         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3445         #
3446         f1ts=MEDFileField1TS()
3447         f=MEDCouplingFieldDouble(ON_NODES)
3448         vals=DataArrayDouble(7) ; vals.iota(1000)
3449         f.setArray(vals)
3450         f.setName("anonymous") # f has no mesh it is not a bug
3451         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3452         f1ts.setFieldProfile(f,mm,0,pfl)
3453         #
3454         f1ts=MEDFileField1TS()
3455         f=MEDCouplingFieldDouble(ON_NODES)
3456         vals=DataArrayDouble(8) ; vals.iota(1000)
3457         f.setArray(vals)
3458         f.setName("anonymous") # f has no mesh it is not a bug
3459         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3460         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3461         #
3462         f1ts=MEDFileField1TS()
3463         f=MEDCouplingFieldDouble(ON_CELLS)
3464         vals=DataArrayDouble(7) ; vals.iota(1000)
3465         f.setArray(vals)
3466         f.setName("anonymous") # f has no mesh it is not a bug
3467         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3468         f1ts.setFieldProfile(f,mm,0,pfl)
3469         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3470         #
3471         f1ts=MEDFileField1TS()
3472         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3473         vals=DataArrayDouble(27) ; vals.iota(1000)
3474         f.setArray(vals)
3475         f.setName("anonymous") # f has no mesh it is not a bug
3476         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3477         f.setMesh(m[pfl])
3478         f.setGaussLocalizationOnCells([0,1],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.1,0.1],[0.3,0.6,0.1])
3479         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3480         f.setGaussLocalizationOnCells([3,4,5,6],[0.,0.,1.,0.,1.,1.,0.,1.],[0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.5,0.5],[0.2,0.3,0.4,0.07,0.03])
3481         f.setMesh(None)
3482         f1ts.setFieldProfile(f,mm,0,pfl)
3483         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3484         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3485         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3486         vals=DataArrayDouble(27) ; vals.iota(1000)
3487         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3488         #
3489         f1ts=MEDFileField1TS()
3490         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3491         vals=DataArrayDouble(25) ; vals.iota(1000)
3492         f.setArray(vals)
3493         f.setName("anonymous") # f has no mesh it is not a bug
3494         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3495         f1ts.setFieldProfile(f,mm,0,pfl)
3496         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3497         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3498         f.setArray(vals2)
3499         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3500         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3501         #
3502         f1ts=MEDFileField1TS()
3503         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3504         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3505         f.setArray(vals)
3506         f1ts.setFieldProfile(f,mm,0,pfl)
3507         pass
3508     
3509     def testWRMeshWithNoCells(self):
3510         fname="Pyfile71.med"
3511         a=DataArrayDouble(4) ; a.iota()
3512         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3513         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3514         m=MEDFileUMesh()
3515         m.setMeshAtLevel(0,m00)
3516         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3517         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3518         m.write(fname,2)
3519         del m,a,c,m0,m00
3520         #
3521         m=MEDFileMesh.New(fname)
3522         self.assertEqual((),m.getNonEmptyLevels())
3523         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3)]),1e-12))
3524         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3525         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3526         pass
3527
3528     def testWRQPolyg1(self):
3529         fname="Pyfile72.med"
3530         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3531         m.insertNextCell([0,2,1,3])
3532         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3533         #
3534         ms=[m.deepCopy() for i in xrange(4)]
3535         for i,elt in enumerate(ms):
3536             elt.translate([float(i)*1.5,0.])
3537             pass
3538         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3539         m0.convertAllToPoly()
3540         #
3541         ms=[m.deepCopy() for i in xrange(5)]
3542         for i,elt in enumerate(ms):
3543             elt.translate([float(i)*1.5,1.5])
3544             pass
3545         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3546         m1.convertAllToPoly()
3547         m1.convertLinearCellsToQuadratic()
3548         #
3549         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3550         ##
3551         mm=MEDFileUMesh()
3552         mm.setMeshAtLevel(0,m)
3553         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3554         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3555         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3556         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3557         ##
3558         mm.write(fname,2)
3559         del mm
3560         #
3561         mm_read=MEDFileUMesh(fname)
3562         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3563         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3564         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3565         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3566         ##
3567         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3568         f.setMesh(m)
3569         arr0=DataArrayDouble(9) ; arr0.iota()
3570         arr1=DataArrayDouble(9) ; arr1.iota(100)
3571         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3572         f.setArray(arr) ; f.checkConsistencyLight()
3573         f.setTime(5.6,1,2)
3574         ff=MEDFileField1TS()
3575         ff.setFieldNoProfileSBT(f)
3576         ff.write(fname,0)
3577         ##
3578         ff_read=MEDFileField1TS(fname)
3579         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3580         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3581         pass
3582
3583     def testLoadIfNecessaryOnFromScratchFields0(self):
3584         """
3585         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3586         """
3587         fname="Pyfile77.med"
3588         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3589         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3590         m.allocateCells()
3591         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3592         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3593         m.finishInsertingCells()
3594         #
3595         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3596         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3597         fs=MEDFileFields()
3598         arrs=4*[None]
3599         #
3600         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3601         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3602         f0.setTime(1.1,1,1)
3603         f0.setName("myELNOField")
3604         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3605         f0.setArray(arrs[0])
3606         ff0.appendFieldNoProfileSBT(f0)
3607         #
3608         f0.setTime(2.2,2,1)
3609         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3610         f0.setArray(arrs[1])
3611         ff0.appendFieldNoProfileSBT(f0)
3612         #
3613         f0.setTime(3.3,3,1)
3614         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3615         f0.setArray(arrs[2])
3616         ff0.appendFieldNoProfileSBT(f0)
3617         #
3618         f0.setTime(4.4,4,1)
3619         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3620         f0.setArray(arrs[3])
3621         ff0.appendFieldNoProfileSBT(f0)
3622         #
3623         for i,arr in enumerate(arrs):
3624             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3625             fs[0][i].loadArraysIfNecessary()
3626             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3627             pass
3628         fs.loadArraysIfNecessary()
3629         for i,arr in enumerate(arrs):
3630             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3631             pass
3632         fs[0].loadArraysIfNecessary()
3633         for i,arr in enumerate(arrs):
3634             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3635             pass
3636         pass
3637     
3638     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3639         """ This test is very important, because the same mechanism is used by the MEDReader to generate a field on all the mesh without any processing and memory.
3640         """
3641         fname="Pyfile78.med"
3642         coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
3643         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3644         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3645         m0.allocateCells()
3646         for elt in [[0,1,2,3],[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7],[5,6,7,8]]:#6
3647             m0.insertNextCell(NORM_TETRA4,elt)
3648             pass
3649         for elt in [[0,1,2,3,4],[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]]:#5
3650             m0.insertNextCell(NORM_PYRA5,elt)
3651             pass
3652         for elt in [[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8]]:#4
3653             m0.insertNextCell(NORM_PENTA6,elt)
3654             pass
3655         m0.checkConsistency()
3656         m1=MEDCouplingUMesh(); m1.setName("mesh")
3657         m1.setMeshDimension(2);
3658         m1.allocateCells(5);
3659         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3660         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3661         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3662         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3663         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3664         m1.setCoords(coords);
3665         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3666         m3.allocateCells()
3667         m3.insertNextCell(NORM_POINT1,[2])
3668         m3.insertNextCell(NORM_POINT1,[3])
3669         m3.insertNextCell(NORM_POINT1,[4])
3670         m3.insertNextCell(NORM_POINT1,[5])
3671         #
3672         mm=MEDFileUMesh()
3673         mm.setMeshAtLevel(0,m0)
3674         mm.setMeshAtLevel(-1,m1)
3675         mm.setMeshAtLevel(-3,m3)
3676         mm.write(fname,2)
3677         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3678         mm=MEDFileMesh.New(fname)
3679         fs=MEDFileFields()
3680         fmts=MEDFileFieldMultiTS()
3681         f1ts=MEDFileField1TS()
3682         for lev in mm.getNonEmptyLevels():
3683             for gt in mm.getGeoTypesAtLevel(lev):
3684                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3685                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3686                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3687                 f.setArray(arr) ; f.setName("f0")
3688                 f1ts.setFieldNoProfileSBT(f)
3689                 pass
3690             pass
3691         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3692         for lev in [0,-1,-3]:
3693             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3694             pass
3695         fmts.pushBackTimeStep(f1ts)
3696         fs.pushField(fmts)
3697         fs.write(fname,0)
3698         del fs,fmts,f1ts
3699         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3700         fs=MEDFileFields(fname)
3701         self.assertEqual(len(fs),1)
3702         self.assertEqual(len(fs[0]),1)
3703         f1ts=fs[0][0]
3704         self.assertEqual(f1ts.getFieldSplitedByType(),[(0,[(0,(0,4),'','')]),(3,[(0,(4,6),'','')]),(4,[(0,(6,9),'','')]),(14,[(0,(9,15),'','')]),(15,[(0,(15,20),'','')]),(16,[(0,(20,24),'','')])])
3705         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0,1,2,3,0,1,0,1,2,0,1,2,3,4,5,0,1,2,3,4,0,1,2,3]),1e-12))
3706         pass
3707
3708     def testMEDFileUMeshSetName(self):
3709         """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the convertion is performed in memory and a preparation is done then.
3710         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3711         """
3712         fname="Pyfile79.med"
3713         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3714         mm=MEDFileUMesh()
3715         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3716         coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
3717         m0.allocateCells(5);
3718         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3719         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3720         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3721         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3722         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3723         m0.setCoords(coords);
3724         mm.setMeshAtLevel(0,m0)
3725         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3726         m2.allocateCells()
3727         m2.insertNextCell(NORM_POINT1,[2])
3728         m2.insertNextCell(NORM_POINT1,[3])
3729         m2.insertNextCell(NORM_POINT1,[4])
3730         m2.insertNextCell(NORM_POINT1,[5])
3731         mm.setMeshAtLevel(-2,m2)
3732         self.assertEqual(mm.getName(),"")
3733         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3734         mm.forceComputationOfParts()
3735         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3736         mm.setName("abc")
3737         self.assertEqual(mm.getName(),"abc")
3738         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3739         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3740         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3741         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3742         pass
3743
3744     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3745         fileName="Pyfile80.med"
3746         m=MEDCouplingCMesh() ; m.setName("cmesh")
3747         arr=DataArrayDouble(6) ; arr.iota()
3748         m.setCoords(arr,arr)
3749         nbCells=m.getNumberOfCells()
3750         self.assertEqual(25,nbCells)
3751         f=MEDCouplingFieldDouble(ON_CELLS)
3752         f.setName("FieldOnCell") ; f.setMesh(m)
3753         arr=DataArrayDouble(nbCells) ; arr.iota()
3754         mm=MEDFileCMesh()
3755         mm.setMesh(m)
3756         #
3757         fmts=MEDFileFieldMultiTS()
3758         #
3759         for i in xrange(nbCells):
3760             t=(float(i)+0.1,i+1,-i-2)
3761             f.setTime(*t)
3762             arr2=DataArrayDouble(nbCells)
3763             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3764             arr2[perm]=arr
3765             f.setArray(arr2)
3766             f1ts=MEDFileField1TS()
3767             f1ts.setFieldNoProfileSBT(f)
3768             fmts.pushBackTimeStep(f1ts)
3769             pass
3770         fmts.unloadArraysWithoutDataLoss()
3771         self.assertTrue(fmts[0].getUndergroundDataArray().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.]),1e-12))
3772         fs=MEDFileFields() ; fs.pushField(fmts)
3773         self.assertTrue(fs[0][0].getUndergroundDataArray().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.]),1e-12))
3774         fs.unloadArraysWithoutDataLoss()
3775         self.assertTrue(fs[0][0].getUndergroundDataArray().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.]),1e-12))
3776         f1ts=fs[0][0]
3777         self.assertTrue(f1ts.getUndergroundDataArray().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.]),1e-12))
3778         f1ts.unloadArraysWithoutDataLoss()
3779         self.assertTrue(f1ts.getUndergroundDataArray().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.]),1e-12))
3780         mm.write(fileName,2)
3781         fs.write(fileName,0)
3782         del m,fmts,mm,f,f1ts
3783         ##
3784         mm=MEDFileMesh.New(fileName)
3785         fmts=MEDFileFieldMultiTS(fileName)
3786         self.assertTrue(fmts[0].getUndergroundDataArray().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.]),1e-12))
3787         fmts.unloadArraysWithoutDataLoss()
3788         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3789         fmts.loadArraysIfNecessary()
3790         self.assertTrue(fmts[0].getUndergroundDataArray().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.]),1e-12))
3791         del mm,fmts
3792         fs=MEDFileFields(fileName)
3793         self.assertTrue(fs[0][0].getUndergroundDataArray().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.]),1e-12))
3794         fs.unloadArraysWithoutDataLoss()
3795         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3796         fs.loadArraysIfNecessary()
3797         self.assertTrue(fs[0][0].getUndergroundDataArray().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.]),1e-12))
3798         del fs
3799         f1ts=MEDFileField1TS(fileName)
3800         self.assertTrue(f1ts.getUndergroundDataArray().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.]),1e-12))
3801         f1ts.unloadArraysWithoutDataLoss()
3802         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3803         f1ts.loadArraysIfNecessary()
3804         self.assertTrue(f1ts.getUndergroundDataArray().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.]),1e-12))
3805         pass
3806
3807     def testMEDFileUMeshLoadPart1(self):
3808         """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specfied using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
3809         memory of the returned instance.
3810         """
3811         fileName="Pyfile81.med"
3812         arr=DataArrayDouble(6) ; arr.iota()
3813         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3814         m=m.buildUnstructured()
3815         m.setName("Mesh")
3816         m.changeSpaceDimension(3,0.)
3817         infos=["aa [b]","cc [de]","gg [klm]"]
3818         m.getCoords().setInfoOnComponents(infos)
3819         m.checkConsistency()
3820         mm=MEDFileUMesh()
3821         mm.setMeshAtLevel(0,m)
3822         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3823         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3824         mm.setMeshAtLevel(-1,m1)
3825         renum0=DataArrayInt([3,6,7,10,11,0,2,1,9,8,5,4,12,13,14,24,23,22,21,20,19,18,17,16,15])
3826         famField0=DataArrayInt([-3,-6,-7,-10,-11,0,-2,-1,-9,-8,-5,-4,-12,-13,-14,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15])
3827         namesCellL0=DataArrayAsciiChar(25,16)
3828         namesCellL0[:]=["Cell#%.3d        "%(i) for i in xrange(25)]
3829         renumM1=DataArrayInt([3,4,0,2,1])
3830         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3831         mm.setRenumFieldArr(0,renum0)
3832         mm.setFamilyFieldArr(0,famField0)
3833         mm.setNameFieldAtLevel(0,namesCellL0)
3834         mm.setRenumFieldArr(-1,renumM1)
3835         mm.setFamilyFieldArr(-1,famFieldM1)
3836         renum1=DataArrayInt([13,16,17,20,21,10,12,11,19,18,15,14,22,23,24,34,33,32,31,30,29,28,27,26,25,45,44,43,42,41,40,39,38,37,36,35])
3837         famField1=DataArrayInt([-13,-16,-17,-20,-21,-10,-12,-11,-19,-18,-15,-14,-22,-23,-24,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35])
3838         namesNodes=DataArrayAsciiChar(36,16)
3839         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(36)]
3840         mm.setRenumFieldArr(1,renum1)
3841         mm.setFamilyFieldArr(1,famField1)
3842         mm.setNameFieldAtLevel(1,namesNodes)
3843         mm.setFamilyId("Fam7",77)
3844         mm.setFamilyId("Fam8",88)
3845         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3846         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3847         mm.write(fileName,2)
3848         #
3849         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3850         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3851         self.assertTrue(mm0.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).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])))
3852         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
3853         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3854         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3855         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3856         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3857         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3858         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3859         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3860         #
3861         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3862         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3863         self.assertTrue(mm1.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,6,5,11,12,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,12,11,17,18,13,12,18,19,14,13,19,20,15,14,20,21,16,15,21,22])))
3864         coo=DataArrayDouble([(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(5,3,0),(0,4,0),(1,4,0),(2,4,0),(3,4,0),(4,4,0),(5,4,0),(0,5,0),(1,5,0),(2,5,0),(3,5,0),(4,5,0),(5,5,0)]) ; coo.setInfoOnComponents(infos)
3865         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3866         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3867         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3868         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3869         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3870         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3871         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3872         #
3873         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3874         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3875         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3876         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3877         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3878         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3879         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3880         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3881         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([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])))
3882         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3883         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
3884         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3885         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3886         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3887         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3888         pass
3889
3890     def testMEDFileFieldsLoadPart1(self):
3891         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3892         """
3893         fileName="Pyfile82.med"
3894         meshName="Mesh"
3895         compos=["aa [kg]","bbb [m/s]"]
3896         arr=DataArrayDouble(6) ; arr.iota()
3897         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3898         m=m.buildUnstructured()
3899         m.setName(meshName)
3900         m.changeSpaceDimension(3,0.)
3901         infos=["aa [b]","cc [de]","gg [klm]"]
3902         m.getCoords().setInfoOnComponents(infos)
3903         m.checkConsistency()
3904         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3905         f.setName("Field")
3906         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3907         arr[:,0]=range(25)
3908         arr[:,1]=range(100,125)
3909         f.setArray(arr)
3910         WriteField(fileName,f,2)
3911         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3912         f.setName("FieldNode")
3913         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3914         arr[:,0]=range(200,236)
3915         arr[:,1]=range(300,336)
3916         f.setArray(arr)
3917         f.checkConsistencyLight()
3918         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3919         #
3920         ms=MEDFileMeshes()
3921         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3922         ms.pushMesh(mm)
3923         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3924         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3925         #
3926         ms=MEDFileMeshes()
3927         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3928         ms.pushMesh(mm)
3929         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3930         fs=fs.deepCopy()
3931         fs[0][0].loadArrays()
3932         arr=DataArrayDouble(12,2) ; arr[:,0]=range(3,15) ; arr[:,1]=range(103,115)
3933         arr.setInfoOnComponents(compos)
3934         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3935         fs[1][0].loadArrays()
3936         arr=DataArrayDouble(21,2) ; arr[:,0]=range(203,224) ; arr[:,1]=range(303,324)
3937         arr.setInfoOnComponents(compos)
3938         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3939         pass
3940
3941     def testMEDFileWithoutCells1(self):
3942         fileName="Pyfile83.med"
3943         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3944         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3945         mm=MEDFileUMesh()
3946         mm.setCoords(coo)
3947         mm.setName("mesh")
3948         mm.write(fileName,2)
3949         #
3950         mm=MEDFileMesh.New(fileName)
3951         self.assertEqual(mm.getName(),"mesh")
3952         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3953         pass
3954
3955     def testZipCoordsWithLoadPart1(self):
3956         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3957         """
3958         fileName="Pyfile84.med"
3959         meshName="Mesh"
3960         compos=["aa [kg]","bbb [m/s]"]
3961         arr=DataArrayDouble(6) ; arr.iota()
3962         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3963         m=m.buildUnstructured()
3964         m.setName(meshName)
3965         m.changeSpaceDimension(3,0.)
3966         infos=["aa [b]","cc [de]","gg [klm]"]
3967         m.getCoords().setInfoOnComponents(infos)
3968         m.checkConsistency()
3969         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3970         f.setName("Field")
3971         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3972         arr[:,0]=range(25)
3973         arr[:,1]=range(100,125)
3974         f.setArray(arr)
3975         WriteField(fileName,f,2)
3976         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3977         f.setName("FieldNode")
3978         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3979         arr[:,0]=range(200,236)
3980         arr[:,1]=range(300,336)
3981         f.setArray(arr)
3982         f.checkConsistencyLight()
3983         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3984         #
3985         ms=MEDFileMeshes()
3986         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3987         ms.pushMesh(mm)
3988         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3989         self.assertEqual(spd.getSlice(),slice(4,6,1))
3990         spd=mm.getPartDefAtLevel(1)
3991         self.assertEqual(spd.getSlice(),slice(4,14,1))
3992         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3993         mm.zipCoords() # <- The important line is here !
3994         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3995         self.assertEqual(spd.getSlice(),slice(4,6,1))
3996         spd=mm.getPartDefAtLevel(1)
3997         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3998         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3999         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4000         fs[0][0].loadArrays()
4001         arr=DataArrayDouble([(4,104),(5,105)])
4002         arr.setInfoOnComponents(compos)
4003         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4004         fs[1][0].loadArrays()
4005         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4006         arr.setInfoOnComponents(compos)
4007         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4008         pass
4009
4010     def testMEDFileCMeshSetGroupsAtLevel(self):
4011         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4012         """
4013         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4014         m.setName("Mesh")
4015         mm=MEDFileCMesh() ; mm.setMesh(m)
4016         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4017         mm.setGroupsAtLevel(0,[grp])
4018         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4019         pass
4020
4021     def testMEDFileUMeshBuildExtrudedMesh1(self):
4022         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4023         fileName="Pyfile85.med"
4024         meshName2D="Mesh"
4025         meshName1D="Mesh1D"
4026         meshName3DOut="Mesh3D"
4027         #
4028         d1=DataArrayInt([0,4,20,24])
4029         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4030         #
4031         a=DataArrayDouble(6) ; a.iota()
4032         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4033         m=m.buildUnstructured()
4034         d1c=d1.buildComplement(m.getNumberOfCells())
4035         m=m[d1c] ; m.zipCoords()
4036         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4037         m0.simplexize(0)
4038         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4039         m.setName(meshName2D)
4040         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4041         e=d.deltaShiftIndex().findIdsEqual(1)
4042         #
4043         mm=MEDFileUMesh()
4044         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4045         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4046         mm.setGroupsAtLevel(0,[grp0])
4047         grp1=e ; grp1.setName("grp1")
4048         mm.setGroupsAtLevel(-1,[grp1])
4049         mm.write(fileName,2)
4050         #
4051         a=DataArrayDouble(3) ; a.iota()
4052         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4053         tmp.setName(meshName1D)
4054         tmp.changeSpaceDimension(3)
4055         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4056         mm1D=MEDFileUMesh()
4057         mm1D.setMeshAtLevel(0,tmp)
4058         mm1D.write(fileName,0)
4059         # test is here !
4060         mm2D=MEDFileMesh.New(fileName,meshName2D)
4061         mm1D=MEDFileMesh.New(fileName,meshName1D)
4062         m1D=mm1D.getMeshAtLevel(0)
4063         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4064         #
4065         self.assertEqual(mm3D.getName(),mm2D.getName())
4066         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4067         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4068         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4069         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4070         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4071         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4072         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4073         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4074         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4075         d=DataArrayDouble([(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.),(5.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(4.,2.,0.),(5.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.),(4.,3.,0.),(5.,3.,0.),(0.,4.,0.),(1.,4.,0.),(2.,4.,0.),(3.,4.,0.),(4.,4.,0.),(5.,4.,0.),(1.,5.,0.),(2.,5.,0.),(3.,5.,0.),(4.,5.,0.),(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.),(5.,1.,1.),(0.,2.,1.),(1.,2.,1.),(2.,2.,1.),(3.,2.,1.),(4.,2.,1.),(5.,2.,1.),(0.,3.,1.),(1.,3.,1.),(2.,3.,1.),(3.,3.,1.),(4.,3.,1.),(5.,3.,1.),(0.,4.,1.),(1.,4.,1.),(2.,4.,1.),(3.,4.,1.),(4.,4.,1.),(5.,4.,1.),(1.,5.,1.),(2.,5.,1.),(3.,5.,1.),(4.,5.,1.),(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.),(5.,1.,2.),(0.,2.,2.),(1.,2.,2.),(2.,2.,2.),(3.,2.,2.),(4.,2.,2.),(5.,2.,2.),(0.,3.,2.),(1.,3.,2.),(2.,3.,2.),(3.,3.,2.),(4.,3.,2.),(5.,3.,2.),(0.,4.,2.),(1.,4.,2.),(2.,4.,2.),(3.,4.,2.),(4.,4.,2.),(5.,4.,2.),(1.,5.,2.),(2.,5.,2.),(3.,5.,2.),(4.,5.,2.)])
4076         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4077         d=DataArrayInt([16,1,0,5,33,32,37,16,1,5,6,33,37,38,16,2,1,6,34,33,38,16,2,6,7,34,38,39,16,3,2,7,35,34,39,16,3,7,8,35,39,40,16,5,4,10,37,36,42,16,5,10,11,37,42,43,16,9,8,14,41,40,46,16,9,14,15,41,46,47,16,11,10,16,43,42,48,16,11,16,17,43,48,49,16,15,14,20,47,46,52,16,15,20,21,47,52,53,16,17,16,22,49,48,54,16,17,22,23,49,54,55,16,21,20,26,53,52,58,16,21,26,27,53,58,59,16,24,23,28,56,55,60,16,24,28,29,56,60,61,16,25,24,29,57,56,61,16,25,29,30,57,61,62,16,26,25,30,58,57,62,16,26,30,31,58,62,63,16,33,32,37,65,64,69,16,33,37,38,65,69,70,16,34,33,38,66,65,70,16,34,38,39,66,70,71,16,35,34,39,67,66,71,16,35,39,40,67,71,72,16,37,36,42,69,68,74,16,37,42,43,69,74,75,16,41,40,46,73,72,78,16,41,46,47,73,78,79,16,43,42,48,75,74,80,16,43,48,49,75,80,81,16,47,46,52,79,78,84,16,47,52,53,79,84,85,16,49,48,54,81,80,86,16,49,54,55,81,86,87,16,53,52,58,85,84,90,16,53,58,59,85,90,91,16,56,55,60,88,87,92,16,56,60,61,88,92,93,16,57,56,61,89,88,93,16,57,61,62,89,93,94,16,58,57,62,90,89,94,16,58,62,63,90,94,95,18,6,5,11,12,38,37,43,44,18,7,6,12,13,39,38,44,45,18,8,7,13,14,40,39,45,46,18,12,11,17,18,44,43,49,50,18,13,12,18,19,45,44,50,51,18,14,13,19,20,46,45,51,52,18,18,17,23,24,50,49,55,56,18,19,18,24,25,51,50,56,57,18,20,19,25,26,52,51,57,58,18,38,37,43,44,70,69,75,76,18,39,38,44,45,71,70,76,77,18,40,39,45,46,72,71,77,78,18,44,43,49,50,76,75,81,82,18,45,44,50,51,77,76,82,83,18,46,45,51,52,78,77,83,84,18,50,49,55,56,82,81,87,88,18,51,50,56,57,83,82,88,89,18,52,51,57,58,84,83,89,90])
4078         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4079         d=DataArrayInt([0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,345,354,363,372,381,390,399,408,417,426,435,444,453,462,471,480,489,498])
4080         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4081         d=DataArrayInt([3,1,0,5,3,1,5,6,3,2,1,6,3,2,6,7,3,3,2,7,3,3,7,8,3,5,4,10,3,5,10,11,3,9,8,14,3,9,14,15,3,11,10,16,3,11,16,17,3,15,14,20,3,15,20,21,3,17,16,22,3,17,22,23,3,21,20,26,3,21,26,27,3,24,23,28,3,24,28,29,3,25,24,29,3,25,29,30,3,26,25,30,3,26,30,31,3,65,64,69,3,65,69,70,3,66,65,70,3,66,70,71,3,67,66,71,3,67,71,72,3,69,68,74,3,69,74,75,3,73,72,78,3,73,78,79,3,75,74,80,3,75,80,81,3,79,78,84,3,79,84,85,3,81,80,86,3,81,86,87,3,85,84,90,3,85,90,91,3,88,87,92,3,88,92,93,3,89,88,93,3,89,93,94,3,90,89,94,3,90,94,95,4,1,0,32,33,4,0,5,37,32,4,5,1,33,37,4,5,6,38,37,4,6,1,33,38,4,2,1,33,34,4,6,2,34,38,4,6,7,39,38,4,7,2,34,39,4,3,2,34,35,4,7,3,35,39,4,7,8,40,39,4,8,3,35,40,4,5,4,36,37,4,4,10,42,36,4,10,5,37,42,4,10,11,43,42,4,11,5,37,43,4,9,8,40,41,4,8,14,46,40,4,14,9,41,46,4,14,15,47,46,4,15,9,41,47,4,10,16,48,42,4,16,11,43,48,4,16,17,49,48,4,17,11,43,49,4,14,20,52,46,4,20,15,47,52,4,20,21,53,52,4,21,15,47,53,4,16,22,54,48,4,22,17,49,54,4,22,23,55,54,4,23,17,49,55,4,20,26,58,52,4,26,21,53,58,4,26,27,59,58,4,27,21,53,59,4,24,23,55,56,4,23,28,60,55,4,28,24,56,60,4,28,29,61,60,4,29,24,56,61,4,25,24,56,57,4,29,25,57,61,4,29,30,62,61,4,30,25,57,62,4,26,25,57,58,4,30,26,58,62,4,30,31,63,62,4,31,26,58,63,4,11,12,44,43,4,12,6,38,44,4,12,13,45,44,4,13,7,39,45,4,13,14,46,45,4,17,18,50,49,4,18,12,44,50,4,18,19,51,50,4,19,13,45,51,4,19,20,52,51,4,24,18,50,56,4,25,19,51,57,4,33,32,64,65,4,32,37,69,64,4,37,33,65,69,4,37,38,70,69,4,38,33,65,70,4,34,33,65,66,4,38,34,66,70,4,38,39,71,70,4,39,34,66,71,4,35,34,66,67,4,39,35,67,71,4,39,40,72,71,4,40,35,67,72,4,37,36,68,69,4,36,42,74,68,4,42,37,69,74,4,42,43,75,74,4,43,37,69,75,4,41,40,72,73,4,40,46,78,72,4,46,41,73,78,4,46,47,79,78,4,47,41,73,79,4,42,48,80,74,4,48,43,75,80,4,48,49,81,80,4,49,43,75,81,4,46,52,84,78,4,52,47,79,84,4,52,53,85,84,4,53,47,79,85,4,48,54,86,80,4,54,49,81,86,4,54,55,87,86,4,55,49,81,87,4,52,58,90,84,4,58,53,85,90,4,58,59,91,90,4,59,53,85,91,4,56,55,87,88,4,55,60,92,87,4,60,56,88,92,4,60,61,93,92,4,61,56,88,93,4,57,56,88,89,4,61,57,89,93,4,61,62,94,93,4,62,57,89,94,4,58,57,89,90,4,62,58,90,94,4,62,63,95,94,4,63,58,90,95,4,43,44,76,75,4,44,38,70,76,4,44,45,77,76,4,45,39,71,77,4,45,46,78,77,4,49,50,82,81,4,50,44,76,82,4,50,51,83,82,4,51,45,77,83,4,51,52,84,83,4,56,50,82,88,4,57,51,83,89,4,6,5,11,12,4,7,6,12,13,4,8,7,13,14,4,12,11,17,18,4,13,12,18,19,4,14,13,19,20,4,18,17,23,24,4,19,18,24,25,4,20,19,25,26,4,70,69,75,76,4,71,70,76,77,4,72,71,77,78,4,76,75,81,82,4,77,76,82,83,4,78,77,83,84,4,82,81,87,88,4,83,82,88,89,4,84,83,89,90])
4082         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4083         d=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,792,797,802,807,812,817,822,827,832,837,842,847,852,857,862,867,872,877,882,887,892,897,902,907,912,917,922])
4084         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4085         d=DataArrayInt([1,1,0,1,0,5,1,5,1,1,5,6,1,6,1,1,2,1,1,6,2,1,6,7,1,7,2,1,3,2,1,7,3,1,7,8,1,8,3,1,5,4,1,4,10,1,10,5,1,10,11,1,11,5,1,9,8,1,8,14,1,14,9,1,14,15,1,15,9,1,10,16,1,16,11,1,16,17,1,17,11,1,14,20,1,20,15,1,20,21,1,21,15,1,16,22,1,22,17,1,22,23,1,23,17,1,20,26,1,26,21,1,26,27,1,27,21,1,24,23,1,23,28,1,28,24,1,28,29,1,29,24,1,25,24,1,29,25,1,29,30,1,30,25,1,26,25,1,30,26,1,30,31,1,31,26,1,11,12,1,12,6,1,12,13,1,13,7,1,13,14,1,17,18,1,18,12,1,18,19,1,19,13,1,19,20,1,24,18,1,25,19,1,65,64,1,64,69,1,69,65,1,69,70,1,70,65,1,66,65,1,70,66,1,70,71,1,71,66,1,67,66,1,71,67,1,71,72,1,72,67,1,69,68,1,68,74,1,74,69,1,74,75,1,75,69,1,73,72,1,72,78,1,78,73,1,78,79,1,79,73,1,74,80,1,80,75,1,80,81,1,81,75,1,78,84,1,84,79,1,84,85,1,85,79,1,80,86,1,86,81,1,86,87,1,87,81,1,84,90,1,90,85,1,90,91,1,91,85,1,88,87,1,87,92,1,92,88,1,92,93,1,93,88,1,89,88,1,93,89,1,93,94,1,94,89,1,90,89,1,94,90,1,94,95,1,95,90,1,75,76,1,76,70,1,76,77,1,77,71,1,77,78,1,81,82,1,82,76,1,82,83,1,83,77,1,83,84,1,88,82,1,89,83])
4086         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4087         d=DataArrayInt(129) ; d.iota() ; d*=3
4088         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4089         #
4090         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4091         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4092         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4093         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4094         self.assertTrue(mm3D.getGroupArr(-2,"grp1").isEqualWithoutConsideringStr(DataArrayInt([0,1,5,9,12,13,14,18,22,23,30,31,33,37,38,40,42,46,50,51])))
4095         self.assertTrue(mm3D.getGroupArr(-2,"grp1_top").isEqualWithoutConsideringStr(DataArrayInt([64,65,69,73,76,77,78,82,86,87,94,95,97,101,102,104,106,110,114,115])))
4096         self.assertTrue(mm3D.getGroupArr(0,"grp0_extruded").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,24,25,26,27,28,29,48,49,50,57,58,59])))
4097         self.assertTrue(mm3D.getGroupArr(-1,"grp1_extruded").isEqualWithoutConsideringStr(DataArrayInt([48,49,53,57,60,61,62,66,70,71,78,79,81,85,86,88,90,94,98,99,112,113,117,121,124,125,126,130,134,135,142,143,145,149,150,152,154,158,162,163])))
4098         mm3D.setName("MeshExtruded")
4099         mm3D.write(fileName,0)
4100         pass
4101
4102     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4103     def testMEDFileUMeshPickeling1(self):
4104         import cPickle
4105         outFileName="Pyfile86.med"
4106         c=DataArrayDouble([-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ],9,2)
4107         c.setInfoOnComponents(["aa","bbb"])
4108         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4109         m=MEDCouplingUMesh();
4110         m.setMeshDimension(2);
4111         m.allocateCells(5);
4112         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4113         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4114         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4115         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4116         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4117         m.finishInsertingCells();
4118         m.setCoords(c)
4119         m.checkConsistencyLight()
4120         m1=MEDCouplingUMesh.New();
4121         m1.setMeshDimension(1);
4122         m1.allocateCells(3);
4123         m1.insertNextCell(NORM_SEG2,2,[1,4])
4124         m1.insertNextCell(NORM_SEG2,2,[3,6])
4125         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4126         m1.finishInsertingCells();
4127         m1.setCoords(c)
4128         m1.checkConsistencyLight()
4129         m2=MEDCouplingUMesh.New();
4130         m2.setMeshDimension(0);
4131         m2.allocateCells(4);
4132         m2.insertNextCell(NORM_POINT1,1,[1])
4133         m2.insertNextCell(NORM_POINT1,1,[3])
4134         m2.insertNextCell(NORM_POINT1,1,[2])
4135         m2.insertNextCell(NORM_POINT1,1,[6])
4136         m2.finishInsertingCells();
4137         m2.setCoords(c)
4138         m2.checkConsistencyLight()
4139         #
4140         mm=MEDFileUMesh.New()
4141         self.assertTrue(mm.getUnivNameWrStatus())
4142         mm.setName("MyFirstMEDCouplingMEDmesh")
4143         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4144         mm.setCoords(c)
4145         mm[-1]=m1;
4146         mm[0]=m;
4147         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4148         mm[-2]=m2;
4149         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4150         # playing with groups
4151         g1_2=DataArrayInt.New()
4152         g1_2.setValues([1,3],2,1)
4153         g1_2.setName("G1")
4154         g2_2=DataArrayInt.New()
4155         g2_2.setValues([1,2,3],3,1)
4156         g2_2.setName("G2")
4157         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4158         g1_1=DataArrayInt.New()
4159         g1_1.setValues([0,1,2],3,1)
4160         g1_1.setName("G1")
4161         g2_1=DataArrayInt.New()
4162         g2_1.setValues([0,2],2,1)
4163         g2_1.setName("G2")
4164         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4165         g1_N=DataArrayInt.New()
4166         g1_N.setValues(range(8),8,1)
4167         g1_N.setName("G1")
4168         g2_N=DataArrayInt.New()
4169         g2_N.setValues(range(9),9,1)
4170         g2_N.setName("G2")
4171         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4172         mm.createGroupOnAll(0,"GrpOnAllCell")
4173         # check content of mm
4174         t=mm.getGroupArr(0,"G1",False)
4175         self.assertTrue(g1_2.isEqual(t));
4176         t=mm.getGroupArr(0,"G2",False)
4177         self.assertTrue(g2_2.isEqual(t));
4178         t=mm.getGroupArr(-1,"G1",False)
4179         self.assertTrue(g1_1.isEqual(t));
4180         t=mm.getGroupArr(-1,"G2",False)
4181         self.assertTrue(g2_1.isEqual(t));
4182         t=mm.getGroupArr(1,"G1",False)
4183         self.assertTrue(g1_N.isEqual(t));
4184         t=mm.getGroupArr(1,"G2",False)
4185         self.assertTrue(g2_N.isEqual(t));
4186         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4187         t=mm.getGroupArr(0,"GrpOnAllCell")
4188         #
4189         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4190         mm2=cPickle.loads(st)
4191         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4192         self.assertEqual(mm.getAxisType(),AX_CART)
4193         #
4194         mm.setAxisType(AX_CYL)
4195         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4196         mm2=cPickle.loads(st)
4197         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4198         self.assertEqual(mm2.getAxisType(),AX_CYL)
4199         pass
4200
4201     def testMEDFileFieldsLoadSpecificEntities1(self):
4202         nbNodes=11
4203         fieldName="myField"
4204         fileName="Pyfile87.med"
4205         nbPdt=10
4206         meshName="Mesh"
4207         #
4208         m=MEDCouplingCMesh()
4209         arr=DataArrayDouble(nbNodes) ; arr.iota()
4210         m.setCoords(arr)
4211         m=m.buildUnstructured()
4212         m.setName(meshName)
4213         #
4214         fmts=MEDFileFieldMultiTS()
4215         for i in xrange(nbPdt):
4216             f=MEDCouplingFieldDouble(ON_NODES)
4217             f.setMesh(m)
4218             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4219             f.setArray(arr)
4220             f.setName(fieldName)
4221             f.setTime(float(i),i,0)
4222             fmts.appendFieldNoProfileSBT(f)
4223             pass
4224         #
4225         mm=MEDFileUMesh() ; mm[0]=m
4226         fmts.write(fileName,2)
4227         mm.write(fileName,0)
4228         #
4229         fs=MEDFileFields(fileName,False)
4230         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4231         fs.loadArraysIfNecessary()
4232         fs2.loadArraysIfNecessary()
4233         for i in xrange(nbPdt):
4234             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4235             pass
4236         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4237         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4238         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4239         fmts=MEDFileFieldMultiTS()
4240         for i in xrange(nbPdt):
4241             f=MEDCouplingFieldDouble(ON_CELLS)
4242             f.setMesh(m3)
4243             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4244             f.setArray(arr)
4245             f.setName(fieldName)
4246             f.setTime(float(i),i,0)
4247             fmts.appendFieldNoProfileSBT(f)
4248             pass
4249         mm=MEDFileUMesh() ; mm[0]=m3
4250         del mm[0]
4251         self.assertEqual(mm.getNonEmptyLevels(),())
4252         mm[0]=m3
4253         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4254         fmts.write(fileName,2)
4255         fs=MEDFileFields(fileName,False)
4256         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4257         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4258         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4259         fs.loadArraysIfNecessary()
4260         fs2.loadArraysIfNecessary()
4261         fs3.loadArraysIfNecessary()
4262         fs4.loadArraysIfNecessary()
4263         for i in xrange(nbPdt):
4264             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4265             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4266             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4267             pass
4268         pass
4269
4270     def testMEDFileLotsOfTSRW1(self):
4271         nbNodes=11
4272         fieldName="myField"
4273         fileName="Pyfile88.med"
4274         nbPdt=300 # <- perftest = 30000
4275         meshName="Mesh"
4276         #
4277         maxPdt=100 # <- optimum = 500
4278         m=MEDCouplingCMesh()
4279         arr=DataArrayDouble(nbNodes) ; arr.iota()
4280         m.setCoords(arr)
4281         m=m.buildUnstructured()
4282         m.setName(meshName)
4283         #
4284         nbOfField=nbPdt/maxPdt
4285         fs=MEDFileFields()
4286         for j in xrange(nbOfField):
4287             fmts=MEDFileFieldMultiTS()
4288             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4289             for i in xrange(s.start,s.stop,s.step):
4290                 f=MEDCouplingFieldDouble(ON_NODES)
4291                 f.setMesh(m)
4292                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4293                 f.setArray(arr)
4294                 f.setName("%s_%d"%(fieldName,j))
4295                 f.setTime(float(i),i,0)
4296                 fmts.appendFieldNoProfileSBT(f)
4297                 pass
4298             fs.pushField(fmts)
4299             pass
4300         #
4301         mm=MEDFileUMesh() ; mm[0]=m
4302         fs.write(fileName,2)
4303         mm.write(fileName,0)
4304         ############
4305         def appendInDict(d,key,val):
4306             if key in d:
4307                 d[key].append(val)
4308             else:
4309                 d[key]=[val]
4310             pass
4311         import re
4312         allFields=GetAllFieldNames(fileName)
4313         allFieldsDict={}
4314         pat=re.compile("([\d]+)([\s\S]+)$")
4315         for st in allFields:
4316             stRev=st[::-1]
4317             m=pat.match(stRev)
4318             if m:
4319                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4320                 pass
4321             else:
4322                 appendInDict(allFieldsDict,st,'')
4323                 pass
4324             pass
4325         fs2=MEDFileFields()
4326         for k in allFieldsDict:
4327             if allFieldsDict[k]!=['']:
4328                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4329                 pass
4330             fmts2=[]
4331             for it in allFieldsDict[k]:
4332                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4333                 pass
4334             fmts2.reverse()
4335             zeResu=fmts2.pop()
4336             nbIter=len(fmts2)
4337             for ii in xrange(nbIter):
4338                 zeResu.pushBackTimeSteps(fmts2.pop())
4339                 pass
4340             zeResu.setName(k)
4341             fs2.pushField(zeResu)
4342             pass
4343         self.assertEqual(fs2[0].getTimeSteps(),[(i,0,float(i)) for i in xrange(nbPdt)])
4344         pass
4345     
4346     def testMEDFileMeshRearrangeFamIds1(self):
4347         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4348         fileName="Pyfile89.med"
4349         meshName='Maillage_2'
4350         mm=MEDFileUMesh()
4351         coords=DataArrayDouble([(0.,0.,0.),(0.,0.,200.),(0.,200.,200.),(0.,200.,0.),(200.,0.,0.),(200.,0.,200.),(200.,200.,200.),(200.,200.,0.),(0.,0.,100.),(0.,100.,200.),(0.,200.,100.),(0.,100.,0.),(200.,0.,100.),(200.,100.,200.),(200.,200.,100.),(200.,100.,0.),(100.,0.,0.),(100.,0.,200.),(100.,200.,0.),(100.,200.,200.),(0.,116.87743909766768,83.12256090233232),(200.,116.87743909766768,83.12256090233232),(116.87743909766769,0.,116.87743909766769),(116.87743909766769,200.,116.87743909766769),(116.87743909766769,116.87743909766769,0.),(116.87743909766769,116.87743909766769,200.),(63.3851584383713,56.1391811199829,119.728314479261),(138.008709441123,116.039297556044,119.903790959468)])
4352         #
4353         c0=DataArrayInt([14,1,26,9,8,14,17,26,1,8,14,27,26,17,22,14,26,16,20,8,14,8,0,16,11,14,16,20,11,24,14,25,20,26,27,14,22,26,24,27,14,26,16,22,24,14,8,26,22,17,14,20,9,25,26,14,19,20,25,23,14,23,6,27,25,14,19,23,10,20,14,27,22,21,24,14,27,21,14,18,14,26,9,25,17,14,13,27,25,17,14,27,18,24,21,14,22,21,15,12,14,27,20,24,18,14,23,25,27,20,14,13,27,6,25,14,23,27,6,14,14,15,16,22,12,14,27,17,13,22,14,22,27,21,13,14,24,16,22,15,14,24,18,7,21,14,12,4,15,16,14,22,12,5,13,14,8,26,16,22,14,13,27,21,14,14,20,18,10,3,14,14,27,18,23,14,14,27,6,13,14,21,22,13,12,14,25,26,17,27,14,19,9,25,20,14,26,24,20,16,14,22,24,15,21,14,9,26,1,17,14,23,27,18,20,14,20,11,18,3,14,14,18,21,7,14,19,2,9,10,14,19,23,25,6,14,18,23,20,10,14,20,26,8,9,14,22,13,5,17,14,24,11,18,20,14,21,15,7,24,14,19,20,10,9,14,20,26,27,24,14,16,8,11,20])
4354         c0i=DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275])
4355         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4356         m0.setConnectivity(c0,c0i)
4357         mm[0]=m0
4358         #
4359         c1=DataArrayInt([3,8,20,11,3,8,9,20,3,9,2,10,3,20,9,10,3,0,8,11,3,9,8,1,3,20,10,3,3,11,20,3,3,15,21,12,3,5,12,13,3,21,13,12,3,15,12,4,3,14,6,13,3,14,13,21,3,7,14,21,3,7,21,15,3,5,22,12,3,4,12,16,3,17,1,8,3,16,8,0,3,5,17,22,3,12,22,16,3,22,17,8,3,16,22,8,3,10,2,19,3,7,18,14,3,14,23,6,3,3,10,18,3,23,19,6,3,18,23,14,3,10,19,23,3,10,23,18,3,3,18,11,3,7,24,18,3,15,4,16,3,11,16,0,3,7,15,24,3,18,24,11,3,24,15,16,3,11,24,16,3,9,19,2,3,19,25,6,3,17,5,13,3,1,17,9,3,25,13,6,3,9,25,19,3,17,13,25,3,17,25,9])
4360         c1i=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192])
4361         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4362         m1.setConnectivity(c1,c1i)
4363         mm[-1]=m1
4364         #
4365         c2=DataArrayInt([0,8,8,1,1,9,9,2,3,10,10,2,0,11,11,3,4,12,12,5,5,13,13,6,7,14,14,6,4,15,15,7,0,16,16,4,1,17,17,5,3,18,18,7,2,19,19,6])
4366         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4367         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4368         mm[-2]=m2.buildUnstructured()
4369         #
4370         ref0=DataArrayInt(55) ; ref0[:]=0
4371         mm.setFamilyFieldArr(0,ref0)
4372         mm.setFamilyFieldArr(1,DataArrayInt([0,0,2,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]))
4373         ref1=DataArrayInt([0,0,0,0,0,0,0,0,-6,-6,-6,-6,-6,-6,-6,-6,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])
4374         mm.setFamilyFieldArr(-1,ref1)
4375         ref2=DataArrayInt([0,0,-7,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4376         mm.setFamilyFieldArr(-2,ref2)
4377         #
4378         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4379             mm.setFamilyId(f,fid)
4380         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4381             mm.setFamiliesOnGroup(grp,fams)
4382         mm.write(fileName,2)
4383         #
4384         mm=MEDFileMesh.New(fileName)
4385         grp=mm.getGroup(-1,"Groupe_1")
4386         dai=grp.computeFetchedNodeIds()
4387         dai.setName("TOTO")
4388         mm.addGroup(1,dai)
4389         mm.rearrangeFamilies() # <- the aim of the test
4390         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4391         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4392         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4393         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4394         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([0,0,2,0,9,9,9,9,0,0,0,0,9,9,9,9,0,0,0,0,0,9,0,0,0,0,0,0])))
4395         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4396         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4397         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4398         for elt,fams in allGrps:
4399             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4400         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4401         for elt,eltId in allFams:
4402             self.assertEqual(mm.getFamilyId(elt),eltId)
4403         pass
4404
4405     def testNonRegrCMeshSetFieldPfl1(self):
4406         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4407         ff=MEDFileField1TS()
4408         meshName="mesh"
4409         mm=MEDFileCMesh()
4410         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4411         m.setCoords(arr)
4412         m.setName(meshName)
4413         mm.setMesh(m)
4414         field=MEDCouplingFieldDouble(ON_CELLS)
4415         field.setMesh(m)
4416         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4417         field.setName("Field")
4418         field.checkConsistencyLight()
4419         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4420         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4421         self.assertEqual(ff.getPfls(),())
4422         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4423         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4424         del ff,mm,field,field2,pfl
4425         # same with unstructured mesh
4426         ff=MEDFileField1TS()
4427         meshName="mesh"
4428         mm=MEDFileUMesh()
4429         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4430         m.setCoords(arr)
4431         m.setName(meshName)
4432         m=m.buildUnstructured()
4433         mm[0]=m
4434         field=MEDCouplingFieldDouble(ON_CELLS)
4435         field.setMesh(m)
4436         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4437         field.setName("Field")
4438         field.checkConsistencyLight()
4439         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4440         ff.setFieldProfile(field,mm,0,pfl)
4441         self.assertEqual(ff.getPfls(),())
4442         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4443         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4444         pass
4445
4446     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4447         meshName="mesh"
4448         fileName="Pyfile90.med"
4449         fileName2="Pyfile91.med"
4450         arr=DataArrayDouble(5) ; arr.iota()
4451         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4452         m=m.buildUnstructured()
4453         d=DataArrayInt([3,7,11,15])
4454         m1=m[d]
4455         m1.simplexize(0)
4456         m2=m[d.buildComplement(m.getNumberOfCells())]
4457         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4458         m.changeSpaceDimension(3,0.)
4459         arr=DataArrayDouble(3) ; arr.iota()
4460         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4461         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4462         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4463         m3D=m.buildExtrudedMesh(m1D,0)
4464         m3D.sortCellsInMEDFileFrmt()
4465         m3D.setName(meshName)
4466         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4467         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4468         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4469         #
4470         mm=MEDFileUMesh()
4471         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4472         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4473         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4474         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4475         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4476         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4477         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4478         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4479         mm.setGroupsAtLevel(0,[vol1,vol2])
4480         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4481         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4482         #
4483         mmOut1=mm.linearToQuadratic(0,0.)
4484         mmOut1.write(fileName2,2)
4485         mmOut2=mmOut1.quadraticToLinear(0.)
4486         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4487         pass
4488
4489     def testMEDFileMeshAddGroup1(self):
4490         m=MEDCouplingCMesh()
4491         arrX=DataArrayDouble(9) ; arrX.iota()
4492         arrY=DataArrayDouble(4) ; arrY.iota()
4493         m.setCoords(arrX,arrY)
4494         m.setName("mesh")
4495         mm=MEDFileCMesh()
4496         mm.setMesh(m)
4497         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4498         mm.addGroup(0,grp0)
4499         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4500         mm.addGroup(0,grp1)
4501         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4502         mm.addGroup(0,grp2)
4503         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4504         mm.addGroup(0,grp3)
4505         for grp in [grp0,grp1,grp2,grp3]:
4506             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4507         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4508         delta=12
4509         for grp in [grp0,grp1,grp2,grp3]:
4510             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4511             mm.addGroup(1,grpNode)
4512         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4513         for grp in [grp0,grp1,grp2,grp3]:
4514             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4515         for grp in [grp0,grp1,grp2,grp3]:
4516             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4517             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4518         mm.normalizeFamIdsMEDFile()
4519         for grp in [grp0,grp1,grp2,grp3]:
4520             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4521         for grp in [grp0,grp1,grp2,grp3]:
4522             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4523             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4524         pass
4525
4526     pass
4527     def testMEDFileJoint1(self):
4528         fileName="Pyfile92.med"
4529         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4530         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4531         mm=MEDFileUMesh()
4532         mm.setCoords(coo)
4533         mm.setName("maa1")
4534         mm.setDescription("un maillage")
4535         mm.write(fileName,2)
4536         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4537         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4538         one_step_joint=MEDFileJointOneStep()
4539         one_step_joint.pushCorrespondence(cell_correspond)
4540         one_step_joint.pushCorrespondence(node_correspond)
4541         one_joint=MEDFileJoint()
4542         one_joint.pushStep(one_step_joint)
4543         one_joint.setLocalMeshName("maa1")
4544         one_joint.setRemoteMeshName("maa1")
4545         one_joint.setDescription("joint_description")
4546         one_joint.setJointName("joint_1")
4547         one_joint.setDomainNumber(1)
4548         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4549         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4550         self.assertEqual( one_joint.getDescription(), "joint_description")
4551         self.assertEqual( one_joint.getJointName(), "joint_1")
4552         self.assertEqual( one_joint.getDomainNumber(), 1)
4553         joints=MEDFileJoints()
4554         joints.pushJoint(one_joint);
4555         joints.write(fileName,0)
4556         # read back
4557         jointsR=MEDFileJoints(fileName,mm.getName())
4558         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4559         jR = jointsR.getJointAtPos(0)
4560         self.assertTrue( jR.isEqual( one_joint ))
4561         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4562         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4563         jointsR.destroyJointAtPos(0)
4564         
4565     pass
4566     def testMEDFileJoint2(self):
4567         fileNameWr="Pyfile93.med"
4568         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4569         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4570         mm=MEDFileUMesh()
4571         mm.setCoords(coo)
4572         mm.setName("maa1")
4573         mm.setDescription("un maillage")
4574         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4575         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4576         one_step_joint=MEDFileJointOneStep()
4577         two_step_joint=MEDFileJointOneStep()
4578         one_joint=MEDFileJoint()
4579         two_joint=MEDFileJoint()
4580         one_step_joint.pushCorrespondence(node_correspond)
4581         one_joint.pushStep(one_step_joint)
4582         two_step_joint.pushCorrespondence(cell_correspond)
4583         two_step_joint.pushCorrespondence(node_correspond)
4584         two_joint.pushStep(two_step_joint)
4585         one_joint.setLocalMeshName("maa1")
4586         one_joint.setRemoteMeshName("maa1")
4587         one_joint.setDescription("joint_description_1")
4588         one_joint.setJointName("joint_1")
4589         one_joint.setDomainNumber(1)
4590         two_joint.setLocalMeshName("maa1")
4591         two_joint.setRemoteMeshName("maa1")
4592         two_joint.setDescription("joint_description_2")
4593         two_joint.setJointName("joint_2")
4594         two_joint.setDomainNumber(2)
4595         joints=MEDFileJoints()
4596         joints.pushJoint(one_joint)
4597         joints.pushJoint(two_joint)
4598         mm.setJoints( joints )
4599         mm.write(fileNameWr,2)
4600         #
4601         mm=MEDFileMesh.New(fileNameWr)
4602         self.assertEqual( mm.getNumberOfJoints(), 2)
4603         jointsR = mm.getJoints();
4604         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4605         self.assertEqual( len( jointsR ), 2 )
4606         jointR1 = jointsR[0]
4607         jointR2 = jointsR[1]
4608         self.assertFalse( jointR1 is None )
4609         self.assertFalse( jointR2 is None )
4610         self.assertTrue( jointR1.isEqual( one_joint ))
4611         self.assertTrue( jointR2.isEqual( two_joint ))
4612         pass
4613
4614     def testMEDFileJoint1(self):
4615         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4616         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4617         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4618         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4619         joint1st_1=MEDFileJointOneStep()
4620         joint1st_1.pushCorrespondence(cell_correspond)
4621         joint1st_1.pushCorrespondence(node_correspond)
4622         joint1st_2=MEDFileJointOneStep()
4623         joint1st_2.pushCorrespondence(cell_correspond)
4624         joint1st_2.pushCorrespondence(node_correspond)
4625         joint1st_3=MEDFileJointOneStep()
4626         joint1st_3.pushCorrespondence(node_correspond)
4627         joint1st_3.pushCorrespondence(cell_correspond)
4628         joint1st_4=MEDFileJointOneStep()
4629         joint1st_4.pushCorrespondence(cell_correspond)
4630         joint1st_5=MEDFileJointOneStep()
4631         joint1st_5.pushCorrespondence(cell_correspon2)
4632         joint1st_6=MEDFileJointOneStep()
4633         joint1st_6.pushCorrespondence(cell_correspon3)
4634         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4635         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4636         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4637         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4638         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4639         one_joint=MEDFileJoint()
4640         one_joint.pushStep(joint1st_1)
4641         one_joint.setLocalMeshName("maa1")
4642         one_joint.setRemoteMeshName("maa2")
4643         one_joint.setDescription("joint_description")
4644         one_joint.setJointName("joint_1")
4645         one_joint.setDomainNumber(1)
4646         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4647         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4648         self.assertEqual( "joint_description", one_joint.getDescription())
4649         self.assertEqual( 1, one_joint.getDomainNumber())
4650         self.assertEqual( "joint_1", one_joint.getJointName())
4651         pass
4652
4653     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4654     def testMEDFileSafeCall0(self):
4655         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4656         fname="Pyfile94.med"
4657         errfname="Pyfile94.err"
4658         class StdOutRedirect(object):
4659             def __init__(self,fileName):
4660                 import os,sys
4661                 sys.stderr.flush()
4662                 self.stdoutOld=os.dup(2)
4663                 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
4664                 fd2=os.dup2(self.fdOfSinkFile,2)
4665                 self.origPyVal=sys.stderr
4666                 class FlushFile(object):
4667                     def __init__(self,f):
4668                         self.f=f
4669                     def write(self,st):
4670                         self.f.write(st)
4671                         self.f.flush()
4672                     def flush(self):
4673                         return self.f.flush()
4674                     def isatty(self):
4675                         return self.f.isatty()
4676                 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
4677             def __del__(self):
4678                 import os,sys
4679                 sys.stderr=self.origPyVal
4680                 #os.fsync(self.fdOfSinkFile)
4681                 os.fsync(2)
4682                 os.dup2(self.stdoutOld,2)
4683                 os.close(self.stdoutOld)
4684         import os
4685         # first clean file if needed
4686         if os.path.exists(fname):
4687             os.remove(fname)
4688             pass
4689         # second : build a file from scratch
4690         m=MEDCouplingCMesh()
4691         arr=DataArrayDouble(11) ; arr.iota()
4692         m.setCoords(arr,arr)
4693         mm=MEDFileCMesh()
4694         mm.setMesh(m)
4695         mm.setName("mesh")
4696         mm.write(fname,2)
4697         # third : change permissions to remove write access on created file
4698         os.chmod(fname,0444)
4699         # four : try to append data on file -> check that it raises Exception
4700         f=MEDCouplingFieldDouble(ON_CELLS)
4701         f.setName("field")
4702         f.setMesh(m)
4703         f.setArray(DataArrayDouble(100))
4704         f.getArray()[:]=100.
4705         f.checkConsistencyLight()
4706         f1ts=MEDFileField1TS()
4707         f1ts.setFieldNoProfileSBT(f)
4708         # redirect stderr
4709         tmp=StdOutRedirect(errfname)
4710         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4711         del tmp
4712         #
4713         if os.path.exists(errfname):
4714             os.remove(errfname)
4715         #
4716         pass
4717
4718     def testUnivStatus1(self):
4719         """ Non regression test to check the effectiveness of univ write status."""
4720         fname="Pyfile95.med"
4721         arr=DataArrayDouble(10) ; arr.iota()
4722         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4723         mm=MEDFileCMesh() ; mm.setMesh(m)
4724         mm.setUnivNameWrStatus(False) # test is here
4725         mm.write(fname,2)
4726         mm=MEDFileCMesh(fname)
4727         self.assertEqual(mm.getUnivName(),"")
4728         mm.setUnivNameWrStatus(True)
4729         mm.write(fname,2)
4730         mm=MEDFileCMesh(fname)
4731         self.assertTrue(mm.getUnivName()!="")
4732         pass
4733
4734     def testEmptyMesh(self):
4735       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4736       with 0 tuples """
4737       fname = "Pyfile96.med" 
4738       m = MEDCouplingUMesh('toto', 2)
4739       m.setCoords(DataArrayDouble([], 0, 2))
4740       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4741       mfu = MEDFileUMesh()
4742       mfu.setMeshAtLevel(0, m)
4743       mfu.write(fname, 2)
4744       mfu2 = MEDFileUMesh(fname)
4745       self.assertEqual('toto', mfu2.getName())
4746       lvl = mfu2.getNonEmptyLevels()
4747       self.assertEqual((), lvl)
4748
4749     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4750     def testMEDFileUMeshPickeling2(self):
4751       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4752       name="Mesh_1"
4753       grpName1="HAUT"
4754       grpName2="BASE"
4755       hauteur=1.
4756       nbOfNodesPerAxis=3
4757       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4758       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4759       mesh=MEDFileUMesh() ; mesh[0]=m
4760       m1=m.computeSkin() ; mesh[-1]=m1
4761       #
4762       bary1=m1.computeCellCenterOfMass()[:,2]
4763       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4764       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4765       mesh.setGroupsAtLevel(-1,[grp1,grp2])
4766       
4767       import cPickle
4768       st=cPickle.dumps(mesh,2)
4769       mm=cPickle.loads(st)
4770       st2=cPickle.dumps(mm,2)
4771       mm2=cPickle.loads(st2)
4772       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4773       pass
4774
4775     def testMEDFileEquivalence1(self):
4776       """ First check of equivalence implementation in MEDFileMesh"""
4777       fileName="Pyfile97.med"
4778       meshName="M_01"
4779       mm=MEDFileUMesh()
4780       coo=DataArrayDouble([(0,0,0),(6,0,0),(19,0,0),(36,0,0),(0,4,0),(6,4,0),(19,4,0),(36,4,0),(0,13,0),(6,13,0),(19,13,0),(36,13,0),(0,24,0),(6,24,0),(19,24,0),(36,24,0),(0,0,6),(6,0,6),(19,0,6),(36,0,6),(0,4,6),(6,4,6),(19,4,6),(36,4,6),(0,13,6),(6,13,6),(19,13,6),(36,13,6),(0,24,6),(6,24,6),(19,24,6),(36,24,6),(6,0,3),(6,2,0),(12.5,0,0),(19,0,3),(19,2,0),(6,4,3),(12.5,4,0),(19,4,3),(6,2,6),(12.5,0,6),(19,2,6),(12.5,4,6),(6,2,3),(12.5,0,3),(12.5,2,0),(19,2,3),(12.5,4,3),(12.5,2,6),(12.5,2,3)])
4781       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4782       connQ4=DataArrayInt([1,17,21,5,2,18,22,6,21,5,6,22,1,32,44,33,17,40,44,32,21,37,44,40,5,33,44,37,2,35,47,36,18,42,47,35,22,39,47,42,6,36,47,39,21,37,48,43,5,38,48,37,6,39,48,38,22,43,48,39])
4783       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4784       connH8=DataArrayInt([20,16,17,21,4,0,1,5,22,18,19,23,6,2,3,7,24,20,21,25,8,4,5,9,25,21,22,26,9,5,6,10,26,22,23,27,10,6,7,11,28,24,25,29,12,8,9,13,29,25,26,30,13,9,10,14,30,26,27,31,14,10,11,15,21,40,49,43,37,44,50,48,40,17,41,49,44,32,45,50,49,41,18,42,50,45,35,47,43,49,42,22,48,50,47,39,44,32,45,50,33,1,34,46,37,44,50,48,5,33,46,38,48,50,47,39,38,46,36,6,50,45,35,47,46,34,2,36])
4785       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4786       mm.getFamilyFieldAtLevel(-1)[:]=-2
4787       mm.getFamilyFieldAtLevel(0)[:]=0
4788       mm.addFamily("HOMARD________-1",-1)
4789       mm.addFamily("HOMARD________-2",-2)
4790       mm.addFamily("HOMARD________-3",-3)
4791       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4792       
4793       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4794       descEq="Cette equivalence decrit les mailles a recoller. Dans chaque correspondance, le premier numero est celui de la maille coupee ; le second numero est celui d'une des petites mailles en regard."
4795       mm.initializeEquivalences()
4796       eqs=mm.getEquivalences()
4797       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4798       eq0.setDescription(descEq)
4799       corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
4800       eq0.setArray(-1,corr)
4801       self.assertEqual(eq0.getCell().size(),1)
4802       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4803       eq0.getCell().clear()
4804       self.assertEqual(eq0.getCell().size(),0)
4805       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4806       self.assertEqual(eq0.getCell().size(),1)
4807       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4808       mm.killEquivalences()
4809       mm.initializeEquivalences()
4810       eqs=mm.getEquivalences()
4811       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4812       eq0.setDescription(descEq)
4813       c=eq0.initCell()
4814       c.setArrayForType(NORM_QUAD4,corr)
4815       self.assertEqual(eq0.getCell().size(),1)
4816       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4817       mm2=mm.deepCopy()
4818       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4819       self.assertEqual(mm2.getEquivalences().size(),1)
4820       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4821       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4822       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4823       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4824       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4825       mm.write(fileName,2)
4826       #
4827       mm3=MEDFileMesh.New(fileName)
4828       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4829       pass
4830
4831     def testMEDFileForFamiliesPlayer1(self):
4832       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4833       fileName="Pyfile98.med"
4834       meshName="mesh"
4835       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
4836       arr=DataArrayDouble(4) ; arr.iota()
4837       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4838       m=m.buildUnstructured()
4839       mm=MEDFileUMesh()
4840       mm[0]=m
4841       mm.setName(meshName)
4842       mm.setFamilyId("FAMILLE_ZERO",0)
4843       mm.getFamilyFieldAtLevel(0)[-3:]=-4
4844       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
4845       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
4846       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
4847       mm.setFamilyFieldArr(1,d)
4848       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
4849       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
4850       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4851       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
4852       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
4853       mm.write(fileName,2)
4854       # now read such funny file !
4855       mm2=MEDFileMesh.New(fileName) # <- normaly mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
4856       self.assertTrue(mm.isEqual(mm2,1e-16))
4857       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4858       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
4859       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
4860       pass
4861
4862     def testCartesianizer1(self):
4863       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
4864       # UMesh non cart
4865       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4866       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
4867       d0=DataArrayInt(16) ; d0[:]=0
4868       d1=DataArrayInt(9)  ; d1[:]=0
4869       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4870       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4871       ref0=mm.getCoords().getHiddenCppPointer()
4872       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
4873       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
4874       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
4875       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
4876       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4877       mm.setAxisType(AX_CYL) #<- important
4878       mm2=mm.cartesianize() # the trigger
4879       self.assertEqual(mm2.getAxisType(),AX_CART)
4880       mm.setAxisType(AX_CART) # this is here only to avoid complaints
4881       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4882       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4883       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
4884       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
4885       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
4886       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4887       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
4888       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
4889       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
4890       self.assertEqual(mm2.getName(),mm.getName())
4891       self.assertEqual(mm2.getDescription(),mm.getDescription())
4892       self.assertEqual(mm2.getTime(),mm.getTime())
4893       self.assertEqual(mm2.getTime(),mm.getTime())
4894       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4895       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4896       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4897       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4898       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4899       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4900       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4901       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4902       # UMesh cart
4903       mm.setAxisType(AX_CART)
4904       mm2=mm.cartesianize() # the trigger
4905       self.assertEqual(mm2.getAxisType(),AX_CART)
4906       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4907       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4908       # CurveLinearMesh non cart
4909       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
4910       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4911       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4912       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4913       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
4914       mm2=mm.cartesianize() # the trigger
4915       self.assertEqual(mm2.getAxisType(),AX_CART)
4916       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4917       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4918       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4919       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4920       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4921       self.assertEqual(mm2.getName(),mm.getName())
4922       self.assertEqual(mm2.getDescription(),mm.getDescription())
4923       self.assertEqual(mm2.getTime(),mm.getTime())
4924       self.assertEqual(mm2.getTime(),mm.getTime())
4925       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4926       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4927       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4928       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4929       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4930       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4931       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4932       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4933       # CurveLinearMesh cart
4934       mm.setAxisType(AX_CART)
4935       mm2=mm.cartesianize() # the trigger
4936       self.assertEqual(mm2.getAxisType(),AX_CART)
4937       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4938       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4939       # CMesh non cart
4940       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4941       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4942       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4943       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4944       mm2=mm.cartesianize() # the trigger
4945       self.assertEqual(mm2.getAxisType(),AX_CART)
4946       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4947       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4948       self.assertEqual(mm2.getName(),mm.getName())
4949       self.assertEqual(mm2.getDescription(),mm.getDescription())
4950       self.assertEqual(mm2.getTime(),mm.getTime())
4951       self.assertEqual(mm2.getTime(),mm.getTime())
4952       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4953       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4954       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4955       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4956       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4957       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4958       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4959       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4960       # CMesh cart
4961       mm.setAxisType(AX_CART)
4962       mm2=mm.cartesianize() # the trigger
4963       self.assertEqual(mm2.getAxisType(),AX_CART)
4964       self.assertTrue(isinstance(mm2,MEDFileCMesh))
4965       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4966       pass
4967
4968     def testCheckCoherency(self):
4969       m2 = MEDCouplingUMesh("2d", 2)
4970       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
4971       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
4972       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
4973       mum = MEDFileUMesh()
4974       mum.setMeshAtLevel(0, m2)
4975       mum.setMeshAtLevel(-1, m1)
4976       mum.checkConsistency()
4977       mum2 = mum.deepCopy()
4978
4979       # Nodes
4980       arr = DataArrayInt([2]*4)
4981       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
4982       self.assertRaises(InterpKernelException, mum.checkConsistency)
4983       mum=mum2; mum2=mum.deepCopy();
4984       arr = DataArrayInt([2]*4)
4985       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
4986       self.assertRaises(InterpKernelException, mum.checkConsistency)
4987       mum=mum2; mum2=mum.deepCopy();
4988       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
4989       self.assertRaises(InterpKernelException, mum.checkConsistency)
4990       mum=mum2; mum2=mum.deepCopy();
4991       arr = DataArrayAsciiChar(['tutu           x']*4)
4992       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
4993       self.assertRaises(InterpKernelException, mum.checkConsistency)
4994
4995       # 2D
4996       mum=mum2; mum2=mum.deepCopy();
4997       arr = DataArrayInt([2]*2)
4998       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
4999       self.assertRaises(InterpKernelException, mum.checkConsistency)
5000       mum=mum2; mum2=mum.deepCopy();
5001       arr = DataArrayInt([2]*2)
5002       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5003       self.assertRaises(InterpKernelException, mum.checkConsistency)
5004       mum=mum2; mum2=mum.deepCopy();
5005       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5006       self.assertRaises(InterpKernelException, mum.checkConsistency)
5007       mum=mum2; mum2=mum.deepCopy();
5008       arr = DataArrayAsciiChar(['tutu           x']*2)
5009       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5010       self.assertRaises(InterpKernelException, mum.checkConsistency)
5011
5012       # 1D
5013       mum=mum2; mum2=mum.deepCopy();
5014       arr = DataArrayInt([2]*5)
5015       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5016       self.assertRaises(InterpKernelException, mum.checkConsistency)
5017       mum=mum2; mum2=mum.deepCopy();
5018       arr = DataArrayInt([2]*5)
5019       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5020       self.assertRaises(InterpKernelException, mum.checkConsistency)
5021       mum=mum2; mum2=mum.deepCopy();
5022       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5023       self.assertRaises(InterpKernelException, mum.checkConsistency)
5024       mum=mum2; mum2=mum.deepCopy();
5025       arr = DataArrayAsciiChar(['tutu           x']*5)
5026       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5027       self.assertRaises(InterpKernelException, mum.checkConsistency)
5028
5029     def testCheckSMESHConsistency(self):
5030       m2 = MEDCouplingUMesh("2d", 2)
5031       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5032       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5033       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5034       mum = MEDFileUMesh()
5035       mum.setMeshAtLevel(0, m2)
5036       mum.setMeshAtLevel(-1, m1)
5037       mum.checkConsistency()
5038       mum.checkSMESHConsistency()
5039       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5040       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5041       mum.setRenumFieldArr(0, n2)
5042       mum.setRenumFieldArr(-1, n1)
5043       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5044       mum.setRenumFieldArr(-1, n1+100)
5045       mum.checkSMESHConsistency()
5046       pass
5047
5048     def testClearNodeAndCellNumbers(self):
5049       m2 = MEDCouplingUMesh("2d", 2)
5050       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5051       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5052       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5053       mum = MEDFileUMesh()
5054       mum.setMeshAtLevel(0, m2)
5055       mum.setMeshAtLevel(-1, m1)
5056       mum.checkConsistency()
5057       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5058       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5059       mum.setRenumFieldArr(0, n2)
5060       mum.setRenumFieldArr(-1, n1)
5061       mum.clearNodeAndCellNumbers()
5062       mum.checkSMESHConsistency()
5063       pass
5064
5065     def testCMeshSetFamilyFieldArrNull(self):
5066       meshName="mesh"
5067       fname="Pyfile99.med"
5068       arrX=DataArrayDouble([0,1,2,3])
5069       arrY=DataArrayDouble([0,1,2])
5070       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5071       mm=MEDFileCMesh() ; mm.setMesh(m)
5072       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5073       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5074       mm.setFamilyFieldArr(0,famCellIds)
5075       mm.setFamilyFieldArr(1,famNodeIds)
5076       mm.write(fname,2)
5077       mm=MEDFileMesh.New(fname)
5078       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5079       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5080       mm.setFamilyFieldArr(0,None)#<- bug was here
5081       mm.setFamilyFieldArr(1,None)#<- bug was here
5082       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5083       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5084       mm3=mm.deepCopy()
5085       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5086       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5087       mm.write(fname,2)
5088       mm2=MEDFileMesh.New(fname)
5089       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5090       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5091       pass
5092
5093     def testAppendFieldProfileOnIntField(self):
5094       fname="Pyfile100.med"
5095       arrX=DataArrayDouble([0,1,2,3])
5096       arrY=DataArrayDouble([0,1,2])
5097       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5098       mm=MEDFileCMesh()
5099       mm.setMesh(mesh)
5100       #
5101       fmts=MEDFileIntFieldMultiTS()
5102       pflName="PFL"
5103       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5104       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(mesh)
5105       fieldName="FieldOnCell"
5106       f.setTime(1.2,1,1) ; f.setName(fieldName)
5107       arr=DataArrayInt([101,102,103])
5108       fmts.appendFieldProfile(f,arr,mm,0,pfl)
5109       #
5110       mm.write(fname,2)
5111       fmts.write(fname,0)
5112       #
5113       mm=MEDFileMesh.New(fname)
5114       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5115       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5116       self.assertEqual(fmts.getName(),fieldName)
5117       self.assertEqual(len(fmts),1)
5118       f1ts=fmts[0]
5119       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5120       self.assertEqual(pfltest.getName(),pflName)
5121       self.assertEqual(ftest.getName(),fieldName)
5122       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5123       ftest2,vals=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5124       self.assertTrue(vals.isEqualWithoutConsideringStr(arr))
5125       self.assertEqual(ftest2.getTime(),f.getTime())
5126       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5127       pass
5128
5129     pass
5130
5131 if __name__ == "__main__":
5132   unittest.main()