Salome HOME
EDF11242 : non regression test.
[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 import platform
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest
27
28 class MEDLoaderTest(unittest.TestCase):
29     def testMEDMesh1(self):
30         fileName="Pyfile18.med"
31         mname="ExampleOfMultiDimW"
32         medmesh=MEDFileMesh.New(fileName,mname)
33         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
34         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
35         m1_0=medmesh.getLevel0Mesh(True)
36         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
37         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
38         m2_0=medmesh.getLevelM1Mesh(True)
39         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
40         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
41         pass
42
43     def testMEDMesh2(self):
44         fileName="Pyfile10.med"
45         mname="3DToto"
46         outFileName="MEDFileMesh1.med"
47         medmesh=MEDFileUMesh.New(fileName,mname)
48         self.assertEqual((0,),medmesh.getNonEmptyLevels())
49         m1_0=medmesh.getLevel0Mesh(True)
50         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
51         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
52         g1_0=medmesh.getGroup(0,"mesh2",True)
53         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
54         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
55         g1_0=medmesh.getGroup(0,"mesh3",True)
56         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
57         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
58         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
59         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
60         g1_1.setName(g1_0.getName())
61         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
62         g1_0=medmesh.getFamily(0,"Family_-3",True)
63         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
64         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
65         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
66         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
67         g1_1.setName(g1_0.getName())
68         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
69         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
70         medmesh.write(outFileName,2);
71         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
72         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
73         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
74         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
75         famn=medmesh.getFamilyNameGivenId(0)
76         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
77         #without renum
78         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
79         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
80         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
81         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
82         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
83         pass
84
85     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
86     def testMEDMesh3(self):
87         outFileName="MEDFileMesh3.med"
88         c=DataArrayDouble.New()
89         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 ];
90         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
91         c.setValues(coords,9,2)
92         m=MEDCouplingUMesh.New();
93         m.setMeshDimension(2);
94         m.allocateCells(5);
95         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
96         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
97         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
98         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
99         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
100         m.finishInsertingCells();
101         m.setCoords(c)
102         m.checkCoherency()
103         m1=MEDCouplingUMesh.New();
104         m1.setMeshDimension(1);
105         m1.allocateCells(3);
106         m1.insertNextCell(NORM_SEG2,2,[1,4])
107         m1.insertNextCell(NORM_SEG2,2,[3,6])
108         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
109         m1.finishInsertingCells();
110         m1.setCoords(c)
111         m1.checkCoherency()
112         m2=MEDCouplingUMesh.New();
113         m2.setMeshDimension(0);
114         m2.allocateCells(4);
115         m2.insertNextCell(NORM_POINT1,1,[1])
116         m2.insertNextCell(NORM_POINT1,1,[3])
117         m2.insertNextCell(NORM_POINT1,1,[2])
118         m2.insertNextCell(NORM_POINT1,1,[6])
119         m2.finishInsertingCells();
120         m2.setCoords(c)
121         m2.checkCoherency()
122         #
123         mm=MEDFileUMesh.New()
124         self.assertTrue(mm.getUnivNameWrStatus())
125         mm.setName("MyFirstMEDCouplingMEDmesh")
126         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
127         mm.setCoords(c)
128         mm.setMeshAtLevel(-1,m1);
129         mm.setMeshAtLevel(0,m);
130         mm.setMeshAtLevel(-2,m2);
131         # playing with groups
132         g1_2=DataArrayInt.New()
133         g1_2.setValues([1,3],2,1)
134         g1_2.setName("G1")
135         g2_2=DataArrayInt.New()
136         g2_2.setValues([1,2,3],3,1)
137         g2_2.setName("G2")
138         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
139         g1_1=DataArrayInt.New()
140         g1_1.setValues([0,1,2],3,1)
141         g1_1.setName("G1")
142         g2_1=DataArrayInt.New()
143         g2_1.setValues([0,2],2,1)
144         g2_1.setName("G2")
145         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
146         g1_N=DataArrayInt.New()
147         g1_N.setValues(range(8),8,1)
148         g1_N.setName("G1")
149         g2_N=DataArrayInt.New()
150         g2_N.setValues(range(9),9,1)
151         g2_N.setName("G2")
152         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
153         mm.createGroupOnAll(0,"GrpOnAllCell")
154         # check content of mm
155         t=mm.getGroupArr(0,"G1",False)
156         self.assertTrue(g1_2.isEqual(t));
157         t=mm.getGroupArr(0,"G2",False)
158         self.assertTrue(g2_2.isEqual(t));
159         t=mm.getGroupArr(-1,"G1",False)
160         self.assertTrue(g1_1.isEqual(t));
161         t=mm.getGroupArr(-1,"G2",False)
162         self.assertTrue(g2_1.isEqual(t));
163         t=mm.getGroupArr(1,"G1",False)
164         self.assertTrue(g1_N.isEqual(t));
165         t=mm.getGroupArr(1,"G2",False)
166         self.assertTrue(g2_N.isEqual(t));
167         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
168         t=mm.getGroupArr(0,"GrpOnAllCell")
169         self.assertTrue(t.getValues()==range(5))
170         #
171         mmCpy=mm.deepCpy()
172         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
173         mmCpy.write(outFileName,2);
174         #
175         mm=MEDFileMesh.New(outFileName)
176         #
177         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
178         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
179         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
180         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
181         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
182         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
183         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
184         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
185         self.assertEqual(3,len(lmm))
186         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
187         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
188         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
189         #
190         self.assertTrue(mm.getUnivNameWrStatus())
191         self.assertTrue(isinstance(mm.getUnivName(),str))
192         self.assertTrue(len(mm.getUnivName())!=0)
193         mbis=mm.getMeshAtLevel(0)
194         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
195         self.assertTrue(m.isEqual(mbis,1e-12));
196         #
197         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
198         pass
199
200     # this test is the testMEDMesh3 except that permutation is dealed here
201     def testMEDMesh4(self):
202         outFileName="MEDFileMesh4.med"
203         c=DataArrayDouble.New()
204         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 ];
205         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
206         c.setValues(coords,9,2)
207         c.setInfoOnComponent(0,"abcdef [km]")
208         c.setInfoOnComponent(1,"ghij [MW]")
209         m=MEDCouplingUMesh.New();
210         m.setMeshDimension(2);
211         m.allocateCells(5);
212         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
213         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
214         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
215         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
216         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
217         m.finishInsertingCells();
218         m.setCoords(c)
219         m.checkCoherency()
220         m1=MEDCouplingUMesh.New();
221         m1.setMeshDimension(1);
222         m1.allocateCells(3);
223         m1.insertNextCell(NORM_SEG2,2,[1,4])
224         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
225         m1.insertNextCell(NORM_SEG2,2,[3,6])
226         m1.finishInsertingCells();
227         m1.setCoords(c)
228         m1.checkCoherency()
229         m2=MEDCouplingUMesh.New();
230         m2.setMeshDimension(0);
231         m2.allocateCells(4);
232         m2.insertNextCell(NORM_POINT1,1,[1])
233         m2.insertNextCell(NORM_POINT1,1,[3])
234         m2.insertNextCell(NORM_POINT1,1,[2])
235         m2.insertNextCell(NORM_POINT1,1,[6])
236         m2.finishInsertingCells();
237         m2.setCoords(c)
238         m2.checkCoherency()
239         #
240         mm=MEDFileUMesh.New()
241         mm.setName("My2ndMEDCouplingMEDmesh")
242         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
243         mm.setCoords(c)
244         renumNode=DataArrayInt.New()
245         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
246         mm.setRenumFieldArr(1,renumNode)
247         mm.setMeshAtLevel(-1,m1,True);
248         mm.setMeshAtLevel(0,m,True);
249         mm.setMeshAtLevel(-2,m2,True);
250         mm.removeMeshAtLevel(-2)
251         mm.setMeshAtLevel(-2,m2,True);
252         # playing with groups
253         g1_2=DataArrayInt.New()
254         g1_2.setValues([2,3],2,1)
255         g1_2.setName("G1")
256         g2_2=DataArrayInt.New()
257         g2_2.setValues([2,0,3],3,1)
258         g2_2.setName("G2")
259         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
260         g1_1=DataArrayInt.New()
261         g1_1.setValues([0,2,1],3,1)
262         g1_1.setName("G1")
263         g2_1=DataArrayInt.New()
264         g2_1.setValues([0,2],2,1)
265         g2_1.setName("G2")
266         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
267         g1_N=DataArrayInt.New()
268         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
269         g1_N.setName("G1")
270         g2_N=DataArrayInt.New()
271         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
272         g2_N.setName("G2")
273         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
274         # check content of mm
275         t=mm.getGroupArr(0,"G1",True)
276         self.assertTrue(g1_2.isEqual(t));
277         t=mm.getGroupArr(0,"G2",True)
278         self.assertTrue(g2_2.isEqual(t));
279         t=mm.getGroupArr(-1,"G1",True)
280         self.assertTrue(g1_1.isEqual(t));
281         t=mm.getGroupArr(-1,"G2",True)
282         self.assertTrue(g2_1.isEqual(t));
283         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
284         #
285         mm.write(outFileName,2);
286         mm2=MEDFileMesh.New(outFileName)
287         res=mm.isEqual(mm2,1e-12)
288         self.assertTrue(res[0])
289         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
290         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
291         mm2.keepFamIdsOnlyOnLevs([3],[-1])
292         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
293             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
294             pass
295         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
296         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
297         #
298         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
299         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
300         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
301         self.assertTrue(not mm2.existsFamily("Family_-8"))
302         mm2.createGroupOnAll(-1,"GrpOnAllFace")
303         self.assertTrue(mm2.existsFamily("Family_-8"))
304         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
305         pass
306
307     #testing persistence of retrieved arrays
308     def testMEDMesh5(self):
309         fileName="Pyfile18.med"
310         mname="ExampleOfMultiDimW"
311         medmesh=MEDFileUMesh.New(fileName,mname)
312         m1_0=medmesh.getLevel0Mesh(True)
313         da1=medmesh.getFamilyFieldAtLevel(0)
314         del medmesh
315         self.assertEqual(20,m1_0.getNumberOfCells())
316         self.assertEqual(20,da1.getNumberOfTuples())
317         pass
318
319     def testMEDMesh6(self):
320         outFileName="MEDFileMesh5.med"
321         m=MEDFileCMesh.New()
322         m.setTime(-1,-1,2.3)
323         m1=MEDCouplingCMesh.New();
324         da=DataArrayDouble.New()
325         da.setValues([0.,1.,2.],3,1)
326         da.setInfoOnComponent(0,"XX [mm]")
327         m1.setCoordsAt(0,da)
328         da=DataArrayDouble.New()
329         da.setValues([0.,1.2],2,1)
330         da.setInfoOnComponent(0,"YY [km]")
331         m1.setCoordsAt(1,da)
332         da=DataArrayDouble.New()
333         da.setValues([0.,1.3],2,1)
334         da.setInfoOnComponent(0,"ZZ [um]")
335         m1.setCoordsAt(2,da)
336         m.setMesh(m1)
337         self.assertTrue(m[0].isEqual(m1,1e-12))
338         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
339         m.setName("myFirstCartMesh")
340         m.setDescription("mmmmpppppppp")
341         m.setTimeValue(2.3)
342         m.setTimeUnit("ms")
343         da=DataArrayInt.New()
344         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
345         m.setFamilyFieldArr(1,da)
346         m.setFamilyId("family1",1)
347         da=m.getFamilyArr(1,"family1")
348         expected1=[2,4,9]
349         self.assertEqual(expected1,da.getValues())
350         self.assertTrue(m.getUnivNameWrStatus())
351         m.write(outFileName,2);
352         mm=MEDFileMesh.New(outFileName)
353         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
354         self.assertTrue(isinstance(mm,MEDFileCMesh))
355         self.assertTrue(isinstance(mm.getUnivName(),str))
356         self.assertTrue(len(mm.getUnivName())!=0)
357         self.assertTrue(m.isEqual(mm,1e-12)[0])
358         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
359         m2=mm.getMesh()
360         tt=m.getTime()
361         m1.setTime(tt[2],tt[0],tt[1])
362         m1.setName(m.getName())
363         m1.setTimeUnit(m.getTimeUnit())
364         m1.setDescription(m.getDescription())
365         self.assertTrue(m2.isEqual(m1,1e-12));
366         pass
367
368     def testMEDMesh7(self):
369         fileName="Pyfile24.med"
370         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
371         m=MEDFileUMesh.New()
372         m.setCoords(m2.getCoords())
373         m.setMeshAtLevel(0,m2)
374         m.setMeshAtLevel(-1,m1)
375         m.setMeshAtLevel(-2,m0)
376         m.setFamilyFieldArr(0,f2)
377         m.setFamilyFieldArr(-1,f1)
378         m.setFamilyFieldArr(-2,f0)
379         m.setFamilyFieldArr(1,p)
380         m.setRenumFieldArr(0,n2)
381         m.setRenumFieldArr(-1,n1)
382         m.setRenumFieldArr(-2,n0)
383         nbOfFams=len(fns)
384         for i in xrange(nbOfFams):
385             m.addFamily(fns[i],fids[i])
386             pass
387         nbOfGrps=len(grpns)
388         for i in xrange(nbOfGrps):
389             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
390             pass
391         m.setName(m2.getName())
392         m.setDescription(m2.getDescription())
393         #
394         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
395         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
396         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
397         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
398         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
399         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
400         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
401         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
402         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
403         #
404         m.write(fileName,2)
405         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
406         pass
407
408     def funcToTestDelItem(self,ff):
409         del ff[[0.02,(3,4)]]
410         pass
411
412     #emulation of pointe.med file.
413     def testMEDField1(self):
414         mm=MEDFileMesh.New("Pyfile17.med")
415         mm.write("Pyfile17_bis.med",2)
416         ff=MEDFileFieldMultiTS("Pyfile17.med")
417         tsExpected=[[1,2],[3,4],[5,6]]
418         self.assertEqual(3,len(ff))
419         for pos,f1ts in enumerate(ff):
420             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
421             self.assertEqual(type(f1ts),MEDFileField1TS)
422             pass
423         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
424         self.assertEqual([3,4],ff[1].getTime()[:-1])
425         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
426         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
427         ff.write("Pyfile17_bis.med",0)
428         #
429         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
430         self.assertEqual([(1,2),(3,4),(5,6)],ts)
431         self.funcToTestDelItem(ff)
432         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
433         self.assertEqual([(1,2)],ts)
434         pass
435
436     #profiles
437     def testMEDField2(self):
438         mm=MEDFileMesh.New("Pyfile19.med")
439         mm.write("Pyfile19_bis.med",2)
440         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
441         ff.write("Pyfile19_bis.med",0)
442         self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
443         pass
444
445     #gauss points
446     def testMEDField3(self):
447         mm=MEDFileMesh.New("Pyfile13.med")
448         mm.write("Pyfile13_bis.med",2)
449         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
450         ff.write("Pyfile13_bis.med",0)
451         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
452         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
453         f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
454         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
455         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
456         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
457         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
458         ff4=MEDFileField1TS.New("Pyfile13.med")
459         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
460         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
461         pass
462
463     #gauss NE
464     def testMEDField4(self):
465         mm=MEDFileMesh.New("Pyfile14.med")
466         mm.write("Pyfile14_bis.med",2)
467         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
468         ff.write("Pyfile14_bis.med",0)
469         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
470         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
471         f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
472         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
473         pass
474
475     # MEDField get/set on pointe.med
476     def testMEDField5(self):
477         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
478         f=ff.getFieldAtLevel(ON_CELLS,0)
479         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
480         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
481         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
482         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
483         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
484         # no with renumbering
485         f=ff.getFieldAtLevel(ON_CELLS,0,1)
486         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
487         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
488         f=ff.getFieldAtLevel(ON_CELLS,0,3)
489         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
490         f=ff.getFieldAtLevel(ON_CELLS,0,2)
491         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
492         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
493         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
494         pass
495
496     # MEDField get/set on profiles nodes
497     def testMEDField6(self):
498         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
499         its=ff.getIterations()
500         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
501         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
502         f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
503         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
504         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
505         its=ff.getIterations()
506         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
507         f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
508         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
509         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
510         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
511         pass
512
513     # MEDField get/set on profiles cells
514     def testMEDField7(self):
515         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
516         its=ff.getIterations()
517         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
518         f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
519         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
520         pass
521
522     #first test of assignation. No profile and types sorted by type.
523     def testMEDField8(self):
524         fname="Pyfile25.med"
525         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
526         m1=f1.getMesh()
527         mm1=MEDFileUMesh.New()
528         mm1.setCoords(m1.getCoords())
529         mm1.setMeshAtLevel(0,m1)
530         mm1.setName(m1.getName())
531         mm1.write(fname,2)
532         ff1=MEDFileField1TS.New()
533         ff1.setFieldNoProfileSBT(f1)
534         ff1.write(fname,0)
535         f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
536         itt,orr,ti=ff1.getTime()
537         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
538         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
539         ff1.setTime(3,4,2.3)
540         itt,orr,ti=ff1.getTime()
541         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
542         da,infos=ff1.getUndergroundDataArrayExt()
543         f2.getArray().setName(da.getName())#da has the same name than f2
544         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
545         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
546         #
547         fname="Pyfile26.med"
548         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
549         m1=f1.getMesh()
550         mm1=MEDFileUMesh.New()
551         mm1.setCoords(m1.getCoords())
552         mm1.setMeshAtLevel(0,m1)
553         mm1.setName(m1.getName())
554         mm1.write(fname,2)
555         ff1=MEDFileField1TS.New()
556         ff1.setFieldNoProfileSBT(f1)
557         nv=1456.
558         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
559         ff1.write(fname,0)
560         f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
561         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
562         f1.getArray().setIJ(0,0,nv)
563         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
564         #
565         fname="Pyfile27.med"
566         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
567         m1=f1.getMesh()
568         mm1=MEDFileUMesh.New()
569         mm1.setCoords(m1.getCoords())
570         mm1.setMeshAtLevel(0,m1)
571         mm1.setName(m1.getName())
572         mm1.write(fname,2)
573         ff1=MEDFileField1TS.New()
574         ff1.setFieldNoProfileSBT(f1)
575         ff1.write(fname,0)
576         f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
577         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
578         da,infos=ff1.getUndergroundDataArrayExt()
579         f2.getArray().setName(da.getName())#da has the same name than f2
580         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
581         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
582         #
583         fname="Pyfile28.med"
584         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
585         f1InvalidCpy=f1.deepCpy()
586         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
587         f1InvalidCpy2=f1.deepCpy()
588         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
589         m1=f1.getMesh()
590         mm1=MEDFileUMesh.New()
591         mm1.setCoords(m1.getCoords())
592         mm1.setMeshAtLevel(0,m1)
593         mm1.setName(m1.getName())
594         mm1.write(fname,2)
595         ff1=MEDFileField1TS.New()
596         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
597         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
598         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
599         ff1.setFieldNoProfileSBT(f1)
600         ff1.write(fname,0)
601         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
602         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
603         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
604         sbt=ff2.getFieldSplitedByType2()
605         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
606         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
607         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
608         self.assertEqual(6,loc1.getNumberOfPointsInCells())
609         self.assertEqual(3,loc1.getNumberOfGaussPoints())
610         self.assertEqual(2,loc1.getDimension())
611         da,infos=ff2.getUndergroundDataArrayExt()
612         f2.getArray().setName(da.getName())#da has the same name than f2
613         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
614         self.assertEqual(53,da.getNumberOfTuples())
615         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)
616         #
617         pass
618     
619     def testMEDFileData1(self):
620         fname="Pyfile29.med"
621         d=MEDFileData.New()
622         #
623         m1=MEDLoaderDataForTest.build1DMesh_1()
624         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
625         mmm1=MEDFileMeshMultiTS.New() ;
626         mmm1.setOneTimeStep(mm1)
627         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
628         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
629         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
630         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
631         d.setMeshes(ms)
632         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
633             self.assertEqual(name,mmm.getName())
634             self.assertEqual(type(mmm),MEDFileUMesh)
635             pass
636         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
637         #
638         ff1=MEDFileFieldMultiTS.New()
639         ff21=MEDFileFieldMultiTS.New()
640         ff22=MEDFileFieldMultiTS.New()
641         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
642         f1.getArray().setInfoOnComponent(0,"power [kW]")
643         ff1.appendFieldNoProfileSBT(f1)
644         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
645         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
646         ff21.appendFieldNoProfileSBT(f21)
647         f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
648         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
649         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
650         ff22.appendFieldNoProfileSBT(f22)
651         fs=MEDFileFields.New()
652         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
653         for name,fmts in zip(["f1","f21","f22"],fs):
654             self.assertEqual(name,fmts.getName())
655             pass
656         d.setFields(fs)
657         #
658         fname2="Pyfile29_2.med"
659         d.write(fname2,2)
660         #
661         d2=MEDFileData.New(fname2)
662         self.assertEqual(2,d2.getNumberOfMeshes())
663         self.assertEqual(3,d2.getNumberOfFields())
664         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
665         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
666         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
667         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
668         self.assertTrue(m1.isEqual(m1bis,1e-12))
669         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
670         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
671         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
672         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
673         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
674         pass
675     
676     def testMEDField9(self):
677         # first test field profile WR. Full type but with some type missing
678         fname="Pyfile30.med"
679         m1=MEDLoaderDataForTest.build2DMesh_3()
680         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
681         mm1.write(fname,2)
682         ff1=MEDFileField1TS.New()
683         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
684         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
685         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.
686         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
687         #
688         ff1.setFieldProfile(f1,mm1,0,da)
689         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
690         ff1=ff1.deepCpy()
691         ff1.write(fname,0)
692         #
693         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
694         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
695         self.assertTrue(vals.isEqual(d,1e-14))
696         #
697         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
698         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
699         ff2.deepCpyGlobs(ff3)
700         sbt=ff2.getFieldSplitedByType2()
701         self.assertEqual(3,sbt[0][0])#TRI3
702         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
703         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
704         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
705         self.assertEqual(4,sbt[1][0])#QUAD4
706         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
707         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
708         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
709         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
710         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
711         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
712         self.assertTrue(vals.isEqual(d,1e-14))
713         pass
714     
715     def testMEDField10(self):
716         fname="Pyfile31.med"
717         m1=MEDLoaderDataForTest.build2DMesh_1()
718         m1.renumberCells([0,1,4,2,3,5],False)
719         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
720         mm1.write(fname,2)
721         ff1=MEDFileFieldMultiTS.New()
722         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
723         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
724         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.
725         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
726         #
727         ff1.appendFieldProfile(f1,mm1,0,da)
728         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
729         ff1.appendFieldProfile(f1,mm1,0,da)
730         ff1=ff1.deepCpy()
731         ff1.write(fname,0)
732         #
733         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
734         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
735         self.assertTrue(vals.isEqual(e,1e-14))
736         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
737         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
738         self.assertTrue(vals.isEqual(d,1e-14))
739         #
740         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
741         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
742         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
743         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
744         self.assertTrue(vals.isEqual(e,1e-14))
745         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
746         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
747         self.assertTrue(vals.isEqual(d,1e-14))
748         pass
749     
750     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
751     def testMEDField11(self):
752         fname="Pyfile32.med"
753         m1=MEDLoaderDataForTest.build2DMesh_1()
754         m1.renumberCells([0,1,4,2,3,5],False)
755         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
756         mm1.write(fname,2)
757         ff1=MEDFileField1TS.New()
758         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
759         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
760         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.
761         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
762         #
763         ff1.setFieldProfile(f1,mm1,0,da)
764         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
765         ff1.write(fname,0)
766         #
767         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
768         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
769         self.assertTrue(vals.isEqual(d,1e-14))
770         ## #
771         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
773         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
774         self.assertTrue(vals.isEqual(d,1e-14))
775         pass
776
777     def testMEDField12(self):
778         fname="Pyfile33.med"
779         m1=MEDLoaderDataForTest.build2DMesh_1()
780         m1.renumberCells([0,1,4,2,3,5],False)
781         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
782         mm1.write(fname,2)
783         ff1=MEDFileFieldMultiTS.New()
784         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
785         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
786         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.
787         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
788         #
789         ff1.appendFieldProfile(f1,mm1,0,da)
790         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
791         ff1.appendFieldProfile(f1,mm1,0,da)
792         ff1.write(fname,0)
793         #
794         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
795         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
796         self.assertTrue(vals.isEqual(e,1e-14))
797         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
798         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
799         self.assertTrue(vals.isEqual(d,1e-14))
800         #
801         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
802         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
803         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
804         self.assertTrue(vals.isEqual(e,1e-14))
805         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
806         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
807         self.assertTrue(vals.isEqual(d,1e-14))
808         pass
809
810     def testMEDField13(self):
811         fname="Pyfile34.med"
812         m1=MEDLoaderDataForTest.build2DMesh_1()
813         m1.renumberCells([0,1,4,2,3,5],False)
814         tmp=m1.getName();
815         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
816         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
817         mm1.write(fname,2)
818         ff1=MEDFileField1TS.New()
819         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
820         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
821         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.
822         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
823         #
824         ff1.setFieldProfile(f1,mm1,0,da)
825         ff1.write(fname,0)
826         #
827         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
828         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
829         self.assertTrue(vals.isEqual(d,1e-14))
830         #
831         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
832         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
833         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
834         self.assertTrue(vals.isEqual(d,1e-14))
835         pass
836
837     def testMEDField14(self):
838         fname="Pyfile35.med"
839         m1=MEDLoaderDataForTest.build2DMesh_1()
840         m1.renumberCells([0,1,4,2,3,5],False)
841         tmp=m1.getName();
842         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
843         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
844         mm1.write(fname,2)
845         ff1=MEDFileFieldMultiTS.New()
846         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
847         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
848         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.
849         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
850         #
851         ff1.appendFieldProfile(f1,mm1,0,da)
852         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
853         ff1.appendFieldProfile(f1,mm1,0,da)
854         ff1.write(fname,0)
855         #
856         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
857         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
858         self.assertTrue(vals.isEqual(d,1e-14))
859         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
860         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
861         self.assertTrue(vals.isEqual(e,1e-14))
862         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
863         #
864         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
865         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
866         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
867         self.assertTrue(vals.isEqual(d,1e-14))
868         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
869         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
870         self.assertTrue(vals.isEqual(e,1e-14))
871         pass
872     # 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.
873     # 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
874     # 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 !
875     def testMEDField15(self):
876         fname="Pyfile36.med"
877         m0=MEDLoaderDataForTest.build2DMesh_1()
878         m0.renumberCells([0,1,4,2,3,5],False)
879         tmp=m0.getName();
880         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
881         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
882         ff1=MEDFileField1TS.New()
883         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
884         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
885         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.
886         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
887         #
888         ff1.setFieldProfile(f1,mm1,0,da)
889         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
890         mm1.write(fname,2)
891         ff1.write(fname,0)
892         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
893         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
894         self.assertTrue(p1.isIdentity())
895         self.assertEqual(5,p1.getNumberOfTuples())
896         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
897         pass
898     # Test for getFieldAtTopLevel method
899     def testMEDField16(self):
900         fname="Pyfile37.med"
901         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
902         m1=f1.getMesh()
903         mm1=MEDFileUMesh.New()
904         mm1.setCoords(m1.getCoords())
905         mm1.setMeshAtLevel(0,m1)
906         mm1.setName(m1.getName())
907         ff1=MEDFileField1TS.New()
908         ff1.setFieldNoProfileSBT(f1)
909         m2=m1.buildDescendingConnectivity()[0]
910         m2.sortCellsInMEDFileFrmt()
911         m2.setName(m1.getName())
912         mm1.setMeshAtLevel(-1,m2)
913         mm1.write(fname,2)
914         f2=m2.getMeasureField(True)
915         dd=DataArrayDouble.New()
916         dd.alloc(f2.getArray().getNumberOfTuples(),3)
917         dd[:,0]=f2.getArray()
918         dd[:,1]=2*f2.getArray()
919         dd[:,2]=3*f2.getArray()
920         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
921         f2.setArray(dd)
922         f2.copyTinyStringsFrom(f1)
923         f2.copyTinyAttrFrom(f1)
924         ff1.setFieldNoProfileSBT(f2)
925         ff1.write(fname,0)
926         # Reading Pyfile37.med
927         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
928         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
929         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
930         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
931         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
932         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
933         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
934         # More complex
935         fname="Pyfile38.med"
936         mm1.write(fname,2)
937         ff1=MEDFileField1TS.New()
938         ff1.setFieldNoProfileSBT(f2)
939         ff1.write(fname,0)
940         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
941         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
942         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
943         pass
944
945     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
946     def testMEDField17(self):
947         fname="Pyfile39.med"
948         m1=MEDLoaderDataForTest.build2DMesh_1()
949         m1.renumberCells([0,1,4,2,3,5],False)
950         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
951         mm1.write(fname,2)
952         ffs=MEDFileFields.New()
953         ff1=MEDFileFieldMultiTS.New()
954         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
955         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
956         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.
957         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
958         #
959         ff1.appendFieldProfile(f1,mm1,0,da)
960         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
961         ff1.appendFieldProfile(f1,mm1,0,da)
962         ffs.resize(1)
963         ffs.setFieldAtPos(0,ff1)
964         ffs=ffs.deepCpy()
965         ffs.write(fname,0)
966         #
967         ffsr=MEDFileFields.New(fname)
968         ff3=ffsr.getFieldAtPos(0)
969         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
970         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
971         pass
972
973     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
974     def testMEDField18(self):
975         fname="Pyfile40.med"
976         m1=MEDLoaderDataForTest.build2DMesh_1()
977         m1.renumberCells([0,1,4,2,3,5],False)
978         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
979         mm1.write(fname,2)
980         ffs=MEDFileFields.New()
981         ff1=MEDFileFieldMultiTS.New()
982         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
983         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
984         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.
985         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
986         #
987         ff1.appendFieldProfile(f1,mm1,0,da)
988         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
989         ff1.appendFieldProfile(f1,mm1,0,da)
990         ffs.pushField(ff1)
991         ffs.write(fname,0)
992         #
993         ffsr=MEDFileFields.New(fname)
994         ff3=ffsr.getFieldAtPos(0)
995         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
996         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
997         pass
998
999     def testMEDFieldBug1(self):
1000         fname="Pyfile13.med"
1001         d=MEDFileData.New(fname)
1002         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1003         pass
1004
1005     def testMEDMesh8(self):
1006         m=MEDLoaderDataForTest.build1DMesh_1()
1007         m.convertQuadraticCellsToLinear()
1008         mm=MEDFileUMesh.New()
1009         mm.setMeshAtLevel(0,m)
1010         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1011         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1012         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1013         mm.setGroupsAtLevel(0,[g1,g2],False)
1014         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1015         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1016         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1017         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1018         mm.assignFamilyNameWithGroupName()
1019         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1020         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1021         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1022         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1023         #
1024         mm=MEDFileUMesh.New()
1025         mm.setMeshAtLevel(0,m)
1026         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1027         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1028         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1029         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1030         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1031         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1032         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1033         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1034         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1035         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1036         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1037         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1038         mm.changeFamilyId(5,6)
1039         g=mm.getGroupArr(0,"g3")
1040         self.assertTrue(g.isEqual(g3));
1041         g=mm.getGroupArr(0,"g2")
1042         self.assertTrue(g.isEqual(g2));
1043         g=mm.getGroupArr(0,"g1")
1044         self.assertTrue(g.isEqual(g1));
1045         pass
1046     
1047     # bug detected by gauthier
1048     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1049         fname="Pyfile41.med"
1050         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1051         m1=f1.getMesh()
1052         mm1=MEDFileUMesh.New()
1053         mm1.setCoords(m1.getCoords())
1054         mm1.setMeshAtLevel(0,m1)
1055         mm1.write(fname,2)
1056         ff1=MEDFileField1TS.New()
1057         ff1.setFieldNoProfileSBT(f1)
1058         ff1.write(fname,0)
1059         # writing mesh1 and field1, now creation of mesh2 and field2
1060         f2=f1.deepCpy()
1061         m2=f2.getMesh()
1062         m2.translate([0.5,0.6,0.7])
1063         m2.setName("3DSurfMesh_2")
1064         f2.getArray()[:]*=2.
1065         f2.setName("VectorFieldOnCells2")
1066         mm2=MEDFileUMesh.New()
1067         mm2.setCoords(m2.getCoords())
1068         mm2.setMeshAtLevel(0,m2)
1069         mm2.write(fname,0)
1070         ff2=MEDFileField1TS.New()
1071         ff2.setFieldNoProfileSBT(f2)
1072         ff2.write(fname,0)
1073         #
1074         f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1075         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1076         f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1077         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1078         pass
1079
1080     def testMEDLoaderMultiLevelCellField1(self):
1081         fname="Pyfile42.med"
1082         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1083         m=MEDFileUMesh.New()
1084         m.setCoords(m2.getCoords())
1085         m.setMeshAtLevel(0,m2)
1086         m.setMeshAtLevel(-1,m1)
1087         m.setMeshAtLevel(-2,m0)
1088         m.write(fname,2)
1089         #
1090         FieldName1="Field1"
1091         compNames1=["comp1","comp2","comp3"]
1092         ff1=MEDFileField1TS.New()
1093         da2=DataArrayDouble.New()
1094         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1095         da2.iota(7.)
1096         da2.rearrange(len(compNames1))
1097         da2.setInfoOnComponents(compNames1)
1098         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1099         ff1.setFieldNoProfileSBT(f2)
1100         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1101         da0=DataArrayDouble.New()
1102         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1103         da0.iota(190.)
1104         da0.rearrange(len(compNames1))
1105         da0.setInfoOnComponents(compNames1)
1106         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1107         ff1.setFieldNoProfileSBT(f0)
1108         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1109         da1=DataArrayDouble.New()
1110         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1111         da1.iota(90.)
1112         da1.rearrange(len(compNames1))
1113         da1.setInfoOnComponents(compNames1)
1114         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1115         ff1.setFieldNoProfileSBT(f1)
1116         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1117         #
1118         ff1.write(fname,0)
1119         #
1120         FieldName2="Field2"
1121         compNames2=["comp11","comp22"]
1122         ff2=MEDFileField1TS.New()
1123         da0=DataArrayDouble.New()
1124         da0.alloc(m0.getNumberOfCells()*2,1)
1125         da0.iota(-190.)
1126         da0.rearrange(2)
1127         da0.setInfoOnComponents(compNames2)
1128         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1129         ff2.setFieldNoProfileSBT(f0)
1130         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1131         da1=DataArrayDouble.New()
1132         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1133         da1.iota(-90.)
1134         da1.rearrange(len(compNames2))
1135         da1.setInfoOnComponents(compNames2)
1136         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1137         ff2.setFieldNoProfileSBT(f1)
1138         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1139         #
1140         ff2.write(fname,0)
1141         #
1142         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1143         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1144         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1145         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1146         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1147         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1148         pass
1149
1150     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1151         fname="Pyfile43.med"
1152         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1153         m=MEDFileUMesh.New()
1154         m.setMeshAtLevel(0,m2)
1155         m.setMeshAtLevel(-1,m1)
1156         m.setMeshAtLevel(-2,m0)
1157         f=MEDFileField1TS.New()
1158         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1159         ff.setName("NodeFieldPfl")
1160         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1161         ff.setArray(arr)
1162         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1163         f.setFieldProfile(ff,m,-2,pfl)
1164         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1165         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1166         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1167         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1168         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1169         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1170         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1171         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1172         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1173         expected1=[1.,10.,100.,2.,20.,200.]
1174         nodeCoordsWithValue1=[10.,2.5,0.]
1175         nodeCoordsWithValue2=[10.,3.75,0.]
1176         for i in xrange(3):
1177             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1178             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1179             pass
1180         for i in xrange(6):
1181             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1182             pass
1183         del tes0
1184         #
1185         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1186         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1187         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1188         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1189         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1190         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1191         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1192         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1193         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1194         for i in xrange(6):
1195             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1196             pass
1197         m.write(fname,2)
1198         f.write(fname,0)
1199         #
1200         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1201         f=MEDFileField1TS.New()
1202         f.setFieldProfile(ff,m,-2,pfl)
1203         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1204         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1205         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1206         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1207         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1208         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1209         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1210         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1211         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1212         expected2=[2.,20.,200.,1.,10.,100.]
1213         for i in xrange(3):
1214             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1215             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1216             pass
1217         for i in xrange(6):
1218             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1219             pass
1220         #
1221         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1222         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1223         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1224         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1225         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1226         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1227         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1228         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1229         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1230         for i in xrange(6):
1231             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1232             pass
1233         pass
1234
1235     def testDuplicateNodesOnM1Group1(self):
1236         fname="Pyfile44.med"
1237         m=MEDCouplingCMesh.New()
1238         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1239         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1240         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1241         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1242         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1243         m2.setName(m.getName())
1244         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1245         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1246         mm=MEDFileUMesh.New()
1247         mm.setMeshAtLevel(0,m)
1248         mm.setMeshAtLevel(-1,m2)
1249         mm.setGroupsAtLevel(-1,[grp,grp2])
1250         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1251         mm.setGroupsAtLevel(1,[grpNode])
1252         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1253         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1254         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1255         #
1256         self.assertEqual(30,mm.getNumberOfNodes())
1257         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1258         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1259         #
1260         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1261         self.assertEqual([15,16,17],nodes.getValues());
1262         self.assertEqual([7,8,9],cells.getValues());
1263         self.assertEqual([12,13,14],cells2.getValues());
1264         self.assertEqual(33,mm.getNumberOfNodes())
1265         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1266         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1267         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1268         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1269         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
1270         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1271         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
1272         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1273         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])
1274         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1275         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1276         #
1277         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1278         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1279         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1280         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1281         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1282         mm.write(fname,2)
1283         pass
1284
1285     def testDuplicateNodesOnM1Group2(self):
1286         fname="Pyfile45.med"
1287         m=MEDCouplingCMesh.New()
1288         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1289         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1290         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1291         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1292         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1293         m2.setName(m.getName())
1294         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1295         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1296         mm=MEDFileUMesh.New()
1297         mm.setMeshAtLevel(0,m)
1298         mm.setMeshAtLevel(-1,m2)
1299         mm.setGroupsAtLevel(-1,[grp,grp2])
1300         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1301         mm.setGroupsAtLevel(1,[grpNode])
1302         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1303         ref1=[4,9,8,14,15,4,10,9,15,16]
1304         ref2=[4,9,8,14,30,4,10,9,30,16]
1305         #
1306         self.assertEqual(30,mm.getNumberOfNodes())
1307         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1308         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1309         #
1310         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1311         self.assertEqual([15],nodes.getValues());
1312         self.assertEqual([7,8],cells.getValues());
1313         self.assertEqual([12,13],cells2.getValues());
1314         self.assertEqual(31,mm.getNumberOfNodes())
1315         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1316         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1317         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1318         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1319         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
1320         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1321         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
1322         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1323         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])
1324         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1325         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1326         #
1327         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1328         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1329         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1330         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1331         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1332         mm.write(fname,2)       
1333         pass
1334
1335     def testBasicConstructors(self):
1336         fname="Pyfile18.med"
1337         m=MEDFileMesh.New(fname)
1338         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1339         m=MEDFileMesh.New(fname)
1340         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1341         m=MEDFileUMesh(fname)
1342         m=MEDFileUMesh()
1343         self.testMEDMesh6()
1344         m=MEDFileCMesh("MEDFileMesh5.med")
1345         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1346         m=MEDFileCMesh()
1347         m=MEDFileMeshMultiTS()
1348         m=MEDFileMeshMultiTS(fname)
1349         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1350         m=MEDFileMeshes()
1351         m=MEDFileMeshes(fname)
1352         m=MEDFileField1TS()
1353         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1354         m=MEDFileFieldMultiTS()
1355         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1356         m=MEDFileFields()
1357         m=MEDFileFields(fname)
1358         m=MEDFileData()
1359         m=MEDFileData(fname)
1360         #
1361         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1362         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1363         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1364         m=MEDCouplingCMesh()
1365         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1366         m=MEDCouplingFieldTemplate(ON_NODES)
1367         m=MEDCouplingMultiFields([])
1368         m=MEDCouplingFieldOverTime([])
1369         pass
1370
1371     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1372     def testBugSemiPartialField(self):
1373         fname="Pyfile46.med"
1374         m=MEDLoaderDataForTest.build2DMesh_3()
1375         m=m[:10] ; m.setName("mesh")
1376         f=m.getMeasureField(ON_CELLS)
1377         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1378         f.setTime(5.5,3,4)
1379         f.setName("SemiPartialField")
1380         #
1381         f1=f[:6] ; f1.getMesh().setName(m.getName())
1382         f2=f[6:] ; f2.getMesh().setName(m.getName())
1383         #
1384         mm=MEDFileUMesh.New()
1385         mm.setMeshAtLevel(0,m)
1386         ff=MEDFileField1TS.New()
1387         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1388         mm.write(fname,2)
1389         ff.write(fname,0)
1390         #
1391         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1392         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1393         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1394         #
1395         fread.checkCoherency()
1396         fread2.checkCoherency()
1397         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1398         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1399         pass
1400
1401     def testUnPolyze1(self):
1402         fname="Pyfile47.med"
1403         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1404         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]
1405         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1406         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]]))
1407         mm.write(fname,2)
1408         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1409         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1410         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1411         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1412         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1413         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1414         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1415         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1416         # to test
1417         mm.setRenumFieldArr(0,None)
1418         mm.setFamilyFieldArr(-1,None)
1419         pass
1420
1421     def testUnPolyze2(self):
1422         fname="Pyfile48.med"
1423         mfd=MEDFileData.New()
1424         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1425         meshes=MEDFileMeshes.New()
1426         meshes.pushMesh(mm)
1427         mfd.setMeshes(meshes)
1428         fields=MEDFileFields.New()
1429         mfd.setFields(fields)
1430         ff=MEDFileFieldMultiTS.New()
1431         fields.pushField(ff)
1432         #
1433         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1434         f0_0.setTime(9.5,3,4)
1435         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1436         f0_0.setArray(da)
1437         f0_0.setMesh(mm.getMeshAtLevel(0))
1438         ff.appendFieldNoProfileSBT(f0_0)
1439         ff0=ff.getTimeStepAtPos(0)
1440         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1441         f0_1.setTime(9.5,3,4)
1442         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1443         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1444         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1445         f0_1.setArray(da)
1446         ff0.setFieldProfile(f0_1,mm,0,pfl)
1447         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1448         f0_2.setTime(9.5,3,4)
1449         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1450         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
1451         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1452         f0_2.setArray(da)
1453         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1454         mfd.getFields().shallowCpyGlobs(ff0)
1455         #
1456         mfd.unPolyzeMeshes()
1457         #
1458         fmts=mfd.getFields()[0]
1459         self.assertEqual(fmts.getNumberOfTS(),1)
1460         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1461         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1462         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))])
1463         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1464         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1465         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1466         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1467         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1468         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1469         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1470         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))
1471         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1472         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1473         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1474         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1475         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1476         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])
1477         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1478         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1479         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1480         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])
1481         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1482         #
1483         mfd.write(fname,2)
1484         pass
1485
1486     def testGaussWriteOnPfl1(self):
1487         fname="Pyfile49.med"
1488         fname2="Pyfile50.med"
1489         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1490         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1491         mQ8.allocateCells(1)
1492         mQ8.insertNextCell(NORM_QUAD8,range(8))
1493         mQ8.finishInsertingCells()
1494         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1495         mQ4.allocateCells(1)
1496         mQ4.insertNextCell(NORM_QUAD4,range(4))
1497         mQ4.finishInsertingCells()
1498         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1499         mT3.allocateCells(1)
1500         mT3.insertNextCell(NORM_TRI3,range(3))
1501         mT3.finishInsertingCells()
1502         
1503         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.]]
1504         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1505         ms[:]=(elt.deepCpy() for elt in ms)
1506         for m,t in zip(ms,tr):
1507             d=m.getCoords() ; d+= t
1508             pass
1509         m=MEDCouplingUMesh.MergeUMeshes(ms)
1510         m.setName("mesh")
1511         m2=m[:13] ; m2.setName(m.getName())
1512         ### 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.
1513         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1514         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1515         f.setMesh(m2)
1516         f.setTime(4.5,1,2)
1517         da=DataArrayDouble(34) ; da.iota(3.)
1518         f.setArray(da)
1519         f.setName("fieldCellOnPflWithoutPfl")
1520         fInvalid=f.deepCpy()
1521         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])
1522         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])
1523         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])
1524         f.checkCoherency()
1525         fInvalid2=fInvalid.deepCpy()
1526         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1527         #
1528         mm=MEDFileUMesh()
1529         mm.setMeshAtLevel(0,m)
1530         mm.write(fname,2)
1531         #
1532         f1ts=MEDFileField1TS.New()
1533         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1534         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1535         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1536         f1ts.setFieldProfile(f,mm,0,pfl)
1537         f1ts.write(fname,0)
1538         #
1539         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1540         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1541         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1542         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1543         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1544         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1545         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1546         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1547         #
1548         dataRead=MEDFileData.New(fname)
1549         mRead=dataRead.getMeshes()[0]
1550         f1tsRead=dataRead.getFields()[0][0]
1551         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1552         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1553         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1554         f2_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1555         f2_bis.checkCoherency()
1556         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1557         #
1558         MEDLoader.WriteField(fname2,f,True)
1559         f2_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1560         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1561         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1562         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1563         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1564         m2=m[pfl] ; m2.setName(m.getName())
1565         f.setMesh(m2)
1566         f.setTime(4.5,1,2)
1567         da=DataArrayDouble(35) ; da.iota(3.)
1568         f.setArray(da)
1569         f.setName("fieldCellOnPflWithoutPfl2")
1570         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1571         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])
1572         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])
1573         f.checkCoherency()
1574         #
1575         mm=MEDFileUMesh()
1576         mm.setMeshAtLevel(0,m)
1577         mm.write(fname,2)
1578         f1ts=MEDFileField1TS.New()
1579         f1ts.setFieldProfile(f,mm,0,pfl)
1580         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1581         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1582         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1583         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1584         f1ts.write(fname,0)
1585         dataRead=MEDFileData.New(fname)
1586         mRead=dataRead.getMeshes()[0]
1587         f1tsRead=dataRead.getFields()[0][0]
1588         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1589         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1590         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1591         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1592         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1593         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1594         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1595         #
1596         MEDLoader.WriteField(fname2,f,True)
1597         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1598         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1599         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1600         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1601         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1602         f.setMesh(m)
1603         f.setTime(4.5,1,2)
1604         da=DataArrayDouble(60) ; da.iota(3.)
1605         f.setArray(da)
1606         f.setName("fieldCellWithoutPfl")
1607         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])
1608         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])
1609         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])
1610         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])
1611         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])
1612         f.checkCoherency()
1613         mm=MEDFileUMesh()
1614         mm.setMeshAtLevel(0,m) 
1615         f1ts=MEDFileField1TS.New()
1616         f1ts.setFieldNoProfileSBT(f)
1617         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1618         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1619         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1620         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1621         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1622         mm.write(fname,2)
1623         f1ts.write(fname,0)
1624         #
1625         dataRead=MEDFileData.New(fname)
1626         mRead=dataRead.getMeshes()[0]
1627         f1tsRead=dataRead.getFields()[0][0]
1628         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1629         f3.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,1e-12,1e-12))
1631         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1632         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1633         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1634         #
1635         MEDLoader.WriteField(fname2,f,True)
1636         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1637         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1638         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1639         pass
1640
1641     # Testing profile on nodes when the profile is identity but not on all nodes.
1642     def testMEDFieldPflOnNode1(self):
1643         fname="Pyfile51.med"
1644         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)
1645         m0=MEDCouplingUMesh("Mesh",2)
1646         m0.allocateCells(5)
1647         m0.insertNextCell(NORM_TRI3,[1,4,2])
1648         m0.insertNextCell(NORM_TRI3,[4,5,2])
1649         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1650         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1651         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1652         m0.finishInsertingCells()
1653         m0.setCoords(coo)
1654         m1=MEDCouplingUMesh(m0.getName(),1)
1655         m1.allocateCells(9)
1656         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1657         for i in xrange(9):
1658             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1659             pass
1660         m1.finishInsertingCells()
1661         m1.setCoords(coo)
1662         #
1663         m=MEDFileUMesh()
1664         m.setMeshAtLevel(0,m0)
1665         m.setMeshAtLevel(-1,m1)
1666         #
1667         dt=3 ; it=2 ; tim=4.5
1668         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1669         fieldNode0.setName("fieldNode0")
1670         fieldNode0.setTime(tim,dt,it)
1671         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1672         arr=DataArrayDouble([10,11,12,13,14])
1673         fieldNode0.setArray(arr)
1674         f0=MEDFileField1TS()
1675         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1676         m.write(fname,2) ; f0.write(fname,0)
1677         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1678         fieldNode1.setName("fieldNode1")
1679         fieldNode1.setTime(tim,dt,it)
1680         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1681         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1682         fieldNode1.setArray(arr1)
1683         f1=MEDFileField1TS()
1684         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1685         f1.write(fname,0)
1686         del m,f0,m0,m1,f1
1687         ## Reading from file
1688         m=MEDFileMesh.New(fname)
1689         m0=m.getMeshAtLevel(0)
1690         m00=m0.deepCpy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1691         fieldNode0.setMesh(m00)
1692         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1693         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1694         ff0_1.checkCoherency()
1695         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1696         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1697         ff0_2.checkCoherency()
1698         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1699         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1700         ff0_3.checkCoherency()
1701         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1702         ff0_4=MEDLoader.ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1703         ff0_4.checkCoherency()
1704         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1705         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1706         m1=m.getMeshAtLevel(-1)
1707         m10=m1.deepCpy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1708         fieldNode1.setMesh(m10)
1709         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1710         ff1_1.checkCoherency()
1711         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1712         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1713         ff1_2.checkCoherency()
1714         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1715         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1716         ff1_3.checkCoherency()
1717         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1718         ff1_4=MEDLoader.ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1719         ff1_4.checkCoherency()
1720         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1721         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]
1722         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]
1723         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]
1724         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1725         arr_r.setName(fieldNode1.getArray().getName())
1726         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1727         pfl1_r.setName(pfl1.getName())
1728         self.assertTrue(pfl1_r.isEqual(pfl1))
1729         pass
1730     
1731         # Testing profile on nodes when the profile is identity but not on all nodes.
1732     def testMEDFieldPflOnCell1(self):
1733         fname="Pyfile52.med"
1734         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)
1735         m0=MEDCouplingUMesh("Mesh",2)
1736         m0.allocateCells(5)
1737         m0.insertNextCell(NORM_TRI3,[1,4,2])
1738         m0.insertNextCell(NORM_TRI3,[4,5,2])
1739         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1740         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1741         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1742         m0.finishInsertingCells()
1743         m0.setCoords(coo)
1744         m1=MEDCouplingUMesh(m0.getName(),1)
1745         m1.allocateCells(9)
1746         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1747         for i in xrange(9):
1748             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1749             pass
1750         m1.finishInsertingCells()
1751         m1.setCoords(coo)
1752         #
1753         m=MEDFileUMesh()
1754         m.setMeshAtLevel(0,m0)
1755         m.setMeshAtLevel(-1,m1)
1756         #
1757         dt=3 ; it=2 ; tim=4.5
1758         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1759         fieldCell0.setName("fieldCell0")
1760         fieldCell0.setTime(tim,dt,it)
1761         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1762         arr=DataArrayDouble([10,11,12])
1763         fieldCell0.setArray(arr)
1764         f0=MEDFileField1TS()
1765         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1766         m.write(fname,2) ; f0.write(fname,0)
1767         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1768         fieldCell1.setName("fieldCell1")
1769         fieldCell1.setTime(tim,dt,it)
1770         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1771         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1772         fieldCell1.setArray(arr1)
1773         f1=MEDFileField1TS()
1774         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1775         f1.write(fname,0)
1776         del m,f0,m0,m1,f1
1777         ## Reading from file
1778         m=MEDFileMesh.New(fname)
1779         m0=m.getMeshAtLevel(0)
1780         m00=m0.deepCpy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1781         fieldCell0.setMesh(m00)
1782         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1783         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1784         ff0_1.checkCoherency()
1785         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1786         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1787         ff0_2.checkCoherency()
1788         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1789         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1790         ff0_3.checkCoherency()
1791         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1792         ff0_4=MEDLoader.ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1793         ff0_4.checkCoherency()
1794         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1795         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1796         m1=m.getMeshAtLevel(-1)
1797         m10=m1.deepCpy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1798         fieldCell1.setMesh(m10)
1799         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1800         ff1_1.checkCoherency()
1801         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1802         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1803         ff1_2.checkCoherency()
1804         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1805         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1806         ff1_3.checkCoherency()
1807         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1808         ff1_4=MEDLoader.ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1809         ff1_4.checkCoherency()
1810         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1811         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]
1812         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]
1813         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]
1814         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1815         arr_r.setName(fieldCell1.getArray().getName())
1816         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1817         pfl1_r.setName(pfl1.getName())
1818         self.assertTrue(pfl1_r.isEqual(pfl1))
1819         pass
1820
1821     def testMEDFileUMeshZipCoords1(self):
1822         m=MEDFileUMesh()
1823         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1824         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])
1825         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1826         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1827         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1828         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1829         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1830         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1831         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1832         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1833         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1834         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1835         o2n=m.zipCoords()
1836         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1837         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1838         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1839         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1840         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1841         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1842         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1843         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1844         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1845         pass
1846
1847     def testMEDUMeshAddNodeGroup1(self):
1848         fname="Pyfile53.med"
1849         m=MEDFileUMesh()
1850         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1851         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])
1852         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1853         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1854         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1855         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1856         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1857         #
1858         mm=m.deepCpy()
1859         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
1860         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
1861         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1862         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1863         mm.setFamilyId("MyFam",2)
1864         mm.setFamilyId("MyOtherFam",3)
1865         mm.setFamilyId("MyOther-1",-1)
1866         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1867         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1868         #
1869         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1870         mm.addNodeGroup(daTest)
1871         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1872         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1873         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1874             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1875             pass
1876         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1877         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1878         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1879         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1880         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1881             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1882             pass
1883         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1884         da=DataArrayInt([3,12]) ; da.setName("grp0")
1885         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1886         da.setValues([1])
1887         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1888         mm.write(fname,2)
1889         mm=MEDFileMesh.New(fname)
1890         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1891         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1892         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1893             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1894             pass
1895         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1896         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1897         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1898         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1899         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1900             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1901             pass
1902         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1903         da=DataArrayInt([3,12]) ; da.setName("grp0")
1904         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1905         da.setValues([1])
1906         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1907         pass
1908
1909     def testMEDUMeshAddGroup1(self):
1910         fname="Pyfile54.med"
1911         m=MEDFileUMesh()
1912         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1913         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
1914         for i in xrange(7):
1915             m0.insertNextCell(NORM_TRI3,[1,2,1])
1916             pass
1917         for i in xrange(4):
1918             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
1919             pass
1920         for i in xrange(2):
1921             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
1922             pass
1923         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1924         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1925         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1926         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1927         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1928         #
1929         mm=m.deepCpy()
1930         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
1931         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
1932         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1933         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1934         mm.setFamilyId("MyFam",2)
1935         mm.setFamilyId("MyOtherFam",3)
1936         mm.setFamilyId("MyOther-1",-1)
1937         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1938         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1939         #
1940         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1941         mm.addGroup(0,daTest)
1942         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1943         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1944         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1945             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1946             pass
1947         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1948         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1949         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1950         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1951         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1952             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1953             pass
1954         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
1955         da=DataArrayInt([3,12]) ; da.setName("grp0")
1956         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1957         da.setValues([1])
1958         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1959         mm.write(fname,2)
1960         mm=MEDFileMesh.New(fname)
1961         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1962         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1963         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1964             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1965             pass
1966         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1967         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1968         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1969         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1970         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1971             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1972             pass
1973         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
1974         da=DataArrayInt([3,12]) ; da.setName("grp0")
1975         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1976         da.setValues([1])
1977         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1978         pass
1979
1980     def testHeapMem1(self):
1981         a=DataArrayInt() ; aa=a.getHeapMemorySize()
1982         a.alloc(0,1)
1983         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
1984         #
1985         m=MEDCouplingCMesh()
1986         arr=DataArrayDouble(10,1) ; arr.iota(0)
1987         m.setCoords(arr,arr)
1988         m=m.buildUnstructured()
1989         m.setName("mm")
1990         f=m.getMeasureField(ON_CELLS)
1991         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100+4*strMulFac))
1992         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100+8*strMulFac))
1993         #
1994         mm=MEDFileUMesh()
1995         mm.setMeshAtLevel(0,m)
1996         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100+10*strMulFac))
1997         ff=MEDFileField1TS()
1998         ff.setFieldNoProfileSBT(f)
1999         self.assertIn(ff.getHeapMemorySize(),xrange(771-40,771+21+(4+1)*strMulFac))
2000         #
2001         fff=MEDFileFieldMultiTS()
2002         fff.appendFieldNoProfileSBT(f)
2003         self.assertIn(fff.getHeapMemorySize(),xrange(815-50,815+30+(6+2)*strMulFac))
2004         f.setTime(1.,0,-1)
2005         fff.appendFieldNoProfileSBT(f)
2006         self.assertIn(fff.getHeapMemorySize(),xrange(1594-90,1594+50+(10+1)*strMulFac))
2007         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(771-40,771+20+(4+1)*strMulFac))
2008         f2=f[:50]
2009         f2.setTime(2.,1,-1)
2010         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2011         fff.appendFieldProfile(f2,mm,0,pfl)
2012         self.assertIn(fff.getHeapMemorySize(),xrange(2348-130,2348+100+(10+2)*strMulFac))
2013         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(),xrange(204-10,204+10+2*strMulFac))
2014         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(738-50,738+30+4*strMulFac))
2015         pass
2016
2017     def testCurveLinearMesh1(self):
2018         fname="Pyfile55.med"
2019         mesh=MEDCouplingCurveLinearMesh();
2020         mesh.setTime(2.3,4,5);
2021         mesh.setTimeUnit("us");
2022         mesh.setName("Example of Cuve linear mesh");
2023         mesh.setDescription("buildCLMesh");
2024         a1=DataArrayDouble(3*20,1);
2025         a1.iota(7.) ; a1.rearrange(3);
2026         mesh.setCoords(a1);
2027         mesh.setNodeGridStructure([4,5]);
2028         mesh.checkCoherency();
2029         #
2030         m=MEDFileCurveLinearMesh()
2031         m.setMesh(mesh)
2032         d=DataArrayInt(20) ; d.iota(4)
2033         m.setFamilyFieldArr(1,d)
2034         d3=DataArrayInt(20) ; d3.iota(400)
2035         m.setRenumFieldArr(1,d3)
2036         d2=DataArrayInt(12) ; d2.iota(40)
2037         m.setFamilyFieldArr(0,d2)
2038         d4=DataArrayInt(21) ; d4.iota(4000)
2039         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2040         d4.popBackSilent()
2041         m.setRenumFieldArr(1,d4)
2042         m.write(fname,2)
2043         #
2044         m1=MEDFileCurveLinearMesh(fname)
2045         mm=m1.getMesh()
2046         self.assertTrue(mm.isEqual(mesh,1e-12))
2047         self.assertEqual(mm.getSpaceDimension(),3)
2048         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2049         #
2050         m1=MEDFileMesh.New(fname)
2051         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2052         self.assertTrue(isinstance(m1.getUnivName(),str))
2053         self.assertTrue(len(m1.getUnivName())!=0)
2054         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2055         pass
2056
2057     def testParameters1(self):
2058         fname="Pyfile56.med"
2059         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2060         mm=MEDFileCMesh() ; mm.setMesh(m)
2061         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2062         data=MEDFileData()
2063         p=MEDFileParameters()
2064         data.setParams(p) ; data.setMeshes(ms)
2065         pts=MEDFileParameterMultiTS()
2066         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2067         pts.appendValue(1,2,3.4,567.89)
2068         pts.appendValue(2,3,5.6,999.123)
2069         pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2070         p.pushParam(pts) ; p.pushParam(pts2)
2071         data.write(fname,2)
2072         p2=MEDFileParameters(fname)
2073         self.assertTrue(p.isEqual(p2,1e-14)[0])
2074         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2075         p3=p.deepCpy()
2076         pts4=pts2.deepCpy()
2077         pts3=pts2.deepCpy()
2078         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2079         pts2.eraseTimeStepIds([0])
2080         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2081         del pts3[[3.4]]
2082         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2083         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2084         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2085         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2086         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2087         p=p3
2088         self.assertTrue(p.isEqual(p2,1e-14)[0])
2089         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2090         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2091         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2092         self.assertEqual(p.getParamsNames(),('A','B'))
2093         ptsr=MEDFileParameterMultiTS(fname,"B")
2094         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2095         ptsr=MEDFileParameterMultiTS(fname)
2096         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2097         p1tsr=MEDFileParameterDouble1TS(fname)
2098         self.assertEqual(p1tsr.getName(),"A")
2099         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2100         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2101         self.assertEqual(p1tsr.getName(),"B")
2102         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2103         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2104         self.assertEqual(p1tsr.getName(),"B")
2105         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2106         data2=MEDFileData(fname)
2107         self.assertEqual(2,data2.getNumberOfParams())
2108         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2109         pass
2110
2111     def testNamesOnCellAndNodesInMeshes1(self):
2112         fname="Pyfile58.med"
2113         fname2="Pyfile59.med"
2114         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2115         m1=m.buildDescendingConnectivity()[0]
2116         m1.sortCellsInMEDFileFrmt()
2117         #
2118         mm=MEDFileUMesh()
2119         mm.setMeshAtLevel(0,m)
2120         mm.setMeshAtLevel(-1,m1)
2121         namesCellL0=DataArrayAsciiChar(6,16)
2122         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2123         mm.setNameFieldAtLevel(0,namesCellL0)
2124         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.substr(2)])
2125         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2126         mm.setNameFieldAtLevel(-1,namesCellL1)
2127         namesNodes=namesCellL1.substr(4,16)
2128         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2129         mm.setNameFieldAtLevel(1,namesNodes)
2130         mm.write(fname,2)
2131         #
2132         mmr=MEDFileMesh.New(fname)
2133         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2134         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2135         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2136         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2137         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2138         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2139         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2140         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2141         mmCpy=mm.deepCpy()
2142         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2143         # remove names on nodes
2144         mmCpy.setNameFieldAtLevel(1,None)
2145         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2146         mm.setNameFieldAtLevel(1,None)
2147         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2148         mm.setNameFieldAtLevel(-1,None)
2149         mm.write(fname,2)
2150         mmr=MEDFileMesh.New(fname)
2151         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2152         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2153         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2154         #
2155         c=MEDCouplingCMesh()
2156         arr=DataArrayDouble([0.,1.1,2.3])
2157         c.setCoords(arr,arr)
2158         c.setName("cmesh")
2159         cc=MEDFileCMesh()
2160         cc.setMesh(c)
2161         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2162         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2163         cc.write(fname2,2)
2164         ccr=MEDFileMesh.New(fname2)
2165         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2166         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2167         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2168         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2169         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2170         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2171         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2172         ccCpy=cc.deepCpy()
2173         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2174         pass
2175
2176     def testToExportInExamples1(self):
2177         m=MEDCouplingCMesh()
2178         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2179         m.setCoords(arr,arr)
2180         m=m.buildUnstructured() ; m.setName("mesh")
2181         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2182         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2183         m2=m.computeSkin()
2184         mm=MEDFileUMesh()
2185         mm.setMeshAtLevel(0,m)
2186         mm.setMeshAtLevel(-1,m2)
2187         mm.setGroupsAtLevel(0,[grp1,grp2])
2188         mm.write("example.med",2)
2189         #
2190         m0=mm.getMeshAtLevel(0)
2191         m1=mm.getMeshAtLevel(-1)
2192         grp1=mm.getGroupArr(0,"grp1")
2193         grp2=mm.getGroupArr(0,"grp2")
2194         grps=[grp1,grp2]
2195         whichGrp=DataArrayInt(m0.getNumberOfCells())
2196         whichGrp.fillWithValue(-1)
2197         for grpId,grp in enumerate(grps):
2198             whichGrp[grp]=grpId
2199             pass
2200         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2201         e,f=a.areCellsIncludedIn(m1,2)
2202         self.assertTrue(e)
2203         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2204         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2205         c2.transformWithIndArr(whichGrp)
2206         splitOfM1=len(grps)*[None]
2207         for grpId,grp in enumerate(grps):
2208             tmp=c2.getIdsEqual(grpId)
2209             splitOfM1[grpId]=tmp
2210             pass
2211         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2212         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2213         pass
2214
2215     def testBugCorrection1(self):
2216         fs=MEDFileFields()
2217         fs.resize(3)
2218         self.assertEqual(fs[0],None)
2219         self.assertEqual(3,len(fs))
2220         pass
2221
2222     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2223         f1Name="Pyfile60.med"
2224         f2Name="Pyfile61.med"
2225         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2226         d1.write(f1Name,2)
2227         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2228         d2.write(f2Name,2)
2229         # reading and compare
2230         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2231         for mn in d1.getMeshes().getMeshesNames():
2232             m1=d1.getMeshes()[mn]
2233             m2=d2.getMeshes()[mn]
2234             for lev in m1.getNonEmptyLevels():
2235                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2236                 for grpName in grpsNames:
2237                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2238                     pass
2239                 pass
2240             pass
2241         for fieldn in d1.getFields().getFieldsNames():
2242             f1=d1.getFields()[fieldn]
2243             f2=d2.getFields()[fieldn]
2244             for it,order,tim in f1.getTimeSteps():
2245                 f1t=f1[it,order]
2246                 f2t=f2[it,order]
2247                 if len(f1t.getPflsReallyUsed())!=0:
2248                     # profile case
2249                     for lev in f1t.getNonEmptyLevels()[1]:
2250                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2251                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2252                         self.assertTrue(pfl1.isEqual(pfl2))
2253                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2254                         pass
2255                     pass
2256                 else:
2257                     # no profile case
2258                     for lev in f1t.getNonEmptyLevels()[1]:
2259                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2260                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2261                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2262                         pass
2263                     pass
2264                 pass
2265             pass
2266         pass
2267
2268     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2269         m=MEDCouplingCMesh()
2270         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2271         m.setCoords(arr,arr,arr)
2272         m=m.buildUnstructured()
2273         m2=m.buildDescendingConnectivity()[0]
2274         m.setName("mesh")
2275         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2276         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2277         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2278         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2279         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2280         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2281         mm=MEDFileUMesh()
2282         mm.setMeshAtLevel(0,m)
2283         mm.setGroupsAtLevel(0,[g1,g2])
2284         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2285         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2286         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2287         mm.normalizeFamIdsMEDFile()
2288         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2289         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2290         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2291         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2292         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2293         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2294         for g in mm.getGroupsOnSpecifiedLev(0):
2295             for f in mm.getFamiliesIdsOnGroup(g):
2296                 self.assertTrue(f<0)
2297                 pass
2298             pass
2299         #
2300         mm=MEDFileUMesh()
2301         mm.setMeshAtLevel(0,m)
2302         mm.setMeshAtLevel(-1,m2)
2303         mm.setGroupsAtLevel(0,[g1,g2])
2304         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2305         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2306         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2307         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2308         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2309         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2310         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2311         mm.normalizeFamIdsMEDFile()
2312         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2313         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2314         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2315         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2316         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2317         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2318         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2319         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2320         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2321         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2322         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2323         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2324         for lev in [0,-1]:
2325             for g in mm.getGroupsOnSpecifiedLev(lev):
2326                 for f in mm.getFamiliesIdsOnGroup(g):
2327                     self.assertTrue(f<0)
2328                     pass
2329                 pass
2330             pass
2331          #
2332         mm=MEDFileUMesh()
2333         mm.setMeshAtLevel(0,m)
2334         mm.setMeshAtLevel(-1,m2)
2335         mm.setGroupsAtLevel(0,[g1,g2])
2336         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2337         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2338         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2339         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2340         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2341         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2342         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2343         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2344         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2345         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2346         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2347         mm.normalizeFamIdsMEDFile()
2348         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2349         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2350         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2351         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2352         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2353         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2354         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2355         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2356         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2357         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2358         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2359         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2360         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2361         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2362         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2363         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2364         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2365         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2366         for lev in [0,-1]:
2367             for g in mm.getGroupsOnSpecifiedLev(lev):
2368                 for f in mm.getFamiliesIdsOnGroup(g):
2369                     self.assertTrue(f<0)
2370                     pass
2371                 pass
2372             pass
2373         for g in mm.getGroupsOnSpecifiedLev(1):
2374             for f in mm.getFamiliesIdsOnGroup(g):
2375                 self.assertTrue(f>0)
2376                 pass
2377             pass
2378         pass
2379     
2380     def testNonRegressionMantis22212ChangeGrpName(self):
2381         fileName="Pyfile62.med"
2382         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2383         m=MEDFileUMesh.New()
2384         m.setCoords(m2.getCoords())
2385         m.setMeshAtLevel(0,m2)
2386         m.setMeshAtLevel(-1,m1)
2387         m.setMeshAtLevel(-2,m0)
2388         m.setFamilyFieldArr(0,f2)
2389         m.setFamilyFieldArr(-1,f1)
2390         m.setFamilyFieldArr(-2,f0)
2391         m.setFamilyFieldArr(1,p)
2392         nbOfFams=len(fns)
2393         for i in xrange(nbOfFams):
2394             m.addFamily(fns[i],fids[i])
2395             pass
2396         nbOfGrps=len(grpns)
2397         for i in xrange(nbOfGrps):
2398             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2399             pass
2400         m.setName(m2.getName())
2401         m.setDescription(m2.getDescription())
2402         m.write(fileName,2)
2403         #
2404         mm0=MEDFileMesh.New(fileName)
2405         mm1=MEDFileMesh.New(fileName)
2406         groupNamesIni=MEDLoader.GetMeshGroupsNames(fileName,"ma")
2407         for name in groupNamesIni:
2408             mm1.changeGroupName(name,name+'N')
2409             pass
2410         mm1.write(fileName,2)
2411         del mm1
2412         #
2413         mm2=MEDFileMesh.New(fileName)
2414         for name in groupNamesIni:
2415             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2416                 arr0=mm0.getGroupArr(lev,name)
2417                 arr2=mm2.getGroupArr(lev,name+'N')
2418                 arr0.setName(name+'N')
2419                 self.assertTrue(arr0.isEqual(arr2))
2420                 pass
2421             pass
2422         pass
2423
2424     def testInt32InMEDFileFieldStar1(self):
2425         fname="Pyfile63.med"
2426         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2427         arr=f1.getArray().convertToIntArr()
2428         f1.setArray(None)
2429         m1=f1.getMesh()
2430         mm1=MEDFileUMesh.New()
2431         mm1.setCoords(m1.getCoords())
2432         mm1.setMeshAtLevel(0,m1)
2433         mm1.setName(m1.getName())
2434         mm1.write(fname,2)
2435         ff1=MEDFileIntField1TS()
2436         ff1.setFieldNoProfileSBT(f1,arr)
2437         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2438         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2439         self.assertTrue(b.isEqual(arr))
2440         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2441         ff1.write(fname,0)
2442         ff2=MEDFileAnyTypeField1TS.New(fname)
2443         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2444         self.assertEqual(ff2.getTime(),[0,1,2.0])
2445         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2446         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2447         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2448         self.assertTrue(b.isEqual(arr))
2449         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2450         ff2.setTime(1,2,3.)
2451         c=ff2.getUndergroundDataArray() ; c*=2
2452         ff2.write(fname,0) # 2 time steps in 
2453         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2454         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2455         self.assertEqual(len(ffs1),2)
2456         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
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         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2461         self.assertTrue(b.isEqual(arr))
2462         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2463         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2464         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2465         self.assertTrue(b.isEqual(2*arr))
2466         f1.setTime(3.,1,2)
2467         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2468         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2469         for it in ffs1:
2470             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2471             bc+=b
2472             pass
2473         self.assertTrue(bc.isEqual(3*arr))
2474         nf1=MEDCouplingFieldDouble(ON_NODES)
2475         nf1.setTime(9.,10,-1)
2476         nf1.setMesh(f1.getMesh())
2477         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2478         nf1.setName("VectorFieldOnNodes")
2479         nff1=MEDFileIntField1TS.New()
2480         nff1.setFieldNoProfileSBT(nf1,narr)
2481         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2482         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2483         nff1.write(fname,0)
2484         #
2485         nf2=MEDCouplingFieldDouble(ON_NODES)
2486         nf2.setTime(19.,20,-11)
2487         nf2.setMesh(f1.getMesh())
2488         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2489         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2490         nff2=MEDFileIntField1TS.New()
2491         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2492         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2493         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2494         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2495         self.assertTrue(b.isEqual(npfl))
2496         self.assertTrue(a.isEqual(narr2))
2497         nff2.write(fname,0)
2498         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2499         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2500         self.assertTrue(b.isEqual(npfl))
2501         self.assertTrue(a.isEqual(narr2))
2502         #
2503         nf3=MEDCouplingFieldDouble(ON_NODES)
2504         nf3.setName("VectorFieldOnNodesDouble")
2505         nf3.setTime(29.,30,-21)
2506         nf3.setMesh(f1.getMesh())
2507         nf3.setArray(f1.getMesh().getCoords())
2508         nff3=MEDFileField1TS.New()
2509         nff3.setFieldNoProfileSBT(nf3)
2510         nff3.write(fname,0)
2511         fs=MEDFileFields(fname)
2512         self.assertEqual(len(fs),4)
2513         ffs=[it for it in fs]
2514         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2515         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2516         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2517         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2518         #
2519         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2520         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2521         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2522         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2523         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2524         #
2525         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2526         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2527         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2528         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2529         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2530         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2531         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2532         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2533         #
2534         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2535         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2536         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2537         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2538         pass
2539
2540     def testMEDFileFields1(self):
2541         fname="Pyfile64.med"
2542         f1=MEDCouplingFieldDouble(ON_NODES)
2543         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2544         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2545         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2546         f1.setMesh(m)
2547         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2548         f1.setArray(arr)
2549         f1.setName("Field1")
2550         ff1=MEDFileField1TS.New()
2551         ff1.setFieldNoProfileSBT(f1)
2552         self.assertEqual(ff1.getDtUnit(),"us")
2553         ff1.write(fname,0)
2554         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2555         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2556         #
2557         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2558         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2559         ff1s.setName("Field2")
2560         ff1s.write(fname,0)
2561         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2562         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2563         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2564         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2565         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2566         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2567         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2568         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2569         pass
2570
2571     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2572     def testMEDFileFields2(self):
2573         fname="Pyfile65.med"
2574         # to check that all is initialize 
2575         MEDFileField1TS().__str__()
2576         MEDFileFieldMultiTS().__str__()
2577         # building a mesh containing 4 tri3 + 5 quad4
2578         tri=MEDCouplingUMesh("tri",2)
2579         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2580         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2581         tris=[tri.deepCpy() for i in xrange(4)]
2582         for i,elt in enumerate(tris): elt.translate([i,0])
2583         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2584         quad=MEDCouplingUMesh("quad",2)
2585         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2586         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2587         quads=[quad.deepCpy() for i in xrange(5)]
2588         for i,elt in enumerate(quads): elt.translate([5+i,0])
2589         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2590         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2591         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2592         #
2593         fmts0_0=MEDFileFieldMultiTS()
2594         fmts0_1=MEDFileFieldMultiTS()
2595         # time steps
2596         for i in xrange(10):
2597             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2598             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2599             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2600             f.setTime(float(i+1)+0.1,i+1,-i-1)
2601             fmts0_0.appendFieldNoProfileSBT(f)
2602             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2603             self.assertEqual(fmts0_1.getName(),name1)
2604             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2605             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2606             if i>1:
2607                 # components names have been modified to generate errors
2608                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2609                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2610                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2611                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2612                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2613                 pass
2614             # add a mismatch of nb of compos
2615             pass
2616         fmts0_2=fmts0_0.deepCpy()
2617         fmts0_3=fmts0_0.deepCpy()
2618         fmts0_4=fmts0_0.deepCpy()
2619         fmts0_5=fmts0_0.shallowCpy()
2620         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)
2621         del fmts0_2[::2]
2622         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2623         del fmts0_3[[1.1,(6,-6),9]]
2624         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2625         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2626         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2627         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2628         fmts0_7=fmts0_4[::-3]
2629         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2630         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2631         #
2632         fs0=MEDFileFields()
2633         fs0.pushField(fmts0_0)
2634         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2635         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2636         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2637         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2638         fs0.write(fname,2)
2639         fs0=MEDFileFields(fname)
2640         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2641         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2642         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2643         del fs1[["2ndField",3]]
2644         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2645         fs2=fs0[[0,"4thField"]]
2646         self.assertTrue(isinstance(fs2,MEDFileFields))
2647         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2648         #
2649         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2650         pass
2651
2652     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2653     def testMEDFileFields3(self):
2654         fname="Pyfile66.med"
2655         # building a mesh containing 4 tri3 + 5 quad4
2656         tri=MEDCouplingUMesh("tri",2)
2657         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2658         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2659         tris=[tri.deepCpy() for i in xrange(4)]
2660         for i,elt in enumerate(tris): elt.translate([i,0])
2661         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2662         quad=MEDCouplingUMesh("quad",2)
2663         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2664         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2665         quads=[quad.deepCpy() for i in xrange(5)]
2666         for i,elt in enumerate(quads): elt.translate([5+i,0])
2667         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2668         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2669         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2670         #
2671         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2672         #
2673         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2674         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2675         fmts0_0=MEDFileFieldMultiTS()
2676         fmts0_1=MEDFileFieldMultiTS()
2677         # time steps
2678         for i in xrange(10):
2679             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2680             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2681             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2682             f.setTime(float(i+1)+0.1,i+1,-i-1)
2683             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2684             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2685             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2686             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2687             pass
2688         #
2689         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2690         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2691         fmts0_0.zipPflsNames()
2692         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2693         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2694         fmts0_2=fmts0_0.deepCpy()
2695         fmts0_3=fmts0_0.deepCpy()
2696         fmts0_4=fmts0_0.deepCpy()
2697         fs0=MEDFileFields()
2698         fs0.pushField(fmts0_0)
2699         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2700         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2701         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2702         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2703         #
2704         fmts0_5=MEDFileFieldMultiTS()
2705         for i in xrange(7):
2706             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2707             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2708             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2709             f.setTime(float(i+1)+0.1,i+1,-i-1)
2710             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2711             pass
2712         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2713         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2714         fs0.checkGlobsCoherency()
2715         fs0.write(fname,0)
2716         pass
2717     
2718     def testSplitComponents1(self):
2719         fname="Pyfile67.med"
2720         # building a mesh containing 4 tri3 + 5 quad4
2721         tri=MEDCouplingUMesh("tri",2)
2722         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2723         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2724         tris=[tri.deepCpy() for i in xrange(4)]
2725         for i,elt in enumerate(tris): elt.translate([i,0])
2726         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2727         quad=MEDCouplingUMesh("quad",2)
2728         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2729         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2730         quads=[quad.deepCpy() for i in xrange(5)]
2731         for i,elt in enumerate(quads): elt.translate([5+i,0])
2732         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2733         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2734         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2735         #
2736         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2737         #
2738         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2739         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2740         fs=MEDFileFields()
2741         fmts0_1=MEDFileFieldMultiTS()
2742         # time steps
2743         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2744         for i in xrange(10):
2745             name1="1stField"
2746             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2747             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2748             f.setTime(float(i+1)+0.1,i+1,-i-1)
2749             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2750             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2751             pass
2752         fs.pushField(fmts0_1)
2753         self.assertEqual(1,len(fs))
2754         l=fmts0_1.splitComponents()
2755         self.assertEqual(3,len(l))
2756         for elt in l: self.assertEqual(10,len(elt))
2757         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2758         for elt in l:
2759             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2760             pass
2761         fs.pushFields(l)
2762         self.assertEqual(4,len(fs))
2763         for elt in fs: self.assertEqual(10,len(elt))
2764         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2765         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2766         #
2767         fs.write(fname,0) ; del fs
2768         #
2769         fs1=MEDFileFields(fname)
2770         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2771         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2772         self.assertEqual(4,len(fs1))
2773         for i in xrange(10):
2774             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2775                 f1ts=fs1[fieldName][i]
2776                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2777                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2778                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2779                 pass
2780             f1ts=fs1["1stField"][i]
2781             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2782             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2783             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2784             pass
2785         pass
2786
2787     def testMEDFileFieldConvertTo1(self):
2788         fname="Pyfile68.med"
2789         # building a mesh containing 4 tri3 + 5 quad4
2790         tri=MEDCouplingUMesh("tri",2)
2791         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2792         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2793         tris=[tri.deepCpy() for i in xrange(4)]
2794         for i,elt in enumerate(tris): elt.translate([i,0])
2795         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2796         quad=MEDCouplingUMesh("quad",2)
2797         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2798         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2799         quads=[quad.deepCpy() for i in xrange(5)]
2800         for i,elt in enumerate(quads): elt.translate([5+i,0])
2801         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2802         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2803         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2804         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2805         #
2806         ff0=MEDFileField1TS()
2807         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")
2808         f0.checkCoherency()
2809         ff0.setFieldNoProfileSBT(f0)
2810         #
2811         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2812         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2813         #
2814         ff0i=ff0.convertToInt()
2815         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2816         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2817         #
2818         ff1=ff0i.convertToDouble()
2819         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2820         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2821         # With profiles
2822         del arr,f0,ff0,ff1,ff0i,fspExp
2823         ff0=MEDFileField1TS()
2824         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")
2825         f0.checkCoherency()
2826         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2827         ff0.setFieldProfile(f0,mm,0,pfl)
2828         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2829         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2830         #
2831         ff0i=ff0.convertToInt()
2832         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2833         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2834         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2835         #
2836         ff1=ff0i.convertToDouble()
2837         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2838         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2839         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2840         ## MultiTimeSteps
2841         ff0=MEDFileFieldMultiTS()
2842         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)
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(100) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(1.1,1,11)
2846         f0.checkCoherency()
2847         ff0.appendFieldProfile(f0,mm,0,pfl)
2848         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)
2849         f0.checkCoherency()
2850         ff0.appendFieldProfile(f0,mm,0,pfl)
2851         ff1=ff0.convertToInt()
2852         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2853         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2854         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2855             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2856             arr=ff1.getUndergroundDataArray(dt,it)
2857             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2858             pass
2859         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2860         #
2861         mm.write(fname,2)
2862         ff1.write(fname,0)
2863         #
2864         ff1=ff1.convertToDouble()
2865         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
2866         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2867         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2868             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
2869             arr=ff1.getUndergroundDataArray(dt,it)
2870             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
2871             pass
2872         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
2873         #
2874         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
2875         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
2876         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
2877         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
2878             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
2879             arr=ff1.getUndergroundDataArray(dt,it)
2880             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
2881             pass
2882         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
2883         pass
2884
2885     def testMEDFileFieldPartialLoading(self):
2886         fname="Pyfile69.med"
2887         #
2888         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2889         a.alloc(0,1)
2890         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2891         # building a mesh containing 30 tri3 + 40 quad4
2892         tri=MEDCouplingUMesh("tri",2)
2893         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2894         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2895         tris=[tri.deepCpy() for i in xrange(30)]
2896         for i,elt in enumerate(tris): elt.translate([i,0])
2897         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2898         quad=MEDCouplingUMesh("quad",2)
2899         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2900         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2901         quads=[quad.deepCpy() for i in xrange(40)]
2902         for i,elt in enumerate(quads): elt.translate([40+i,0])
2903         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2904         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2905         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2906         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2907         #
2908         ff0=MEDFileField1TS()
2909         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")
2910         f0.checkCoherency()
2911         ff0.setFieldNoProfileSBT(f0)
2912         ff0.write(fname,0)
2913         #
2914         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
2915         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2916         # With profiles
2917         ff0=MEDFileField1TS()
2918         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")
2919         f0.checkCoherency()
2920         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2921         ff0.setFieldProfile(f0,mm,0,pfl)
2922         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
2923         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2924         ff0.write(fname,0)
2925         #
2926         ff0=MEDFileField1TS(fname,False)
2927         self.assertEqual(ff0.getName(),"FieldCell")
2928         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
2929         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
2930         heap_memory_ref=ff0.getHeapMemorySize()
2931         self.assertIn(heap_memory_ref,xrange(182,298+2*strMulFac))
2932         ff0.loadArrays() ##
2933         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
2934         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2935         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
2936         #
2937         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
2938         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
2939         heap_memory_ref=ff0.getHeapMemorySize()
2940         self.assertIn(heap_memory_ref,xrange(350,415+6*strMulFac))
2941         ff0.loadArrays() ##
2942         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
2943         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2944         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2945         ff0.loadArrays() ##
2946         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2947         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2948         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2949         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2950         ff0.loadArrays() ##
2951         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2952         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
2953         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2954         ff0.loadArraysIfNecessary() ##
2955         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
2956         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2957         heap_memory_ref=ff0.getHeapMemorySize()
2958         self.assertIn(heap_memory_ref,xrange(1100,1215+2*strMulFac))
2959         ff0.unloadArrays()
2960         hmd=ff0.getHeapMemorySize()-heap_memory_ref
2961         self.assertEqual(hmd,-800) # -50*8*2
2962         ff0.loadArrays() ##
2963         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
2964         #
2965         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
2966         heap_memory_ref=ff0.getHeapMemorySize()
2967         self.assertIn(heap_memory_ref,xrange(299,415+6*strMulFac))
2968         ff0.loadArrays() ##
2969         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
2970         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
2971         #
2972         fieldName="FieldCellMultiTS"
2973         ff0=MEDFileFieldMultiTS()
2974         for t in xrange(20):
2975             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)
2976             f0.setTime(float(t)+0.1,t,100+t)
2977             f0.checkCoherency()
2978             ff0.appendFieldNoProfileSBT(f0)
2979             pass
2980         ff0.write(fname,0)
2981         #
2982         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
2983         heap_memory_ref=ff0.getHeapMemorySize()
2984         self.assertIn(heap_memory_ref,xrange(5536,5956+(80+26)*strMulFac))
2985         ff0.loadArrays()
2986         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
2987         del ff0
2988         #
2989         ffs=MEDFileFields(fname,False)
2990         heap_memory_ref=ffs.getHeapMemorySize()
2991         self.assertIn(heap_memory_ref,xrange(5335,6687+(80+50)*strMulFac))
2992         ffs.loadArrays()
2993         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
2994         pass
2995
2996     def testMEDFileMeshReadSelector1(self):
2997         mrs=MEDFileMeshReadSelector()
2998         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
2999         mrs.__str__() ; mrs.__repr__()
3000         #
3001         mrs=MEDFileMeshReadSelector(0)
3002         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())
3003         mrs=MEDFileMeshReadSelector(1)
3004         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3005         mrs=MEDFileMeshReadSelector(2)
3006         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3007         mrs=MEDFileMeshReadSelector(3)
3008         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3009         mrs=MEDFileMeshReadSelector(4)
3010         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3011         mrs=MEDFileMeshReadSelector(5)
3012         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3013         mrs=MEDFileMeshReadSelector(6)
3014         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3015         mrs=MEDFileMeshReadSelector(7)
3016         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3017         mrs=MEDFileMeshReadSelector(8)
3018         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3019         mrs=MEDFileMeshReadSelector(9)
3020         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3021         mrs=MEDFileMeshReadSelector(10)
3022         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3023         mrs=MEDFileMeshReadSelector(11)
3024         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3025         mrs=MEDFileMeshReadSelector(12)
3026         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3027         mrs=MEDFileMeshReadSelector(13)
3028         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3029         mrs=MEDFileMeshReadSelector(14)
3030         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3031         mrs=MEDFileMeshReadSelector(15)
3032         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3033         mrs=MEDFileMeshReadSelector(16)
3034         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3035         mrs=MEDFileMeshReadSelector(17)
3036         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3037         mrs=MEDFileMeshReadSelector(18)
3038         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3039         mrs=MEDFileMeshReadSelector(19)
3040         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3041         mrs=MEDFileMeshReadSelector(20)
3042         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3043         mrs=MEDFileMeshReadSelector(21)
3044         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3045         mrs=MEDFileMeshReadSelector(22)
3046         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3047         mrs=MEDFileMeshReadSelector(23)
3048         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3049         mrs=MEDFileMeshReadSelector(24)
3050         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3051         mrs=MEDFileMeshReadSelector(25)
3052         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3053         mrs=MEDFileMeshReadSelector(26)
3054         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3055         mrs=MEDFileMeshReadSelector(27)
3056         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3057         mrs=MEDFileMeshReadSelector(28)
3058         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3059         mrs=MEDFileMeshReadSelector(29)
3060         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3061         mrs=MEDFileMeshReadSelector(30)
3062         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3063         mrs=MEDFileMeshReadSelector(31)
3064         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3065         mrs=MEDFileMeshReadSelector(32)
3066         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3067         mrs=MEDFileMeshReadSelector(33)
3068         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3069         mrs=MEDFileMeshReadSelector(34)
3070         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3071         mrs=MEDFileMeshReadSelector(35)
3072         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3073         mrs=MEDFileMeshReadSelector(36)
3074         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3075         mrs=MEDFileMeshReadSelector(37)
3076         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3077         mrs=MEDFileMeshReadSelector(38)
3078         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3079         mrs=MEDFileMeshReadSelector(39)
3080         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3081         mrs=MEDFileMeshReadSelector(40)
3082         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3083         mrs=MEDFileMeshReadSelector(41)
3084         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3085         mrs=MEDFileMeshReadSelector(42)
3086         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3087         mrs=MEDFileMeshReadSelector(43)
3088         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3089         mrs=MEDFileMeshReadSelector(44)
3090         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3091         mrs=MEDFileMeshReadSelector(45)
3092         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3093         mrs=MEDFileMeshReadSelector(46)
3094         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3095         mrs=MEDFileMeshReadSelector(47)
3096         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3097         mrs=MEDFileMeshReadSelector(48)
3098         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3099         mrs=MEDFileMeshReadSelector(49)
3100         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3101         mrs=MEDFileMeshReadSelector(50)
3102         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3103         mrs=MEDFileMeshReadSelector(51)
3104         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3105         mrs=MEDFileMeshReadSelector(52)
3106         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3107         mrs=MEDFileMeshReadSelector(53)
3108         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3109         mrs=MEDFileMeshReadSelector(54)
3110         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3111         mrs=MEDFileMeshReadSelector(55)
3112         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3113         mrs=MEDFileMeshReadSelector(56)
3114         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3115         mrs=MEDFileMeshReadSelector(57)
3116         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3117         mrs=MEDFileMeshReadSelector(58)
3118         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3119         mrs=MEDFileMeshReadSelector(59)
3120         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3121         mrs=MEDFileMeshReadSelector(60)
3122         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3123         mrs=MEDFileMeshReadSelector(61)
3124         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3125         mrs=MEDFileMeshReadSelector(62)
3126         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3127         mrs=MEDFileMeshReadSelector(63)
3128         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3129         #
3130         mrs=MEDFileMeshReadSelector(63)
3131         mrs.setCellFamilyFieldReading(False)
3132         self.assertEqual(mrs.getCode(),62)
3133         mrs.setCellFamilyFieldReading(True)
3134         self.assertEqual(mrs.getCode(),63)
3135         mrs.setNodeFamilyFieldReading(False)
3136         self.assertEqual(mrs.getCode(),61)
3137         mrs.setNodeFamilyFieldReading(True)
3138         self.assertEqual(mrs.getCode(),63)
3139         mrs.setCellNameFieldReading(False)
3140         self.assertEqual(mrs.getCode(),59)
3141         mrs.setCellNameFieldReading(True)
3142         self.assertEqual(mrs.getCode(),63)
3143         mrs.setNodeNameFieldReading(False)
3144         self.assertEqual(mrs.getCode(),55)
3145         mrs.setNodeNameFieldReading(True)
3146         self.assertEqual(mrs.getCode(),63)
3147         mrs.setCellNumFieldReading(False)
3148         self.assertEqual(mrs.getCode(),47)
3149         mrs.setCellNumFieldReading(True)
3150         self.assertEqual(mrs.getCode(),63)
3151         mrs.setNodeNumFieldReading(False)
3152         self.assertEqual(mrs.getCode(),31)
3153         mrs.setNodeNumFieldReading(True)
3154         self.assertEqual(mrs.getCode(),63)
3155         pass
3156     
3157     def testPartialReadOfMeshes(self):
3158         fname="Pyfile70.med"
3159         # building a mesh containing 4 tri3 + 5 quad4
3160         tri=MEDCouplingUMesh("tri",2)
3161         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3162         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3163         tris=[tri.deepCpy() for i in xrange(4)]
3164         for i,elt in enumerate(tris): elt.translate([i,0])
3165         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3166         quad=MEDCouplingUMesh("quad",2)
3167         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3168         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3169         quads=[quad.deepCpy() for i in xrange(5)]
3170         for i,elt in enumerate(quads): elt.translate([5+i,0])
3171         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3172         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3173         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3174         m1=m.buildDescendingConnectivity()[0]
3175         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3176         #
3177         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3178         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3179         mm.setGroupsAtLevel(0,[grp0,grp1])
3180         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3181         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3182         mm.setGroupsAtLevel(-1,[grp2,grp3])
3183         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3184         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3185         mm.setGroupsAtLevel(1,[grp4,grp5])
3186         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3187         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3188         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3189         #
3190         mm.write(fname,2)
3191         ##
3192         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3193         b4_ref_heap_mem=mm.getHeapMemorySize()
3194         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3195         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3196         ref_heap_mem=mm.getHeapMemorySize()
3197         # check the gain of memory using 1GTUMesh instead of UMesh
3198         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
3199         #
3200         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3201         self.assertEqual(len(mm.getGroupsNames()),0)
3202         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3203         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3204         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3205         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3206         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3207         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3208         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3209         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3210         delta1=ref_heap_mem-mm.getHeapMemorySize()
3211         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3212         #
3213         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3214         self.assertEqual(len(mm.getGroupsNames()),6)
3215         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3216         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3217         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3218         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3219         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3220         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3221         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3222         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3223         delta2=ref_heap_mem-mm.getHeapMemorySize()
3224         self.assertTrue(delta2<delta1)
3225         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3226         #
3227         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3228         self.assertEqual(len(mm.getGroupsNames()),6)
3229         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3230         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3231         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3232         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3233         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3234         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3235         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3236         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3237         delta3=ref_heap_mem-mm.getHeapMemorySize()
3238         self.assertTrue(delta3<delta2)
3239         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3240         #
3241         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3242         self.assertEqual(len(mm.getGroupsNames()),6)
3243         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3244         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3245         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3246         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3247         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3248         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3249         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3250         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3251         delta4=ref_heap_mem-mm.getHeapMemorySize()
3252         self.assertTrue(delta4<delta3)
3253         self.assertTrue(delta4>=32*4*2)
3254         #
3255         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3256         self.assertEqual(len(mm.getGroupsNames()),6)
3257         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3258         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3259         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3260         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3261         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3262         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3263         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3264         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3265         delta5=ref_heap_mem-mm.getHeapMemorySize()
3266         self.assertTrue(delta5<delta4)
3267         self.assertEqual(delta5,0)
3268         pass
3269
3270     # this test checks that setFieldProfile perform a check of the array length
3271     # compared to the profile length. This test also checks that mesh attribute of field
3272     # is not used by setFieldProfile (because across this test mesh is equal to None)
3273     def testCheckCompatibilityPfl1(self):
3274         # building a mesh containing 4 tri3 + 5 quad4
3275         tri=MEDCouplingUMesh("tri",2)
3276         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3277         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3278         tris=[tri.deepCpy() for i in xrange(4)]
3279         for i,elt in enumerate(tris): elt.translate([i,0])
3280         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3281         quad=MEDCouplingUMesh("quad",2)
3282         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3283         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3284         quads=[quad.deepCpy() for i in xrange(5)]
3285         for i,elt in enumerate(quads): elt.translate([5+i,0])
3286         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3287         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3288         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3289         m1=m.buildDescendingConnectivity()[0]
3290         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3291         #
3292         f1ts=MEDFileField1TS()
3293         f=MEDCouplingFieldDouble(ON_NODES)
3294         vals=DataArrayDouble(7) ; vals.iota(1000)
3295         f.setArray(vals)
3296         f.setName("anonymous") # f has no mesh it is not a bug
3297         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3298         f1ts.setFieldProfile(f,mm,0,pfl)
3299         #
3300         f1ts=MEDFileField1TS()
3301         f=MEDCouplingFieldDouble(ON_NODES)
3302         vals=DataArrayDouble(8) ; vals.iota(1000)
3303         f.setArray(vals)
3304         f.setName("anonymous") # f has no mesh it is not a bug
3305         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3306         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3307         #
3308         f1ts=MEDFileField1TS()
3309         f=MEDCouplingFieldDouble(ON_CELLS)
3310         vals=DataArrayDouble(7) ; vals.iota(1000)
3311         f.setArray(vals)
3312         f.setName("anonymous") # f has no mesh it is not a bug
3313         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3314         f1ts.setFieldProfile(f,mm,0,pfl)
3315         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3316         #
3317         f1ts=MEDFileField1TS()
3318         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3319         vals=DataArrayDouble(27) ; vals.iota(1000)
3320         f.setArray(vals)
3321         f.setName("anonymous") # f has no mesh it is not a bug
3322         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3323         f.setMesh(m[pfl])
3324         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])
3325         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3326         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])
3327         f.setMesh(None)
3328         f1ts.setFieldProfile(f,mm,0,pfl)
3329         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3330         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3331         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3332         vals=DataArrayDouble(27) ; vals.iota(1000)
3333         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3334         #
3335         f1ts=MEDFileField1TS()
3336         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3337         vals=DataArrayDouble(25) ; vals.iota(1000)
3338         f.setArray(vals)
3339         f.setName("anonymous") # f has no mesh it is not a bug
3340         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3341         f1ts.setFieldProfile(f,mm,0,pfl)
3342         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3343         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3344         f.setArray(vals2)
3345         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3346         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3347         #
3348         f1ts=MEDFileField1TS()
3349         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3350         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3351         f.setArray(vals)
3352         f1ts.setFieldProfile(f,mm,0,pfl)
3353         pass
3354     
3355     def testWRMeshWithNoCells(self):
3356         fname="Pyfile71.med"
3357         a=DataArrayDouble(4) ; a.iota()
3358         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3359         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3360         m=MEDFileUMesh()
3361         m.setMeshAtLevel(0,m00)
3362         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3363         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3364         m.write(fname,2)
3365         del m,a,c,m0,m00
3366         #
3367         m=MEDFileMesh.New(fname)
3368         self.assertEqual((),m.getNonEmptyLevels())
3369         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))
3370         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3371         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3372         pass
3373
3374     def testWRQPolyg1(self):
3375         fname="Pyfile72.med"
3376         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3377         m.insertNextCell([0,2,1,3])
3378         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3379         #
3380         ms=[m.deepCpy() for i in xrange(4)]
3381         for i,elt in enumerate(ms):
3382             elt.translate([float(i)*1.5,0.])
3383             pass
3384         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3385         m0.convertAllToPoly()
3386         #
3387         ms=[m.deepCpy() for i in xrange(5)]
3388         for i,elt in enumerate(ms):
3389             elt.translate([float(i)*1.5,1.5])
3390             pass
3391         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3392         m1.convertAllToPoly()
3393         m1.convertLinearCellsToQuadratic()
3394         #
3395         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3396         ##
3397         mm=MEDFileUMesh()
3398         mm.setMeshAtLevel(0,m)
3399         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3400         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3401         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3402         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3403         ##
3404         mm.write(fname,2)
3405         del mm
3406         #
3407         mm_read=MEDFileUMesh(fname)
3408         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3409         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3410         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3411         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3412         ##
3413         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3414         f.setMesh(m)
3415         arr0=DataArrayDouble(9) ; arr0.iota()
3416         arr1=DataArrayDouble(9) ; arr1.iota(100)
3417         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3418         f.setArray(arr) ; f.checkCoherency()
3419         f.setTime(5.6,1,2)
3420         ff=MEDFileField1TS()
3421         ff.setFieldNoProfileSBT(f)
3422         ff.write(fname,0)
3423         ##
3424         ff_read=MEDFileField1TS(fname)
3425         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3426         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3427         pass
3428
3429     def testLoadIfNecessaryOnFromScratchFields0(self):
3430         """
3431         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3432         """
3433         fname="Pyfile77.med"
3434         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3435         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3436         m.allocateCells()
3437         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3438         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3439         m.finishInsertingCells()
3440         #
3441         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3442         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3443         fs=MEDFileFields()
3444         arrs=4*[None]
3445         #
3446         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3447         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3448         f0.setTime(1.1,1,1)
3449         f0.setName("myELNOField")
3450         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3451         f0.setArray(arrs[0])
3452         ff0.appendFieldNoProfileSBT(f0)
3453         #
3454         f0.setTime(2.2,2,1)
3455         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3456         f0.setArray(arrs[1])
3457         ff0.appendFieldNoProfileSBT(f0)
3458         #
3459         f0.setTime(3.3,3,1)
3460         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3461         f0.setArray(arrs[2])
3462         ff0.appendFieldNoProfileSBT(f0)
3463         #
3464         f0.setTime(4.4,4,1)
3465         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3466         f0.setArray(arrs[3])
3467         ff0.appendFieldNoProfileSBT(f0)
3468         #
3469         for i,arr in enumerate(arrs):
3470             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3471             fs[0][i].loadArraysIfNecessary()
3472             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3473             pass
3474         fs.loadArraysIfNecessary()
3475         for i,arr in enumerate(arrs):
3476             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3477             pass
3478         fs[0].loadArraysIfNecessary()
3479         for i,arr in enumerate(arrs):
3480             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3481             pass
3482         pass
3483     
3484     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3485         """ 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.
3486         """
3487         fname="Pyfile78.med"
3488         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)
3489         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3490         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3491         m0.allocateCells()
3492         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
3493             m0.insertNextCell(NORM_TETRA4,elt)
3494             pass
3495         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
3496             m0.insertNextCell(NORM_PYRA5,elt)
3497             pass
3498         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
3499             m0.insertNextCell(NORM_PENTA6,elt)
3500             pass
3501         m0.checkCoherency2()
3502         m1=MEDCouplingUMesh(); m1.setName("mesh")
3503         m1.setMeshDimension(2);
3504         m1.allocateCells(5);
3505         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3506         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3507         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3508         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3509         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3510         m1.setCoords(coords);
3511         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3512         m3.allocateCells()
3513         m3.insertNextCell(NORM_POINT1,[2])
3514         m3.insertNextCell(NORM_POINT1,[3])
3515         m3.insertNextCell(NORM_POINT1,[4])
3516         m3.insertNextCell(NORM_POINT1,[5])
3517         #
3518         mm=MEDFileUMesh()
3519         mm.setMeshAtLevel(0,m0)
3520         mm.setMeshAtLevel(-1,m1)
3521         mm.setMeshAtLevel(-3,m3)
3522         mm.write(fname,2)
3523         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3524         mm=MEDFileMesh.New(fname)
3525         fs=MEDFileFields()
3526         fmts=MEDFileFieldMultiTS()
3527         f1ts=MEDFileField1TS()
3528         for lev in mm.getNonEmptyLevels():
3529             for gt in mm.getGeoTypesAtLevel(lev):
3530                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3531                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3532                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3533                 f.setArray(arr) ; f.setName("f0")
3534                 f1ts.setFieldNoProfileSBT(f)
3535                 pass
3536             pass
3537         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3538         for lev in [0,-1,-3]:
3539             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3540             pass
3541         fmts.pushBackTimeStep(f1ts)
3542         fs.pushField(fmts)
3543         fs.write(fname,0)
3544         del fs,fmts,f1ts
3545         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3546         fs=MEDFileFields(fname)
3547         self.assertEqual(len(fs),1)
3548         self.assertEqual(len(fs[0]),1)
3549         f1ts=fs[0][0]
3550         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),'','')])])
3551         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))
3552         pass
3553
3554     def testMEDFileUMeshSetName(self):
3555         """ 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.
3556         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3557         """
3558         fname="Pyfile79.med"
3559         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3560         mm=MEDFileUMesh()
3561         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3562         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)
3563         m0.allocateCells(5);
3564         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3565         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3566         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3567         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3568         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3569         m0.setCoords(coords);
3570         mm.setMeshAtLevel(0,m0)
3571         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3572         m2.allocateCells()
3573         m2.insertNextCell(NORM_POINT1,[2])
3574         m2.insertNextCell(NORM_POINT1,[3])
3575         m2.insertNextCell(NORM_POINT1,[4])
3576         m2.insertNextCell(NORM_POINT1,[5])
3577         mm.setMeshAtLevel(-2,m2)
3578         self.assertEqual(mm.getName(),"")
3579         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3580         mm.forceComputationOfParts()
3581         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3582         mm.setName("abc")
3583         self.assertEqual(mm.getName(),"abc")
3584         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3585         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3586         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3587         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3588         pass
3589
3590     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3591         fileName="Pyfile80.med"
3592         m=MEDCouplingCMesh() ; m.setName("cmesh")
3593         arr=DataArrayDouble(6) ; arr.iota()
3594         m.setCoords(arr,arr)
3595         nbCells=m.getNumberOfCells()
3596         self.assertEqual(25,nbCells)
3597         f=MEDCouplingFieldDouble(ON_CELLS)
3598         f.setName("FieldOnCell") ; f.setMesh(m)
3599         arr=DataArrayDouble(nbCells) ; arr.iota()
3600         mm=MEDFileCMesh()
3601         mm.setMesh(m)
3602         #
3603         fmts=MEDFileFieldMultiTS()
3604         #
3605         for i in xrange(nbCells):
3606             t=(float(i)+0.1,i+1,-i-2)
3607             f.setTime(*t)
3608             arr2=DataArrayDouble(nbCells)
3609             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3610             arr2[perm]=arr
3611             f.setArray(arr2)
3612             f1ts=MEDFileField1TS()
3613             f1ts.setFieldNoProfileSBT(f)
3614             fmts.pushBackTimeStep(f1ts)
3615             pass
3616         fmts.unloadArraysWithoutDataLoss()
3617         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))
3618         fs=MEDFileFields() ; fs.pushField(fmts)
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         fs.unloadArraysWithoutDataLoss()
3621         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))
3622         f1ts=fs[0][0]
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         f1ts.unloadArraysWithoutDataLoss()
3625         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))
3626         mm.write(fileName,2)
3627         fs.write(fileName,0)
3628         del m,fmts,mm,f,f1ts
3629         ##
3630         mm=MEDFileMesh.New(fileName)
3631         fmts=MEDFileFieldMultiTS(fileName)
3632         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))
3633         fmts.unloadArraysWithoutDataLoss()
3634         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3635         fmts.loadArraysIfNecessary()
3636         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))
3637         del mm,fmts
3638         fs=MEDFileFields(fileName)
3639         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))
3640         fs.unloadArraysWithoutDataLoss()
3641         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3642         fs.loadArraysIfNecessary()
3643         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))
3644         del fs
3645         f1ts=MEDFileField1TS(fileName)
3646         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))
3647         f1ts.unloadArraysWithoutDataLoss()
3648         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3649         f1ts.loadArraysIfNecessary()
3650         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))
3651         pass
3652
3653     def testMEDFileUMeshLoadPart1(self):
3654         """ 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
3655         memory of the returned instance.
3656         """
3657         fileName="Pyfile81.med"
3658         arr=DataArrayDouble(6) ; arr.iota()
3659         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3660         m=m.buildUnstructured()
3661         m.setName("Mesh")
3662         m.changeSpaceDimension(3,0.)
3663         infos=["aa [b]","cc [de]","gg [klm]"]
3664         m.getCoords().setInfoOnComponents(infos)
3665         m.checkCoherency2()
3666         mm=MEDFileUMesh()
3667         mm.setMeshAtLevel(0,m)
3668         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3669         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3670         mm.setMeshAtLevel(-1,m1)
3671         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])
3672         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])
3673         namesCellL0=DataArrayAsciiChar(25,16)
3674         namesCellL0[:]=["Cell#%.3d        "%(i) for i in xrange(25)]
3675         renumM1=DataArrayInt([3,4,0,2,1])
3676         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3677         mm.setRenumFieldArr(0,renum0)
3678         mm.setFamilyFieldArr(0,famField0)
3679         mm.setNameFieldAtLevel(0,namesCellL0)
3680         mm.setRenumFieldArr(-1,renumM1)
3681         mm.setFamilyFieldArr(-1,famFieldM1)
3682         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])
3683         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])
3684         namesNodes=DataArrayAsciiChar(36,16)
3685         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(36)]
3686         mm.setRenumFieldArr(1,renum1)
3687         mm.setFamilyFieldArr(1,famField1)
3688         mm.setNameFieldAtLevel(1,namesNodes)
3689         mm.setFamilyId("Fam7",77)
3690         mm.setFamilyId("Fam8",88)
3691         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3692         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3693         mm.write(fileName,2)
3694         #
3695         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3696         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3697         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])))
3698         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)
3699         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3700         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3701         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3702         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3703         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3704         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3705         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3706         #
3707         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3708         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3709         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])))
3710         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)
3711         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3712         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3713         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3714         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3715         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3716         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3717         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3718         #
3719         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3720         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3721         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3722         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3723         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3724         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3725         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3726         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3727         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])))
3728         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3729         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)
3730         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3731         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3732         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3733         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3734         pass
3735
3736     def testMEDFileFieldsLoadPart1(self):
3737         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3738         """
3739         fileName="Pyfile82.med"
3740         meshName="Mesh"
3741         compos=["aa [kg]","bbb [m/s]"]
3742         arr=DataArrayDouble(6) ; arr.iota()
3743         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3744         m=m.buildUnstructured()
3745         m.setName(meshName)
3746         m.changeSpaceDimension(3,0.)
3747         infos=["aa [b]","cc [de]","gg [klm]"]
3748         m.getCoords().setInfoOnComponents(infos)
3749         m.checkCoherency2()
3750         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3751         f.setName("Field")
3752         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3753         arr[:,0]=range(25)
3754         arr[:,1]=range(100,125)
3755         f.setArray(arr)
3756         MEDLoader.WriteField(fileName,f,2)
3757         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3758         f.setName("FieldNode")
3759         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3760         arr[:,0]=range(200,236)
3761         arr[:,1]=range(300,336)
3762         f.setArray(arr)
3763         f.checkCoherency()
3764         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3765         #
3766         ms=MEDFileMeshes()
3767         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3768         ms.pushMesh(mm)
3769         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3770         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3771         #
3772         ms=MEDFileMeshes()
3773         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3774         ms.pushMesh(mm)
3775         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3776         fs=fs.deepCpy()
3777         fs[0][0].loadArrays()
3778         arr=DataArrayDouble(12,2) ; arr[:,0]=range(3,15) ; arr[:,1]=range(103,115)
3779         arr.setInfoOnComponents(compos)
3780         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3781         fs[1][0].loadArrays()
3782         arr=DataArrayDouble(21,2) ; arr[:,0]=range(203,224) ; arr[:,1]=range(303,324)
3783         arr.setInfoOnComponents(compos)
3784         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3785         pass
3786
3787     def testMEDFileWithoutCells1(self):
3788         fileName="Pyfile83.med"
3789         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3790         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3791         mm=MEDFileUMesh()
3792         mm.setCoords(coo)
3793         mm.setName("mesh")
3794         mm.write(fileName,2)
3795         #
3796         mm=MEDFileMesh.New(fileName)
3797         self.assertEqual(mm.getName(),"mesh")
3798         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3799         pass
3800
3801     def testZipCoordsWithLoadPart1(self):
3802         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3803         """
3804         fileName="Pyfile84.med"
3805         meshName="Mesh"
3806         compos=["aa [kg]","bbb [m/s]"]
3807         arr=DataArrayDouble(6) ; arr.iota()
3808         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3809         m=m.buildUnstructured()
3810         m.setName(meshName)
3811         m.changeSpaceDimension(3,0.)
3812         infos=["aa [b]","cc [de]","gg [klm]"]
3813         m.getCoords().setInfoOnComponents(infos)
3814         m.checkCoherency2()
3815         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3816         f.setName("Field")
3817         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3818         arr[:,0]=range(25)
3819         arr[:,1]=range(100,125)
3820         f.setArray(arr)
3821         MEDLoader.WriteField(fileName,f,2)
3822         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3823         f.setName("FieldNode")
3824         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3825         arr[:,0]=range(200,236)
3826         arr[:,1]=range(300,336)
3827         f.setArray(arr)
3828         f.checkCoherency()
3829         MEDLoader.WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3830         #
3831         ms=MEDFileMeshes()
3832         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3833         ms.pushMesh(mm)
3834         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3835         self.assertEqual(spd.getSlice(),slice(4,6,1))
3836         spd=mm.getPartDefAtLevel(1)
3837         self.assertEqual(spd.getSlice(),slice(4,14,1))
3838         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3839         mm.zipCoords() # <- The important line is here !
3840         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3841         self.assertEqual(spd.getSlice(),slice(4,6,1))
3842         spd=mm.getPartDefAtLevel(1)
3843         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3844         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3845         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3846         fs[0][0].loadArrays()
3847         arr=DataArrayDouble([(4,104),(5,105)])
3848         arr.setInfoOnComponents(compos)
3849         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3850         fs[1][0].loadArrays()
3851         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
3852         arr.setInfoOnComponents(compos)
3853         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3854         pass
3855
3856     def testMEDFileCMeshSetGroupsAtLevel(self):
3857         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
3858         """
3859         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
3860         m.setName("Mesh")
3861         mm=MEDFileCMesh() ; mm.setMesh(m)
3862         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
3863         mm.setGroupsAtLevel(0,[grp])
3864         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
3865         pass
3866
3867     def testMEDFileUMeshBuildExtrudedMesh1(self):
3868         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
3869         fileName="Pyfile85.med"
3870         meshName2D="Mesh"
3871         meshName1D="Mesh1D"
3872         meshName3DOut="Mesh3D"
3873         #
3874         d1=DataArrayInt([0,4,20,24])
3875         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
3876         #
3877         a=DataArrayDouble(6) ; a.iota()
3878         m=MEDCouplingCMesh() ; m.setCoords(a,a)
3879         m=m.buildUnstructured()
3880         d1c=d1.buildComplement(m.getNumberOfCells())
3881         m=m[d1c] ; m.zipCoords()
3882         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
3883         m0.simplexize(0)
3884         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
3885         m.setName(meshName2D)
3886         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
3887         e=d.deltaShiftIndex().getIdsEqual(1)
3888         #
3889         mm=MEDFileUMesh()
3890         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
3891         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
3892         mm.setGroupsAtLevel(0,[grp0])
3893         grp1=e ; grp1.setName("grp1")
3894         mm.setGroupsAtLevel(-1,[grp1])
3895         mm.write(fileName,2)
3896         #
3897         a=DataArrayDouble(3) ; a.iota()
3898         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
3899         tmp.setName(meshName1D)
3900         tmp.changeSpaceDimension(3)
3901         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
3902         mm1D=MEDFileUMesh()
3903         mm1D.setMeshAtLevel(0,tmp)
3904         mm1D.write(fileName,0)
3905         # test is here !
3906         mm2D=MEDFileMesh.New(fileName,meshName2D)
3907         mm1D=MEDFileMesh.New(fileName,meshName1D)
3908         m1D=mm1D.getMeshAtLevel(0)
3909         mm3D=mm2D.buildExtrudedMesh(m1D,0)
3910         #
3911         self.assertEqual(mm3D.getName(),mm2D.getName())
3912         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
3913         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
3914         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
3915         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
3916         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
3917         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
3918         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
3919         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
3920         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
3921         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.)])
3922         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
3923         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])
3924         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
3925         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])
3926         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
3927         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])
3928         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
3929         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])
3930         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
3931         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])
3932         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
3933         d=DataArrayInt(129) ; d.iota() ; d*=3
3934         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
3935         #
3936         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
3937         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
3938         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
3939         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
3940         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])))
3941         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])))
3942         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])))
3943         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])))
3944         mm3D.setName("MeshExtruded")
3945         mm3D.write(fileName,0)
3946         pass
3947
3948     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
3949     def testMEDFileUMeshPickeling1(self):
3950         import cPickle
3951         outFileName="Pyfile86.med"
3952         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)
3953         c.setInfoOnComponents(["aa","bbb"])
3954         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
3955         m=MEDCouplingUMesh();
3956         m.setMeshDimension(2);
3957         m.allocateCells(5);
3958         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
3959         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
3960         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
3961         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
3962         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
3963         m.finishInsertingCells();
3964         m.setCoords(c)
3965         m.checkCoherency()
3966         m1=MEDCouplingUMesh.New();
3967         m1.setMeshDimension(1);
3968         m1.allocateCells(3);
3969         m1.insertNextCell(NORM_SEG2,2,[1,4])
3970         m1.insertNextCell(NORM_SEG2,2,[3,6])
3971         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
3972         m1.finishInsertingCells();
3973         m1.setCoords(c)
3974         m1.checkCoherency()
3975         m2=MEDCouplingUMesh.New();
3976         m2.setMeshDimension(0);
3977         m2.allocateCells(4);
3978         m2.insertNextCell(NORM_POINT1,1,[1])
3979         m2.insertNextCell(NORM_POINT1,1,[3])
3980         m2.insertNextCell(NORM_POINT1,1,[2])
3981         m2.insertNextCell(NORM_POINT1,1,[6])
3982         m2.finishInsertingCells();
3983         m2.setCoords(c)
3984         m2.checkCoherency()
3985         #
3986         mm=MEDFileUMesh.New()
3987         self.assertTrue(mm.getUnivNameWrStatus())
3988         mm.setName("MyFirstMEDCouplingMEDmesh")
3989         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
3990         mm.setCoords(c)
3991         mm[-1]=m1;
3992         mm[0]=m;
3993         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
3994         mm[-2]=m2;
3995         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
3996         # playing with groups
3997         g1_2=DataArrayInt.New()
3998         g1_2.setValues([1,3],2,1)
3999         g1_2.setName("G1")
4000         g2_2=DataArrayInt.New()
4001         g2_2.setValues([1,2,3],3,1)
4002         g2_2.setName("G2")
4003         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4004         g1_1=DataArrayInt.New()
4005         g1_1.setValues([0,1,2],3,1)
4006         g1_1.setName("G1")
4007         g2_1=DataArrayInt.New()
4008         g2_1.setValues([0,2],2,1)
4009         g2_1.setName("G2")
4010         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4011         g1_N=DataArrayInt.New()
4012         g1_N.setValues(range(8),8,1)
4013         g1_N.setName("G1")
4014         g2_N=DataArrayInt.New()
4015         g2_N.setValues(range(9),9,1)
4016         g2_N.setName("G2")
4017         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4018         mm.createGroupOnAll(0,"GrpOnAllCell")
4019         # check content of mm
4020         t=mm.getGroupArr(0,"G1",False)
4021         self.assertTrue(g1_2.isEqual(t));
4022         t=mm.getGroupArr(0,"G2",False)
4023         self.assertTrue(g2_2.isEqual(t));
4024         t=mm.getGroupArr(-1,"G1",False)
4025         self.assertTrue(g1_1.isEqual(t));
4026         t=mm.getGroupArr(-1,"G2",False)
4027         self.assertTrue(g2_1.isEqual(t));
4028         t=mm.getGroupArr(1,"G1",False)
4029         self.assertTrue(g1_N.isEqual(t));
4030         t=mm.getGroupArr(1,"G2",False)
4031         self.assertTrue(g2_N.isEqual(t));
4032         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4033         t=mm.getGroupArr(0,"GrpOnAllCell")
4034         #
4035         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4036         mm2=cPickle.loads(st)
4037         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4038         pass
4039
4040     def testMEDFileFieldsLoadSpecificEntities1(self):
4041         nbNodes=11
4042         fieldName="myField"
4043         fileName="Pyfile87.med"
4044         nbPdt=10
4045         meshName="Mesh"
4046         #
4047         m=MEDCouplingCMesh()
4048         arr=DataArrayDouble(nbNodes) ; arr.iota()
4049         m.setCoords(arr)
4050         m=m.buildUnstructured()
4051         m.setName(meshName)
4052         #
4053         fmts=MEDFileFieldMultiTS()
4054         for i in xrange(nbPdt):
4055             f=MEDCouplingFieldDouble(ON_NODES)
4056             f.setMesh(m)
4057             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4058             f.setArray(arr)
4059             f.setName(fieldName)
4060             f.setTime(float(i),i,0)
4061             fmts.appendFieldNoProfileSBT(f)
4062             pass
4063         #
4064         mm=MEDFileUMesh() ; mm[0]=m
4065         fmts.write(fileName,2)
4066         mm.write(fileName,0)
4067         #
4068         fs=MEDFileFields(fileName,False)
4069         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4070         fs.loadArraysIfNecessary()
4071         fs2.loadArraysIfNecessary()
4072         for i in xrange(nbPdt):
4073             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4074             pass
4075         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4076         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4077         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4078         fmts=MEDFileFieldMultiTS()
4079         for i in xrange(nbPdt):
4080             f=MEDCouplingFieldDouble(ON_CELLS)
4081             f.setMesh(m3)
4082             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4083             f.setArray(arr)
4084             f.setName(fieldName)
4085             f.setTime(float(i),i,0)
4086             fmts.appendFieldNoProfileSBT(f)
4087             pass
4088         mm=MEDFileUMesh() ; mm[0]=m3
4089         del mm[0]
4090         self.assertEqual(mm.getNonEmptyLevels(),())
4091         mm[0]=m3
4092         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4093         fmts.write(fileName,2)
4094         fs=MEDFileFields(fileName,False)
4095         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4096         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4097         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4098         fs.loadArraysIfNecessary()
4099         fs2.loadArraysIfNecessary()
4100         fs3.loadArraysIfNecessary()
4101         fs4.loadArraysIfNecessary()
4102         for i in xrange(nbPdt):
4103             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4104             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4105             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4106             pass
4107         pass
4108
4109     def testMEDFileLotsOfTSRW1(self):
4110         nbNodes=11
4111         fieldName="myField"
4112         fileName="Pyfile88.med"
4113         nbPdt=300 # <- perftest = 30000
4114         meshName="Mesh"
4115         #
4116         maxPdt=100 # <- optimum = 500
4117         m=MEDCouplingCMesh()
4118         arr=DataArrayDouble(nbNodes) ; arr.iota()
4119         m.setCoords(arr)
4120         m=m.buildUnstructured()
4121         m.setName(meshName)
4122         #
4123         nbOfField=nbPdt/maxPdt
4124         fs=MEDFileFields()
4125         for j in xrange(nbOfField):
4126             fmts=MEDFileFieldMultiTS()
4127             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4128             for i in xrange(s.start,s.stop,s.step):
4129                 f=MEDCouplingFieldDouble(ON_NODES)
4130                 f.setMesh(m)
4131                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4132                 f.setArray(arr)
4133                 f.setName("%s_%d"%(fieldName,j))
4134                 f.setTime(float(i),i,0)
4135                 fmts.appendFieldNoProfileSBT(f)
4136                 pass
4137             fs.pushField(fmts)
4138             pass
4139         #
4140         mm=MEDFileUMesh() ; mm[0]=m
4141         fs.write(fileName,2)
4142         mm.write(fileName,0)
4143         ############
4144         def appendInDict(d,key,val):
4145             if key in d:
4146                 d[key].append(val)
4147             else:
4148                 d[key]=[val]
4149             pass
4150         import re
4151         allFields=MEDLoader.GetAllFieldNames(fileName)
4152         allFieldsDict={}
4153         pat=re.compile("([\d]+)([\s\S]+)$")
4154         for st in allFields:
4155             stRev=st[::-1]
4156             m=pat.match(stRev)
4157             if m:
4158                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4159                 pass
4160             else:
4161                 appendInDict(allFieldsDict,st,'')
4162                 pass
4163             pass
4164         fs2=MEDFileFields()
4165         for k in allFieldsDict:
4166             if allFieldsDict[k]!=['']:
4167                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4168                 pass
4169             fmts2=[]
4170             for it in allFieldsDict[k]:
4171                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4172                 pass
4173             fmts2.reverse()
4174             zeResu=fmts2.pop()
4175             nbIter=len(fmts2)
4176             for ii in xrange(nbIter):
4177                 zeResu.pushBackTimeSteps(fmts2.pop())
4178                 pass
4179             zeResu.setName(k)
4180             fs2.pushField(zeResu)
4181             pass
4182         self.assertEqual(fs2[0].getTimeSteps(),[(i,0,float(i)) for i in xrange(nbPdt)])
4183         pass
4184     
4185     def testMEDFileMeshRearrangeFamIds1(self):
4186         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4187         fileName="Pyfile89.med"
4188         meshName='Maillage_2'
4189         mm=MEDFileUMesh()
4190         coords=DataArrayDouble([(0.,0.,0.),(0.,0.,200.),(0.,200.,200.),(0.,200.,0.),(200.,0.,0.),(200.,0.,200.),(200.,200.,200.),(200.,200.,0.),(0.,0.,100.),(0.,100.,200.),(0.,200.,100.),(0.,100.,0.),(200.,0.,100.),(200.,100.,200.),(200.,200.,100.),(200.,100.,0.),(100.,0.,0.),(100.,0.,200.),(100.,200.,0.),(100.,200.,200.),(0.,116.87743909766768,83.12256090233232),(200.,116.87743909766768,83.12256090233232),(116.87743909766769,0.,116.87743909766769),(116.87743909766769,200.,116.87743909766769),(116.87743909766769,116.87743909766769,0.),(116.87743909766769,116.87743909766769,200.),(63.3851584383713,56.1391811199829,119.728314479261),(138.008709441123,116.039297556044,119.903790959468)])
4191         #
4192         c0=DataArrayInt([14,1,26,9,8,14,17,26,1,8,14,27,26,17,22,14,26,16,20,8,14,8,0,16,11,14,16,20,11,24,14,25,20,26,27,14,22,26,24,27,14,26,16,22,24,14,8,26,22,17,14,20,9,25,26,14,19,20,25,23,14,23,6,27,25,14,19,23,10,20,14,27,22,21,24,14,27,21,14,18,14,26,9,25,17,14,13,27,25,17,14,27,18,24,21,14,22,21,15,12,14,27,20,24,18,14,23,25,27,20,14,13,27,6,25,14,23,27,6,14,14,15,16,22,12,14,27,17,13,22,14,22,27,21,13,14,24,16,22,15,14,24,18,7,21,14,12,4,15,16,14,22,12,5,13,14,8,26,16,22,14,13,27,21,14,14,20,18,10,3,14,14,27,18,23,14,14,27,6,13,14,21,22,13,12,14,25,26,17,27,14,19,9,25,20,14,26,24,20,16,14,22,24,15,21,14,9,26,1,17,14,23,27,18,20,14,20,11,18,3,14,14,18,21,7,14,19,2,9,10,14,19,23,25,6,14,18,23,20,10,14,20,26,8,9,14,22,13,5,17,14,24,11,18,20,14,21,15,7,24,14,19,20,10,9,14,20,26,27,24,14,16,8,11,20])
4193         c0i=DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275])
4194         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4195         m0.setConnectivity(c0,c0i)
4196         mm[0]=m0
4197         #
4198         c1=DataArrayInt([3,8,20,11,3,8,9,20,3,9,2,10,3,20,9,10,3,0,8,11,3,9,8,1,3,20,10,3,3,11,20,3,3,15,21,12,3,5,12,13,3,21,13,12,3,15,12,4,3,14,6,13,3,14,13,21,3,7,14,21,3,7,21,15,3,5,22,12,3,4,12,16,3,17,1,8,3,16,8,0,3,5,17,22,3,12,22,16,3,22,17,8,3,16,22,8,3,10,2,19,3,7,18,14,3,14,23,6,3,3,10,18,3,23,19,6,3,18,23,14,3,10,19,23,3,10,23,18,3,3,18,11,3,7,24,18,3,15,4,16,3,11,16,0,3,7,15,24,3,18,24,11,3,24,15,16,3,11,24,16,3,9,19,2,3,19,25,6,3,17,5,13,3,1,17,9,3,25,13,6,3,9,25,19,3,17,13,25,3,17,25,9])
4199         c1i=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])
4200         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4201         m1.setConnectivity(c1,c1i)
4202         mm[-1]=m1
4203         #
4204         c2=DataArrayInt([0,8,8,1,1,9,9,2,3,10,10,2,0,11,11,3,4,12,12,5,5,13,13,6,7,14,14,6,4,15,15,7,0,16,16,4,1,17,17,5,3,18,18,7,2,19,19,6])
4205         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4206         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4207         mm[-2]=m2.buildUnstructured()
4208         #
4209         ref0=DataArrayInt(55) ; ref0[:]=0
4210         mm.setFamilyFieldArr(0,ref0)
4211         mm.setFamilyFieldArr(1,DataArrayInt([0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
4212         ref1=DataArrayInt([0,0,0,0,0,0,0,0,-6,-6,-6,-6,-6,-6,-6,-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4213         mm.setFamilyFieldArr(-1,ref1)
4214         ref2=DataArrayInt([0,0,-7,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4215         mm.setFamilyFieldArr(-2,ref2)
4216         #
4217         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4218             mm.setFamilyId(f,fid)
4219         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4220             mm.setFamiliesOnGroup(grp,fams)
4221         mm.write(fileName,2)
4222         #
4223         mm=MEDFileMesh.New(fileName)
4224         grp=mm.getGroup(-1,"Groupe_1")
4225         dai=grp.computeFetchedNodeIds()
4226         dai.setName("TOTO")
4227         mm.addGroup(1,dai)
4228         mm.rearrangeFamilies() # <- the aim of the test
4229         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4230         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4231         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4232         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4233         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([0,0,2,0,9,9,9,9,0,0,0,0,9,9,9,9,0,0,0,0,0,9,0,0,0,0,0,0])))
4234         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4235         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4236         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4237         for elt,fams in allGrps:
4238             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4239         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4240         for elt,eltId in allFams:
4241             self.assertEqual(mm.getFamilyId(elt),eltId)
4242         pass
4243
4244     def testNonRegrCMeshSetFieldPfl1(self):
4245         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4246         ff=MEDFileField1TS()
4247         meshName="mesh"
4248         mm=MEDFileCMesh()
4249         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4250         m.setCoords(arr)
4251         m.setName(meshName)
4252         mm.setMesh(m)
4253         field=MEDCouplingFieldDouble(ON_CELLS)
4254         field.setMesh(m)
4255         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4256         field.setName("Field")
4257         field.checkCoherency()
4258         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4259         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4260         self.assertEqual(ff.getPfls(),())
4261         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4262         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4263         del ff,mm,field,field2,pfl
4264         # same with unstructured mesh
4265         ff=MEDFileField1TS()
4266         meshName="mesh"
4267         mm=MEDFileUMesh()
4268         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4269         m.setCoords(arr)
4270         m.setName(meshName)
4271         m=m.buildUnstructured()
4272         mm[0]=m
4273         field=MEDCouplingFieldDouble(ON_CELLS)
4274         field.setMesh(m)
4275         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4276         field.setName("Field")
4277         field.checkCoherency()
4278         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4279         ff.setFieldProfile(field,mm,0,pfl)
4280         self.assertEqual(ff.getPfls(),())
4281         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4282         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4283         pass
4284
4285     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4286         meshName="mesh"
4287         fileName="Pyfile90.med"
4288         fileName2="Pyfile91.med"
4289         arr=DataArrayDouble(5) ; arr.iota()
4290         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4291         m=m.buildUnstructured()
4292         d=DataArrayInt([3,7,11,15])
4293         m1=m[d]
4294         m1.simplexize(0)
4295         m2=m[d.buildComplement(m.getNumberOfCells())]
4296         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4297         m.changeSpaceDimension(3,0.)
4298         arr=DataArrayDouble(3) ; arr.iota()
4299         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4300         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4301         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4302         m3D=m.buildExtrudedMesh(m1D,0)
4303         m3D.sortCellsInMEDFileFrmt()
4304         m3D.setName(meshName)
4305         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkCoherency2()
4306         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4307         #
4308         mm=MEDFileUMesh()
4309         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D
4310         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4311         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4312         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4313         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4314         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4315         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4316         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4317         mm.setGroupsAtLevel(0,[vol1,vol2])
4318         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4319         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4320         #
4321         mmOut1=mm.linearToQuadratic(0,0.)
4322         mmOut1.write(fileName2,2)
4323         mmOut2=mmOut1.quadraticToLinear(0.)
4324         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4325         pass
4326
4327     def testMEDFileMeshAddGroup1(self):
4328         m=MEDCouplingCMesh()
4329         arrX=DataArrayDouble(9) ; arrX.iota()
4330         arrY=DataArrayDouble(4) ; arrY.iota()
4331         m.setCoords(arrX,arrY)
4332         m.setName("mesh")
4333         mm=MEDFileCMesh()
4334         mm.setMesh(m)
4335         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4336         mm.addGroup(0,grp0)
4337         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4338         mm.addGroup(0,grp1)
4339         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4340         mm.addGroup(0,grp2)
4341         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4342         mm.addGroup(0,grp3)
4343         for grp in [grp0,grp1,grp2,grp3]:
4344             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4345         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4346         delta=12
4347         for grp in [grp0,grp1,grp2,grp3]:
4348             grpNode=grp.deepCpy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4349             mm.addGroup(1,grpNode)
4350         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4351         for grp in [grp0,grp1,grp2,grp3]:
4352             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4353         for grp in [grp0,grp1,grp2,grp3]:
4354             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4355             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4356         mm.normalizeFamIdsMEDFile()
4357         for grp in [grp0,grp1,grp2,grp3]:
4358             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4359         for grp in [grp0,grp1,grp2,grp3]:
4360             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4361             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4362         pass
4363
4364     pass
4365     def testMEDFileJoint1(self):
4366         fileName="Pyfile92.med"
4367         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4368         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4369         mm=MEDFileUMesh()
4370         mm.setCoords(coo)
4371         mm.setName("maa1")
4372         mm.setDescription("un maillage")
4373         mm.write(fileName,2)
4374         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4375         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4376         one_step_joint=MEDFileJointOneStep()
4377         one_step_joint.pushCorrespondence(cell_correspond)
4378         one_step_joint.pushCorrespondence(node_correspond)
4379         one_joint=MEDFileJoint()
4380         one_joint.pushStep(one_step_joint)
4381         one_joint.setLocalMeshName("maa1")
4382         one_joint.setRemoteMeshName("maa1")
4383         one_joint.setDescription("joint_description")
4384         one_joint.setJointName("joint_1")
4385         one_joint.setDomainNumber(1)
4386         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4387         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4388         self.assertEqual( one_joint.getDescription(), "joint_description")
4389         self.assertEqual( one_joint.getJointName(), "joint_1")
4390         self.assertEqual( one_joint.getDomainNumber(), 1)
4391         joints=MEDFileJoints()
4392         joints.pushJoint(one_joint);
4393         joints.write(fileName,0)
4394         # read back
4395         jointsR=MEDFileJoints(fileName,mm.getName())
4396         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4397         jR = jointsR.getJointAtPos(0)
4398         self.assertTrue( jR.isEqual( one_joint ))
4399         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4400         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4401         jointsR.destroyJointAtPos(0)
4402         
4403     pass
4404     def testMEDFileJoint2(self):
4405         fileNameWr="Pyfile93.med"
4406         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4407         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4408         mm=MEDFileUMesh()
4409         mm.setCoords(coo)
4410         mm.setName("maa1")
4411         mm.setDescription("un maillage")
4412         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4413         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4414         one_step_joint=MEDFileJointOneStep()
4415         two_step_joint=MEDFileJointOneStep()
4416         one_joint=MEDFileJoint()
4417         two_joint=MEDFileJoint()
4418         one_step_joint.pushCorrespondence(node_correspond)
4419         one_joint.pushStep(one_step_joint)
4420         two_step_joint.pushCorrespondence(cell_correspond)
4421         two_step_joint.pushCorrespondence(node_correspond)
4422         two_joint.pushStep(two_step_joint)
4423         one_joint.setLocalMeshName("maa1")
4424         one_joint.setRemoteMeshName("maa1")
4425         one_joint.setDescription("joint_description_1")
4426         one_joint.setJointName("joint_1")
4427         one_joint.setDomainNumber(1)
4428         two_joint.setLocalMeshName("maa1")
4429         two_joint.setRemoteMeshName("maa1")
4430         two_joint.setDescription("joint_description_2")
4431         two_joint.setJointName("joint_2")
4432         two_joint.setDomainNumber(2)
4433         joints=MEDFileJoints()
4434         joints.pushJoint(one_joint)
4435         joints.pushJoint(two_joint)
4436         mm.setJoints( joints )
4437         mm.write(fileNameWr,2)
4438         #
4439         mm=MEDFileMesh.New(fileNameWr)
4440         self.assertEqual( mm.getNumberOfJoints(), 2)
4441         jointsR = mm.getJoints();
4442         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4443         self.assertEqual( len( jointsR ), 2 )
4444         jointR1 = jointsR[0]
4445         jointR2 = jointsR[1]
4446         self.assertFalse( jointR1 is None )
4447         self.assertFalse( jointR2 is None )
4448         self.assertTrue( jointR1.isEqual( one_joint ))
4449         self.assertTrue( jointR2.isEqual( two_joint ))
4450         pass
4451
4452     def testMEDFileJoint1(self):
4453         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4454         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4455         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4456         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4457         joint1st_1=MEDFileJointOneStep()
4458         joint1st_1.pushCorrespondence(cell_correspond)
4459         joint1st_1.pushCorrespondence(node_correspond)
4460         joint1st_2=MEDFileJointOneStep()
4461         joint1st_2.pushCorrespondence(cell_correspond)
4462         joint1st_2.pushCorrespondence(node_correspond)
4463         joint1st_3=MEDFileJointOneStep()
4464         joint1st_3.pushCorrespondence(node_correspond)
4465         joint1st_3.pushCorrespondence(cell_correspond)
4466         joint1st_4=MEDFileJointOneStep()
4467         joint1st_4.pushCorrespondence(cell_correspond)
4468         joint1st_5=MEDFileJointOneStep()
4469         joint1st_5.pushCorrespondence(cell_correspon2)
4470         joint1st_6=MEDFileJointOneStep()
4471         joint1st_6.pushCorrespondence(cell_correspon3)
4472         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4473         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4474         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4475         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4476         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4477         one_joint=MEDFileJoint()
4478         one_joint.pushStep(joint1st_1)
4479         one_joint.setLocalMeshName("maa1")
4480         one_joint.setRemoteMeshName("maa2")
4481         one_joint.setDescription("joint_description")
4482         one_joint.setJointName("joint_1")
4483         one_joint.setDomainNumber(1)
4484         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4485         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4486         self.assertEqual( "joint_description", one_joint.getDescription())
4487         self.assertEqual( 1, one_joint.getDomainNumber())
4488         self.assertEqual( "joint_1", one_joint.getJointName())
4489         pass
4490
4491     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4492     def testMEDFileSafeCall0(self):
4493         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4494         fname="Pyfile94.med"
4495         errfname="Pyfile94.err"
4496         class StdOutRedirect(object):
4497             def __init__(self,fileName):
4498                 import os,sys
4499                 sys.stderr.flush()
4500                 self.stdoutOld=os.dup(2)
4501                 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
4502                 fd2=os.dup2(self.fdOfSinkFile,2)
4503                 self.origPyVal=sys.stderr
4504                 class FlushFile(object):
4505                     def __init__(self,f):
4506                         self.f=f
4507                     def write(self,st):
4508                         self.f.write(st)
4509                         self.f.flush()
4510                     def flush(self):
4511                         return self.f.flush()
4512                     def isatty(self):
4513                         return self.f.isatty()
4514                 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
4515             def __del__(self):
4516                 import os,sys
4517                 sys.stderr=self.origPyVal
4518                 #os.fsync(self.fdOfSinkFile)
4519                 os.fsync(2)
4520                 os.dup2(self.stdoutOld,2)
4521                 os.close(self.stdoutOld)
4522         import os
4523         # first clean file if needed
4524         if os.path.exists(fname):
4525             os.remove(fname)
4526             pass
4527         # second : build a file from scratch
4528         m=MEDCouplingCMesh()
4529         arr=DataArrayDouble(11) ; arr.iota()
4530         m.setCoords(arr,arr)
4531         mm=MEDFileCMesh()
4532         mm.setMesh(m)
4533         mm.setName("mesh")
4534         mm.write(fname,2)
4535         # third : change permissions to remove write access on created file
4536         os.chmod(fname,0444)
4537         # four : try to append data on file -> check that it raises Exception
4538         f=MEDCouplingFieldDouble(ON_CELLS)
4539         f.setName("field")
4540         f.setMesh(m)
4541         f.setArray(DataArrayDouble(100))
4542         f.getArray()[:]=100.
4543         f.checkCoherency()
4544         f1ts=MEDFileField1TS()
4545         f1ts.setFieldNoProfileSBT(f)
4546         # redirect stderr
4547         tmp=StdOutRedirect(errfname)
4548         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4549         del tmp
4550         #
4551         if os.path.exists(errfname):
4552             os.remove(errfname)
4553         #
4554         pass
4555
4556     pass
4557
4558 unittest.main()