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