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