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