Salome HOME
0c6efa4523af782e11d673f0f5ca9863cbb60b8a
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016  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 MEDLoaderTest3(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=ReadUMeshFromFile(fileName,mname,0)
37         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
38         m2_0=medmesh.getLevelM1Mesh(True)
39         m2_1=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=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=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=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=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=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=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.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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.deepCopy()
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),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.checkConsistencyLight()
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.checkConsistencyLight()
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.checkConsistencyLight()
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')],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=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=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=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=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=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=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=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=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=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=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.deepCopy()
586         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
587         f1InvalidCpy2=f1.deepCopy()
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.deepCopy() ; 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.deepCopy()
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.deepCopy()
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.isIota(5))
895         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
896         pass
897     # Test for getFieldAtTopLevel method
898     def testMEDField16(self):
899         fname="Pyfile37.med"
900         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
901         m1=f1.getMesh()
902         mm1=MEDFileUMesh.New()
903         mm1.setCoords(m1.getCoords())
904         mm1.setMeshAtLevel(0,m1)
905         mm1.setName(m1.getName())
906         ff1=MEDFileField1TS.New()
907         ff1.setFieldNoProfileSBT(f1)
908         m2=m1.buildDescendingConnectivity()[0]
909         m2.sortCellsInMEDFileFrmt()
910         m2.setName(m1.getName())
911         mm1.setMeshAtLevel(-1,m2)
912         mm1.write(fname,2)
913         f2=m2.getMeasureField(True)
914         dd=DataArrayDouble.New()
915         dd.alloc(f2.getArray().getNumberOfTuples(),3)
916         dd[:,0]=f2.getArray()
917         dd[:,1]=2*f2.getArray()
918         dd[:,2]=3*f2.getArray()
919         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
920         f2.setArray(dd)
921         f2.copyTinyStringsFrom(f1)
922         f2.copyTinyAttrFrom(f1)
923         ff1.setFieldNoProfileSBT(f2)
924         ff1.write(fname,0)
925         # Reading Pyfile37.med
926         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
927         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
928         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
929         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
930         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
931         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
932         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
933         # More complex
934         fname="Pyfile38.med"
935         mm1.write(fname,2)
936         ff1=MEDFileField1TS.New()
937         ff1.setFieldNoProfileSBT(f2)
938         ff1.write(fname,0)
939         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
940         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
941         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
942         pass
943
944     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
945     def testMEDField17(self):
946         fname="Pyfile39.med"
947         m1=MEDLoaderDataForTest.build2DMesh_1()
948         m1.renumberCells([0,1,4,2,3,5],False)
949         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
950         mm1.write(fname,2)
951         ffs=MEDFileFields.New()
952         ff1=MEDFileFieldMultiTS.New()
953         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
954         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
955         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.
956         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
957         #
958         ff1.appendFieldProfile(f1,mm1,0,da)
959         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
960         ff1.appendFieldProfile(f1,mm1,0,da)
961         ffs.resize(1)
962         ffs.setFieldAtPos(0,ff1)
963         ffs=ffs.deepCopy()
964         ffs.write(fname,0)
965         #
966         ffsr=MEDFileFields.New(fname)
967         ff3=ffsr.getFieldAtPos(0)
968         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
969         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
970         pass
971
972     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
973     def testMEDField18(self):
974         fname="Pyfile40.med"
975         m1=MEDLoaderDataForTest.build2DMesh_1()
976         m1.renumberCells([0,1,4,2,3,5],False)
977         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
978         mm1.write(fname,2)
979         ffs=MEDFileFields.New()
980         ff1=MEDFileFieldMultiTS.New()
981         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
982         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
983         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.
984         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
985         #
986         ff1.appendFieldProfile(f1,mm1,0,da)
987         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
988         ff1.appendFieldProfile(f1,mm1,0,da)
989         ffs.pushField(ff1)
990         ffs.write(fname,0)
991         #
992         ffsr=MEDFileFields.New(fname)
993         ff3=ffsr.getFieldAtPos(0)
994         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
995         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
996         pass
997
998     def testMEDFieldBug1(self):
999         fname="Pyfile13.med"
1000         d=MEDFileData.New(fname)
1001         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1002         pass
1003
1004     def testMEDMesh8(self):
1005         m=MEDLoaderDataForTest.build1DMesh_1()
1006         m.convertQuadraticCellsToLinear()
1007         mm=MEDFileUMesh.New()
1008         mm.setMeshAtLevel(0,m)
1009         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1010         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1011         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1012         mm.setGroupsAtLevel(0,[g1,g2],False)
1013         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1014         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1015         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1016         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1017         mm.assignFamilyNameWithGroupName()
1018         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1019         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1020         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1021         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1022         #
1023         mm=MEDFileUMesh.New()
1024         mm.setMeshAtLevel(0,m)
1025         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1026         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1027         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1028         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1029         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1030         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1031         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1032         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1033         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1034         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1035         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1036         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1037         mm.changeFamilyId(5,6)
1038         g=mm.getGroupArr(0,"g3")
1039         self.assertTrue(g.isEqual(g3));
1040         g=mm.getGroupArr(0,"g2")
1041         self.assertTrue(g.isEqual(g2));
1042         g=mm.getGroupArr(0,"g1")
1043         self.assertTrue(g.isEqual(g1));
1044         pass
1045     
1046     # bug detected by gauthier
1047     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1048         fname="Pyfile41.med"
1049         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1050         m1=f1.getMesh()
1051         mm1=MEDFileUMesh.New()
1052         mm1.setCoords(m1.getCoords())
1053         mm1.setMeshAtLevel(0,m1)
1054         mm1.write(fname,2)
1055         ff1=MEDFileField1TS.New()
1056         ff1.setFieldNoProfileSBT(f1)
1057         ff1.write(fname,0)
1058         # writing mesh1 and field1, now creation of mesh2 and field2
1059         f2=f1.deepCopy()
1060         m2=f2.getMesh()
1061         m2.translate([0.5,0.6,0.7])
1062         m2.setName("3DSurfMesh_2")
1063         f2.getArray()[:]*=2.
1064         f2.setName("VectorFieldOnCells2")
1065         mm2=MEDFileUMesh.New()
1066         mm2.setCoords(m2.getCoords())
1067         mm2.setMeshAtLevel(0,m2)
1068         mm2.write(fname,0)
1069         ff2=MEDFileField1TS.New()
1070         ff2.setFieldNoProfileSBT(f2)
1071         ff2.write(fname,0)
1072         #
1073         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1074         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1075         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1076         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1077         pass
1078
1079     def testMEDLoaderMultiLevelCellField1(self):
1080         fname="Pyfile42.med"
1081         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1082         m=MEDFileUMesh.New()
1083         m.setCoords(m2.getCoords())
1084         m.setMeshAtLevel(0,m2)
1085         m.setMeshAtLevel(-1,m1)
1086         m.setMeshAtLevel(-2,m0)
1087         m.write(fname,2)
1088         #
1089         FieldName1="Field1"
1090         compNames1=["comp1","comp2","comp3"]
1091         ff1=MEDFileField1TS.New()
1092         da2=DataArrayDouble.New()
1093         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1094         da2.iota(7.)
1095         da2.rearrange(len(compNames1))
1096         da2.setInfoOnComponents(compNames1)
1097         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1098         ff1.setFieldNoProfileSBT(f2)
1099         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1100         da0=DataArrayDouble.New()
1101         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1102         da0.iota(190.)
1103         da0.rearrange(len(compNames1))
1104         da0.setInfoOnComponents(compNames1)
1105         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1106         ff1.setFieldNoProfileSBT(f0)
1107         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1108         da1=DataArrayDouble.New()
1109         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1110         da1.iota(90.)
1111         da1.rearrange(len(compNames1))
1112         da1.setInfoOnComponents(compNames1)
1113         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1114         ff1.setFieldNoProfileSBT(f1)
1115         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1116         #
1117         ff1.write(fname,0)
1118         #
1119         FieldName2="Field2"
1120         compNames2=["comp11","comp22"]
1121         ff2=MEDFileField1TS.New()
1122         da0=DataArrayDouble.New()
1123         da0.alloc(m0.getNumberOfCells()*2,1)
1124         da0.iota(-190.)
1125         da0.rearrange(2)
1126         da0.setInfoOnComponents(compNames2)
1127         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1128         ff2.setFieldNoProfileSBT(f0)
1129         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1130         da1=DataArrayDouble.New()
1131         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1132         da1.iota(-90.)
1133         da1.rearrange(len(compNames2))
1134         da1.setInfoOnComponents(compNames2)
1135         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1136         ff2.setFieldNoProfileSBT(f1)
1137         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1138         #
1139         ff2.write(fname,0)
1140         #
1141         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1142         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1143         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1144         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1145         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1146         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1147         pass
1148
1149     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1150         fname="Pyfile43.med"
1151         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1152         m=MEDFileUMesh.New()
1153         m.setMeshAtLevel(0,m2)
1154         m.setMeshAtLevel(-1,m1)
1155         m.setMeshAtLevel(-2,m0)
1156         f=MEDFileField1TS.New()
1157         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1158         ff.setName("NodeFieldPfl")
1159         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1160         ff.setArray(arr)
1161         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1162         f.setFieldProfile(ff,m,-2,pfl)
1163         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1164         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1165         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1166         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1167         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1168         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1169         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1170         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1171         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1172         expected1=[1.,10.,100.,2.,20.,200.]
1173         nodeCoordsWithValue1=[10.,2.5,0.]
1174         nodeCoordsWithValue2=[10.,3.75,0.]
1175         for i in xrange(3):
1176             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1177             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1178             pass
1179         for i in xrange(6):
1180             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1181             pass
1182         del tes0
1183         #
1184         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1185         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1186         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1187         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1188         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1189         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1190         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1191         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1192         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1193         for i in xrange(6):
1194             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1195             pass
1196         m.write(fname,2)
1197         f.write(fname,0)
1198         #
1199         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1200         f=MEDFileField1TS.New()
1201         f.setFieldProfile(ff,m,-2,pfl)
1202         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1203         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1204         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1205         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1206         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1207         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1208         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1209         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1210         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1211         expected2=[2.,20.,200.,1.,10.,100.]
1212         for i in xrange(3):
1213             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1214             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1215             pass
1216         for i in xrange(6):
1217             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1218             pass
1219         #
1220         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1221         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1222         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1223         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1224         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1225         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1226         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1227         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1228         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1229         for i in xrange(6):
1230             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1231             pass
1232         pass
1233
1234     def testBuildInnerBoundaryAlongM1Group1(self):
1235         fname="Pyfile44.med"
1236         m=MEDCouplingCMesh.New()
1237         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1238         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1239         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1240         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1241         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1242         m2.setName(m.getName())
1243         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1244         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1245         mm=MEDFileUMesh.New()
1246         mm.setMeshAtLevel(0,m)
1247         mm.setMeshAtLevel(-1,m2)
1248         mm.setGroupsAtLevel(-1,[grp,grp2])
1249         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1250         mm.setGroupsAtLevel(1,[grpNode])
1251         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1252         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1253         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1254         #
1255         self.assertEqual(30,mm.getNumberOfNodes())
1256         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1257         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1258         #
1259         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1260         self.assertEqual([15,16,17],nodes.getValues());
1261         self.assertEqual([7,8,9],cells.getValues());
1262         self.assertEqual([12,13,14],cells2.getValues());
1263         self.assertEqual(33,mm.getNumberOfNodes())
1264         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1265         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1266         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1267         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1268         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
1269         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1270         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
1271         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1272         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])
1273         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1274         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1275         #
1276         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1277         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1278         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1279         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1280         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1281         mm.write(fname,2)
1282         pass
1283
1284     def testBuildInnerBoundaryAlongM1Group2(self):
1285         fname="Pyfile45.med"
1286         m=MEDCouplingCMesh.New()
1287         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1288         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1289         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1290         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1291         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1292         m2.setName(m.getName())
1293         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1294         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1295         mm=MEDFileUMesh.New()
1296         mm.setMeshAtLevel(0,m)
1297         mm.setMeshAtLevel(-1,m2)
1298         mm.setGroupsAtLevel(-1,[grp,grp2])
1299         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1300         mm.setGroupsAtLevel(1,[grpNode])
1301         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1302         ref1=[4,9,8,14,15,4,10,9,15,16]
1303         ref2=[4,9,8,14,30,4,10,9,30,16]
1304         #
1305         self.assertEqual(30,mm.getNumberOfNodes())
1306         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1307         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1308         #
1309         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1310         self.assertEqual([15],nodes.getValues());
1311         self.assertEqual([7,8],cells.getValues());
1312         self.assertEqual([12,13],cells2.getValues());
1313         self.assertEqual(31,mm.getNumberOfNodes())
1314         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1315         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1316         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1317         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1318         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
1319         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1320         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
1321         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1322         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])
1323         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1324         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1325         #
1326         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1327         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1328         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1329         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1330         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1331         mm.write(fname,2)       
1332         pass
1333
1334     def testBuildInnerBoundaryAlongM1Group3(self):
1335         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1336         fname = "Pyfile73.med"
1337         m = MEDCouplingCMesh.New()
1338         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1339         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1340         m = m.buildUnstructured(); m.setName("simple")
1341         m2 = m.buildDescendingConnectivity()[0]
1342         m2.setName(m.getName())
1343             
1344         # A crack in two non connected parts of the mesh:
1345         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp") 
1346
1347         mm = MEDFileUMesh.New()
1348         mm.setMeshAtLevel(0,m)
1349         mm.setMeshAtLevel(-1,m2)
1350         mm.setGroupsAtLevel(-1,[grpSeg])
1351         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1352         self.assertEqual([1,13],nodes.getValues());
1353         self.assertEqual([0,6],cellsMod.getValues());
1354         self.assertEqual([1,7],cellsNotMod.getValues());
1355         self.assertEqual(17,mm.getNumberOfNodes())
1356         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1357         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1358         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1359         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1360         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1361         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1362         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
1363         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1364
1365         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1366         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1367         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1368         #
1369         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1370         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1371         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1372         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1373         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1374         mm.write(fname,2)   
1375
1376     def testBuildInnerBoundaryAlongM1Group4(self):
1377         """ Test case where cells touch the M1 group on some nodes only and not on full egdes (triangle mesh for ex)
1378         """
1379         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1380                                0.,1., 1.,1., 2.,1., 3.,1.,
1381                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1382         conn = [3,0,4,1,  3,1,4,5,
1383                 3,5,9,10, 3,5,10,6,
1384                 3,2,6,7,  3,2,7,3,
1385                 3,4,8,9,  3,4,9,5,
1386                 3,1,5,6,  3,1,6,2,
1387                 3,6,10,11,3,6,11,7]
1388         # Only TRI3:
1389         connI = DataArrayInt()
1390         connI.alloc(13, 1); connI.iota(); connI *= 4
1391         m2 = MEDCouplingUMesh("2D", 2)
1392         m2.setCoords(coo)
1393         m2.setConnectivity(DataArrayInt(conn), connI)
1394         m2.checkConsistency()
1395         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1396         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1397         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1398         mfu = MEDFileUMesh()
1399         mfu.setMeshAtLevel(0, m2)
1400         mfu.setMeshAtLevel(-1, m1)
1401         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1402         nNod = m2.getNumberOfNodes()
1403         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1404         m2_bis = mfu.getMeshAtLevel(0)
1405         m2_bis.checkConsistency()
1406         m1_bis = mfu.getMeshAtLevel(-1)
1407         m1_bis.checkConsistency()
1408         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1409         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1410         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1411         self.assertEqual([6,7], nodesDup.getValues())
1412         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1413         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1414         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1415         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1416         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1417         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1418 #         mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1419         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1420         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1421         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1422         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1423         self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1424         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1425         m_bis0 = mfu.getMeshAtLevel(-1)
1426         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1427         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1428
1429     def testBuildInnerBoundary5(self):
1430         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1431         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1432         coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
1433         200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1434          200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546, 
1435          200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538, 
1436          0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483, 
1437          200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082, 
1438          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1439          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015, 
1440          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784, 
1441          97.16750463405486, 97.18018457127863], 46, 3)
1442         c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1443          39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1444          21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1445          14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1446          17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1447          24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1448          44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1449          44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1450          29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1451          21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1452          30, 2]
1453         cI0 = [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,
1454          190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 
1455          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1456         m3 = MEDCouplingUMesh("3D", 3)
1457         m3.setCoords(coo)
1458         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1459         m3.checkConsistency()
1460         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1461         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1462         mfu = MEDFileUMesh()
1463         mfu.setMeshAtLevel(0, m3)
1464         mfu.setMeshAtLevel(-1, m2)
1465         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1466         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1467         mfu.setGroupsAtLevel(-1, [grpIds])
1468         nNod = m3.getNumberOfNodes()
1469         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1470         m3_bis = mfu.getMeshAtLevel(0)
1471         m3_bis.checkConsistency()
1472         m2_bis = mfu.getMeshAtLevel(-1)
1473         m2_bis.checkConsistency()
1474         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1475         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1476         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1477         self.assertEqual([3], nodesDup.getValues())
1478         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1479         self.assertEqual(set([22]), set(cells1.getValues()))
1480         self.assertEqual(set([77]), set(cells2.getValues()))
1481         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1482         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1483         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1484         m_bis0 = mfu.getMeshAtLevel(-1)
1485         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1486         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1487         pass
1488
1489     def testBasicConstructors(self):
1490         fname="Pyfile18.med"
1491         m=MEDFileMesh.New(fname)
1492         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1493         m=MEDFileMesh.New(fname)
1494         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1495         m=MEDFileUMesh(fname)
1496         m=MEDFileUMesh()
1497         self.testMEDMesh6()
1498         m=MEDFileCMesh("MEDFileMesh5.med")
1499         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1500         m=MEDFileCMesh()
1501         m=MEDFileMeshMultiTS()
1502         m=MEDFileMeshMultiTS(fname)
1503         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1504         m=MEDFileMeshes()
1505         m=MEDFileMeshes(fname)
1506         m=MEDFileField1TS()
1507         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1508         m=MEDFileFieldMultiTS()
1509         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1510         m=MEDFileFields()
1511         m=MEDFileFields(fname)
1512         m=MEDFileData()
1513         m=MEDFileData(fname)
1514         #
1515         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1516         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1517         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1518         m=MEDCouplingCMesh()
1519         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1520         m=MEDCouplingFieldTemplate(ON_NODES)
1521         m=MEDCouplingMultiFields([])
1522         m=MEDCouplingFieldOverTime([])
1523         pass
1524
1525     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1526     def testBugSemiPartialField(self):
1527         fname="Pyfile46.med"
1528         m=MEDLoaderDataForTest.build2DMesh_3()
1529         m=m[:10] ; m.setName("mesh")
1530         f=m.getMeasureField(ON_CELLS)
1531         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1532         f.setTime(5.5,3,4)
1533         f.setName("SemiPartialField")
1534         #
1535         f1=f[:6] ; f1.getMesh().setName(m.getName())
1536         f2=f[6:] ; f2.getMesh().setName(m.getName())
1537         #
1538         mm=MEDFileUMesh.New()
1539         mm.setMeshAtLevel(0,m)
1540         ff=MEDFileField1TS.New()
1541         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1542         mm.write(fname,2)
1543         ff.write(fname,0)
1544         #
1545         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1546         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1547         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1548         #
1549         fread.checkConsistencyLight()
1550         fread2.checkConsistencyLight()
1551         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1552         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1553         pass
1554
1555     def testUnPolyze1(self):
1556         fname="Pyfile47.med"
1557         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1558         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]
1559         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1560         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]]))
1561         mm.write(fname,2)
1562         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1563         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1564         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1565         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1566         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1567         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1568         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1569         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1570         # to test
1571         mm.setRenumFieldArr(0,None)
1572         mm.setFamilyFieldArr(-1,None)
1573         pass
1574
1575     def testUnPolyze2(self):
1576         fname="Pyfile48.med"
1577         mfd=MEDFileData.New()
1578         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1579         meshes=MEDFileMeshes.New()
1580         meshes.pushMesh(mm)
1581         mfd.setMeshes(meshes)
1582         fields=MEDFileFields.New()
1583         mfd.setFields(fields)
1584         ff=MEDFileFieldMultiTS.New()
1585         fields.pushField(ff)
1586         #
1587         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1588         f0_0.setTime(9.5,3,4)
1589         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1590         f0_0.setArray(da)
1591         f0_0.setMesh(mm.getMeshAtLevel(0))
1592         ff.appendFieldNoProfileSBT(f0_0)
1593         ff0=ff.getTimeStepAtPos(0)
1594         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1595         f0_1.setTime(9.5,3,4)
1596         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1597         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1598         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1599         f0_1.setArray(da)
1600         ff0.setFieldProfile(f0_1,mm,0,pfl)
1601         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1602         f0_2.setTime(9.5,3,4)
1603         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1604         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
1605         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1606         f0_2.setArray(da)
1607         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1608         mfd.getFields().shallowCpyGlobs(ff0)
1609         #
1610         mfd.unPolyzeMeshes()
1611         #
1612         fmts=mfd.getFields()[0]
1613         self.assertEqual(fmts.getNumberOfTS(),1)
1614         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1615         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1616         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))])
1617         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1618         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1619         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1620         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1621         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1622         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1623         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1624         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))
1625         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1626         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1627         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1628         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1629         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1630         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])
1631         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1632         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1633         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1634         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])
1635         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1636         #
1637         mfd.write(fname,2)
1638         pass
1639
1640     def testGaussWriteOnPfl1(self):
1641         fname="Pyfile49.med"
1642         fname2="Pyfile50.med"
1643         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1644         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1645         mQ8.allocateCells(1)
1646         mQ8.insertNextCell(NORM_QUAD8,range(8))
1647         mQ8.finishInsertingCells()
1648         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1649         mQ4.allocateCells(1)
1650         mQ4.insertNextCell(NORM_QUAD4,range(4))
1651         mQ4.finishInsertingCells()
1652         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1653         mT3.allocateCells(1)
1654         mT3.insertNextCell(NORM_TRI3,range(3))
1655         mT3.finishInsertingCells()
1656         
1657         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.]]
1658         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1659         ms[:]=(elt.deepCopy() for elt in ms)
1660         for m,t in zip(ms,tr):
1661             d=m.getCoords() ; d+= t
1662             pass
1663         m=MEDCouplingUMesh.MergeUMeshes(ms)
1664         m.setName("mesh")
1665         m2=m[:13] ; m2.setName(m.getName())
1666         ### 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.
1667         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1668         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1669         f.setMesh(m2)
1670         f.setTime(4.5,1,2)
1671         da=DataArrayDouble(34) ; da.iota(3.)
1672         f.setArray(da)
1673         f.setName("fieldCellOnPflWithoutPfl")
1674         fInvalid=f.deepCopy()
1675         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])
1676         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])
1677         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])
1678         f.checkConsistencyLight()
1679         fInvalid2=fInvalid.deepCopy()
1680         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1681         #
1682         mm=MEDFileUMesh()
1683         mm.setMeshAtLevel(0,m)
1684         mm.write(fname,2)
1685         #
1686         f1ts=MEDFileField1TS.New()
1687         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1688         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1689         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1690         f1ts.setFieldProfile(f,mm,0,pfl)
1691         f1ts.write(fname,0)
1692         #
1693         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1694         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1695         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1696         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1697         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1698         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1699         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1700         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1701         #
1702         dataRead=MEDFileData.New(fname)
1703         mRead=dataRead.getMeshes()[0]
1704         f1tsRead=dataRead.getFields()[0][0]
1705         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1706         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1707         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1708         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1709         f2_bis.checkConsistencyLight()
1710         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1711         #
1712         WriteField(fname2,f,True)
1713         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1714         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1715         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1716         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1717         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1718         m2=m[pfl] ; m2.setName(m.getName())
1719         f.setMesh(m2)
1720         f.setTime(4.5,1,2)
1721         da=DataArrayDouble(35) ; da.iota(3.)
1722         f.setArray(da)
1723         f.setName("fieldCellOnPflWithoutPfl2")
1724         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1725         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])
1726         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])
1727         f.checkConsistencyLight()
1728         #
1729         mm=MEDFileUMesh()
1730         mm.setMeshAtLevel(0,m)
1731         mm.write(fname,2)
1732         f1ts=MEDFileField1TS.New()
1733         f1ts.setFieldProfile(f,mm,0,pfl)
1734         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1735         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1736         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1737         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1738         f1ts.write(fname,0)
1739         dataRead=MEDFileData.New(fname)
1740         mRead=dataRead.getMeshes()[0]
1741         f1tsRead=dataRead.getFields()[0][0]
1742         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1743         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1744         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1745         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1746         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1747         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1748         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1749         #
1750         WriteField(fname2,f,True)
1751         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1752         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1753         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1754         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1755         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1756         f.setMesh(m)
1757         f.setTime(4.5,1,2)
1758         da=DataArrayDouble(60) ; da.iota(3.)
1759         f.setArray(da)
1760         f.setName("fieldCellWithoutPfl")
1761         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])
1762         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])
1763         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])
1764         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])
1765         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])
1766         f.checkConsistencyLight()
1767         mm=MEDFileUMesh()
1768         mm.setMeshAtLevel(0,m) 
1769         f1ts=MEDFileField1TS.New()
1770         f1ts.setFieldNoProfileSBT(f)
1771         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1772         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1773         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1774         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1775         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1776         mm.write(fname,2)
1777         f1ts.write(fname,0)
1778         #
1779         dataRead=MEDFileData.New(fname)
1780         mRead=dataRead.getMeshes()[0]
1781         f1tsRead=dataRead.getFields()[0][0]
1782         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1783         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1784         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1785         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1786         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1787         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1788         #
1789         WriteField(fname2,f,True)
1790         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1791         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1792         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1793         pass
1794
1795     # Testing profile on nodes when the profile is identity but not on all nodes.
1796     def testMEDFieldPflOnNode1(self):
1797         fname="Pyfile51.med"
1798         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)
1799         m0=MEDCouplingUMesh("Mesh",2)
1800         m0.allocateCells(5)
1801         m0.insertNextCell(NORM_TRI3,[1,4,2])
1802         m0.insertNextCell(NORM_TRI3,[4,5,2])
1803         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1804         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1805         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1806         m0.finishInsertingCells()
1807         m0.setCoords(coo)
1808         m1=MEDCouplingUMesh(m0.getName(),1)
1809         m1.allocateCells(9)
1810         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1811         for i in xrange(9):
1812             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1813             pass
1814         m1.finishInsertingCells()
1815         m1.setCoords(coo)
1816         #
1817         m=MEDFileUMesh()
1818         m.setMeshAtLevel(0,m0)
1819         m.setMeshAtLevel(-1,m1)
1820         #
1821         dt=3 ; it=2 ; tim=4.5
1822         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1823         fieldNode0.setName("fieldNode0")
1824         fieldNode0.setTime(tim,dt,it)
1825         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1826         arr=DataArrayDouble([10,11,12,13,14])
1827         fieldNode0.setArray(arr)
1828         f0=MEDFileField1TS()
1829         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1830         m.write(fname,2) ; f0.write(fname,0)
1831         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1832         fieldNode1.setName("fieldNode1")
1833         fieldNode1.setTime(tim,dt,it)
1834         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1835         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1836         fieldNode1.setArray(arr1)
1837         f1=MEDFileField1TS()
1838         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1839         f1.write(fname,0)
1840         del m,f0,m0,m1,f1
1841         ## Reading from file
1842         m=MEDFileMesh.New(fname)
1843         m0=m.getMeshAtLevel(0)
1844         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1845         fieldNode0.setMesh(m00)
1846         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1847         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1848         ff0_1.checkConsistencyLight()
1849         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1850         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1851         ff0_2.checkConsistencyLight()
1852         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1853         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1854         ff0_3.checkConsistencyLight()
1855         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1856         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1857         ff0_4.checkConsistencyLight()
1858         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1859         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1860         m1=m.getMeshAtLevel(-1)
1861         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1862         fieldNode1.setMesh(m10)
1863         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1864         ff1_1.checkConsistencyLight()
1865         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1866         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1867         ff1_2.checkConsistencyLight()
1868         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1869         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1870         ff1_3.checkConsistencyLight()
1871         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1872         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1873         ff1_4.checkConsistencyLight()
1874         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1875         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]
1876         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]
1877         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]
1878         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1879         arr_r.setName(fieldNode1.getArray().getName())
1880         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1881         pfl1_r.setName(pfl1.getName())
1882         self.assertTrue(pfl1_r.isEqual(pfl1))
1883         pass
1884     
1885         # Testing profile on nodes when the profile is identity but not on all nodes.
1886     def testMEDFieldPflOnCell1(self):
1887         fname="Pyfile52.med"
1888         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)
1889         m0=MEDCouplingUMesh("Mesh",2)
1890         m0.allocateCells(5)
1891         m0.insertNextCell(NORM_TRI3,[1,4,2])
1892         m0.insertNextCell(NORM_TRI3,[4,5,2])
1893         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1894         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1895         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1896         m0.finishInsertingCells()
1897         m0.setCoords(coo)
1898         m1=MEDCouplingUMesh(m0.getName(),1)
1899         m1.allocateCells(9)
1900         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1901         for i in xrange(9):
1902             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1903             pass
1904         m1.finishInsertingCells()
1905         m1.setCoords(coo)
1906         #
1907         m=MEDFileUMesh()
1908         m.setMeshAtLevel(0,m0)
1909         m.setMeshAtLevel(-1,m1)
1910         #
1911         dt=3 ; it=2 ; tim=4.5
1912         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1913         fieldCell0.setName("fieldCell0")
1914         fieldCell0.setTime(tim,dt,it)
1915         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1916         arr=DataArrayDouble([10,11,12])
1917         fieldCell0.setArray(arr)
1918         f0=MEDFileField1TS()
1919         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1920         m.write(fname,2) ; f0.write(fname,0)
1921         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1922         fieldCell1.setName("fieldCell1")
1923         fieldCell1.setTime(tim,dt,it)
1924         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1925         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1926         fieldCell1.setArray(arr1)
1927         f1=MEDFileField1TS()
1928         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1929         f1.write(fname,0)
1930         del m,f0,m0,m1,f1
1931         ## Reading from file
1932         m=MEDFileMesh.New(fname)
1933         m0=m.getMeshAtLevel(0)
1934         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1935         fieldCell0.setMesh(m00)
1936         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1937         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1938         ff0_1.checkConsistencyLight()
1939         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1940         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1941         ff0_2.checkConsistencyLight()
1942         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1943         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1944         ff0_3.checkConsistencyLight()
1945         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1946         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1947         ff0_4.checkConsistencyLight()
1948         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1949         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1950         m1=m.getMeshAtLevel(-1)
1951         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1952         fieldCell1.setMesh(m10)
1953         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1954         ff1_1.checkConsistencyLight()
1955         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1956         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1957         ff1_2.checkConsistencyLight()
1958         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1959         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1960         ff1_3.checkConsistencyLight()
1961         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1962         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1963         ff1_4.checkConsistencyLight()
1964         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1965         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]
1966         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]
1967         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]
1968         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1969         arr_r.setName(fieldCell1.getArray().getName())
1970         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1971         pfl1_r.setName(pfl1.getName())
1972         self.assertTrue(pfl1_r.isEqual(pfl1))
1973         pass
1974
1975     def testMEDFileUMeshZipCoords1(self):
1976         m=MEDFileUMesh()
1977         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1978         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])
1979         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1980         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1981         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1982         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1983         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1984         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1985         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1986         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1987         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1988         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1989         o2n=m.zipCoords()
1990         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1991         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1992         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1993         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1994         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1995         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1996         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1997         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1998         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1999         pass
2000
2001     def testMEDUMeshAddNodeGroup1(self):
2002         fname="Pyfile53.med"
2003         m=MEDFileUMesh()
2004         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2005         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])
2006         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2007         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2008         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2009         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2010         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2011         #
2012         mm=m.deepCopy()
2013         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2014         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2015         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2016         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2017         mm.setFamilyId("MyFam",2)
2018         mm.setFamilyId("MyOtherFam",3)
2019         mm.setFamilyId("MyOther-1",-1)
2020         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2021         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2022         #
2023         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2024         mm.addNodeGroup(daTest)
2025         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2026         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2027         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2028             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2029             pass
2030         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2031         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2032         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2033         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2034         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2035             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2036             pass
2037         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2038         da=DataArrayInt([3,12]) ; da.setName("grp0")
2039         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2040         da.setValues([1])
2041         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2042         mm.write(fname,2)
2043         mm=MEDFileMesh.New(fname)
2044         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2045         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2046         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2047             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2048             pass
2049         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2050         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2051         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2052         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2053         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2054             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2055             pass
2056         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2057         da=DataArrayInt([3,12]) ; da.setName("grp0")
2058         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2059         da.setValues([1])
2060         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2061         pass
2062
2063     def testMEDUMeshAddGroup1(self):
2064         fname="Pyfile54.med"
2065         m=MEDFileUMesh()
2066         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2067         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2068         for i in xrange(7):
2069             m0.insertNextCell(NORM_TRI3,[1,2,1])
2070             pass
2071         for i in xrange(4):
2072             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2073             pass
2074         for i in xrange(2):
2075             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2076             pass
2077         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2078         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2079         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2080         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2081         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2082         #
2083         mm=m.deepCopy()
2084         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2085         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2086         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2087         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2088         mm.setFamilyId("MyFam",2)
2089         mm.setFamilyId("MyOtherFam",3)
2090         mm.setFamilyId("MyOther-1",-1)
2091         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2092         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2093         #
2094         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2095         mm.addGroup(0,daTest)
2096         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2097         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2098         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2099             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2100             pass
2101         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2102         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2103         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2104         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2105         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2106             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2107             pass
2108         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2109         da=DataArrayInt([3,12]) ; da.setName("grp0")
2110         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2111         da.setValues([1])
2112         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2113         mm.write(fname,2)
2114         mm=MEDFileMesh.New(fname)
2115         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2116         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2117         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2118             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2119             pass
2120         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2121         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2122         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2123         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2124         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2125             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2126             pass
2127         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2128         da=DataArrayInt([3,12]) ; da.setName("grp0")
2129         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2130         da.setValues([1])
2131         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2132         pass
2133
2134     def testHeapMem1(self):
2135         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2136         a.alloc(0,1)
2137         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2138         #
2139         m=MEDCouplingCMesh()
2140         arr=DataArrayDouble(10,1) ; arr.iota(0)
2141         m.setCoords(arr,arr)
2142         m=m.buildUnstructured()
2143         m.setName("mm")
2144         f=m.getMeasureField(ON_CELLS)
2145         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100+4*strMulFac))
2146         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100+8*strMulFac))
2147         #
2148         mm=MEDFileUMesh()
2149         mm.setMeshAtLevel(0,m)
2150         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,4225+100+10*strMulFac))
2151         ff=MEDFileField1TS()
2152         ff.setFieldNoProfileSBT(f)
2153         self.assertIn(ff.getHeapMemorySize(),xrange(771-40,871+21+(4+1)*strMulFac))
2154         #
2155         fff=MEDFileFieldMultiTS()
2156         fff.appendFieldNoProfileSBT(f)
2157         self.assertIn(fff.getHeapMemorySize(),xrange(815-50,915+30+(6+2)*strMulFac))
2158         f.setTime(1.,0,-1)
2159         fff.appendFieldNoProfileSBT(f)
2160         self.assertIn(fff.getHeapMemorySize(),xrange(1594-90,1794+50+(10+1)*strMulFac))
2161         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(771-40,871+20+(4+1)*strMulFac))
2162         f2=f[:50]
2163         f2.setTime(2.,1,-1)
2164         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2165         fff.appendFieldProfile(f2,mm,0,pfl)
2166         self.assertIn(fff.getHeapMemorySize(),xrange(2348-130,2608+100+(10+2)*strMulFac))
2167         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(),xrange(204-10,204+10+2*strMulFac))
2168         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(738-50,838+30+4*strMulFac))
2169         pass
2170
2171     def testCurveLinearMesh1(self):
2172         fname="Pyfile55.med"
2173         mesh=MEDCouplingCurveLinearMesh();
2174         mesh.setTime(2.3,4,5);
2175         mesh.setTimeUnit("us");
2176         mesh.setName("Example of Cuve linear mesh");
2177         mesh.setDescription("buildCLMesh");
2178         a1=DataArrayDouble(3*20,1);
2179         a1.iota(7.) ; a1.rearrange(3);
2180         mesh.setCoords(a1);
2181         mesh.setNodeGridStructure([4,5]);
2182         mesh.checkConsistencyLight();
2183         #
2184         m=MEDFileCurveLinearMesh()
2185         m.setMesh(mesh)
2186         d=DataArrayInt(20) ; d.iota(4)
2187         m.setFamilyFieldArr(1,d)
2188         d3=DataArrayInt(20) ; d3.iota(400)
2189         m.setRenumFieldArr(1,d3)
2190         d2=DataArrayInt(12) ; d2.iota(40)
2191         m.setFamilyFieldArr(0,d2)
2192         d4=DataArrayInt(21) ; d4.iota(4000)
2193         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2194         d4.popBackSilent()
2195         m.setRenumFieldArr(1,d4)
2196         m.write(fname,2)
2197         #
2198         m1=MEDFileCurveLinearMesh(fname)
2199         mm=m1.getMesh()
2200         self.assertTrue(mm.isEqual(mesh,1e-12))
2201         self.assertEqual(mm.getSpaceDimension(),3)
2202         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2203         #
2204         m1=MEDFileMesh.New(fname)
2205         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2206         self.assertTrue(isinstance(m1.getUnivName(),str))
2207         self.assertTrue(len(m1.getUnivName())!=0)
2208         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2209         pass
2210
2211     def testParameters1(self):
2212         fname="Pyfile56.med"
2213         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2214         mm=MEDFileCMesh() ; mm.setMesh(m)
2215         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2216         data=MEDFileData()
2217         p=MEDFileParameters()
2218         data.setParams(p) ; data.setMeshes(ms)
2219         pts=MEDFileParameterMultiTS()
2220         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2221         pts.appendValue(1,2,3.4,567.89)
2222         pts.appendValue(2,3,5.6,999.123)
2223         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2224         p.pushParam(pts) ; p.pushParam(pts2)
2225         data.write(fname,2)
2226         p2=MEDFileParameters(fname)
2227         self.assertTrue(p.isEqual(p2,1e-14)[0])
2228         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2229         p3=p.deepCopy()
2230         pts4=pts2.deepCopy()
2231         pts3=pts2.deepCopy()
2232         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2233         pts2.eraseTimeStepIds([0])
2234         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2235         del pts3[[3.4]]
2236         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2237         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2238         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2239         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2240         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2241         p=p3
2242         self.assertTrue(p.isEqual(p2,1e-14)[0])
2243         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2244         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2245         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2246         self.assertEqual(p.getParamsNames(),('A','B'))
2247         ptsr=MEDFileParameterMultiTS(fname,"B")
2248         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2249         ptsr=MEDFileParameterMultiTS(fname)
2250         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2251         p1tsr=MEDFileParameterDouble1TS(fname)
2252         self.assertEqual(p1tsr.getName(),"A")
2253         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2254         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2255         self.assertEqual(p1tsr.getName(),"B")
2256         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2257         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2258         self.assertEqual(p1tsr.getName(),"B")
2259         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2260         data2=MEDFileData(fname)
2261         self.assertEqual(2,data2.getNumberOfParams())
2262         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2263         pass
2264
2265     def testNamesOnCellAndNodesInMeshes1(self):
2266         fname="Pyfile58.med"
2267         fname2="Pyfile59.med"
2268         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2269         m1=m.buildDescendingConnectivity()[0]
2270         m1.sortCellsInMEDFileFrmt()
2271         #
2272         mm=MEDFileUMesh()
2273         mm.setMeshAtLevel(0,m)
2274         mm.setMeshAtLevel(-1,m1)
2275         namesCellL0=DataArrayAsciiChar(6,16)
2276         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2277         mm.setNameFieldAtLevel(0,namesCellL0)
2278         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2279         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2280         mm.setNameFieldAtLevel(-1,namesCellL1)
2281         namesNodes=namesCellL1.subArray(4,16)
2282         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2283         mm.setNameFieldAtLevel(1,namesNodes)
2284         mm.write(fname,2)
2285         #
2286         mmr=MEDFileMesh.New(fname)
2287         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2288         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2289         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2290         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2291         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2292         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2293         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2294         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2295         mmCpy=mm.deepCopy()
2296         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2297         # remove names on nodes
2298         mmCpy.setNameFieldAtLevel(1,None)
2299         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2300         mm.setNameFieldAtLevel(1,None)
2301         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2302         mm.setNameFieldAtLevel(-1,None)
2303         mm.write(fname,2)
2304         mmr=MEDFileMesh.New(fname)
2305         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2306         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2307         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2308         #
2309         c=MEDCouplingCMesh()
2310         arr=DataArrayDouble([0.,1.1,2.3])
2311         c.setCoords(arr,arr)
2312         c.setName("cmesh")
2313         cc=MEDFileCMesh()
2314         cc.setMesh(c)
2315         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2316         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2317         cc.write(fname2,2)
2318         ccr=MEDFileMesh.New(fname2)
2319         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2320         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2321         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2322         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2323         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2324         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2325         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2326         ccCpy=cc.deepCopy()
2327         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2328         pass
2329
2330     def testToExportInExamples1(self):
2331         m=MEDCouplingCMesh()
2332         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2333         m.setCoords(arr,arr)
2334         m=m.buildUnstructured() ; m.setName("mesh")
2335         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2336         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2337         m2=m.computeSkin()
2338         mm=MEDFileUMesh()
2339         mm.setMeshAtLevel(0,m)
2340         mm.setMeshAtLevel(-1,m2)
2341         mm.setGroupsAtLevel(0,[grp1,grp2])
2342         mm.write("example.med",2)
2343         #
2344         m0=mm.getMeshAtLevel(0)
2345         m1=mm.getMeshAtLevel(-1)
2346         grp1=mm.getGroupArr(0,"grp1")
2347         grp2=mm.getGroupArr(0,"grp2")
2348         grps=[grp1,grp2]
2349         whichGrp=DataArrayInt(m0.getNumberOfCells())
2350         whichGrp.fillWithValue(-1)
2351         for grpId,grp in enumerate(grps):
2352             whichGrp[grp]=grpId
2353             pass
2354         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2355         e,f=a.areCellsIncludedIn(m1,2)
2356         self.assertTrue(e)
2357         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2358         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2359         c2.transformWithIndArr(whichGrp)
2360         splitOfM1=len(grps)*[None]
2361         for grpId,grp in enumerate(grps):
2362             tmp=c2.findIdsEqual(grpId)
2363             splitOfM1[grpId]=tmp
2364             pass
2365         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2366         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2367         pass
2368
2369     def testBugCorrection1(self):
2370         fs=MEDFileFields()
2371         fs.resize(3)
2372         self.assertEqual(fs[0],None)
2373         self.assertEqual(3,len(fs))
2374         pass
2375
2376     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2377         f1Name="Pyfile60.med"
2378         f2Name="Pyfile61.med"
2379         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2380         d1.write(f1Name,2)
2381         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2382         d2.write(f2Name,2)
2383         # reading and compare
2384         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2385         for mn in d1.getMeshes().getMeshesNames():
2386             m1=d1.getMeshes()[mn]
2387             m2=d2.getMeshes()[mn]
2388             for lev in m1.getNonEmptyLevels():
2389                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2390                 for grpName in grpsNames:
2391                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2392                     pass
2393                 pass
2394             pass
2395         for fieldn in d1.getFields().getFieldsNames():
2396             f1=d1.getFields()[fieldn]
2397             f2=d2.getFields()[fieldn]
2398             for it,order,tim in f1.getTimeSteps():
2399                 f1t=f1[it,order]
2400                 f2t=f2[it,order]
2401                 if len(f1t.getPflsReallyUsed())!=0:
2402                     # profile case
2403                     for lev in f1t.getNonEmptyLevels()[1]:
2404                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2405                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2406                         self.assertTrue(pfl1.isEqual(pfl2))
2407                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2408                         pass
2409                     pass
2410                 else:
2411                     # no profile case
2412                     for lev in f1t.getNonEmptyLevels()[1]:
2413                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2414                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2415                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2416                         pass
2417                     pass
2418                 pass
2419             pass
2420         pass
2421
2422     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2423         m=MEDCouplingCMesh()
2424         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2425         m.setCoords(arr,arr,arr)
2426         m=m.buildUnstructured()
2427         m2=m.buildDescendingConnectivity()[0]
2428         m.setName("mesh")
2429         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2430         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2431         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2432         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2433         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2434         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2435         mm=MEDFileUMesh()
2436         mm.setMeshAtLevel(0,m)
2437         mm.setGroupsAtLevel(0,[g1,g2])
2438         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2439         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2440         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2441         mm.normalizeFamIdsMEDFile()
2442         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2443         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2444         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2445         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2446         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2447         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2448         for g in mm.getGroupsOnSpecifiedLev(0):
2449             for f in mm.getFamiliesIdsOnGroup(g):
2450                 self.assertTrue(f<0)
2451                 pass
2452             pass
2453         #
2454         mm=MEDFileUMesh()
2455         mm.setMeshAtLevel(0,m)
2456         mm.setMeshAtLevel(-1,m2)
2457         mm.setGroupsAtLevel(0,[g1,g2])
2458         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2459         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2460         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2461         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2462         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2463         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2464         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2465         mm.normalizeFamIdsMEDFile()
2466         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2467         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2468         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2469         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2470         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2471         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2472         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2473         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2474         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2475         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2476         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2477         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2478         for lev in [0,-1]:
2479             for g in mm.getGroupsOnSpecifiedLev(lev):
2480                 for f in mm.getFamiliesIdsOnGroup(g):
2481                     self.assertTrue(f<0)
2482                     pass
2483                 pass
2484             pass
2485          #
2486         mm=MEDFileUMesh()
2487         mm.setMeshAtLevel(0,m)
2488         mm.setMeshAtLevel(-1,m2)
2489         mm.setGroupsAtLevel(0,[g1,g2])
2490         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2491         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2492         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2493         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2494         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2495         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2496         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2497         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2498         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2499         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2500         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2501         mm.normalizeFamIdsMEDFile()
2502         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2503         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2504         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2505         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2506         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2507         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2508         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2509         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2510         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2511         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2512         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2513         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2514         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2515         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2516         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2517         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2518         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2519         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2520         for lev in [0,-1]:
2521             for g in mm.getGroupsOnSpecifiedLev(lev):
2522                 for f in mm.getFamiliesIdsOnGroup(g):
2523                     self.assertTrue(f<0)
2524                     pass
2525                 pass
2526             pass
2527         for g in mm.getGroupsOnSpecifiedLev(1):
2528             for f in mm.getFamiliesIdsOnGroup(g):
2529                 self.assertTrue(f>0)
2530                 pass
2531             pass
2532         pass
2533     
2534     def testNonRegressionMantis22212ChangeGrpName(self):
2535         fileName="Pyfile62.med"
2536         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2537         m=MEDFileUMesh.New()
2538         m.setCoords(m2.getCoords())
2539         m.setMeshAtLevel(0,m2)
2540         m.setMeshAtLevel(-1,m1)
2541         m.setMeshAtLevel(-2,m0)
2542         m.setFamilyFieldArr(0,f2)
2543         m.setFamilyFieldArr(-1,f1)
2544         m.setFamilyFieldArr(-2,f0)
2545         m.setFamilyFieldArr(1,p)
2546         nbOfFams=len(fns)
2547         for i in xrange(nbOfFams):
2548             m.addFamily(fns[i],fids[i])
2549             pass
2550         nbOfGrps=len(grpns)
2551         for i in xrange(nbOfGrps):
2552             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2553             pass
2554         m.setName(m2.getName())
2555         m.setDescription(m2.getDescription())
2556         m.write(fileName,2)
2557         #
2558         mm0=MEDFileMesh.New(fileName)
2559         mm1=MEDFileMesh.New(fileName)
2560         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2561         for name in groupNamesIni:
2562             mm1.changeGroupName(name,name+'N')
2563             pass
2564         mm1.write(fileName,2)
2565         del mm1
2566         #
2567         mm2=MEDFileMesh.New(fileName)
2568         for name in groupNamesIni:
2569             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2570                 arr0=mm0.getGroupArr(lev,name)
2571                 arr2=mm2.getGroupArr(lev,name+'N')
2572                 arr0.setName(name+'N')
2573                 self.assertTrue(arr0.isEqual(arr2))
2574                 pass
2575             pass
2576         pass
2577
2578     def testInt32InMEDFileFieldStar1(self):
2579         fname="Pyfile63.med"
2580         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2581         f1=f1.convertToIntField()
2582         m1=f1.getMesh()
2583         mm1=MEDFileUMesh.New()
2584         mm1.setCoords(m1.getCoords())
2585         mm1.setMeshAtLevel(0,m1)
2586         mm1.setName(m1.getName())
2587         mm1.write(fname,2)
2588         ff1=MEDFileIntField1TS()
2589         ff1.setFieldNoProfileSBT(f1)
2590         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2591         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2592         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2593         ff1.write(fname,0)
2594         ff2=MEDFileAnyTypeField1TS.New(fname)
2595         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2596         self.assertEqual(ff2.getTime(),[0,1,2.0])
2597         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2598         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2599         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2600         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2601         ff2.setTime(1,2,3.)
2602         c=ff2.getUndergroundDataArray() ; c*=2
2603         ff2.write(fname,0) # 2 time steps in 
2604         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2605         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2606         self.assertEqual(len(ffs1),2)
2607         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2608         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2609         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2610         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2611         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2612         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2613         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2614         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2615         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2616         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
2617         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2618         for it in ffs1:
2619             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2620             bc+=a.getArray()
2621             pass
2622         self.assertTrue(bc.isEqual(3*f1.getArray()))
2623         nf1=MEDCouplingFieldInt(ON_NODES)
2624         nf1.setTime(9.,10,-1)
2625         nf1.setMesh(f1.getMesh())
2626         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2627         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2628         nff1=MEDFileIntField1TS.New()
2629         nff1.setFieldNoProfileSBT(nf1)
2630         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2631         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2632         nff1.write(fname,0)
2633         #
2634         nf2=MEDCouplingFieldInt(ON_NODES)
2635         nf2.setTime(19.,20,-11)
2636         nf2.setMesh(f1.getMesh())
2637         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2638         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2639         nff2=MEDFileIntField1TS.New()
2640         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2641         nff2.setFieldProfile(nf2,mm1,0,npfl)
2642         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2643         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2644         self.assertTrue(b.isEqual(npfl))
2645         self.assertTrue(a.isEqual(narr2))
2646         nff2.write(fname,0)
2647         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2648         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2649         self.assertTrue(b.isEqual(npfl))
2650         self.assertTrue(a.isEqual(narr2))
2651         #
2652         nf3=MEDCouplingFieldDouble(ON_NODES)
2653         nf3.setName("VectorFieldOnNodesDouble")
2654         nf3.setTime(29.,30,-21)
2655         nf3.setMesh(f1.getMesh())
2656         nf3.setArray(f1.getMesh().getCoords())
2657         nff3=MEDFileField1TS.New()
2658         nff3.setFieldNoProfileSBT(nf3)
2659         nff3.write(fname,0)
2660         fs=MEDFileFields(fname)
2661         self.assertEqual(len(fs),4)
2662         ffs=[it for it in fs]
2663         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2664         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2665         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2666         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2667         #
2668         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2669         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2670         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2671         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2672         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2673         #
2674         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2675         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2676         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2677         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2678         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2679         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2680         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2681         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2682         #
2683         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2684         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2685         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2686         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2687         pass
2688
2689     def testMEDFileFields1(self):
2690         fname="Pyfile64.med"
2691         f1=MEDCouplingFieldDouble(ON_NODES)
2692         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2693         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2694         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2695         f1.setMesh(m)
2696         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2697         f1.setArray(arr)
2698         f1.setName("Field1")
2699         ff1=MEDFileField1TS.New()
2700         ff1.setFieldNoProfileSBT(f1)
2701         self.assertEqual(ff1.getDtUnit(),"us")
2702         ff1.write(fname,0)
2703         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2704         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2705         #
2706         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2707         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2708         ff1s.setName("Field2")
2709         ff1s.write(fname,0)
2710         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2711         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2712         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2713         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2714         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2715         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2716         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2717         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2718         pass
2719
2720     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2721     def testMEDFileFields2(self):
2722         fname="Pyfile65.med"
2723         # to check that all is initialize 
2724         MEDFileField1TS().__str__()
2725         MEDFileFieldMultiTS().__str__()
2726         # building a mesh containing 4 tri3 + 5 quad4
2727         tri=MEDCouplingUMesh("tri",2)
2728         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2729         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2730         tris=[tri.deepCopy() for i in xrange(4)]
2731         for i,elt in enumerate(tris): elt.translate([i,0])
2732         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2733         quad=MEDCouplingUMesh("quad",2)
2734         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2735         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2736         quads=[quad.deepCopy() for i in xrange(5)]
2737         for i,elt in enumerate(quads): elt.translate([5+i,0])
2738         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2739         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2740         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2741         #
2742         fmts0_0=MEDFileFieldMultiTS()
2743         fmts0_1=MEDFileFieldMultiTS()
2744         # time steps
2745         for i in xrange(10):
2746             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2747             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2748             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2749             f.setTime(float(i+1)+0.1,i+1,-i-1)
2750             fmts0_0.appendFieldNoProfileSBT(f)
2751             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2752             self.assertEqual(fmts0_1.getName(),name1)
2753             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2754             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2755             if i>1:
2756                 # components names have been modified to generate errors
2757                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2758                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2759                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2760                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2761                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2762                 pass
2763             # add a mismatch of nb of compos
2764             pass
2765         fmts0_2=fmts0_0.deepCopy()
2766         fmts0_3=fmts0_0.deepCopy()
2767         fmts0_4=fmts0_0.deepCopy()
2768         fmts0_5=fmts0_0.shallowCpy()
2769         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)
2770         del fmts0_2[::2]
2771         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2772         del fmts0_3[[1.1,(6,-6),9]]
2773         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2774         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2775         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2776         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2777         fmts0_7=fmts0_4[::-3]
2778         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2779         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2780         #
2781         fs0=MEDFileFields()
2782         fs0.pushField(fmts0_0)
2783         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2784         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2785         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2786         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2787         fs0.write(fname,2)
2788         fs0=MEDFileFields(fname)
2789         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2790         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2791         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2792         del fs1[["2ndField",3]]
2793         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2794         fs2=fs0[[0,"4thField"]]
2795         self.assertTrue(isinstance(fs2,MEDFileFields))
2796         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2797         #
2798         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2799         pass
2800
2801     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2802     def testMEDFileFields3(self):
2803         fname="Pyfile66.med"
2804         # building a mesh containing 4 tri3 + 5 quad4
2805         tri=MEDCouplingUMesh("tri",2)
2806         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2807         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2808         tris=[tri.deepCopy() for i in xrange(4)]
2809         for i,elt in enumerate(tris): elt.translate([i,0])
2810         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2811         quad=MEDCouplingUMesh("quad",2)
2812         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2813         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2814         quads=[quad.deepCopy() for i in xrange(5)]
2815         for i,elt in enumerate(quads): elt.translate([5+i,0])
2816         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2817         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2818         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2819         #
2820         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2821         #
2822         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2823         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2824         fmts0_0=MEDFileFieldMultiTS()
2825         fmts0_1=MEDFileFieldMultiTS()
2826         # time steps
2827         for i in xrange(10):
2828             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2829             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2830             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2831             f.setTime(float(i+1)+0.1,i+1,-i-1)
2832             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2833             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2834             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2835             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2836             pass
2837         #
2838         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2839         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2840         fmts0_0.zipPflsNames()
2841         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2842         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2843         fmts0_2=fmts0_0.deepCopy()
2844         fmts0_3=fmts0_0.deepCopy()
2845         fmts0_4=fmts0_0.deepCopy()
2846         fs0=MEDFileFields()
2847         fs0.pushField(fmts0_0)
2848         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2849         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2850         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2851         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2852         #
2853         fmts0_5=MEDFileFieldMultiTS()
2854         for i in xrange(7):
2855             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2856             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2857             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2858             f.setTime(float(i+1)+0.1,i+1,-i-1)
2859             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2860             pass
2861         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2862         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2863         fs0.checkGlobsCoherency()
2864         fs0.write(fname,0)
2865         pass
2866     
2867     def testSplitComponents1(self):
2868         fname="Pyfile67.med"
2869         # building a mesh containing 4 tri3 + 5 quad4
2870         tri=MEDCouplingUMesh("tri",2)
2871         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2872         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2873         tris=[tri.deepCopy() for i in xrange(4)]
2874         for i,elt in enumerate(tris): elt.translate([i,0])
2875         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2876         quad=MEDCouplingUMesh("quad",2)
2877         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2878         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2879         quads=[quad.deepCopy() for i in xrange(5)]
2880         for i,elt in enumerate(quads): elt.translate([5+i,0])
2881         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2882         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2883         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2884         #
2885         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2886         #
2887         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2888         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2889         fs=MEDFileFields()
2890         fmts0_1=MEDFileFieldMultiTS()
2891         # time steps
2892         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2893         for i in xrange(10):
2894             name1="1stField"
2895             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2896             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2897             f.setTime(float(i+1)+0.1,i+1,-i-1)
2898             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2899             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2900             pass
2901         fs.pushField(fmts0_1)
2902         self.assertEqual(1,len(fs))
2903         l=fmts0_1.splitComponents()
2904         self.assertEqual(3,len(l))
2905         for elt in l: self.assertEqual(10,len(elt))
2906         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2907         for elt in l:
2908             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2909             pass
2910         fs.pushFields(l)
2911         self.assertEqual(4,len(fs))
2912         for elt in fs: self.assertEqual(10,len(elt))
2913         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2914         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2915         #
2916         fs.write(fname,0) ; del fs
2917         #
2918         fs1=MEDFileFields(fname)
2919         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2920         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2921         self.assertEqual(4,len(fs1))
2922         for i in xrange(10):
2923             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2924                 f1ts=fs1[fieldName][i]
2925                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2926                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2927                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2928                 pass
2929             f1ts=fs1["1stField"][i]
2930             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2931             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2932             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2933             pass
2934         pass
2935
2936     def testMEDFileFieldConvertTo1(self):
2937         fname="Pyfile68.med"
2938         # building a mesh containing 4 tri3 + 5 quad4
2939         tri=MEDCouplingUMesh("tri",2)
2940         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2941         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2942         tris=[tri.deepCopy() for i in xrange(4)]
2943         for i,elt in enumerate(tris): elt.translate([i,0])
2944         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2945         quad=MEDCouplingUMesh("quad",2)
2946         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2947         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2948         quads=[quad.deepCopy() for i in xrange(5)]
2949         for i,elt in enumerate(quads): elt.translate([5+i,0])
2950         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2951         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2952         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2953         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2954         #
2955         ff0=MEDFileField1TS()
2956         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")
2957         f0.checkConsistencyLight()
2958         ff0.setFieldNoProfileSBT(f0)
2959         #
2960         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2961         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2962         #
2963         ff0i=ff0.convertToInt()
2964         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2965         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2966         #
2967         ff1=ff0i.convertToDouble()
2968         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2969         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2970         # With profiles
2971         del arr,f0,ff0,ff1,ff0i,fspExp
2972         ff0=MEDFileField1TS()
2973         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")
2974         f0.checkConsistencyLight()
2975         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2976         ff0.setFieldProfile(f0,mm,0,pfl)
2977         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2978         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2979         #
2980         ff0i=ff0.convertToInt()
2981         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2982         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2983         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2984         #
2985         ff1=ff0i.convertToDouble()
2986         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2987         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2988         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2989         ## MultiTimeSteps
2990         ff0=MEDFileFieldMultiTS()
2991         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)
2992         f0.checkConsistencyLight()
2993         ff0.appendFieldProfile(f0,mm,0,pfl)
2994         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)
2995         f0.checkConsistencyLight()
2996         ff0.appendFieldProfile(f0,mm,0,pfl)
2997         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)
2998         f0.checkConsistencyLight()
2999         ff0.appendFieldProfile(f0,mm,0,pfl)
3000         ff1=ff0.convertToInt()
3001         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3002         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3003         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3004             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3005             arr=ff1.getUndergroundDataArray(dt,it)
3006             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3007             pass
3008         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3009         #
3010         mm.write(fname,2)
3011         ff1.write(fname,0)
3012         #
3013         ff1=ff1.convertToDouble()
3014         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3015         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3016         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3017             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3018             arr=ff1.getUndergroundDataArray(dt,it)
3019             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3020             pass
3021         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3022         #
3023         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3024         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3025         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3026         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3027             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3028             arr=ff1.getUndergroundDataArray(dt,it)
3029             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3030             pass
3031         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3032         pass
3033
3034     def testMEDFileFieldPartialLoading(self):
3035         fname="Pyfile69.med"
3036         #
3037         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3038         a.alloc(0,1)
3039         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3040         # building a mesh containing 30 tri3 + 40 quad4
3041         tri=MEDCouplingUMesh("tri",2)
3042         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3043         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3044         tris=[tri.deepCopy() for i in xrange(30)]
3045         for i,elt in enumerate(tris): elt.translate([i,0])
3046         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3047         quad=MEDCouplingUMesh("quad",2)
3048         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3049         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3050         quads=[quad.deepCopy() for i in xrange(40)]
3051         for i,elt in enumerate(quads): elt.translate([40+i,0])
3052         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3053         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3054         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3055         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3056         #
3057         ff0=MEDFileField1TS()
3058         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")
3059         f0.checkConsistencyLight()
3060         ff0.setFieldNoProfileSBT(f0)
3061         ff0.write(fname,0)
3062         #
3063         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3064         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3065         # With profiles
3066         ff0=MEDFileField1TS()
3067         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")
3068         f0.checkConsistencyLight()
3069         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3070         ff0.setFieldProfile(f0,mm,0,pfl)
3071         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3072         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3073         ff0.write(fname,0)
3074         #
3075         ff0=MEDFileField1TS(fname,False)
3076         self.assertEqual(ff0.getName(),"FieldCell")
3077         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3078         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3079         heap_memory_ref=ff0.getHeapMemorySize()
3080         self.assertIn(heap_memory_ref,xrange(182,465+2*strMulFac))
3081         ff0.loadArrays() ##
3082         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3083         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3084         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3085         #
3086         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3087         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3088         heap_memory_ref=ff0.getHeapMemorySize()
3089         self.assertIn(heap_memory_ref,xrange(350,520+6*strMulFac))
3090         ff0.loadArrays() ##
3091         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3092         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3093         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3094         ff0.loadArrays() ##
3095         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3096         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3097         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3098         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3099         ff0.loadArrays() ##
3100         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3101         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3102         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3103         ff0.loadArraysIfNecessary() ##
3104         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3105         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3106         heap_memory_ref=ff0.getHeapMemorySize()
3107         self.assertIn(heap_memory_ref,xrange(1100,1384+2*strMulFac))
3108         ff0.unloadArrays()
3109         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3110         self.assertEqual(hmd,-800) # -50*8*2
3111         ff0.loadArrays() ##
3112         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3113         #
3114         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3115         heap_memory_ref=ff0.getHeapMemorySize()
3116         self.assertIn(heap_memory_ref,xrange(299,520+6*strMulFac))
3117         ff0.loadArrays() ##
3118         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3119         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3120         #
3121         fieldName="FieldCellMultiTS"
3122         ff0=MEDFileFieldMultiTS()
3123         for t in xrange(20):
3124             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)
3125             f0.setTime(float(t)+0.1,t,100+t)
3126             f0.checkConsistencyLight()
3127             ff0.appendFieldNoProfileSBT(f0)
3128             pass
3129         ff0.write(fname,0)
3130         #
3131         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3132         heap_memory_ref=ff0.getHeapMemorySize()
3133         self.assertIn(heap_memory_ref,xrange(5536,8212+(80+26)*strMulFac))
3134         ff0.loadArrays()
3135         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3136         del ff0
3137         #
3138         ffs=MEDFileFields(fname,False)
3139         heap_memory_ref=ffs.getHeapMemorySize()
3140         self.assertIn(heap_memory_ref,xrange(5335,9031+(80+50)*strMulFac))
3141         ffs.loadArrays()
3142         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3143         pass
3144
3145     def testMEDFileMeshReadSelector1(self):
3146         mrs=MEDFileMeshReadSelector()
3147         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3148         mrs.__str__() ; mrs.__repr__()
3149         #
3150         mrs=MEDFileMeshReadSelector(0)
3151         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())
3152         mrs=MEDFileMeshReadSelector(1)
3153         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3154         mrs=MEDFileMeshReadSelector(2)
3155         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3156         mrs=MEDFileMeshReadSelector(3)
3157         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3158         mrs=MEDFileMeshReadSelector(4)
3159         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3160         mrs=MEDFileMeshReadSelector(5)
3161         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3162         mrs=MEDFileMeshReadSelector(6)
3163         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3164         mrs=MEDFileMeshReadSelector(7)
3165         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3166         mrs=MEDFileMeshReadSelector(8)
3167         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3168         mrs=MEDFileMeshReadSelector(9)
3169         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3170         mrs=MEDFileMeshReadSelector(10)
3171         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3172         mrs=MEDFileMeshReadSelector(11)
3173         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3174         mrs=MEDFileMeshReadSelector(12)
3175         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3176         mrs=MEDFileMeshReadSelector(13)
3177         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3178         mrs=MEDFileMeshReadSelector(14)
3179         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3180         mrs=MEDFileMeshReadSelector(15)
3181         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3182         mrs=MEDFileMeshReadSelector(16)
3183         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3184         mrs=MEDFileMeshReadSelector(17)
3185         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3186         mrs=MEDFileMeshReadSelector(18)
3187         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3188         mrs=MEDFileMeshReadSelector(19)
3189         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3190         mrs=MEDFileMeshReadSelector(20)
3191         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3192         mrs=MEDFileMeshReadSelector(21)
3193         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3194         mrs=MEDFileMeshReadSelector(22)
3195         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3196         mrs=MEDFileMeshReadSelector(23)
3197         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3198         mrs=MEDFileMeshReadSelector(24)
3199         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3200         mrs=MEDFileMeshReadSelector(25)
3201         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3202         mrs=MEDFileMeshReadSelector(26)
3203         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3204         mrs=MEDFileMeshReadSelector(27)
3205         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3206         mrs=MEDFileMeshReadSelector(28)
3207         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3208         mrs=MEDFileMeshReadSelector(29)
3209         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3210         mrs=MEDFileMeshReadSelector(30)
3211         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3212         mrs=MEDFileMeshReadSelector(31)
3213         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3214         mrs=MEDFileMeshReadSelector(32)
3215         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3216         mrs=MEDFileMeshReadSelector(33)
3217         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3218         mrs=MEDFileMeshReadSelector(34)
3219         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3220         mrs=MEDFileMeshReadSelector(35)
3221         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3222         mrs=MEDFileMeshReadSelector(36)
3223         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3224         mrs=MEDFileMeshReadSelector(37)
3225         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3226         mrs=MEDFileMeshReadSelector(38)
3227         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3228         mrs=MEDFileMeshReadSelector(39)
3229         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3230         mrs=MEDFileMeshReadSelector(40)
3231         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3232         mrs=MEDFileMeshReadSelector(41)
3233         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3234         mrs=MEDFileMeshReadSelector(42)
3235         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3236         mrs=MEDFileMeshReadSelector(43)
3237         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3238         mrs=MEDFileMeshReadSelector(44)
3239         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3240         mrs=MEDFileMeshReadSelector(45)
3241         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3242         mrs=MEDFileMeshReadSelector(46)
3243         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3244         mrs=MEDFileMeshReadSelector(47)
3245         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3246         mrs=MEDFileMeshReadSelector(48)
3247         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3248         mrs=MEDFileMeshReadSelector(49)
3249         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3250         mrs=MEDFileMeshReadSelector(50)
3251         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3252         mrs=MEDFileMeshReadSelector(51)
3253         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3254         mrs=MEDFileMeshReadSelector(52)
3255         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3256         mrs=MEDFileMeshReadSelector(53)
3257         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3258         mrs=MEDFileMeshReadSelector(54)
3259         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3260         mrs=MEDFileMeshReadSelector(55)
3261         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3262         mrs=MEDFileMeshReadSelector(56)
3263         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3264         mrs=MEDFileMeshReadSelector(57)
3265         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3266         mrs=MEDFileMeshReadSelector(58)
3267         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3268         mrs=MEDFileMeshReadSelector(59)
3269         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3270         mrs=MEDFileMeshReadSelector(60)
3271         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3272         mrs=MEDFileMeshReadSelector(61)
3273         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3274         mrs=MEDFileMeshReadSelector(62)
3275         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3276         mrs=MEDFileMeshReadSelector(63)
3277         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3278         #
3279         mrs=MEDFileMeshReadSelector(63)
3280         mrs.setCellFamilyFieldReading(False)
3281         self.assertEqual(mrs.getCode(),62)
3282         mrs.setCellFamilyFieldReading(True)
3283         self.assertEqual(mrs.getCode(),63)
3284         mrs.setNodeFamilyFieldReading(False)
3285         self.assertEqual(mrs.getCode(),61)
3286         mrs.setNodeFamilyFieldReading(True)
3287         self.assertEqual(mrs.getCode(),63)
3288         mrs.setCellNameFieldReading(False)
3289         self.assertEqual(mrs.getCode(),59)
3290         mrs.setCellNameFieldReading(True)
3291         self.assertEqual(mrs.getCode(),63)
3292         mrs.setNodeNameFieldReading(False)
3293         self.assertEqual(mrs.getCode(),55)
3294         mrs.setNodeNameFieldReading(True)
3295         self.assertEqual(mrs.getCode(),63)
3296         mrs.setCellNumFieldReading(False)
3297         self.assertEqual(mrs.getCode(),47)
3298         mrs.setCellNumFieldReading(True)
3299         self.assertEqual(mrs.getCode(),63)
3300         mrs.setNodeNumFieldReading(False)
3301         self.assertEqual(mrs.getCode(),31)
3302         mrs.setNodeNumFieldReading(True)
3303         self.assertEqual(mrs.getCode(),63)
3304         pass
3305     
3306     def testPartialReadOfMeshes(self):
3307         fname="Pyfile70.med"
3308         # building a mesh containing 4 tri3 + 5 quad4
3309         tri=MEDCouplingUMesh("tri",2)
3310         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3311         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3312         tris=[tri.deepCopy() for i in xrange(4)]
3313         for i,elt in enumerate(tris): elt.translate([i,0])
3314         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3315         quad=MEDCouplingUMesh("quad",2)
3316         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3317         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3318         quads=[quad.deepCopy() for i in xrange(5)]
3319         for i,elt in enumerate(quads): elt.translate([5+i,0])
3320         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3321         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3322         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3323         m1=m.buildDescendingConnectivity()[0]
3324         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3325         #
3326         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3327         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3328         mm.setGroupsAtLevel(0,[grp0,grp1])
3329         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3330         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3331         mm.setGroupsAtLevel(-1,[grp2,grp3])
3332         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3333         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3334         mm.setGroupsAtLevel(1,[grp4,grp5])
3335         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3336         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3337         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3338         #
3339         mm.write(fname,2)
3340         ##
3341         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3342         b4_ref_heap_mem=mm.getHeapMemorySize()
3343         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3344         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3345         ref_heap_mem=mm.getHeapMemorySize()
3346         # check the gain of memory using 1GTUMesh instead of UMesh
3347         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
3348         #
3349         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3350         self.assertEqual(len(mm.getGroupsNames()),0)
3351         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3352         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3353         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3354         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3355         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3356         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3357         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3358         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3359         delta1=ref_heap_mem-mm.getHeapMemorySize()
3360         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3361         #
3362         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3363         self.assertEqual(len(mm.getGroupsNames()),6)
3364         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3365         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3366         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3367         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3368         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3369         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3370         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3371         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3372         delta2=ref_heap_mem-mm.getHeapMemorySize()
3373         self.assertTrue(delta2<delta1)
3374         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3375         #
3376         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3377         self.assertEqual(len(mm.getGroupsNames()),6)
3378         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3379         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3380         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3381         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3382         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3383         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3384         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3385         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3386         delta3=ref_heap_mem-mm.getHeapMemorySize()
3387         self.assertTrue(delta3<delta2)
3388         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3389         #
3390         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3391         self.assertEqual(len(mm.getGroupsNames()),6)
3392         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3393         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3394         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3395         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3396         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3397         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3398         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3399         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3400         delta4=ref_heap_mem-mm.getHeapMemorySize()
3401         self.assertTrue(delta4<delta3)
3402         self.assertTrue(delta4>=32*4*2)
3403         #
3404         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3405         self.assertEqual(len(mm.getGroupsNames()),6)
3406         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3407         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3408         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3409         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3410         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3411         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3412         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3413         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3414         delta5=ref_heap_mem-mm.getHeapMemorySize()
3415         self.assertTrue(delta5<delta4)
3416         self.assertEqual(delta5,0)
3417         pass
3418
3419     # this test checks that setFieldProfile perform a check of the array length
3420     # compared to the profile length. This test also checks that mesh attribute of field
3421     # is not used by setFieldProfile (because across this test mesh is equal to None)
3422     def testCheckCompatibilityPfl1(self):
3423         # building a mesh containing 4 tri3 + 5 quad4
3424         tri=MEDCouplingUMesh("tri",2)
3425         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3426         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3427         tris=[tri.deepCopy() for i in xrange(4)]
3428         for i,elt in enumerate(tris): elt.translate([i,0])
3429         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3430         quad=MEDCouplingUMesh("quad",2)
3431         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3432         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3433         quads=[quad.deepCopy() for i in xrange(5)]
3434         for i,elt in enumerate(quads): elt.translate([5+i,0])
3435         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3436         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3437         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3438         m1=m.buildDescendingConnectivity()[0]
3439         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3440         #
3441         f1ts=MEDFileField1TS()
3442         f=MEDCouplingFieldDouble(ON_NODES)
3443         vals=DataArrayDouble(7) ; vals.iota(1000)
3444         f.setArray(vals)
3445         f.setName("anonymous") # f has no mesh it is not a bug
3446         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3447         f1ts.setFieldProfile(f,mm,0,pfl)
3448         #
3449         f1ts=MEDFileField1TS()
3450         f=MEDCouplingFieldDouble(ON_NODES)
3451         vals=DataArrayDouble(8) ; vals.iota(1000)
3452         f.setArray(vals)
3453         f.setName("anonymous") # f has no mesh it is not a bug
3454         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3455         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3456         #
3457         f1ts=MEDFileField1TS()
3458         f=MEDCouplingFieldDouble(ON_CELLS)
3459         vals=DataArrayDouble(7) ; vals.iota(1000)
3460         f.setArray(vals)
3461         f.setName("anonymous") # f has no mesh it is not a bug
3462         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3463         f1ts.setFieldProfile(f,mm,0,pfl)
3464         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3465         #
3466         f1ts=MEDFileField1TS()
3467         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3468         vals=DataArrayDouble(27) ; vals.iota(1000)
3469         f.setArray(vals)
3470         f.setName("anonymous") # f has no mesh it is not a bug
3471         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3472         f.setMesh(m[pfl])
3473         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])
3474         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3475         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])
3476         f.setMesh(None)
3477         f1ts.setFieldProfile(f,mm,0,pfl)
3478         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3479         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3480         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3481         vals=DataArrayDouble(27) ; vals.iota(1000)
3482         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3483         #
3484         f1ts=MEDFileField1TS()
3485         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3486         vals=DataArrayDouble(25) ; vals.iota(1000)
3487         f.setArray(vals)
3488         f.setName("anonymous") # f has no mesh it is not a bug
3489         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3490         f1ts.setFieldProfile(f,mm,0,pfl)
3491         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3492         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3493         f.setArray(vals2)
3494         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3495         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3496         #
3497         f1ts=MEDFileField1TS()
3498         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3499         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3500         f.setArray(vals)
3501         f1ts.setFieldProfile(f,mm,0,pfl)
3502         pass
3503     
3504     def testWRMeshWithNoCells(self):
3505         fname="Pyfile71.med"
3506         a=DataArrayDouble(4) ; a.iota()
3507         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3508         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3509         m=MEDFileUMesh()
3510         m.setMeshAtLevel(0,m00)
3511         m.setRenumFieldArr(1,DataArrayInt(range(10,26)))
3512         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3513         m.write(fname,2)
3514         del m,a,c,m0,m00
3515         #
3516         m=MEDFileMesh.New(fname)
3517         self.assertEqual((),m.getNonEmptyLevels())
3518         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))
3519         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(range(10,26))))
3520         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3521         pass
3522
3523     def testWRQPolyg1(self):
3524         fname="Pyfile72.med"
3525         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3526         m.insertNextCell([0,2,1,3])
3527         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3528         #
3529         ms=[m.deepCopy() for i in xrange(4)]
3530         for i,elt in enumerate(ms):
3531             elt.translate([float(i)*1.5,0.])
3532             pass
3533         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3534         m0.convertAllToPoly()
3535         #
3536         ms=[m.deepCopy() for i in xrange(5)]
3537         for i,elt in enumerate(ms):
3538             elt.translate([float(i)*1.5,1.5])
3539             pass
3540         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3541         m1.convertAllToPoly()
3542         m1.convertLinearCellsToQuadratic()
3543         #
3544         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3545         ##
3546         mm=MEDFileUMesh()
3547         mm.setMeshAtLevel(0,m)
3548         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3549         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3550         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3551         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3552         ##
3553         mm.write(fname,2)
3554         del mm
3555         #
3556         mm_read=MEDFileUMesh(fname)
3557         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3558         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3559         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3560         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3561         ##
3562         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3563         f.setMesh(m)
3564         arr0=DataArrayDouble(9) ; arr0.iota()
3565         arr1=DataArrayDouble(9) ; arr1.iota(100)
3566         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3567         f.setArray(arr) ; f.checkConsistencyLight()
3568         f.setTime(5.6,1,2)
3569         ff=MEDFileField1TS()
3570         ff.setFieldNoProfileSBT(f)
3571         ff.write(fname,0)
3572         ##
3573         ff_read=MEDFileField1TS(fname)
3574         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3575         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3576         pass
3577
3578     def testLoadIfNecessaryOnFromScratchFields0(self):
3579         """
3580         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3581         """
3582         fname="Pyfile77.med"
3583         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3584         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3585         m.allocateCells()
3586         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3587         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3588         m.finishInsertingCells()
3589         #
3590         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3591         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3592         fs=MEDFileFields()
3593         arrs=4*[None]
3594         #
3595         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3596         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3597         f0.setTime(1.1,1,1)
3598         f0.setName("myELNOField")
3599         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3600         f0.setArray(arrs[0])
3601         ff0.appendFieldNoProfileSBT(f0)
3602         #
3603         f0.setTime(2.2,2,1)
3604         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3605         f0.setArray(arrs[1])
3606         ff0.appendFieldNoProfileSBT(f0)
3607         #
3608         f0.setTime(3.3,3,1)
3609         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3610         f0.setArray(arrs[2])
3611         ff0.appendFieldNoProfileSBT(f0)
3612         #
3613         f0.setTime(4.4,4,1)
3614         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3615         f0.setArray(arrs[3])
3616         ff0.appendFieldNoProfileSBT(f0)
3617         #
3618         for i,arr in enumerate(arrs):
3619             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3620             fs[0][i].loadArraysIfNecessary()
3621             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3622             pass
3623         fs.loadArraysIfNecessary()
3624         for i,arr in enumerate(arrs):
3625             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3626             pass
3627         fs[0].loadArraysIfNecessary()
3628         for i,arr in enumerate(arrs):
3629             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3630             pass
3631         pass
3632     
3633     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3634         """ 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.
3635         """
3636         fname="Pyfile78.med"
3637         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)
3638         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3639         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3640         m0.allocateCells()
3641         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
3642             m0.insertNextCell(NORM_TETRA4,elt)
3643             pass
3644         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
3645             m0.insertNextCell(NORM_PYRA5,elt)
3646             pass
3647         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
3648             m0.insertNextCell(NORM_PENTA6,elt)
3649             pass
3650         m0.checkConsistency()
3651         m1=MEDCouplingUMesh(); m1.setName("mesh")
3652         m1.setMeshDimension(2);
3653         m1.allocateCells(5);
3654         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3655         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3656         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3657         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3658         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3659         m1.setCoords(coords);
3660         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3661         m3.allocateCells()
3662         m3.insertNextCell(NORM_POINT1,[2])
3663         m3.insertNextCell(NORM_POINT1,[3])
3664         m3.insertNextCell(NORM_POINT1,[4])
3665         m3.insertNextCell(NORM_POINT1,[5])
3666         #
3667         mm=MEDFileUMesh()
3668         mm.setMeshAtLevel(0,m0)
3669         mm.setMeshAtLevel(-1,m1)
3670         mm.setMeshAtLevel(-3,m3)
3671         mm.write(fname,2)
3672         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3673         mm=MEDFileMesh.New(fname)
3674         fs=MEDFileFields()
3675         fmts=MEDFileFieldMultiTS()
3676         f1ts=MEDFileField1TS()
3677         for lev in mm.getNonEmptyLevels():
3678             for gt in mm.getGeoTypesAtLevel(lev):
3679                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3680                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3681                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3682                 f.setArray(arr) ; f.setName("f0")
3683                 f1ts.setFieldNoProfileSBT(f)
3684                 pass
3685             pass
3686         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3687         for lev in [0,-1,-3]:
3688             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3689             pass
3690         fmts.pushBackTimeStep(f1ts)
3691         fs.pushField(fmts)
3692         fs.write(fname,0)
3693         del fs,fmts,f1ts
3694         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3695         fs=MEDFileFields(fname)
3696         self.assertEqual(len(fs),1)
3697         self.assertEqual(len(fs[0]),1)
3698         f1ts=fs[0][0]
3699         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),'','')])])
3700         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))
3701         pass
3702
3703     def testMEDFileUMeshSetName(self):
3704         """ 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.
3705         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3706         """
3707         fname="Pyfile79.med"
3708         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3709         mm=MEDFileUMesh()
3710         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3711         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)
3712         m0.allocateCells(5);
3713         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3714         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3715         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3716         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3717         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3718         m0.setCoords(coords);
3719         mm.setMeshAtLevel(0,m0)
3720         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3721         m2.allocateCells()
3722         m2.insertNextCell(NORM_POINT1,[2])
3723         m2.insertNextCell(NORM_POINT1,[3])
3724         m2.insertNextCell(NORM_POINT1,[4])
3725         m2.insertNextCell(NORM_POINT1,[5])
3726         mm.setMeshAtLevel(-2,m2)
3727         self.assertEqual(mm.getName(),"")
3728         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3729         mm.forceComputationOfParts()
3730         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3731         mm.setName("abc")
3732         self.assertEqual(mm.getName(),"abc")
3733         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3734         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3735         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3736         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3737         pass
3738
3739     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3740         fileName="Pyfile80.med"
3741         m=MEDCouplingCMesh() ; m.setName("cmesh")
3742         arr=DataArrayDouble(6) ; arr.iota()
3743         m.setCoords(arr,arr)
3744         nbCells=m.getNumberOfCells()
3745         self.assertEqual(25,nbCells)
3746         f=MEDCouplingFieldDouble(ON_CELLS)
3747         f.setName("FieldOnCell") ; f.setMesh(m)
3748         arr=DataArrayDouble(nbCells) ; arr.iota()
3749         mm=MEDFileCMesh()
3750         mm.setMesh(m)
3751         #
3752         fmts=MEDFileFieldMultiTS()
3753         #
3754         for i in xrange(nbCells):
3755             t=(float(i)+0.1,i+1,-i-2)
3756             f.setTime(*t)
3757             arr2=DataArrayDouble(nbCells)
3758             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3759             arr2[perm]=arr
3760             f.setArray(arr2)
3761             f1ts=MEDFileField1TS()
3762             f1ts.setFieldNoProfileSBT(f)
3763             fmts.pushBackTimeStep(f1ts)
3764             pass
3765         fmts.unloadArraysWithoutDataLoss()
3766         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))
3767         fs=MEDFileFields() ; fs.pushField(fmts)
3768         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))
3769         fs.unloadArraysWithoutDataLoss()
3770         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))
3771         f1ts=fs[0][0]
3772         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))
3773         f1ts.unloadArraysWithoutDataLoss()
3774         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))
3775         mm.write(fileName,2)
3776         fs.write(fileName,0)
3777         del m,fmts,mm,f,f1ts
3778         ##
3779         mm=MEDFileMesh.New(fileName)
3780         fmts=MEDFileFieldMultiTS(fileName)
3781         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))
3782         fmts.unloadArraysWithoutDataLoss()
3783         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3784         fmts.loadArraysIfNecessary()
3785         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))
3786         del mm,fmts
3787         fs=MEDFileFields(fileName)
3788         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))
3789         fs.unloadArraysWithoutDataLoss()
3790         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3791         fs.loadArraysIfNecessary()
3792         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))
3793         del fs
3794         f1ts=MEDFileField1TS(fileName)
3795         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))
3796         f1ts.unloadArraysWithoutDataLoss()
3797         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3798         f1ts.loadArraysIfNecessary()
3799         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))
3800         pass
3801
3802     def testMEDFileUMeshLoadPart1(self):
3803         """ 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
3804         memory of the returned instance.
3805         """
3806         fileName="Pyfile81.med"
3807         arr=DataArrayDouble(6) ; arr.iota()
3808         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3809         m=m.buildUnstructured()
3810         m.setName("Mesh")
3811         m.changeSpaceDimension(3,0.)
3812         infos=["aa [b]","cc [de]","gg [klm]"]
3813         m.getCoords().setInfoOnComponents(infos)
3814         m.checkConsistency()
3815         mm=MEDFileUMesh()
3816         mm.setMeshAtLevel(0,m)
3817         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3818         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3819         mm.setMeshAtLevel(-1,m1)
3820         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])
3821         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])
3822         namesCellL0=DataArrayAsciiChar(25,16)
3823         namesCellL0[:]=["Cell#%.3d        "%(i) for i in xrange(25)]
3824         renumM1=DataArrayInt([3,4,0,2,1])
3825         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3826         mm.setRenumFieldArr(0,renum0)
3827         mm.setFamilyFieldArr(0,famField0)
3828         mm.setNameFieldAtLevel(0,namesCellL0)
3829         mm.setRenumFieldArr(-1,renumM1)
3830         mm.setFamilyFieldArr(-1,famFieldM1)
3831         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])
3832         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])
3833         namesNodes=DataArrayAsciiChar(36,16)
3834         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(36)]
3835         mm.setRenumFieldArr(1,renum1)
3836         mm.setFamilyFieldArr(1,famField1)
3837         mm.setNameFieldAtLevel(1,namesNodes)
3838         mm.setFamilyId("Fam7",77)
3839         mm.setFamilyId("Fam8",88)
3840         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3841         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3842         mm.write(fileName,2)
3843         #
3844         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3845         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3846         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])))
3847         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)
3848         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3849         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3850         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3851         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3852         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3853         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3854         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3855         #
3856         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3857         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3858         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])))
3859         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)
3860         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3861         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3862         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3863         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3864         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3865         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3866         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3867         #
3868         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3869         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3870         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3871         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3872         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3873         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3874         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3875         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3876         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])))
3877         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3878         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)
3879         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3880         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3881         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3882         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3883         pass
3884
3885     def testMEDFileFieldsLoadPart1(self):
3886         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3887         """
3888         fileName="Pyfile82.med"
3889         meshName="Mesh"
3890         compos=["aa [kg]","bbb [m/s]"]
3891         arr=DataArrayDouble(6) ; arr.iota()
3892         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3893         m=m.buildUnstructured()
3894         m.setName(meshName)
3895         m.changeSpaceDimension(3,0.)
3896         infos=["aa [b]","cc [de]","gg [klm]"]
3897         m.getCoords().setInfoOnComponents(infos)
3898         m.checkConsistency()
3899         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3900         f.setName("Field")
3901         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3902         arr[:,0]=range(25)
3903         arr[:,1]=range(100,125)
3904         f.setArray(arr)
3905         WriteField(fileName,f,2)
3906         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3907         f.setName("FieldNode")
3908         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3909         arr[:,0]=range(200,236)
3910         arr[:,1]=range(300,336)
3911         f.setArray(arr)
3912         f.checkConsistencyLight()
3913         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3914         #
3915         ms=MEDFileMeshes()
3916         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3917         ms.pushMesh(mm)
3918         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3919         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3920         #
3921         ms=MEDFileMeshes()
3922         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3923         ms.pushMesh(mm)
3924         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3925         fs=fs.deepCopy()
3926         fs[0][0].loadArrays()
3927         arr=DataArrayDouble(12,2) ; arr[:,0]=range(3,15) ; arr[:,1]=range(103,115)
3928         arr.setInfoOnComponents(compos)
3929         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3930         fs[1][0].loadArrays()
3931         arr=DataArrayDouble(21,2) ; arr[:,0]=range(203,224) ; arr[:,1]=range(303,324)
3932         arr.setInfoOnComponents(compos)
3933         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3934         pass
3935
3936     def testMEDFileWithoutCells1(self):
3937         fileName="Pyfile83.med"
3938         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3939         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3940         mm=MEDFileUMesh()
3941         mm.setCoords(coo)
3942         mm.setName("mesh")
3943         mm.write(fileName,2)
3944         #
3945         mm=MEDFileMesh.New(fileName)
3946         self.assertEqual(mm.getName(),"mesh")
3947         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3948         pass
3949
3950     def testZipCoordsWithLoadPart1(self):
3951         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3952         """
3953         fileName="Pyfile84.med"
3954         meshName="Mesh"
3955         compos=["aa [kg]","bbb [m/s]"]
3956         arr=DataArrayDouble(6) ; arr.iota()
3957         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3958         m=m.buildUnstructured()
3959         m.setName(meshName)
3960         m.changeSpaceDimension(3,0.)
3961         infos=["aa [b]","cc [de]","gg [klm]"]
3962         m.getCoords().setInfoOnComponents(infos)
3963         m.checkConsistency()
3964         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3965         f.setName("Field")
3966         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3967         arr[:,0]=range(25)
3968         arr[:,1]=range(100,125)
3969         f.setArray(arr)
3970         WriteField(fileName,f,2)
3971         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3972         f.setName("FieldNode")
3973         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3974         arr[:,0]=range(200,236)
3975         arr[:,1]=range(300,336)
3976         f.setArray(arr)
3977         f.checkConsistencyLight()
3978         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3979         #
3980         ms=MEDFileMeshes()
3981         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3982         ms.pushMesh(mm)
3983         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3984         self.assertEqual(spd.getSlice(),slice(4,6,1))
3985         spd=mm.getPartDefAtLevel(1)
3986         self.assertEqual(spd.getSlice(),slice(4,14,1))
3987         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3988         mm.zipCoords() # <- The important line is here !
3989         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3990         self.assertEqual(spd.getSlice(),slice(4,6,1))
3991         spd=mm.getPartDefAtLevel(1)
3992         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3993         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
3994         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3995         fs[0][0].loadArrays()
3996         arr=DataArrayDouble([(4,104),(5,105)])
3997         arr.setInfoOnComponents(compos)
3998         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3999         fs[1][0].loadArrays()
4000         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4001         arr.setInfoOnComponents(compos)
4002         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4003         pass
4004
4005     def testMEDFileCMeshSetGroupsAtLevel(self):
4006         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4007         """
4008         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4009         m.setName("Mesh")
4010         mm=MEDFileCMesh() ; mm.setMesh(m)
4011         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4012         mm.setGroupsAtLevel(0,[grp])
4013         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4014         pass
4015
4016     def testMEDFileUMeshBuildExtrudedMesh1(self):
4017         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4018         fileName="Pyfile85.med"
4019         meshName2D="Mesh"
4020         meshName1D="Mesh1D"
4021         meshName3DOut="Mesh3D"
4022         #
4023         d1=DataArrayInt([0,4,20,24])
4024         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4025         #
4026         a=DataArrayDouble(6) ; a.iota()
4027         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4028         m=m.buildUnstructured()
4029         d1c=d1.buildComplement(m.getNumberOfCells())
4030         m=m[d1c] ; m.zipCoords()
4031         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4032         m0.simplexize(0)
4033         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4034         m.setName(meshName2D)
4035         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4036         e=d.deltaShiftIndex().findIdsEqual(1)
4037         #
4038         mm=MEDFileUMesh()
4039         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4040         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4041         mm.setGroupsAtLevel(0,[grp0])
4042         grp1=e ; grp1.setName("grp1")
4043         mm.setGroupsAtLevel(-1,[grp1])
4044         mm.write(fileName,2)
4045         #
4046         a=DataArrayDouble(3) ; a.iota()
4047         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4048         tmp.setName(meshName1D)
4049         tmp.changeSpaceDimension(3)
4050         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4051         mm1D=MEDFileUMesh()
4052         mm1D.setMeshAtLevel(0,tmp)
4053         mm1D.write(fileName,0)
4054         # test is here !
4055         mm2D=MEDFileMesh.New(fileName,meshName2D)
4056         mm1D=MEDFileMesh.New(fileName,meshName1D)
4057         m1D=mm1D.getMeshAtLevel(0)
4058         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4059         #
4060         self.assertEqual(mm3D.getName(),mm2D.getName())
4061         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4062         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4063         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4064         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4065         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4066         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4067         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4068         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4069         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4070         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.)])
4071         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4072         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])
4073         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4074         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])
4075         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4076         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])
4077         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4078         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])
4079         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4080         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])
4081         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4082         d=DataArrayInt(129) ; d.iota() ; d*=3
4083         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4084         #
4085         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4086         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4087         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4088         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4089         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])))
4090         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])))
4091         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])))
4092         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])))
4093         mm3D.setName("MeshExtruded")
4094         mm3D.write(fileName,0)
4095         pass
4096
4097     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4098     def testMEDFileUMeshPickeling1(self):
4099         import cPickle
4100         outFileName="Pyfile86.med"
4101         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)
4102         c.setInfoOnComponents(["aa","bbb"])
4103         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4104         m=MEDCouplingUMesh();
4105         m.setMeshDimension(2);
4106         m.allocateCells(5);
4107         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4108         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4109         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4110         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4111         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4112         m.finishInsertingCells();
4113         m.setCoords(c)
4114         m.checkConsistencyLight()
4115         m1=MEDCouplingUMesh.New();
4116         m1.setMeshDimension(1);
4117         m1.allocateCells(3);
4118         m1.insertNextCell(NORM_SEG2,2,[1,4])
4119         m1.insertNextCell(NORM_SEG2,2,[3,6])
4120         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4121         m1.finishInsertingCells();
4122         m1.setCoords(c)
4123         m1.checkConsistencyLight()
4124         m2=MEDCouplingUMesh.New();
4125         m2.setMeshDimension(0);
4126         m2.allocateCells(4);
4127         m2.insertNextCell(NORM_POINT1,1,[1])
4128         m2.insertNextCell(NORM_POINT1,1,[3])
4129         m2.insertNextCell(NORM_POINT1,1,[2])
4130         m2.insertNextCell(NORM_POINT1,1,[6])
4131         m2.finishInsertingCells();
4132         m2.setCoords(c)
4133         m2.checkConsistencyLight()
4134         #
4135         mm=MEDFileUMesh.New()
4136         self.assertTrue(mm.getUnivNameWrStatus())
4137         mm.setName("MyFirstMEDCouplingMEDmesh")
4138         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4139         mm.setCoords(c)
4140         mm[-1]=m1;
4141         mm[0]=m;
4142         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4143         mm[-2]=m2;
4144         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4145         # playing with groups
4146         g1_2=DataArrayInt.New()
4147         g1_2.setValues([1,3],2,1)
4148         g1_2.setName("G1")
4149         g2_2=DataArrayInt.New()
4150         g2_2.setValues([1,2,3],3,1)
4151         g2_2.setName("G2")
4152         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4153         g1_1=DataArrayInt.New()
4154         g1_1.setValues([0,1,2],3,1)
4155         g1_1.setName("G1")
4156         g2_1=DataArrayInt.New()
4157         g2_1.setValues([0,2],2,1)
4158         g2_1.setName("G2")
4159         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4160         g1_N=DataArrayInt.New()
4161         g1_N.setValues(range(8),8,1)
4162         g1_N.setName("G1")
4163         g2_N=DataArrayInt.New()
4164         g2_N.setValues(range(9),9,1)
4165         g2_N.setName("G2")
4166         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4167         mm.createGroupOnAll(0,"GrpOnAllCell")
4168         # check content of mm
4169         t=mm.getGroupArr(0,"G1",False)
4170         self.assertTrue(g1_2.isEqual(t));
4171         t=mm.getGroupArr(0,"G2",False)
4172         self.assertTrue(g2_2.isEqual(t));
4173         t=mm.getGroupArr(-1,"G1",False)
4174         self.assertTrue(g1_1.isEqual(t));
4175         t=mm.getGroupArr(-1,"G2",False)
4176         self.assertTrue(g2_1.isEqual(t));
4177         t=mm.getGroupArr(1,"G1",False)
4178         self.assertTrue(g1_N.isEqual(t));
4179         t=mm.getGroupArr(1,"G2",False)
4180         self.assertTrue(g2_N.isEqual(t));
4181         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4182         t=mm.getGroupArr(0,"GrpOnAllCell")
4183         #
4184         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4185         mm2=cPickle.loads(st)
4186         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4187         self.assertEqual(mm.getAxisType(),AX_CART)
4188         #
4189         mm.setAxisType(AX_CYL)
4190         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
4191         mm2=cPickle.loads(st)
4192         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4193         self.assertEqual(mm2.getAxisType(),AX_CYL)
4194         pass
4195
4196     def testMEDFileFieldsLoadSpecificEntities1(self):
4197         nbNodes=11
4198         fieldName="myField"
4199         fileName="Pyfile87.med"
4200         nbPdt=10
4201         meshName="Mesh"
4202         #
4203         m=MEDCouplingCMesh()
4204         arr=DataArrayDouble(nbNodes) ; arr.iota()
4205         m.setCoords(arr)
4206         m=m.buildUnstructured()
4207         m.setName(meshName)
4208         #
4209         fmts=MEDFileFieldMultiTS()
4210         for i in xrange(nbPdt):
4211             f=MEDCouplingFieldDouble(ON_NODES)
4212             f.setMesh(m)
4213             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4214             f.setArray(arr)
4215             f.setName(fieldName)
4216             f.setTime(float(i),i,0)
4217             fmts.appendFieldNoProfileSBT(f)
4218             pass
4219         #
4220         mm=MEDFileUMesh() ; mm[0]=m
4221         fmts.write(fileName,2)
4222         mm.write(fileName,0)
4223         #
4224         fs=MEDFileFields(fileName,False)
4225         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4226         fs.loadArraysIfNecessary()
4227         fs2.loadArraysIfNecessary()
4228         for i in xrange(nbPdt):
4229             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4230             pass
4231         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4232         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4233         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4234         fmts=MEDFileFieldMultiTS()
4235         for i in xrange(nbPdt):
4236             f=MEDCouplingFieldDouble(ON_CELLS)
4237             f.setMesh(m3)
4238             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4239             f.setArray(arr)
4240             f.setName(fieldName)
4241             f.setTime(float(i),i,0)
4242             fmts.appendFieldNoProfileSBT(f)
4243             pass
4244         mm=MEDFileUMesh() ; mm[0]=m3
4245         del mm[0]
4246         self.assertEqual(mm.getNonEmptyLevels(),())
4247         mm[0]=m3
4248         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4249         fmts.write(fileName,2)
4250         fs=MEDFileFields(fileName,False)
4251         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4252         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4253         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4254         fs.loadArraysIfNecessary()
4255         fs2.loadArraysIfNecessary()
4256         fs3.loadArraysIfNecessary()
4257         fs4.loadArraysIfNecessary()
4258         for i in xrange(nbPdt):
4259             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4260             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4261             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4262             pass
4263         pass
4264
4265     def testMEDFileLotsOfTSRW1(self):
4266         nbNodes=11
4267         fieldName="myField"
4268         fileName="Pyfile88.med"
4269         nbPdt=300 # <- perftest = 30000
4270         meshName="Mesh"
4271         #
4272         maxPdt=100 # <- optimum = 500
4273         m=MEDCouplingCMesh()
4274         arr=DataArrayDouble(nbNodes) ; arr.iota()
4275         m.setCoords(arr)
4276         m=m.buildUnstructured()
4277         m.setName(meshName)
4278         #
4279         nbOfField=nbPdt/maxPdt
4280         fs=MEDFileFields()
4281         for j in xrange(nbOfField):
4282             fmts=MEDFileFieldMultiTS()
4283             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4284             for i in xrange(s.start,s.stop,s.step):
4285                 f=MEDCouplingFieldDouble(ON_NODES)
4286                 f.setMesh(m)
4287                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4288                 f.setArray(arr)
4289                 f.setName("%s_%d"%(fieldName,j))
4290                 f.setTime(float(i),i,0)
4291                 fmts.appendFieldNoProfileSBT(f)
4292                 pass
4293             fs.pushField(fmts)
4294             pass
4295         #
4296         mm=MEDFileUMesh() ; mm[0]=m
4297         fs.write(fileName,2)
4298         mm.write(fileName,0)
4299         ############
4300         def appendInDict(d,key,val):
4301             if key in d:
4302                 d[key].append(val)
4303             else:
4304                 d[key]=[val]
4305             pass
4306         import re
4307         allFields=GetAllFieldNames(fileName)
4308         allFieldsDict={}
4309         pat=re.compile("([\d]+)([\s\S]+)$")
4310         for st in allFields:
4311             stRev=st[::-1]
4312             m=pat.match(stRev)
4313             if m:
4314                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4315                 pass
4316             else:
4317                 appendInDict(allFieldsDict,st,'')
4318                 pass
4319             pass
4320         fs2=MEDFileFields()
4321         for k in allFieldsDict:
4322             if allFieldsDict[k]!=['']:
4323                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4324                 pass
4325             fmts2=[]
4326             for it in allFieldsDict[k]:
4327                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4328                 pass
4329             fmts2.reverse()
4330             zeResu=fmts2.pop()
4331             nbIter=len(fmts2)
4332             for ii in xrange(nbIter):
4333                 zeResu.pushBackTimeSteps(fmts2.pop())
4334                 pass
4335             zeResu.setName(k)
4336             fs2.pushField(zeResu)
4337             pass
4338         self.assertEqual(fs2[0].getTimeSteps(),[(i,0,float(i)) for i in xrange(nbPdt)])
4339         pass
4340     
4341     def testMEDFileMeshRearrangeFamIds1(self):
4342         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4343         fileName="Pyfile89.med"
4344         meshName='Maillage_2'
4345         mm=MEDFileUMesh()
4346         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)])
4347         #
4348         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])
4349         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])
4350         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4351         m0.setConnectivity(c0,c0i)
4352         mm[0]=m0
4353         #
4354         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])
4355         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])
4356         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4357         m1.setConnectivity(c1,c1i)
4358         mm[-1]=m1
4359         #
4360         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])
4361         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4362         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4363         mm[-2]=m2.buildUnstructured()
4364         #
4365         ref0=DataArrayInt(55) ; ref0[:]=0
4366         mm.setFamilyFieldArr(0,ref0)
4367         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]))
4368         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])
4369         mm.setFamilyFieldArr(-1,ref1)
4370         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])
4371         mm.setFamilyFieldArr(-2,ref2)
4372         #
4373         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4374             mm.setFamilyId(f,fid)
4375         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4376             mm.setFamiliesOnGroup(grp,fams)
4377         mm.write(fileName,2)
4378         #
4379         mm=MEDFileMesh.New(fileName)
4380         grp=mm.getGroup(-1,"Groupe_1")
4381         dai=grp.computeFetchedNodeIds()
4382         dai.setName("TOTO")
4383         mm.addGroup(1,dai)
4384         mm.rearrangeFamilies() # <- the aim of the test
4385         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4386         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4387         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4388         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4389         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])))
4390         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4391         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4392         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4393         for elt,fams in allGrps:
4394             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4395         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4396         for elt,eltId in allFams:
4397             self.assertEqual(mm.getFamilyId(elt),eltId)
4398         pass
4399
4400     def testNonRegrCMeshSetFieldPfl1(self):
4401         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4402         ff=MEDFileField1TS()
4403         meshName="mesh"
4404         mm=MEDFileCMesh()
4405         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4406         m.setCoords(arr)
4407         m.setName(meshName)
4408         mm.setMesh(m)
4409         field=MEDCouplingFieldDouble(ON_CELLS)
4410         field.setMesh(m)
4411         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4412         field.setName("Field")
4413         field.checkConsistencyLight()
4414         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4415         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4416         self.assertEqual(ff.getPfls(),())
4417         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4418         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4419         del ff,mm,field,field2,pfl
4420         # same with unstructured mesh
4421         ff=MEDFileField1TS()
4422         meshName="mesh"
4423         mm=MEDFileUMesh()
4424         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4425         m.setCoords(arr)
4426         m.setName(meshName)
4427         m=m.buildUnstructured()
4428         mm[0]=m
4429         field=MEDCouplingFieldDouble(ON_CELLS)
4430         field.setMesh(m)
4431         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4432         field.setName("Field")
4433         field.checkConsistencyLight()
4434         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4435         ff.setFieldProfile(field,mm,0,pfl)
4436         self.assertEqual(ff.getPfls(),())
4437         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4438         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4439         pass
4440
4441     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4442         meshName="mesh"
4443         fileName="Pyfile90.med"
4444         fileName2="Pyfile91.med"
4445         arr=DataArrayDouble(5) ; arr.iota()
4446         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4447         m=m.buildUnstructured()
4448         d=DataArrayInt([3,7,11,15])
4449         m1=m[d]
4450         m1.simplexize(0)
4451         m2=m[d.buildComplement(m.getNumberOfCells())]
4452         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4453         m.changeSpaceDimension(3,0.)
4454         arr=DataArrayDouble(3) ; arr.iota()
4455         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4456         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4457         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4458         m3D=m.buildExtrudedMesh(m1D,0)
4459         m3D.sortCellsInMEDFileFrmt()
4460         m3D.setName(meshName)
4461         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4462         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4463         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4464         #
4465         mm=MEDFileUMesh()
4466         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4467         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4468         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4469         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4470         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4471         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4472         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4473         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4474         mm.setGroupsAtLevel(0,[vol1,vol2])
4475         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4476         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4477         #
4478         mmOut1=mm.linearToQuadratic(0,0.)
4479         mmOut1.write(fileName2,2)
4480         mmOut2=mmOut1.quadraticToLinear(0.)
4481         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4482         pass
4483
4484     def testMEDFileMeshAddGroup1(self):
4485         m=MEDCouplingCMesh()
4486         arrX=DataArrayDouble(9) ; arrX.iota()
4487         arrY=DataArrayDouble(4) ; arrY.iota()
4488         m.setCoords(arrX,arrY)
4489         m.setName("mesh")
4490         mm=MEDFileCMesh()
4491         mm.setMesh(m)
4492         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4493         mm.addGroup(0,grp0)
4494         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4495         mm.addGroup(0,grp1)
4496         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4497         mm.addGroup(0,grp2)
4498         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4499         mm.addGroup(0,grp3)
4500         for grp in [grp0,grp1,grp2,grp3]:
4501             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4502         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4503         delta=12
4504         for grp in [grp0,grp1,grp2,grp3]:
4505             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4506             mm.addGroup(1,grpNode)
4507         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4508         for grp in [grp0,grp1,grp2,grp3]:
4509             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4510         for grp in [grp0,grp1,grp2,grp3]:
4511             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4512             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4513         mm.normalizeFamIdsMEDFile()
4514         for grp in [grp0,grp1,grp2,grp3]:
4515             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4516         for grp in [grp0,grp1,grp2,grp3]:
4517             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4518             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4519         pass
4520
4521     pass
4522     def testMEDFileJoint1(self):
4523         fileName="Pyfile92.med"
4524         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4525         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4526         mm=MEDFileUMesh()
4527         mm.setCoords(coo)
4528         mm.setName("maa1")
4529         mm.setDescription("un maillage")
4530         mm.write(fileName,2)
4531         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4532         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4533         one_step_joint=MEDFileJointOneStep()
4534         one_step_joint.pushCorrespondence(cell_correspond)
4535         one_step_joint.pushCorrespondence(node_correspond)
4536         one_joint=MEDFileJoint()
4537         one_joint.pushStep(one_step_joint)
4538         one_joint.setLocalMeshName("maa1")
4539         one_joint.setRemoteMeshName("maa1")
4540         one_joint.setDescription("joint_description")
4541         one_joint.setJointName("joint_1")
4542         one_joint.setDomainNumber(1)
4543         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4544         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4545         self.assertEqual( one_joint.getDescription(), "joint_description")
4546         self.assertEqual( one_joint.getJointName(), "joint_1")
4547         self.assertEqual( one_joint.getDomainNumber(), 1)
4548         joints=MEDFileJoints()
4549         joints.pushJoint(one_joint);
4550         joints.write(fileName,0)
4551         # read back
4552         jointsR=MEDFileJoints(fileName,mm.getName())
4553         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4554         jR = jointsR.getJointAtPos(0)
4555         self.assertTrue( jR.isEqual( one_joint ))
4556         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4557         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4558         jointsR.destroyJointAtPos(0)
4559         
4560     pass
4561     def testMEDFileJoint2(self):
4562         fileNameWr="Pyfile93.med"
4563         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4564         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4565         mm=MEDFileUMesh()
4566         mm.setCoords(coo)
4567         mm.setName("maa1")
4568         mm.setDescription("un maillage")
4569         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4570         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4571         one_step_joint=MEDFileJointOneStep()
4572         two_step_joint=MEDFileJointOneStep()
4573         one_joint=MEDFileJoint()
4574         two_joint=MEDFileJoint()
4575         one_step_joint.pushCorrespondence(node_correspond)
4576         one_joint.pushStep(one_step_joint)
4577         two_step_joint.pushCorrespondence(cell_correspond)
4578         two_step_joint.pushCorrespondence(node_correspond)
4579         two_joint.pushStep(two_step_joint)
4580         one_joint.setLocalMeshName("maa1")
4581         one_joint.setRemoteMeshName("maa1")
4582         one_joint.setDescription("joint_description_1")
4583         one_joint.setJointName("joint_1")
4584         one_joint.setDomainNumber(1)
4585         two_joint.setLocalMeshName("maa1")
4586         two_joint.setRemoteMeshName("maa1")
4587         two_joint.setDescription("joint_description_2")
4588         two_joint.setJointName("joint_2")
4589         two_joint.setDomainNumber(2)
4590         joints=MEDFileJoints()
4591         joints.pushJoint(one_joint)
4592         joints.pushJoint(two_joint)
4593         mm.setJoints( joints )
4594         mm.write(fileNameWr,2)
4595         #
4596         mm=MEDFileMesh.New(fileNameWr)
4597         self.assertEqual( mm.getNumberOfJoints(), 2)
4598         jointsR = mm.getJoints();
4599         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4600         self.assertEqual( len( jointsR ), 2 )
4601         jointR1 = jointsR[0]
4602         jointR2 = jointsR[1]
4603         self.assertFalse( jointR1 is None )
4604         self.assertFalse( jointR2 is None )
4605         self.assertTrue( jointR1.isEqual( one_joint ))
4606         self.assertTrue( jointR2.isEqual( two_joint ))
4607         pass
4608
4609     def testMEDFileJoint1(self):
4610         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4611         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4612         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4613         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4614         joint1st_1=MEDFileJointOneStep()
4615         joint1st_1.pushCorrespondence(cell_correspond)
4616         joint1st_1.pushCorrespondence(node_correspond)
4617         joint1st_2=MEDFileJointOneStep()
4618         joint1st_2.pushCorrespondence(cell_correspond)
4619         joint1st_2.pushCorrespondence(node_correspond)
4620         joint1st_3=MEDFileJointOneStep()
4621         joint1st_3.pushCorrespondence(node_correspond)
4622         joint1st_3.pushCorrespondence(cell_correspond)
4623         joint1st_4=MEDFileJointOneStep()
4624         joint1st_4.pushCorrespondence(cell_correspond)
4625         joint1st_5=MEDFileJointOneStep()
4626         joint1st_5.pushCorrespondence(cell_correspon2)
4627         joint1st_6=MEDFileJointOneStep()
4628         joint1st_6.pushCorrespondence(cell_correspon3)
4629         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4630         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4631         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4632         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4633         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4634         one_joint=MEDFileJoint()
4635         one_joint.pushStep(joint1st_1)
4636         one_joint.setLocalMeshName("maa1")
4637         one_joint.setRemoteMeshName("maa2")
4638         one_joint.setDescription("joint_description")
4639         one_joint.setJointName("joint_1")
4640         one_joint.setDomainNumber(1)
4641         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4642         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4643         self.assertEqual( "joint_description", one_joint.getDescription())
4644         self.assertEqual( 1, one_joint.getDomainNumber())
4645         self.assertEqual( "joint_1", one_joint.getJointName())
4646         pass
4647
4648     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4649     def testMEDFileSafeCall0(self):
4650         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4651         fname="Pyfile94.med"
4652         errfname="Pyfile94.err"
4653         class StdOutRedirect(object):
4654             def __init__(self,fileName):
4655                 import os,sys
4656                 sys.stderr.flush()
4657                 self.stdoutOld=os.dup(2)
4658                 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
4659                 fd2=os.dup2(self.fdOfSinkFile,2)
4660                 self.origPyVal=sys.stderr
4661                 class FlushFile(object):
4662                     def __init__(self,f):
4663                         self.f=f
4664                     def write(self,st):
4665                         self.f.write(st)
4666                         self.f.flush()
4667                     def flush(self):
4668                         return self.f.flush()
4669                     def isatty(self):
4670                         return self.f.isatty()
4671                 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
4672             def __del__(self):
4673                 import os,sys
4674                 sys.stderr=self.origPyVal
4675                 #os.fsync(self.fdOfSinkFile)
4676                 os.fsync(2)
4677                 os.dup2(self.stdoutOld,2)
4678                 os.close(self.stdoutOld)
4679         import os
4680         # first clean file if needed
4681         if os.path.exists(fname):
4682             os.remove(fname)
4683             pass
4684         # second : build a file from scratch
4685         m=MEDCouplingCMesh()
4686         arr=DataArrayDouble(11) ; arr.iota()
4687         m.setCoords(arr,arr)
4688         mm=MEDFileCMesh()
4689         mm.setMesh(m)
4690         mm.setName("mesh")
4691         mm.write(fname,2)
4692         # third : change permissions to remove write access on created file
4693         os.chmod(fname,0444)
4694         # four : try to append data on file -> check that it raises Exception
4695         f=MEDCouplingFieldDouble(ON_CELLS)
4696         f.setName("field")
4697         f.setMesh(m)
4698         f.setArray(DataArrayDouble(100))
4699         f.getArray()[:]=100.
4700         f.checkConsistencyLight()
4701         f1ts=MEDFileField1TS()
4702         f1ts.setFieldNoProfileSBT(f)
4703         # redirect stderr
4704         tmp=StdOutRedirect(errfname)
4705         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4706         del tmp
4707         #
4708         if os.path.exists(errfname):
4709             os.remove(errfname)
4710         #
4711         pass
4712
4713     def testUnivStatus1(self):
4714         """ Non regression test to check the effectiveness of univ write status."""
4715         fname="Pyfile95.med"
4716         arr=DataArrayDouble(10) ; arr.iota()
4717         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4718         mm=MEDFileCMesh() ; mm.setMesh(m)
4719         mm.setUnivNameWrStatus(False) # test is here
4720         mm.write(fname,2)
4721         mm=MEDFileCMesh(fname)
4722         self.assertEqual(mm.getUnivName(),"")
4723         mm.setUnivNameWrStatus(True)
4724         mm.write(fname,2)
4725         mm=MEDFileCMesh(fname)
4726         self.assertTrue(mm.getUnivName()!="")
4727         pass
4728
4729     def testEmptyMesh(self):
4730       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4731       with 0 tuples """
4732       fname = "Pyfile96.med" 
4733       m = MEDCouplingUMesh('toto', 2)
4734       m.setCoords(DataArrayDouble([], 0, 2))
4735       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4736       mfu = MEDFileUMesh()
4737       mfu.setMeshAtLevel(0, m)
4738       mfu.write(fname, 2)
4739       mfu2 = MEDFileUMesh(fname)
4740       self.assertEqual('toto', mfu2.getName())
4741       lvl = mfu2.getNonEmptyLevels()
4742       self.assertEqual((), lvl)
4743
4744     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4745     def testMEDFileUMeshPickeling2(self):
4746       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4747       name="Mesh_1"
4748       grpName1="HAUT"
4749       grpName2="BASE"
4750       hauteur=1.
4751       nbOfNodesPerAxis=3
4752       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4753       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4754       mesh=MEDFileUMesh() ; mesh[0]=m
4755       m1=m.computeSkin() ; mesh[-1]=m1
4756       #
4757       bary1=m1.computeCellCenterOfMass()[:,2]
4758       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4759       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4760       mesh.setGroupsAtLevel(-1,[grp1,grp2])
4761       
4762       import cPickle
4763       st=cPickle.dumps(mesh,2)
4764       mm=cPickle.loads(st)
4765       st2=cPickle.dumps(mm,2)
4766       mm2=cPickle.loads(st2)
4767       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4768       pass
4769
4770     def testMEDFileEquivalence1(self):
4771       """ First check of equivalence implementation in MEDFileMesh"""
4772       fileName="Pyfile97.med"
4773       meshName="M_01"
4774       mm=MEDFileUMesh()
4775       coo=DataArrayDouble([(0,0,0),(6,0,0),(19,0,0),(36,0,0),(0,4,0),(6,4,0),(19,4,0),(36,4,0),(0,13,0),(6,13,0),(19,13,0),(36,13,0),(0,24,0),(6,24,0),(19,24,0),(36,24,0),(0,0,6),(6,0,6),(19,0,6),(36,0,6),(0,4,6),(6,4,6),(19,4,6),(36,4,6),(0,13,6),(6,13,6),(19,13,6),(36,13,6),(0,24,6),(6,24,6),(19,24,6),(36,24,6),(6,0,3),(6,2,0),(12.5,0,0),(19,0,3),(19,2,0),(6,4,3),(12.5,4,0),(19,4,3),(6,2,6),(12.5,0,6),(19,2,6),(12.5,4,6),(6,2,3),(12.5,0,3),(12.5,2,0),(19,2,3),(12.5,4,3),(12.5,2,6),(12.5,2,3)])
4776       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4777       connQ4=DataArrayInt([1,17,21,5,2,18,22,6,21,5,6,22,1,32,44,33,17,40,44,32,21,37,44,40,5,33,44,37,2,35,47,36,18,42,47,35,22,39,47,42,6,36,47,39,21,37,48,43,5,38,48,37,6,39,48,38,22,43,48,39])
4778       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4779       connH8=DataArrayInt([20,16,17,21,4,0,1,5,22,18,19,23,6,2,3,7,24,20,21,25,8,4,5,9,25,21,22,26,9,5,6,10,26,22,23,27,10,6,7,11,28,24,25,29,12,8,9,13,29,25,26,30,13,9,10,14,30,26,27,31,14,10,11,15,21,40,49,43,37,44,50,48,40,17,41,49,44,32,45,50,49,41,18,42,50,45,35,47,43,49,42,22,48,50,47,39,44,32,45,50,33,1,34,46,37,44,50,48,5,33,46,38,48,50,47,39,38,46,36,6,50,45,35,47,46,34,2,36])
4780       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4781       mm.getFamilyFieldAtLevel(-1)[:]=-2
4782       mm.getFamilyFieldAtLevel(0)[:]=0
4783       mm.addFamily("HOMARD________-1",-1)
4784       mm.addFamily("HOMARD________-2",-2)
4785       mm.addFamily("HOMARD________-3",-3)
4786       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4787       
4788       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4789       descEq="Cette equivalence decrit les mailles a recoller. Dans chaque correspondance, le premier numero est celui de la maille coupee ; le second numero est celui d'une des petites mailles en regard."
4790       mm.initializeEquivalences()
4791       eqs=mm.getEquivalences()
4792       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4793       eq0.setDescription(descEq)
4794       corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
4795       eq0.setArray(-1,corr)
4796       self.assertEqual(eq0.getCell().size(),1)
4797       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4798       eq0.getCell().clear()
4799       self.assertEqual(eq0.getCell().size(),0)
4800       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4801       self.assertEqual(eq0.getCell().size(),1)
4802       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4803       mm.killEquivalences()
4804       mm.initializeEquivalences()
4805       eqs=mm.getEquivalences()
4806       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4807       eq0.setDescription(descEq)
4808       c=eq0.initCell()
4809       c.setArrayForType(NORM_QUAD4,corr)
4810       self.assertEqual(eq0.getCell().size(),1)
4811       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4812       mm2=mm.deepCopy()
4813       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4814       self.assertEqual(mm2.getEquivalences().size(),1)
4815       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4816       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4817       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4818       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4819       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4820       mm.write(fileName,2)
4821       #
4822       mm3=MEDFileMesh.New(fileName)
4823       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4824       pass
4825
4826     def testMEDFileForFamiliesPlayer1(self):
4827       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4828       fileName="Pyfile98.med"
4829       meshName="mesh"
4830       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
4831       arr=DataArrayDouble(4) ; arr.iota()
4832       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4833       m=m.buildUnstructured()
4834       mm=MEDFileUMesh()
4835       mm[0]=m
4836       mm.setName(meshName)
4837       mm.setFamilyId("FAMILLE_ZERO",0)
4838       mm.getFamilyFieldAtLevel(0)[-3:]=-4
4839       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
4840       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
4841       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
4842       mm.setFamilyFieldArr(1,d)
4843       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
4844       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
4845       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4846       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
4847       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
4848       mm.write(fileName,2)
4849       # now read such funny file !
4850       mm2=MEDFileMesh.New(fileName) # <- normaly mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
4851       self.assertTrue(mm.isEqual(mm2,1e-16))
4852       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4853       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
4854       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
4855       pass
4856
4857     def testCartesianizer1(self):
4858       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
4859       # UMesh non cart
4860       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4861       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
4862       d0=DataArrayInt(16) ; d0[:]=0
4863       d1=DataArrayInt(9)  ; d1[:]=0
4864       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4865       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4866       ref0=mm.getCoords().getHiddenCppPointer()
4867       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
4868       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
4869       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
4870       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
4871       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4872       mm.setAxisType(AX_CYL) #<- important
4873       mm2=mm.cartesianize() # the trigger
4874       self.assertEqual(mm2.getAxisType(),AX_CART)
4875       mm.setAxisType(AX_CART) # this is here only to avoid complaints
4876       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4877       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4878       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
4879       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
4880       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
4881       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4882       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
4883       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
4884       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
4885       self.assertEqual(mm2.getName(),mm.getName())
4886       self.assertEqual(mm2.getDescription(),mm.getDescription())
4887       self.assertEqual(mm2.getTime(),mm.getTime())
4888       self.assertEqual(mm2.getTime(),mm.getTime())
4889       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4890       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4891       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4892       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4893       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4894       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4895       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4896       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4897       # UMesh cart
4898       mm.setAxisType(AX_CART)
4899       mm2=mm.cartesianize() # the trigger
4900       self.assertEqual(mm2.getAxisType(),AX_CART)
4901       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4902       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4903       # CurveLinearMesh non cart
4904       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
4905       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4906       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4907       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4908       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
4909       mm2=mm.cartesianize() # the trigger
4910       self.assertEqual(mm2.getAxisType(),AX_CART)
4911       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4912       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4913       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4914       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4915       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4916       self.assertEqual(mm2.getName(),mm.getName())
4917       self.assertEqual(mm2.getDescription(),mm.getDescription())
4918       self.assertEqual(mm2.getTime(),mm.getTime())
4919       self.assertEqual(mm2.getTime(),mm.getTime())
4920       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4921       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4922       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4923       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4924       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4925       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4926       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4927       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4928       # CurveLinearMesh cart
4929       mm.setAxisType(AX_CART)
4930       mm2=mm.cartesianize() # the trigger
4931       self.assertEqual(mm2.getAxisType(),AX_CART)
4932       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4933       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4934       # CMesh non cart
4935       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4936       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4937       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4938       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4939       mm2=mm.cartesianize() # the trigger
4940       self.assertEqual(mm2.getAxisType(),AX_CART)
4941       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4942       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4943       self.assertEqual(mm2.getName(),mm.getName())
4944       self.assertEqual(mm2.getDescription(),mm.getDescription())
4945       self.assertEqual(mm2.getTime(),mm.getTime())
4946       self.assertEqual(mm2.getTime(),mm.getTime())
4947       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4948       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4949       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4950       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4951       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4952       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4953       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4954       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4955       # CMesh cart
4956       mm.setAxisType(AX_CART)
4957       mm2=mm.cartesianize() # the trigger
4958       self.assertEqual(mm2.getAxisType(),AX_CART)
4959       self.assertTrue(isinstance(mm2,MEDFileCMesh))
4960       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4961       pass
4962
4963     def testCheckCoherency(self):
4964       m2 = MEDCouplingUMesh("2d", 2)
4965       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
4966       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
4967       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
4968       mum = MEDFileUMesh()
4969       mum.setMeshAtLevel(0, m2)
4970       mum.setMeshAtLevel(-1, m1)
4971       mum.checkConsistency()
4972       mum2 = mum.deepCopy()
4973
4974       # Nodes
4975       arr = DataArrayInt([2]*4)
4976       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
4977       self.assertRaises(InterpKernelException, mum.checkConsistency)
4978       mum=mum2; mum2=mum.deepCopy();
4979       arr = DataArrayInt([2]*4)
4980       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
4981       self.assertRaises(InterpKernelException, mum.checkConsistency)
4982       mum=mum2; mum2=mum.deepCopy();
4983       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
4984       self.assertRaises(InterpKernelException, mum.checkConsistency)
4985       mum=mum2; mum2=mum.deepCopy();
4986       arr = DataArrayAsciiChar(['tutu           x']*4)
4987       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
4988       self.assertRaises(InterpKernelException, mum.checkConsistency)
4989
4990       # 2D
4991       mum=mum2; mum2=mum.deepCopy();
4992       arr = DataArrayInt([2]*2)
4993       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
4994       self.assertRaises(InterpKernelException, mum.checkConsistency)
4995       mum=mum2; mum2=mum.deepCopy();
4996       arr = DataArrayInt([2]*2)
4997       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
4998       self.assertRaises(InterpKernelException, mum.checkConsistency)
4999       mum=mum2; mum2=mum.deepCopy();
5000       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5001       self.assertRaises(InterpKernelException, mum.checkConsistency)
5002       mum=mum2; mum2=mum.deepCopy();
5003       arr = DataArrayAsciiChar(['tutu           x']*2)
5004       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5005       self.assertRaises(InterpKernelException, mum.checkConsistency)
5006
5007       # 1D
5008       mum=mum2; mum2=mum.deepCopy();
5009       arr = DataArrayInt([2]*5)
5010       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5011       self.assertRaises(InterpKernelException, mum.checkConsistency)
5012       mum=mum2; mum2=mum.deepCopy();
5013       arr = DataArrayInt([2]*5)
5014       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5015       self.assertRaises(InterpKernelException, mum.checkConsistency)
5016       mum=mum2; mum2=mum.deepCopy();
5017       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5018       self.assertRaises(InterpKernelException, mum.checkConsistency)
5019       mum=mum2; mum2=mum.deepCopy();
5020       arr = DataArrayAsciiChar(['tutu           x']*5)
5021       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5022       self.assertRaises(InterpKernelException, mum.checkConsistency)
5023
5024     def testCheckSMESHConsistency(self):
5025       m2 = MEDCouplingUMesh("2d", 2)
5026       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5027       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5028       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5029       mum = MEDFileUMesh()
5030       mum.setMeshAtLevel(0, m2)
5031       mum.setMeshAtLevel(-1, m1)
5032       mum.checkConsistency()
5033       mum.checkSMESHConsistency()
5034       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5035       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5036       mum.setRenumFieldArr(0, n2)
5037       mum.setRenumFieldArr(-1, n1)
5038       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5039       mum.setRenumFieldArr(-1, n1+100)
5040       mum.checkSMESHConsistency()
5041       pass
5042
5043     def testClearNodeAndCellNumbers(self):
5044       m2 = MEDCouplingUMesh("2d", 2)
5045       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5046       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5047       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5048       mum = MEDFileUMesh()
5049       mum.setMeshAtLevel(0, m2)
5050       mum.setMeshAtLevel(-1, m1)
5051       mum.checkConsistency()
5052       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5053       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5054       mum.setRenumFieldArr(0, n2)
5055       mum.setRenumFieldArr(-1, n1)
5056       mum.clearNodeAndCellNumbers()
5057       mum.checkSMESHConsistency()
5058       pass
5059
5060     def testCMeshSetFamilyFieldArrNull(self):
5061       meshName="mesh"
5062       fname="Pyfile99.med"
5063       arrX=DataArrayDouble([0,1,2,3])
5064       arrY=DataArrayDouble([0,1,2])
5065       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5066       mm=MEDFileCMesh() ; mm.setMesh(m)
5067       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5068       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5069       mm.setFamilyFieldArr(0,famCellIds)
5070       mm.setFamilyFieldArr(1,famNodeIds)
5071       mm.write(fname,2)
5072       mm=MEDFileMesh.New(fname)
5073       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5074       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5075       mm.setFamilyFieldArr(0,None)#<- bug was here
5076       mm.setFamilyFieldArr(1,None)#<- bug was here
5077       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5078       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5079       mm3=mm.deepCopy()
5080       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5081       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5082       mm.write(fname,2)
5083       mm2=MEDFileMesh.New(fname)
5084       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5085       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5086       pass
5087
5088     def testAppendFieldProfileOnIntField(self):
5089       fname="Pyfile100.med"
5090       arrX=DataArrayDouble([0,1,2,3])
5091       arrY=DataArrayDouble([0,1,2])
5092       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5093       mm=MEDFileCMesh()
5094       mm.setMesh(mesh)
5095       #
5096       fmts=MEDFileIntFieldMultiTS()
5097       pflName="PFL"
5098       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5099       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5100       fieldName="FieldOnCell"
5101       f.setTime(1.2,1,1) ; f.setName(fieldName)
5102       arr=DataArrayInt([101,102,103]) ; f.setArray(arr)
5103       fmts.appendFieldProfile(f,mm,0,pfl)
5104       #
5105       mm.write(fname,2)
5106       fmts.write(fname,0)
5107       #
5108       mm=MEDFileMesh.New(fname)
5109       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5110       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5111       self.assertEqual(fmts.getName(),fieldName)
5112       self.assertEqual(len(fmts),1)
5113       f1ts=fmts[0]
5114       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5115       self.assertEqual(pfltest.getName(),pflName)
5116       self.assertEqual(ftest.getName(),fieldName)
5117       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5118       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5119       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5120       self.assertEqual(ftest2.getTime(),f.getTime())
5121       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5122       pass
5123
5124     def testMEDFileFieldEasyField1(self):
5125       """Check for all spatial discretization of field (cells,nodes,elno,gauss) for double field that all is OK. Here no profile and only top level is considered."""
5126       ## Basic test on cells on top level
5127       fname="Pyfile101.med"
5128       fieldName="field1"
5129       mm=MEDFileUMesh()
5130       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5131       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5132       m.allocateCells()
5133       m.insertNextCell(NORM_TRI3,[0,1,2])
5134       m.insertNextCell(NORM_TRI3,[3,4,5])
5135       m.insertNextCell(NORM_TRI3,[6,7,8])
5136       m.insertNextCell(NORM_TRI3,[9,10,11])
5137       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5138       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5139       mm[0]=m
5140       mm.write(fname,2)
5141       arr0=DataArrayDouble([10,11,12,13,100,101])
5142       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5143       f.setName(fieldName) ; f.setTime(2.,6,7)
5144       f0=f.deepCopy()
5145       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5146       ff.write(fname,0)
5147       arr2=arr0+1000 ; f.setArray(arr2)
5148       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5149       ff.write(fname,0)
5150       f1=f.deepCopy()
5151       ##
5152       mm=MEDFileMesh.New(fname)
5153       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5154       ftst0=f1ts.field(mm)
5155       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5156       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5157       ftst1=f1ts.field(mm)
5158       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5159       fmts=MEDFileFieldMultiTS(fname,fieldName)
5160       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5161       ## Basic test on nodes on top level
5162       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5163       f2.setName(fieldName)
5164       mm.write(fname,2)
5165       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5166       #
5167       mm=MEDFileMesh.New(fname)
5168       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5169       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5170       fmts=MEDFileFieldMultiTS(fname,fieldName)
5171       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5172       ## Node on elements
5173       f3=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5174       f3.setName(fieldName) ; f3.checkConsistencyLight()
5175       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5176       #
5177       mm=MEDFileMesh.New(fname)
5178       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5179       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5180       ## Gauss
5181       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5182       f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,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.1,0.05,0.35])
5183       f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5184       arr4=DataArrayDouble([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5185       f4.checkConsistencyLight()
5186       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5187       #
5188       mm=MEDFileMesh.New(fname)
5189       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5190       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5191       pass
5192   
5193     def testMEDFileFieldEasyField2(self):
5194         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5195         Check for all spatial discretization of field (cells,nodes,elno,gauss) for int field that all is OK. Here no profile and only top level is considered."""
5196         ## Basic test on cells on top level
5197         fname="Pyfile102.med"
5198         fieldName="field1"
5199         mm=MEDFileUMesh()
5200         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5201         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5202         m.allocateCells()
5203         m.insertNextCell(NORM_TRI3,[0,1,2])
5204         m.insertNextCell(NORM_TRI3,[3,4,5])
5205         m.insertNextCell(NORM_TRI3,[6,7,8])
5206         m.insertNextCell(NORM_TRI3,[9,10,11])
5207         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5208         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5209         mm[0]=m
5210         mm.write(fname,2)
5211         arr0=DataArrayInt([10,11,12,13,100,101])
5212         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5213         f.setName(fieldName) ; f.setTime(2.,6,7)
5214         f0=f.deepCopy()
5215         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5216         ff.write(fname,0)
5217         arr2=arr0+1000 ; f.setArray(arr2)
5218         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5219         ff.write(fname,0)
5220         f1=f.deepCopy()
5221         ##
5222         mm=MEDFileMesh.New(fname)
5223         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5224         ftst0=f1ts.field(mm)
5225         self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5226         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5227         ftst1=f1ts.field(mm)
5228         self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5229         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5230         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5231         ## Basic test on nodes on top level
5232         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5233         f2.setName(fieldName)
5234         mm.write(fname,2)
5235         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5236         #
5237         mm=MEDFileMesh.New(fname)
5238         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5239         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5240         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5241         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5242         ## Node on elements
5243         f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5244         f3.setName(fieldName) ; f3.checkConsistencyLight()
5245         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5246         #
5247         mm=MEDFileMesh.New(fname)
5248         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5249         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5250         ## Gauss
5251         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5252         f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,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.1,0.05,0.35])
5253         f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5254         arr4=DataArrayInt([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5255         f4.checkConsistencyLight()
5256         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5257         #
5258         mm=MEDFileMesh.New(fname)
5259         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5260         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5261         pass
5262
5263     def testMEDFileFieldEasyField3(self):
5264         """Here a multi level mesh. And field on cells lying on different level of this mesh. Show how "field" method deal with that. Here on field double are considered."""
5265         fname="Pyfile103.med"
5266         fieldName="field1"
5267         mm=MEDFileUMesh()
5268         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5269         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5270         m.allocateCells()
5271         m.insertNextCell(NORM_TRI3,[0,1,2])
5272         m.insertNextCell(NORM_TRI3,[3,4,5])
5273         m.insertNextCell(NORM_TRI3,[6,7,8])
5274         m.insertNextCell(NORM_TRI3,[9,10,11])
5275         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5276         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5277         mm[-1]=m
5278         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5279         m0.allocateCells()
5280         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5281         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5282         mm[0]=m0
5283         mm.write(fname,2)
5284         # start slowly
5285         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5286         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5287         #
5288         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5289         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5290         # here f1 lying on level -1 not 0 check if "field" method detect it !
5291         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5292         f1.setMesh(mm[-1]) # -1 is very important
5293         f1.setTime(16.,3,4)
5294         f1.checkConsistencyLight()
5295         mm.write(fname,2)
5296         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5297         #
5298         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5299         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5300         # nodes on elements
5301         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5302         f3.setMesh(mm[-1]) # this line is important
5303         arr3=DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5304         f3.setName(fieldName) ; f3.checkConsistencyLight()
5305         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5306         #
5307         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5308         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5309         # gauss
5310         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5311         f4.setMesh(mm[-1]) # this line is important
5312         f4.setName(fieldName)
5313         f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,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.1,0.05,0.35])
5314         f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5315         arr4=DataArrayDouble([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5316         f4.checkConsistencyLight()
5317         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5318         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5319         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5320         pass
5321
5322     def testMEDFileFieldEasyField4(self):
5323         """ Same than testMEDFileFieldEasyField3 but with integers"""
5324         fname="Pyfile104.med"
5325         fieldName="field1"
5326         mm=MEDFileUMesh()
5327         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5328         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5329         m.allocateCells()
5330         m.insertNextCell(NORM_TRI3,[0,1,2])
5331         m.insertNextCell(NORM_TRI3,[3,4,5])
5332         m.insertNextCell(NORM_TRI3,[6,7,8])
5333         m.insertNextCell(NORM_TRI3,[9,10,11])
5334         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5335         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5336         mm[-1]=m
5337         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5338         m0.allocateCells()
5339         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5340         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5341         mm[0]=m0
5342         mm.write(fname,2)
5343         # start slowly
5344         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5345         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5346         #
5347         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5348         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5349         # here f1 lying on level -1 not 0 check if "field" method detect it !
5350         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5351         f1.setMesh(mm[-1]) # -1 is very important
5352         f1.setTime(16.,3,4)
5353         f1.checkConsistencyLight()
5354         mm.write(fname,2)
5355         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5356         #
5357         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5358         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5359         # nodes on elements
5360         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5361         f3.setMesh(mm[-1]) # this line is important
5362         arr3=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5363         f3.setName(fieldName) ; f3.checkConsistencyLight()
5364         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5365         #
5366         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5367         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5368         # gauss
5369         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5370         f4.setMesh(mm[-1]) # this line is important
5371         f4.setName(fieldName)
5372         f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,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.1,0.05,0.35])
5373         f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5374         arr4=DataArrayInt([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5375         f4.checkConsistencyLight()
5376         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5377         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5378         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5379         pass
5380
5381     def testMEDFileFieldEasyField5(self):
5382         """More and more difficult now look at how profiles are managed by "field" method."""
5383         fname="Pyfile105.med"
5384         fieldName="field1"
5385         mm=MEDFileUMesh()
5386         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5387         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5388         m.allocateCells()
5389         m.insertNextCell(NORM_TRI3,[0,1,2])
5390         m.insertNextCell(NORM_TRI3,[3,4,5])
5391         m.insertNextCell(NORM_TRI3,[6,7,8])
5392         m.insertNextCell(NORM_TRI3,[9,10,11])
5393         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5394         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5395         mm[0]=m
5396         mm.write(fname,2)
5397         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5398         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5399         #
5400         arr0=DataArrayDouble([10,11,12,13])
5401         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5402         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5403         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5404         ff.write(fname,0)
5405         #
5406         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5407         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5408         # more complicated -> multi level
5409         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5410         m0.allocateCells()
5411         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5412         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5413         mm2=MEDFileUMesh()
5414         mm2[0]=m0 ; mm2[-1]=m
5415         #
5416         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5417         #
5418         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5419         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5420         pass
5421     
5422     pass
5423
5424 if __name__ == "__main__":
5425     unittest.main()