Salome HOME
Compilation SALOME on Windows
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  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.
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         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
177         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
178         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
179         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
180         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
181         self.assertEqual(3,len(lmm))
182         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
183         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
184         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
185         #
186         self.assertTrue(mm.getUnivNameWrStatus())
187         self.assertTrue(isinstance(mm.getUnivName(),str))
188         self.assertTrue(len(mm.getUnivName())!=0)
189         mbis=mm.getMeshAtLevel(0)
190         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
191         self.assertTrue(m.isEqual(mbis,1e-12));
192         #
193         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
194         pass
195
196     # this test is the testMEDMesh3 except that permutation is dealed here
197     def testMEDMesh4(self):
198         outFileName="MEDFileMesh4.med"
199         c=DataArrayDouble.New()
200         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 ];
201         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
202         c.setValues(coords,9,2)
203         c.setInfoOnComponent(0,"abcdef [km]")
204         c.setInfoOnComponent(1,"ghij [MW]")
205         m=MEDCouplingUMesh.New();
206         m.setMeshDimension(2);
207         m.allocateCells(5);
208         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
209         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
210         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
211         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
212         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
213         m.finishInsertingCells();
214         m.setCoords(c)
215         m.checkCoherency()
216         m1=MEDCouplingUMesh.New();
217         m1.setMeshDimension(1);
218         m1.allocateCells(3);
219         m1.insertNextCell(NORM_SEG2,2,[1,4])
220         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
221         m1.insertNextCell(NORM_SEG2,2,[3,6])
222         m1.finishInsertingCells();
223         m1.setCoords(c)
224         m1.checkCoherency()
225         m2=MEDCouplingUMesh.New();
226         m2.setMeshDimension(0);
227         m2.allocateCells(4);
228         m2.insertNextCell(NORM_POINT1,1,[1])
229         m2.insertNextCell(NORM_POINT1,1,[3])
230         m2.insertNextCell(NORM_POINT1,1,[2])
231         m2.insertNextCell(NORM_POINT1,1,[6])
232         m2.finishInsertingCells();
233         m2.setCoords(c)
234         m2.checkCoherency()
235         #
236         mm=MEDFileUMesh.New()
237         mm.setName("My2ndMEDCouplingMEDmesh")
238         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
239         mm.setCoords(c)
240         renumNode=DataArrayInt.New()
241         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
242         mm.setRenumFieldArr(1,renumNode)
243         mm.setMeshAtLevel(-1,m1,True);
244         mm.setMeshAtLevel(0,m,True);
245         mm.setMeshAtLevel(-2,m2,True);
246         mm.removeMeshAtLevel(-2)
247         mm.setMeshAtLevel(-2,m2,True);
248         # playing with groups
249         g1_2=DataArrayInt.New()
250         g1_2.setValues([2,3],2,1)
251         g1_2.setName("G1")
252         g2_2=DataArrayInt.New()
253         g2_2.setValues([2,0,3],3,1)
254         g2_2.setName("G2")
255         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
256         g1_1=DataArrayInt.New()
257         g1_1.setValues([0,2,1],3,1)
258         g1_1.setName("G1")
259         g2_1=DataArrayInt.New()
260         g2_1.setValues([0,2],2,1)
261         g2_1.setName("G2")
262         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
263         g1_N=DataArrayInt.New()
264         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
265         g1_N.setName("G1")
266         g2_N=DataArrayInt.New()
267         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
268         g2_N.setName("G2")
269         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
270         # check content of mm
271         t=mm.getGroupArr(0,"G1",True)
272         self.assertTrue(g1_2.isEqual(t));
273         t=mm.getGroupArr(0,"G2",True)
274         self.assertTrue(g2_2.isEqual(t));
275         t=mm.getGroupArr(-1,"G1",True)
276         self.assertTrue(g1_1.isEqual(t));
277         t=mm.getGroupArr(-1,"G2",True)
278         self.assertTrue(g2_1.isEqual(t));
279         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
280         #
281         mm.write(outFileName,2);
282         mm2=MEDFileMesh.New(outFileName)
283         res=mm.isEqual(mm2,1e-12)
284         self.assertTrue(res[0])
285         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
286         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
287         mm2.keepFamIdsOnlyOnLevs([3],[-1])
288         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
289             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
290             pass
291         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
292         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
293         #
294         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
295         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
296         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
297         self.assertTrue(not mm2.existsFamily("Family_-8"))
298         mm2.createGroupOnAll(-1,"GrpOnAllFace")
299         self.assertTrue(mm2.existsFamily("Family_-8"))
300         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
301         pass
302
303     #testing persistence of retrieved arrays
304     def testMEDMesh5(self):
305         fileName="Pyfile18.med"
306         mname="ExampleOfMultiDimW"
307         medmesh=MEDFileUMesh.New(fileName,mname)
308         m1_0=medmesh.getLevel0Mesh(True)
309         da1=medmesh.getFamilyFieldAtLevel(0)
310         del medmesh
311         self.assertEqual(20,m1_0.getNumberOfCells())
312         self.assertEqual(20,da1.getNumberOfTuples())
313         pass
314
315     def testMEDMesh6(self):
316         outFileName="MEDFileMesh5.med"
317         m=MEDFileCMesh.New()
318         m.setTime(-1,-1,2.3)
319         m1=MEDCouplingCMesh.New();
320         da=DataArrayDouble.New()
321         da.setValues([0.,1.,2.],3,1)
322         da.setInfoOnComponent(0,"XX [mm]")
323         m1.setCoordsAt(0,da)
324         da=DataArrayDouble.New()
325         da.setValues([0.,1.2],2,1)
326         da.setInfoOnComponent(0,"YY [km]")
327         m1.setCoordsAt(1,da)
328         da=DataArrayDouble.New()
329         da.setValues([0.,1.3],2,1)
330         da.setInfoOnComponent(0,"ZZ [um]")
331         m1.setCoordsAt(2,da)
332         m.setMesh(m1)
333         m.setName("myFirstCartMesh")
334         m.setDescription("mmmmpppppppp")
335         m.setTimeValue(2.3)
336         m.setTimeUnit("ms")
337         da=DataArrayInt.New()
338         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
339         m.setFamilyFieldArr(1,da)
340         m.setFamilyId("family1",1)
341         da=m.getFamilyArr(1,"family1")
342         expected1=[2,4,9]
343         self.assertEqual(expected1,da.getValues())
344         self.assertTrue(m.getUnivNameWrStatus())
345         m.write(outFileName,2);
346         mm=MEDFileMesh.New(outFileName)
347         self.assertTrue(isinstance(mm,MEDFileCMesh))
348         self.assertTrue(isinstance(mm.getUnivName(),str))
349         self.assertTrue(len(mm.getUnivName())!=0)
350         self.assertTrue(m.isEqual(mm,1e-12)[0])
351         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
352         m2=mm.getMesh()
353         tt=m.getTime()
354         m1.setTime(tt[2],tt[0],tt[1])
355         m1.setName(m.getName())
356         m1.setTimeUnit(m.getTimeUnit())
357         m1.setDescription(m.getDescription())
358         self.assertTrue(m2.isEqual(m1,1e-12));
359         pass
360
361     def testMEDMesh7(self):
362         fileName="Pyfile24.med"
363         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
364         m=MEDFileUMesh.New()
365         m.setCoords(m2.getCoords())
366         m.setMeshAtLevel(0,m2)
367         m.setMeshAtLevel(-1,m1)
368         m.setMeshAtLevel(-2,m0)
369         m.setFamilyFieldArr(0,f2)
370         m.setFamilyFieldArr(-1,f1)
371         m.setFamilyFieldArr(-2,f0)
372         m.setFamilyFieldArr(1,p)
373         m.setRenumFieldArr(0,n2)
374         m.setRenumFieldArr(-1,n1)
375         m.setRenumFieldArr(-2,n0)
376         nbOfFams=len(fns)
377         for i in xrange(nbOfFams):
378             m.addFamily(fns[i],fids[i])
379             pass
380         nbOfGrps=len(grpns)
381         for i in xrange(nbOfGrps):
382             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
383             pass
384         m.setName(m2.getName())
385         m.setDescription(m2.getDescription())
386         #
387         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
388         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
389         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
390         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
391         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
392         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
393         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
394         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
395         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
396         #
397         m.write(fileName,2)
398         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
399         pass
400
401     def funcToTestDelItem(self,ff):
402         del ff[[0.02,(3,4)]]
403         pass
404
405     #emulation of pointe.med file.
406     def testMEDField1(self):
407         mm=MEDFileMesh.New("Pyfile17.med")
408         mm.write("Pyfile17_bis.med",2)
409         ff=MEDFileFieldMultiTS("Pyfile17.med")
410         tsExpected=[[1,2],[3,4],[5,6]]
411         self.assertEqual(3,len(ff))
412         for pos,f1ts in enumerate(ff):
413             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
414             self.assertEqual(type(f1ts),MEDFileField1TS)
415             pass
416         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
417         self.assertEqual([3,4],ff[1].getTime()[:-1])
418         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
419         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
420         ff.write("Pyfile17_bis.med",0)
421         #
422         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
423         self.assertEqual([(1,2),(3,4),(5,6)],ts)
424         self.funcToTestDelItem(ff)
425         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
426         self.assertEqual([(1,2)],ts)
427         pass
428
429     #profiles
430     def testMEDField2(self):
431         mm=MEDFileMesh.New("Pyfile19.med")
432         mm.write("Pyfile19_bis.med",2)
433         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
434         ff.write("Pyfile19_bis.med",0)
435         self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
436         pass
437
438     #gauss points
439     def testMEDField3(self):
440         mm=MEDFileMesh.New("Pyfile13.med")
441         mm.write("Pyfile13_bis.med",2)
442         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
443         ff.write("Pyfile13_bis.med",0)
444         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
445         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
446         f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
447         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
448         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
449         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
450         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
451         ff4=MEDFileField1TS.New("Pyfile13.med")
452         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
453         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
454         pass
455
456     #gauss NE
457     def testMEDField4(self):
458         mm=MEDFileMesh.New("Pyfile14.med")
459         mm.write("Pyfile14_bis.med",2)
460         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
461         ff.write("Pyfile14_bis.med",0)
462         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
463         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
464         f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
465         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
466         pass
467
468     # MEDField get/set on pointe.med
469     def testMEDField5(self):
470         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
471         f=ff.getFieldAtLevel(ON_CELLS,0)
472         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
473         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
474         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
475         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
476         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
477         # no with renumbering
478         f=ff.getFieldAtLevel(ON_CELLS,0,1)
479         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
480         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
481         f=ff.getFieldAtLevel(ON_CELLS,0,3)
482         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
483         f=ff.getFieldAtLevel(ON_CELLS,0,2)
484         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
485         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
486         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
487         pass
488
489     # MEDField get/set on profiles nodes
490     def testMEDField6(self):
491         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
492         its=ff.getIterations()
493         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
494         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
495         f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
496         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
497         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
498         its=ff.getIterations()
499         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
500         f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
501         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
502         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
503         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
504         pass
505
506     # MEDField get/set on profiles cells
507     def testMEDField7(self):
508         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
509         its=ff.getIterations()
510         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
511         f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
512         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513         pass
514
515     #first test of assignation. No profile and types sorted by type.
516     def testMEDField8(self):
517         fname="Pyfile25.med"
518         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
519         m1=f1.getMesh()
520         mm1=MEDFileUMesh.New()
521         mm1.setCoords(m1.getCoords())
522         mm1.setMeshAtLevel(0,m1)
523         mm1.setName(m1.getName())
524         mm1.write(fname,2)
525         ff1=MEDFileField1TS.New()
526         ff1.setFieldNoProfileSBT(f1)
527         ff1.write(fname,0)
528         f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
529         itt,orr,ti=ff1.getTime()
530         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
531         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
532         ff1.setTime(3,4,2.3)
533         itt,orr,ti=ff1.getTime()
534         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
535         da,infos=ff1.getUndergroundDataArrayExt()
536         f2.getArray().setName(da.getName())#da has the same name than f2
537         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
538         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
539         #
540         fname="Pyfile26.med"
541         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
542         m1=f1.getMesh()
543         mm1=MEDFileUMesh.New()
544         mm1.setCoords(m1.getCoords())
545         mm1.setMeshAtLevel(0,m1)
546         mm1.setName(m1.getName())
547         mm1.write(fname,2)
548         ff1=MEDFileField1TS.New()
549         ff1.setFieldNoProfileSBT(f1)
550         nv=1456.
551         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
552         ff1.write(fname,0)
553         f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
554         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
555         f1.getArray().setIJ(0,0,nv)
556         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
557         #
558         fname="Pyfile27.med"
559         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
560         m1=f1.getMesh()
561         mm1=MEDFileUMesh.New()
562         mm1.setCoords(m1.getCoords())
563         mm1.setMeshAtLevel(0,m1)
564         mm1.setName(m1.getName())
565         mm1.write(fname,2)
566         ff1=MEDFileField1TS.New()
567         ff1.setFieldNoProfileSBT(f1)
568         ff1.write(fname,0)
569         f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
570         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
571         da,infos=ff1.getUndergroundDataArrayExt()
572         f2.getArray().setName(da.getName())#da has the same name than f2
573         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
574         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
575         #
576         fname="Pyfile28.med"
577         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
578         f1InvalidCpy=f1.deepCpy()
579         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
580         f1InvalidCpy2=f1.deepCpy()
581         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
582         m1=f1.getMesh()
583         mm1=MEDFileUMesh.New()
584         mm1.setCoords(m1.getCoords())
585         mm1.setMeshAtLevel(0,m1)
586         mm1.setName(m1.getName())
587         mm1.write(fname,2)
588         ff1=MEDFileField1TS.New()
589         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
590         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
591         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
592         ff1.setFieldNoProfileSBT(f1)
593         ff1.write(fname,0)
594         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
595         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
596         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
597         sbt=ff2.getFieldSplitedByType2()
598         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
599         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
600         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
601         self.assertEqual(6,loc1.getNumberOfPointsInCells())
602         self.assertEqual(3,loc1.getNumberOfGaussPoints())
603         self.assertEqual(2,loc1.getDimension())
604         da,infos=ff2.getUndergroundDataArrayExt()
605         f2.getArray().setName(da.getName())#da has the same name than f2
606         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
607         self.assertEqual(53,da.getNumberOfTuples())
608         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)
609         #
610         pass
611     
612     def testMEDFileData1(self):
613         fname="Pyfile29.med"
614         d=MEDFileData.New()
615         #
616         m1=MEDLoaderDataForTest.build1DMesh_1()
617         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
618         mmm1=MEDFileMeshMultiTS.New() ;
619         mmm1.setOneTimeStep(mm1)
620         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
621         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
622         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
623         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
624         d.setMeshes(ms)
625         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
626             self.assertEqual(name,mmm.getName())
627             self.assertEqual(type(mmm),MEDFileUMesh)
628             pass
629         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
630         #
631         ff1=MEDFileFieldMultiTS.New()
632         ff21=MEDFileFieldMultiTS.New()
633         ff22=MEDFileFieldMultiTS.New()
634         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
635         f1.getArray().setInfoOnComponent(0,"power [kW]")
636         ff1.appendFieldNoProfileSBT(f1)
637         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
638         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
639         ff21.appendFieldNoProfileSBT(f21)
640         f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
641         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
642         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
643         ff22.appendFieldNoProfileSBT(f22)
644         fs=MEDFileFields.New()
645         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
646         for name,fmts in zip(["f1","f21","f22"],fs):
647             self.assertEqual(name,fmts.getName())
648             pass
649         d.setFields(fs)
650         #
651         fname2="Pyfile29_2.med"
652         d.write(fname2,2)
653         #
654         d2=MEDFileData.New(fname2)
655         self.assertEqual(2,d2.getNumberOfMeshes())
656         self.assertEqual(3,d2.getNumberOfFields())
657         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
658         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
659         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
660         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
661         self.assertTrue(m1.isEqual(m1bis,1e-12))
662         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
663         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
664         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
665         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
666         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
667         pass
668     
669     def testMEDField9(self):
670         # first test field profile WR. Full type but with some type missing
671         fname="Pyfile30.med"
672         m1=MEDLoaderDataForTest.build2DMesh_3()
673         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
674         mm1.write(fname,2)
675         ff1=MEDFileField1TS.New()
676         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
677         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
678         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.
679         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
680         #
681         ff1.setFieldProfile(f1,mm1,0,da)
682         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
683         ff1=ff1.deepCpy()
684         ff1.write(fname,0)
685         #
686         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
687         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
688         self.assertTrue(vals.isEqual(d,1e-14))
689         #
690         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
691         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
692         ff2.deepCpyGlobs(ff3)
693         sbt=ff2.getFieldSplitedByType2()
694         self.assertEqual(3,sbt[0][0])#TRI3
695         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
696         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
697         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
698         self.assertEqual(4,sbt[1][0])#QUAD4
699         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
700         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
701         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
702         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
703         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
704         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
705         self.assertTrue(vals.isEqual(d,1e-14))
706         pass
707     
708     def testMEDField10(self):
709         fname="Pyfile31.med"
710         m1=MEDLoaderDataForTest.build2DMesh_1()
711         m1.renumberCells([0,1,4,2,3,5],False)
712         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
713         mm1.write(fname,2)
714         ff1=MEDFileFieldMultiTS.New()
715         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
716         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
717         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.
718         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
719         #
720         ff1.appendFieldProfile(f1,mm1,0,da)
721         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
722         ff1.appendFieldProfile(f1,mm1,0,da)
723         ff1=ff1.deepCpy()
724         ff1.write(fname,0)
725         #
726         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
727         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
728         self.assertTrue(vals.isEqual(e,1e-14))
729         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
730         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
731         self.assertTrue(vals.isEqual(d,1e-14))
732         #
733         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
734         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
735         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
736         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
737         self.assertTrue(vals.isEqual(e,1e-14))
738         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
739         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
740         self.assertTrue(vals.isEqual(d,1e-14))
741         pass
742     
743     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
744     def testMEDField11(self):
745         fname="Pyfile32.med"
746         m1=MEDLoaderDataForTest.build2DMesh_1()
747         m1.renumberCells([0,1,4,2,3,5],False)
748         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
749         mm1.write(fname,2)
750         ff1=MEDFileField1TS.New()
751         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
752         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
753         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.
754         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
755         #
756         ff1.setFieldProfile(f1,mm1,0,da)
757         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
758         ff1.write(fname,0)
759         #
760         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
761         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
762         self.assertTrue(vals.isEqual(d,1e-14))
763         ## #
764         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
765         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
766         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
767         self.assertTrue(vals.isEqual(d,1e-14))
768         pass
769
770     def testMEDField12(self):
771         fname="Pyfile33.med"
772         m1=MEDLoaderDataForTest.build2DMesh_1()
773         m1.renumberCells([0,1,4,2,3,5],False)
774         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
775         mm1.write(fname,2)
776         ff1=MEDFileFieldMultiTS.New()
777         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
778         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
779         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.
780         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
781         #
782         ff1.appendFieldProfile(f1,mm1,0,da)
783         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
784         ff1.appendFieldProfile(f1,mm1,0,da)
785         ff1.write(fname,0)
786         #
787         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
788         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
789         self.assertTrue(vals.isEqual(e,1e-14))
790         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
791         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
792         self.assertTrue(vals.isEqual(d,1e-14))
793         #
794         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
795         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
796         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
797         self.assertTrue(vals.isEqual(e,1e-14))
798         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
799         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
800         self.assertTrue(vals.isEqual(d,1e-14))
801         pass
802
803     def testMEDField13(self):
804         fname="Pyfile34.med"
805         m1=MEDLoaderDataForTest.build2DMesh_1()
806         m1.renumberCells([0,1,4,2,3,5],False)
807         tmp=m1.getName();
808         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
809         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
810         mm1.write(fname,2)
811         ff1=MEDFileField1TS.New()
812         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
813         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
814         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.
815         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
816         #
817         ff1.setFieldProfile(f1,mm1,0,da)
818         ff1.write(fname,0)
819         #
820         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
821         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822         self.assertTrue(vals.isEqual(d,1e-14))
823         #
824         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
825         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
826         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
827         self.assertTrue(vals.isEqual(d,1e-14))
828         pass
829
830     def testMEDField14(self):
831         fname="Pyfile35.med"
832         m1=MEDLoaderDataForTest.build2DMesh_1()
833         m1.renumberCells([0,1,4,2,3,5],False)
834         tmp=m1.getName();
835         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
836         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
837         mm1.write(fname,2)
838         ff1=MEDFileFieldMultiTS.New()
839         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
840         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
841         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.
842         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
843         #
844         ff1.appendFieldProfile(f1,mm1,0,da)
845         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
846         ff1.appendFieldProfile(f1,mm1,0,da)
847         ff1.write(fname,0)
848         #
849         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
850         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
851         self.assertTrue(vals.isEqual(d,1e-14))
852         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
853         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
854         self.assertTrue(vals.isEqual(e,1e-14))
855         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
856         #
857         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
858         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
859         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
860         self.assertTrue(vals.isEqual(d,1e-14))
861         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
862         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
863         self.assertTrue(vals.isEqual(e,1e-14))
864         pass
865     # 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.
866     # 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
867     # 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 !
868     def testMEDField15(self):
869         fname="Pyfile36.med"
870         m0=MEDLoaderDataForTest.build2DMesh_1()
871         m0.renumberCells([0,1,4,2,3,5],False)
872         tmp=m0.getName();
873         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
874         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
875         ff1=MEDFileField1TS.New()
876         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
877         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
878         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.
879         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
880         #
881         ff1.setFieldProfile(f1,mm1,0,da)
882         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
883         mm1.write(fname,2)
884         ff1.write(fname,0)
885         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
886         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
887         self.assertTrue(p1.isIdentity())
888         self.assertEqual(5,p1.getNumberOfTuples())
889         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
890         pass
891     # Test for getFieldAtTopLevel method
892     def testMEDField16(self):
893         fname="Pyfile37.med"
894         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
895         m1=f1.getMesh()
896         mm1=MEDFileUMesh.New()
897         mm1.setCoords(m1.getCoords())
898         mm1.setMeshAtLevel(0,m1)
899         mm1.setName(m1.getName())
900         ff1=MEDFileField1TS.New()
901         ff1.setFieldNoProfileSBT(f1)
902         m2=m1.buildDescendingConnectivity()[0]
903         m2.sortCellsInMEDFileFrmt()
904         m2.setName(m1.getName())
905         mm1.setMeshAtLevel(-1,m2)
906         mm1.write(fname,2)
907         f2=m2.getMeasureField(True)
908         dd=DataArrayDouble.New()
909         dd.alloc(f2.getArray().getNumberOfTuples(),3)
910         dd[:,0]=f2.getArray()
911         dd[:,1]=2*f2.getArray()
912         dd[:,2]=3*f2.getArray()
913         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
914         f2.setArray(dd)
915         f2.copyTinyStringsFrom(f1)
916         f2.copyTinyAttrFrom(f1)
917         ff1.setFieldNoProfileSBT(f2)
918         ff1.write(fname,0)
919         # Reading Pyfile37.med
920         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
921         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
922         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
923         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
924         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
925         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
926         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
927         # More complex
928         fname="Pyfile38.med"
929         mm1.write(fname,2)
930         ff1=MEDFileField1TS.New()
931         ff1.setFieldNoProfileSBT(f2)
932         ff1.write(fname,0)
933         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
934         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
935         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
936         pass
937
938     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
939     def testMEDField17(self):
940         fname="Pyfile39.med"
941         m1=MEDLoaderDataForTest.build2DMesh_1()
942         m1.renumberCells([0,1,4,2,3,5],False)
943         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
944         mm1.write(fname,2)
945         ffs=MEDFileFields.New()
946         ff1=MEDFileFieldMultiTS.New()
947         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
948         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
949         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.
950         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
951         #
952         ff1.appendFieldProfile(f1,mm1,0,da)
953         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
954         ff1.appendFieldProfile(f1,mm1,0,da)
955         ffs.resize(1)
956         ffs.setFieldAtPos(0,ff1)
957         ffs=ffs.deepCpy()
958         ffs.write(fname,0)
959         #
960         ffsr=MEDFileFields.New(fname)
961         ff3=ffsr.getFieldAtPos(0)
962         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
963         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
964         pass
965
966     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
967     def testMEDField18(self):
968         fname="Pyfile40.med"
969         m1=MEDLoaderDataForTest.build2DMesh_1()
970         m1.renumberCells([0,1,4,2,3,5],False)
971         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
972         mm1.write(fname,2)
973         ffs=MEDFileFields.New()
974         ff1=MEDFileFieldMultiTS.New()
975         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
976         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
977         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.
978         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
979         #
980         ff1.appendFieldProfile(f1,mm1,0,da)
981         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
982         ff1.appendFieldProfile(f1,mm1,0,da)
983         ffs.pushField(ff1)
984         ffs.write(fname,0)
985         #
986         ffsr=MEDFileFields.New(fname)
987         ff3=ffsr.getFieldAtPos(0)
988         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
989         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
990         pass
991
992     def testMEDFieldBug1(self):
993         fname="Pyfile13.med"
994         d=MEDFileData.New(fname)
995         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
996         pass
997
998     def testMEDMesh8(self):
999         m=MEDLoaderDataForTest.build1DMesh_1()
1000         m.convertQuadraticCellsToLinear()
1001         mm=MEDFileUMesh.New()
1002         mm.setMeshAtLevel(0,m)
1003         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1004         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1005         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1006         mm.setGroupsAtLevel(0,[g1,g2],False)
1007         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1008         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1009         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1010         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1011         mm.assignFamilyNameWithGroupName()
1012         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1013         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1014         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1015         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1016         #
1017         mm=MEDFileUMesh.New()
1018         mm.setMeshAtLevel(0,m)
1019         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1020         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1021         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1022         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1023         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1024         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1025         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
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.changeFamilyId(5,6)
1032         g=mm.getGroupArr(0,"g3")
1033         self.assertTrue(g.isEqual(g3));
1034         g=mm.getGroupArr(0,"g2")
1035         self.assertTrue(g.isEqual(g2));
1036         g=mm.getGroupArr(0,"g1")
1037         self.assertTrue(g.isEqual(g1));
1038         pass
1039     
1040     # bug detected by gauthier
1041     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1042         fname="Pyfile41.med"
1043         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1044         m1=f1.getMesh()
1045         mm1=MEDFileUMesh.New()
1046         mm1.setCoords(m1.getCoords())
1047         mm1.setMeshAtLevel(0,m1)
1048         mm1.write(fname,2)
1049         ff1=MEDFileField1TS.New()
1050         ff1.setFieldNoProfileSBT(f1)
1051         ff1.write(fname,0)
1052         # writing mesh1 and field1, now creation of mesh2 and field2
1053         f2=f1.deepCpy()
1054         m2=f2.getMesh()
1055         m2.translate([0.5,0.6,0.7])
1056         m2.setName("3DSurfMesh_2")
1057         f2.getArray()[:]*=2.
1058         f2.setName("VectorFieldOnCells2")
1059         mm2=MEDFileUMesh.New()
1060         mm2.setCoords(m2.getCoords())
1061         mm2.setMeshAtLevel(0,m2)
1062         mm2.write(fname,0)
1063         ff2=MEDFileField1TS.New()
1064         ff2.setFieldNoProfileSBT(f2)
1065         ff2.write(fname,0)
1066         #
1067         f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1068         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1069         f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1070         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1071         pass
1072
1073     def testMEDLoaderMultiLevelCellField1(self):
1074         fname="Pyfile42.med"
1075         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1076         m=MEDFileUMesh.New()
1077         m.setCoords(m2.getCoords())
1078         m.setMeshAtLevel(0,m2)
1079         m.setMeshAtLevel(-1,m1)
1080         m.setMeshAtLevel(-2,m0)
1081         m.write(fname,2)
1082         #
1083         FieldName1="Field1"
1084         compNames1=["comp1","comp2","comp3"]
1085         ff1=MEDFileField1TS.New()
1086         da2=DataArrayDouble.New()
1087         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1088         da2.iota(7.)
1089         da2.rearrange(len(compNames1))
1090         da2.setInfoOnComponents(compNames1)
1091         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1092         ff1.setFieldNoProfileSBT(f2)
1093         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1094         da0=DataArrayDouble.New()
1095         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1096         da0.iota(190.)
1097         da0.rearrange(len(compNames1))
1098         da0.setInfoOnComponents(compNames1)
1099         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1100         ff1.setFieldNoProfileSBT(f0)
1101         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1102         da1=DataArrayDouble.New()
1103         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1104         da1.iota(90.)
1105         da1.rearrange(len(compNames1))
1106         da1.setInfoOnComponents(compNames1)
1107         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1108         ff1.setFieldNoProfileSBT(f1)
1109         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1110         #
1111         ff1.write(fname,0)
1112         #
1113         FieldName2="Field2"
1114         compNames2=["comp11","comp22"]
1115         ff2=MEDFileField1TS.New()
1116         da0=DataArrayDouble.New()
1117         da0.alloc(m0.getNumberOfCells()*2,1)
1118         da0.iota(-190.)
1119         da0.rearrange(2)
1120         da0.setInfoOnComponents(compNames2)
1121         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1122         ff2.setFieldNoProfileSBT(f0)
1123         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1124         da1=DataArrayDouble.New()
1125         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1126         da1.iota(-90.)
1127         da1.rearrange(len(compNames2))
1128         da1.setInfoOnComponents(compNames2)
1129         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1130         ff2.setFieldNoProfileSBT(f1)
1131         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1132         #
1133         ff2.write(fname,0)
1134         #
1135         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1136         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1137         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1138         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1139         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1140         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1141         pass
1142
1143     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1144         fname="Pyfile43.med"
1145         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1146         m=MEDFileUMesh.New()
1147         m.setMeshAtLevel(0,m2)
1148         m.setMeshAtLevel(-1,m1)
1149         m.setMeshAtLevel(-2,m0)
1150         f=MEDFileField1TS.New()
1151         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1152         ff.setName("NodeFieldPfl")
1153         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1154         ff.setArray(arr)
1155         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1156         f.setFieldProfile(ff,m,-2,pfl)
1157         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1158         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1159         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1160         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1161         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1162         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1163         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1164         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1165         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1166         expected1=[1.,10.,100.,2.,20.,200.]
1167         nodeCoordsWithValue1=[10.,2.5,0.]
1168         nodeCoordsWithValue2=[10.,3.75,0.]
1169         for i in xrange(3):
1170             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1171             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1172             pass
1173         for i in xrange(6):
1174             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1175             pass
1176         del tes0
1177         #
1178         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1179         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1180         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1181         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1182         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1183         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1184         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1185         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1186         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1187         for i in xrange(6):
1188             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1189             pass
1190         m.write(fname,2)
1191         f.write(fname,0)
1192         #
1193         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1194         f=MEDFileField1TS.New()
1195         f.setFieldProfile(ff,m,-2,pfl)
1196         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1197         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1198         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1199         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1200         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1201         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1202         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1203         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1204         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1205         expected2=[2.,20.,200.,1.,10.,100.]
1206         for i in xrange(3):
1207             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1208             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1209             pass
1210         for i in xrange(6):
1211             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1212             pass
1213         #
1214         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1215         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1216         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1217         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1218         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1219         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1220         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1221         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1222         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1223         for i in xrange(6):
1224             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1225             pass
1226         pass
1227
1228     def testDuplicateNodesOnM1Group1(self):
1229         fname="Pyfile44.med"
1230         m=MEDCouplingCMesh.New()
1231         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1232         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1233         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1234         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1235         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1236         m2.setName(m.getName())
1237         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1238         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1239         mm=MEDFileUMesh.New()
1240         mm.setMeshAtLevel(0,m)
1241         mm.setMeshAtLevel(-1,m2)
1242         mm.setGroupsAtLevel(-1,[grp,grp2])
1243         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1244         mm.setGroupsAtLevel(1,[grpNode])
1245         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1246         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1247         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1248         #
1249         self.assertEqual(30,mm.getNumberOfNodes())
1250         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1251         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1252         #
1253         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1254         self.assertEqual([15,16,17],nodes.getValues());
1255         self.assertEqual([7,8,9],cells.getValues());
1256         self.assertEqual([12,13,14],cells2.getValues());
1257         self.assertEqual(33,mm.getNumberOfNodes())
1258         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1259         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1260         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1261         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1262         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
1263         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1264         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
1265         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1266         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])
1267         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1268         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1269         #
1270         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1271         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1272         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1273         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1274         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1275         mm.write(fname,2)
1276         pass
1277
1278     def testDuplicateNodesOnM1Group2(self):
1279         fname="Pyfile45.med"
1280         m=MEDCouplingCMesh.New()
1281         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1282         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1283         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1284         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1285         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1286         m2.setName(m.getName())
1287         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1288         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1289         mm=MEDFileUMesh.New()
1290         mm.setMeshAtLevel(0,m)
1291         mm.setMeshAtLevel(-1,m2)
1292         mm.setGroupsAtLevel(-1,[grp,grp2])
1293         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1294         mm.setGroupsAtLevel(1,[grpNode])
1295         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1296         ref1=[4,9,8,14,15,4,10,9,15,16]
1297         ref2=[4,9,8,14,30,4,10,9,30,16]
1298         #
1299         self.assertEqual(30,mm.getNumberOfNodes())
1300         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1301         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1302         #
1303         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1304         self.assertEqual([15],nodes.getValues());
1305         self.assertEqual([7,8],cells.getValues());
1306         self.assertEqual([12,13],cells2.getValues());
1307         self.assertEqual(31,mm.getNumberOfNodes())
1308         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1309         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1310         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1311         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1312         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
1313         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1314         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
1315         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1316         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])
1317         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1318         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1319         #
1320         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1321         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1322         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1323         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1324         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1325         mm.write(fname,2)       
1326         pass
1327
1328     def testBasicConstructors(self):
1329         fname="Pyfile18.med"
1330         m=MEDFileMesh.New(fname)
1331         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1332         m=MEDFileMesh.New(fname)
1333         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1334         m=MEDFileUMesh(fname)
1335         m=MEDFileUMesh()
1336         self.testMEDMesh6()
1337         m=MEDFileCMesh("MEDFileMesh5.med")
1338         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1339         m=MEDFileCMesh()
1340         m=MEDFileMeshMultiTS()
1341         m=MEDFileMeshMultiTS(fname)
1342         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1343         m=MEDFileMeshes()
1344         m=MEDFileMeshes(fname)
1345         m=MEDFileField1TS()
1346         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1347         m=MEDFileFieldMultiTS()
1348         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1349         m=MEDFileFields()
1350         m=MEDFileFields(fname)
1351         m=MEDFileData()
1352         m=MEDFileData(fname)
1353         #
1354         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1355         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1356         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1357         m=MEDCouplingCMesh()
1358         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1359         m=MEDCouplingFieldTemplate(ON_NODES)
1360         m=MEDCouplingMultiFields([])
1361         m=MEDCouplingFieldOverTime([])
1362         pass
1363
1364     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1365     def testBugSemiPartialField(self):
1366         fname="Pyfile46.med"
1367         m=MEDLoaderDataForTest.build2DMesh_3()
1368         m=m[:10] ; m.setName("mesh")
1369         f=m.getMeasureField(ON_CELLS)
1370         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1371         f.setTime(5.5,3,4)
1372         f.setName("SemiPartialField")
1373         #
1374         f1=f[:6] ; f1.getMesh().setName(m.getName())
1375         f2=f[6:] ; f2.getMesh().setName(m.getName())
1376         #
1377         mm=MEDFileUMesh.New()
1378         mm.setMeshAtLevel(0,m)
1379         ff=MEDFileField1TS.New()
1380         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1381         mm.write(fname,2)
1382         ff.write(fname,0)
1383         #
1384         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1385         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1386         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1387         #
1388         fread.checkCoherency()
1389         fread2.checkCoherency()
1390         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1391         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1392         pass
1393
1394     def testUnPolyze1(self):
1395         fname="Pyfile47.med"
1396         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1397         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]
1398         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1399         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]]))
1400         mm.write(fname,2)
1401         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1402         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1403         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1404         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1405         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1406         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1407         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1408         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1409         # to test
1410         mm.setRenumFieldArr(0,None)
1411         mm.setFamilyFieldArr(-1,None)
1412         pass
1413
1414     def testUnPolyze2(self):
1415         fname="Pyfile48.med"
1416         mfd=MEDFileData.New()
1417         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1418         meshes=MEDFileMeshes.New()
1419         meshes.pushMesh(mm)
1420         mfd.setMeshes(meshes)
1421         fields=MEDFileFields.New()
1422         mfd.setFields(fields)
1423         ff=MEDFileFieldMultiTS.New()
1424         fields.pushField(ff)
1425         #
1426         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1427         f0_0.setTime(9.5,3,4)
1428         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1429         f0_0.setArray(da)
1430         f0_0.setMesh(mm.getMeshAtLevel(0))
1431         ff.appendFieldNoProfileSBT(f0_0)
1432         ff0=ff.getTimeStepAtPos(0)
1433         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1434         f0_1.setTime(9.5,3,4)
1435         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1436         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1437         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1438         f0_1.setArray(da)
1439         ff0.setFieldProfile(f0_1,mm,0,pfl)
1440         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1441         f0_2.setTime(9.5,3,4)
1442         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1443         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
1444         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1445         f0_2.setArray(da)
1446         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1447         mfd.getFields().shallowCpyGlobs(ff0)
1448         #
1449         mfd.unPolyzeMeshes()
1450         #
1451         fmts=mfd.getFields()[0]
1452         self.assertEqual(fmts.getNumberOfTS(),1)
1453         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1454         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1455         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))])
1456         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1457         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1458         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1459         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1460         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1461         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1462         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1463         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))
1464         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1465         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1466         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1467         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1468         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1469         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])
1470         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1471         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1472         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1473         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])
1474         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1475         #
1476         mfd.write(fname,2)
1477         pass
1478
1479     def testGaussWriteOnPfl1(self):
1480         fname="Pyfile49.med"
1481         fname2="Pyfile50.med"
1482         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1483         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1484         mQ8.allocateCells(1)
1485         mQ8.insertNextCell(NORM_QUAD8,range(8))
1486         mQ8.finishInsertingCells()
1487         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1488         mQ4.allocateCells(1)
1489         mQ4.insertNextCell(NORM_QUAD4,range(4))
1490         mQ4.finishInsertingCells()
1491         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1492         mT3.allocateCells(1)
1493         mT3.insertNextCell(NORM_TRI3,range(3))
1494         mT3.finishInsertingCells()
1495         
1496         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.]]
1497         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1498         ms[:]=(elt.deepCpy() for elt in ms)
1499         for m,t in zip(ms,tr):
1500             d=m.getCoords() ; d+= t
1501             pass
1502         m=MEDCouplingUMesh.MergeUMeshes(ms)
1503         m.setName("mesh")
1504         m2=m[:13] ; m2.setName(m.getName())
1505         ### 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.
1506         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1507         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1508         f.setMesh(m2)
1509         f.setTime(4.5,1,2)
1510         da=DataArrayDouble(34) ; da.iota(3.)
1511         f.setArray(da)
1512         f.setName("fieldCellOnPflWithoutPfl")
1513         fInvalid=f.deepCpy()
1514         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])
1515         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])
1516         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])
1517         f.checkCoherency()
1518         fInvalid2=fInvalid.deepCpy()
1519         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1520         #
1521         mm=MEDFileUMesh()
1522         mm.setMeshAtLevel(0,m)
1523         mm.write(fname,2)
1524         #
1525         f1ts=MEDFileField1TS.New()
1526         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1527         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1528         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1529         f1ts.setFieldProfile(f,mm,0,pfl)
1530         f1ts.write(fname,0)
1531         #
1532         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1533         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1534         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1535         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1536         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1537         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1538         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1539         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1540         #
1541         dataRead=MEDFileData.New(fname)
1542         mRead=dataRead.getMeshes()[0]
1543         f1tsRead=dataRead.getFields()[0][0]
1544         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1545         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1546         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1547         f2_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1548         f2_bis.checkCoherency()
1549         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1550         #
1551         MEDLoader.WriteField(fname2,f,True)
1552         f2_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1553         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1554         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1555         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1556         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1557         m2=m[pfl] ; m2.setName(m.getName())
1558         f.setMesh(m2)
1559         f.setTime(4.5,1,2)
1560         da=DataArrayDouble(35) ; da.iota(3.)
1561         f.setArray(da)
1562         f.setName("fieldCellOnPflWithoutPfl2")
1563         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1564         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])
1565         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])
1566         f.checkCoherency()
1567         #
1568         mm=MEDFileUMesh()
1569         mm.setMeshAtLevel(0,m)
1570         mm.write(fname,2)
1571         f1ts=MEDFileField1TS.New()
1572         f1ts.setFieldProfile(f,mm,0,pfl)
1573         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1574         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1575         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1576         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1577         f1ts.write(fname,0)
1578         dataRead=MEDFileData.New(fname)
1579         mRead=dataRead.getMeshes()[0]
1580         f1tsRead=dataRead.getFields()[0][0]
1581         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1582         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1583         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1584         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1585         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1586         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1587         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1588         #
1589         MEDLoader.WriteField(fname2,f,True)
1590         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1591         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1592         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1593         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1594         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1595         f.setMesh(m)
1596         f.setTime(4.5,1,2)
1597         da=DataArrayDouble(60) ; da.iota(3.)
1598         f.setArray(da)
1599         f.setName("fieldCellWithoutPfl")
1600         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])
1601         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])
1602         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])
1603         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])
1604         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])
1605         f.checkCoherency()
1606         mm=MEDFileUMesh()
1607         mm.setMeshAtLevel(0,m) 
1608         f1ts=MEDFileField1TS.New()
1609         f1ts.setFieldNoProfileSBT(f)
1610         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1611         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1612         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1613         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1614         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1615         mm.write(fname,2)
1616         f1ts.write(fname,0)
1617         #
1618         dataRead=MEDFileData.New(fname)
1619         mRead=dataRead.getMeshes()[0]
1620         f1tsRead=dataRead.getFields()[0][0]
1621         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1622         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1623         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1624         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1625         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1626         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1627         #
1628         MEDLoader.WriteField(fname2,f,True)
1629         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1630         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1631         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1632         pass
1633
1634     # Testing profile on nodes when the profile is identity but not on all nodes.
1635     def testMEDFieldPflOnNode1(self):
1636         fname="Pyfile51.med"
1637         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)
1638         m0=MEDCouplingUMesh("Mesh",2)
1639         m0.allocateCells(5)
1640         m0.insertNextCell(NORM_TRI3,[1,4,2])
1641         m0.insertNextCell(NORM_TRI3,[4,5,2])
1642         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1643         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1644         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1645         m0.finishInsertingCells()
1646         m0.setCoords(coo)
1647         m1=MEDCouplingUMesh(m0.getName(),1)
1648         m1.allocateCells(9)
1649         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1650         for i in xrange(9):
1651             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1652             pass
1653         m1.finishInsertingCells()
1654         m1.setCoords(coo)
1655         #
1656         m=MEDFileUMesh()
1657         m.setMeshAtLevel(0,m0)
1658         m.setMeshAtLevel(-1,m1)
1659         #
1660         dt=3 ; it=2 ; tim=4.5
1661         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1662         fieldNode0.setName("fieldNode0")
1663         fieldNode0.setTime(tim,dt,it)
1664         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1665         arr=DataArrayDouble([10,11,12,13,14])
1666         fieldNode0.setArray(arr)
1667         f0=MEDFileField1TS()
1668         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1669         m.write(fname,2) ; f0.write(fname,0)
1670         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1671         fieldNode1.setName("fieldNode1")
1672         fieldNode1.setTime(tim,dt,it)
1673         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1674         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1675         fieldNode1.setArray(arr1)
1676         f1=MEDFileField1TS()
1677         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1678         f1.write(fname,0)
1679         del m,f0,m0,m1,f1
1680         ## Reading from file
1681         m=MEDFileMesh.New(fname)
1682         m0=m.getMeshAtLevel(0)
1683         m00=m0.deepCpy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1684         fieldNode0.setMesh(m00)
1685         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1686         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1687         ff0_1.checkCoherency()
1688         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1689         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1690         ff0_2.checkCoherency()
1691         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1692         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1693         ff0_3.checkCoherency()
1694         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1695         ff0_4=MEDLoader.ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1696         ff0_4.checkCoherency()
1697         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1698         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1699         m1=m.getMeshAtLevel(-1)
1700         m10=m1.deepCpy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1701         fieldNode1.setMesh(m10)
1702         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1703         ff1_1.checkCoherency()
1704         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1705         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1706         ff1_2.checkCoherency()
1707         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1708         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1709         ff1_3.checkCoherency()
1710         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1711         ff1_4=MEDLoader.ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1712         ff1_4.checkCoherency()
1713         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1714         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]
1715         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]
1716         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]
1717         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1718         arr_r.setName(fieldNode1.getArray().getName())
1719         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1720         pfl1_r.setName(pfl1.getName())
1721         self.assertTrue(pfl1_r.isEqual(pfl1))
1722         pass
1723     
1724         # Testing profile on nodes when the profile is identity but not on all nodes.
1725     def testMEDFieldPflOnCell1(self):
1726         fname="Pyfile52.med"
1727         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)
1728         m0=MEDCouplingUMesh("Mesh",2)
1729         m0.allocateCells(5)
1730         m0.insertNextCell(NORM_TRI3,[1,4,2])
1731         m0.insertNextCell(NORM_TRI3,[4,5,2])
1732         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1733         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1734         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1735         m0.finishInsertingCells()
1736         m0.setCoords(coo)
1737         m1=MEDCouplingUMesh(m0.getName(),1)
1738         m1.allocateCells(9)
1739         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1740         for i in xrange(9):
1741             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1742             pass
1743         m1.finishInsertingCells()
1744         m1.setCoords(coo)
1745         #
1746         m=MEDFileUMesh()
1747         m.setMeshAtLevel(0,m0)
1748         m.setMeshAtLevel(-1,m1)
1749         #
1750         dt=3 ; it=2 ; tim=4.5
1751         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1752         fieldCell0.setName("fieldCell0")
1753         fieldCell0.setTime(tim,dt,it)
1754         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1755         arr=DataArrayDouble([10,11,12])
1756         fieldCell0.setArray(arr)
1757         f0=MEDFileField1TS()
1758         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1759         m.write(fname,2) ; f0.write(fname,0)
1760         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1761         fieldCell1.setName("fieldCell1")
1762         fieldCell1.setTime(tim,dt,it)
1763         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1764         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1765         fieldCell1.setArray(arr1)
1766         f1=MEDFileField1TS()
1767         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1768         f1.write(fname,0)
1769         del m,f0,m0,m1,f1
1770         ## Reading from file
1771         m=MEDFileMesh.New(fname)
1772         m0=m.getMeshAtLevel(0)
1773         m00=m0.deepCpy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1774         fieldCell0.setMesh(m00)
1775         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1776         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1777         ff0_1.checkCoherency()
1778         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1779         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1780         ff0_2.checkCoherency()
1781         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1782         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1783         ff0_3.checkCoherency()
1784         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1785         ff0_4=MEDLoader.ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1786         ff0_4.checkCoherency()
1787         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1788         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1789         m1=m.getMeshAtLevel(-1)
1790         m10=m1.deepCpy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1791         fieldCell1.setMesh(m10)
1792         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1793         ff1_1.checkCoherency()
1794         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1795         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1796         ff1_2.checkCoherency()
1797         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1798         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1799         ff1_3.checkCoherency()
1800         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1801         ff1_4=MEDLoader.ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1802         ff1_4.checkCoherency()
1803         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1804         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]
1805         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]
1806         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]
1807         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1808         arr_r.setName(fieldCell1.getArray().getName())
1809         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1810         pfl1_r.setName(pfl1.getName())
1811         self.assertTrue(pfl1_r.isEqual(pfl1))
1812         pass
1813
1814     def testMEDFileUMeshZipCoords1(self):
1815         m=MEDFileUMesh()
1816         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1817         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])
1818         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1819         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1820         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1821         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1822         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1823         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1824         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1825         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1826         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1827         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1828         o2n=m.zipCoords()
1829         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1830         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1831         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1832         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1833         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1834         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1835         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1836         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1837         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1838         pass
1839
1840     def testMEDUMeshAddNodeGroup1(self):
1841         fname="Pyfile53.med"
1842         m=MEDFileUMesh()
1843         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1844         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])
1845         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1846         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1847         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1848         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1849         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1850         #
1851         mm=m.deepCpy()
1852         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
1853         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
1854         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1855         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1856         mm.setFamilyId("MyFam",2)
1857         mm.setFamilyId("MyOtherFam",3)
1858         mm.setFamilyId("MyOther-1",-1)
1859         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1860         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1861         #
1862         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1863         mm.addNodeGroup(daTest)
1864         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1865         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1866         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1867             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1868             pass
1869         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1870         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1871         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1872         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1873         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1874             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1875             pass
1876         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1877         da=DataArrayInt([3,12]) ; da.setName("grp0")
1878         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1879         da.setValues([1])
1880         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1881         mm.write(fname,2)
1882         mm=MEDFileMesh.New(fname)
1883         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1884         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1885         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1886             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1887             pass
1888         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1889         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1890         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1891         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1892         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1893             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1894             pass
1895         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1896         da=DataArrayInt([3,12]) ; da.setName("grp0")
1897         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1898         da.setValues([1])
1899         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1900         pass
1901
1902     def testMEDUMeshAddGroup1(self):
1903         fname="Pyfile54.med"
1904         m=MEDFileUMesh()
1905         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1906         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
1907         for i in xrange(7):
1908             m0.insertNextCell(NORM_TRI3,[1,2,1])
1909             pass
1910         for i in xrange(4):
1911             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
1912             pass
1913         for i in xrange(2):
1914             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
1915             pass
1916         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1917         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1918         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1919         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1920         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1921         #
1922         mm=m.deepCpy()
1923         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
1924         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
1925         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1926         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1927         mm.setFamilyId("MyFam",2)
1928         mm.setFamilyId("MyOtherFam",3)
1929         mm.setFamilyId("MyOther-1",-1)
1930         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1931         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1932         #
1933         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1934         mm.addGroup(0,daTest)
1935         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1936         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1937         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1938             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1939             pass
1940         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1941         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1942         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1943         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1944         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1945             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1946             pass
1947         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
1948         da=DataArrayInt([3,12]) ; da.setName("grp0")
1949         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1950         da.setValues([1])
1951         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1952         mm.write(fname,2)
1953         mm=MEDFileMesh.New(fname)
1954         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1955         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1956         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1957             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1958             pass
1959         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1960         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1961         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1962         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1963         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1964             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1965             pass
1966         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
1967         da=DataArrayInt([3,12]) ; da.setName("grp0")
1968         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1969         da.setValues([1])
1970         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1971         pass
1972
1973     def testHeapMem1(self):
1974         m=MEDCouplingCMesh()
1975         arr=DataArrayDouble(10,1) ; arr.iota(0)
1976         m.setCoords(arr,arr)
1977         m=m.buildUnstructured()
1978         m.setName("mm")
1979         f=m.getMeasureField(ON_CELLS)
1980         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100))
1981         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100))
1982         #
1983         mm=MEDFileUMesh()
1984         mm.setMeshAtLevel(0,m)
1985         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100))
1986         ff=MEDFileField1TS()
1987         ff.setFieldNoProfileSBT(f)
1988         self.assertIn(ff.getHeapMemorySize(),xrange(711-40,711+20))
1989         #
1990         fff=MEDFileFieldMultiTS()
1991         fff.appendFieldNoProfileSBT(f)
1992         self.assertIn(fff.getHeapMemorySize(),xrange(743-50,743+30))
1993         f.setTime(1.,0,-1)
1994         fff.appendFieldNoProfileSBT(f)
1995         self.assertIn(fff.getHeapMemorySize(),xrange(1462-90,1462+50))
1996         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(711-40,711+20))
1997         f2=f[:50]
1998         f2.setTime(2.,1,-1)
1999         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2000         fff.appendFieldProfile(f2,mm,0,pfl)
2001         self.assertIn(fff.getHeapMemorySize(),xrange(2178-130,2178+100))
2002         self.assertIn(fff.getProfile("pfl_NORM_QUAD4").getHeapMemorySize(),xrange(215-10,215+10))
2003         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(700-50,700+30))
2004         pass
2005
2006     def testCurveLinearMesh1(self):
2007         fname="Pyfile55.med"
2008         mesh=MEDCouplingCurveLinearMesh();
2009         mesh.setTime(2.3,4,5);
2010         mesh.setTimeUnit("us");
2011         mesh.setName("Example of Cuve linear mesh");
2012         mesh.setDescription("buildCLMesh");
2013         a1=DataArrayDouble(3*20,1);
2014         a1.iota(7.) ; a1.rearrange(3);
2015         mesh.setCoords(a1);
2016         mesh.setNodeGridStructure([4,5]);
2017         mesh.checkCoherency();
2018         #
2019         m=MEDFileCurveLinearMesh()
2020         m.setMesh(mesh)
2021         d=DataArrayInt(20) ; d.iota(4)
2022         m.setFamilyFieldArr(1,d)
2023         d3=DataArrayInt(20) ; d3.iota(400)
2024         m.setRenumFieldArr(1,d3)
2025         d2=DataArrayInt(12) ; d2.iota(40)
2026         m.setFamilyFieldArr(0,d2)
2027         d4=DataArrayInt(21) ; d4.iota(4000)
2028         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2029         d4.popBackSilent()
2030         m.setRenumFieldArr(1,d4)
2031         m.write(fname,2)
2032         #
2033         m1=MEDFileCurveLinearMesh(fname)
2034         mm=m1.getMesh()
2035         self.assertTrue(mm.isEqual(mesh,1e-12))
2036         #
2037         m1=MEDFileMesh.New(fname)
2038         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2039         self.assertTrue(isinstance(m1.getUnivName(),str))
2040         self.assertTrue(len(m1.getUnivName())!=0)
2041         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2042         pass
2043
2044     def testParameters1(self):
2045         fname="Pyfile56.med"
2046         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2047         mm=MEDFileCMesh() ; mm.setMesh(m)
2048         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2049         data=MEDFileData()
2050         p=MEDFileParameters()
2051         data.setParams(p) ; data.setMeshes(ms)
2052         pts=MEDFileParameterMultiTS()
2053         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2054         pts.appendValue(1,2,3.4,567.89)
2055         pts.appendValue(2,3,5.6,999.123)
2056         pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2057         p.pushParam(pts) ; p.pushParam(pts2)
2058         data.write(fname,2)
2059         p2=MEDFileParameters(fname)
2060         self.assertTrue(p.isEqual(p2,1e-14)[0])
2061         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2062         p3=p.deepCpy()
2063         pts4=pts2.deepCpy()
2064         pts3=pts2.deepCpy()
2065         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2066         pts2.eraseTimeStepIds([0])
2067         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2068         del pts3[[3.4]]
2069         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2070         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2071         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2072         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2073         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2074         p=p3
2075         self.assertTrue(p.isEqual(p2,1e-14)[0])
2076         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2077         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2078         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2079         self.assertEqual(p.getParamsNames(),('A','B'))
2080         ptsr=MEDFileParameterMultiTS(fname,"B")
2081         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2082         ptsr=MEDFileParameterMultiTS(fname)
2083         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2084         p1tsr=MEDFileParameterDouble1TS(fname)
2085         self.assertEqual(p1tsr.getName(),"A")
2086         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2087         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2088         self.assertEqual(p1tsr.getName(),"B")
2089         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2090         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2091         self.assertEqual(p1tsr.getName(),"B")
2092         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2093         data2=MEDFileData(fname)
2094         self.assertEqual(2,data2.getNumberOfParams())
2095         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2096         pass
2097
2098     def testNamesOnCellAndNodesInMeshes1(self):
2099         fname="Pyfile58.med"
2100         fname2="Pyfile59.med"
2101         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2102         m1=m.buildDescendingConnectivity()[0]
2103         m1.sortCellsInMEDFileFrmt()
2104         #
2105         mm=MEDFileUMesh()
2106         mm.setMeshAtLevel(0,m)
2107         mm.setMeshAtLevel(-1,m1)
2108         namesCellL0=DataArrayAsciiChar(6,16)
2109         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2110         mm.setNameFieldAtLevel(0,namesCellL0)
2111         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.substr(2)])
2112         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2113         mm.setNameFieldAtLevel(-1,namesCellL1)
2114         namesNodes=namesCellL1.substr(4,16)
2115         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2116         mm.setNameFieldAtLevel(1,namesNodes)
2117         mm.write(fname,2)
2118         #
2119         mmr=MEDFileMesh.New(fname)
2120         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2121         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2122         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2123         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2124         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2125         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2126         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2127         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2128         mmCpy=mm.deepCpy()
2129         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2130         # remove names on nodes
2131         mmCpy.setNameFieldAtLevel(1,None)
2132         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2133         mm.setNameFieldAtLevel(1,None)
2134         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2135         mm.setNameFieldAtLevel(-1,None)
2136         mm.write(fname,2)
2137         mmr=MEDFileMesh.New(fname)
2138         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2139         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2140         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2141         #
2142         c=MEDCouplingCMesh()
2143         arr=DataArrayDouble([0.,1.1,2.3])
2144         c.setCoords(arr,arr)
2145         c.setName("cmesh")
2146         cc=MEDFileCMesh()
2147         cc.setMesh(c)
2148         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2149         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2150         cc.write(fname2,2)
2151         ccr=MEDFileMesh.New(fname2)
2152         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2153         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2154         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2155         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2156         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2157         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2158         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2159         ccCpy=cc.deepCpy()
2160         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2161         pass
2162
2163     def testToExportInExamples1(self):
2164         m=MEDCouplingCMesh()
2165         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2166         m.setCoords(arr,arr)
2167         m=m.buildUnstructured() ; m.setName("mesh")
2168         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2169         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2170         m2=m.computeSkin()
2171         mm=MEDFileUMesh()
2172         mm.setMeshAtLevel(0,m)
2173         mm.setMeshAtLevel(-1,m2)
2174         mm.setGroupsAtLevel(0,[grp1,grp2])
2175         mm.write("example.med",2)
2176         #
2177         m0=mm.getMeshAtLevel(0)
2178         m1=mm.getMeshAtLevel(-1)
2179         grp1=mm.getGroupArr(0,"grp1")
2180         grp2=mm.getGroupArr(0,"grp2")
2181         grps=[grp1,grp2]
2182         whichGrp=DataArrayInt(m0.getNumberOfCells())
2183         whichGrp.fillWithValue(-1)
2184         for grpId,grp in enumerate(grps):
2185             whichGrp[grp]=grpId
2186             pass
2187         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2188         e,f=a.areCellsIncludedIn(m1,2)
2189         self.assertTrue(e)
2190         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2191         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2192         c2.transformWithIndArr(whichGrp)
2193         splitOfM1=len(grps)*[None]
2194         for grpId,grp in enumerate(grps):
2195             tmp=c2.getIdsEqual(grpId)
2196             splitOfM1[grpId]=tmp
2197             pass
2198         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2199         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2200         pass
2201
2202     def testBugCorrection1(self):
2203         fs=MEDFileFields()
2204         fs.resize(3)
2205         self.assertEqual(fs[0],None)
2206         self.assertEqual(3,len(fs))
2207         pass
2208
2209     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2210         f1Name="Pyfile60.med"
2211         f2Name="Pyfile61.med"
2212         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2213         d1.write(f1Name,2)
2214         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2215         d2.write(f2Name,2)
2216         # reading and compare
2217         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2218         for mn in d1.getMeshes().getMeshesNames():
2219             m1=d1.getMeshes()[mn]
2220             m2=d2.getMeshes()[mn]
2221             for lev in m1.getNonEmptyLevels():
2222                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2223                 for grpName in grpsNames:
2224                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2225                     pass
2226                 pass
2227             pass
2228         for fieldn in d1.getFields().getFieldsNames():
2229             f1=d1.getFields()[fieldn]
2230             f2=d2.getFields()[fieldn]
2231             for it,order,tim in f1.getTimeSteps():
2232                 f1t=f1[it,order]
2233                 f2t=f2[it,order]
2234                 if len(f1t.getPflsReallyUsed())!=0:
2235                     # profile case
2236                     for lev in f1t.getNonEmptyLevels()[1]:
2237                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2238                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2239                         self.assertTrue(pfl1.isEqual(pfl2))
2240                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2241                         pass
2242                     pass
2243                 else:
2244                     # no profile case
2245                     for lev in f1t.getNonEmptyLevels()[1]:
2246                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2247                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2248                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2249                         pass
2250                     pass
2251                 pass
2252             pass
2253         pass
2254
2255     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2256         m=MEDCouplingCMesh()
2257         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2258         m.setCoords(arr,arr,arr)
2259         m=m.buildUnstructured()
2260         m2=m.buildDescendingConnectivity()[0]
2261         m.setName("mesh")
2262         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2263         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2264         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2265         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2266         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2267         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2268         mm=MEDFileUMesh()
2269         mm.setMeshAtLevel(0,m)
2270         mm.setGroupsAtLevel(0,[g1,g2])
2271         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2272         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2273         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2274         mm.normalizeFamIdsMEDFile()
2275         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2276         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2277         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2278         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2279         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2280         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2281         for g in mm.getGroupsOnSpecifiedLev(0):
2282             for f in mm.getFamiliesIdsOnGroup(g):
2283                 self.assertTrue(f<0)
2284                 pass
2285             pass
2286         #
2287         mm=MEDFileUMesh()
2288         mm.setMeshAtLevel(0,m)
2289         mm.setMeshAtLevel(-1,m2)
2290         mm.setGroupsAtLevel(0,[g1,g2])
2291         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2292         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2293         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2294         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2295         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2296         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2297         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2298         mm.normalizeFamIdsMEDFile()
2299         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2300         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2301         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2302         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2303         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2304         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2305         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2306         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2307         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2308         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2309         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2310         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2311         for lev in [0,-1]:
2312             for g in mm.getGroupsOnSpecifiedLev(lev):
2313                 for f in mm.getFamiliesIdsOnGroup(g):
2314                     self.assertTrue(f<0)
2315                     pass
2316                 pass
2317             pass
2318          #
2319         mm=MEDFileUMesh()
2320         mm.setMeshAtLevel(0,m)
2321         mm.setMeshAtLevel(-1,m2)
2322         mm.setGroupsAtLevel(0,[g1,g2])
2323         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2324         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2325         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2326         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2327         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2328         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2329         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2330         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2331         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2332         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2333         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2334         mm.normalizeFamIdsMEDFile()
2335         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2336         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2337         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2338         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2339         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2340         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2341         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2342         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2343         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2344         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2345         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2346         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2347         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2348         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2349         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2350         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2351         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2352         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2353         for lev in [0,-1]:
2354             for g in mm.getGroupsOnSpecifiedLev(lev):
2355                 for f in mm.getFamiliesIdsOnGroup(g):
2356                     self.assertTrue(f<0)
2357                     pass
2358                 pass
2359             pass
2360         for g in mm.getGroupsOnSpecifiedLev(1):
2361             for f in mm.getFamiliesIdsOnGroup(g):
2362                 self.assertTrue(f>0)
2363                 pass
2364             pass
2365         pass
2366     
2367     def testNonRegressionMantis22212ChangeGrpName(self):
2368         fileName="Pyfile62.med"
2369         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2370         m=MEDFileUMesh.New()
2371         m.setCoords(m2.getCoords())
2372         m.setMeshAtLevel(0,m2)
2373         m.setMeshAtLevel(-1,m1)
2374         m.setMeshAtLevel(-2,m0)
2375         m.setFamilyFieldArr(0,f2)
2376         m.setFamilyFieldArr(-1,f1)
2377         m.setFamilyFieldArr(-2,f0)
2378         m.setFamilyFieldArr(1,p)
2379         nbOfFams=len(fns)
2380         for i in xrange(nbOfFams):
2381             m.addFamily(fns[i],fids[i])
2382             pass
2383         nbOfGrps=len(grpns)
2384         for i in xrange(nbOfGrps):
2385             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2386             pass
2387         m.setName(m2.getName())
2388         m.setDescription(m2.getDescription())
2389         m.write(fileName,2)
2390         #
2391         mm0=MEDFileMesh.New(fileName)
2392         mm1=MEDFileMesh.New(fileName)
2393         groupNamesIni=MEDLoader.GetMeshGroupsNames(fileName,"ma")
2394         for name in groupNamesIni:
2395             mm1.changeGroupName(name,name+'N')
2396             pass
2397         mm1.write(fileName,2)
2398         del mm1
2399         #
2400         mm2=MEDFileMesh.New(fileName)
2401         for name in groupNamesIni:
2402             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2403                 arr0=mm0.getGroupArr(lev,name)
2404                 arr2=mm2.getGroupArr(lev,name+'N')
2405                 arr0.setName(name+'N')
2406                 self.assertTrue(arr0.isEqual(arr2))
2407                 pass
2408             pass
2409         pass
2410
2411     def testInt32InMEDFileFieldStar1(self):
2412         fname="Pyfile63.med"
2413         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2414         arr=f1.getArray().convertToIntArr()
2415         f1.setArray(None)
2416         m1=f1.getMesh()
2417         mm1=MEDFileUMesh.New()
2418         mm1.setCoords(m1.getCoords())
2419         mm1.setMeshAtLevel(0,m1)
2420         mm1.setName(m1.getName())
2421         mm1.write(fname,2)
2422         ff1=MEDFileIntField1TS()
2423         ff1.setFieldNoProfileSBT(f1,arr)
2424         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2425         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2426         self.assertTrue(b.isEqual(arr))
2427         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2428         ff1.write(fname,0)
2429         ff2=MEDFileAnyTypeField1TS.New(fname)
2430         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2431         self.assertEqual(ff2.getTime(),[0,1,2.0])
2432         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2433         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2434         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2435         self.assertTrue(b.isEqual(arr))
2436         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2437         ff2.setTime(1,2,3.)
2438         c=ff2.getUndergroundDataArray() ; c*=2
2439         ff2.write(fname,0) # 2 time steps in 
2440         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2441         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2442         self.assertEqual(len(ffs1),2)
2443         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2444         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2445         self.assertTrue(b.isEqual(arr))
2446         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2447         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2448         self.assertTrue(b.isEqual(arr))
2449         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2450         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2451         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2452         self.assertTrue(b.isEqual(2*arr))
2453         f1.setTime(3.,1,2)
2454         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2455         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2456         for it in ffs1:
2457             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2458             bc+=b
2459             pass
2460         self.assertTrue(bc.isEqual(3*arr))
2461         nf1=MEDCouplingFieldDouble(ON_NODES)
2462         nf1.setTime(9.,10,-1)
2463         nf1.setMesh(f1.getMesh())
2464         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2465         nf1.setName("VectorFieldOnNodes")
2466         nff1=MEDFileIntField1TS.New()
2467         nff1.setFieldNoProfileSBT(nf1,narr)
2468         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2469         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2470         nff1.write(fname,0)
2471         #
2472         nf2=MEDCouplingFieldDouble(ON_NODES)
2473         nf2.setTime(19.,20,-11)
2474         nf2.setMesh(f1.getMesh())
2475         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2476         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2477         nff2=MEDFileIntField1TS.New()
2478         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2479         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2480         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2481         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2482         self.assertTrue(b.isEqual(npfl))
2483         self.assertTrue(a.isEqual(narr2))
2484         nff2.write(fname,0)
2485         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2486         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2487         self.assertTrue(b.isEqual(npfl))
2488         self.assertTrue(a.isEqual(narr2))
2489         #
2490         nf3=MEDCouplingFieldDouble(ON_NODES)
2491         nf3.setName("VectorFieldOnNodesDouble")
2492         nf3.setTime(29.,30,-21)
2493         nf3.setMesh(f1.getMesh())
2494         nf3.setArray(f1.getMesh().getCoords())
2495         nff3=MEDFileField1TS.New()
2496         nff3.setFieldNoProfileSBT(nf3)
2497         nff3.write(fname,0)
2498         fs=MEDFileFields(fname)
2499         self.assertEqual(len(fs),4)
2500         ffs=[it for it in fs]
2501         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2502         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2503         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2504         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2505         #
2506         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2507         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2508         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2509         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2510         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2511         #
2512         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2513         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2514         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2515         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2516         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2517         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2518         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2519         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2520         #
2521         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2522         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2523         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2524         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2525         pass
2526
2527     def testMEDFileFields1(self):
2528         fname="Pyfile64.med"
2529         f1=MEDCouplingFieldDouble(ON_NODES)
2530         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2531         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2532         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2533         f1.setMesh(m)
2534         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2535         f1.setArray(arr)
2536         f1.setName("Field1")
2537         ff1=MEDFileField1TS.New()
2538         ff1.setFieldNoProfileSBT(f1)
2539         self.assertEqual(ff1.getDtUnit(),"us")
2540         ff1.write(fname,0)
2541         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2542         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2543         #
2544         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2545         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2546         ff1s.setName("Field2")
2547         ff1s.write(fname,0)
2548         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2549         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2550         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2551         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2552         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2553         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2554         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2555         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2556         pass
2557
2558     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2559     def testMEDFileFields2(self):
2560         fname="Pyfile65.med"
2561         # to check that all is initialize 
2562         MEDFileField1TS().__str__()
2563         MEDFileFieldMultiTS().__str__()
2564         # building a mesh containing 4 tri3 + 5 quad4
2565         tri=MEDCouplingUMesh("tri",2)
2566         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2567         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2568         tris=[tri.deepCpy() for i in xrange(4)]
2569         for i,elt in enumerate(tris): elt.translate([i,0])
2570         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2571         quad=MEDCouplingUMesh("quad",2)
2572         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2573         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2574         quads=[quad.deepCpy() for i in xrange(5)]
2575         for i,elt in enumerate(quads): elt.translate([5+i,0])
2576         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2577         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2578         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2579         #
2580         fmts0_0=MEDFileFieldMultiTS()
2581         fmts0_1=MEDFileFieldMultiTS()
2582         # time steps
2583         for i in xrange(10):
2584             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2585             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2586             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2587             f.setTime(float(i+1)+0.1,i+1,-i-1)
2588             fmts0_0.appendFieldNoProfileSBT(f)
2589             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2590             self.assertEqual(fmts0_1.getName(),name1)
2591             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2592             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2593             if i>1:
2594                 # components names have been modified to generate errors
2595                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2596                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2597                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2598                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2599                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2600                 pass
2601             # add a mismatch of nb of compos
2602             pass
2603         fmts0_2=fmts0_0.deepCpy()
2604         fmts0_3=fmts0_0.deepCpy()
2605         fmts0_4=fmts0_0.deepCpy()
2606         fmts0_5=fmts0_0.shallowCpy()
2607         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)
2608         del fmts0_2[::2]
2609         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2610         del fmts0_3[[1.1,(6,-6),9]]
2611         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2612         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2613         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2614         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2615         fmts0_7=fmts0_4[::-3]
2616         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2617         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2618         #
2619         fs0=MEDFileFields()
2620         fs0.pushField(fmts0_0)
2621         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2622         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2623         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2624         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2625         fs0.write(fname,2)
2626         fs0=MEDFileFields(fname)
2627         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2628         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2629         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2630         del fs1[["2ndField",3]]
2631         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2632         fs2=fs0[[0,"4thField"]]
2633         self.assertTrue(isinstance(fs2,MEDFileFields))
2634         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2635         #
2636         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2637         pass
2638
2639     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2640     def testMEDFileFields3(self):
2641         fname="Pyfile66.med"
2642         # building a mesh containing 4 tri3 + 5 quad4
2643         tri=MEDCouplingUMesh("tri",2)
2644         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2645         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2646         tris=[tri.deepCpy() for i in xrange(4)]
2647         for i,elt in enumerate(tris): elt.translate([i,0])
2648         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2649         quad=MEDCouplingUMesh("quad",2)
2650         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2651         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2652         quads=[quad.deepCpy() for i in xrange(5)]
2653         for i,elt in enumerate(quads): elt.translate([5+i,0])
2654         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2655         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2656         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2657         #
2658         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2659         #
2660         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2661         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2662         fmts0_0=MEDFileFieldMultiTS()
2663         fmts0_1=MEDFileFieldMultiTS()
2664         # time steps
2665         for i in xrange(10):
2666             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2667             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2668             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2669             f.setTime(float(i+1)+0.1,i+1,-i-1)
2670             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2671             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2672             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2673             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2674             pass
2675         #
2676         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2677         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2678         fmts0_0.zipPflsNames()
2679         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2680         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2681         fmts0_2=fmts0_0.deepCpy()
2682         fmts0_3=fmts0_0.deepCpy()
2683         fmts0_4=fmts0_0.deepCpy()
2684         fs0=MEDFileFields()
2685         fs0.pushField(fmts0_0)
2686         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2687         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2688         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2689         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2690         #
2691         fmts0_5=MEDFileFieldMultiTS()
2692         for i in xrange(7):
2693             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2694             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2695             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2696             f.setTime(float(i+1)+0.1,i+1,-i-1)
2697             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2698             pass
2699         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2700         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2701         fs0.checkGlobsCoherency()
2702         fs0.write(fname,0)
2703         pass
2704     
2705     def testSplitComponents1(self):
2706         fname="Pyfile67.med"
2707         # building a mesh containing 4 tri3 + 5 quad4
2708         tri=MEDCouplingUMesh("tri",2)
2709         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2710         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2711         tris=[tri.deepCpy() for i in xrange(4)]
2712         for i,elt in enumerate(tris): elt.translate([i,0])
2713         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2714         quad=MEDCouplingUMesh("quad",2)
2715         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2716         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2717         quads=[quad.deepCpy() for i in xrange(5)]
2718         for i,elt in enumerate(quads): elt.translate([5+i,0])
2719         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2720         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2721         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2722         #
2723         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2724         #
2725         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2726         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2727         fs=MEDFileFields()
2728         fmts0_1=MEDFileFieldMultiTS()
2729         # time steps
2730         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2731         for i in xrange(10):
2732             name1="1stField"
2733             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2734             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2735             f.setTime(float(i+1)+0.1,i+1,-i-1)
2736             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2737             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2738             pass
2739         fs.pushField(fmts0_1)
2740         self.assertEqual(1,len(fs))
2741         l=fmts0_1.splitComponents()
2742         self.assertEqual(3,len(l))
2743         for elt in l: self.assertEqual(10,len(elt))
2744         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2745         for elt in l:
2746             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2747             pass
2748         fs.pushFields(l)
2749         self.assertEqual(4,len(fs))
2750         for elt in fs: self.assertEqual(10,len(elt))
2751         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2752         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2753         #
2754         fs.write(fname,0) ; del fs
2755         #
2756         fs1=MEDFileFields(fname)
2757         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2758         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2759         self.assertEqual(4,len(fs1))
2760         for i in xrange(10):
2761             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2762                 f1ts=fs1[fieldName][i]
2763                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2764                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2765                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2766                 pass
2767             f1ts=fs1["1stField"][i]
2768             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2769             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2770             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2771             pass
2772         pass
2773
2774     def testMEDFileFieldConvertTo1(self):
2775         fname="Pyfile68.med"
2776         # building a mesh containing 4 tri3 + 5 quad4
2777         tri=MEDCouplingUMesh("tri",2)
2778         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2779         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2780         tris=[tri.deepCpy() for i in xrange(4)]
2781         for i,elt in enumerate(tris): elt.translate([i,0])
2782         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2783         quad=MEDCouplingUMesh("quad",2)
2784         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2785         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2786         quads=[quad.deepCpy() for i in xrange(5)]
2787         for i,elt in enumerate(quads): elt.translate([5+i,0])
2788         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2789         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2790         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2791         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2792         #
2793         ff0=MEDFileField1TS()
2794         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")
2795         f0.checkCoherency()
2796         ff0.setFieldNoProfileSBT(f0)
2797         #
2798         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2799         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2800         #
2801         ff0i=ff0.convertToInt()
2802         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2803         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2804         #
2805         ff1=ff0i.convertToDouble()
2806         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2807         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2808         # With profiles
2809         del arr,f0,ff0,ff1,ff0i,fspExp
2810         ff0=MEDFileField1TS()
2811         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")
2812         f0.checkCoherency()
2813         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2814         ff0.setFieldProfile(f0,mm,0,pfl)
2815         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2816         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2817         #
2818         ff0i=ff0.convertToInt()
2819         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2820         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2821         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2822         #
2823         ff1=ff0i.convertToDouble()
2824         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2825         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2826         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2827         ## MultiTimeSteps
2828         ff0=MEDFileFieldMultiTS()
2829         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)
2830         f0.checkCoherency()
2831         ff0.appendFieldProfile(f0,mm,0,pfl)
2832         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)
2833         f0.checkCoherency()
2834         ff0.appendFieldProfile(f0,mm,0,pfl)
2835         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)
2836         f0.checkCoherency()
2837         ff0.appendFieldProfile(f0,mm,0,pfl)
2838         ff1=ff0.convertToInt()
2839         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2840         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2841         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2842             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2843             arr=ff1.getUndergroundDataArray(dt,it)
2844             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2845             pass
2846         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2847         #
2848         mm.write(fname,2)
2849         ff1.write(fname,0)
2850         #
2851         ff1=ff1.convertToDouble()
2852         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
2853         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2854         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2855             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2856             arr=ff1.getUndergroundDataArray(dt,it)
2857             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
2858             pass
2859         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2860         #
2861         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
2862         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2863         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2864         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2865             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
2866             arr=ff1.getUndergroundDataArray(dt,it)
2867             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2868             pass
2869         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
2870         pass
2871
2872     def testMEDFileFieldPartialLoading(self):
2873         fname="Pyfile69.med"
2874         # building a mesh containing 30 tri3 + 40 quad4
2875         tri=MEDCouplingUMesh("tri",2)
2876         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2877         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2878         tris=[tri.deepCpy() for i in xrange(30)]
2879         for i,elt in enumerate(tris): elt.translate([i,0])
2880         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2881         quad=MEDCouplingUMesh("quad",2)
2882         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2883         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2884         quads=[quad.deepCpy() for i in xrange(40)]
2885         for i,elt in enumerate(quads): elt.translate([40+i,0])
2886         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2887         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2888         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2889         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2890         #
2891         ff0=MEDFileField1TS()
2892         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")
2893         f0.checkCoherency()
2894         ff0.setFieldNoProfileSBT(f0)
2895         ff0.write(fname,0)
2896         #
2897         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
2898         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2899         # With profiles
2900         ff0=MEDFileField1TS()
2901         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")
2902         f0.checkCoherency()
2903         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2904         ff0.setFieldProfile(f0,mm,0,pfl)
2905         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
2906         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2907         ff0.write(fname,0)
2908         #
2909         ff0=MEDFileField1TS(fname,False)
2910         self.assertEqual(ff0.getName(),"FieldCell")
2911         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
2912         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
2913         heap_memory_ref=ff0.getHeapMemorySize()
2914         self.assertTrue(heap_memory_ref>=100 and heap_memory_ref<=200)
2915         ff0.loadArrays() ##
2916         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
2917         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2918         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
2919         #
2920         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
2921         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
2922         heap_memory_ref=ff0.getHeapMemorySize()
2923         self.assertTrue(heap_memory_ref>=150 and heap_memory_ref<=250)
2924         ff0.loadArrays() ##
2925         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
2926         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2927         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2928         ff0.loadArrays() ##
2929         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2930         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2931         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2932         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2933         ff0.loadArrays() ##
2934         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2935         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2936         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2937         ff0.loadArraysIfNecessary() ##
2938         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
2939         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2940         heap_memory_ref=ff0.getHeapMemorySize()
2941         self.assertTrue(heap_memory_ref>=1000 and heap_memory_ref<=1100)
2942         ff0.unloadArrays()
2943         hmd=ff0.getHeapMemorySize()-heap_memory_ref
2944         self.assertEqual(hmd,-800) # -50*8*2
2945         ff0.loadArrays() ##
2946         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
2947         #
2948         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
2949         heap_memory_ref=ff0.getHeapMemorySize()
2950         self.assertTrue(heap_memory_ref>=150 and heap_memory_ref<=250)
2951         ff0.loadArrays() ##
2952         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2953         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2954         #
2955         fieldName="FieldCellMultiTS"
2956         ff0=MEDFileFieldMultiTS()
2957         for t in xrange(20):
2958             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)
2959             f0.setTime(float(t)+0.1,t,100+t)
2960             f0.checkCoherency()
2961             ff0.appendFieldNoProfileSBT(f0)
2962             pass
2963         ff0.write(fname,0)
2964         #
2965         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
2966         heap_memory_ref=ff0.getHeapMemorySize()
2967         self.assertTrue(heap_memory_ref>=2000 and heap_memory_ref<=3000)
2968         ff0.loadArrays()
2969         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
2970         del ff0
2971         #
2972         ffs=MEDFileFields(fname,False)
2973         heap_memory_ref=ffs.getHeapMemorySize()
2974         self.assertTrue(heap_memory_ref>=2400 and heap_memory_ref<=3500)
2975         ffs.loadArrays()
2976         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
2977         pass
2978
2979     def testMEDFileMeshReadSelector1(self):
2980         mrs=MEDFileMeshReadSelector()
2981         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
2982         mrs.__str__() ; mrs.__repr__()
2983         #
2984         mrs=MEDFileMeshReadSelector(0)
2985         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())
2986         mrs=MEDFileMeshReadSelector(1)
2987         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2988         mrs=MEDFileMeshReadSelector(2)
2989         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2990         mrs=MEDFileMeshReadSelector(3)
2991         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2992         mrs=MEDFileMeshReadSelector(4)
2993         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2994         mrs=MEDFileMeshReadSelector(5)
2995         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2996         mrs=MEDFileMeshReadSelector(6)
2997         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2998         mrs=MEDFileMeshReadSelector(7)
2999         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3000         mrs=MEDFileMeshReadSelector(8)
3001         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3002         mrs=MEDFileMeshReadSelector(9)
3003         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3004         mrs=MEDFileMeshReadSelector(10)
3005         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3006         mrs=MEDFileMeshReadSelector(11)
3007         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3008         mrs=MEDFileMeshReadSelector(12)
3009         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3010         mrs=MEDFileMeshReadSelector(13)
3011         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3012         mrs=MEDFileMeshReadSelector(14)
3013         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3014         mrs=MEDFileMeshReadSelector(15)
3015         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3016         mrs=MEDFileMeshReadSelector(16)
3017         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3018         mrs=MEDFileMeshReadSelector(17)
3019         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3020         mrs=MEDFileMeshReadSelector(18)
3021         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3022         mrs=MEDFileMeshReadSelector(19)
3023         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3024         mrs=MEDFileMeshReadSelector(20)
3025         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3026         mrs=MEDFileMeshReadSelector(21)
3027         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3028         mrs=MEDFileMeshReadSelector(22)
3029         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3030         mrs=MEDFileMeshReadSelector(23)
3031         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3032         mrs=MEDFileMeshReadSelector(24)
3033         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3034         mrs=MEDFileMeshReadSelector(25)
3035         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3036         mrs=MEDFileMeshReadSelector(26)
3037         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3038         mrs=MEDFileMeshReadSelector(27)
3039         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3040         mrs=MEDFileMeshReadSelector(28)
3041         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3042         mrs=MEDFileMeshReadSelector(29)
3043         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3044         mrs=MEDFileMeshReadSelector(30)
3045         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3046         mrs=MEDFileMeshReadSelector(31)
3047         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3048         mrs=MEDFileMeshReadSelector(32)
3049         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3050         mrs=MEDFileMeshReadSelector(33)
3051         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3052         mrs=MEDFileMeshReadSelector(34)
3053         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3054         mrs=MEDFileMeshReadSelector(35)
3055         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3056         mrs=MEDFileMeshReadSelector(36)
3057         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3058         mrs=MEDFileMeshReadSelector(37)
3059         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3060         mrs=MEDFileMeshReadSelector(38)
3061         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3062         mrs=MEDFileMeshReadSelector(39)
3063         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3064         mrs=MEDFileMeshReadSelector(40)
3065         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3066         mrs=MEDFileMeshReadSelector(41)
3067         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3068         mrs=MEDFileMeshReadSelector(42)
3069         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3070         mrs=MEDFileMeshReadSelector(43)
3071         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3072         mrs=MEDFileMeshReadSelector(44)
3073         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3074         mrs=MEDFileMeshReadSelector(45)
3075         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3076         mrs=MEDFileMeshReadSelector(46)
3077         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3078         mrs=MEDFileMeshReadSelector(47)
3079         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3080         mrs=MEDFileMeshReadSelector(48)
3081         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3082         mrs=MEDFileMeshReadSelector(49)
3083         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3084         mrs=MEDFileMeshReadSelector(50)
3085         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3086         mrs=MEDFileMeshReadSelector(51)
3087         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3088         mrs=MEDFileMeshReadSelector(52)
3089         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3090         mrs=MEDFileMeshReadSelector(53)
3091         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3092         mrs=MEDFileMeshReadSelector(54)
3093         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3094         mrs=MEDFileMeshReadSelector(55)
3095         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3096         mrs=MEDFileMeshReadSelector(56)
3097         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3098         mrs=MEDFileMeshReadSelector(57)
3099         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3100         mrs=MEDFileMeshReadSelector(58)
3101         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3102         mrs=MEDFileMeshReadSelector(59)
3103         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3104         mrs=MEDFileMeshReadSelector(60)
3105         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3106         mrs=MEDFileMeshReadSelector(61)
3107         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3108         mrs=MEDFileMeshReadSelector(62)
3109         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3110         mrs=MEDFileMeshReadSelector(63)
3111         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3112         #
3113         mrs=MEDFileMeshReadSelector(63)
3114         mrs.setCellFamilyFieldReading(False)
3115         self.assertEqual(mrs.getCode(),62)
3116         mrs.setCellFamilyFieldReading(True)
3117         self.assertEqual(mrs.getCode(),63)
3118         mrs.setNodeFamilyFieldReading(False)
3119         self.assertEqual(mrs.getCode(),61)
3120         mrs.setNodeFamilyFieldReading(True)
3121         self.assertEqual(mrs.getCode(),63)
3122         mrs.setCellNameFieldReading(False)
3123         self.assertEqual(mrs.getCode(),59)
3124         mrs.setCellNameFieldReading(True)
3125         self.assertEqual(mrs.getCode(),63)
3126         mrs.setNodeNameFieldReading(False)
3127         self.assertEqual(mrs.getCode(),55)
3128         mrs.setNodeNameFieldReading(True)
3129         self.assertEqual(mrs.getCode(),63)
3130         mrs.setCellNumFieldReading(False)
3131         self.assertEqual(mrs.getCode(),47)
3132         mrs.setCellNumFieldReading(True)
3133         self.assertEqual(mrs.getCode(),63)
3134         mrs.setNodeNumFieldReading(False)
3135         self.assertEqual(mrs.getCode(),31)
3136         mrs.setNodeNumFieldReading(True)
3137         self.assertEqual(mrs.getCode(),63)
3138         pass
3139     
3140     def testPartialReadOfMeshes(self):
3141         fname="Pyfile70.med"
3142         # building a mesh containing 4 tri3 + 5 quad4
3143         tri=MEDCouplingUMesh("tri",2)
3144         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3145         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3146         tris=[tri.deepCpy() for i in xrange(4)]
3147         for i,elt in enumerate(tris): elt.translate([i,0])
3148         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3149         quad=MEDCouplingUMesh("quad",2)
3150         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3151         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3152         quads=[quad.deepCpy() for i in xrange(5)]
3153         for i,elt in enumerate(quads): elt.translate([5+i,0])
3154         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3155         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3156         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3157         m1=m.buildDescendingConnectivity()[0]
3158         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3159         #
3160         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3161         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3162         mm.setGroupsAtLevel(0,[grp0,grp1])
3163         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3164         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3165         mm.setGroupsAtLevel(-1,[grp2,grp3])
3166         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3167         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3168         mm.setGroupsAtLevel(1,[grp4,grp5])
3169         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3170         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3171         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3172         #
3173         mm.write(fname,2)
3174         ##
3175         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3176         b4_ref_heap_mem=mm.getHeapMemorySize()
3177         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3178         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3179         ref_heap_mem=mm.getHeapMemorySize()
3180         # check the gain of memory using 1GTUMesh instead of UMesh
3181         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
3182         #
3183         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3184         self.assertEqual(len(mm.getGroupsNames()),0)
3185         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3186         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3187         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3188         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3189         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3190         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3191         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3192         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3193         delta1=ref_heap_mem-mm.getHeapMemorySize()
3194         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3195         #
3196         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3197         self.assertEqual(len(mm.getGroupsNames()),6)
3198         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3199         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3200         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3201         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3202         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3203         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3204         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3205         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3206         delta2=ref_heap_mem-mm.getHeapMemorySize()
3207         self.assertTrue(delta2<delta1)
3208         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3209         #
3210         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3211         self.assertEqual(len(mm.getGroupsNames()),6)
3212         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3213         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3214         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3215         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3216         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3217         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3218         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3219         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3220         delta3=ref_heap_mem-mm.getHeapMemorySize()
3221         self.assertTrue(delta3<delta2)
3222         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3223         #
3224         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3225         self.assertEqual(len(mm.getGroupsNames()),6)
3226         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3227         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3228         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3229         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3230         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3231         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3232         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3233         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3234         delta4=ref_heap_mem-mm.getHeapMemorySize()
3235         self.assertTrue(delta4<delta3)
3236         self.assertTrue(delta4>=32*4*2)
3237         #
3238         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3239         self.assertEqual(len(mm.getGroupsNames()),6)
3240         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3241         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3242         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3243         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3244         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3245         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3246         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3247         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3248         delta5=ref_heap_mem-mm.getHeapMemorySize()
3249         self.assertTrue(delta5<delta4)
3250         self.assertEqual(delta5,0)
3251         pass
3252
3253     # this test checks that setFieldProfile perform a check of the array length
3254     # compared to the profile length. This test also checks that mesh attribute of field
3255     # is not used by setFieldProfile (because across this test mesh is equal to None)
3256     def testCheckCompatibilityPfl1(self):
3257         # building a mesh containing 4 tri3 + 5 quad4
3258         tri=MEDCouplingUMesh("tri",2)
3259         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3260         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3261         tris=[tri.deepCpy() for i in xrange(4)]
3262         for i,elt in enumerate(tris): elt.translate([i,0])
3263         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3264         quad=MEDCouplingUMesh("quad",2)
3265         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3266         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3267         quads=[quad.deepCpy() for i in xrange(5)]
3268         for i,elt in enumerate(quads): elt.translate([5+i,0])
3269         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3270         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3271         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3272         m1=m.buildDescendingConnectivity()[0]
3273         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3274         #
3275         f1ts=MEDFileField1TS()
3276         f=MEDCouplingFieldDouble(ON_NODES)
3277         vals=DataArrayDouble(7) ; vals.iota(1000)
3278         f.setArray(vals)
3279         f.setName("anonymous") # f has no mesh it is not a bug
3280         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3281         f1ts.setFieldProfile(f,mm,0,pfl)
3282         #
3283         f1ts=MEDFileField1TS()
3284         f=MEDCouplingFieldDouble(ON_NODES)
3285         vals=DataArrayDouble(8) ; vals.iota(1000)
3286         f.setArray(vals)
3287         f.setName("anonymous") # f has no mesh it is not a bug
3288         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3289         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3290         #
3291         f1ts=MEDFileField1TS()
3292         f=MEDCouplingFieldDouble(ON_CELLS)
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([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3297         f1ts.setFieldProfile(f,mm,0,pfl)
3298         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3299         #
3300         f1ts=MEDFileField1TS()
3301         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3302         vals=DataArrayDouble(27) ; vals.iota(1000)
3303         f.setArray(vals)
3304         f.setName("anonymous") # f has no mesh it is not a bug
3305         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3306         f.setMesh(m[pfl])
3307         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])
3308         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3309         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])
3310         f.setMesh(None)
3311         f1ts.setFieldProfile(f,mm,0,pfl)
3312         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3313         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3314         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3315         vals=DataArrayDouble(27) ; vals.iota(1000)
3316         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3317         #
3318         f1ts=MEDFileField1TS()
3319         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3320         vals=DataArrayDouble(25) ; vals.iota(1000)
3321         f.setArray(vals)
3322         f.setName("anonymous") # f has no mesh it is not a bug
3323         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3324         f1ts.setFieldProfile(f,mm,0,pfl)
3325         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3326         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3327         f.setArray(vals2)
3328         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3329         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3330         #
3331         f1ts=MEDFileField1TS()
3332         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3333         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3334         f.setArray(vals)
3335         f1ts.setFieldProfile(f,mm,0,pfl)
3336         pass
3337     
3338     def testWRMeshWithNoCells(self):
3339         fname="Pyfile71.med"
3340         a=DataArrayDouble(4) ; a.iota()
3341         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3342         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3343         m=MEDFileUMesh()
3344         m.setMeshAtLevel(0,m00)
3345         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3346         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3347         m.write(fname,2)
3348         del m,a,c,m0,m00
3349         #
3350         m=MEDFileMesh.New(fname)
3351         self.assertEqual((),m.getNonEmptyLevels())
3352         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))
3353         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3354         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3355         pass
3356     pass
3357
3358 unittest.main()