Salome HOME
21654c9d07835090aa84a521adeb9d30e9510ad5
[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         a=DataArrayInt() ; aa=a.getHeapMemorySize()
1975         a.alloc(0,1)
1976         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
1977         #
1978         m=MEDCouplingCMesh()
1979         arr=DataArrayDouble(10,1) ; arr.iota(0)
1980         m.setCoords(arr,arr)
1981         m=m.buildUnstructured()
1982         m.setName("mm")
1983         f=m.getMeasureField(ON_CELLS)
1984         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100+4*strMulFac))
1985         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100+8*strMulFac))
1986         #
1987         mm=MEDFileUMesh()
1988         mm.setMeshAtLevel(0,m)
1989         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100+10*strMulFac))
1990         ff=MEDFileField1TS()
1991         ff.setFieldNoProfileSBT(f)
1992         self.assertIn(ff.getHeapMemorySize(),xrange(711-40,711+21+(4+1)*strMulFac))
1993         #
1994         fff=MEDFileFieldMultiTS()
1995         fff.appendFieldNoProfileSBT(f)
1996         self.assertIn(fff.getHeapMemorySize(),xrange(743-50,743+30+(6+2)*strMulFac))
1997         f.setTime(1.,0,-1)
1998         fff.appendFieldNoProfileSBT(f)
1999         self.assertIn(fff.getHeapMemorySize(),xrange(1462-90,1462+50+(10+1)*strMulFac))
2000         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(711-40,711+20+(4+1)*strMulFac))
2001         f2=f[:50]
2002         f2.setTime(2.,1,-1)
2003         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2004         fff.appendFieldProfile(f2,mm,0,pfl)
2005         self.assertIn(fff.getHeapMemorySize(),xrange(2178-130,2178+100+(10+2)*strMulFac))
2006         self.assertIn(fff.getProfile("pfl_NORM_QUAD4").getHeapMemorySize(),xrange(215-10,215+10+2*strMulFac))
2007         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(700-50,700+30+4*strMulFac))
2008         pass
2009
2010     def testCurveLinearMesh1(self):
2011         fname="Pyfile55.med"
2012         mesh=MEDCouplingCurveLinearMesh();
2013         mesh.setTime(2.3,4,5);
2014         mesh.setTimeUnit("us");
2015         mesh.setName("Example of Cuve linear mesh");
2016         mesh.setDescription("buildCLMesh");
2017         a1=DataArrayDouble(3*20,1);
2018         a1.iota(7.) ; a1.rearrange(3);
2019         mesh.setCoords(a1);
2020         mesh.setNodeGridStructure([4,5]);
2021         mesh.checkCoherency();
2022         #
2023         m=MEDFileCurveLinearMesh()
2024         m.setMesh(mesh)
2025         d=DataArrayInt(20) ; d.iota(4)
2026         m.setFamilyFieldArr(1,d)
2027         d3=DataArrayInt(20) ; d3.iota(400)
2028         m.setRenumFieldArr(1,d3)
2029         d2=DataArrayInt(12) ; d2.iota(40)
2030         m.setFamilyFieldArr(0,d2)
2031         d4=DataArrayInt(21) ; d4.iota(4000)
2032         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2033         d4.popBackSilent()
2034         m.setRenumFieldArr(1,d4)
2035         m.write(fname,2)
2036         #
2037         m1=MEDFileCurveLinearMesh(fname)
2038         mm=m1.getMesh()
2039         self.assertTrue(mm.isEqual(mesh,1e-12))
2040         #
2041         m1=MEDFileMesh.New(fname)
2042         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2043         self.assertTrue(isinstance(m1.getUnivName(),str))
2044         self.assertTrue(len(m1.getUnivName())!=0)
2045         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2046         pass
2047
2048     def testParameters1(self):
2049         fname="Pyfile56.med"
2050         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2051         mm=MEDFileCMesh() ; mm.setMesh(m)
2052         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2053         data=MEDFileData()
2054         p=MEDFileParameters()
2055         data.setParams(p) ; data.setMeshes(ms)
2056         pts=MEDFileParameterMultiTS()
2057         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2058         pts.appendValue(1,2,3.4,567.89)
2059         pts.appendValue(2,3,5.6,999.123)
2060         pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2061         p.pushParam(pts) ; p.pushParam(pts2)
2062         data.write(fname,2)
2063         p2=MEDFileParameters(fname)
2064         self.assertTrue(p.isEqual(p2,1e-14)[0])
2065         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2066         p3=p.deepCpy()
2067         pts4=pts2.deepCpy()
2068         pts3=pts2.deepCpy()
2069         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2070         pts2.eraseTimeStepIds([0])
2071         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2072         del pts3[[3.4]]
2073         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2074         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2075         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2076         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2077         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2078         p=p3
2079         self.assertTrue(p.isEqual(p2,1e-14)[0])
2080         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2081         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2082         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2083         self.assertEqual(p.getParamsNames(),('A','B'))
2084         ptsr=MEDFileParameterMultiTS(fname,"B")
2085         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2086         ptsr=MEDFileParameterMultiTS(fname)
2087         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2088         p1tsr=MEDFileParameterDouble1TS(fname)
2089         self.assertEqual(p1tsr.getName(),"A")
2090         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2091         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2092         self.assertEqual(p1tsr.getName(),"B")
2093         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2094         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2095         self.assertEqual(p1tsr.getName(),"B")
2096         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2097         data2=MEDFileData(fname)
2098         self.assertEqual(2,data2.getNumberOfParams())
2099         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2100         pass
2101
2102     def testNamesOnCellAndNodesInMeshes1(self):
2103         fname="Pyfile58.med"
2104         fname2="Pyfile59.med"
2105         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2106         m1=m.buildDescendingConnectivity()[0]
2107         m1.sortCellsInMEDFileFrmt()
2108         #
2109         mm=MEDFileUMesh()
2110         mm.setMeshAtLevel(0,m)
2111         mm.setMeshAtLevel(-1,m1)
2112         namesCellL0=DataArrayAsciiChar(6,16)
2113         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2114         mm.setNameFieldAtLevel(0,namesCellL0)
2115         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.substr(2)])
2116         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2117         mm.setNameFieldAtLevel(-1,namesCellL1)
2118         namesNodes=namesCellL1.substr(4,16)
2119         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2120         mm.setNameFieldAtLevel(1,namesNodes)
2121         mm.write(fname,2)
2122         #
2123         mmr=MEDFileMesh.New(fname)
2124         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2125         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2126         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2127         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2128         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2129         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2130         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2131         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2132         mmCpy=mm.deepCpy()
2133         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2134         # remove names on nodes
2135         mmCpy.setNameFieldAtLevel(1,None)
2136         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2137         mm.setNameFieldAtLevel(1,None)
2138         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2139         mm.setNameFieldAtLevel(-1,None)
2140         mm.write(fname,2)
2141         mmr=MEDFileMesh.New(fname)
2142         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2143         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2144         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2145         #
2146         c=MEDCouplingCMesh()
2147         arr=DataArrayDouble([0.,1.1,2.3])
2148         c.setCoords(arr,arr)
2149         c.setName("cmesh")
2150         cc=MEDFileCMesh()
2151         cc.setMesh(c)
2152         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2153         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2154         cc.write(fname2,2)
2155         ccr=MEDFileMesh.New(fname2)
2156         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2157         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2158         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2159         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2160         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2161         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2162         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2163         ccCpy=cc.deepCpy()
2164         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2165         pass
2166
2167     def testToExportInExamples1(self):
2168         m=MEDCouplingCMesh()
2169         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2170         m.setCoords(arr,arr)
2171         m=m.buildUnstructured() ; m.setName("mesh")
2172         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2173         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2174         m2=m.computeSkin()
2175         mm=MEDFileUMesh()
2176         mm.setMeshAtLevel(0,m)
2177         mm.setMeshAtLevel(-1,m2)
2178         mm.setGroupsAtLevel(0,[grp1,grp2])
2179         mm.write("example.med",2)
2180         #
2181         m0=mm.getMeshAtLevel(0)
2182         m1=mm.getMeshAtLevel(-1)
2183         grp1=mm.getGroupArr(0,"grp1")
2184         grp2=mm.getGroupArr(0,"grp2")
2185         grps=[grp1,grp2]
2186         whichGrp=DataArrayInt(m0.getNumberOfCells())
2187         whichGrp.fillWithValue(-1)
2188         for grpId,grp in enumerate(grps):
2189             whichGrp[grp]=grpId
2190             pass
2191         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2192         e,f=a.areCellsIncludedIn(m1,2)
2193         self.assertTrue(e)
2194         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2195         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2196         c2.transformWithIndArr(whichGrp)
2197         splitOfM1=len(grps)*[None]
2198         for grpId,grp in enumerate(grps):
2199             tmp=c2.getIdsEqual(grpId)
2200             splitOfM1[grpId]=tmp
2201             pass
2202         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2203         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2204         pass
2205
2206     def testBugCorrection1(self):
2207         fs=MEDFileFields()
2208         fs.resize(3)
2209         self.assertEqual(fs[0],None)
2210         self.assertEqual(3,len(fs))
2211         pass
2212
2213     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2214         f1Name="Pyfile60.med"
2215         f2Name="Pyfile61.med"
2216         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2217         d1.write(f1Name,2)
2218         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2219         d2.write(f2Name,2)
2220         # reading and compare
2221         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2222         for mn in d1.getMeshes().getMeshesNames():
2223             m1=d1.getMeshes()[mn]
2224             m2=d2.getMeshes()[mn]
2225             for lev in m1.getNonEmptyLevels():
2226                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2227                 for grpName in grpsNames:
2228                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2229                     pass
2230                 pass
2231             pass
2232         for fieldn in d1.getFields().getFieldsNames():
2233             f1=d1.getFields()[fieldn]
2234             f2=d2.getFields()[fieldn]
2235             for it,order,tim in f1.getTimeSteps():
2236                 f1t=f1[it,order]
2237                 f2t=f2[it,order]
2238                 if len(f1t.getPflsReallyUsed())!=0:
2239                     # profile case
2240                     for lev in f1t.getNonEmptyLevels()[1]:
2241                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2242                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2243                         self.assertTrue(pfl1.isEqual(pfl2))
2244                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2245                         pass
2246                     pass
2247                 else:
2248                     # no profile case
2249                     for lev in f1t.getNonEmptyLevels()[1]:
2250                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2251                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2252                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2253                         pass
2254                     pass
2255                 pass
2256             pass
2257         pass
2258
2259     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2260         m=MEDCouplingCMesh()
2261         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2262         m.setCoords(arr,arr,arr)
2263         m=m.buildUnstructured()
2264         m2=m.buildDescendingConnectivity()[0]
2265         m.setName("mesh")
2266         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2267         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2268         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2269         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2270         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2271         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2272         mm=MEDFileUMesh()
2273         mm.setMeshAtLevel(0,m)
2274         mm.setGroupsAtLevel(0,[g1,g2])
2275         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2276         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2277         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2278         mm.normalizeFamIdsMEDFile()
2279         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2280         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2281         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2282         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2283         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2284         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2285         for g in mm.getGroupsOnSpecifiedLev(0):
2286             for f in mm.getFamiliesIdsOnGroup(g):
2287                 self.assertTrue(f<0)
2288                 pass
2289             pass
2290         #
2291         mm=MEDFileUMesh()
2292         mm.setMeshAtLevel(0,m)
2293         mm.setMeshAtLevel(-1,m2)
2294         mm.setGroupsAtLevel(0,[g1,g2])
2295         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2296         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2297         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2298         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2299         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2300         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2301         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2302         mm.normalizeFamIdsMEDFile()
2303         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2304         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2305         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2306         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2307         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2308         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2309         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2310         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2311         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2312         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2313         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2314         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2315         for lev in [0,-1]:
2316             for g in mm.getGroupsOnSpecifiedLev(lev):
2317                 for f in mm.getFamiliesIdsOnGroup(g):
2318                     self.assertTrue(f<0)
2319                     pass
2320                 pass
2321             pass
2322          #
2323         mm=MEDFileUMesh()
2324         mm.setMeshAtLevel(0,m)
2325         mm.setMeshAtLevel(-1,m2)
2326         mm.setGroupsAtLevel(0,[g1,g2])
2327         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2328         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2329         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2330         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2331         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2332         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2333         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2334         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2335         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2336         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2337         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2338         mm.normalizeFamIdsMEDFile()
2339         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2340         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2341         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2342         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2343         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2344         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2345         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2346         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2347         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2348         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2349         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2350         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2351         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2352         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2353         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2354         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2355         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2356         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2357         for lev in [0,-1]:
2358             for g in mm.getGroupsOnSpecifiedLev(lev):
2359                 for f in mm.getFamiliesIdsOnGroup(g):
2360                     self.assertTrue(f<0)
2361                     pass
2362                 pass
2363             pass
2364         for g in mm.getGroupsOnSpecifiedLev(1):
2365             for f in mm.getFamiliesIdsOnGroup(g):
2366                 self.assertTrue(f>0)
2367                 pass
2368             pass
2369         pass
2370     
2371     def testNonRegressionMantis22212ChangeGrpName(self):
2372         fileName="Pyfile62.med"
2373         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2374         m=MEDFileUMesh.New()
2375         m.setCoords(m2.getCoords())
2376         m.setMeshAtLevel(0,m2)
2377         m.setMeshAtLevel(-1,m1)
2378         m.setMeshAtLevel(-2,m0)
2379         m.setFamilyFieldArr(0,f2)
2380         m.setFamilyFieldArr(-1,f1)
2381         m.setFamilyFieldArr(-2,f0)
2382         m.setFamilyFieldArr(1,p)
2383         nbOfFams=len(fns)
2384         for i in xrange(nbOfFams):
2385             m.addFamily(fns[i],fids[i])
2386             pass
2387         nbOfGrps=len(grpns)
2388         for i in xrange(nbOfGrps):
2389             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2390             pass
2391         m.setName(m2.getName())
2392         m.setDescription(m2.getDescription())
2393         m.write(fileName,2)
2394         #
2395         mm0=MEDFileMesh.New(fileName)
2396         mm1=MEDFileMesh.New(fileName)
2397         groupNamesIni=MEDLoader.GetMeshGroupsNames(fileName,"ma")
2398         for name in groupNamesIni:
2399             mm1.changeGroupName(name,name+'N')
2400             pass
2401         mm1.write(fileName,2)
2402         del mm1
2403         #
2404         mm2=MEDFileMesh.New(fileName)
2405         for name in groupNamesIni:
2406             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2407                 arr0=mm0.getGroupArr(lev,name)
2408                 arr2=mm2.getGroupArr(lev,name+'N')
2409                 arr0.setName(name+'N')
2410                 self.assertTrue(arr0.isEqual(arr2))
2411                 pass
2412             pass
2413         pass
2414
2415     def testInt32InMEDFileFieldStar1(self):
2416         fname="Pyfile63.med"
2417         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2418         arr=f1.getArray().convertToIntArr()
2419         f1.setArray(None)
2420         m1=f1.getMesh()
2421         mm1=MEDFileUMesh.New()
2422         mm1.setCoords(m1.getCoords())
2423         mm1.setMeshAtLevel(0,m1)
2424         mm1.setName(m1.getName())
2425         mm1.write(fname,2)
2426         ff1=MEDFileIntField1TS()
2427         ff1.setFieldNoProfileSBT(f1,arr)
2428         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2429         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2430         self.assertTrue(b.isEqual(arr))
2431         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2432         ff1.write(fname,0)
2433         ff2=MEDFileAnyTypeField1TS.New(fname)
2434         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2435         self.assertEqual(ff2.getTime(),[0,1,2.0])
2436         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2437         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2438         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2439         self.assertTrue(b.isEqual(arr))
2440         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2441         ff2.setTime(1,2,3.)
2442         c=ff2.getUndergroundDataArray() ; c*=2
2443         ff2.write(fname,0) # 2 time steps in 
2444         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2445         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2446         self.assertEqual(len(ffs1),2)
2447         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2448         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2449         self.assertTrue(b.isEqual(arr))
2450         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2451         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2452         self.assertTrue(b.isEqual(arr))
2453         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2454         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2455         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2456         self.assertTrue(b.isEqual(2*arr))
2457         f1.setTime(3.,1,2)
2458         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2459         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2460         for it in ffs1:
2461             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2462             bc+=b
2463             pass
2464         self.assertTrue(bc.isEqual(3*arr))
2465         nf1=MEDCouplingFieldDouble(ON_NODES)
2466         nf1.setTime(9.,10,-1)
2467         nf1.setMesh(f1.getMesh())
2468         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2469         nf1.setName("VectorFieldOnNodes")
2470         nff1=MEDFileIntField1TS.New()
2471         nff1.setFieldNoProfileSBT(nf1,narr)
2472         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2473         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2474         nff1.write(fname,0)
2475         #
2476         nf2=MEDCouplingFieldDouble(ON_NODES)
2477         nf2.setTime(19.,20,-11)
2478         nf2.setMesh(f1.getMesh())
2479         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2480         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2481         nff2=MEDFileIntField1TS.New()
2482         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2483         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2484         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2485         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2486         self.assertTrue(b.isEqual(npfl))
2487         self.assertTrue(a.isEqual(narr2))
2488         nff2.write(fname,0)
2489         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2490         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2491         self.assertTrue(b.isEqual(npfl))
2492         self.assertTrue(a.isEqual(narr2))
2493         #
2494         nf3=MEDCouplingFieldDouble(ON_NODES)
2495         nf3.setName("VectorFieldOnNodesDouble")
2496         nf3.setTime(29.,30,-21)
2497         nf3.setMesh(f1.getMesh())
2498         nf3.setArray(f1.getMesh().getCoords())
2499         nff3=MEDFileField1TS.New()
2500         nff3.setFieldNoProfileSBT(nf3)
2501         nff3.write(fname,0)
2502         fs=MEDFileFields(fname)
2503         self.assertEqual(len(fs),4)
2504         ffs=[it for it in fs]
2505         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2506         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2507         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2508         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2509         #
2510         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2511         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2512         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2513         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2514         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2515         #
2516         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2517         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2518         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2519         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2520         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2521         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2522         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2523         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2524         #
2525         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2526         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2527         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2528         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2529         pass
2530
2531     def testMEDFileFields1(self):
2532         fname="Pyfile64.med"
2533         f1=MEDCouplingFieldDouble(ON_NODES)
2534         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2535         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2536         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2537         f1.setMesh(m)
2538         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2539         f1.setArray(arr)
2540         f1.setName("Field1")
2541         ff1=MEDFileField1TS.New()
2542         ff1.setFieldNoProfileSBT(f1)
2543         self.assertEqual(ff1.getDtUnit(),"us")
2544         ff1.write(fname,0)
2545         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2546         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2547         #
2548         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2549         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2550         ff1s.setName("Field2")
2551         ff1s.write(fname,0)
2552         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2553         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)],True))
2555         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2556         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2557         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2558         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2559         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2560         pass
2561
2562     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2563     def testMEDFileFields2(self):
2564         fname="Pyfile65.med"
2565         # to check that all is initialize 
2566         MEDFileField1TS().__str__()
2567         MEDFileFieldMultiTS().__str__()
2568         # building a mesh containing 4 tri3 + 5 quad4
2569         tri=MEDCouplingUMesh("tri",2)
2570         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2571         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2572         tris=[tri.deepCpy() for i in xrange(4)]
2573         for i,elt in enumerate(tris): elt.translate([i,0])
2574         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2575         quad=MEDCouplingUMesh("quad",2)
2576         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2577         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2578         quads=[quad.deepCpy() for i in xrange(5)]
2579         for i,elt in enumerate(quads): elt.translate([5+i,0])
2580         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2581         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2582         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2583         #
2584         fmts0_0=MEDFileFieldMultiTS()
2585         fmts0_1=MEDFileFieldMultiTS()
2586         # time steps
2587         for i in xrange(10):
2588             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2589             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2590             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2591             f.setTime(float(i+1)+0.1,i+1,-i-1)
2592             fmts0_0.appendFieldNoProfileSBT(f)
2593             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2594             self.assertEqual(fmts0_1.getName(),name1)
2595             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2596             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2597             if i>1:
2598                 # components names have been modified to generate errors
2599                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2600                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2601                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2602                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2603                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2604                 pass
2605             # add a mismatch of nb of compos
2606             pass
2607         fmts0_2=fmts0_0.deepCpy()
2608         fmts0_3=fmts0_0.deepCpy()
2609         fmts0_4=fmts0_0.deepCpy()
2610         fmts0_5=fmts0_0.shallowCpy()
2611         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)
2612         del fmts0_2[::2]
2613         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2614         del fmts0_3[[1.1,(6,-6),9]]
2615         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2616         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2617         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2618         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2619         fmts0_7=fmts0_4[::-3]
2620         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2621         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2622         #
2623         fs0=MEDFileFields()
2624         fs0.pushField(fmts0_0)
2625         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2626         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2627         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2628         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2629         fs0.write(fname,2)
2630         fs0=MEDFileFields(fname)
2631         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2632         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2633         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2634         del fs1[["2ndField",3]]
2635         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2636         fs2=fs0[[0,"4thField"]]
2637         self.assertTrue(isinstance(fs2,MEDFileFields))
2638         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2639         #
2640         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2641         pass
2642
2643     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2644     def testMEDFileFields3(self):
2645         fname="Pyfile66.med"
2646         # building a mesh containing 4 tri3 + 5 quad4
2647         tri=MEDCouplingUMesh("tri",2)
2648         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2649         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2650         tris=[tri.deepCpy() for i in xrange(4)]
2651         for i,elt in enumerate(tris): elt.translate([i,0])
2652         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2653         quad=MEDCouplingUMesh("quad",2)
2654         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2655         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2656         quads=[quad.deepCpy() for i in xrange(5)]
2657         for i,elt in enumerate(quads): elt.translate([5+i,0])
2658         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2659         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2660         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2661         #
2662         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2663         #
2664         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2665         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2666         fmts0_0=MEDFileFieldMultiTS()
2667         fmts0_1=MEDFileFieldMultiTS()
2668         # time steps
2669         for i in xrange(10):
2670             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2671             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2672             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2673             f.setTime(float(i+1)+0.1,i+1,-i-1)
2674             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2675             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2676             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2677             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2678             pass
2679         #
2680         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2681         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2682         fmts0_0.zipPflsNames()
2683         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2684         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2685         fmts0_2=fmts0_0.deepCpy()
2686         fmts0_3=fmts0_0.deepCpy()
2687         fmts0_4=fmts0_0.deepCpy()
2688         fs0=MEDFileFields()
2689         fs0.pushField(fmts0_0)
2690         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2691         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2692         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2693         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2694         #
2695         fmts0_5=MEDFileFieldMultiTS()
2696         for i in xrange(7):
2697             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2698             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2699             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2700             f.setTime(float(i+1)+0.1,i+1,-i-1)
2701             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2702             pass
2703         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2704         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2705         fs0.checkGlobsCoherency()
2706         fs0.write(fname,0)
2707         pass
2708     
2709     def testSplitComponents1(self):
2710         fname="Pyfile67.med"
2711         # building a mesh containing 4 tri3 + 5 quad4
2712         tri=MEDCouplingUMesh("tri",2)
2713         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2714         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2715         tris=[tri.deepCpy() for i in xrange(4)]
2716         for i,elt in enumerate(tris): elt.translate([i,0])
2717         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2718         quad=MEDCouplingUMesh("quad",2)
2719         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2720         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2721         quads=[quad.deepCpy() for i in xrange(5)]
2722         for i,elt in enumerate(quads): elt.translate([5+i,0])
2723         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2724         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2725         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2726         #
2727         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2728         #
2729         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2730         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2731         fs=MEDFileFields()
2732         fmts0_1=MEDFileFieldMultiTS()
2733         # time steps
2734         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2735         for i in xrange(10):
2736             name1="1stField"
2737             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2738             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2739             f.setTime(float(i+1)+0.1,i+1,-i-1)
2740             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2741             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2742             pass
2743         fs.pushField(fmts0_1)
2744         self.assertEqual(1,len(fs))
2745         l=fmts0_1.splitComponents()
2746         self.assertEqual(3,len(l))
2747         for elt in l: self.assertEqual(10,len(elt))
2748         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2749         for elt in l:
2750             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2751             pass
2752         fs.pushFields(l)
2753         self.assertEqual(4,len(fs))
2754         for elt in fs: self.assertEqual(10,len(elt))
2755         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2756         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2757         #
2758         fs.write(fname,0) ; del fs
2759         #
2760         fs1=MEDFileFields(fname)
2761         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2762         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2763         self.assertEqual(4,len(fs1))
2764         for i in xrange(10):
2765             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2766                 f1ts=fs1[fieldName][i]
2767                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2768                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2769                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2770                 pass
2771             f1ts=fs1["1stField"][i]
2772             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2773             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2774             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2775             pass
2776         pass
2777
2778     def testMEDFileFieldConvertTo1(self):
2779         fname="Pyfile68.med"
2780         # building a mesh containing 4 tri3 + 5 quad4
2781         tri=MEDCouplingUMesh("tri",2)
2782         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2783         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2784         tris=[tri.deepCpy() for i in xrange(4)]
2785         for i,elt in enumerate(tris): elt.translate([i,0])
2786         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2787         quad=MEDCouplingUMesh("quad",2)
2788         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2789         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2790         quads=[quad.deepCpy() for i in xrange(5)]
2791         for i,elt in enumerate(quads): elt.translate([5+i,0])
2792         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2793         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2794         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2795         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2796         #
2797         ff0=MEDFileField1TS()
2798         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")
2799         f0.checkCoherency()
2800         ff0.setFieldNoProfileSBT(f0)
2801         #
2802         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2803         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2804         #
2805         ff0i=ff0.convertToInt()
2806         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2807         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2808         #
2809         ff1=ff0i.convertToDouble()
2810         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2811         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2812         # With profiles
2813         del arr,f0,ff0,ff1,ff0i,fspExp
2814         ff0=MEDFileField1TS()
2815         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")
2816         f0.checkCoherency()
2817         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2818         ff0.setFieldProfile(f0,mm,0,pfl)
2819         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2820         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2821         #
2822         ff0i=ff0.convertToInt()
2823         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2824         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2825         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2826         #
2827         ff1=ff0i.convertToDouble()
2828         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2829         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2830         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2831         ## MultiTimeSteps
2832         ff0=MEDFileFieldMultiTS()
2833         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)
2834         f0.checkCoherency()
2835         ff0.appendFieldProfile(f0,mm,0,pfl)
2836         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)
2837         f0.checkCoherency()
2838         ff0.appendFieldProfile(f0,mm,0,pfl)
2839         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)
2840         f0.checkCoherency()
2841         ff0.appendFieldProfile(f0,mm,0,pfl)
2842         ff1=ff0.convertToInt()
2843         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2844         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2845         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2846             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2847             arr=ff1.getUndergroundDataArray(dt,it)
2848             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2849             pass
2850         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2851         #
2852         mm.write(fname,2)
2853         ff1.write(fname,0)
2854         #
2855         ff1=ff1.convertToDouble()
2856         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
2857         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2858         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2859             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2860             arr=ff1.getUndergroundDataArray(dt,it)
2861             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
2862             pass
2863         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2864         #
2865         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
2866         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2867         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2868         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2869             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
2870             arr=ff1.getUndergroundDataArray(dt,it)
2871             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2872             pass
2873         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
2874         pass
2875
2876     def testMEDFileFieldPartialLoading(self):
2877         fname="Pyfile69.med"
2878         #
2879         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2880         a.alloc(0,1)
2881         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2882         # building a mesh containing 30 tri3 + 40 quad4
2883         tri=MEDCouplingUMesh("tri",2)
2884         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2885         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2886         tris=[tri.deepCpy() for i in xrange(30)]
2887         for i,elt in enumerate(tris): elt.translate([i,0])
2888         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2889         quad=MEDCouplingUMesh("quad",2)
2890         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2891         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2892         quads=[quad.deepCpy() for i in xrange(40)]
2893         for i,elt in enumerate(quads): elt.translate([40+i,0])
2894         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2895         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2896         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2897         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2898         #
2899         ff0=MEDFileField1TS()
2900         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")
2901         f0.checkCoherency()
2902         ff0.setFieldNoProfileSBT(f0)
2903         ff0.write(fname,0)
2904         #
2905         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
2906         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2907         # With profiles
2908         ff0=MEDFileField1TS()
2909         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")
2910         f0.checkCoherency()
2911         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2912         ff0.setFieldProfile(f0,mm,0,pfl)
2913         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
2914         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2915         ff0.write(fname,0)
2916         #
2917         ff0=MEDFileField1TS(fname,False)
2918         self.assertEqual(ff0.getName(),"FieldCell")
2919         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
2920         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
2921         heap_memory_ref=ff0.getHeapMemorySize()
2922         self.assertIn(heap_memory_ref,xrange(100,210+2*strMulFac))
2923         ff0.loadArrays() ##
2924         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
2925         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2926         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
2927         #
2928         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
2929         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
2930         heap_memory_ref=ff0.getHeapMemorySize()
2931         self.assertIn(heap_memory_ref,xrange(150,260+6*strMulFac))
2932         ff0.loadArrays() ##
2933         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
2934         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2935         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2936         ff0.loadArrays() ##
2937         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2938         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2939         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2940         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2941         ff0.loadArrays() ##
2942         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2943         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2944         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2945         ff0.loadArraysIfNecessary() ##
2946         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
2947         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2948         heap_memory_ref=ff0.getHeapMemorySize()
2949         self.assertIn(heap_memory_ref,xrange(1000,1120+2*strMulFac))
2950         ff0.unloadArrays()
2951         hmd=ff0.getHeapMemorySize()-heap_memory_ref
2952         self.assertEqual(hmd,-800) # -50*8*2
2953         ff0.loadArrays() ##
2954         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
2955         #
2956         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
2957         heap_memory_ref=ff0.getHeapMemorySize()
2958         self.assertIn(heap_memory_ref,xrange(150,260+6*strMulFac))
2959         ff0.loadArrays() ##
2960         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2961         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2962         #
2963         fieldName="FieldCellMultiTS"
2964         ff0=MEDFileFieldMultiTS()
2965         for t in xrange(20):
2966             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)
2967             f0.setTime(float(t)+0.1,t,100+t)
2968             f0.checkCoherency()
2969             ff0.appendFieldNoProfileSBT(f0)
2970             pass
2971         ff0.write(fname,0)
2972         #
2973         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
2974         heap_memory_ref=ff0.getHeapMemorySize()
2975         self.assertIn(heap_memory_ref,xrange(2000,3000+(80+26)*strMulFac))
2976         ff0.loadArrays()
2977         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
2978         del ff0
2979         #
2980         ffs=MEDFileFields(fname,False)
2981         heap_memory_ref=ffs.getHeapMemorySize()
2982         self.assertIn(heap_memory_ref,xrange(2400,3500+(80+50)*strMulFac))
2983         ffs.loadArrays()
2984         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
2985         pass
2986
2987     def testMEDFileMeshReadSelector1(self):
2988         mrs=MEDFileMeshReadSelector()
2989         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
2990         mrs.__str__() ; mrs.__repr__()
2991         #
2992         mrs=MEDFileMeshReadSelector(0)
2993         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())
2994         mrs=MEDFileMeshReadSelector(1)
2995         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2996         mrs=MEDFileMeshReadSelector(2)
2997         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
2998         mrs=MEDFileMeshReadSelector(3)
2999         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3000         mrs=MEDFileMeshReadSelector(4)
3001         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3002         mrs=MEDFileMeshReadSelector(5)
3003         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3004         mrs=MEDFileMeshReadSelector(6)
3005         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3006         mrs=MEDFileMeshReadSelector(7)
3007         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3008         mrs=MEDFileMeshReadSelector(8)
3009         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3010         mrs=MEDFileMeshReadSelector(9)
3011         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3012         mrs=MEDFileMeshReadSelector(10)
3013         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3014         mrs=MEDFileMeshReadSelector(11)
3015         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3016         mrs=MEDFileMeshReadSelector(12)
3017         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3018         mrs=MEDFileMeshReadSelector(13)
3019         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3020         mrs=MEDFileMeshReadSelector(14)
3021         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3022         mrs=MEDFileMeshReadSelector(15)
3023         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3024         mrs=MEDFileMeshReadSelector(16)
3025         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3026         mrs=MEDFileMeshReadSelector(17)
3027         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3028         mrs=MEDFileMeshReadSelector(18)
3029         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3030         mrs=MEDFileMeshReadSelector(19)
3031         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3032         mrs=MEDFileMeshReadSelector(20)
3033         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3034         mrs=MEDFileMeshReadSelector(21)
3035         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3036         mrs=MEDFileMeshReadSelector(22)
3037         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3038         mrs=MEDFileMeshReadSelector(23)
3039         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3040         mrs=MEDFileMeshReadSelector(24)
3041         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3042         mrs=MEDFileMeshReadSelector(25)
3043         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3044         mrs=MEDFileMeshReadSelector(26)
3045         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3046         mrs=MEDFileMeshReadSelector(27)
3047         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3048         mrs=MEDFileMeshReadSelector(28)
3049         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3050         mrs=MEDFileMeshReadSelector(29)
3051         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3052         mrs=MEDFileMeshReadSelector(30)
3053         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3054         mrs=MEDFileMeshReadSelector(31)
3055         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3056         mrs=MEDFileMeshReadSelector(32)
3057         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3058         mrs=MEDFileMeshReadSelector(33)
3059         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3060         mrs=MEDFileMeshReadSelector(34)
3061         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3062         mrs=MEDFileMeshReadSelector(35)
3063         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3064         mrs=MEDFileMeshReadSelector(36)
3065         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3066         mrs=MEDFileMeshReadSelector(37)
3067         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3068         mrs=MEDFileMeshReadSelector(38)
3069         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3070         mrs=MEDFileMeshReadSelector(39)
3071         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3072         mrs=MEDFileMeshReadSelector(40)
3073         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3074         mrs=MEDFileMeshReadSelector(41)
3075         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3076         mrs=MEDFileMeshReadSelector(42)
3077         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3078         mrs=MEDFileMeshReadSelector(43)
3079         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3080         mrs=MEDFileMeshReadSelector(44)
3081         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3082         mrs=MEDFileMeshReadSelector(45)
3083         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3084         mrs=MEDFileMeshReadSelector(46)
3085         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3086         mrs=MEDFileMeshReadSelector(47)
3087         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3088         mrs=MEDFileMeshReadSelector(48)
3089         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3090         mrs=MEDFileMeshReadSelector(49)
3091         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3092         mrs=MEDFileMeshReadSelector(50)
3093         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3094         mrs=MEDFileMeshReadSelector(51)
3095         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3096         mrs=MEDFileMeshReadSelector(52)
3097         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3098         mrs=MEDFileMeshReadSelector(53)
3099         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3100         mrs=MEDFileMeshReadSelector(54)
3101         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3102         mrs=MEDFileMeshReadSelector(55)
3103         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3104         mrs=MEDFileMeshReadSelector(56)
3105         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3106         mrs=MEDFileMeshReadSelector(57)
3107         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3108         mrs=MEDFileMeshReadSelector(58)
3109         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3110         mrs=MEDFileMeshReadSelector(59)
3111         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3112         mrs=MEDFileMeshReadSelector(60)
3113         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3114         mrs=MEDFileMeshReadSelector(61)
3115         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3116         mrs=MEDFileMeshReadSelector(62)
3117         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3118         mrs=MEDFileMeshReadSelector(63)
3119         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3120         #
3121         mrs=MEDFileMeshReadSelector(63)
3122         mrs.setCellFamilyFieldReading(False)
3123         self.assertEqual(mrs.getCode(),62)
3124         mrs.setCellFamilyFieldReading(True)
3125         self.assertEqual(mrs.getCode(),63)
3126         mrs.setNodeFamilyFieldReading(False)
3127         self.assertEqual(mrs.getCode(),61)
3128         mrs.setNodeFamilyFieldReading(True)
3129         self.assertEqual(mrs.getCode(),63)
3130         mrs.setCellNameFieldReading(False)
3131         self.assertEqual(mrs.getCode(),59)
3132         mrs.setCellNameFieldReading(True)
3133         self.assertEqual(mrs.getCode(),63)
3134         mrs.setNodeNameFieldReading(False)
3135         self.assertEqual(mrs.getCode(),55)
3136         mrs.setNodeNameFieldReading(True)
3137         self.assertEqual(mrs.getCode(),63)
3138         mrs.setCellNumFieldReading(False)
3139         self.assertEqual(mrs.getCode(),47)
3140         mrs.setCellNumFieldReading(True)
3141         self.assertEqual(mrs.getCode(),63)
3142         mrs.setNodeNumFieldReading(False)
3143         self.assertEqual(mrs.getCode(),31)
3144         mrs.setNodeNumFieldReading(True)
3145         self.assertEqual(mrs.getCode(),63)
3146         pass
3147     
3148     def testPartialReadOfMeshes(self):
3149         fname="Pyfile70.med"
3150         # building a mesh containing 4 tri3 + 5 quad4
3151         tri=MEDCouplingUMesh("tri",2)
3152         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3153         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3154         tris=[tri.deepCpy() for i in xrange(4)]
3155         for i,elt in enumerate(tris): elt.translate([i,0])
3156         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3157         quad=MEDCouplingUMesh("quad",2)
3158         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3159         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3160         quads=[quad.deepCpy() for i in xrange(5)]
3161         for i,elt in enumerate(quads): elt.translate([5+i,0])
3162         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3163         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3164         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3165         m1=m.buildDescendingConnectivity()[0]
3166         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3167         #
3168         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3169         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3170         mm.setGroupsAtLevel(0,[grp0,grp1])
3171         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3172         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3173         mm.setGroupsAtLevel(-1,[grp2,grp3])
3174         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3175         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3176         mm.setGroupsAtLevel(1,[grp4,grp5])
3177         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3178         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3179         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3180         #
3181         mm.write(fname,2)
3182         ##
3183         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3184         b4_ref_heap_mem=mm.getHeapMemorySize()
3185         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3186         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3187         ref_heap_mem=mm.getHeapMemorySize()
3188         # check the gain of memory using 1GTUMesh instead of UMesh
3189         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
3190         #
3191         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3192         self.assertEqual(len(mm.getGroupsNames()),0)
3193         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3194         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3195         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3196         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3197         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3198         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3199         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3200         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3201         delta1=ref_heap_mem-mm.getHeapMemorySize()
3202         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3203         #
3204         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3205         self.assertEqual(len(mm.getGroupsNames()),6)
3206         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3207         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3208         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3209         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3210         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3211         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3212         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3213         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3214         delta2=ref_heap_mem-mm.getHeapMemorySize()
3215         self.assertTrue(delta2<delta1)
3216         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3217         #
3218         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3219         self.assertEqual(len(mm.getGroupsNames()),6)
3220         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3221         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3222         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3223         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3224         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3225         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3226         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3227         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3228         delta3=ref_heap_mem-mm.getHeapMemorySize()
3229         self.assertTrue(delta3<delta2)
3230         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3231         #
3232         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3233         self.assertEqual(len(mm.getGroupsNames()),6)
3234         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3235         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3236         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3237         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3238         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3239         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3240         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3241         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3242         delta4=ref_heap_mem-mm.getHeapMemorySize()
3243         self.assertTrue(delta4<delta3)
3244         self.assertTrue(delta4>=32*4*2)
3245         #
3246         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3247         self.assertEqual(len(mm.getGroupsNames()),6)
3248         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3249         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3250         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3251         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3252         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3253         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3254         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3255         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3256         delta5=ref_heap_mem-mm.getHeapMemorySize()
3257         self.assertTrue(delta5<delta4)
3258         self.assertEqual(delta5,0)
3259         pass
3260
3261     # this test checks that setFieldProfile perform a check of the array length
3262     # compared to the profile length. This test also checks that mesh attribute of field
3263     # is not used by setFieldProfile (because across this test mesh is equal to None)
3264     def testCheckCompatibilityPfl1(self):
3265         # building a mesh containing 4 tri3 + 5 quad4
3266         tri=MEDCouplingUMesh("tri",2)
3267         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3268         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3269         tris=[tri.deepCpy() for i in xrange(4)]
3270         for i,elt in enumerate(tris): elt.translate([i,0])
3271         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3272         quad=MEDCouplingUMesh("quad",2)
3273         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3274         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3275         quads=[quad.deepCpy() for i in xrange(5)]
3276         for i,elt in enumerate(quads): elt.translate([5+i,0])
3277         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3278         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3279         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3280         m1=m.buildDescendingConnectivity()[0]
3281         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3282         #
3283         f1ts=MEDFileField1TS()
3284         f=MEDCouplingFieldDouble(ON_NODES)
3285         vals=DataArrayDouble(7) ; 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         f1ts.setFieldProfile(f,mm,0,pfl)
3290         #
3291         f1ts=MEDFileField1TS()
3292         f=MEDCouplingFieldDouble(ON_NODES)
3293         vals=DataArrayDouble(8) ; vals.iota(1000)
3294         f.setArray(vals)
3295         f.setName("anonymous") # f has no mesh it is not a bug
3296         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3297         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3298         #
3299         f1ts=MEDFileField1TS()
3300         f=MEDCouplingFieldDouble(ON_CELLS)
3301         vals=DataArrayDouble(7) ; vals.iota(1000)
3302         f.setArray(vals)
3303         f.setName("anonymous") # f has no mesh it is not a bug
3304         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3305         f1ts.setFieldProfile(f,mm,0,pfl)
3306         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3307         #
3308         f1ts=MEDFileField1TS()
3309         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3310         vals=DataArrayDouble(27) ; vals.iota(1000)
3311         f.setArray(vals)
3312         f.setName("anonymous") # f has no mesh it is not a bug
3313         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3314         f.setMesh(m[pfl])
3315         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])
3316         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3317         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])
3318         f.setMesh(None)
3319         f1ts.setFieldProfile(f,mm,0,pfl)
3320         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3321         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3322         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3323         vals=DataArrayDouble(27) ; vals.iota(1000)
3324         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3325         #
3326         f1ts=MEDFileField1TS()
3327         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3328         vals=DataArrayDouble(25) ; vals.iota(1000)
3329         f.setArray(vals)
3330         f.setName("anonymous") # f has no mesh it is not a bug
3331         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3332         f1ts.setFieldProfile(f,mm,0,pfl)
3333         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3334         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3335         f.setArray(vals2)
3336         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3337         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3338         #
3339         f1ts=MEDFileField1TS()
3340         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3341         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3342         f.setArray(vals)
3343         f1ts.setFieldProfile(f,mm,0,pfl)
3344         pass
3345     
3346     def testWRMeshWithNoCells(self):
3347         fname="Pyfile71.med"
3348         a=DataArrayDouble(4) ; a.iota()
3349         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3350         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3351         m=MEDFileUMesh()
3352         m.setMeshAtLevel(0,m00)
3353         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3354         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3355         m.write(fname,2)
3356         del m,a,c,m0,m00
3357         #
3358         m=MEDFileMesh.New(fname)
3359         self.assertEqual((),m.getNonEmptyLevels())
3360         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))
3361         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3362         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3363         pass
3364
3365     #@unittest.skipUnless(False,"requires Vadim's green light")
3366     def testWRQPolyg1(self):
3367         fname="Pyfile72.med"
3368         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3369         m.insertNextCell([0,2,1,3])
3370         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3371         #
3372         ms=[m.deepCpy() for i in xrange(4)]
3373         for i,elt in enumerate(ms):
3374             elt.translate([float(i)*1.5,0.])
3375             pass
3376         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3377         m0.convertAllToPoly()
3378         #
3379         ms=[m.deepCpy() for i in xrange(5)]
3380         for i,elt in enumerate(ms):
3381             elt.translate([float(i)*1.5,1.5])
3382             pass
3383         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3384         m1.convertAllToPoly()
3385         m1.convertLinearCellsToQuadratic()
3386         #
3387         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3388         ##
3389         mm=MEDFileUMesh()
3390         mm.setMeshAtLevel(0,m)
3391         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3392         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3393         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3394         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3395         ##
3396         mm.write(fname,2)
3397         del mm
3398         #
3399         mm_read=MEDFileUMesh(fname)
3400         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3401         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3402         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3403         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3404         ##
3405         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3406         f.setMesh(m)
3407         arr0=DataArrayDouble(9) ; arr0.iota()
3408         arr1=DataArrayDouble(9) ; arr1.iota(100)
3409         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3410         f.setArray(arr) ; f.checkCoherency()
3411         f.setTime(5.6,1,2)
3412         ff=MEDFileField1TS()
3413         ff.setFieldNoProfileSBT(f)
3414         ff.write(fname,0)
3415         ##
3416         ff_read=MEDFileField1TS(fname)
3417         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3418         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3419         pass
3420
3421     pass
3422
3423 unittest.main()