]> SALOME platform Git repositories - tools/medcoupling.git/blob - src/MEDLoader/Swig/MEDLoaderTest3.py
Salome HOME
Generalize __getitem__ from MEDFileUMesh to MEDFileMesh.
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2015  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 from math import pi,e,sqrt
25 from MEDLoaderDataForTest import MEDLoaderDataForTest
26
27 class MEDLoaderTest(unittest.TestCase):
28     def testMEDMesh1(self):
29         fileName="Pyfile18.med"
30         mname="ExampleOfMultiDimW"
31         medmesh=MEDFileMesh.New(fileName,mname)
32         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
33         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
34         m1_0=medmesh.getLevel0Mesh(True)
35         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
36         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
37         m2_0=medmesh.getLevelM1Mesh(True)
38         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
39         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
40         pass
41
42     def testMEDMesh2(self):
43         fileName="Pyfile10.med"
44         mname="3DToto"
45         outFileName="MEDFileMesh1.med"
46         medmesh=MEDFileUMesh.New(fileName,mname)
47         self.assertEqual((0,),medmesh.getNonEmptyLevels())
48         m1_0=medmesh.getLevel0Mesh(True)
49         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
50         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
51         g1_0=medmesh.getGroup(0,"mesh2",True)
52         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
53         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
54         g1_0=medmesh.getGroup(0,"mesh3",True)
55         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
56         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
57         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
58         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
59         g1_1.setName(g1_0.getName())
60         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
61         g1_0=medmesh.getFamily(0,"Family_-3",True)
62         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
63         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
64         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
65         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
66         g1_1.setName(g1_0.getName())
67         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
68         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
69         medmesh.write(outFileName,2);
70         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
71         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
72         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
73         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
74         famn=medmesh.getFamilyNameGivenId(0)
75         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
76         #without renum
77         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
78         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
79         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
80         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
81         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
82         pass
83
84     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
85     def testMEDMesh3(self):
86         outFileName="MEDFileMesh3.med"
87         c=DataArrayDouble.New()
88         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 ];
89         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
90         c.setValues(coords,9,2)
91         m=MEDCouplingUMesh.New();
92         m.setMeshDimension(2);
93         m.allocateCells(5);
94         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
95         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
96         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
97         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
98         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
99         m.finishInsertingCells();
100         m.setCoords(c)
101         m.checkCoherency()
102         m1=MEDCouplingUMesh.New();
103         m1.setMeshDimension(1);
104         m1.allocateCells(3);
105         m1.insertNextCell(NORM_SEG2,2,[1,4])
106         m1.insertNextCell(NORM_SEG2,2,[3,6])
107         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
108         m1.finishInsertingCells();
109         m1.setCoords(c)
110         m1.checkCoherency()
111         m2=MEDCouplingUMesh.New();
112         m2.setMeshDimension(0);
113         m2.allocateCells(4);
114         m2.insertNextCell(NORM_POINT1,1,[1])
115         m2.insertNextCell(NORM_POINT1,1,[3])
116         m2.insertNextCell(NORM_POINT1,1,[2])
117         m2.insertNextCell(NORM_POINT1,1,[6])
118         m2.finishInsertingCells();
119         m2.setCoords(c)
120         m2.checkCoherency()
121         #
122         mm=MEDFileUMesh.New()
123         self.assertTrue(mm.getUnivNameWrStatus())
124         mm.setName("MyFirstMEDCouplingMEDmesh")
125         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
126         mm.setCoords(c)
127         mm.setMeshAtLevel(-1,m1);
128         mm.setMeshAtLevel(0,m);
129         mm.setMeshAtLevel(-2,m2);
130         # playing with groups
131         g1_2=DataArrayInt.New()
132         g1_2.setValues([1,3],2,1)
133         g1_2.setName("G1")
134         g2_2=DataArrayInt.New()
135         g2_2.setValues([1,2,3],3,1)
136         g2_2.setName("G2")
137         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
138         g1_1=DataArrayInt.New()
139         g1_1.setValues([0,1,2],3,1)
140         g1_1.setName("G1")
141         g2_1=DataArrayInt.New()
142         g2_1.setValues([0,2],2,1)
143         g2_1.setName("G2")
144         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
145         g1_N=DataArrayInt.New()
146         g1_N.setValues(range(8),8,1)
147         g1_N.setName("G1")
148         g2_N=DataArrayInt.New()
149         g2_N.setValues(range(9),9,1)
150         g2_N.setName("G2")
151         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
152         mm.createGroupOnAll(0,"GrpOnAllCell")
153         # check content of mm
154         t=mm.getGroupArr(0,"G1",False)
155         self.assertTrue(g1_2.isEqual(t));
156         t=mm.getGroupArr(0,"G2",False)
157         self.assertTrue(g2_2.isEqual(t));
158         t=mm.getGroupArr(-1,"G1",False)
159         self.assertTrue(g1_1.isEqual(t));
160         t=mm.getGroupArr(-1,"G2",False)
161         self.assertTrue(g2_1.isEqual(t));
162         t=mm.getGroupArr(1,"G1",False)
163         self.assertTrue(g1_N.isEqual(t));
164         t=mm.getGroupArr(1,"G2",False)
165         self.assertTrue(g2_N.isEqual(t));
166         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
167         t=mm.getGroupArr(0,"GrpOnAllCell")
168         self.assertTrue(t.getValues()==range(5))
169         #
170         mmCpy=mm.deepCpy()
171         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
172         mmCpy.write(outFileName,2);
173         #
174         mm=MEDFileMesh.New(outFileName)
175         #
176         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
177         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
178         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
179         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
180         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
181         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
182         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
183         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
184         self.assertEqual(3,len(lmm))
185         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
186         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
187         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
188         #
189         self.assertTrue(mm.getUnivNameWrStatus())
190         self.assertTrue(isinstance(mm.getUnivName(),str))
191         self.assertTrue(len(mm.getUnivName())!=0)
192         mbis=mm.getMeshAtLevel(0)
193         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
194         self.assertTrue(m.isEqual(mbis,1e-12));
195         #
196         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
197         pass
198
199     # this test is the testMEDMesh3 except that permutation is dealed here
200     def testMEDMesh4(self):
201         outFileName="MEDFileMesh4.med"
202         c=DataArrayDouble.New()
203         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 ];
204         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
205         c.setValues(coords,9,2)
206         c.setInfoOnComponent(0,"abcdef [km]")
207         c.setInfoOnComponent(1,"ghij [MW]")
208         m=MEDCouplingUMesh.New();
209         m.setMeshDimension(2);
210         m.allocateCells(5);
211         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
212         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
213         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
214         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
215         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
216         m.finishInsertingCells();
217         m.setCoords(c)
218         m.checkCoherency()
219         m1=MEDCouplingUMesh.New();
220         m1.setMeshDimension(1);
221         m1.allocateCells(3);
222         m1.insertNextCell(NORM_SEG2,2,[1,4])
223         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
224         m1.insertNextCell(NORM_SEG2,2,[3,6])
225         m1.finishInsertingCells();
226         m1.setCoords(c)
227         m1.checkCoherency()
228         m2=MEDCouplingUMesh.New();
229         m2.setMeshDimension(0);
230         m2.allocateCells(4);
231         m2.insertNextCell(NORM_POINT1,1,[1])
232         m2.insertNextCell(NORM_POINT1,1,[3])
233         m2.insertNextCell(NORM_POINT1,1,[2])
234         m2.insertNextCell(NORM_POINT1,1,[6])
235         m2.finishInsertingCells();
236         m2.setCoords(c)
237         m2.checkCoherency()
238         #
239         mm=MEDFileUMesh.New()
240         mm.setName("My2ndMEDCouplingMEDmesh")
241         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
242         mm.setCoords(c)
243         renumNode=DataArrayInt.New()
244         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
245         mm.setRenumFieldArr(1,renumNode)
246         mm.setMeshAtLevel(-1,m1,True);
247         mm.setMeshAtLevel(0,m,True);
248         mm.setMeshAtLevel(-2,m2,True);
249         mm.removeMeshAtLevel(-2)
250         mm.setMeshAtLevel(-2,m2,True);
251         # playing with groups
252         g1_2=DataArrayInt.New()
253         g1_2.setValues([2,3],2,1)
254         g1_2.setName("G1")
255         g2_2=DataArrayInt.New()
256         g2_2.setValues([2,0,3],3,1)
257         g2_2.setName("G2")
258         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
259         g1_1=DataArrayInt.New()
260         g1_1.setValues([0,2,1],3,1)
261         g1_1.setName("G1")
262         g2_1=DataArrayInt.New()
263         g2_1.setValues([0,2],2,1)
264         g2_1.setName("G2")
265         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
266         g1_N=DataArrayInt.New()
267         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
268         g1_N.setName("G1")
269         g2_N=DataArrayInt.New()
270         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
271         g2_N.setName("G2")
272         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
273         # check content of mm
274         t=mm.getGroupArr(0,"G1",True)
275         self.assertTrue(g1_2.isEqual(t));
276         t=mm.getGroupArr(0,"G2",True)
277         self.assertTrue(g2_2.isEqual(t));
278         t=mm.getGroupArr(-1,"G1",True)
279         self.assertTrue(g1_1.isEqual(t));
280         t=mm.getGroupArr(-1,"G2",True)
281         self.assertTrue(g2_1.isEqual(t));
282         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
283         #
284         mm.write(outFileName,2);
285         mm2=MEDFileMesh.New(outFileName)
286         res=mm.isEqual(mm2,1e-12)
287         self.assertTrue(res[0])
288         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
289         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
290         mm2.keepFamIdsOnlyOnLevs([3],[-1])
291         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
292             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
293             pass
294         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
295         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
296         #
297         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
298         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
299         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
300         self.assertTrue(not mm2.existsFamily("Family_-8"))
301         mm2.createGroupOnAll(-1,"GrpOnAllFace")
302         self.assertTrue(mm2.existsFamily("Family_-8"))
303         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
304         pass
305
306     #testing persistence of retrieved arrays
307     def testMEDMesh5(self):
308         fileName="Pyfile18.med"
309         mname="ExampleOfMultiDimW"
310         medmesh=MEDFileUMesh.New(fileName,mname)
311         m1_0=medmesh.getLevel0Mesh(True)
312         da1=medmesh.getFamilyFieldAtLevel(0)
313         del medmesh
314         self.assertEqual(20,m1_0.getNumberOfCells())
315         self.assertEqual(20,da1.getNumberOfTuples())
316         pass
317
318     def testMEDMesh6(self):
319         outFileName="MEDFileMesh5.med"
320         m=MEDFileCMesh.New()
321         m.setTime(-1,-1,2.3)
322         m1=MEDCouplingCMesh.New();
323         da=DataArrayDouble.New()
324         da.setValues([0.,1.,2.],3,1)
325         da.setInfoOnComponent(0,"XX [mm]")
326         m1.setCoordsAt(0,da)
327         da=DataArrayDouble.New()
328         da.setValues([0.,1.2],2,1)
329         da.setInfoOnComponent(0,"YY [km]")
330         m1.setCoordsAt(1,da)
331         da=DataArrayDouble.New()
332         da.setValues([0.,1.3],2,1)
333         da.setInfoOnComponent(0,"ZZ [um]")
334         m1.setCoordsAt(2,da)
335         m.setMesh(m1)
336         self.assertTrue(m[0].isEqual(m1,1e-12))
337         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
338         m.setName("myFirstCartMesh")
339         m.setDescription("mmmmpppppppp")
340         m.setTimeValue(2.3)
341         m.setTimeUnit("ms")
342         da=DataArrayInt.New()
343         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
344         m.setFamilyFieldArr(1,da)
345         m.setFamilyId("family1",1)
346         da=m.getFamilyArr(1,"family1")
347         expected1=[2,4,9]
348         self.assertEqual(expected1,da.getValues())
349         self.assertTrue(m.getUnivNameWrStatus())
350         m.write(outFileName,2);
351         mm=MEDFileMesh.New(outFileName)
352         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
353         self.assertTrue(isinstance(mm,MEDFileCMesh))
354         self.assertTrue(isinstance(mm.getUnivName(),str))
355         self.assertTrue(len(mm.getUnivName())!=0)
356         self.assertTrue(m.isEqual(mm,1e-12)[0])
357         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
358         m2=mm.getMesh()
359         tt=m.getTime()
360         m1.setTime(tt[2],tt[0],tt[1])
361         m1.setName(m.getName())
362         m1.setTimeUnit(m.getTimeUnit())
363         m1.setDescription(m.getDescription())
364         self.assertTrue(m2.isEqual(m1,1e-12));
365         pass
366
367     def testMEDMesh7(self):
368         fileName="Pyfile24.med"
369         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
370         m=MEDFileUMesh.New()
371         m.setCoords(m2.getCoords())
372         m.setMeshAtLevel(0,m2)
373         m.setMeshAtLevel(-1,m1)
374         m.setMeshAtLevel(-2,m0)
375         m.setFamilyFieldArr(0,f2)
376         m.setFamilyFieldArr(-1,f1)
377         m.setFamilyFieldArr(-2,f0)
378         m.setFamilyFieldArr(1,p)
379         m.setRenumFieldArr(0,n2)
380         m.setRenumFieldArr(-1,n1)
381         m.setRenumFieldArr(-2,n0)
382         nbOfFams=len(fns)
383         for i in xrange(nbOfFams):
384             m.addFamily(fns[i],fids[i])
385             pass
386         nbOfGrps=len(grpns)
387         for i in xrange(nbOfGrps):
388             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
389             pass
390         m.setName(m2.getName())
391         m.setDescription(m2.getDescription())
392         #
393         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
394         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
395         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
396         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
397         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
398         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
399         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
400         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
401         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
402         #
403         m.write(fileName,2)
404         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
405         pass
406
407     def funcToTestDelItem(self,ff):
408         del ff[[0.02,(3,4)]]
409         pass
410
411     #emulation of pointe.med file.
412     def testMEDField1(self):
413         mm=MEDFileMesh.New("Pyfile17.med")
414         mm.write("Pyfile17_bis.med",2)
415         ff=MEDFileFieldMultiTS("Pyfile17.med")
416         tsExpected=[[1,2],[3,4],[5,6]]
417         self.assertEqual(3,len(ff))
418         for pos,f1ts in enumerate(ff):
419             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
420             self.assertEqual(type(f1ts),MEDFileField1TS)
421             pass
422         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
423         self.assertEqual([3,4],ff[1].getTime()[:-1])
424         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
425         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
426         ff.write("Pyfile17_bis.med",0)
427         #
428         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
429         self.assertEqual([(1,2),(3,4),(5,6)],ts)
430         self.funcToTestDelItem(ff)
431         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
432         self.assertEqual([(1,2)],ts)
433         pass
434
435     #profiles
436     def testMEDField2(self):
437         mm=MEDFileMesh.New("Pyfile19.med")
438         mm.write("Pyfile19_bis.med",2)
439         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
440         ff.write("Pyfile19_bis.med",0)
441         self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
442         pass
443
444     #gauss points
445     def testMEDField3(self):
446         mm=MEDFileMesh.New("Pyfile13.med")
447         mm.write("Pyfile13_bis.med",2)
448         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
449         ff.write("Pyfile13_bis.med",0)
450         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
451         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
452         f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
453         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
454         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
455         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
456         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
457         ff4=MEDFileField1TS.New("Pyfile13.med")
458         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
459         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
460         pass
461
462     #gauss NE
463     def testMEDField4(self):
464         mm=MEDFileMesh.New("Pyfile14.med")
465         mm.write("Pyfile14_bis.med",2)
466         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
467         ff.write("Pyfile14_bis.med",0)
468         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
469         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
470         f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
471         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
472         pass
473
474     # MEDField get/set on pointe.med
475     def testMEDField5(self):
476         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
477         f=ff.getFieldAtLevel(ON_CELLS,0)
478         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
479         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
480         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
481         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
482         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
483         # no with renumbering
484         f=ff.getFieldAtLevel(ON_CELLS,0,1)
485         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
486         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
487         f=ff.getFieldAtLevel(ON_CELLS,0,3)
488         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
489         f=ff.getFieldAtLevel(ON_CELLS,0,2)
490         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
491         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
492         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
493         pass
494
495     # MEDField get/set on profiles nodes
496     def testMEDField6(self):
497         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
498         its=ff.getIterations()
499         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
500         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
501         f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
502         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
503         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
504         its=ff.getIterations()
505         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
506         f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
507         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
508         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
509         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
510         pass
511
512     # MEDField get/set on profiles cells
513     def testMEDField7(self):
514         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
515         its=ff.getIterations()
516         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
517         f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
518         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
519         pass
520
521     #first test of assignation. No profile and types sorted by type.
522     def testMEDField8(self):
523         fname="Pyfile25.med"
524         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
525         m1=f1.getMesh()
526         mm1=MEDFileUMesh.New()
527         mm1.setCoords(m1.getCoords())
528         mm1.setMeshAtLevel(0,m1)
529         mm1.setName(m1.getName())
530         mm1.write(fname,2)
531         ff1=MEDFileField1TS.New()
532         ff1.setFieldNoProfileSBT(f1)
533         ff1.write(fname,0)
534         f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
535         itt,orr,ti=ff1.getTime()
536         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
537         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
538         ff1.setTime(3,4,2.3)
539         itt,orr,ti=ff1.getTime()
540         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
541         da,infos=ff1.getUndergroundDataArrayExt()
542         f2.getArray().setName(da.getName())#da has the same name than f2
543         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
544         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
545         #
546         fname="Pyfile26.med"
547         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
548         m1=f1.getMesh()
549         mm1=MEDFileUMesh.New()
550         mm1.setCoords(m1.getCoords())
551         mm1.setMeshAtLevel(0,m1)
552         mm1.setName(m1.getName())
553         mm1.write(fname,2)
554         ff1=MEDFileField1TS.New()
555         ff1.setFieldNoProfileSBT(f1)
556         nv=1456.
557         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
558         ff1.write(fname,0)
559         f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
560         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
561         f1.getArray().setIJ(0,0,nv)
562         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
563         #
564         fname="Pyfile27.med"
565         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
566         m1=f1.getMesh()
567         mm1=MEDFileUMesh.New()
568         mm1.setCoords(m1.getCoords())
569         mm1.setMeshAtLevel(0,m1)
570         mm1.setName(m1.getName())
571         mm1.write(fname,2)
572         ff1=MEDFileField1TS.New()
573         ff1.setFieldNoProfileSBT(f1)
574         ff1.write(fname,0)
575         f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
576         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
577         da,infos=ff1.getUndergroundDataArrayExt()
578         f2.getArray().setName(da.getName())#da has the same name than f2
579         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
580         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
581         #
582         fname="Pyfile28.med"
583         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
584         f1InvalidCpy=f1.deepCpy()
585         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
586         f1InvalidCpy2=f1.deepCpy()
587         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
588         m1=f1.getMesh()
589         mm1=MEDFileUMesh.New()
590         mm1.setCoords(m1.getCoords())
591         mm1.setMeshAtLevel(0,m1)
592         mm1.setName(m1.getName())
593         mm1.write(fname,2)
594         ff1=MEDFileField1TS.New()
595         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
596         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
597         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
598         ff1.setFieldNoProfileSBT(f1)
599         ff1.write(fname,0)
600         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
601         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
602         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
603         sbt=ff2.getFieldSplitedByType2()
604         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
605         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
606         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
607         self.assertEqual(6,loc1.getNumberOfPointsInCells())
608         self.assertEqual(3,loc1.getNumberOfGaussPoints())
609         self.assertEqual(2,loc1.getDimension())
610         da,infos=ff2.getUndergroundDataArrayExt()
611         f2.getArray().setName(da.getName())#da has the same name than f2
612         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
613         self.assertEqual(53,da.getNumberOfTuples())
614         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)
615         #
616         pass
617     
618     def testMEDFileData1(self):
619         fname="Pyfile29.med"
620         d=MEDFileData.New()
621         #
622         m1=MEDLoaderDataForTest.build1DMesh_1()
623         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
624         mmm1=MEDFileMeshMultiTS.New() ;
625         mmm1.setOneTimeStep(mm1)
626         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
627         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
628         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
629         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
630         d.setMeshes(ms)
631         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
632             self.assertEqual(name,mmm.getName())
633             self.assertEqual(type(mmm),MEDFileUMesh)
634             pass
635         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
636         #
637         ff1=MEDFileFieldMultiTS.New()
638         ff21=MEDFileFieldMultiTS.New()
639         ff22=MEDFileFieldMultiTS.New()
640         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
641         f1.getArray().setInfoOnComponent(0,"power [kW]")
642         ff1.appendFieldNoProfileSBT(f1)
643         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
644         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
645         ff21.appendFieldNoProfileSBT(f21)
646         f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
647         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
648         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
649         ff22.appendFieldNoProfileSBT(f22)
650         fs=MEDFileFields.New()
651         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
652         for name,fmts in zip(["f1","f21","f22"],fs):
653             self.assertEqual(name,fmts.getName())
654             pass
655         d.setFields(fs)
656         #
657         fname2="Pyfile29_2.med"
658         d.write(fname2,2)
659         #
660         d2=MEDFileData.New(fname2)
661         self.assertEqual(2,d2.getNumberOfMeshes())
662         self.assertEqual(3,d2.getNumberOfFields())
663         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
664         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
665         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
666         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
667         self.assertTrue(m1.isEqual(m1bis,1e-12))
668         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
669         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
670         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
671         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
672         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
673         pass
674     
675     def testMEDField9(self):
676         # first test field profile WR. Full type but with some type missing
677         fname="Pyfile30.med"
678         m1=MEDLoaderDataForTest.build2DMesh_3()
679         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
680         mm1.write(fname,2)
681         ff1=MEDFileField1TS.New()
682         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
683         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
684         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.
685         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
686         #
687         ff1.setFieldProfile(f1,mm1,0,da)
688         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
689         ff1=ff1.deepCpy()
690         ff1.write(fname,0)
691         #
692         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
693         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
694         self.assertTrue(vals.isEqual(d,1e-14))
695         #
696         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
697         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
698         ff2.deepCpyGlobs(ff3)
699         sbt=ff2.getFieldSplitedByType2()
700         self.assertEqual(3,sbt[0][0])#TRI3
701         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
702         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
703         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
704         self.assertEqual(4,sbt[1][0])#QUAD4
705         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
706         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
707         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
708         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
709         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
710         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
711         self.assertTrue(vals.isEqual(d,1e-14))
712         pass
713     
714     def testMEDField10(self):
715         fname="Pyfile31.med"
716         m1=MEDLoaderDataForTest.build2DMesh_1()
717         m1.renumberCells([0,1,4,2,3,5],False)
718         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
719         mm1.write(fname,2)
720         ff1=MEDFileFieldMultiTS.New()
721         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
722         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
723         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.
724         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
725         #
726         ff1.appendFieldProfile(f1,mm1,0,da)
727         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
728         ff1.appendFieldProfile(f1,mm1,0,da)
729         ff1=ff1.deepCpy()
730         ff1.write(fname,0)
731         #
732         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
733         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
734         self.assertTrue(vals.isEqual(e,1e-14))
735         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
736         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
737         self.assertTrue(vals.isEqual(d,1e-14))
738         #
739         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
740         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
741         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
742         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
743         self.assertTrue(vals.isEqual(e,1e-14))
744         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
745         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
746         self.assertTrue(vals.isEqual(d,1e-14))
747         pass
748     
749     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
750     def testMEDField11(self):
751         fname="Pyfile32.med"
752         m1=MEDLoaderDataForTest.build2DMesh_1()
753         m1.renumberCells([0,1,4,2,3,5],False)
754         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
755         mm1.write(fname,2)
756         ff1=MEDFileField1TS.New()
757         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
758         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759         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.
760         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
761         #
762         ff1.setFieldProfile(f1,mm1,0,da)
763         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
764         ff1.write(fname,0)
765         #
766         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
767         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
768         self.assertTrue(vals.isEqual(d,1e-14))
769         ## #
770         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
771         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
772         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
773         self.assertTrue(vals.isEqual(d,1e-14))
774         pass
775
776     def testMEDField12(self):
777         fname="Pyfile33.med"
778         m1=MEDLoaderDataForTest.build2DMesh_1()
779         m1.renumberCells([0,1,4,2,3,5],False)
780         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
781         mm1.write(fname,2)
782         ff1=MEDFileFieldMultiTS.New()
783         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
784         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
785         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.
786         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
787         #
788         ff1.appendFieldProfile(f1,mm1,0,da)
789         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
790         ff1.appendFieldProfile(f1,mm1,0,da)
791         ff1.write(fname,0)
792         #
793         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
794         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
795         self.assertTrue(vals.isEqual(e,1e-14))
796         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
797         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
798         self.assertTrue(vals.isEqual(d,1e-14))
799         #
800         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
801         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
802         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
803         self.assertTrue(vals.isEqual(e,1e-14))
804         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
805         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
806         self.assertTrue(vals.isEqual(d,1e-14))
807         pass
808
809     def testMEDField13(self):
810         fname="Pyfile34.med"
811         m1=MEDLoaderDataForTest.build2DMesh_1()
812         m1.renumberCells([0,1,4,2,3,5],False)
813         tmp=m1.getName();
814         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
815         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
816         mm1.write(fname,2)
817         ff1=MEDFileField1TS.New()
818         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
819         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
820         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.
821         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
822         #
823         ff1.setFieldProfile(f1,mm1,0,da)
824         ff1.write(fname,0)
825         #
826         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
827         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
828         self.assertTrue(vals.isEqual(d,1e-14))
829         #
830         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
831         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
832         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
833         self.assertTrue(vals.isEqual(d,1e-14))
834         pass
835
836     def testMEDField14(self):
837         fname="Pyfile35.med"
838         m1=MEDLoaderDataForTest.build2DMesh_1()
839         m1.renumberCells([0,1,4,2,3,5],False)
840         tmp=m1.getName();
841         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
842         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
843         mm1.write(fname,2)
844         ff1=MEDFileFieldMultiTS.New()
845         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
846         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
847         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.
848         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
849         #
850         ff1.appendFieldProfile(f1,mm1,0,da)
851         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
852         ff1.appendFieldProfile(f1,mm1,0,da)
853         ff1.write(fname,0)
854         #
855         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
856         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
857         self.assertTrue(vals.isEqual(d,1e-14))
858         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
859         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
860         self.assertTrue(vals.isEqual(e,1e-14))
861         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
862         #
863         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
864         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
865         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
866         self.assertTrue(vals.isEqual(d,1e-14))
867         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
868         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
869         self.assertTrue(vals.isEqual(e,1e-14))
870         pass
871     # 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.
872     # 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
873     # 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 !
874     def testMEDField15(self):
875         fname="Pyfile36.med"
876         m0=MEDLoaderDataForTest.build2DMesh_1()
877         m0.renumberCells([0,1,4,2,3,5],False)
878         tmp=m0.getName();
879         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
880         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
881         ff1=MEDFileField1TS.New()
882         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
883         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
884         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.
885         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
886         #
887         ff1.setFieldProfile(f1,mm1,0,da)
888         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
889         mm1.write(fname,2)
890         ff1.write(fname,0)
891         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
892         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
893         self.assertTrue(p1.isIdentity())
894         self.assertEqual(5,p1.getNumberOfTuples())
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.deepCpy()
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.deepCpy()
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=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1074         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1075         f4=MEDLoader.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.checkCoherency()
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.checkCoherency()
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.checkCoherency()
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.checkCoherency()
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.checkCoherency()
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 testDuplicateNodesOnM1Group1(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.duplicateNodesOnM1Group("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 testDuplicateNodesOnM1Group2(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.duplicateNodesOnM1Group("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 testBasicConstructors(self):
1335         fname="Pyfile18.med"
1336         m=MEDFileMesh.New(fname)
1337         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1338         m=MEDFileMesh.New(fname)
1339         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1340         m=MEDFileUMesh(fname)
1341         m=MEDFileUMesh()
1342         self.testMEDMesh6()
1343         m=MEDFileCMesh("MEDFileMesh5.med")
1344         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1345         m=MEDFileCMesh()
1346         m=MEDFileMeshMultiTS()
1347         m=MEDFileMeshMultiTS(fname)
1348         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1349         m=MEDFileMeshes()
1350         m=MEDFileMeshes(fname)
1351         m=MEDFileField1TS()
1352         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1353         m=MEDFileFieldMultiTS()
1354         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1355         m=MEDFileFields()
1356         m=MEDFileFields(fname)
1357         m=MEDFileData()
1358         m=MEDFileData(fname)
1359         #
1360         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1361         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1362         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1363         m=MEDCouplingCMesh()
1364         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1365         m=MEDCouplingFieldTemplate(ON_NODES)
1366         m=MEDCouplingMultiFields([])
1367         m=MEDCouplingFieldOverTime([])
1368         pass
1369
1370     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1371     def testBugSemiPartialField(self):
1372         fname="Pyfile46.med"
1373         m=MEDLoaderDataForTest.build2DMesh_3()
1374         m=m[:10] ; m.setName("mesh")
1375         f=m.getMeasureField(ON_CELLS)
1376         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1377         f.setTime(5.5,3,4)
1378         f.setName("SemiPartialField")
1379         #
1380         f1=f[:6] ; f1.getMesh().setName(m.getName())
1381         f2=f[6:] ; f2.getMesh().setName(m.getName())
1382         #
1383         mm=MEDFileUMesh.New()
1384         mm.setMeshAtLevel(0,m)
1385         ff=MEDFileField1TS.New()
1386         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1387         mm.write(fname,2)
1388         ff.write(fname,0)
1389         #
1390         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1391         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1392         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1393         #
1394         fread.checkCoherency()
1395         fread2.checkCoherency()
1396         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1397         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1398         pass
1399
1400     def testUnPolyze1(self):
1401         fname="Pyfile47.med"
1402         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1403         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]
1404         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1405         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]]))
1406         mm.write(fname,2)
1407         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1408         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1409         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1410         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1411         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1412         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1413         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1414         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1415         # to test
1416         mm.setRenumFieldArr(0,None)
1417         mm.setFamilyFieldArr(-1,None)
1418         pass
1419
1420     def testUnPolyze2(self):
1421         fname="Pyfile48.med"
1422         mfd=MEDFileData.New()
1423         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1424         meshes=MEDFileMeshes.New()
1425         meshes.pushMesh(mm)
1426         mfd.setMeshes(meshes)
1427         fields=MEDFileFields.New()
1428         mfd.setFields(fields)
1429         ff=MEDFileFieldMultiTS.New()
1430         fields.pushField(ff)
1431         #
1432         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1433         f0_0.setTime(9.5,3,4)
1434         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1435         f0_0.setArray(da)
1436         f0_0.setMesh(mm.getMeshAtLevel(0))
1437         ff.appendFieldNoProfileSBT(f0_0)
1438         ff0=ff.getTimeStepAtPos(0)
1439         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1440         f0_1.setTime(9.5,3,4)
1441         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1442         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1443         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1444         f0_1.setArray(da)
1445         ff0.setFieldProfile(f0_1,mm,0,pfl)
1446         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1447         f0_2.setTime(9.5,3,4)
1448         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1449         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
1450         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1451         f0_2.setArray(da)
1452         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1453         mfd.getFields().shallowCpyGlobs(ff0)
1454         #
1455         mfd.unPolyzeMeshes()
1456         #
1457         fmts=mfd.getFields()[0]
1458         self.assertEqual(fmts.getNumberOfTS(),1)
1459         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1460         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1461         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))])
1462         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1463         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1464         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1465         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1466         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1467         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1468         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1469         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))
1470         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1471         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1472         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1473         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1474         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1475         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])
1476         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1477         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1478         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1479         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])
1480         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1481         #
1482         mfd.write(fname,2)
1483         pass
1484
1485     def testGaussWriteOnPfl1(self):
1486         fname="Pyfile49.med"
1487         fname2="Pyfile50.med"
1488         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1489         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1490         mQ8.allocateCells(1)
1491         mQ8.insertNextCell(NORM_QUAD8,range(8))
1492         mQ8.finishInsertingCells()
1493         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1494         mQ4.allocateCells(1)
1495         mQ4.insertNextCell(NORM_QUAD4,range(4))
1496         mQ4.finishInsertingCells()
1497         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1498         mT3.allocateCells(1)
1499         mT3.insertNextCell(NORM_TRI3,range(3))
1500         mT3.finishInsertingCells()
1501         
1502         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.]]
1503         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1504         ms[:]=(elt.deepCpy() for elt in ms)
1505         for m,t in zip(ms,tr):
1506             d=m.getCoords() ; d+= t
1507             pass
1508         m=MEDCouplingUMesh.MergeUMeshes(ms)
1509         m.setName("mesh")
1510         m2=m[:13] ; m2.setName(m.getName())
1511         ### 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.
1512         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1513         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1514         f.setMesh(m2)
1515         f.setTime(4.5,1,2)
1516         da=DataArrayDouble(34) ; da.iota(3.)
1517         f.setArray(da)
1518         f.setName("fieldCellOnPflWithoutPfl")
1519         fInvalid=f.deepCpy()
1520         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])
1521         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])
1522         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])
1523         f.checkCoherency()
1524         fInvalid2=fInvalid.deepCpy()
1525         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1526         #
1527         mm=MEDFileUMesh()
1528         mm.setMeshAtLevel(0,m)
1529         mm.write(fname,2)
1530         #
1531         f1ts=MEDFileField1TS.New()
1532         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1533         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1534         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1535         f1ts.setFieldProfile(f,mm,0,pfl)
1536         f1ts.write(fname,0)
1537         #
1538         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1539         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1540         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1541         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1542         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1543         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1544         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1545         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1546         #
1547         dataRead=MEDFileData.New(fname)
1548         mRead=dataRead.getMeshes()[0]
1549         f1tsRead=dataRead.getFields()[0][0]
1550         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1551         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1552         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1553         f2_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1554         f2_bis.checkCoherency()
1555         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1556         #
1557         MEDLoader.WriteField(fname2,f,True)
1558         f2_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1559         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1560         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1561         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1562         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1563         m2=m[pfl] ; m2.setName(m.getName())
1564         f.setMesh(m2)
1565         f.setTime(4.5,1,2)
1566         da=DataArrayDouble(35) ; da.iota(3.)
1567         f.setArray(da)
1568         f.setName("fieldCellOnPflWithoutPfl2")
1569         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1570         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])
1571         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])
1572         f.checkCoherency()
1573         #
1574         mm=MEDFileUMesh()
1575         mm.setMeshAtLevel(0,m)
1576         mm.write(fname,2)
1577         f1ts=MEDFileField1TS.New()
1578         f1ts.setFieldProfile(f,mm,0,pfl)
1579         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1580         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1581         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1582         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1583         f1ts.write(fname,0)
1584         dataRead=MEDFileData.New(fname)
1585         mRead=dataRead.getMeshes()[0]
1586         f1tsRead=dataRead.getFields()[0][0]
1587         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1588         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1589         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1590         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1591         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1592         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1593         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1594         #
1595         MEDLoader.WriteField(fname2,f,True)
1596         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1597         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1598         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1599         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1600         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1601         f.setMesh(m)
1602         f.setTime(4.5,1,2)
1603         da=DataArrayDouble(60) ; da.iota(3.)
1604         f.setArray(da)
1605         f.setName("fieldCellWithoutPfl")
1606         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])
1607         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])
1608         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])
1609         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])
1610         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])
1611         f.checkCoherency()
1612         mm=MEDFileUMesh()
1613         mm.setMeshAtLevel(0,m) 
1614         f1ts=MEDFileField1TS.New()
1615         f1ts.setFieldNoProfileSBT(f)
1616         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1617         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1618         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1619         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1620         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1621         mm.write(fname,2)
1622         f1ts.write(fname,0)
1623         #
1624         dataRead=MEDFileData.New(fname)
1625         mRead=dataRead.getMeshes()[0]
1626         f1tsRead=dataRead.getFields()[0][0]
1627         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1628         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1629         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1630         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1631         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1632         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1633         #
1634         MEDLoader.WriteField(fname2,f,True)
1635         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1636         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1637         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1638         pass
1639
1640     # Testing profile on nodes when the profile is identity but not on all nodes.
1641     def testMEDFieldPflOnNode1(self):
1642         fname="Pyfile51.med"
1643         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)
1644         m0=MEDCouplingUMesh("Mesh",2)
1645         m0.allocateCells(5)
1646         m0.insertNextCell(NORM_TRI3,[1,4,2])
1647         m0.insertNextCell(NORM_TRI3,[4,5,2])
1648         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1649         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1650         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1651         m0.finishInsertingCells()
1652         m0.setCoords(coo)
1653         m1=MEDCouplingUMesh(m0.getName(),1)
1654         m1.allocateCells(9)
1655         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1656         for i in xrange(9):
1657             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1658             pass
1659         m1.finishInsertingCells()
1660         m1.setCoords(coo)
1661         #
1662         m=MEDFileUMesh()
1663         m.setMeshAtLevel(0,m0)
1664         m.setMeshAtLevel(-1,m1)
1665         #
1666         dt=3 ; it=2 ; tim=4.5
1667         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1668         fieldNode0.setName("fieldNode0")
1669         fieldNode0.setTime(tim,dt,it)
1670         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1671         arr=DataArrayDouble([10,11,12,13,14])
1672         fieldNode0.setArray(arr)
1673         f0=MEDFileField1TS()
1674         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1675         m.write(fname,2) ; f0.write(fname,0)
1676         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1677         fieldNode1.setName("fieldNode1")
1678         fieldNode1.setTime(tim,dt,it)
1679         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1680         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1681         fieldNode1.setArray(arr1)
1682         f1=MEDFileField1TS()
1683         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1684         f1.write(fname,0)
1685         del m,f0,m0,m1,f1
1686         ## Reading from file
1687         m=MEDFileMesh.New(fname)
1688         m0=m.getMeshAtLevel(0)
1689         m00=m0.deepCpy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1690         fieldNode0.setMesh(m00)
1691         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1692         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1693         ff0_1.checkCoherency()
1694         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1695         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1696         ff0_2.checkCoherency()
1697         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1698         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1699         ff0_3.checkCoherency()
1700         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1701         ff0_4=MEDLoader.ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1702         ff0_4.checkCoherency()
1703         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1704         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1705         m1=m.getMeshAtLevel(-1)
1706         m10=m1.deepCpy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1707         fieldNode1.setMesh(m10)
1708         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1709         ff1_1.checkCoherency()
1710         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1711         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1712         ff1_2.checkCoherency()
1713         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1714         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1715         ff1_3.checkCoherency()
1716         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1717         ff1_4=MEDLoader.ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1718         ff1_4.checkCoherency()
1719         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1720         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]
1721         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]
1722         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]
1723         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1724         arr_r.setName(fieldNode1.getArray().getName())
1725         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1726         pfl1_r.setName(pfl1.getName())
1727         self.assertTrue(pfl1_r.isEqual(pfl1))
1728         pass
1729     
1730         # Testing profile on nodes when the profile is identity but not on all nodes.
1731     def testMEDFieldPflOnCell1(self):
1732         fname="Pyfile52.med"
1733         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)
1734         m0=MEDCouplingUMesh("Mesh",2)
1735         m0.allocateCells(5)
1736         m0.insertNextCell(NORM_TRI3,[1,4,2])
1737         m0.insertNextCell(NORM_TRI3,[4,5,2])
1738         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1739         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1740         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1741         m0.finishInsertingCells()
1742         m0.setCoords(coo)
1743         m1=MEDCouplingUMesh(m0.getName(),1)
1744         m1.allocateCells(9)
1745         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1746         for i in xrange(9):
1747             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1748             pass
1749         m1.finishInsertingCells()
1750         m1.setCoords(coo)
1751         #
1752         m=MEDFileUMesh()
1753         m.setMeshAtLevel(0,m0)
1754         m.setMeshAtLevel(-1,m1)
1755         #
1756         dt=3 ; it=2 ; tim=4.5
1757         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1758         fieldCell0.setName("fieldCell0")
1759         fieldCell0.setTime(tim,dt,it)
1760         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1761         arr=DataArrayDouble([10,11,12])
1762         fieldCell0.setArray(arr)
1763         f0=MEDFileField1TS()
1764         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1765         m.write(fname,2) ; f0.write(fname,0)
1766         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1767         fieldCell1.setName("fieldCell1")
1768         fieldCell1.setTime(tim,dt,it)
1769         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1770         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1771         fieldCell1.setArray(arr1)
1772         f1=MEDFileField1TS()
1773         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1774         f1.write(fname,0)
1775         del m,f0,m0,m1,f1
1776         ## Reading from file
1777         m=MEDFileMesh.New(fname)
1778         m0=m.getMeshAtLevel(0)
1779         m00=m0.deepCpy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1780         fieldCell0.setMesh(m00)
1781         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1782         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1783         ff0_1.checkCoherency()
1784         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1785         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1786         ff0_2.checkCoherency()
1787         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1788         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1789         ff0_3.checkCoherency()
1790         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1791         ff0_4=MEDLoader.ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1792         ff0_4.checkCoherency()
1793         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1794         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1795         m1=m.getMeshAtLevel(-1)
1796         m10=m1.deepCpy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1797         fieldCell1.setMesh(m10)
1798         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1799         ff1_1.checkCoherency()
1800         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1801         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1802         ff1_2.checkCoherency()
1803         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1804         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1805         ff1_3.checkCoherency()
1806         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1807         ff1_4=MEDLoader.ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1808         ff1_4.checkCoherency()
1809         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1810         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]
1811         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]
1812         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]
1813         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1814         arr_r.setName(fieldCell1.getArray().getName())
1815         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1816         pfl1_r.setName(pfl1.getName())
1817         self.assertTrue(pfl1_r.isEqual(pfl1))
1818         pass
1819
1820     def testMEDFileUMeshZipCoords1(self):
1821         m=MEDFileUMesh()
1822         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1823         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])
1824         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1825         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1826         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1827         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1828         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1829         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1830         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1831         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1832         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1833         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1834         o2n=m.zipCoords()
1835         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1836         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1837         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1838         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1839         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1840         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1841         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1842         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1843         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1844         pass
1845
1846     def testMEDUMeshAddNodeGroup1(self):
1847         fname="Pyfile53.med"
1848         m=MEDFileUMesh()
1849         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1850         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])
1851         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1852         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1853         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1854         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1855         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1856         #
1857         mm=m.deepCpy()
1858         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
1859         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
1860         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1861         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1862         mm.setFamilyId("MyFam",2)
1863         mm.setFamilyId("MyOtherFam",3)
1864         mm.setFamilyId("MyOther-1",-1)
1865         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1866         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1867         #
1868         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1869         mm.addNodeGroup(daTest)
1870         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1871         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1872         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1873             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1874             pass
1875         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1876         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1877         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1878         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1879         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1880             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1881             pass
1882         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1883         da=DataArrayInt([3,12]) ; da.setName("grp0")
1884         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1885         da.setValues([1])
1886         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1887         mm.write(fname,2)
1888         mm=MEDFileMesh.New(fname)
1889         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1890         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1891         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1892             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1893             pass
1894         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1895         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1896         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1897         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1898         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1899             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1900             pass
1901         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1902         da=DataArrayInt([3,12]) ; da.setName("grp0")
1903         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1904         da.setValues([1])
1905         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1906         pass
1907
1908     def testMEDUMeshAddGroup1(self):
1909         fname="Pyfile54.med"
1910         m=MEDFileUMesh()
1911         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1912         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
1913         for i in xrange(7):
1914             m0.insertNextCell(NORM_TRI3,[1,2,1])
1915             pass
1916         for i in xrange(4):
1917             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
1918             pass
1919         for i in xrange(2):
1920             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
1921             pass
1922         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1923         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1924         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1925         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1926         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1927         #
1928         mm=m.deepCpy()
1929         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
1930         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
1931         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1932         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1933         mm.setFamilyId("MyFam",2)
1934         mm.setFamilyId("MyOtherFam",3)
1935         mm.setFamilyId("MyOther-1",-1)
1936         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1937         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1938         #
1939         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1940         mm.addGroup(0,daTest)
1941         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1942         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1943         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1944             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1945             pass
1946         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1947         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1948         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1949         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1950         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1951             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1952             pass
1953         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
1954         da=DataArrayInt([3,12]) ; da.setName("grp0")
1955         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1956         da.setValues([1])
1957         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1958         mm.write(fname,2)
1959         mm=MEDFileMesh.New(fname)
1960         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1961         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1962         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1963             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1964             pass
1965         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1966         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1967         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1968         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1969         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1970             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1971             pass
1972         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
1973         da=DataArrayInt([3,12]) ; da.setName("grp0")
1974         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1975         da.setValues([1])
1976         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1977         pass
1978
1979     def testHeapMem1(self):
1980         a=DataArrayInt() ; aa=a.getHeapMemorySize()
1981         a.alloc(0,1)
1982         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
1983         #
1984         m=MEDCouplingCMesh()
1985         arr=DataArrayDouble(10,1) ; arr.iota(0)
1986         m.setCoords(arr,arr)
1987         m=m.buildUnstructured()
1988         m.setName("mm")
1989         f=m.getMeasureField(ON_CELLS)
1990         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100+4*strMulFac))
1991         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100+8*strMulFac))
1992         #
1993         mm=MEDFileUMesh()
1994         mm.setMeshAtLevel(0,m)
1995         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100+10*strMulFac))
1996         ff=MEDFileField1TS()
1997         ff.setFieldNoProfileSBT(f)
1998         self.assertIn(ff.getHeapMemorySize(),xrange(771-40,771+21+(4+1)*strMulFac))
1999         #
2000         fff=MEDFileFieldMultiTS()
2001         fff.appendFieldNoProfileSBT(f)
2002         self.assertIn(fff.getHeapMemorySize(),xrange(815-50,815+30+(6+2)*strMulFac))
2003         f.setTime(1.,0,-1)
2004         fff.appendFieldNoProfileSBT(f)
2005         self.assertIn(fff.getHeapMemorySize(),xrange(1594-90,1594+50+(10+1)*strMulFac))
2006         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(771-40,771+20+(4+1)*strMulFac))
2007         f2=f[:50]
2008         f2.setTime(2.,1,-1)
2009         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2010         fff.appendFieldProfile(f2,mm,0,pfl)
2011         self.assertIn(fff.getHeapMemorySize(),xrange(2348-130,2348+100+(10+2)*strMulFac))
2012         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(),xrange(204-10,204+10+2*strMulFac))
2013         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(738-50,738+30+4*strMulFac))
2014         pass
2015
2016     def testCurveLinearMesh1(self):
2017         fname="Pyfile55.med"
2018         mesh=MEDCouplingCurveLinearMesh();
2019         mesh.setTime(2.3,4,5);
2020         mesh.setTimeUnit("us");
2021         mesh.setName("Example of Cuve linear mesh");
2022         mesh.setDescription("buildCLMesh");
2023         a1=DataArrayDouble(3*20,1);
2024         a1.iota(7.) ; a1.rearrange(3);
2025         mesh.setCoords(a1);
2026         mesh.setNodeGridStructure([4,5]);
2027         mesh.checkCoherency();
2028         #
2029         m=MEDFileCurveLinearMesh()
2030         m.setMesh(mesh)
2031         d=DataArrayInt(20) ; d.iota(4)
2032         m.setFamilyFieldArr(1,d)
2033         d3=DataArrayInt(20) ; d3.iota(400)
2034         m.setRenumFieldArr(1,d3)
2035         d2=DataArrayInt(12) ; d2.iota(40)
2036         m.setFamilyFieldArr(0,d2)
2037         d4=DataArrayInt(21) ; d4.iota(4000)
2038         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2039         d4.popBackSilent()
2040         m.setRenumFieldArr(1,d4)
2041         m.write(fname,2)
2042         #
2043         m1=MEDFileCurveLinearMesh(fname)
2044         mm=m1.getMesh()
2045         self.assertTrue(mm.isEqual(mesh,1e-12))
2046         self.assertEqual(mm.getSpaceDimension(),3)
2047         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2048         #
2049         m1=MEDFileMesh.New(fname)
2050         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2051         self.assertTrue(isinstance(m1.getUnivName(),str))
2052         self.assertTrue(len(m1.getUnivName())!=0)
2053         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2054         pass
2055
2056     def testParameters1(self):
2057         fname="Pyfile56.med"
2058         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2059         mm=MEDFileCMesh() ; mm.setMesh(m)
2060         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2061         data=MEDFileData()
2062         p=MEDFileParameters()
2063         data.setParams(p) ; data.setMeshes(ms)
2064         pts=MEDFileParameterMultiTS()
2065         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2066         pts.appendValue(1,2,3.4,567.89)
2067         pts.appendValue(2,3,5.6,999.123)
2068         pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2069         p.pushParam(pts) ; p.pushParam(pts2)
2070         data.write(fname,2)
2071         p2=MEDFileParameters(fname)
2072         self.assertTrue(p.isEqual(p2,1e-14)[0])
2073         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2074         p3=p.deepCpy()
2075         pts4=pts2.deepCpy()
2076         pts3=pts2.deepCpy()
2077         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2078         pts2.eraseTimeStepIds([0])
2079         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2080         del pts3[[3.4]]
2081         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2082         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2083         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2084         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2085         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2086         p=p3
2087         self.assertTrue(p.isEqual(p2,1e-14)[0])
2088         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2089         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2090         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2091         self.assertEqual(p.getParamsNames(),('A','B'))
2092         ptsr=MEDFileParameterMultiTS(fname,"B")
2093         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2094         ptsr=MEDFileParameterMultiTS(fname)
2095         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2096         p1tsr=MEDFileParameterDouble1TS(fname)
2097         self.assertEqual(p1tsr.getName(),"A")
2098         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2099         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2100         self.assertEqual(p1tsr.getName(),"B")
2101         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2102         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2103         self.assertEqual(p1tsr.getName(),"B")
2104         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2105         data2=MEDFileData(fname)
2106         self.assertEqual(2,data2.getNumberOfParams())
2107         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2108         pass
2109
2110     def testNamesOnCellAndNodesInMeshes1(self):
2111         fname="Pyfile58.med"
2112         fname2="Pyfile59.med"
2113         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2114         m1=m.buildDescendingConnectivity()[0]
2115         m1.sortCellsInMEDFileFrmt()
2116         #
2117         mm=MEDFileUMesh()
2118         mm.setMeshAtLevel(0,m)
2119         mm.setMeshAtLevel(-1,m1)
2120         namesCellL0=DataArrayAsciiChar(6,16)
2121         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2122         mm.setNameFieldAtLevel(0,namesCellL0)
2123         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.substr(2)])
2124         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2125         mm.setNameFieldAtLevel(-1,namesCellL1)
2126         namesNodes=namesCellL1.substr(4,16)
2127         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2128         mm.setNameFieldAtLevel(1,namesNodes)
2129         mm.write(fname,2)
2130         #
2131         mmr=MEDFileMesh.New(fname)
2132         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2133         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2134         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2135         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2136         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2137         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2138         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2139         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2140         mmCpy=mm.deepCpy()
2141         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2142         # remove names on nodes
2143         mmCpy.setNameFieldAtLevel(1,None)
2144         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2145         mm.setNameFieldAtLevel(1,None)
2146         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2147         mm.setNameFieldAtLevel(-1,None)
2148         mm.write(fname,2)
2149         mmr=MEDFileMesh.New(fname)
2150         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2151         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2152         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2153         #
2154         c=MEDCouplingCMesh()
2155         arr=DataArrayDouble([0.,1.1,2.3])
2156         c.setCoords(arr,arr)
2157         c.setName("cmesh")
2158         cc=MEDFileCMesh()
2159         cc.setMesh(c)
2160         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2161         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2162         cc.write(fname2,2)
2163         ccr=MEDFileMesh.New(fname2)
2164         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2165         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2166         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2167         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2168         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2169         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2170         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2171         ccCpy=cc.deepCpy()
2172         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2173         pass
2174
2175     def testToExportInExamples1(self):
2176         m=MEDCouplingCMesh()
2177         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2178         m.setCoords(arr,arr)
2179         m=m.buildUnstructured() ; m.setName("mesh")
2180         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2181         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2182         m2=m.computeSkin()
2183         mm=MEDFileUMesh()
2184         mm.setMeshAtLevel(0,m)
2185         mm.setMeshAtLevel(-1,m2)
2186         mm.setGroupsAtLevel(0,[grp1,grp2])
2187         mm.write("example.med",2)
2188         #
2189         m0=mm.getMeshAtLevel(0)
2190         m1=mm.getMeshAtLevel(-1)
2191         grp1=mm.getGroupArr(0,"grp1")
2192         grp2=mm.getGroupArr(0,"grp2")
2193         grps=[grp1,grp2]
2194         whichGrp=DataArrayInt(m0.getNumberOfCells())
2195         whichGrp.fillWithValue(-1)
2196         for grpId,grp in enumerate(grps):
2197             whichGrp[grp]=grpId
2198             pass
2199         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2200         e,f=a.areCellsIncludedIn(m1,2)
2201         self.assertTrue(e)
2202         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2203         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2204         c2.transformWithIndArr(whichGrp)
2205         splitOfM1=len(grps)*[None]
2206         for grpId,grp in enumerate(grps):
2207             tmp=c2.getIdsEqual(grpId)
2208             splitOfM1[grpId]=tmp
2209             pass
2210         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2211         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2212         pass
2213
2214     def testBugCorrection1(self):
2215         fs=MEDFileFields()
2216         fs.resize(3)
2217         self.assertEqual(fs[0],None)
2218         self.assertEqual(3,len(fs))
2219         pass
2220
2221     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2222         f1Name="Pyfile60.med"
2223         f2Name="Pyfile61.med"
2224         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2225         d1.write(f1Name,2)
2226         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2227         d2.write(f2Name,2)
2228         # reading and compare
2229         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2230         for mn in d1.getMeshes().getMeshesNames():
2231             m1=d1.getMeshes()[mn]
2232             m2=d2.getMeshes()[mn]
2233             for lev in m1.getNonEmptyLevels():
2234                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2235                 for grpName in grpsNames:
2236                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2237                     pass
2238                 pass
2239             pass
2240         for fieldn in d1.getFields().getFieldsNames():
2241             f1=d1.getFields()[fieldn]
2242             f2=d2.getFields()[fieldn]
2243             for it,order,tim in f1.getTimeSteps():
2244                 f1t=f1[it,order]
2245                 f2t=f2[it,order]
2246                 if len(f1t.getPflsReallyUsed())!=0:
2247                     # profile case
2248                     for lev in f1t.getNonEmptyLevels()[1]:
2249                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2250                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2251                         self.assertTrue(pfl1.isEqual(pfl2))
2252                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2253                         pass
2254                     pass
2255                 else:
2256                     # no profile case
2257                     for lev in f1t.getNonEmptyLevels()[1]:
2258                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2259                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2260                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2261                         pass
2262                     pass
2263                 pass
2264             pass
2265         pass
2266
2267     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2268         m=MEDCouplingCMesh()
2269         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2270         m.setCoords(arr,arr,arr)
2271         m=m.buildUnstructured()
2272         m2=m.buildDescendingConnectivity()[0]
2273         m.setName("mesh")
2274         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2275         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2276         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2277         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2278         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2279         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2280         mm=MEDFileUMesh()
2281         mm.setMeshAtLevel(0,m)
2282         mm.setGroupsAtLevel(0,[g1,g2])
2283         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2284         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2285         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2286         mm.normalizeFamIdsMEDFile()
2287         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2288         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2289         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2290         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2291         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2292         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2293         for g in mm.getGroupsOnSpecifiedLev(0):
2294             for f in mm.getFamiliesIdsOnGroup(g):
2295                 self.assertTrue(f<0)
2296                 pass
2297             pass
2298         #
2299         mm=MEDFileUMesh()
2300         mm.setMeshAtLevel(0,m)
2301         mm.setMeshAtLevel(-1,m2)
2302         mm.setGroupsAtLevel(0,[g1,g2])
2303         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2304         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2305         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2306         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2307         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2308         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2309         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2310         mm.normalizeFamIdsMEDFile()
2311         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2312         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2313         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2314         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2315         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2316         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2317         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2318         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2319         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2320         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2321         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2322         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2323         for lev in [0,-1]:
2324             for g in mm.getGroupsOnSpecifiedLev(lev):
2325                 for f in mm.getFamiliesIdsOnGroup(g):
2326                     self.assertTrue(f<0)
2327                     pass
2328                 pass
2329             pass
2330          #
2331         mm=MEDFileUMesh()
2332         mm.setMeshAtLevel(0,m)
2333         mm.setMeshAtLevel(-1,m2)
2334         mm.setGroupsAtLevel(0,[g1,g2])
2335         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2336         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2337         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2338         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2339         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2340         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2341         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2342         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2343         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2344         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2345         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2346         mm.normalizeFamIdsMEDFile()
2347         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2348         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2349         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2350         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2351         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2352         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2353         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2354         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2355         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2356         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2357         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2358         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2359         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2360         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2361         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2362         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2363         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2364         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2365         for lev in [0,-1]:
2366             for g in mm.getGroupsOnSpecifiedLev(lev):
2367                 for f in mm.getFamiliesIdsOnGroup(g):
2368                     self.assertTrue(f<0)
2369                     pass
2370                 pass
2371             pass
2372         for g in mm.getGroupsOnSpecifiedLev(1):
2373             for f in mm.getFamiliesIdsOnGroup(g):
2374                 self.assertTrue(f>0)
2375                 pass
2376             pass
2377         pass
2378     
2379     def testNonRegressionMantis22212ChangeGrpName(self):
2380         fileName="Pyfile62.med"
2381         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2382         m=MEDFileUMesh.New()
2383         m.setCoords(m2.getCoords())
2384         m.setMeshAtLevel(0,m2)
2385         m.setMeshAtLevel(-1,m1)
2386         m.setMeshAtLevel(-2,m0)
2387         m.setFamilyFieldArr(0,f2)
2388         m.setFamilyFieldArr(-1,f1)
2389         m.setFamilyFieldArr(-2,f0)
2390         m.setFamilyFieldArr(1,p)
2391         nbOfFams=len(fns)
2392         for i in xrange(nbOfFams):
2393             m.addFamily(fns[i],fids[i])
2394             pass
2395         nbOfGrps=len(grpns)
2396         for i in xrange(nbOfGrps):
2397             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2398             pass
2399         m.setName(m2.getName())
2400         m.setDescription(m2.getDescription())
2401         m.write(fileName,2)
2402         #
2403         mm0=MEDFileMesh.New(fileName)
2404         mm1=MEDFileMesh.New(fileName)
2405         groupNamesIni=MEDLoader.GetMeshGroupsNames(fileName,"ma")
2406         for name in groupNamesIni:
2407             mm1.changeGroupName(name,name+'N')
2408             pass
2409         mm1.write(fileName,2)
2410         del mm1
2411         #
2412         mm2=MEDFileMesh.New(fileName)
2413         for name in groupNamesIni:
2414             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2415                 arr0=mm0.getGroupArr(lev,name)
2416                 arr2=mm2.getGroupArr(lev,name+'N')
2417                 arr0.setName(name+'N')
2418                 self.assertTrue(arr0.isEqual(arr2))
2419                 pass
2420             pass
2421         pass
2422
2423     def testInt32InMEDFileFieldStar1(self):
2424         fname="Pyfile63.med"
2425         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2426         arr=f1.getArray().convertToIntArr()
2427         f1.setArray(None)
2428         m1=f1.getMesh()
2429         mm1=MEDFileUMesh.New()
2430         mm1.setCoords(m1.getCoords())
2431         mm1.setMeshAtLevel(0,m1)
2432         mm1.setName(m1.getName())
2433         mm1.write(fname,2)
2434         ff1=MEDFileIntField1TS()
2435         ff1.setFieldNoProfileSBT(f1,arr)
2436         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2437         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2438         self.assertTrue(b.isEqual(arr))
2439         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2440         ff1.write(fname,0)
2441         ff2=MEDFileAnyTypeField1TS.New(fname)
2442         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2443         self.assertEqual(ff2.getTime(),[0,1,2.0])
2444         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2445         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2446         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2447         self.assertTrue(b.isEqual(arr))
2448         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2449         ff2.setTime(1,2,3.)
2450         c=ff2.getUndergroundDataArray() ; c*=2
2451         ff2.write(fname,0) # 2 time steps in 
2452         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2453         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2454         self.assertEqual(len(ffs1),2)
2455         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2456         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2457         self.assertTrue(b.isEqual(arr))
2458         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2459         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2460         self.assertTrue(b.isEqual(arr))
2461         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2462         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2463         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2464         self.assertTrue(b.isEqual(2*arr))
2465         f1.setTime(3.,1,2)
2466         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2467         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2468         for it in ffs1:
2469             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2470             bc+=b
2471             pass
2472         self.assertTrue(bc.isEqual(3*arr))
2473         nf1=MEDCouplingFieldDouble(ON_NODES)
2474         nf1.setTime(9.,10,-1)
2475         nf1.setMesh(f1.getMesh())
2476         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2477         nf1.setName("VectorFieldOnNodes")
2478         nff1=MEDFileIntField1TS.New()
2479         nff1.setFieldNoProfileSBT(nf1,narr)
2480         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2481         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2482         nff1.write(fname,0)
2483         #
2484         nf2=MEDCouplingFieldDouble(ON_NODES)
2485         nf2.setTime(19.,20,-11)
2486         nf2.setMesh(f1.getMesh())
2487         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2488         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2489         nff2=MEDFileIntField1TS.New()
2490         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2491         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2492         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2493         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2494         self.assertTrue(b.isEqual(npfl))
2495         self.assertTrue(a.isEqual(narr2))
2496         nff2.write(fname,0)
2497         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2498         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2499         self.assertTrue(b.isEqual(npfl))
2500         self.assertTrue(a.isEqual(narr2))
2501         #
2502         nf3=MEDCouplingFieldDouble(ON_NODES)
2503         nf3.setName("VectorFieldOnNodesDouble")
2504         nf3.setTime(29.,30,-21)
2505         nf3.setMesh(f1.getMesh())
2506         nf3.setArray(f1.getMesh().getCoords())
2507         nff3=MEDFileField1TS.New()
2508         nff3.setFieldNoProfileSBT(nf3)
2509         nff3.write(fname,0)
2510         fs=MEDFileFields(fname)
2511         self.assertEqual(len(fs),4)
2512         ffs=[it for it in fs]
2513         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2514         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2515         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2516         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2517         #
2518         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2519         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2520         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2521         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2522         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2523         #
2524         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2525         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2526         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2527         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2528         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2529         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2530         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2531         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2532         #
2533         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2534         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2535         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2536         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2537         pass
2538
2539     def testMEDFileFields1(self):
2540         fname="Pyfile64.med"
2541         f1=MEDCouplingFieldDouble(ON_NODES)
2542         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2543         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2544         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2545         f1.setMesh(m)
2546         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2547         f1.setArray(arr)
2548         f1.setName("Field1")
2549         ff1=MEDFileField1TS.New()
2550         ff1.setFieldNoProfileSBT(f1)
2551         self.assertEqual(ff1.getDtUnit(),"us")
2552         ff1.write(fname,0)
2553         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2554         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2555         #
2556         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2557         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2558         ff1s.setName("Field2")
2559         ff1s.write(fname,0)
2560         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2561         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2562         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2563         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2564         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2565         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2566         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2567         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2568         pass
2569
2570     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2571     def testMEDFileFields2(self):
2572         fname="Pyfile65.med"
2573         # to check that all is initialize 
2574         MEDFileField1TS().__str__()
2575         MEDFileFieldMultiTS().__str__()
2576         # building a mesh containing 4 tri3 + 5 quad4
2577         tri=MEDCouplingUMesh("tri",2)
2578         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2579         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2580         tris=[tri.deepCpy() for i in xrange(4)]
2581         for i,elt in enumerate(tris): elt.translate([i,0])
2582         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2583         quad=MEDCouplingUMesh("quad",2)
2584         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2585         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2586         quads=[quad.deepCpy() for i in xrange(5)]
2587         for i,elt in enumerate(quads): elt.translate([5+i,0])
2588         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2589         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2590         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2591         #
2592         fmts0_0=MEDFileFieldMultiTS()
2593         fmts0_1=MEDFileFieldMultiTS()
2594         # time steps
2595         for i in xrange(10):
2596             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2597             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2598             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2599             f.setTime(float(i+1)+0.1,i+1,-i-1)
2600             fmts0_0.appendFieldNoProfileSBT(f)
2601             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2602             self.assertEqual(fmts0_1.getName(),name1)
2603             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2604             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2605             if i>1:
2606                 # components names have been modified to generate errors
2607                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2608                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2609                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2610                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2611                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2612                 pass
2613             # add a mismatch of nb of compos
2614             pass
2615         fmts0_2=fmts0_0.deepCpy()
2616         fmts0_3=fmts0_0.deepCpy()
2617         fmts0_4=fmts0_0.deepCpy()
2618         fmts0_5=fmts0_0.shallowCpy()
2619         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)
2620         del fmts0_2[::2]
2621         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2622         del fmts0_3[[1.1,(6,-6),9]]
2623         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2624         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2625         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2626         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2627         fmts0_7=fmts0_4[::-3]
2628         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2629         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2630         #
2631         fs0=MEDFileFields()
2632         fs0.pushField(fmts0_0)
2633         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2634         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2635         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2636         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2637         fs0.write(fname,2)
2638         fs0=MEDFileFields(fname)
2639         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2640         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2641         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2642         del fs1[["2ndField",3]]
2643         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2644         fs2=fs0[[0,"4thField"]]
2645         self.assertTrue(isinstance(fs2,MEDFileFields))
2646         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2647         #
2648         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2649         pass
2650
2651     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2652     def testMEDFileFields3(self):
2653         fname="Pyfile66.med"
2654         # building a mesh containing 4 tri3 + 5 quad4
2655         tri=MEDCouplingUMesh("tri",2)
2656         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2657         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2658         tris=[tri.deepCpy() for i in xrange(4)]
2659         for i,elt in enumerate(tris): elt.translate([i,0])
2660         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2661         quad=MEDCouplingUMesh("quad",2)
2662         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2663         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2664         quads=[quad.deepCpy() for i in xrange(5)]
2665         for i,elt in enumerate(quads): elt.translate([5+i,0])
2666         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2667         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2668         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2669         #
2670         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2671         #
2672         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2673         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2674         fmts0_0=MEDFileFieldMultiTS()
2675         fmts0_1=MEDFileFieldMultiTS()
2676         # time steps
2677         for i in xrange(10):
2678             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2679             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2680             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2681             f.setTime(float(i+1)+0.1,i+1,-i-1)
2682             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2683             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2684             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2685             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2686             pass
2687         #
2688         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2689         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2690         fmts0_0.zipPflsNames()
2691         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2692         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2693         fmts0_2=fmts0_0.deepCpy()
2694         fmts0_3=fmts0_0.deepCpy()
2695         fmts0_4=fmts0_0.deepCpy()
2696         fs0=MEDFileFields()
2697         fs0.pushField(fmts0_0)
2698         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2699         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2700         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2701         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2702         #
2703         fmts0_5=MEDFileFieldMultiTS()
2704         for i in xrange(7):
2705             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2706             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2707             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2708             f.setTime(float(i+1)+0.1,i+1,-i-1)
2709             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2710             pass
2711         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2712         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2713         fs0.checkGlobsCoherency()
2714         fs0.write(fname,0)
2715         pass
2716     
2717     def testSplitComponents1(self):
2718         fname="Pyfile67.med"
2719         # building a mesh containing 4 tri3 + 5 quad4
2720         tri=MEDCouplingUMesh("tri",2)
2721         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2722         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2723         tris=[tri.deepCpy() for i in xrange(4)]
2724         for i,elt in enumerate(tris): elt.translate([i,0])
2725         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2726         quad=MEDCouplingUMesh("quad",2)
2727         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2728         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2729         quads=[quad.deepCpy() for i in xrange(5)]
2730         for i,elt in enumerate(quads): elt.translate([5+i,0])
2731         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2732         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2733         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2734         #
2735         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2736         #
2737         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2738         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2739         fs=MEDFileFields()
2740         fmts0_1=MEDFileFieldMultiTS()
2741         # time steps
2742         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2743         for i in xrange(10):
2744             name1="1stField"
2745             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2746             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2747             f.setTime(float(i+1)+0.1,i+1,-i-1)
2748             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2749             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2750             pass
2751         fs.pushField(fmts0_1)
2752         self.assertEqual(1,len(fs))
2753         l=fmts0_1.splitComponents()
2754         self.assertEqual(3,len(l))
2755         for elt in l: self.assertEqual(10,len(elt))
2756         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2757         for elt in l:
2758             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2759             pass
2760         fs.pushFields(l)
2761         self.assertEqual(4,len(fs))
2762         for elt in fs: self.assertEqual(10,len(elt))
2763         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2764         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2765         #
2766         fs.write(fname,0) ; del fs
2767         #
2768         fs1=MEDFileFields(fname)
2769         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2770         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2771         self.assertEqual(4,len(fs1))
2772         for i in xrange(10):
2773             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2774                 f1ts=fs1[fieldName][i]
2775                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2776                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2777                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2778                 pass
2779             f1ts=fs1["1stField"][i]
2780             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2781             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2782             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2783             pass
2784         pass
2785
2786     def testMEDFileFieldConvertTo1(self):
2787         fname="Pyfile68.med"
2788         # building a mesh containing 4 tri3 + 5 quad4
2789         tri=MEDCouplingUMesh("tri",2)
2790         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2791         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2792         tris=[tri.deepCpy() for i in xrange(4)]
2793         for i,elt in enumerate(tris): elt.translate([i,0])
2794         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2795         quad=MEDCouplingUMesh("quad",2)
2796         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2797         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2798         quads=[quad.deepCpy() for i in xrange(5)]
2799         for i,elt in enumerate(quads): elt.translate([5+i,0])
2800         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2801         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2802         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2803         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2804         #
2805         ff0=MEDFileField1TS()
2806         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")
2807         f0.checkCoherency()
2808         ff0.setFieldNoProfileSBT(f0)
2809         #
2810         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2811         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2812         #
2813         ff0i=ff0.convertToInt()
2814         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2815         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2816         #
2817         ff1=ff0i.convertToDouble()
2818         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2819         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2820         # With profiles
2821         del arr,f0,ff0,ff1,ff0i,fspExp
2822         ff0=MEDFileField1TS()
2823         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")
2824         f0.checkCoherency()
2825         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2826         ff0.setFieldProfile(f0,mm,0,pfl)
2827         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2828         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2829         #
2830         ff0i=ff0.convertToInt()
2831         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2832         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2833         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2834         #
2835         ff1=ff0i.convertToDouble()
2836         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2837         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2838         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2839         ## MultiTimeSteps
2840         ff0=MEDFileFieldMultiTS()
2841         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)
2842         f0.checkCoherency()
2843         ff0.appendFieldProfile(f0,mm,0,pfl)
2844         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)
2845         f0.checkCoherency()
2846         ff0.appendFieldProfile(f0,mm,0,pfl)
2847         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)
2848         f0.checkCoherency()
2849         ff0.appendFieldProfile(f0,mm,0,pfl)
2850         ff1=ff0.convertToInt()
2851         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2852         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2853         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2854             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2855             arr=ff1.getUndergroundDataArray(dt,it)
2856             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2857             pass
2858         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2859         #
2860         mm.write(fname,2)
2861         ff1.write(fname,0)
2862         #
2863         ff1=ff1.convertToDouble()
2864         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
2865         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2866         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2867             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2868             arr=ff1.getUndergroundDataArray(dt,it)
2869             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
2870             pass
2871         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2872         #
2873         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
2874         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2875         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2876         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2877             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
2878             arr=ff1.getUndergroundDataArray(dt,it)
2879             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2880             pass
2881         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
2882         pass
2883
2884     def testMEDFileFieldPartialLoading(self):
2885         fname="Pyfile69.med"
2886         #
2887         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2888         a.alloc(0,1)
2889         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2890         # building a mesh containing 30 tri3 + 40 quad4
2891         tri=MEDCouplingUMesh("tri",2)
2892         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2893         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2894         tris=[tri.deepCpy() for i in xrange(30)]
2895         for i,elt in enumerate(tris): elt.translate([i,0])
2896         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2897         quad=MEDCouplingUMesh("quad",2)
2898         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2899         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2900         quads=[quad.deepCpy() for i in xrange(40)]
2901         for i,elt in enumerate(quads): elt.translate([40+i,0])
2902         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2903         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2904         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2905         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2906         #
2907         ff0=MEDFileField1TS()
2908         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")
2909         f0.checkCoherency()
2910         ff0.setFieldNoProfileSBT(f0)
2911         ff0.write(fname,0)
2912         #
2913         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
2914         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2915         # With profiles
2916         ff0=MEDFileField1TS()
2917         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")
2918         f0.checkCoherency()
2919         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2920         ff0.setFieldProfile(f0,mm,0,pfl)
2921         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
2922         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2923         ff0.write(fname,0)
2924         #
2925         ff0=MEDFileField1TS(fname,False)
2926         self.assertEqual(ff0.getName(),"FieldCell")
2927         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
2928         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
2929         heap_memory_ref=ff0.getHeapMemorySize()
2930         self.assertIn(heap_memory_ref,xrange(182,298+2*strMulFac))
2931         ff0.loadArrays() ##
2932         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
2933         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2934         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
2935         #
2936         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
2937         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
2938         heap_memory_ref=ff0.getHeapMemorySize()
2939         self.assertIn(heap_memory_ref,xrange(350,415+6*strMulFac))
2940         ff0.loadArrays() ##
2941         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
2942         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2943         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2944         ff0.loadArrays() ##
2945         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2946         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2947         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2948         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2949         ff0.loadArrays() ##
2950         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2951         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2952         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2953         ff0.loadArraysIfNecessary() ##
2954         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
2955         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2956         heap_memory_ref=ff0.getHeapMemorySize()
2957         self.assertIn(heap_memory_ref,xrange(1100,1215+2*strMulFac))
2958         ff0.unloadArrays()
2959         hmd=ff0.getHeapMemorySize()-heap_memory_ref
2960         self.assertEqual(hmd,-800) # -50*8*2
2961         ff0.loadArrays() ##
2962         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
2963         #
2964         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
2965         heap_memory_ref=ff0.getHeapMemorySize()
2966         self.assertIn(heap_memory_ref,xrange(299,415+6*strMulFac))
2967         ff0.loadArrays() ##
2968         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2969         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2970         #
2971         fieldName="FieldCellMultiTS"
2972         ff0=MEDFileFieldMultiTS()
2973         for t in xrange(20):
2974             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)
2975             f0.setTime(float(t)+0.1,t,100+t)
2976             f0.checkCoherency()
2977             ff0.appendFieldNoProfileSBT(f0)
2978             pass
2979         ff0.write(fname,0)
2980         #
2981         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
2982         heap_memory_ref=ff0.getHeapMemorySize()
2983         self.assertIn(heap_memory_ref,xrange(5536,5956+(80+26)*strMulFac))
2984         ff0.loadArrays()
2985         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
2986         del ff0
2987         #
2988         ffs=MEDFileFields(fname,False)
2989         heap_memory_ref=ffs.getHeapMemorySize()
2990         self.assertIn(heap_memory_ref,xrange(5335,6687+(80+50)*strMulFac))
2991         ffs.loadArrays()
2992         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
2993         pass
2994
2995     def testMEDFileMeshReadSelector1(self):
2996         mrs=MEDFileMeshReadSelector()
2997         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
2998         mrs.__str__() ; mrs.__repr__()
2999         #
3000         mrs=MEDFileMeshReadSelector(0)
3001         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())
3002         mrs=MEDFileMeshReadSelector(1)
3003         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3004         mrs=MEDFileMeshReadSelector(2)
3005         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3006         mrs=MEDFileMeshReadSelector(3)
3007         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3008         mrs=MEDFileMeshReadSelector(4)
3009         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3010         mrs=MEDFileMeshReadSelector(5)
3011         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3012         mrs=MEDFileMeshReadSelector(6)
3013         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3014         mrs=MEDFileMeshReadSelector(7)
3015         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3016         mrs=MEDFileMeshReadSelector(8)
3017         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3018         mrs=MEDFileMeshReadSelector(9)
3019         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3020         mrs=MEDFileMeshReadSelector(10)
3021         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3022         mrs=MEDFileMeshReadSelector(11)
3023         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3024         mrs=MEDFileMeshReadSelector(12)
3025         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3026         mrs=MEDFileMeshReadSelector(13)
3027         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3028         mrs=MEDFileMeshReadSelector(14)
3029         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3030         mrs=MEDFileMeshReadSelector(15)
3031         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3032         mrs=MEDFileMeshReadSelector(16)
3033         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3034         mrs=MEDFileMeshReadSelector(17)
3035         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3036         mrs=MEDFileMeshReadSelector(18)
3037         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3038         mrs=MEDFileMeshReadSelector(19)
3039         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3040         mrs=MEDFileMeshReadSelector(20)
3041         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3042         mrs=MEDFileMeshReadSelector(21)
3043         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3044         mrs=MEDFileMeshReadSelector(22)
3045         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3046         mrs=MEDFileMeshReadSelector(23)
3047         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3048         mrs=MEDFileMeshReadSelector(24)
3049         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3050         mrs=MEDFileMeshReadSelector(25)
3051         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3052         mrs=MEDFileMeshReadSelector(26)
3053         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3054         mrs=MEDFileMeshReadSelector(27)
3055         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3056         mrs=MEDFileMeshReadSelector(28)
3057         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3058         mrs=MEDFileMeshReadSelector(29)
3059         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3060         mrs=MEDFileMeshReadSelector(30)
3061         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3062         mrs=MEDFileMeshReadSelector(31)
3063         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3064         mrs=MEDFileMeshReadSelector(32)
3065         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3066         mrs=MEDFileMeshReadSelector(33)
3067         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3068         mrs=MEDFileMeshReadSelector(34)
3069         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3070         mrs=MEDFileMeshReadSelector(35)
3071         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3072         mrs=MEDFileMeshReadSelector(36)
3073         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3074         mrs=MEDFileMeshReadSelector(37)
3075         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3076         mrs=MEDFileMeshReadSelector(38)
3077         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3078         mrs=MEDFileMeshReadSelector(39)
3079         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3080         mrs=MEDFileMeshReadSelector(40)
3081         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3082         mrs=MEDFileMeshReadSelector(41)
3083         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3084         mrs=MEDFileMeshReadSelector(42)
3085         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3086         mrs=MEDFileMeshReadSelector(43)
3087         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3088         mrs=MEDFileMeshReadSelector(44)
3089         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3090         mrs=MEDFileMeshReadSelector(45)
3091         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3092         mrs=MEDFileMeshReadSelector(46)
3093         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3094         mrs=MEDFileMeshReadSelector(47)
3095         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3096         mrs=MEDFileMeshReadSelector(48)
3097         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3098         mrs=MEDFileMeshReadSelector(49)
3099         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3100         mrs=MEDFileMeshReadSelector(50)
3101         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3102         mrs=MEDFileMeshReadSelector(51)
3103         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3104         mrs=MEDFileMeshReadSelector(52)
3105         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3106         mrs=MEDFileMeshReadSelector(53)
3107         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3108         mrs=MEDFileMeshReadSelector(54)
3109         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3110         mrs=MEDFileMeshReadSelector(55)
3111         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3112         mrs=MEDFileMeshReadSelector(56)
3113         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3114         mrs=MEDFileMeshReadSelector(57)
3115         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3116         mrs=MEDFileMeshReadSelector(58)
3117         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3118         mrs=MEDFileMeshReadSelector(59)
3119         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3120         mrs=MEDFileMeshReadSelector(60)
3121         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3122         mrs=MEDFileMeshReadSelector(61)
3123         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3124         mrs=MEDFileMeshReadSelector(62)
3125         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3126         mrs=MEDFileMeshReadSelector(63)
3127         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3128         #
3129         mrs=MEDFileMeshReadSelector(63)
3130         mrs.setCellFamilyFieldReading(False)
3131         self.assertEqual(mrs.getCode(),62)
3132         mrs.setCellFamilyFieldReading(True)
3133         self.assertEqual(mrs.getCode(),63)
3134         mrs.setNodeFamilyFieldReading(False)
3135         self.assertEqual(mrs.getCode(),61)
3136         mrs.setNodeFamilyFieldReading(True)
3137         self.assertEqual(mrs.getCode(),63)
3138         mrs.setCellNameFieldReading(False)
3139         self.assertEqual(mrs.getCode(),59)
3140         mrs.setCellNameFieldReading(True)
3141         self.assertEqual(mrs.getCode(),63)
3142         mrs.setNodeNameFieldReading(False)
3143         self.assertEqual(mrs.getCode(),55)
3144         mrs.setNodeNameFieldReading(True)
3145         self.assertEqual(mrs.getCode(),63)
3146         mrs.setCellNumFieldReading(False)
3147         self.assertEqual(mrs.getCode(),47)
3148         mrs.setCellNumFieldReading(True)
3149         self.assertEqual(mrs.getCode(),63)
3150         mrs.setNodeNumFieldReading(False)
3151         self.assertEqual(mrs.getCode(),31)
3152         mrs.setNodeNumFieldReading(True)
3153         self.assertEqual(mrs.getCode(),63)
3154         pass
3155     
3156     def testPartialReadOfMeshes(self):
3157         fname="Pyfile70.med"
3158         # building a mesh containing 4 tri3 + 5 quad4
3159         tri=MEDCouplingUMesh("tri",2)
3160         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3161         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3162         tris=[tri.deepCpy() for i in xrange(4)]
3163         for i,elt in enumerate(tris): elt.translate([i,0])
3164         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3165         quad=MEDCouplingUMesh("quad",2)
3166         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3167         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3168         quads=[quad.deepCpy() for i in xrange(5)]
3169         for i,elt in enumerate(quads): elt.translate([5+i,0])
3170         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3171         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3172         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3173         m1=m.buildDescendingConnectivity()[0]
3174         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3175         #
3176         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3177         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3178         mm.setGroupsAtLevel(0,[grp0,grp1])
3179         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3180         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3181         mm.setGroupsAtLevel(-1,[grp2,grp3])
3182         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3183         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3184         mm.setGroupsAtLevel(1,[grp4,grp5])
3185         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3186         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3187         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3188         #
3189         mm.write(fname,2)
3190         ##
3191         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3192         b4_ref_heap_mem=mm.getHeapMemorySize()
3193         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3194         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3195         ref_heap_mem=mm.getHeapMemorySize()
3196         # check the gain of memory using 1GTUMesh instead of UMesh
3197         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
3198         #
3199         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3200         self.assertEqual(len(mm.getGroupsNames()),0)
3201         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3202         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3203         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3204         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3205         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3206         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3207         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3208         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3209         delta1=ref_heap_mem-mm.getHeapMemorySize()
3210         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3211         #
3212         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3213         self.assertEqual(len(mm.getGroupsNames()),6)
3214         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3215         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3216         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3217         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3218         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3219         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3220         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3221         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3222         delta2=ref_heap_mem-mm.getHeapMemorySize()
3223         self.assertTrue(delta2<delta1)
3224         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3225         #
3226         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3227         self.assertEqual(len(mm.getGroupsNames()),6)
3228         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3229         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3230         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3231         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3232         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3233         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3234         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3235         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3236         delta3=ref_heap_mem-mm.getHeapMemorySize()
3237         self.assertTrue(delta3<delta2)
3238         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3239         #
3240         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3241         self.assertEqual(len(mm.getGroupsNames()),6)
3242         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3243         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3244         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3245         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3246         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3247         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3248         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3249         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3250         delta4=ref_heap_mem-mm.getHeapMemorySize()
3251         self.assertTrue(delta4<delta3)
3252         self.assertTrue(delta4>=32*4*2)
3253         #
3254         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3255         self.assertEqual(len(mm.getGroupsNames()),6)
3256         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3257         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3258         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3259         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3260         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3261         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3262         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3263         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3264         delta5=ref_heap_mem-mm.getHeapMemorySize()
3265         self.assertTrue(delta5<delta4)
3266         self.assertEqual(delta5,0)
3267         pass
3268
3269     # this test checks that setFieldProfile perform a check of the array length
3270     # compared to the profile length. This test also checks that mesh attribute of field
3271     # is not used by setFieldProfile (because across this test mesh is equal to None)
3272     def testCheckCompatibilityPfl1(self):
3273         # building a mesh containing 4 tri3 + 5 quad4
3274         tri=MEDCouplingUMesh("tri",2)
3275         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3276         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3277         tris=[tri.deepCpy() for i in xrange(4)]
3278         for i,elt in enumerate(tris): elt.translate([i,0])
3279         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3280         quad=MEDCouplingUMesh("quad",2)
3281         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3282         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3283         quads=[quad.deepCpy() for i in xrange(5)]
3284         for i,elt in enumerate(quads): elt.translate([5+i,0])
3285         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3286         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3287         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3288         m1=m.buildDescendingConnectivity()[0]
3289         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3290         #
3291         f1ts=MEDFileField1TS()
3292         f=MEDCouplingFieldDouble(ON_NODES)
3293         vals=DataArrayDouble(7) ; vals.iota(1000)
3294         f.setArray(vals)
3295         f.setName("anonymous") # f has no mesh it is not a bug
3296         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3297         f1ts.setFieldProfile(f,mm,0,pfl)
3298         #
3299         f1ts=MEDFileField1TS()
3300         f=MEDCouplingFieldDouble(ON_NODES)
3301         vals=DataArrayDouble(8) ; vals.iota(1000)
3302         f.setArray(vals)
3303         f.setName("anonymous") # f has no mesh it is not a bug
3304         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3305         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3306         #
3307         f1ts=MEDFileField1TS()
3308         f=MEDCouplingFieldDouble(ON_CELLS)
3309         vals=DataArrayDouble(7) ; vals.iota(1000)
3310         f.setArray(vals)
3311         f.setName("anonymous") # f has no mesh it is not a bug
3312         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3313         f1ts.setFieldProfile(f,mm,0,pfl)
3314         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3315         #
3316         f1ts=MEDFileField1TS()
3317         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3318         vals=DataArrayDouble(27) ; vals.iota(1000)
3319         f.setArray(vals)
3320         f.setName("anonymous") # f has no mesh it is not a bug
3321         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3322         f.setMesh(m[pfl])
3323         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])
3324         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3325         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])
3326         f.setMesh(None)
3327         f1ts.setFieldProfile(f,mm,0,pfl)
3328         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3329         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3330         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3331         vals=DataArrayDouble(27) ; vals.iota(1000)
3332         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3333         #
3334         f1ts=MEDFileField1TS()
3335         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3336         vals=DataArrayDouble(25) ; vals.iota(1000)
3337         f.setArray(vals)
3338         f.setName("anonymous") # f has no mesh it is not a bug
3339         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3340         f1ts.setFieldProfile(f,mm,0,pfl)
3341         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3342         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3343         f.setArray(vals2)
3344         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3345         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3346         #
3347         f1ts=MEDFileField1TS()
3348         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3349         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3350         f.setArray(vals)
3351         f1ts.setFieldProfile(f,mm,0,pfl)
3352         pass
3353     
3354     def testWRMeshWithNoCells(self):
3355         fname="Pyfile71.med"
3356         a=DataArrayDouble(4) ; a.iota()
3357         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3358         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3359         m=MEDFileUMesh()
3360         m.setMeshAtLevel(0,m00)
3361         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3362         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3363         m.write(fname,2)
3364         del m,a,c,m0,m00
3365         #
3366         m=MEDFileMesh.New(fname)
3367         self.assertEqual((),m.getNonEmptyLevels())
3368         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))
3369         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3370         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3371         pass
3372
3373     #@unittest.skipUnless(False,"requires Vadim's green light")
3374     def testWRQPolyg1(self):
3375         fname="Pyfile72.med"
3376         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3377         m.insertNextCell([0,2,1,3])
3378         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3379         #
3380         ms=[m.deepCpy() for i in xrange(4)]
3381         for i,elt in enumerate(ms):
3382             elt.translate([float(i)*1.5,0.])
3383             pass
3384         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3385         m0.convertAllToPoly()
3386         #
3387         ms=[m.deepCpy() for i in xrange(5)]
3388         for i,elt in enumerate(ms):
3389             elt.translate([float(i)*1.5,1.5])
3390             pass
3391         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3392         m1.convertAllToPoly()
3393         m1.convertLinearCellsToQuadratic()
3394         #
3395         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3396         ##
3397         mm=MEDFileUMesh()
3398         mm.setMeshAtLevel(0,m)
3399         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3400         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3401         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3402         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3403         ##
3404         mm.write(fname,2)
3405         del mm
3406         #
3407         mm_read=MEDFileUMesh(fname)
3408         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3409         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3410         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3411         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3412         ##
3413         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3414         f.setMesh(m)
3415         arr0=DataArrayDouble(9) ; arr0.iota()
3416         arr1=DataArrayDouble(9) ; arr1.iota(100)
3417         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3418         f.setArray(arr) ; f.checkCoherency()
3419         f.setTime(5.6,1,2)
3420         ff=MEDFileField1TS()
3421         ff.setFieldNoProfileSBT(f)
3422         ff.write(fname,0)
3423         ##
3424         ff_read=MEDFileField1TS(fname)
3425         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3426         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3427         pass
3428
3429     def testLoadIfNecessaryOnFromScratchFields0(self):
3430         """
3431         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3432         """
3433         fname="Pyfile77.med"
3434         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3435         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3436         m.allocateCells()
3437         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3438         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3439         m.finishInsertingCells()
3440         #
3441         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3442         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3443         fs=MEDFileFields()
3444         arrs=4*[None]
3445         #
3446         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3447         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3448         f0.setTime(1.1,1,1)
3449         f0.setName("myELNOField")
3450         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3451         f0.setArray(arrs[0])
3452         ff0.appendFieldNoProfileSBT(f0)
3453         #
3454         f0.setTime(2.2,2,1)
3455         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3456         f0.setArray(arrs[1])
3457         ff0.appendFieldNoProfileSBT(f0)
3458         #
3459         f0.setTime(3.3,3,1)
3460         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3461         f0.setArray(arrs[2])
3462         ff0.appendFieldNoProfileSBT(f0)
3463         #
3464         f0.setTime(4.4,4,1)
3465         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3466         f0.setArray(arrs[3])
3467         ff0.appendFieldNoProfileSBT(f0)
3468         #
3469         for i,arr in enumerate(arrs):
3470             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3471             fs[0][i].loadArraysIfNecessary()
3472             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3473             pass
3474         fs.loadArraysIfNecessary()
3475         for i,arr in enumerate(arrs):
3476             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3477             pass
3478         fs[0].loadArraysIfNecessary()
3479         for i,arr in enumerate(arrs):
3480             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3481             pass
3482         pass
3483     
3484     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3485         """ 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.
3486         """
3487         fname="Pyfile78.med"
3488         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)
3489         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3490         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3491         m0.allocateCells()
3492         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
3493             m0.insertNextCell(NORM_TETRA4,elt)
3494             pass
3495         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
3496             m0.insertNextCell(NORM_PYRA5,elt)
3497             pass
3498         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
3499             m0.insertNextCell(NORM_PENTA6,elt)
3500             pass
3501         m0.checkCoherency2()
3502         m1=MEDCouplingUMesh(); m1.setName("mesh")
3503         m1.setMeshDimension(2);
3504         m1.allocateCells(5);
3505         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3506         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3507         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3508         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3509         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3510         m1.setCoords(coords);
3511         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3512         m3.allocateCells()
3513         m3.insertNextCell(NORM_POINT1,[2])
3514         m3.insertNextCell(NORM_POINT1,[3])
3515         m3.insertNextCell(NORM_POINT1,[4])
3516         m3.insertNextCell(NORM_POINT1,[5])
3517         #
3518         mm=MEDFileUMesh()
3519         mm.setMeshAtLevel(0,m0)
3520         mm.setMeshAtLevel(-1,m1)
3521         mm.setMeshAtLevel(-3,m3)
3522         mm.write(fname,2)
3523         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3524         mm=MEDFileMesh.New(fname)
3525         fs=MEDFileFields()
3526         fmts=MEDFileFieldMultiTS()
3527         f1ts=MEDFileField1TS()
3528         for lev in mm.getNonEmptyLevels():
3529             for gt in mm.getGeoTypesAtLevel(lev):
3530                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3531                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3532                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3533                 f.setArray(arr) ; f.setName("f0")
3534                 f1ts.setFieldNoProfileSBT(f)
3535                 pass
3536             pass
3537         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3538         for lev in [0,-1,-3]:
3539             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3540             pass
3541         fmts.pushBackTimeStep(f1ts)
3542         fs.pushField(fmts)
3543         fs.write(fname,0)
3544         del fs,fmts,f1ts
3545         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3546         fs=MEDFileFields(fname)
3547         self.assertEqual(len(fs),1)
3548         self.assertEqual(len(fs[0]),1)
3549         f1ts=fs[0][0]
3550         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),'','')])])
3551         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))
3552         pass
3553
3554     def testMEDFileUMeshSetName(self):
3555         """ 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.
3556         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3557         """
3558         fname="Pyfile79.med"
3559         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3560         mm=MEDFileUMesh()
3561         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3562         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)
3563         m0.allocateCells(5);
3564         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3565         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3566         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3567         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3568         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3569         m0.setCoords(coords);
3570         mm.setMeshAtLevel(0,m0)
3571         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3572         m2.allocateCells()
3573         m2.insertNextCell(NORM_POINT1,[2])
3574         m2.insertNextCell(NORM_POINT1,[3])
3575         m2.insertNextCell(NORM_POINT1,[4])
3576         m2.insertNextCell(NORM_POINT1,[5])
3577         mm.setMeshAtLevel(-2,m2)
3578         self.assertEqual(mm.getName(),"")
3579         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3580         mm.forceComputationOfParts()
3581         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3582         mm.setName("abc")
3583         self.assertEqual(mm.getName(),"abc")
3584         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3585         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3586         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3587         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3588         pass
3589
3590     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3591         fileName="Pyfile80.med"
3592         m=MEDCouplingCMesh() ; m.setName("cmesh")
3593         arr=DataArrayDouble(6) ; arr.iota()
3594         m.setCoords(arr,arr)
3595         nbCells=m.getNumberOfCells()
3596         self.assertEqual(25,nbCells)
3597         f=MEDCouplingFieldDouble(ON_CELLS)
3598         f.setName("FieldOnCell") ; f.setMesh(m)
3599         arr=DataArrayDouble(nbCells) ; arr.iota()
3600         mm=MEDFileCMesh()
3601         mm.setMesh(m)
3602         #
3603         fmts=MEDFileFieldMultiTS()
3604         #
3605         for i in xrange(nbCells):
3606             t=(float(i)+0.1,i+1,-i-2)
3607             f.setTime(*t)
3608             arr2=DataArrayDouble(nbCells)
3609             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3610             arr2[perm]=arr
3611             f.setArray(arr2)
3612             f1ts=MEDFileField1TS()
3613             f1ts.setFieldNoProfileSBT(f)
3614             fmts.pushBackTimeStep(f1ts)
3615             pass
3616         fmts.unloadArraysWithoutDataLoss()
3617         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))
3618         fs=MEDFileFields() ; fs.pushField(fmts)
3619         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))
3620         fs.unloadArraysWithoutDataLoss()
3621         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))
3622         f1ts=fs[0][0]
3623         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))
3624         f1ts.unloadArraysWithoutDataLoss()
3625         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))
3626         mm.write(fileName,2)
3627         fs.write(fileName,0)
3628         del m,fmts,mm,f,f1ts
3629         ##
3630         mm=MEDFileMesh.New(fileName)
3631         fmts=MEDFileFieldMultiTS(fileName)
3632         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))
3633         fmts.unloadArraysWithoutDataLoss()
3634         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3635         fmts.loadArraysIfNecessary()
3636         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))
3637         del mm,fmts
3638         fs=MEDFileFields(fileName)
3639         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))
3640         fs.unloadArraysWithoutDataLoss()
3641         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3642         fs.loadArraysIfNecessary()
3643         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))
3644         del fs
3645         f1ts=MEDFileField1TS(fileName)
3646         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))
3647         f1ts.unloadArraysWithoutDataLoss()
3648         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3649         f1ts.loadArraysIfNecessary()
3650         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))
3651         pass
3652
3653     def testMEDFileUMeshLoadPart1(self):
3654         """ 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
3655         memory of the returned instance.
3656         """
3657         fileName="Pyfile81.med"
3658         arr=DataArrayDouble(6) ; arr.iota()
3659         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3660         m=m.buildUnstructured()
3661         m.setName("Mesh")
3662         m.changeSpaceDimension(3,0.)
3663         infos=["aa [b]","cc [de]","gg [klm]"]
3664         m.getCoords().setInfoOnComponents(infos)
3665         m.checkCoherency2()
3666         mm=MEDFileUMesh()
3667         mm.setMeshAtLevel(0,m)
3668         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3669         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3670         mm.setMeshAtLevel(-1,m1)
3671         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])
3672         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])
3673         namesCellL0=DataArrayAsciiChar(25,16)
3674         namesCellL0[:]=["Cell#%.3d        "%(i) for i in xrange(25)]
3675         renumM1=DataArrayInt([3,4,0,2,1])
3676         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3677         mm.setRenumFieldArr(0,renum0)
3678         mm.setFamilyFieldArr(0,famField0)
3679         mm.setNameFieldAtLevel(0,namesCellL0)
3680         mm.setRenumFieldArr(-1,renumM1)
3681         mm.setFamilyFieldArr(-1,famFieldM1)
3682         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])
3683         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])
3684         namesNodes=DataArrayAsciiChar(36,16)
3685         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(36)]
3686         mm.setRenumFieldArr(1,renum1)
3687         mm.setFamilyFieldArr(1,famField1)
3688         mm.setNameFieldAtLevel(1,namesNodes)
3689         mm.setFamilyId("Fam7",77)
3690         mm.setFamilyId("Fam8",88)
3691         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3692         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3693         mm.write(fileName,2)
3694         #
3695         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3696         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3697         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])))
3698         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)
3699         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3700         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3701         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3702         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3703         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3704         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3705         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3706         #
3707         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3708         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3709         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])))
3710         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)
3711         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3712         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3713         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3714         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3715         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3716         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3717         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3718         #
3719         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3720         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3721         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3722         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3723         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3724         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3725         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3726         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3727         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])))
3728         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3729         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)
3730         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3731         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3732         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3733         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3734         pass
3735
3736     def testMEDFileFieldsLoadPart1(self):
3737         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3738         """
3739         fileName="Pyfile82.med"
3740         meshName="Mesh"
3741         compos=["aa [kg]","bbb [m/s]"]
3742         arr=DataArrayDouble(6) ; arr.iota()
3743         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3744         m=m.buildUnstructured()
3745         m.setName(meshName)
3746         m.changeSpaceDimension(3,0.)
3747         infos=["aa [b]","cc [de]","gg [klm]"]
3748         m.getCoords().setInfoOnComponents(infos)
3749         m.checkCoherency2()
3750         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3751         f.setName("Field")
3752         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3753         arr[:,0]=range(25)
3754         arr[:,1]=range(100,125)
3755         f.setArray(arr)
3756         MEDLoader.WriteField(fileName,f,2)
3757         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3758         f.setName("FieldNode")
3759         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3760         arr[:,0]=range(200,236)
3761         arr[:,1]=range(300,336)
3762         f.setArray(arr)
3763         f.checkCoherency()
3764         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3765         #
3766         ms=MEDFileMeshes()
3767         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3768         ms.pushMesh(mm)
3769         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3770         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3771         #
3772         ms=MEDFileMeshes()
3773         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3774         ms.pushMesh(mm)
3775         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3776         fs=fs.deepCpy()
3777         fs[0][0].loadArrays()
3778         arr=DataArrayDouble(12,2) ; arr[:,0]=range(3,15) ; arr[:,1]=range(103,115)
3779         arr.setInfoOnComponents(compos)
3780         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3781         fs[1][0].loadArrays()
3782         arr=DataArrayDouble(21,2) ; arr[:,0]=range(203,224) ; arr[:,1]=range(303,324)
3783         arr.setInfoOnComponents(compos)
3784         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3785         pass
3786
3787     def testMEDFileWithoutCells1(self):
3788         fileName="Pyfile83.med"
3789         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3790         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3791         mm=MEDFileUMesh()
3792         mm.setCoords(coo)
3793         mm.setName("mesh")
3794         mm.write(fileName,2)
3795         #
3796         mm=MEDFileMesh.New(fileName)
3797         self.assertEqual(mm.getName(),"mesh")
3798         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3799         pass
3800
3801     def testZipCoordsWithLoadPart1(self):
3802         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3803         """
3804         fileName="Pyfile84.med"
3805         meshName="Mesh"
3806         compos=["aa [kg]","bbb [m/s]"]
3807         arr=DataArrayDouble(6) ; arr.iota()
3808         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3809         m=m.buildUnstructured()
3810         m.setName(meshName)
3811         m.changeSpaceDimension(3,0.)
3812         infos=["aa [b]","cc [de]","gg [klm]"]
3813         m.getCoords().setInfoOnComponents(infos)
3814         m.checkCoherency2()
3815         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3816         f.setName("Field")
3817         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3818         arr[:,0]=range(25)
3819         arr[:,1]=range(100,125)
3820         f.setArray(arr)
3821         MEDLoader.WriteField(fileName,f,2)
3822         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3823         f.setName("FieldNode")
3824         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3825         arr[:,0]=range(200,236)
3826         arr[:,1]=range(300,336)
3827         f.setArray(arr)
3828         f.checkCoherency()
3829         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3830         #
3831         ms=MEDFileMeshes()
3832         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3833         ms.pushMesh(mm)
3834         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3835         self.assertEqual(spd.getSlice(),slice(4,6,1))
3836         spd=mm.getPartDefAtLevel(1)
3837         self.assertEqual(spd.getSlice(),slice(4,14,1))
3838         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3839         mm.zipCoords() # <- The important line is here !
3840         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3841         self.assertEqual(spd.getSlice(),slice(4,6,1))
3842         spd=mm.getPartDefAtLevel(1)
3843         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3844         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3845         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3846         fs[0][0].loadArrays()
3847         arr=DataArrayDouble([(4,104),(5,105)])
3848         arr.setInfoOnComponents(compos)
3849         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3850         fs[1][0].loadArrays()
3851         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
3852         arr.setInfoOnComponents(compos)
3853         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3854         pass
3855
3856     def testMEDFileCMeshSetGroupsAtLevel(self):
3857         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
3858         """
3859         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
3860         m.setName("Mesh")
3861         mm=MEDFileCMesh() ; mm.setMesh(m)
3862         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
3863         mm.setGroupsAtLevel(0,[grp])
3864         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
3865         pass
3866
3867     def testMEDFileUMeshBuildExtrudedMesh1(self):
3868         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
3869         fileName="Pyfile85.med"
3870         meshName2D="Mesh"
3871         meshName1D="Mesh1D"
3872         meshName3DOut="Mesh3D"
3873         #
3874         d1=DataArrayInt([0,4,20,24])
3875         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
3876         #
3877         a=DataArrayDouble(6) ; a.iota()
3878         m=MEDCouplingCMesh() ; m.setCoords(a,a)
3879         m=m.buildUnstructured()
3880         d1c=d1.buildComplement(m.getNumberOfCells())
3881         m=m[d1c] ; m.zipCoords()
3882         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
3883         m0.simplexize(0)
3884         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
3885         m.setName(meshName2D)
3886         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
3887         e=d.deltaShiftIndex().getIdsEqual(1)
3888         #
3889         mm=MEDFileUMesh()
3890         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
3891         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
3892         mm.setGroupsAtLevel(0,[grp0])
3893         grp1=e ; grp1.setName("grp1")
3894         mm.setGroupsAtLevel(-1,[grp1])
3895         mm.write(fileName,2)
3896         #
3897         a=DataArrayDouble(3) ; a.iota()
3898         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
3899         tmp.setName(meshName1D)
3900         tmp.changeSpaceDimension(3)
3901         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
3902         mm1D=MEDFileUMesh()
3903         mm1D.setMeshAtLevel(0,tmp)
3904         mm1D.write(fileName,0)
3905         # test is here !
3906         mm2D=MEDFileMesh.New(fileName,meshName2D)
3907         mm1D=MEDFileMesh.New(fileName,meshName1D)
3908         m1D=mm1D.getMeshAtLevel(0)
3909         mm3D=mm2D.buildExtrudedMesh(m1D,0)
3910         #
3911         self.assertEqual(mm3D.getName(),mm2D.getName())
3912         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
3913         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
3914         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
3915         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
3916         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
3917         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
3918         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
3919         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
3920         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
3921         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.)])
3922         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
3923         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])
3924         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
3925         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])
3926         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
3927         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])
3928         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
3929         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])
3930         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
3931         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])
3932         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
3933         d=DataArrayInt(129) ; d.iota() ; d*=3
3934         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
3935         #
3936         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
3937         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
3938         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
3939         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
3940         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])))
3941         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])))
3942         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])))
3943         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])))
3944         mm3D.setName("MeshExtruded")
3945         mm3D.write(fileName,0)
3946         pass
3947
3948     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
3949     def testMEDFileUMeshPickeling1(self):
3950         import cPickle
3951         outFileName="Pyfile86.med"
3952         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)
3953         c.setInfoOnComponents(["aa","bbb"])
3954         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
3955         m=MEDCouplingUMesh();
3956         m.setMeshDimension(2);
3957         m.allocateCells(5);
3958         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
3959         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
3960         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
3961         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
3962         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
3963         m.finishInsertingCells();
3964         m.setCoords(c)
3965         m.checkCoherency()
3966         m1=MEDCouplingUMesh.New();
3967         m1.setMeshDimension(1);
3968         m1.allocateCells(3);
3969         m1.insertNextCell(NORM_SEG2,2,[1,4])
3970         m1.insertNextCell(NORM_SEG2,2,[3,6])
3971         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
3972         m1.finishInsertingCells();
3973         m1.setCoords(c)
3974         m1.checkCoherency()
3975         m2=MEDCouplingUMesh.New();
3976         m2.setMeshDimension(0);
3977         m2.allocateCells(4);
3978         m2.insertNextCell(NORM_POINT1,1,[1])
3979         m2.insertNextCell(NORM_POINT1,1,[3])
3980         m2.insertNextCell(NORM_POINT1,1,[2])
3981         m2.insertNextCell(NORM_POINT1,1,[6])
3982         m2.finishInsertingCells();
3983         m2.setCoords(c)
3984         m2.checkCoherency()
3985         #
3986         mm=MEDFileUMesh.New()
3987         self.assertTrue(mm.getUnivNameWrStatus())
3988         mm.setName("MyFirstMEDCouplingMEDmesh")
3989         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
3990         mm.setCoords(c)
3991         mm[-1]=m1;
3992         mm[0]=m;
3993         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
3994         mm[-2]=m2;
3995         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
3996         # playing with groups
3997         g1_2=DataArrayInt.New()
3998         g1_2.setValues([1,3],2,1)
3999         g1_2.setName("G1")
4000         g2_2=DataArrayInt.New()
4001         g2_2.setValues([1,2,3],3,1)
4002         g2_2.setName("G2")
4003         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4004         g1_1=DataArrayInt.New()
4005         g1_1.setValues([0,1,2],3,1)
4006         g1_1.setName("G1")
4007         g2_1=DataArrayInt.New()
4008         g2_1.setValues([0,2],2,1)
4009         g2_1.setName("G2")
4010         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4011         g1_N=DataArrayInt.New()
4012         g1_N.setValues(range(8),8,1)
4013         g1_N.setName("G1")
4014         g2_N=DataArrayInt.New()
4015         g2_N.setValues(range(9),9,1)
4016         g2_N.setName("G2")
4017         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4018         mm.createGroupOnAll(0,"GrpOnAllCell")
4019         # check content of mm
4020         t=mm.getGroupArr(0,"G1",False)
4021         self.assertTrue(g1_2.isEqual(t));
4022         t=mm.getGroupArr(0,"G2",False)
4023         self.assertTrue(g2_2.isEqual(t));
4024         t=mm.getGroupArr(-1,"G1",False)
4025         self.assertTrue(g1_1.isEqual(t));
4026         t=mm.getGroupArr(-1,"G2",False)
4027         self.assertTrue(g2_1.isEqual(t));
4028         t=mm.getGroupArr(1,"G1",False)
4029         self.assertTrue(g1_N.isEqual(t));
4030         t=mm.getGroupArr(1,"G2",False)
4031         self.assertTrue(g2_N.isEqual(t));
4032         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4033         t=mm.getGroupArr(0,"GrpOnAllCell")
4034         #
4035         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4036         mm2=cPickle.loads(st)
4037         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4038         pass
4039
4040     def testMEDFileFieldsLoadSpecificEntities1(self):
4041         nbNodes=11
4042         fieldName="myField"
4043         fileName="Pyfile87.med"
4044         nbPdt=10
4045         meshName="Mesh"
4046         #
4047         m=MEDCouplingCMesh()
4048         arr=DataArrayDouble(nbNodes) ; arr.iota()
4049         m.setCoords(arr)
4050         m=m.buildUnstructured()
4051         m.setName(meshName)
4052         #
4053         fmts=MEDFileFieldMultiTS()
4054         for i in xrange(nbPdt):
4055             f=MEDCouplingFieldDouble(ON_NODES)
4056             f.setMesh(m)
4057             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4058             f.setArray(arr)
4059             f.setName(fieldName)
4060             f.setTime(float(i),i,0)
4061             fmts.appendFieldNoProfileSBT(f)
4062             pass
4063         #
4064         mm=MEDFileUMesh() ; mm[0]=m
4065         fmts.write(fileName,2)
4066         mm.write(fileName,0)
4067         #
4068         fs=MEDFileFields(fileName,False)
4069         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4070         fs.loadArraysIfNecessary()
4071         fs2.loadArraysIfNecessary()
4072         for i in xrange(nbPdt):
4073             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4074             pass
4075         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4076         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4077         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4078         fmts=MEDFileFieldMultiTS()
4079         for i in xrange(nbPdt):
4080             f=MEDCouplingFieldDouble(ON_CELLS)
4081             f.setMesh(m3)
4082             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4083             f.setArray(arr)
4084             f.setName(fieldName)
4085             f.setTime(float(i),i,0)
4086             fmts.appendFieldNoProfileSBT(f)
4087             pass
4088         mm=MEDFileUMesh() ; mm[0]=m3
4089         del mm[0]
4090         self.assertEqual(mm.getNonEmptyLevels(),())
4091         mm[0]=m3
4092         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4093         fmts.write(fileName,2)
4094         fs=MEDFileFields(fileName,False)
4095         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4096         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4097         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4098         fs.loadArraysIfNecessary()
4099         fs2.loadArraysIfNecessary()
4100         fs3.loadArraysIfNecessary()
4101         fs4.loadArraysIfNecessary()
4102         for i in xrange(nbPdt):
4103             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4104             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4105             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4106             pass
4107         pass
4108
4109     def testMEDFileLotsOfTSRW1(self):
4110         nbNodes=11
4111         fieldName="myField"
4112         fileName="Pyfile88.med"
4113         nbPdt=300 # <- perftest = 30000
4114         meshName="Mesh"
4115         #
4116         maxPdt=100 # <- optimum = 500
4117         m=MEDCouplingCMesh()
4118         arr=DataArrayDouble(nbNodes) ; arr.iota()
4119         m.setCoords(arr)
4120         m=m.buildUnstructured()
4121         m.setName(meshName)
4122         #
4123         nbOfField=nbPdt/maxPdt
4124         fs=MEDFileFields()
4125         for j in xrange(nbOfField):
4126             fmts=MEDFileFieldMultiTS()
4127             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4128             for i in xrange(s.start,s.stop,s.step):
4129                 f=MEDCouplingFieldDouble(ON_NODES)
4130                 f.setMesh(m)
4131                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4132                 f.setArray(arr)
4133                 f.setName("%s_%d"%(fieldName,j))
4134                 f.setTime(float(i),i,0)
4135                 fmts.appendFieldNoProfileSBT(f)
4136                 pass
4137             fs.pushField(fmts)
4138             pass
4139         #
4140         mm=MEDFileUMesh() ; mm[0]=m
4141         fs.write(fileName,2)
4142         mm.write(fileName,0)
4143         ############
4144         def appendInDict(d,key,val):
4145             if key in d:
4146                 d[key].append(val)
4147             else:
4148                 d[key]=[val]
4149             pass
4150         import re
4151         allFields=MEDLoader.GetAllFieldNames(fileName)
4152         allFieldsDict={}
4153         pat=re.compile("([\d]+)([\s\S]+)$")
4154         for st in allFields:
4155             stRev=st[::-1]
4156             m=pat.match(stRev)
4157             if m:
4158                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4159                 pass
4160             else:
4161                 appendInDict(allFieldsDict,st,'')
4162                 pass
4163             pass
4164         fs2=MEDFileFields()
4165         for k in allFieldsDict:
4166             if allFieldsDict[k]!=['']:
4167                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4168                 pass
4169             fmts2=[]
4170             for it in allFieldsDict[k]:
4171                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4172                 pass
4173             fmts2.reverse()
4174             zeResu=fmts2.pop()
4175             nbIter=len(fmts2)
4176             for ii in xrange(nbIter):
4177                 zeResu.pushBackTimeSteps(fmts2.pop())
4178                 pass
4179             zeResu.setName(k)
4180             fs2.pushField(zeResu)
4181             pass
4182         self.assertEqual(fs2[0].getTimeSteps(),[(i,0,float(i)) for i in xrange(nbPdt)])
4183         pass
4184     
4185     def testMEDFileMeshRearrangeFamIds1(self):
4186         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4187         fileName="Pyfile89.med"
4188         meshName='Maillage_2'
4189         mm=MEDFileUMesh()
4190         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)])
4191         #
4192         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])
4193         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])
4194         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4195         m0.setConnectivity(c0,c0i)
4196         mm[0]=m0
4197         #
4198         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])
4199         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])
4200         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4201         m1.setConnectivity(c1,c1i)
4202         mm[-1]=m1
4203         #
4204         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])
4205         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4206         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4207         mm[-2]=m2.buildUnstructured()
4208         #
4209         ref0=DataArrayInt(55) ; ref0[:]=0
4210         mm.setFamilyFieldArr(0,ref0)
4211         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]))
4212         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])
4213         mm.setFamilyFieldArr(-1,ref1)
4214         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])
4215         mm.setFamilyFieldArr(-2,ref2)
4216         #
4217         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4218             mm.setFamilyId(f,fid)
4219         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4220             mm.setFamiliesOnGroup(grp,fams)
4221         mm.write(fileName,2)
4222         #
4223         mm=MEDFileMesh.New(fileName)
4224         grp=mm.getGroup(-1,"Groupe_1")
4225         dai=grp.computeFetchedNodeIds()
4226         dai.setName("TOTO")
4227         mm.addGroup(1,dai)
4228         mm.rearrangeFamilies() # <- the aim of the test
4229         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4230         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4231         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4232         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4233         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])))
4234         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4235         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4236         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4237         for elt,fams in allGrps:
4238             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4239         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4240         for elt,eltId in allFams:
4241             self.assertEqual(mm.getFamilyId(elt),eltId)
4242         pass
4243
4244     def testNonRegrCMeshSetFieldPfl1(self):
4245         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4246         ff=MEDFileField1TS()
4247         meshName="mesh"
4248         mm=MEDFileCMesh()
4249         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4250         m.setCoords(arr)
4251         m.setName(meshName)
4252         mm.setMesh(m)
4253         field=MEDCouplingFieldDouble(ON_CELLS)
4254         field.setMesh(m)
4255         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4256         field.setName("Field")
4257         field.checkCoherency()
4258         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4259         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4260         self.assertEqual(ff.getPfls(),())
4261         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4262         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4263         del ff,mm,field,field2,pfl
4264         # same with unstructured mesh
4265         ff=MEDFileField1TS()
4266         meshName="mesh"
4267         mm=MEDFileUMesh()
4268         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4269         m.setCoords(arr)
4270         m.setName(meshName)
4271         m=m.buildUnstructured()
4272         mm[0]=m
4273         field=MEDCouplingFieldDouble(ON_CELLS)
4274         field.setMesh(m)
4275         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4276         field.setName("Field")
4277         field.checkCoherency()
4278         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4279         ff.setFieldProfile(field,mm,0,pfl)
4280         self.assertEqual(ff.getPfls(),())
4281         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4282         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4283         pass
4284
4285     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4286         meshName="mesh"
4287         fileName="Pyfile90.med"
4288         fileName2="Pyfile91.med"
4289         arr=DataArrayDouble(5) ; arr.iota()
4290         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4291         m=m.buildUnstructured()
4292         d=DataArrayInt([3,7,11,15])
4293         m1=m[d]
4294         m1.simplexize(0)
4295         m2=m[d.buildComplement(m.getNumberOfCells())]
4296         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4297         m.changeSpaceDimension(3,0.)
4298         arr=DataArrayDouble(3) ; arr.iota()
4299         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4300         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4301         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4302         m3D=m.buildExtrudedMesh(m1D,0)
4303         m3D.sortCellsInMEDFileFrmt()
4304         m3D.setName(meshName)
4305         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkCoherency2()
4306         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4307         #
4308         mm=MEDFileUMesh()
4309         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D
4310         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4311         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4312         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4313         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4314         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4315         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4316         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4317         mm.setGroupsAtLevel(0,[vol1,vol2])
4318         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4319         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4320         #
4321         mmOut1=mm.linearToQuadratic(0,0.)
4322         mmOut1.write(fileName2,2)
4323         mmOut2=mmOut1.quadraticToLinear(0.)
4324         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4325         pass
4326
4327     def testMEDFileMeshAddGroup1(self):
4328         m=MEDCouplingCMesh()
4329         arrX=DataArrayDouble(9) ; arrX.iota()
4330         arrY=DataArrayDouble(4) ; arrY.iota()
4331         m.setCoords(arrX,arrY)
4332         m.setName("mesh")
4333         mm=MEDFileCMesh()
4334         mm.setMesh(m)
4335         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4336         mm.addGroup(0,grp0)
4337         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4338         mm.addGroup(0,grp1)
4339         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4340         mm.addGroup(0,grp2)
4341         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4342         mm.addGroup(0,grp3)
4343         for grp in [grp0,grp1,grp2,grp3]:
4344             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4345         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4346         delta=12
4347         for grp in [grp0,grp1,grp2,grp3]:
4348             grpNode=grp.deepCpy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4349             mm.addGroup(1,grpNode)
4350         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4351         for grp in [grp0,grp1,grp2,grp3]:
4352             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4353         for grp in [grp0,grp1,grp2,grp3]:
4354             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4355             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4356         mm.normalizeFamIdsMEDFile()
4357         for grp in [grp0,grp1,grp2,grp3]:
4358             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4359         for grp in [grp0,grp1,grp2,grp3]:
4360             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4361             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4362         pass
4363
4364     pass
4365     def testMEDFileJoint1(self):
4366         fileName="Pyfile88.med"
4367         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4368         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4369         mm=MEDFileUMesh()
4370         mm.setCoords(coo)
4371         mm.setName("maa1")
4372         mm.setDescription("un maillage")
4373         mm.write(fileName,2)
4374         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4375         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4376         one_step_joint=MEDFileJointOneStep()
4377         one_step_joint.pushCorrespondence(cell_correspond)
4378         one_step_joint.pushCorrespondence(node_correspond)
4379         one_joint=MEDFileJoint()
4380         one_joint.pushStep(one_step_joint)
4381         one_joint.setLocalMeshName("maa1")
4382         one_joint.setRemoteMeshName("maa1")
4383         one_joint.setDescription("joint_description")
4384         one_joint.setJointName("joint_1")
4385         one_joint.setDomainNumber(1)
4386         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4387         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4388         self.assertEqual( one_joint.getDescription(), "joint_description")
4389         self.assertEqual( one_joint.getJointName(), "joint_1")
4390         self.assertEqual( one_joint.getDomainNumber(), 1)
4391         joints=MEDFileJoints()
4392         joints.pushJoint(one_joint);
4393         joints.write(fileName,0)
4394         # read back
4395         jointsR=MEDFileJoints(fileName,mm.getName())
4396         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4397         jR = jointsR.getJointAtPos(0)
4398         self.assertTrue( jR.isEqual( one_joint ))
4399         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4400         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4401         jointsR.destroyJointAtPos(0)
4402         
4403     pass
4404     def testMEDFileJoint2(self):
4405         fileNameWr="Pyfile89.med"
4406         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4407         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4408         mm=MEDFileUMesh()
4409         mm.setCoords(coo)
4410         mm.setName("maa1")
4411         mm.setDescription("un maillage")
4412         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4413         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4414         one_step_joint=MEDFileJointOneStep()
4415         two_step_joint=MEDFileJointOneStep()
4416         one_joint=MEDFileJoint()
4417         two_joint=MEDFileJoint()
4418         one_step_joint.pushCorrespondence(node_correspond)
4419         one_joint.pushStep(one_step_joint)
4420         two_step_joint.pushCorrespondence(cell_correspond)
4421         two_step_joint.pushCorrespondence(node_correspond)
4422         two_joint.pushStep(two_step_joint)
4423         one_joint.setLocalMeshName("maa1")
4424         one_joint.setRemoteMeshName("maa1")
4425         one_joint.setDescription("joint_description_1")
4426         one_joint.setJointName("joint_1")
4427         one_joint.setDomainNumber(1)
4428         two_joint.setLocalMeshName("maa1")
4429         two_joint.setRemoteMeshName("maa1")
4430         two_joint.setDescription("joint_description_2")
4431         two_joint.setJointName("joint_2")
4432         two_joint.setDomainNumber(2)
4433         joints=MEDFileJoints()
4434         joints.pushJoint(one_joint)
4435         joints.pushJoint(two_joint)
4436         mm.setJoints( joints )
4437         mm.write(fileNameWr,2)
4438         #
4439         mm=MEDFileMesh.New(fileNameWr)
4440         self.assertEqual( mm.getNumberOfJoints(), 2)
4441         jointsR = mm.getJoints();
4442         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4443         self.assertEqual( len( jointsR ), 2 )
4444         jointR1 = jointsR[0]
4445         jointR2 = jointsR[1]
4446         self.assertFalse( jointR1 is None )
4447         self.assertFalse( jointR2 is None )
4448         self.assertTrue( jointR1.isEqual( one_joint ))
4449         self.assertTrue( jointR2.isEqual( two_joint ))
4450         pass
4451
4452     def testMEDFileJoint1(self):
4453         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4454         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4455         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4456         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4457         joint1st_1=MEDFileJointOneStep()
4458         joint1st_1.pushCorrespondence(cell_correspond)
4459         joint1st_1.pushCorrespondence(node_correspond)
4460         joint1st_2=MEDFileJointOneStep()
4461         joint1st_2.pushCorrespondence(cell_correspond)
4462         joint1st_2.pushCorrespondence(node_correspond)
4463         joint1st_3=MEDFileJointOneStep()
4464         joint1st_3.pushCorrespondence(node_correspond)
4465         joint1st_3.pushCorrespondence(cell_correspond)
4466         joint1st_4=MEDFileJointOneStep()
4467         joint1st_4.pushCorrespondence(cell_correspond)
4468         joint1st_5=MEDFileJointOneStep()
4469         joint1st_5.pushCorrespondence(cell_correspon2)
4470         joint1st_6=MEDFileJointOneStep()
4471         joint1st_6.pushCorrespondence(cell_correspon3)
4472         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4473         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4474         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4475         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4476         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4477         one_joint=MEDFileJoint()
4478         one_joint.pushStep(joint1st_1)
4479         one_joint.setLocalMeshName("maa1")
4480         one_joint.setRemoteMeshName("maa2")
4481         one_joint.setDescription("joint_description")
4482         one_joint.setJointName("joint_1")
4483         one_joint.setDomainNumber(1)
4484         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4485         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4486         self.assertEqual( "joint_description", one_joint.getDescription())
4487         self.assertEqual( 1, one_joint.getDomainNumber())
4488         self.assertEqual( "joint_1", one_joint.getJointName())
4489         pass
4490     pass
4491
4492 unittest.main()