Salome HOME
Addition of MEDFileAnyTypeFieldMultiTS.pushBackTimeSteps to ease life of users with...
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2015  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 from math import pi,e,sqrt
25 from MEDLoaderDataForTest import MEDLoaderDataForTest
26
27 class MEDLoaderTest(unittest.TestCase):
28     def testMEDMesh1(self):
29         fileName="Pyfile18.med"
30         mname="ExampleOfMultiDimW"
31         medmesh=MEDFileMesh.New(fileName,mname)
32         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
33         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
34         m1_0=medmesh.getLevel0Mesh(True)
35         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
36         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
37         m2_0=medmesh.getLevelM1Mesh(True)
38         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
39         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
40         pass
41
42     def testMEDMesh2(self):
43         fileName="Pyfile10.med"
44         mname="3DToto"
45         outFileName="MEDFileMesh1.med"
46         medmesh=MEDFileUMesh.New(fileName,mname)
47         self.assertEqual((0,),medmesh.getNonEmptyLevels())
48         m1_0=medmesh.getLevel0Mesh(True)
49         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
50         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
51         g1_0=medmesh.getGroup(0,"mesh2",True)
52         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
53         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
54         g1_0=medmesh.getGroup(0,"mesh3",True)
55         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
56         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
57         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
58         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
59         g1_1.setName(g1_0.getName())
60         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
61         g1_0=medmesh.getFamily(0,"Family_-3",True)
62         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
63         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
64         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
65         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
66         g1_1.setName(g1_0.getName())
67         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
68         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
69         medmesh.write(outFileName,2);
70         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
71         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
72         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
73         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
74         famn=medmesh.getFamilyNameGivenId(0)
75         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
76         #without renum
77         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
78         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
79         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
80         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
81         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
82         pass
83
84     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
85     def testMEDMesh3(self):
86         outFileName="MEDFileMesh3.med"
87         c=DataArrayDouble.New()
88         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
89         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
90         c.setValues(coords,9,2)
91         m=MEDCouplingUMesh.New();
92         m.setMeshDimension(2);
93         m.allocateCells(5);
94         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
95         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
96         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
97         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
98         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
99         m.finishInsertingCells();
100         m.setCoords(c)
101         m.checkCoherency()
102         m1=MEDCouplingUMesh.New();
103         m1.setMeshDimension(1);
104         m1.allocateCells(3);
105         m1.insertNextCell(NORM_SEG2,2,[1,4])
106         m1.insertNextCell(NORM_SEG2,2,[3,6])
107         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
108         m1.finishInsertingCells();
109         m1.setCoords(c)
110         m1.checkCoherency()
111         m2=MEDCouplingUMesh.New();
112         m2.setMeshDimension(0);
113         m2.allocateCells(4);
114         m2.insertNextCell(NORM_POINT1,1,[1])
115         m2.insertNextCell(NORM_POINT1,1,[3])
116         m2.insertNextCell(NORM_POINT1,1,[2])
117         m2.insertNextCell(NORM_POINT1,1,[6])
118         m2.finishInsertingCells();
119         m2.setCoords(c)
120         m2.checkCoherency()
121         #
122         mm=MEDFileUMesh.New()
123         self.assertTrue(mm.getUnivNameWrStatus())
124         mm.setName("MyFirstMEDCouplingMEDmesh")
125         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
126         mm.setCoords(c)
127         mm.setMeshAtLevel(-1,m1);
128         mm.setMeshAtLevel(0,m);
129         mm.setMeshAtLevel(-2,m2);
130         # playing with groups
131         g1_2=DataArrayInt.New()
132         g1_2.setValues([1,3],2,1)
133         g1_2.setName("G1")
134         g2_2=DataArrayInt.New()
135         g2_2.setValues([1,2,3],3,1)
136         g2_2.setName("G2")
137         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
138         g1_1=DataArrayInt.New()
139         g1_1.setValues([0,1,2],3,1)
140         g1_1.setName("G1")
141         g2_1=DataArrayInt.New()
142         g2_1.setValues([0,2],2,1)
143         g2_1.setName("G2")
144         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
145         g1_N=DataArrayInt.New()
146         g1_N.setValues(range(8),8,1)
147         g1_N.setName("G1")
148         g2_N=DataArrayInt.New()
149         g2_N.setValues(range(9),9,1)
150         g2_N.setName("G2")
151         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
152         mm.createGroupOnAll(0,"GrpOnAllCell")
153         # check content of mm
154         t=mm.getGroupArr(0,"G1",False)
155         self.assertTrue(g1_2.isEqual(t));
156         t=mm.getGroupArr(0,"G2",False)
157         self.assertTrue(g2_2.isEqual(t));
158         t=mm.getGroupArr(-1,"G1",False)
159         self.assertTrue(g1_1.isEqual(t));
160         t=mm.getGroupArr(-1,"G2",False)
161         self.assertTrue(g2_1.isEqual(t));
162         t=mm.getGroupArr(1,"G1",False)
163         self.assertTrue(g1_N.isEqual(t));
164         t=mm.getGroupArr(1,"G2",False)
165         self.assertTrue(g2_N.isEqual(t));
166         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
167         t=mm.getGroupArr(0,"GrpOnAllCell")
168         self.assertTrue(t.getValues()==range(5))
169         #
170         mmCpy=mm.deepCpy()
171         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
172         mmCpy.write(outFileName,2);
173         #
174         mm=MEDFileMesh.New(outFileName)
175         #
176         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
177         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
178         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
179         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
180         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
181         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
182         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
183         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
184         self.assertEqual(3,len(lmm))
185         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
186         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
187         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
188         #
189         self.assertTrue(mm.getUnivNameWrStatus())
190         self.assertTrue(isinstance(mm.getUnivName(),str))
191         self.assertTrue(len(mm.getUnivName())!=0)
192         mbis=mm.getMeshAtLevel(0)
193         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
194         self.assertTrue(m.isEqual(mbis,1e-12));
195         #
196         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
197         pass
198
199     # this test is the testMEDMesh3 except that permutation is dealed here
200     def testMEDMesh4(self):
201         outFileName="MEDFileMesh4.med"
202         c=DataArrayDouble.New()
203         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
204         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
205         c.setValues(coords,9,2)
206         c.setInfoOnComponent(0,"abcdef [km]")
207         c.setInfoOnComponent(1,"ghij [MW]")
208         m=MEDCouplingUMesh.New();
209         m.setMeshDimension(2);
210         m.allocateCells(5);
211         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
212         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
213         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
214         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
215         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
216         m.finishInsertingCells();
217         m.setCoords(c)
218         m.checkCoherency()
219         m1=MEDCouplingUMesh.New();
220         m1.setMeshDimension(1);
221         m1.allocateCells(3);
222         m1.insertNextCell(NORM_SEG2,2,[1,4])
223         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
224         m1.insertNextCell(NORM_SEG2,2,[3,6])
225         m1.finishInsertingCells();
226         m1.setCoords(c)
227         m1.checkCoherency()
228         m2=MEDCouplingUMesh.New();
229         m2.setMeshDimension(0);
230         m2.allocateCells(4);
231         m2.insertNextCell(NORM_POINT1,1,[1])
232         m2.insertNextCell(NORM_POINT1,1,[3])
233         m2.insertNextCell(NORM_POINT1,1,[2])
234         m2.insertNextCell(NORM_POINT1,1,[6])
235         m2.finishInsertingCells();
236         m2.setCoords(c)
237         m2.checkCoherency()
238         #
239         mm=MEDFileUMesh.New()
240         mm.setName("My2ndMEDCouplingMEDmesh")
241         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
242         mm.setCoords(c)
243         renumNode=DataArrayInt.New()
244         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
245         mm.setRenumFieldArr(1,renumNode)
246         mm.setMeshAtLevel(-1,m1,True);
247         mm.setMeshAtLevel(0,m,True);
248         mm.setMeshAtLevel(-2,m2,True);
249         mm.removeMeshAtLevel(-2)
250         mm.setMeshAtLevel(-2,m2,True);
251         # playing with groups
252         g1_2=DataArrayInt.New()
253         g1_2.setValues([2,3],2,1)
254         g1_2.setName("G1")
255         g2_2=DataArrayInt.New()
256         g2_2.setValues([2,0,3],3,1)
257         g2_2.setName("G2")
258         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
259         g1_1=DataArrayInt.New()
260         g1_1.setValues([0,2,1],3,1)
261         g1_1.setName("G1")
262         g2_1=DataArrayInt.New()
263         g2_1.setValues([0,2],2,1)
264         g2_1.setName("G2")
265         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
266         g1_N=DataArrayInt.New()
267         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
268         g1_N.setName("G1")
269         g2_N=DataArrayInt.New()
270         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
271         g2_N.setName("G2")
272         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
273         # check content of mm
274         t=mm.getGroupArr(0,"G1",True)
275         self.assertTrue(g1_2.isEqual(t));
276         t=mm.getGroupArr(0,"G2",True)
277         self.assertTrue(g2_2.isEqual(t));
278         t=mm.getGroupArr(-1,"G1",True)
279         self.assertTrue(g1_1.isEqual(t));
280         t=mm.getGroupArr(-1,"G2",True)
281         self.assertTrue(g2_1.isEqual(t));
282         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
283         #
284         mm.write(outFileName,2);
285         mm2=MEDFileMesh.New(outFileName)
286         res=mm.isEqual(mm2,1e-12)
287         self.assertTrue(res[0])
288         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
289         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
290         mm2.keepFamIdsOnlyOnLevs([3],[-1])
291         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
292             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
293             pass
294         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
295         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
296         #
297         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
298         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
299         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
300         self.assertTrue(not mm2.existsFamily("Family_-8"))
301         mm2.createGroupOnAll(-1,"GrpOnAllFace")
302         self.assertTrue(mm2.existsFamily("Family_-8"))
303         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
304         pass
305
306     #testing persistence of retrieved arrays
307     def testMEDMesh5(self):
308         fileName="Pyfile18.med"
309         mname="ExampleOfMultiDimW"
310         medmesh=MEDFileUMesh.New(fileName,mname)
311         m1_0=medmesh.getLevel0Mesh(True)
312         da1=medmesh.getFamilyFieldAtLevel(0)
313         del medmesh
314         self.assertEqual(20,m1_0.getNumberOfCells())
315         self.assertEqual(20,da1.getNumberOfTuples())
316         pass
317
318     def testMEDMesh6(self):
319         outFileName="MEDFileMesh5.med"
320         m=MEDFileCMesh.New()
321         m.setTime(-1,-1,2.3)
322         m1=MEDCouplingCMesh.New();
323         da=DataArrayDouble.New()
324         da.setValues([0.,1.,2.],3,1)
325         da.setInfoOnComponent(0,"XX [mm]")
326         m1.setCoordsAt(0,da)
327         da=DataArrayDouble.New()
328         da.setValues([0.,1.2],2,1)
329         da.setInfoOnComponent(0,"YY [km]")
330         m1.setCoordsAt(1,da)
331         da=DataArrayDouble.New()
332         da.setValues([0.,1.3],2,1)
333         da.setInfoOnComponent(0,"ZZ [um]")
334         m1.setCoordsAt(2,da)
335         m.setMesh(m1)
336         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(771-40,771+21+(4+1)*strMulFac))
1997         #
1998         fff=MEDFileFieldMultiTS()
1999         fff.appendFieldNoProfileSBT(f)
2000         self.assertIn(fff.getHeapMemorySize(),xrange(815-50,815+30+(6+2)*strMulFac))
2001         f.setTime(1.,0,-1)
2002         fff.appendFieldNoProfileSBT(f)
2003         self.assertIn(fff.getHeapMemorySize(),xrange(1594-90,1594+50+(10+1)*strMulFac))
2004         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(771-40,771+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(2348-130,2348+100+(10+2)*strMulFac))
2010         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(),xrange(204-10,204+10+2*strMulFac))
2011         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(738-50,738+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         self.assertEqual(mm.getSpaceDimension(),3)
2045         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2046         #
2047         m1=MEDFileMesh.New(fname)
2048         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2049         self.assertTrue(isinstance(m1.getUnivName(),str))
2050         self.assertTrue(len(m1.getUnivName())!=0)
2051         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2052         pass
2053
2054     def testParameters1(self):
2055         fname="Pyfile56.med"
2056         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2057         mm=MEDFileCMesh() ; mm.setMesh(m)
2058         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2059         data=MEDFileData()
2060         p=MEDFileParameters()
2061         data.setParams(p) ; data.setMeshes(ms)
2062         pts=MEDFileParameterMultiTS()
2063         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2064         pts.appendValue(1,2,3.4,567.89)
2065         pts.appendValue(2,3,5.6,999.123)
2066         pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2067         p.pushParam(pts) ; p.pushParam(pts2)
2068         data.write(fname,2)
2069         p2=MEDFileParameters(fname)
2070         self.assertTrue(p.isEqual(p2,1e-14)[0])
2071         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2072         p3=p.deepCpy()
2073         pts4=pts2.deepCpy()
2074         pts3=pts2.deepCpy()
2075         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2076         pts2.eraseTimeStepIds([0])
2077         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2078         del pts3[[3.4]]
2079         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2080         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2081         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2082         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2083         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2084         p=p3
2085         self.assertTrue(p.isEqual(p2,1e-14)[0])
2086         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2087         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2088         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2089         self.assertEqual(p.getParamsNames(),('A','B'))
2090         ptsr=MEDFileParameterMultiTS(fname,"B")
2091         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2092         ptsr=MEDFileParameterMultiTS(fname)
2093         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2094         p1tsr=MEDFileParameterDouble1TS(fname)
2095         self.assertEqual(p1tsr.getName(),"A")
2096         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2097         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2098         self.assertEqual(p1tsr.getName(),"B")
2099         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2100         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2101         self.assertEqual(p1tsr.getName(),"B")
2102         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2103         data2=MEDFileData(fname)
2104         self.assertEqual(2,data2.getNumberOfParams())
2105         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2106         pass
2107
2108     def testNamesOnCellAndNodesInMeshes1(self):
2109         fname="Pyfile58.med"
2110         fname2="Pyfile59.med"
2111         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2112         m1=m.buildDescendingConnectivity()[0]
2113         m1.sortCellsInMEDFileFrmt()
2114         #
2115         mm=MEDFileUMesh()
2116         mm.setMeshAtLevel(0,m)
2117         mm.setMeshAtLevel(-1,m1)
2118         namesCellL0=DataArrayAsciiChar(6,16)
2119         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2120         mm.setNameFieldAtLevel(0,namesCellL0)
2121         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.substr(2)])
2122         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2123         mm.setNameFieldAtLevel(-1,namesCellL1)
2124         namesNodes=namesCellL1.substr(4,16)
2125         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2126         mm.setNameFieldAtLevel(1,namesNodes)
2127         mm.write(fname,2)
2128         #
2129         mmr=MEDFileMesh.New(fname)
2130         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2131         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2132         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2133         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2134         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2135         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2136         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2137         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2138         mmCpy=mm.deepCpy()
2139         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2140         # remove names on nodes
2141         mmCpy.setNameFieldAtLevel(1,None)
2142         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2143         mm.setNameFieldAtLevel(1,None)
2144         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2145         mm.setNameFieldAtLevel(-1,None)
2146         mm.write(fname,2)
2147         mmr=MEDFileMesh.New(fname)
2148         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2149         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2150         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2151         #
2152         c=MEDCouplingCMesh()
2153         arr=DataArrayDouble([0.,1.1,2.3])
2154         c.setCoords(arr,arr)
2155         c.setName("cmesh")
2156         cc=MEDFileCMesh()
2157         cc.setMesh(c)
2158         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2159         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2160         cc.write(fname2,2)
2161         ccr=MEDFileMesh.New(fname2)
2162         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2163         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2164         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2165         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2166         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2167         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2168         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2169         ccCpy=cc.deepCpy()
2170         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2171         pass
2172
2173     def testToExportInExamples1(self):
2174         m=MEDCouplingCMesh()
2175         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2176         m.setCoords(arr,arr)
2177         m=m.buildUnstructured() ; m.setName("mesh")
2178         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2179         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2180         m2=m.computeSkin()
2181         mm=MEDFileUMesh()
2182         mm.setMeshAtLevel(0,m)
2183         mm.setMeshAtLevel(-1,m2)
2184         mm.setGroupsAtLevel(0,[grp1,grp2])
2185         mm.write("example.med",2)
2186         #
2187         m0=mm.getMeshAtLevel(0)
2188         m1=mm.getMeshAtLevel(-1)
2189         grp1=mm.getGroupArr(0,"grp1")
2190         grp2=mm.getGroupArr(0,"grp2")
2191         grps=[grp1,grp2]
2192         whichGrp=DataArrayInt(m0.getNumberOfCells())
2193         whichGrp.fillWithValue(-1)
2194         for grpId,grp in enumerate(grps):
2195             whichGrp[grp]=grpId
2196             pass
2197         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2198         e,f=a.areCellsIncludedIn(m1,2)
2199         self.assertTrue(e)
2200         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2201         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2202         c2.transformWithIndArr(whichGrp)
2203         splitOfM1=len(grps)*[None]
2204         for grpId,grp in enumerate(grps):
2205             tmp=c2.getIdsEqual(grpId)
2206             splitOfM1[grpId]=tmp
2207             pass
2208         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2209         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2210         pass
2211
2212     def testBugCorrection1(self):
2213         fs=MEDFileFields()
2214         fs.resize(3)
2215         self.assertEqual(fs[0],None)
2216         self.assertEqual(3,len(fs))
2217         pass
2218
2219     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2220         f1Name="Pyfile60.med"
2221         f2Name="Pyfile61.med"
2222         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2223         d1.write(f1Name,2)
2224         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2225         d2.write(f2Name,2)
2226         # reading and compare
2227         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2228         for mn in d1.getMeshes().getMeshesNames():
2229             m1=d1.getMeshes()[mn]
2230             m2=d2.getMeshes()[mn]
2231             for lev in m1.getNonEmptyLevels():
2232                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2233                 for grpName in grpsNames:
2234                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2235                     pass
2236                 pass
2237             pass
2238         for fieldn in d1.getFields().getFieldsNames():
2239             f1=d1.getFields()[fieldn]
2240             f2=d2.getFields()[fieldn]
2241             for it,order,tim in f1.getTimeSteps():
2242                 f1t=f1[it,order]
2243                 f2t=f2[it,order]
2244                 if len(f1t.getPflsReallyUsed())!=0:
2245                     # profile case
2246                     for lev in f1t.getNonEmptyLevels()[1]:
2247                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2248                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2249                         self.assertTrue(pfl1.isEqual(pfl2))
2250                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2251                         pass
2252                     pass
2253                 else:
2254                     # no profile case
2255                     for lev in f1t.getNonEmptyLevels()[1]:
2256                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2257                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2258                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2259                         pass
2260                     pass
2261                 pass
2262             pass
2263         pass
2264
2265     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2266         m=MEDCouplingCMesh()
2267         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2268         m.setCoords(arr,arr,arr)
2269         m=m.buildUnstructured()
2270         m2=m.buildDescendingConnectivity()[0]
2271         m.setName("mesh")
2272         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2273         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2274         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2275         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2276         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2277         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2278         mm=MEDFileUMesh()
2279         mm.setMeshAtLevel(0,m)
2280         mm.setGroupsAtLevel(0,[g1,g2])
2281         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2282         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2283         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2284         mm.normalizeFamIdsMEDFile()
2285         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2286         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2287         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2288         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2289         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2290         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2291         for g in mm.getGroupsOnSpecifiedLev(0):
2292             for f in mm.getFamiliesIdsOnGroup(g):
2293                 self.assertTrue(f<0)
2294                 pass
2295             pass
2296         #
2297         mm=MEDFileUMesh()
2298         mm.setMeshAtLevel(0,m)
2299         mm.setMeshAtLevel(-1,m2)
2300         mm.setGroupsAtLevel(0,[g1,g2])
2301         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2302         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2303         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2304         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2305         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2306         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2307         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2308         mm.normalizeFamIdsMEDFile()
2309         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2310         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2311         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2312         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2313         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2314         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2315         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2316         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2317         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2318         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2319         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2320         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2321         for lev in [0,-1]:
2322             for g in mm.getGroupsOnSpecifiedLev(lev):
2323                 for f in mm.getFamiliesIdsOnGroup(g):
2324                     self.assertTrue(f<0)
2325                     pass
2326                 pass
2327             pass
2328          #
2329         mm=MEDFileUMesh()
2330         mm.setMeshAtLevel(0,m)
2331         mm.setMeshAtLevel(-1,m2)
2332         mm.setGroupsAtLevel(0,[g1,g2])
2333         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2334         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2335         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2336         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2337         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2338         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2339         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2340         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2341         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2342         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2343         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2344         mm.normalizeFamIdsMEDFile()
2345         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2346         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2347         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2348         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2349         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2350         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2351         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2352         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2353         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2354         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2355         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2356         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2357         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2358         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2359         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2360         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2361         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2362         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2363         for lev in [0,-1]:
2364             for g in mm.getGroupsOnSpecifiedLev(lev):
2365                 for f in mm.getFamiliesIdsOnGroup(g):
2366                     self.assertTrue(f<0)
2367                     pass
2368                 pass
2369             pass
2370         for g in mm.getGroupsOnSpecifiedLev(1):
2371             for f in mm.getFamiliesIdsOnGroup(g):
2372                 self.assertTrue(f>0)
2373                 pass
2374             pass
2375         pass
2376     
2377     def testNonRegressionMantis22212ChangeGrpName(self):
2378         fileName="Pyfile62.med"
2379         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2380         m=MEDFileUMesh.New()
2381         m.setCoords(m2.getCoords())
2382         m.setMeshAtLevel(0,m2)
2383         m.setMeshAtLevel(-1,m1)
2384         m.setMeshAtLevel(-2,m0)
2385         m.setFamilyFieldArr(0,f2)
2386         m.setFamilyFieldArr(-1,f1)
2387         m.setFamilyFieldArr(-2,f0)
2388         m.setFamilyFieldArr(1,p)
2389         nbOfFams=len(fns)
2390         for i in xrange(nbOfFams):
2391             m.addFamily(fns[i],fids[i])
2392             pass
2393         nbOfGrps=len(grpns)
2394         for i in xrange(nbOfGrps):
2395             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2396             pass
2397         m.setName(m2.getName())
2398         m.setDescription(m2.getDescription())
2399         m.write(fileName,2)
2400         #
2401         mm0=MEDFileMesh.New(fileName)
2402         mm1=MEDFileMesh.New(fileName)
2403         groupNamesIni=MEDLoader.GetMeshGroupsNames(fileName,"ma")
2404         for name in groupNamesIni:
2405             mm1.changeGroupName(name,name+'N')
2406             pass
2407         mm1.write(fileName,2)
2408         del mm1
2409         #
2410         mm2=MEDFileMesh.New(fileName)
2411         for name in groupNamesIni:
2412             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2413                 arr0=mm0.getGroupArr(lev,name)
2414                 arr2=mm2.getGroupArr(lev,name+'N')
2415                 arr0.setName(name+'N')
2416                 self.assertTrue(arr0.isEqual(arr2))
2417                 pass
2418             pass
2419         pass
2420
2421     def testInt32InMEDFileFieldStar1(self):
2422         fname="Pyfile63.med"
2423         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2424         arr=f1.getArray().convertToIntArr()
2425         f1.setArray(None)
2426         m1=f1.getMesh()
2427         mm1=MEDFileUMesh.New()
2428         mm1.setCoords(m1.getCoords())
2429         mm1.setMeshAtLevel(0,m1)
2430         mm1.setName(m1.getName())
2431         mm1.write(fname,2)
2432         ff1=MEDFileIntField1TS()
2433         ff1.setFieldNoProfileSBT(f1,arr)
2434         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2435         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2436         self.assertTrue(b.isEqual(arr))
2437         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2438         ff1.write(fname,0)
2439         ff2=MEDFileAnyTypeField1TS.New(fname)
2440         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2441         self.assertEqual(ff2.getTime(),[0,1,2.0])
2442         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2443         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2444         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2445         self.assertTrue(b.isEqual(arr))
2446         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2447         ff2.setTime(1,2,3.)
2448         c=ff2.getUndergroundDataArray() ; c*=2
2449         ff2.write(fname,0) # 2 time steps in 
2450         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2451         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2452         self.assertEqual(len(ffs1),2)
2453         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2454         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2455         self.assertTrue(b.isEqual(arr))
2456         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2457         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2458         self.assertTrue(b.isEqual(arr))
2459         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2460         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2461         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2462         self.assertTrue(b.isEqual(2*arr))
2463         f1.setTime(3.,1,2)
2464         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2465         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2466         for it in ffs1:
2467             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2468             bc+=b
2469             pass
2470         self.assertTrue(bc.isEqual(3*arr))
2471         nf1=MEDCouplingFieldDouble(ON_NODES)
2472         nf1.setTime(9.,10,-1)
2473         nf1.setMesh(f1.getMesh())
2474         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2475         nf1.setName("VectorFieldOnNodes")
2476         nff1=MEDFileIntField1TS.New()
2477         nff1.setFieldNoProfileSBT(nf1,narr)
2478         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2479         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2480         nff1.write(fname,0)
2481         #
2482         nf2=MEDCouplingFieldDouble(ON_NODES)
2483         nf2.setTime(19.,20,-11)
2484         nf2.setMesh(f1.getMesh())
2485         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2486         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2487         nff2=MEDFileIntField1TS.New()
2488         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2489         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2490         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2491         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2492         self.assertTrue(b.isEqual(npfl))
2493         self.assertTrue(a.isEqual(narr2))
2494         nff2.write(fname,0)
2495         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2496         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2497         self.assertTrue(b.isEqual(npfl))
2498         self.assertTrue(a.isEqual(narr2))
2499         #
2500         nf3=MEDCouplingFieldDouble(ON_NODES)
2501         nf3.setName("VectorFieldOnNodesDouble")
2502         nf3.setTime(29.,30,-21)
2503         nf3.setMesh(f1.getMesh())
2504         nf3.setArray(f1.getMesh().getCoords())
2505         nff3=MEDFileField1TS.New()
2506         nff3.setFieldNoProfileSBT(nf3)
2507         nff3.write(fname,0)
2508         fs=MEDFileFields(fname)
2509         self.assertEqual(len(fs),4)
2510         ffs=[it for it in fs]
2511         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2512         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2513         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2514         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2515         #
2516         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2517         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2518         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2519         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2520         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2521         #
2522         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2523         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2524         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2525         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2526         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2527         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2528         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2529         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2530         #
2531         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2532         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2533         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2534         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2535         pass
2536
2537     def testMEDFileFields1(self):
2538         fname="Pyfile64.med"
2539         f1=MEDCouplingFieldDouble(ON_NODES)
2540         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2541         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2542         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2543         f1.setMesh(m)
2544         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2545         f1.setArray(arr)
2546         f1.setName("Field1")
2547         ff1=MEDFileField1TS.New()
2548         ff1.setFieldNoProfileSBT(f1)
2549         self.assertEqual(ff1.getDtUnit(),"us")
2550         ff1.write(fname,0)
2551         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2552         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2553         #
2554         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2555         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2556         ff1s.setName("Field2")
2557         ff1s.write(fname,0)
2558         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2559         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2560         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2561         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2562         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2563         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2564         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2565         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2566         pass
2567
2568     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2569     def testMEDFileFields2(self):
2570         fname="Pyfile65.med"
2571         # to check that all is initialize 
2572         MEDFileField1TS().__str__()
2573         MEDFileFieldMultiTS().__str__()
2574         # building a mesh containing 4 tri3 + 5 quad4
2575         tri=MEDCouplingUMesh("tri",2)
2576         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2577         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2578         tris=[tri.deepCpy() for i in xrange(4)]
2579         for i,elt in enumerate(tris): elt.translate([i,0])
2580         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2581         quad=MEDCouplingUMesh("quad",2)
2582         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2583         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2584         quads=[quad.deepCpy() for i in xrange(5)]
2585         for i,elt in enumerate(quads): elt.translate([5+i,0])
2586         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2587         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2588         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2589         #
2590         fmts0_0=MEDFileFieldMultiTS()
2591         fmts0_1=MEDFileFieldMultiTS()
2592         # time steps
2593         for i in xrange(10):
2594             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2595             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2596             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2597             f.setTime(float(i+1)+0.1,i+1,-i-1)
2598             fmts0_0.appendFieldNoProfileSBT(f)
2599             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2600             self.assertEqual(fmts0_1.getName(),name1)
2601             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2602             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2603             if i>1:
2604                 # components names have been modified to generate errors
2605                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2606                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2607                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2608                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2609                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2610                 pass
2611             # add a mismatch of nb of compos
2612             pass
2613         fmts0_2=fmts0_0.deepCpy()
2614         fmts0_3=fmts0_0.deepCpy()
2615         fmts0_4=fmts0_0.deepCpy()
2616         fmts0_5=fmts0_0.shallowCpy()
2617         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)
2618         del fmts0_2[::2]
2619         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2620         del fmts0_3[[1.1,(6,-6),9]]
2621         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2622         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2623         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2624         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2625         fmts0_7=fmts0_4[::-3]
2626         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2627         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2628         #
2629         fs0=MEDFileFields()
2630         fs0.pushField(fmts0_0)
2631         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2632         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2633         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2634         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2635         fs0.write(fname,2)
2636         fs0=MEDFileFields(fname)
2637         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2638         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2639         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2640         del fs1[["2ndField",3]]
2641         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2642         fs2=fs0[[0,"4thField"]]
2643         self.assertTrue(isinstance(fs2,MEDFileFields))
2644         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2645         #
2646         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2647         pass
2648
2649     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2650     def testMEDFileFields3(self):
2651         fname="Pyfile66.med"
2652         # building a mesh containing 4 tri3 + 5 quad4
2653         tri=MEDCouplingUMesh("tri",2)
2654         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2655         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2656         tris=[tri.deepCpy() for i in xrange(4)]
2657         for i,elt in enumerate(tris): elt.translate([i,0])
2658         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2659         quad=MEDCouplingUMesh("quad",2)
2660         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2661         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2662         quads=[quad.deepCpy() for i in xrange(5)]
2663         for i,elt in enumerate(quads): elt.translate([5+i,0])
2664         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2665         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2666         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2667         #
2668         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2669         #
2670         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2671         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2672         fmts0_0=MEDFileFieldMultiTS()
2673         fmts0_1=MEDFileFieldMultiTS()
2674         # time steps
2675         for i in xrange(10):
2676             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2677             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2678             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2679             f.setTime(float(i+1)+0.1,i+1,-i-1)
2680             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2681             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2682             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2683             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2684             pass
2685         #
2686         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2687         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2688         fmts0_0.zipPflsNames()
2689         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2690         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2691         fmts0_2=fmts0_0.deepCpy()
2692         fmts0_3=fmts0_0.deepCpy()
2693         fmts0_4=fmts0_0.deepCpy()
2694         fs0=MEDFileFields()
2695         fs0.pushField(fmts0_0)
2696         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2697         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2698         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2699         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2700         #
2701         fmts0_5=MEDFileFieldMultiTS()
2702         for i in xrange(7):
2703             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2704             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2705             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2706             f.setTime(float(i+1)+0.1,i+1,-i-1)
2707             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2708             pass
2709         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2710         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2711         fs0.checkGlobsCoherency()
2712         fs0.write(fname,0)
2713         pass
2714     
2715     def testSplitComponents1(self):
2716         fname="Pyfile67.med"
2717         # building a mesh containing 4 tri3 + 5 quad4
2718         tri=MEDCouplingUMesh("tri",2)
2719         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2720         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2721         tris=[tri.deepCpy() for i in xrange(4)]
2722         for i,elt in enumerate(tris): elt.translate([i,0])
2723         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2724         quad=MEDCouplingUMesh("quad",2)
2725         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2726         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2727         quads=[quad.deepCpy() for i in xrange(5)]
2728         for i,elt in enumerate(quads): elt.translate([5+i,0])
2729         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2730         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2731         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2732         #
2733         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2734         #
2735         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2736         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2737         fs=MEDFileFields()
2738         fmts0_1=MEDFileFieldMultiTS()
2739         # time steps
2740         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2741         for i in xrange(10):
2742             name1="1stField"
2743             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2744             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2745             f.setTime(float(i+1)+0.1,i+1,-i-1)
2746             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2747             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2748             pass
2749         fs.pushField(fmts0_1)
2750         self.assertEqual(1,len(fs))
2751         l=fmts0_1.splitComponents()
2752         self.assertEqual(3,len(l))
2753         for elt in l: self.assertEqual(10,len(elt))
2754         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2755         for elt in l:
2756             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2757             pass
2758         fs.pushFields(l)
2759         self.assertEqual(4,len(fs))
2760         for elt in fs: self.assertEqual(10,len(elt))
2761         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2762         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2763         #
2764         fs.write(fname,0) ; del fs
2765         #
2766         fs1=MEDFileFields(fname)
2767         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2768         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2769         self.assertEqual(4,len(fs1))
2770         for i in xrange(10):
2771             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2772                 f1ts=fs1[fieldName][i]
2773                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2774                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2775                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2776                 pass
2777             f1ts=fs1["1stField"][i]
2778             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2779             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2780             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2781             pass
2782         pass
2783
2784     def testMEDFileFieldConvertTo1(self):
2785         fname="Pyfile68.med"
2786         # building a mesh containing 4 tri3 + 5 quad4
2787         tri=MEDCouplingUMesh("tri",2)
2788         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2789         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2790         tris=[tri.deepCpy() for i in xrange(4)]
2791         for i,elt in enumerate(tris): elt.translate([i,0])
2792         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2793         quad=MEDCouplingUMesh("quad",2)
2794         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2795         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2796         quads=[quad.deepCpy() for i in xrange(5)]
2797         for i,elt in enumerate(quads): elt.translate([5+i,0])
2798         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2799         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2800         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2801         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2802         #
2803         ff0=MEDFileField1TS()
2804         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")
2805         f0.checkCoherency()
2806         ff0.setFieldNoProfileSBT(f0)
2807         #
2808         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2809         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2810         #
2811         ff0i=ff0.convertToInt()
2812         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2813         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2814         #
2815         ff1=ff0i.convertToDouble()
2816         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2817         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2818         # With profiles
2819         del arr,f0,ff0,ff1,ff0i,fspExp
2820         ff0=MEDFileField1TS()
2821         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")
2822         f0.checkCoherency()
2823         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2824         ff0.setFieldProfile(f0,mm,0,pfl)
2825         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2826         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2827         #
2828         ff0i=ff0.convertToInt()
2829         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2830         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2831         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2832         #
2833         ff1=ff0i.convertToDouble()
2834         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2835         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2836         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2837         ## MultiTimeSteps
2838         ff0=MEDFileFieldMultiTS()
2839         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)
2840         f0.checkCoherency()
2841         ff0.appendFieldProfile(f0,mm,0,pfl)
2842         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(100) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(1.1,1,11)
2843         f0.checkCoherency()
2844         ff0.appendFieldProfile(f0,mm,0,pfl)
2845         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)
2846         f0.checkCoherency()
2847         ff0.appendFieldProfile(f0,mm,0,pfl)
2848         ff1=ff0.convertToInt()
2849         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2850         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2851         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2852             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2853             arr=ff1.getUndergroundDataArray(dt,it)
2854             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2855             pass
2856         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2857         #
2858         mm.write(fname,2)
2859         ff1.write(fname,0)
2860         #
2861         ff1=ff1.convertToDouble()
2862         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
2863         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2864         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2865             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2866             arr=ff1.getUndergroundDataArray(dt,it)
2867             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
2868             pass
2869         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2870         #
2871         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
2872         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2873         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2874         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2875             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
2876             arr=ff1.getUndergroundDataArray(dt,it)
2877             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2878             pass
2879         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
2880         pass
2881
2882     def testMEDFileFieldPartialLoading(self):
2883         fname="Pyfile69.med"
2884         #
2885         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2886         a.alloc(0,1)
2887         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2888         # building a mesh containing 30 tri3 + 40 quad4
2889         tri=MEDCouplingUMesh("tri",2)
2890         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2891         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2892         tris=[tri.deepCpy() for i in xrange(30)]
2893         for i,elt in enumerate(tris): elt.translate([i,0])
2894         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2895         quad=MEDCouplingUMesh("quad",2)
2896         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2897         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2898         quads=[quad.deepCpy() for i in xrange(40)]
2899         for i,elt in enumerate(quads): elt.translate([40+i,0])
2900         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2901         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2902         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2903         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2904         #
2905         ff0=MEDFileField1TS()
2906         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")
2907         f0.checkCoherency()
2908         ff0.setFieldNoProfileSBT(f0)
2909         ff0.write(fname,0)
2910         #
2911         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
2912         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2913         # With profiles
2914         ff0=MEDFileField1TS()
2915         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")
2916         f0.checkCoherency()
2917         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2918         ff0.setFieldProfile(f0,mm,0,pfl)
2919         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
2920         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2921         ff0.write(fname,0)
2922         #
2923         ff0=MEDFileField1TS(fname,False)
2924         self.assertEqual(ff0.getName(),"FieldCell")
2925         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
2926         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
2927         heap_memory_ref=ff0.getHeapMemorySize()
2928         self.assertIn(heap_memory_ref,xrange(182,298+2*strMulFac))
2929         ff0.loadArrays() ##
2930         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
2931         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2932         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
2933         #
2934         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
2935         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
2936         heap_memory_ref=ff0.getHeapMemorySize()
2937         self.assertIn(heap_memory_ref,xrange(350,415+6*strMulFac))
2938         ff0.loadArrays() ##
2939         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
2940         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2941         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2942         ff0.loadArrays() ##
2943         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2944         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2945         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2946         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2947         ff0.loadArrays() ##
2948         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2949         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2950         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2951         ff0.loadArraysIfNecessary() ##
2952         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
2953         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2954         heap_memory_ref=ff0.getHeapMemorySize()
2955         self.assertIn(heap_memory_ref,xrange(1100,1215+2*strMulFac))
2956         ff0.unloadArrays()
2957         hmd=ff0.getHeapMemorySize()-heap_memory_ref
2958         self.assertEqual(hmd,-800) # -50*8*2
2959         ff0.loadArrays() ##
2960         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
2961         #
2962         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
2963         heap_memory_ref=ff0.getHeapMemorySize()
2964         self.assertIn(heap_memory_ref,xrange(299,415+6*strMulFac))
2965         ff0.loadArrays() ##
2966         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2967         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2968         #
2969         fieldName="FieldCellMultiTS"
2970         ff0=MEDFileFieldMultiTS()
2971         for t in xrange(20):
2972             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)
2973             f0.setTime(float(t)+0.1,t,100+t)
2974             f0.checkCoherency()
2975             ff0.appendFieldNoProfileSBT(f0)
2976             pass
2977         ff0.write(fname,0)
2978         #
2979         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
2980         heap_memory_ref=ff0.getHeapMemorySize()
2981         self.assertIn(heap_memory_ref,xrange(5536,5956+(80+26)*strMulFac))
2982         ff0.loadArrays()
2983         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
2984         del ff0
2985         #
2986         ffs=MEDFileFields(fname,False)
2987         heap_memory_ref=ffs.getHeapMemorySize()
2988         self.assertIn(heap_memory_ref,xrange(5335,6687+(80+50)*strMulFac))
2989         ffs.loadArrays()
2990         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
2991         pass
2992
2993     def testMEDFileMeshReadSelector1(self):
2994         mrs=MEDFileMeshReadSelector()
2995         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
2996         mrs.__str__() ; mrs.__repr__()
2997         #
2998         mrs=MEDFileMeshReadSelector(0)
2999         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())
3000         mrs=MEDFileMeshReadSelector(1)
3001         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3002         mrs=MEDFileMeshReadSelector(2)
3003         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3004         mrs=MEDFileMeshReadSelector(3)
3005         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3006         mrs=MEDFileMeshReadSelector(4)
3007         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3008         mrs=MEDFileMeshReadSelector(5)
3009         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3010         mrs=MEDFileMeshReadSelector(6)
3011         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3012         mrs=MEDFileMeshReadSelector(7)
3013         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3014         mrs=MEDFileMeshReadSelector(8)
3015         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3016         mrs=MEDFileMeshReadSelector(9)
3017         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3018         mrs=MEDFileMeshReadSelector(10)
3019         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3020         mrs=MEDFileMeshReadSelector(11)
3021         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3022         mrs=MEDFileMeshReadSelector(12)
3023         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3024         mrs=MEDFileMeshReadSelector(13)
3025         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3026         mrs=MEDFileMeshReadSelector(14)
3027         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3028         mrs=MEDFileMeshReadSelector(15)
3029         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3030         mrs=MEDFileMeshReadSelector(16)
3031         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3032         mrs=MEDFileMeshReadSelector(17)
3033         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3034         mrs=MEDFileMeshReadSelector(18)
3035         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3036         mrs=MEDFileMeshReadSelector(19)
3037         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3038         mrs=MEDFileMeshReadSelector(20)
3039         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3040         mrs=MEDFileMeshReadSelector(21)
3041         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3042         mrs=MEDFileMeshReadSelector(22)
3043         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3044         mrs=MEDFileMeshReadSelector(23)
3045         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3046         mrs=MEDFileMeshReadSelector(24)
3047         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3048         mrs=MEDFileMeshReadSelector(25)
3049         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3050         mrs=MEDFileMeshReadSelector(26)
3051         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3052         mrs=MEDFileMeshReadSelector(27)
3053         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3054         mrs=MEDFileMeshReadSelector(28)
3055         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3056         mrs=MEDFileMeshReadSelector(29)
3057         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3058         mrs=MEDFileMeshReadSelector(30)
3059         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3060         mrs=MEDFileMeshReadSelector(31)
3061         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3062         mrs=MEDFileMeshReadSelector(32)
3063         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3064         mrs=MEDFileMeshReadSelector(33)
3065         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3066         mrs=MEDFileMeshReadSelector(34)
3067         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3068         mrs=MEDFileMeshReadSelector(35)
3069         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3070         mrs=MEDFileMeshReadSelector(36)
3071         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3072         mrs=MEDFileMeshReadSelector(37)
3073         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3074         mrs=MEDFileMeshReadSelector(38)
3075         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3076         mrs=MEDFileMeshReadSelector(39)
3077         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3078         mrs=MEDFileMeshReadSelector(40)
3079         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3080         mrs=MEDFileMeshReadSelector(41)
3081         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3082         mrs=MEDFileMeshReadSelector(42)
3083         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3084         mrs=MEDFileMeshReadSelector(43)
3085         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3086         mrs=MEDFileMeshReadSelector(44)
3087         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3088         mrs=MEDFileMeshReadSelector(45)
3089         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3090         mrs=MEDFileMeshReadSelector(46)
3091         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3092         mrs=MEDFileMeshReadSelector(47)
3093         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3094         mrs=MEDFileMeshReadSelector(48)
3095         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3096         mrs=MEDFileMeshReadSelector(49)
3097         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3098         mrs=MEDFileMeshReadSelector(50)
3099         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3100         mrs=MEDFileMeshReadSelector(51)
3101         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3102         mrs=MEDFileMeshReadSelector(52)
3103         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3104         mrs=MEDFileMeshReadSelector(53)
3105         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3106         mrs=MEDFileMeshReadSelector(54)
3107         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3108         mrs=MEDFileMeshReadSelector(55)
3109         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3110         mrs=MEDFileMeshReadSelector(56)
3111         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3112         mrs=MEDFileMeshReadSelector(57)
3113         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3114         mrs=MEDFileMeshReadSelector(58)
3115         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3116         mrs=MEDFileMeshReadSelector(59)
3117         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3118         mrs=MEDFileMeshReadSelector(60)
3119         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3120         mrs=MEDFileMeshReadSelector(61)
3121         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3122         mrs=MEDFileMeshReadSelector(62)
3123         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3124         mrs=MEDFileMeshReadSelector(63)
3125         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3126         #
3127         mrs=MEDFileMeshReadSelector(63)
3128         mrs.setCellFamilyFieldReading(False)
3129         self.assertEqual(mrs.getCode(),62)
3130         mrs.setCellFamilyFieldReading(True)
3131         self.assertEqual(mrs.getCode(),63)
3132         mrs.setNodeFamilyFieldReading(False)
3133         self.assertEqual(mrs.getCode(),61)
3134         mrs.setNodeFamilyFieldReading(True)
3135         self.assertEqual(mrs.getCode(),63)
3136         mrs.setCellNameFieldReading(False)
3137         self.assertEqual(mrs.getCode(),59)
3138         mrs.setCellNameFieldReading(True)
3139         self.assertEqual(mrs.getCode(),63)
3140         mrs.setNodeNameFieldReading(False)
3141         self.assertEqual(mrs.getCode(),55)
3142         mrs.setNodeNameFieldReading(True)
3143         self.assertEqual(mrs.getCode(),63)
3144         mrs.setCellNumFieldReading(False)
3145         self.assertEqual(mrs.getCode(),47)
3146         mrs.setCellNumFieldReading(True)
3147         self.assertEqual(mrs.getCode(),63)
3148         mrs.setNodeNumFieldReading(False)
3149         self.assertEqual(mrs.getCode(),31)
3150         mrs.setNodeNumFieldReading(True)
3151         self.assertEqual(mrs.getCode(),63)
3152         pass
3153     
3154     def testPartialReadOfMeshes(self):
3155         fname="Pyfile70.med"
3156         # building a mesh containing 4 tri3 + 5 quad4
3157         tri=MEDCouplingUMesh("tri",2)
3158         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3159         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3160         tris=[tri.deepCpy() for i in xrange(4)]
3161         for i,elt in enumerate(tris): elt.translate([i,0])
3162         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3163         quad=MEDCouplingUMesh("quad",2)
3164         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3165         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3166         quads=[quad.deepCpy() for i in xrange(5)]
3167         for i,elt in enumerate(quads): elt.translate([5+i,0])
3168         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3169         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3170         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3171         m1=m.buildDescendingConnectivity()[0]
3172         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3173         #
3174         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3175         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3176         mm.setGroupsAtLevel(0,[grp0,grp1])
3177         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3178         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3179         mm.setGroupsAtLevel(-1,[grp2,grp3])
3180         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3181         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3182         mm.setGroupsAtLevel(1,[grp4,grp5])
3183         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3184         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3185         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3186         #
3187         mm.write(fname,2)
3188         ##
3189         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3190         b4_ref_heap_mem=mm.getHeapMemorySize()
3191         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3192         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3193         ref_heap_mem=mm.getHeapMemorySize()
3194         # check the gain of memory using 1GTUMesh instead of UMesh
3195         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
3196         #
3197         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3198         self.assertEqual(len(mm.getGroupsNames()),0)
3199         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3200         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3201         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3202         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3203         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3204         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3205         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3206         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3207         delta1=ref_heap_mem-mm.getHeapMemorySize()
3208         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3209         #
3210         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3211         self.assertEqual(len(mm.getGroupsNames()),6)
3212         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3213         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3214         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3215         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3216         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3217         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3218         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3219         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3220         delta2=ref_heap_mem-mm.getHeapMemorySize()
3221         self.assertTrue(delta2<delta1)
3222         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3223         #
3224         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3225         self.assertEqual(len(mm.getGroupsNames()),6)
3226         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3227         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3228         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3229         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3230         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3231         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3232         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3233         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3234         delta3=ref_heap_mem-mm.getHeapMemorySize()
3235         self.assertTrue(delta3<delta2)
3236         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3237         #
3238         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3239         self.assertEqual(len(mm.getGroupsNames()),6)
3240         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3241         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3242         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3243         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3244         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3245         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3246         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3247         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3248         delta4=ref_heap_mem-mm.getHeapMemorySize()
3249         self.assertTrue(delta4<delta3)
3250         self.assertTrue(delta4>=32*4*2)
3251         #
3252         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3253         self.assertEqual(len(mm.getGroupsNames()),6)
3254         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3255         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3256         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3257         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3258         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3259         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3260         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3261         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3262         delta5=ref_heap_mem-mm.getHeapMemorySize()
3263         self.assertTrue(delta5<delta4)
3264         self.assertEqual(delta5,0)
3265         pass
3266
3267     # this test checks that setFieldProfile perform a check of the array length
3268     # compared to the profile length. This test also checks that mesh attribute of field
3269     # is not used by setFieldProfile (because across this test mesh is equal to None)
3270     def testCheckCompatibilityPfl1(self):
3271         # building a mesh containing 4 tri3 + 5 quad4
3272         tri=MEDCouplingUMesh("tri",2)
3273         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3274         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3275         tris=[tri.deepCpy() for i in xrange(4)]
3276         for i,elt in enumerate(tris): elt.translate([i,0])
3277         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3278         quad=MEDCouplingUMesh("quad",2)
3279         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3280         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3281         quads=[quad.deepCpy() for i in xrange(5)]
3282         for i,elt in enumerate(quads): elt.translate([5+i,0])
3283         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3284         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3285         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3286         m1=m.buildDescendingConnectivity()[0]
3287         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3288         #
3289         f1ts=MEDFileField1TS()
3290         f=MEDCouplingFieldDouble(ON_NODES)
3291         vals=DataArrayDouble(7) ; vals.iota(1000)
3292         f.setArray(vals)
3293         f.setName("anonymous") # f has no mesh it is not a bug
3294         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3295         f1ts.setFieldProfile(f,mm,0,pfl)
3296         #
3297         f1ts=MEDFileField1TS()
3298         f=MEDCouplingFieldDouble(ON_NODES)
3299         vals=DataArrayDouble(8) ; vals.iota(1000)
3300         f.setArray(vals)
3301         f.setName("anonymous") # f has no mesh it is not a bug
3302         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3303         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3304         #
3305         f1ts=MEDFileField1TS()
3306         f=MEDCouplingFieldDouble(ON_CELLS)
3307         vals=DataArrayDouble(7) ; vals.iota(1000)
3308         f.setArray(vals)
3309         f.setName("anonymous") # f has no mesh it is not a bug
3310         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3311         f1ts.setFieldProfile(f,mm,0,pfl)
3312         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3313         #
3314         f1ts=MEDFileField1TS()
3315         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3316         vals=DataArrayDouble(27) ; vals.iota(1000)
3317         f.setArray(vals)
3318         f.setName("anonymous") # f has no mesh it is not a bug
3319         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3320         f.setMesh(m[pfl])
3321         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])
3322         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3323         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])
3324         f.setMesh(None)
3325         f1ts.setFieldProfile(f,mm,0,pfl)
3326         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3327         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3328         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3329         vals=DataArrayDouble(27) ; vals.iota(1000)
3330         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3331         #
3332         f1ts=MEDFileField1TS()
3333         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3334         vals=DataArrayDouble(25) ; vals.iota(1000)
3335         f.setArray(vals)
3336         f.setName("anonymous") # f has no mesh it is not a bug
3337         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3338         f1ts.setFieldProfile(f,mm,0,pfl)
3339         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3340         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3341         f.setArray(vals2)
3342         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3343         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3344         #
3345         f1ts=MEDFileField1TS()
3346         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3347         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3348         f.setArray(vals)
3349         f1ts.setFieldProfile(f,mm,0,pfl)
3350         pass
3351     
3352     def testWRMeshWithNoCells(self):
3353         fname="Pyfile71.med"
3354         a=DataArrayDouble(4) ; a.iota()
3355         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3356         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3357         m=MEDFileUMesh()
3358         m.setMeshAtLevel(0,m00)
3359         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3360         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3361         m.write(fname,2)
3362         del m,a,c,m0,m00
3363         #
3364         m=MEDFileMesh.New(fname)
3365         self.assertEqual((),m.getNonEmptyLevels())
3366         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))
3367         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3368         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3369         pass
3370
3371     #@unittest.skipUnless(False,"requires Vadim's green light")
3372     def testWRQPolyg1(self):
3373         fname="Pyfile72.med"
3374         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3375         m.insertNextCell([0,2,1,3])
3376         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3377         #
3378         ms=[m.deepCpy() for i in xrange(4)]
3379         for i,elt in enumerate(ms):
3380             elt.translate([float(i)*1.5,0.])
3381             pass
3382         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3383         m0.convertAllToPoly()
3384         #
3385         ms=[m.deepCpy() for i in xrange(5)]
3386         for i,elt in enumerate(ms):
3387             elt.translate([float(i)*1.5,1.5])
3388             pass
3389         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3390         m1.convertAllToPoly()
3391         m1.convertLinearCellsToQuadratic()
3392         #
3393         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3394         ##
3395         mm=MEDFileUMesh()
3396         mm.setMeshAtLevel(0,m)
3397         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3398         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3399         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3400         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3401         ##
3402         mm.write(fname,2)
3403         del mm
3404         #
3405         mm_read=MEDFileUMesh(fname)
3406         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3407         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3408         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3409         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3410         ##
3411         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3412         f.setMesh(m)
3413         arr0=DataArrayDouble(9) ; arr0.iota()
3414         arr1=DataArrayDouble(9) ; arr1.iota(100)
3415         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3416         f.setArray(arr) ; f.checkCoherency()
3417         f.setTime(5.6,1,2)
3418         ff=MEDFileField1TS()
3419         ff.setFieldNoProfileSBT(f)
3420         ff.write(fname,0)
3421         ##
3422         ff_read=MEDFileField1TS(fname)
3423         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3424         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3425         pass
3426
3427     def testLoadIfNecessaryOnFromScratchFields0(self):
3428         """
3429         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3430         """
3431         fname="Pyfile77.med"
3432         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3433         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3434         m.allocateCells()
3435         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3436         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3437         m.finishInsertingCells()
3438         #
3439         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3440         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3441         fs=MEDFileFields()
3442         arrs=4*[None]
3443         #
3444         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3445         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3446         f0.setTime(1.1,1,1)
3447         f0.setName("myELNOField")
3448         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3449         f0.setArray(arrs[0])
3450         ff0.appendFieldNoProfileSBT(f0)
3451         #
3452         f0.setTime(2.2,2,1)
3453         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3454         f0.setArray(arrs[1])
3455         ff0.appendFieldNoProfileSBT(f0)
3456         #
3457         f0.setTime(3.3,3,1)
3458         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3459         f0.setArray(arrs[2])
3460         ff0.appendFieldNoProfileSBT(f0)
3461         #
3462         f0.setTime(4.4,4,1)
3463         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3464         f0.setArray(arrs[3])
3465         ff0.appendFieldNoProfileSBT(f0)
3466         #
3467         for i,arr in enumerate(arrs):
3468             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3469             fs[0][i].loadArraysIfNecessary()
3470             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3471             pass
3472         fs.loadArraysIfNecessary()
3473         for i,arr in enumerate(arrs):
3474             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3475             pass
3476         fs[0].loadArraysIfNecessary()
3477         for i,arr in enumerate(arrs):
3478             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3479             pass
3480         pass
3481     
3482     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3483         """ 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.
3484         """
3485         fname="Pyfile78.med"
3486         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)
3487         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3488         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3489         m0.allocateCells()
3490         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
3491             m0.insertNextCell(NORM_TETRA4,elt)
3492             pass
3493         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
3494             m0.insertNextCell(NORM_PYRA5,elt)
3495             pass
3496         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
3497             m0.insertNextCell(NORM_PENTA6,elt)
3498             pass
3499         m0.checkCoherency2()
3500         m1=MEDCouplingUMesh(); m1.setName("mesh")
3501         m1.setMeshDimension(2);
3502         m1.allocateCells(5);
3503         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3504         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3505         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3506         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3507         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3508         m1.setCoords(coords);
3509         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3510         m3.allocateCells()
3511         m3.insertNextCell(NORM_POINT1,[2])
3512         m3.insertNextCell(NORM_POINT1,[3])
3513         m3.insertNextCell(NORM_POINT1,[4])
3514         m3.insertNextCell(NORM_POINT1,[5])
3515         #
3516         mm=MEDFileUMesh()
3517         mm.setMeshAtLevel(0,m0)
3518         mm.setMeshAtLevel(-1,m1)
3519         mm.setMeshAtLevel(-3,m3)
3520         mm.write(fname,2)
3521         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3522         mm=MEDFileMesh.New(fname)
3523         fs=MEDFileFields()
3524         fmts=MEDFileFieldMultiTS()
3525         f1ts=MEDFileField1TS()
3526         for lev in mm.getNonEmptyLevels():
3527             for gt in mm.getGeoTypesAtLevel(lev):
3528                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3529                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3530                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3531                 f.setArray(arr) ; f.setName("f0")
3532                 f1ts.setFieldNoProfileSBT(f)
3533                 pass
3534             pass
3535         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3536         for lev in [0,-1,-3]:
3537             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3538             pass
3539         fmts.pushBackTimeStep(f1ts)
3540         fs.pushField(fmts)
3541         fs.write(fname,0)
3542         del fs,fmts,f1ts
3543         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3544         fs=MEDFileFields(fname)
3545         self.assertEqual(len(fs),1)
3546         self.assertEqual(len(fs[0]),1)
3547         f1ts=fs[0][0]
3548         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),'','')])])
3549         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))
3550         pass
3551
3552     def testMEDFileUMeshSetName(self):
3553         """ 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.
3554         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3555         """
3556         fname="Pyfile79.med"
3557         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3558         mm=MEDFileUMesh()
3559         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3560         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)
3561         m0.allocateCells(5);
3562         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3563         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3564         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3565         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3566         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3567         m0.setCoords(coords);
3568         mm.setMeshAtLevel(0,m0)
3569         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3570         m2.allocateCells()
3571         m2.insertNextCell(NORM_POINT1,[2])
3572         m2.insertNextCell(NORM_POINT1,[3])
3573         m2.insertNextCell(NORM_POINT1,[4])
3574         m2.insertNextCell(NORM_POINT1,[5])
3575         mm.setMeshAtLevel(-2,m2)
3576         self.assertEqual(mm.getName(),"")
3577         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3578         mm.forceComputationOfParts()
3579         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3580         mm.setName("abc")
3581         self.assertEqual(mm.getName(),"abc")
3582         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3583         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3584         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3585         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3586         pass
3587
3588     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3589         fileName="Pyfile80.med"
3590         m=MEDCouplingCMesh() ; m.setName("cmesh")
3591         arr=DataArrayDouble(6) ; arr.iota()
3592         m.setCoords(arr,arr)
3593         nbCells=m.getNumberOfCells()
3594         self.assertEqual(25,nbCells)
3595         f=MEDCouplingFieldDouble(ON_CELLS)
3596         f.setName("FieldOnCell") ; f.setMesh(m)
3597         arr=DataArrayDouble(nbCells) ; arr.iota()
3598         mm=MEDFileCMesh()
3599         mm.setMesh(m)
3600         #
3601         fmts=MEDFileFieldMultiTS()
3602         #
3603         for i in xrange(nbCells):
3604             t=(float(i)+0.1,i+1,-i-2)
3605             f.setTime(*t)
3606             arr2=DataArrayDouble(nbCells)
3607             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3608             arr2[perm]=arr
3609             f.setArray(arr2)
3610             f1ts=MEDFileField1TS()
3611             f1ts.setFieldNoProfileSBT(f)
3612             fmts.pushBackTimeStep(f1ts)
3613             pass
3614         fmts.unloadArraysWithoutDataLoss()
3615         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3616         fs=MEDFileFields() ; fs.pushField(fmts)
3617         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3618         fs.unloadArraysWithoutDataLoss()
3619         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3620         f1ts=fs[0][0]
3621         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3622         f1ts.unloadArraysWithoutDataLoss()
3623         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3624         mm.write(fileName,2)
3625         fs.write(fileName,0)
3626         del m,fmts,mm,f,f1ts
3627         ##
3628         mm=MEDFileMesh.New(fileName)
3629         fmts=MEDFileFieldMultiTS(fileName)
3630         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3631         fmts.unloadArraysWithoutDataLoss()
3632         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3633         fmts.loadArraysIfNecessary()
3634         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3635         del mm,fmts
3636         fs=MEDFileFields(fileName)
3637         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3638         fs.unloadArraysWithoutDataLoss()
3639         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3640         fs.loadArraysIfNecessary()
3641         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3642         del fs
3643         f1ts=MEDFileField1TS(fileName)
3644         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3645         f1ts.unloadArraysWithoutDataLoss()
3646         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3647         f1ts.loadArraysIfNecessary()
3648         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3649         pass
3650
3651     def testMEDFileUMeshLoadPart1(self):
3652         """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specfied using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
3653         memory of the returned instance.
3654         """
3655         fileName="Pyfile81.med"
3656         arr=DataArrayDouble(6) ; arr.iota()
3657         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3658         m=m.buildUnstructured()
3659         m.setName("Mesh")
3660         m.changeSpaceDimension(3,0.)
3661         infos=["aa [b]","cc [de]","gg [klm]"]
3662         m.getCoords().setInfoOnComponents(infos)
3663         m.checkCoherency2()
3664         mm=MEDFileUMesh()
3665         mm.setMeshAtLevel(0,m)
3666         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3667         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3668         mm.setMeshAtLevel(-1,m1)
3669         renum0=DataArrayInt([3,6,7,10,11,0,2,1,9,8,5,4,12,13,14,24,23,22,21,20,19,18,17,16,15])
3670         famField0=DataArrayInt([-3,-6,-7,-10,-11,0,-2,-1,-9,-8,-5,-4,-12,-13,-14,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15])
3671         namesCellL0=DataArrayAsciiChar(25,16)
3672         namesCellL0[:]=["Cell#%.3d        "%(i) for i in xrange(25)]
3673         renumM1=DataArrayInt([3,4,0,2,1])
3674         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3675         mm.setRenumFieldArr(0,renum0)
3676         mm.setFamilyFieldArr(0,famField0)
3677         mm.setNameFieldAtLevel(0,namesCellL0)
3678         mm.setRenumFieldArr(-1,renumM1)
3679         mm.setFamilyFieldArr(-1,famFieldM1)
3680         renum1=DataArrayInt([13,16,17,20,21,10,12,11,19,18,15,14,22,23,24,34,33,32,31,30,29,28,27,26,25,45,44,43,42,41,40,39,38,37,36,35])
3681         famField1=DataArrayInt([-13,-16,-17,-20,-21,-10,-12,-11,-19,-18,-15,-14,-22,-23,-24,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35])
3682         namesNodes=DataArrayAsciiChar(36,16)
3683         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(36)]
3684         mm.setRenumFieldArr(1,renum1)
3685         mm.setFamilyFieldArr(1,famField1)
3686         mm.setNameFieldAtLevel(1,namesNodes)
3687         mm.setFamilyId("Fam7",77)
3688         mm.setFamilyId("Fam8",88)
3689         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3690         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3691         mm.write(fileName,2)
3692         #
3693         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3694         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3695         self.assertTrue(mm0.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
3696         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
3697         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3698         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3699         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3700         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3701         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3702         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3703         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3704         #
3705         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3706         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3707         self.assertTrue(mm1.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,6,5,11,12,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,12,11,17,18,13,12,18,19,14,13,19,20,15,14,20,21,16,15,21,22])))
3708         coo=DataArrayDouble([(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(5,3,0),(0,4,0),(1,4,0),(2,4,0),(3,4,0),(4,4,0),(5,4,0),(0,5,0),(1,5,0),(2,5,0),(3,5,0),(4,5,0),(5,5,0)]) ; coo.setInfoOnComponents(infos)
3709         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3710         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3711         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3712         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3713         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3714         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3715         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3716         #
3717         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3718         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3719         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3720         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3721         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3722         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3723         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3724         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3725         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
3726         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3727         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
3728         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3729         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3730         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3731         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3732         pass
3733
3734     def testMEDFileFieldsLoadPart1(self):
3735         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3736         """
3737         fileName="Pyfile82.med"
3738         meshName="Mesh"
3739         compos=["aa [kg]","bbb [m/s]"]
3740         arr=DataArrayDouble(6) ; arr.iota()
3741         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3742         m=m.buildUnstructured()
3743         m.setName(meshName)
3744         m.changeSpaceDimension(3,0.)
3745         infos=["aa [b]","cc [de]","gg [klm]"]
3746         m.getCoords().setInfoOnComponents(infos)
3747         m.checkCoherency2()
3748         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3749         f.setName("Field")
3750         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3751         arr[:,0]=range(25)
3752         arr[:,1]=range(100,125)
3753         f.setArray(arr)
3754         MEDLoader.WriteField(fileName,f,2)
3755         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3756         f.setName("FieldNode")
3757         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3758         arr[:,0]=range(200,236)
3759         arr[:,1]=range(300,336)
3760         f.setArray(arr)
3761         f.checkCoherency()
3762         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3763         #
3764         ms=MEDFileMeshes()
3765         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3766         ms.pushMesh(mm)
3767         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3768         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3769         #
3770         ms=MEDFileMeshes()
3771         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3772         ms.pushMesh(mm)
3773         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3774         fs=fs.deepCpy()
3775         fs[0][0].loadArrays()
3776         arr=DataArrayDouble(12,2) ; arr[:,0]=range(3,15) ; arr[:,1]=range(103,115)
3777         arr.setInfoOnComponents(compos)
3778         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3779         fs[1][0].loadArrays()
3780         arr=DataArrayDouble(21,2) ; arr[:,0]=range(203,224) ; arr[:,1]=range(303,324)
3781         arr.setInfoOnComponents(compos)
3782         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3783         pass
3784
3785     def testMEDFileWithoutCells1(self):
3786         fileName="Pyfile83.med"
3787         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3788         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3789         mm=MEDFileUMesh()
3790         mm.setCoords(coo)
3791         mm.setName("mesh")
3792         mm.write(fileName,2)
3793         #
3794         mm=MEDFileMesh.New(fileName)
3795         self.assertEqual(mm.getName(),"mesh")
3796         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3797         pass
3798
3799     def testZipCoordsWithLoadPart1(self):
3800         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3801         """
3802         fileName="Pyfile84.med"
3803         meshName="Mesh"
3804         compos=["aa [kg]","bbb [m/s]"]
3805         arr=DataArrayDouble(6) ; arr.iota()
3806         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3807         m=m.buildUnstructured()
3808         m.setName(meshName)
3809         m.changeSpaceDimension(3,0.)
3810         infos=["aa [b]","cc [de]","gg [klm]"]
3811         m.getCoords().setInfoOnComponents(infos)
3812         m.checkCoherency2()
3813         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3814         f.setName("Field")
3815         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3816         arr[:,0]=range(25)
3817         arr[:,1]=range(100,125)
3818         f.setArray(arr)
3819         MEDLoader.WriteField(fileName,f,2)
3820         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3821         f.setName("FieldNode")
3822         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3823         arr[:,0]=range(200,236)
3824         arr[:,1]=range(300,336)
3825         f.setArray(arr)
3826         f.checkCoherency()
3827         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3828         #
3829         ms=MEDFileMeshes()
3830         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3831         ms.pushMesh(mm)
3832         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3833         self.assertEqual(spd.getSlice(),slice(4,6,1))
3834         spd=mm.getPartDefAtLevel(1)
3835         self.assertEqual(spd.getSlice(),slice(4,14,1))
3836         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3837         mm.zipCoords() # <- The important line is here !
3838         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3839         self.assertEqual(spd.getSlice(),slice(4,6,1))
3840         spd=mm.getPartDefAtLevel(1)
3841         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3842         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3843         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3844         fs[0][0].loadArrays()
3845         arr=DataArrayDouble([(4,104),(5,105)])
3846         arr.setInfoOnComponents(compos)
3847         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3848         fs[1][0].loadArrays()
3849         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
3850         arr.setInfoOnComponents(compos)
3851         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3852         pass
3853
3854     def testMEDFileCMeshSetGroupsAtLevel(self):
3855         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
3856         """
3857         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
3858         m.setName("Mesh")
3859         mm=MEDFileCMesh() ; mm.setMesh(m)
3860         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
3861         mm.setGroupsAtLevel(0,[grp])
3862         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
3863         pass
3864
3865     def testMEDFileUMeshBuildExtrudedMesh1(self):
3866         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
3867         fileName="Pyfile85.med"
3868         meshName2D="Mesh"
3869         meshName1D="Mesh1D"
3870         meshName3DOut="Mesh3D"
3871         #
3872         d1=DataArrayInt([0,4,20,24])
3873         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
3874         #
3875         a=DataArrayDouble(6) ; a.iota()
3876         m=MEDCouplingCMesh() ; m.setCoords(a,a)
3877         m=m.buildUnstructured()
3878         d1c=d1.buildComplement(m.getNumberOfCells())
3879         m=m[d1c] ; m.zipCoords()
3880         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
3881         m0.simplexize(0)
3882         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
3883         m.setName(meshName2D)
3884         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
3885         e=d.deltaShiftIndex().getIdsEqual(1)
3886         #
3887         mm=MEDFileUMesh()
3888         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
3889         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
3890         mm.setGroupsAtLevel(0,[grp0])
3891         grp1=e ; grp1.setName("grp1")
3892         mm.setGroupsAtLevel(-1,[grp1])
3893         mm.write(fileName,2)
3894         #
3895         a=DataArrayDouble(3) ; a.iota()
3896         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
3897         tmp.setName(meshName1D)
3898         tmp.changeSpaceDimension(3)
3899         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
3900         mm1D=MEDFileUMesh()
3901         mm1D.setMeshAtLevel(0,tmp)
3902         mm1D.write(fileName,0)
3903         # test is here !
3904         mm2D=MEDFileMesh.New(fileName,meshName2D)
3905         mm1D=MEDFileMesh.New(fileName,meshName1D)
3906         m1D=mm1D.getMeshAtLevel(0)
3907         mm3D=mm2D.buildExtrudedMesh(m1D,0)
3908         #
3909         self.assertEqual(mm3D.getName(),mm2D.getName())
3910         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
3911         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
3912         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
3913         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
3914         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
3915         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
3916         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
3917         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
3918         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
3919         d=DataArrayDouble([(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(4.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(4.,1.,0.),(5.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(4.,2.,0.),(5.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.),(4.,3.,0.),(5.,3.,0.),(0.,4.,0.),(1.,4.,0.),(2.,4.,0.),(3.,4.,0.),(4.,4.,0.),(5.,4.,0.),(1.,5.,0.),(2.,5.,0.),(3.,5.,0.),(4.,5.,0.),(1.,0.,1.),(2.,0.,1.),(3.,0.,1.),(4.,0.,1.),(0.,1.,1.),(1.,1.,1.),(2.,1.,1.),(3.,1.,1.),(4.,1.,1.),(5.,1.,1.),(0.,2.,1.),(1.,2.,1.),(2.,2.,1.),(3.,2.,1.),(4.,2.,1.),(5.,2.,1.),(0.,3.,1.),(1.,3.,1.),(2.,3.,1.),(3.,3.,1.),(4.,3.,1.),(5.,3.,1.),(0.,4.,1.),(1.,4.,1.),(2.,4.,1.),(3.,4.,1.),(4.,4.,1.),(5.,4.,1.),(1.,5.,1.),(2.,5.,1.),(3.,5.,1.),(4.,5.,1.),(1.,0.,2.),(2.,0.,2.),(3.,0.,2.),(4.,0.,2.),(0.,1.,2.),(1.,1.,2.),(2.,1.,2.),(3.,1.,2.),(4.,1.,2.),(5.,1.,2.),(0.,2.,2.),(1.,2.,2.),(2.,2.,2.),(3.,2.,2.),(4.,2.,2.),(5.,2.,2.),(0.,3.,2.),(1.,3.,2.),(2.,3.,2.),(3.,3.,2.),(4.,3.,2.),(5.,3.,2.),(0.,4.,2.),(1.,4.,2.),(2.,4.,2.),(3.,4.,2.),(4.,4.,2.),(5.,4.,2.),(1.,5.,2.),(2.,5.,2.),(3.,5.,2.),(4.,5.,2.)])
3920         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
3921         d=DataArrayInt([16,1,0,5,33,32,37,16,1,5,6,33,37,38,16,2,1,6,34,33,38,16,2,6,7,34,38,39,16,3,2,7,35,34,39,16,3,7,8,35,39,40,16,5,4,10,37,36,42,16,5,10,11,37,42,43,16,9,8,14,41,40,46,16,9,14,15,41,46,47,16,11,10,16,43,42,48,16,11,16,17,43,48,49,16,15,14,20,47,46,52,16,15,20,21,47,52,53,16,17,16,22,49,48,54,16,17,22,23,49,54,55,16,21,20,26,53,52,58,16,21,26,27,53,58,59,16,24,23,28,56,55,60,16,24,28,29,56,60,61,16,25,24,29,57,56,61,16,25,29,30,57,61,62,16,26,25,30,58,57,62,16,26,30,31,58,62,63,16,33,32,37,65,64,69,16,33,37,38,65,69,70,16,34,33,38,66,65,70,16,34,38,39,66,70,71,16,35,34,39,67,66,71,16,35,39,40,67,71,72,16,37,36,42,69,68,74,16,37,42,43,69,74,75,16,41,40,46,73,72,78,16,41,46,47,73,78,79,16,43,42,48,75,74,80,16,43,48,49,75,80,81,16,47,46,52,79,78,84,16,47,52,53,79,84,85,16,49,48,54,81,80,86,16,49,54,55,81,86,87,16,53,52,58,85,84,90,16,53,58,59,85,90,91,16,56,55,60,88,87,92,16,56,60,61,88,92,93,16,57,56,61,89,88,93,16,57,61,62,89,93,94,16,58,57,62,90,89,94,16,58,62,63,90,94,95,18,6,5,11,12,38,37,43,44,18,7,6,12,13,39,38,44,45,18,8,7,13,14,40,39,45,46,18,12,11,17,18,44,43,49,50,18,13,12,18,19,45,44,50,51,18,14,13,19,20,46,45,51,52,18,18,17,23,24,50,49,55,56,18,19,18,24,25,51,50,56,57,18,20,19,25,26,52,51,57,58,18,38,37,43,44,70,69,75,76,18,39,38,44,45,71,70,76,77,18,40,39,45,46,72,71,77,78,18,44,43,49,50,76,75,81,82,18,45,44,50,51,77,76,82,83,18,46,45,51,52,78,77,83,84,18,50,49,55,56,82,81,87,88,18,51,50,56,57,83,82,88,89,18,52,51,57,58,84,83,89,90])
3922         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
3923         d=DataArrayInt([0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,345,354,363,372,381,390,399,408,417,426,435,444,453,462,471,480,489,498])
3924         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
3925         d=DataArrayInt([3,1,0,5,3,1,5,6,3,2,1,6,3,2,6,7,3,3,2,7,3,3,7,8,3,5,4,10,3,5,10,11,3,9,8,14,3,9,14,15,3,11,10,16,3,11,16,17,3,15,14,20,3,15,20,21,3,17,16,22,3,17,22,23,3,21,20,26,3,21,26,27,3,24,23,28,3,24,28,29,3,25,24,29,3,25,29,30,3,26,25,30,3,26,30,31,3,65,64,69,3,65,69,70,3,66,65,70,3,66,70,71,3,67,66,71,3,67,71,72,3,69,68,74,3,69,74,75,3,73,72,78,3,73,78,79,3,75,74,80,3,75,80,81,3,79,78,84,3,79,84,85,3,81,80,86,3,81,86,87,3,85,84,90,3,85,90,91,3,88,87,92,3,88,92,93,3,89,88,93,3,89,93,94,3,90,89,94,3,90,94,95,4,1,0,32,33,4,0,5,37,32,4,5,1,33,37,4,5,6,38,37,4,6,1,33,38,4,2,1,33,34,4,6,2,34,38,4,6,7,39,38,4,7,2,34,39,4,3,2,34,35,4,7,3,35,39,4,7,8,40,39,4,8,3,35,40,4,5,4,36,37,4,4,10,42,36,4,10,5,37,42,4,10,11,43,42,4,11,5,37,43,4,9,8,40,41,4,8,14,46,40,4,14,9,41,46,4,14,15,47,46,4,15,9,41,47,4,10,16,48,42,4,16,11,43,48,4,16,17,49,48,4,17,11,43,49,4,14,20,52,46,4,20,15,47,52,4,20,21,53,52,4,21,15,47,53,4,16,22,54,48,4,22,17,49,54,4,22,23,55,54,4,23,17,49,55,4,20,26,58,52,4,26,21,53,58,4,26,27,59,58,4,27,21,53,59,4,24,23,55,56,4,23,28,60,55,4,28,24,56,60,4,28,29,61,60,4,29,24,56,61,4,25,24,56,57,4,29,25,57,61,4,29,30,62,61,4,30,25,57,62,4,26,25,57,58,4,30,26,58,62,4,30,31,63,62,4,31,26,58,63,4,11,12,44,43,4,12,6,38,44,4,12,13,45,44,4,13,7,39,45,4,13,14,46,45,4,17,18,50,49,4,18,12,44,50,4,18,19,51,50,4,19,13,45,51,4,19,20,52,51,4,24,18,50,56,4,25,19,51,57,4,33,32,64,65,4,32,37,69,64,4,37,33,65,69,4,37,38,70,69,4,38,33,65,70,4,34,33,65,66,4,38,34,66,70,4,38,39,71,70,4,39,34,66,71,4,35,34,66,67,4,39,35,67,71,4,39,40,72,71,4,40,35,67,72,4,37,36,68,69,4,36,42,74,68,4,42,37,69,74,4,42,43,75,74,4,43,37,69,75,4,41,40,72,73,4,40,46,78,72,4,46,41,73,78,4,46,47,79,78,4,47,41,73,79,4,42,48,80,74,4,48,43,75,80,4,48,49,81,80,4,49,43,75,81,4,46,52,84,78,4,52,47,79,84,4,52,53,85,84,4,53,47,79,85,4,48,54,86,80,4,54,49,81,86,4,54,55,87,86,4,55,49,81,87,4,52,58,90,84,4,58,53,85,90,4,58,59,91,90,4,59,53,85,91,4,56,55,87,88,4,55,60,92,87,4,60,56,88,92,4,60,61,93,92,4,61,56,88,93,4,57,56,88,89,4,61,57,89,93,4,61,62,94,93,4,62,57,89,94,4,58,57,89,90,4,62,58,90,94,4,62,63,95,94,4,63,58,90,95,4,43,44,76,75,4,44,38,70,76,4,44,45,77,76,4,45,39,71,77,4,45,46,78,77,4,49,50,82,81,4,50,44,76,82,4,50,51,83,82,4,51,45,77,83,4,51,52,84,83,4,56,50,82,88,4,57,51,83,89,4,6,5,11,12,4,7,6,12,13,4,8,7,13,14,4,12,11,17,18,4,13,12,18,19,4,14,13,19,20,4,18,17,23,24,4,19,18,24,25,4,20,19,25,26,4,70,69,75,76,4,71,70,76,77,4,72,71,77,78,4,76,75,81,82,4,77,76,82,83,4,78,77,83,84,4,82,81,87,88,4,83,82,88,89,4,84,83,89,90])
3926         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
3927         d=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,792,797,802,807,812,817,822,827,832,837,842,847,852,857,862,867,872,877,882,887,892,897,902,907,912,917,922])
3928         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
3929         d=DataArrayInt([1,1,0,1,0,5,1,5,1,1,5,6,1,6,1,1,2,1,1,6,2,1,6,7,1,7,2,1,3,2,1,7,3,1,7,8,1,8,3,1,5,4,1,4,10,1,10,5,1,10,11,1,11,5,1,9,8,1,8,14,1,14,9,1,14,15,1,15,9,1,10,16,1,16,11,1,16,17,1,17,11,1,14,20,1,20,15,1,20,21,1,21,15,1,16,22,1,22,17,1,22,23,1,23,17,1,20,26,1,26,21,1,26,27,1,27,21,1,24,23,1,23,28,1,28,24,1,28,29,1,29,24,1,25,24,1,29,25,1,29,30,1,30,25,1,26,25,1,30,26,1,30,31,1,31,26,1,11,12,1,12,6,1,12,13,1,13,7,1,13,14,1,17,18,1,18,12,1,18,19,1,19,13,1,19,20,1,24,18,1,25,19,1,65,64,1,64,69,1,69,65,1,69,70,1,70,65,1,66,65,1,70,66,1,70,71,1,71,66,1,67,66,1,71,67,1,71,72,1,72,67,1,69,68,1,68,74,1,74,69,1,74,75,1,75,69,1,73,72,1,72,78,1,78,73,1,78,79,1,79,73,1,74,80,1,80,75,1,80,81,1,81,75,1,78,84,1,84,79,1,84,85,1,85,79,1,80,86,1,86,81,1,86,87,1,87,81,1,84,90,1,90,85,1,90,91,1,91,85,1,88,87,1,87,92,1,92,88,1,92,93,1,93,88,1,89,88,1,93,89,1,93,94,1,94,89,1,90,89,1,94,90,1,94,95,1,95,90,1,75,76,1,76,70,1,76,77,1,77,71,1,77,78,1,81,82,1,82,76,1,82,83,1,83,77,1,83,84,1,88,82,1,89,83])
3930         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
3931         d=DataArrayInt(129) ; d.iota() ; d*=3
3932         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
3933         #
3934         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
3935         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
3936         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
3937         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
3938         self.assertTrue(mm3D.getGroupArr(-2,"grp1").isEqualWithoutConsideringStr(DataArrayInt([0,1,5,9,12,13,14,18,22,23,30,31,33,37,38,40,42,46,50,51])))
3939         self.assertTrue(mm3D.getGroupArr(-2,"grp1_top").isEqualWithoutConsideringStr(DataArrayInt([64,65,69,73,76,77,78,82,86,87,94,95,97,101,102,104,106,110,114,115])))
3940         self.assertTrue(mm3D.getGroupArr(0,"grp0_extruded").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,24,25,26,27,28,29,48,49,50,57,58,59])))
3941         self.assertTrue(mm3D.getGroupArr(-1,"grp1_extruded").isEqualWithoutConsideringStr(DataArrayInt([48,49,53,57,60,61,62,66,70,71,78,79,81,85,86,88,90,94,98,99,112,113,117,121,124,125,126,130,134,135,142,143,145,149,150,152,154,158,162,163])))
3942         mm3D.setName("MeshExtruded")
3943         mm3D.write(fileName,0)
3944         pass
3945
3946     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
3947     def testMEDFileUMeshPickeling1(self):
3948         import cPickle
3949         outFileName="Pyfile86.med"
3950         c=DataArrayDouble([-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ],9,2)
3951         c.setInfoOnComponents(["aa","bbb"])
3952         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
3953         m=MEDCouplingUMesh();
3954         m.setMeshDimension(2);
3955         m.allocateCells(5);
3956         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
3957         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
3958         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
3959         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
3960         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
3961         m.finishInsertingCells();
3962         m.setCoords(c)
3963         m.checkCoherency()
3964         m1=MEDCouplingUMesh.New();
3965         m1.setMeshDimension(1);
3966         m1.allocateCells(3);
3967         m1.insertNextCell(NORM_SEG2,2,[1,4])
3968         m1.insertNextCell(NORM_SEG2,2,[3,6])
3969         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
3970         m1.finishInsertingCells();
3971         m1.setCoords(c)
3972         m1.checkCoherency()
3973         m2=MEDCouplingUMesh.New();
3974         m2.setMeshDimension(0);
3975         m2.allocateCells(4);
3976         m2.insertNextCell(NORM_POINT1,1,[1])
3977         m2.insertNextCell(NORM_POINT1,1,[3])
3978         m2.insertNextCell(NORM_POINT1,1,[2])
3979         m2.insertNextCell(NORM_POINT1,1,[6])
3980         m2.finishInsertingCells();
3981         m2.setCoords(c)
3982         m2.checkCoherency()
3983         #
3984         mm=MEDFileUMesh.New()
3985         self.assertTrue(mm.getUnivNameWrStatus())
3986         mm.setName("MyFirstMEDCouplingMEDmesh")
3987         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
3988         mm.setCoords(c)
3989         mm[-1]=m1;
3990         mm[0]=m;
3991         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
3992         mm[-2]=m2;
3993         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
3994         # playing with groups
3995         g1_2=DataArrayInt.New()
3996         g1_2.setValues([1,3],2,1)
3997         g1_2.setName("G1")
3998         g2_2=DataArrayInt.New()
3999         g2_2.setValues([1,2,3],3,1)
4000         g2_2.setName("G2")
4001         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4002         g1_1=DataArrayInt.New()
4003         g1_1.setValues([0,1,2],3,1)
4004         g1_1.setName("G1")
4005         g2_1=DataArrayInt.New()
4006         g2_1.setValues([0,2],2,1)
4007         g2_1.setName("G2")
4008         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4009         g1_N=DataArrayInt.New()
4010         g1_N.setValues(range(8),8,1)
4011         g1_N.setName("G1")
4012         g2_N=DataArrayInt.New()
4013         g2_N.setValues(range(9),9,1)
4014         g2_N.setName("G2")
4015         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4016         mm.createGroupOnAll(0,"GrpOnAllCell")
4017         # check content of mm
4018         t=mm.getGroupArr(0,"G1",False)
4019         self.assertTrue(g1_2.isEqual(t));
4020         t=mm.getGroupArr(0,"G2",False)
4021         self.assertTrue(g2_2.isEqual(t));
4022         t=mm.getGroupArr(-1,"G1",False)
4023         self.assertTrue(g1_1.isEqual(t));
4024         t=mm.getGroupArr(-1,"G2",False)
4025         self.assertTrue(g2_1.isEqual(t));
4026         t=mm.getGroupArr(1,"G1",False)
4027         self.assertTrue(g1_N.isEqual(t));
4028         t=mm.getGroupArr(1,"G2",False)
4029         self.assertTrue(g2_N.isEqual(t));
4030         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4031         t=mm.getGroupArr(0,"GrpOnAllCell")
4032         #
4033         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4034         mm2=cPickle.loads(st)
4035         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4036         pass
4037
4038     def testMEDFileFieldsLoadSpecificEntities1(self):
4039         nbNodes=11
4040         fieldName="myField"
4041         fileName="Pyfile87.med"
4042         nbPdt=10
4043         meshName="Mesh"
4044         #
4045         m=MEDCouplingCMesh()
4046         arr=DataArrayDouble(nbNodes) ; arr.iota()
4047         m.setCoords(arr)
4048         m=m.buildUnstructured()
4049         m.setName(meshName)
4050         #
4051         fmts=MEDFileFieldMultiTS()
4052         for i in xrange(nbPdt):
4053             f=MEDCouplingFieldDouble(ON_NODES)
4054             f.setMesh(m)
4055             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4056             f.setArray(arr)
4057             f.setName(fieldName)
4058             f.setTime(float(i),i,0)
4059             fmts.appendFieldNoProfileSBT(f)
4060             pass
4061         #
4062         mm=MEDFileUMesh() ; mm[0]=m
4063         fmts.write(fileName,2)
4064         mm.write(fileName,0)
4065         #
4066         fs=MEDFileFields(fileName,False)
4067         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4068         fs.loadArraysIfNecessary()
4069         fs2.loadArraysIfNecessary()
4070         for i in xrange(nbPdt):
4071             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4072             pass
4073         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4074         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4075         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4076         fmts=MEDFileFieldMultiTS()
4077         for i in xrange(nbPdt):
4078             f=MEDCouplingFieldDouble(ON_CELLS)
4079             f.setMesh(m3)
4080             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4081             f.setArray(arr)
4082             f.setName(fieldName)
4083             f.setTime(float(i),i,0)
4084             fmts.appendFieldNoProfileSBT(f)
4085             pass
4086         mm=MEDFileUMesh() ; mm[0]=m3
4087         del mm[0]
4088         self.assertEqual(mm.getNonEmptyLevels(),())
4089         mm[0]=m3
4090         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4091         fmts.write(fileName,2)
4092         fs=MEDFileFields(fileName,False)
4093         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4094         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4095         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4096         fs.loadArraysIfNecessary()
4097         fs2.loadArraysIfNecessary()
4098         fs3.loadArraysIfNecessary()
4099         fs4.loadArraysIfNecessary()
4100         for i in xrange(nbPdt):
4101             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4102             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4103             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4104             pass
4105         pass
4106
4107     def testMEDFileLotsOfTSRW1(self):
4108         nbNodes=11
4109         fieldName="myField"
4110         fileName="out.med"
4111         nbPdt=300 # <- perftest = 30000
4112         meshName="Mesh"
4113         #
4114         maxPdt=100 # <- optimum = 500
4115         m=MEDCouplingCMesh()
4116         arr=DataArrayDouble(nbNodes) ; arr.iota()
4117         m.setCoords(arr)
4118         m=m.buildUnstructured()
4119         m.setName(meshName)
4120         #
4121         nbOfField=nbPdt/maxPdt
4122         fs=MEDFileFields()
4123         for j in xrange(nbOfField):
4124             fmts=MEDFileFieldMultiTS()
4125             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4126             for i in xrange(s.start,s.stop,s.step):
4127                 f=MEDCouplingFieldDouble(ON_NODES)
4128                 f.setMesh(m)
4129                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4130                 f.setArray(arr)
4131                 f.setName("%s_%d"%(fieldName,j))
4132                 f.setTime(float(i),i,0)
4133                 fmts.appendFieldNoProfileSBT(f)
4134                 pass
4135             fs.pushField(fmts)
4136             pass
4137         #
4138         mm=MEDFileUMesh() ; mm[0]=m
4139         fs.write(fileName,2)
4140         mm.write(fileName,0)
4141         ############
4142         def appendInDict(d,key,val):
4143             if key in d:
4144                 d[key].append(val)
4145             else:
4146                 d[key]=[val]
4147             pass
4148         import re
4149         allFields=MEDLoader.GetAllFieldNames(fileName)
4150         allFieldsDict={}
4151         pat=re.compile("([\d]+)([\s\S]+)$")
4152         for st in allFields:
4153             stRev=st[::-1]
4154             m=pat.match(stRev)
4155             if m:
4156                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4157                 pass
4158             else:
4159                 appendInDict(allFieldsDict,st,'')
4160                 pass
4161             pass
4162         fs2=MEDFileFields()
4163         for k in allFieldsDict:
4164             if allFieldsDict[k]!=['']:
4165                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4166                 pass
4167             fmts2=[]
4168             for it in allFieldsDict[k]:
4169                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4170                 pass
4171             fmts2.reverse()
4172             zeResu=fmts2.pop()
4173             nbIter=len(fmts2)
4174             for ii in xrange(nbIter):
4175                 zeResu.pushBackTimeSteps(fmts2.pop())
4176                 pass
4177             zeResu.setName(k)
4178             fs2.pushField(zeResu)
4179             pass
4180         self.assertEqual(fs2[0].getTimeSteps(),[(i,0,float(i)) for i in xrange(nbPdt)])
4181         pass
4182     pass
4183
4184 unittest.main()