Salome HOME
Merge from V6_main (dev of Anthony GEAY) 11/06/2013
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (CEA/DEN)
21
22 from MEDLoader import *
23 import unittest
24 from math import pi,e,sqrt
25 from MEDLoaderDataForTest import MEDLoaderDataForTest
26
27 class MEDLoaderTest(unittest.TestCase):
28     def testMEDMesh1(self):
29         fileName="Pyfile18.med"
30         mname="ExampleOfMultiDimW"
31         medmesh=MEDFileMesh.New(fileName,mname)
32         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
33         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
34         m1_0=medmesh.getLevel0Mesh(True)
35         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
36         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
37         m2_0=medmesh.getLevelM1Mesh(True)
38         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
39         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
40         pass
41     def testMEDMesh2(self):
42         fileName="Pyfile10.med"
43         mname="3DToto"
44         outFileName="MEDFileMesh1.med"
45         medmesh=MEDFileUMesh.New(fileName,mname)
46         self.assertEqual((0,),medmesh.getNonEmptyLevels())
47         m1_0=medmesh.getLevel0Mesh(True)
48         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
49         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
50         g1_0=medmesh.getGroup(0,"mesh2",True)
51         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
52         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
53         g1_0=medmesh.getGroup(0,"mesh3",True)
54         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
55         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
56         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
57         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
58         g1_1.setName(g1_0.getName())
59         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
60         g1_0=medmesh.getFamily(0,"Family_2",True)
61         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
62         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
63         g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
64         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
65         g1_1.setName(g1_0.getName())
66         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
67         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
68         medmesh.write(outFileName,2);
69         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
70         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
71         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
72         self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
73         famn=medmesh.getFamilyNameGivenId(0)
74         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
75         #without renum
76         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
77         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
78         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
79         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
80         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
81         pass
82
83     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
84     def testMEDMesh3(self):
85         outFileName="MEDFileMesh3.med"
86         c=DataArrayDouble.New()
87         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 ];
88         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
89         c.setValues(coords,9,2)
90         m=MEDCouplingUMesh.New();
91         m.setMeshDimension(2);
92         m.allocateCells(5);
93         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
94         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
95         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
96         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
97         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
98         m.finishInsertingCells();
99         m.setCoords(c)
100         m.checkCoherency()
101         m1=MEDCouplingUMesh.New();
102         m1.setMeshDimension(1);
103         m1.allocateCells(3);
104         m1.insertNextCell(NORM_SEG2,2,[1,4])
105         m1.insertNextCell(NORM_SEG2,2,[3,6])
106         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
107         m1.finishInsertingCells();
108         m1.setCoords(c)
109         m1.checkCoherency()
110         m2=MEDCouplingUMesh.New();
111         m2.setMeshDimension(0);
112         m2.allocateCells(4);
113         m2.insertNextCell(NORM_POINT1,1,[1])
114         m2.insertNextCell(NORM_POINT1,1,[3])
115         m2.insertNextCell(NORM_POINT1,1,[2])
116         m2.insertNextCell(NORM_POINT1,1,[6])
117         m2.finishInsertingCells();
118         m2.setCoords(c)
119         m2.checkCoherency()
120         #
121         mm=MEDFileUMesh.New()
122         self.assertTrue(mm.getUnivNameWrStatus())
123         mm.setName("MyFirstMEDCouplingMEDmesh")
124         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
125         mm.setCoords(c)
126         mm.setMeshAtLevel(-1,m1);
127         mm.setMeshAtLevel(0,m);
128         mm.setMeshAtLevel(-2,m2);
129         # playing with groups
130         g1_2=DataArrayInt.New()
131         g1_2.setValues([1,3],2,1)
132         g1_2.setName("G1")
133         g2_2=DataArrayInt.New()
134         g2_2.setValues([1,2,3],3,1)
135         g2_2.setName("G2")
136         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
137         g1_1=DataArrayInt.New()
138         g1_1.setValues([0,1,2],3,1)
139         g1_1.setName("G1")
140         g2_1=DataArrayInt.New()
141         g2_1.setValues([0,2],2,1)
142         g2_1.setName("G2")
143         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
144         g1_N=DataArrayInt.New()
145         g1_N.setValues(range(8),8,1)
146         g1_N.setName("G1")
147         g2_N=DataArrayInt.New()
148         g2_N.setValues(range(9),9,1)
149         g2_N.setName("G2")
150         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
151         mm.createGroupOnAll(0,"GrpOnAllCell")
152         # check content of mm
153         t=mm.getGroupArr(0,"G1",False)
154         self.assertTrue(g1_2.isEqual(t));
155         t=mm.getGroupArr(0,"G2",False)
156         self.assertTrue(g2_2.isEqual(t));
157         t=mm.getGroupArr(-1,"G1",False)
158         self.assertTrue(g1_1.isEqual(t));
159         t=mm.getGroupArr(-1,"G2",False)
160         self.assertTrue(g2_1.isEqual(t));
161         t=mm.getGroupArr(1,"G1",False)
162         self.assertTrue(g1_N.isEqual(t));
163         t=mm.getGroupArr(1,"G2",False)
164         self.assertTrue(g2_N.isEqual(t));
165         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
166         t=mm.getGroupArr(0,"GrpOnAllCell")
167         self.assertTrue(t.getValues()==range(5))
168         #
169         mmCpy=mm.deepCpy()
170         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
171         mmCpy.write(outFileName,2);
172         #
173         mm=MEDFileMesh.New(outFileName)
174         self.assertTrue(mm.getUnivNameWrStatus())
175         self.assertTrue(isinstance(mm.getUnivName(),str))
176         self.assertTrue(len(mm.getUnivName())!=0)
177         mbis=mm.getMeshAtLevel(0)
178         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
179         self.assertTrue(m.isEqual(mbis,1e-12));
180         #
181         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
182         pass
183
184     # this test is the testMEDMesh3 except that permutation is dealed here
185     def testMEDMesh4(self):
186         outFileName="MEDFileMesh4.med"
187         c=DataArrayDouble.New()
188         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 ];
189         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
190         c.setValues(coords,9,2)
191         c.setInfoOnComponent(0,"abcdef [km]")
192         c.setInfoOnComponent(1,"ghij [MW]")
193         m=MEDCouplingUMesh.New();
194         m.setMeshDimension(2);
195         m.allocateCells(5);
196         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
197         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
198         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
199         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
200         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
201         m.finishInsertingCells();
202         m.setCoords(c)
203         m.checkCoherency()
204         m1=MEDCouplingUMesh.New();
205         m1.setMeshDimension(1);
206         m1.allocateCells(3);
207         m1.insertNextCell(NORM_SEG2,2,[1,4])
208         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
209         m1.insertNextCell(NORM_SEG2,2,[3,6])
210         m1.finishInsertingCells();
211         m1.setCoords(c)
212         m1.checkCoherency()
213         m2=MEDCouplingUMesh.New();
214         m2.setMeshDimension(0);
215         m2.allocateCells(4);
216         m2.insertNextCell(NORM_POINT1,1,[1])
217         m2.insertNextCell(NORM_POINT1,1,[3])
218         m2.insertNextCell(NORM_POINT1,1,[2])
219         m2.insertNextCell(NORM_POINT1,1,[6])
220         m2.finishInsertingCells();
221         m2.setCoords(c)
222         m2.checkCoherency()
223         #
224         mm=MEDFileUMesh.New()
225         mm.setName("My2ndMEDCouplingMEDmesh")
226         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
227         mm.setCoords(c)
228         renumNode=DataArrayInt.New()
229         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
230         mm.setRenumFieldArr(1,renumNode)
231         mm.setMeshAtLevel(-1,m1,True);
232         mm.setMeshAtLevel(0,m,True);
233         mm.setMeshAtLevel(-2,m2,True);
234         mm.removeMeshAtLevel(-2)
235         mm.setMeshAtLevel(-2,m2,True);
236         # playing with groups
237         g1_2=DataArrayInt.New()
238         g1_2.setValues([2,3],2,1)
239         g1_2.setName("G1")
240         g2_2=DataArrayInt.New()
241         g2_2.setValues([2,0,3],3,1)
242         g2_2.setName("G2")
243         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
244         g1_1=DataArrayInt.New()
245         g1_1.setValues([0,2,1],3,1)
246         g1_1.setName("G1")
247         g2_1=DataArrayInt.New()
248         g2_1.setValues([0,2],2,1)
249         g2_1.setName("G2")
250         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
251         g1_N=DataArrayInt.New()
252         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
253         g1_N.setName("G1")
254         g2_N=DataArrayInt.New()
255         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
256         g2_N.setName("G2")
257         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
258         # check content of mm
259         t=mm.getGroupArr(0,"G1",True)
260         self.assertTrue(g1_2.isEqual(t));
261         t=mm.getGroupArr(0,"G2",True)
262         self.assertTrue(g2_2.isEqual(t));
263         t=mm.getGroupArr(-1,"G1",True)
264         self.assertTrue(g1_1.isEqual(t));
265         t=mm.getGroupArr(-1,"G2",True)
266         self.assertTrue(g2_1.isEqual(t));
267         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
268         #
269         mm.write(outFileName,2);
270         mm2=MEDFileMesh.New(outFileName)
271         res=mm.isEqual(mm2,1e-12)
272         self.assertTrue(res[0])
273         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
274         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
275         mm2.keepFamIdsOnlyOnLevs([3],[-1])
276         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
277             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
278             pass
279         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
280         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
281         #
282         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
283         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
284         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
285         self.assertTrue(not mm2.existsFamily("Family_-8"))
286         mm2.createGroupOnAll(-1,"GrpOnAllFace")
287         self.assertTrue(mm2.existsFamily("Family_-8"))
288         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
289         pass
290
291     #testing persistence of retrieved arrays
292     def testMEDMesh5(self):
293         fileName="Pyfile18.med"
294         mname="ExampleOfMultiDimW"
295         medmesh=MEDFileUMesh.New(fileName,mname)
296         m1_0=medmesh.getLevel0Mesh(True)
297         da1=medmesh.getFamilyFieldAtLevel(0)
298         del medmesh
299         self.assertEqual(20,m1_0.getNumberOfCells())
300         self.assertEqual(20,da1.getNumberOfTuples())
301         pass
302
303     def testMEDMesh6(self):
304         outFileName="MEDFileMesh5.med"
305         m=MEDFileCMesh.New()
306         m.setTime(-1,-1,2.3)
307         m1=MEDCouplingCMesh.New();
308         da=DataArrayDouble.New()
309         da.setValues([0.,1.,2.],3,1)
310         da.setInfoOnComponent(0,"XX [mm]")
311         m1.setCoordsAt(0,da)
312         da=DataArrayDouble.New()
313         da.setValues([0.,1.2],2,1)
314         da.setInfoOnComponent(0,"YY [km]")
315         m1.setCoordsAt(1,da)
316         da=DataArrayDouble.New()
317         da.setValues([0.,1.3],2,1)
318         da.setInfoOnComponent(0,"ZZ [um]")
319         m1.setCoordsAt(2,da)
320         m.setMesh(m1)
321         m.setName("myFirstCartMesh")
322         m.setDescription("mmmmpppppppp")
323         m.setTimeValue(2.3)
324         m.setTimeUnit("ms")
325         da=DataArrayInt.New()
326         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
327         m.setFamilyFieldArr(1,da)
328         m.setFamilyId("family1",1)
329         da=m.getFamilyArr(1,"family1")
330         expected1=[2,4,9]
331         self.assertEqual(expected1,da.getValues())
332         self.assertTrue(m.getUnivNameWrStatus())
333         m.write(outFileName,2);
334         mm=MEDFileMesh.New(outFileName)
335         self.assertTrue(isinstance(mm,MEDFileCMesh))
336         self.assertTrue(isinstance(mm.getUnivName(),str))
337         self.assertTrue(len(mm.getUnivName())!=0)
338         self.assertTrue(m.isEqual(mm,1e-12)[0])
339         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
340         m2=mm.getMesh()
341         tt=m.getTime()
342         m1.setTime(tt[2],tt[0],tt[1])
343         m1.setName(m.getName())
344         m1.setTimeUnit(m.getTimeUnit())
345         m1.setDescription(m.getDescription())
346         self.assertTrue(m2.isEqual(m1,1e-12));
347         pass
348
349     def testMEDMesh7(self):
350         fileName="Pyfile24.med"
351         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
352         m=MEDFileUMesh.New()
353         m.setCoords(m2.getCoords())
354         m.setMeshAtLevel(0,m2)
355         m.setMeshAtLevel(-1,m1)
356         m.setMeshAtLevel(-2,m0)
357         m.setFamilyFieldArr(0,f2)
358         m.setFamilyFieldArr(-1,f1)
359         m.setFamilyFieldArr(-2,f0)
360         m.setFamilyFieldArr(1,p)
361         m.setRenumFieldArr(0,n2)
362         m.setRenumFieldArr(-1,n1)
363         m.setRenumFieldArr(-2,n0)
364         nbOfFams=len(fns)
365         for i in xrange(nbOfFams):
366             m.addFamily(fns[i],fids[i])
367             pass
368         nbOfGrps=len(grpns)
369         for i in xrange(nbOfGrps):
370             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
371             pass
372         m.setName(m2.getName())
373         m.setDescription(m2.getDescription())
374         #
375         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
376         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
377         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
378         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
379         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
380         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
381         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
382         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
383         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
384         #
385         m.write(fileName,2)
386         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
387         pass
388
389     def funcToTestDelItem(self,ff):
390         del ff[[0.02,(3,4)]]
391         pass
392
393     #emulation of pointe.med file.
394     def testMEDField1(self):
395         mm=MEDFileMesh.New("Pyfile17.med")
396         mm.write("Pyfile17_bis.med",2)
397         ff=MEDFileFieldMultiTS("Pyfile17.med")
398         tsExpected=[[1,2],[3,4],[5,6]]
399         self.assertEqual(3,len(ff))
400         for pos,f1ts in enumerate(ff):
401             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
402             self.assertEqual(type(f1ts),MEDFileField1TS)
403             pass
404         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
405         self.assertEqual([3,4],ff[1].getTime()[:-1])
406         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
407         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
408         ff.write("Pyfile17_bis.med",0)
409         #
410         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
411         self.assertEqual([(1,2),(3,4),(5,6)],ts)
412         self.funcToTestDelItem(ff)
413         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
414         self.assertEqual([(1,2)],ts)
415         pass
416
417     #profiles
418     def testMEDField2(self):
419         mm=MEDFileMesh.New("Pyfile19.med")
420         mm.write("Pyfile19_bis.med",2)
421         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
422         ff.write("Pyfile19_bis.med",0)
423         self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
424         pass
425
426     #gauss points
427     def testMEDField3(self):
428         mm=MEDFileMesh.New("Pyfile13.med")
429         mm.write("Pyfile13_bis.med",2)
430         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
431         ff.write("Pyfile13_bis.med",0)
432         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
433         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
434         f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
435         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
436         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
437         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
438         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
439         ff4=MEDFileField1TS.New("Pyfile13.med")
440         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
441         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
442         pass
443
444     #gauss NE
445     def testMEDField4(self):
446         mm=MEDFileMesh.New("Pyfile14.med")
447         mm.write("Pyfile14_bis.med",2)
448         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
449         ff.write("Pyfile14_bis.med",0)
450         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
451         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
452         f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
453         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
454         pass
455
456     # MEDField get/set on pointe.med
457     def testMEDField5(self):
458         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
459         f=ff.getFieldAtLevel(ON_CELLS,0)
460         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
461         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
462         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
463         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
464         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
465         # no with renumbering
466         f=ff.getFieldAtLevel(ON_CELLS,0,1)
467         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
468         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
469         f=ff.getFieldAtLevel(ON_CELLS,0,3)
470         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
471         f=ff.getFieldAtLevel(ON_CELLS,0,2)
472         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
473         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
474         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
475         pass
476
477     # MEDField get/set on profiles nodes
478     def testMEDField6(self):
479         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
480         its=ff.getIterations()
481         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
482         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
483         f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
484         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
485         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
486         its=ff.getIterations()
487         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
488         f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
489         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
490         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
491         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
492         pass
493
494     # MEDField get/set on profiles cells
495     def testMEDField7(self):
496         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
497         its=ff.getIterations()
498         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
499         f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
500         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
501         pass
502
503     #first test of assignation. No profile and types sorted by type.
504     def testMEDField8(self):
505         fname="Pyfile25.med"
506         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
507         m1=f1.getMesh()
508         mm1=MEDFileUMesh.New()
509         mm1.setCoords(m1.getCoords())
510         mm1.setMeshAtLevel(0,m1)
511         mm1.setName(m1.getName())
512         mm1.write(fname,2)
513         ff1=MEDFileField1TS.New()
514         ff1.setFieldNoProfileSBT(f1)
515         ff1.write(fname,0)
516         f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
517         itt,orr,ti=ff1.getTime()
518         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
519         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
520         ff1.setTime(3,4,2.3)
521         itt,orr,ti=ff1.getTime()
522         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
523         da,infos=ff1.getUndergroundDataArrayExt()
524         f2.getArray().setName(da.getName())#da has the same name than f2
525         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
526         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
527         #
528         fname="Pyfile26.med"
529         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
530         m1=f1.getMesh()
531         mm1=MEDFileUMesh.New()
532         mm1.setCoords(m1.getCoords())
533         mm1.setMeshAtLevel(0,m1)
534         mm1.setName(m1.getName())
535         mm1.write(fname,2)
536         ff1=MEDFileField1TS.New()
537         ff1.setFieldNoProfileSBT(f1)
538         nv=1456.
539         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
540         ff1.write(fname,0)
541         f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
542         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
543         f1.getArray().setIJ(0,0,nv)
544         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
545         #
546         fname="Pyfile27.med"
547         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
548         m1=f1.getMesh()
549         mm1=MEDFileUMesh.New()
550         mm1.setCoords(m1.getCoords())
551         mm1.setMeshAtLevel(0,m1)
552         mm1.setName(m1.getName())
553         mm1.write(fname,2)
554         ff1=MEDFileField1TS.New()
555         ff1.setFieldNoProfileSBT(f1)
556         ff1.write(fname,0)
557         f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
558         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
559         da,infos=ff1.getUndergroundDataArrayExt()
560         f2.getArray().setName(da.getName())#da has the same name than f2
561         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
562         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
563         #
564         fname="Pyfile28.med"
565         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
566         f1InvalidCpy=f1.deepCpy()
567         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
568         f1InvalidCpy2=f1.deepCpy()
569         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
570         m1=f1.getMesh()
571         mm1=MEDFileUMesh.New()
572         mm1.setCoords(m1.getCoords())
573         mm1.setMeshAtLevel(0,m1)
574         mm1.setName(m1.getName())
575         mm1.write(fname,2)
576         ff1=MEDFileField1TS.New()
577         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
578         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
579         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
580         ff1.setFieldNoProfileSBT(f1)
581         ff1.write(fname,0)
582         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
583         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
584         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
585         sbt=ff2.getFieldSplitedByType2()
586         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
587         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
588         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
589         self.assertEqual(6,loc1.getNumberOfPointsInCells())
590         self.assertEqual(3,loc1.getNumberOfGaussPoints())
591         self.assertEqual(2,loc1.getDimension())
592         da,infos=ff2.getUndergroundDataArrayExt()
593         f2.getArray().setName(da.getName())#da has the same name than f2
594         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
595         self.assertEqual(53,da.getNumberOfTuples())
596         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)
597         #
598         pass
599     
600     def testMEDFileData1(self):
601         fname="Pyfile29.med"
602         d=MEDFileData.New()
603         #
604         m1=MEDLoaderDataForTest.build1DMesh_1()
605         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
606         mmm1=MEDFileMeshMultiTS.New() ;
607         mmm1.setOneTimeStep(mm1)
608         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
609         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
610         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
611         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
612         d.setMeshes(ms)
613         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
614             self.assertEqual(name,mmm.getName())
615             self.assertEqual(type(mmm),MEDFileUMesh)
616             pass
617         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
618         #
619         ff1=MEDFileFieldMultiTS.New()
620         ff21=MEDFileFieldMultiTS.New()
621         ff22=MEDFileFieldMultiTS.New()
622         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
623         f1.getArray().setInfoOnComponent(0,"power [kW]")
624         ff1.appendFieldNoProfileSBT(f1)
625         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
626         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
627         ff21.appendFieldNoProfileSBT(f21)
628         f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
629         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
630         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
631         ff22.appendFieldNoProfileSBT(f22)
632         fs=MEDFileFields.New()
633         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
634         for name,fmts in zip(["f1","f21","f22"],fs):
635             self.assertEqual(name,fmts.getName())
636             pass
637         d.setFields(fs)
638         #
639         fname2="Pyfile29_2.med"
640         d.write(fname2,2)
641         #
642         d2=MEDFileData.New(fname2)
643         self.assertEqual(2,d2.getNumberOfMeshes())
644         self.assertEqual(3,d2.getNumberOfFields())
645         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
646         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
647         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
648         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
649         self.assertTrue(m1.isEqual(m1bis,1e-12))
650         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
651         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
652         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
653         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
654         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
655         pass
656     
657     def testMEDField9(self):
658         # first test field profile WR. Full type but with some type missing
659         fname="Pyfile30.med"
660         m1=MEDLoaderDataForTest.build2DMesh_3()
661         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
662         mm1.write(fname,2)
663         ff1=MEDFileField1TS.New()
664         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
665         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
666         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.
667         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
668         #
669         ff1.setFieldProfile(f1,mm1,0,da)
670         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
671         ff1=ff1.deepCpy()
672         ff1.write(fname,0)
673         #
674         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
675         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
676         self.assertTrue(vals.isEqual(d,1e-14))
677         #
678         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
679         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
680         ff2.deepCpyGlobs(ff3)
681         sbt=ff2.getFieldSplitedByType2()
682         self.assertEqual(3,sbt[0][0])#TRI3
683         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
684         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
685         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
686         self.assertEqual(4,sbt[1][0])#QUAD4
687         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
688         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
689         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
690         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
691         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
692         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
693         self.assertTrue(vals.isEqual(d,1e-14))
694         pass
695     
696     def testMEDField10(self):
697         fname="Pyfile31.med"
698         m1=MEDLoaderDataForTest.build2DMesh_1()
699         m1.renumberCells([0,1,4,2,3,5],False)
700         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
701         mm1.write(fname,2)
702         ff1=MEDFileFieldMultiTS.New()
703         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
704         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
705         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.
706         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
707         #
708         ff1.appendFieldProfile(f1,mm1,0,da)
709         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
710         ff1.appendFieldProfile(f1,mm1,0,da)
711         ff1=ff1.deepCpy()
712         ff1.write(fname,0)
713         #
714         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
715         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
716         self.assertTrue(vals.isEqual(e,1e-14))
717         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
718         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
719         self.assertTrue(vals.isEqual(d,1e-14))
720         #
721         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
722         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
723         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
724         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
725         self.assertTrue(vals.isEqual(e,1e-14))
726         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
727         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
728         self.assertTrue(vals.isEqual(d,1e-14))
729         pass
730     
731     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
732     def testMEDField11(self):
733         fname="Pyfile32.med"
734         m1=MEDLoaderDataForTest.build2DMesh_1()
735         m1.renumberCells([0,1,4,2,3,5],False)
736         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
737         mm1.write(fname,2)
738         ff1=MEDFileField1TS.New()
739         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
740         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
741         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.
742         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
743         #
744         ff1.setFieldProfile(f1,mm1,0,da)
745         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
746         ff1.write(fname,0)
747         #
748         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
749         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
750         self.assertTrue(vals.isEqual(d,1e-14))
751         ## #
752         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
753         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
754         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
755         self.assertTrue(vals.isEqual(d,1e-14))
756         pass
757
758     def testMEDField12(self):
759         fname="Pyfile33.med"
760         m1=MEDLoaderDataForTest.build2DMesh_1()
761         m1.renumberCells([0,1,4,2,3,5],False)
762         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
763         mm1.write(fname,2)
764         ff1=MEDFileFieldMultiTS.New()
765         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
766         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
767         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.
768         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
769         #
770         ff1.appendFieldProfile(f1,mm1,0,da)
771         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
772         ff1.appendFieldProfile(f1,mm1,0,da)
773         ff1.write(fname,0)
774         #
775         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
776         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
777         self.assertTrue(vals.isEqual(e,1e-14))
778         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
779         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
780         self.assertTrue(vals.isEqual(d,1e-14))
781         #
782         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
783         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
784         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
785         self.assertTrue(vals.isEqual(e,1e-14))
786         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
787         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
788         self.assertTrue(vals.isEqual(d,1e-14))
789         pass
790
791     def testMEDField13(self):
792         fname="Pyfile34.med"
793         m1=MEDLoaderDataForTest.build2DMesh_1()
794         m1.renumberCells([0,1,4,2,3,5],False)
795         tmp=m1.getName();
796         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
797         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
798         mm1.write(fname,2)
799         ff1=MEDFileField1TS.New()
800         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
801         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
802         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.
803         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
804         #
805         ff1.setFieldProfile(f1,mm1,0,da)
806         ff1.write(fname,0)
807         #
808         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
809         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810         self.assertTrue(vals.isEqual(d,1e-14))
811         #
812         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
813         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
814         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
815         self.assertTrue(vals.isEqual(d,1e-14))
816         pass
817
818     def testMEDField14(self):
819         fname="Pyfile35.med"
820         m1=MEDLoaderDataForTest.build2DMesh_1()
821         m1.renumberCells([0,1,4,2,3,5],False)
822         tmp=m1.getName();
823         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
824         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
825         mm1.write(fname,2)
826         ff1=MEDFileFieldMultiTS.New()
827         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
828         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
829         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.
830         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
831         #
832         ff1.appendFieldProfile(f1,mm1,0,da)
833         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
834         ff1.appendFieldProfile(f1,mm1,0,da)
835         ff1.write(fname,0)
836         #
837         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
838         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
839         self.assertTrue(vals.isEqual(d,1e-14))
840         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
841         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
842         self.assertTrue(vals.isEqual(e,1e-14))
843         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
844         #
845         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
846         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
847         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
848         self.assertTrue(vals.isEqual(d,1e-14))
849         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
850         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
851         self.assertTrue(vals.isEqual(e,1e-14))
852         pass
853     # 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.
854     # 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
855     # 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 !
856     def testMEDField15(self):
857         fname="Pyfile36.med"
858         m0=MEDLoaderDataForTest.build2DMesh_1()
859         m0.renumberCells([0,1,4,2,3,5],False)
860         tmp=m0.getName();
861         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
862         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
863         ff1=MEDFileField1TS.New()
864         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
865         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
866         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.
867         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
868         #
869         ff1.setFieldProfile(f1,mm1,0,da)
870         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
871         mm1.write(fname,2)
872         ff1.write(fname,0)
873         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
874         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
875         self.assertTrue(p1.isIdentity())
876         self.assertEqual(5,p1.getNumberOfTuples())
877         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
878         pass
879     # Test for getFieldAtTopLevel method
880     def testMEDField16(self):
881         fname="Pyfile37.med"
882         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
883         m1=f1.getMesh()
884         mm1=MEDFileUMesh.New()
885         mm1.setCoords(m1.getCoords())
886         mm1.setMeshAtLevel(0,m1)
887         mm1.setName(m1.getName())
888         ff1=MEDFileField1TS.New()
889         ff1.setFieldNoProfileSBT(f1)
890         m2=m1.buildDescendingConnectivity()[0]
891         m2.sortCellsInMEDFileFrmt()
892         m2.setName(m1.getName())
893         mm1.setMeshAtLevel(-1,m2)
894         mm1.write(fname,2)
895         f2=m2.getMeasureField(True)
896         dd=DataArrayDouble.New()
897         dd.alloc(f2.getArray().getNumberOfTuples(),3)
898         dd[:,0]=f2.getArray()
899         dd[:,1]=2*f2.getArray()
900         dd[:,2]=3*f2.getArray()
901         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
902         f2.setArray(dd)
903         f2.copyTinyStringsFrom(f1)
904         f2.copyTinyAttrFrom(f1)
905         ff1.setFieldNoProfileSBT(f2)
906         ff1.write(fname,0)
907         # Reading Pyfile37.med
908         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
909         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
910         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
911         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
912         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
913         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
914         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
915         # More complex
916         fname="Pyfile38.med"
917         mm1.write(fname,2)
918         ff1=MEDFileField1TS.New()
919         ff1.setFieldNoProfileSBT(f2)
920         ff1.write(fname,0)
921         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
922         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
923         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
924         pass
925
926     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
927     def testMEDField17(self):
928         fname="Pyfile39.med"
929         m1=MEDLoaderDataForTest.build2DMesh_1()
930         m1.renumberCells([0,1,4,2,3,5],False)
931         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
932         mm1.write(fname,2)
933         ffs=MEDFileFields.New()
934         ff1=MEDFileFieldMultiTS.New()
935         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
936         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
937         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.
938         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
939         #
940         ff1.appendFieldProfile(f1,mm1,0,da)
941         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
942         ff1.appendFieldProfile(f1,mm1,0,da)
943         ffs.resize(1)
944         ffs.setFieldAtPos(0,ff1)
945         ffs=ffs.deepCpy()
946         ffs.write(fname,0)
947         #
948         ffsr=MEDFileFields.New(fname)
949         ff3=ffsr.getFieldAtPos(0)
950         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
951         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
952         pass
953
954     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
955     def testMEDField18(self):
956         fname="Pyfile40.med"
957         m1=MEDLoaderDataForTest.build2DMesh_1()
958         m1.renumberCells([0,1,4,2,3,5],False)
959         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
960         mm1.write(fname,2)
961         ffs=MEDFileFields.New()
962         ff1=MEDFileFieldMultiTS.New()
963         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
964         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965         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.
966         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
967         #
968         ff1.appendFieldProfile(f1,mm1,0,da)
969         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
970         ff1.appendFieldProfile(f1,mm1,0,da)
971         ffs.pushField(ff1)
972         ffs.write(fname,0)
973         #
974         ffsr=MEDFileFields.New(fname)
975         ff3=ffsr.getFieldAtPos(0)
976         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
977         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
978         pass
979
980     def testMEDFieldBug1(self):
981         fname="Pyfile13.med"
982         d=MEDFileData.New(fname)
983         self.assertEqual(('GP_MyFirstFieldOnGaussPoint0', 'GP_MyFirstFieldOnGaussPoint1', 'GP_MyFirstFieldOnGaussPoint2'),d.getFields().getFieldAtPos(0).getLocs())
984         pass
985
986     def testMEDMesh8(self):
987         m=MEDLoaderDataForTest.build1DMesh_1()
988         m.convertQuadraticCellsToLinear()
989         mm=MEDFileUMesh.New()
990         mm.setMeshAtLevel(0,m)
991         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
992         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
993         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
994         mm.setGroupsAtLevel(0,[g1,g2],False)
995         self.assertEqual(('g1','g2'),mm.getGroupsNames())
996         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
997         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
998         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
999         mm.assignFamilyNameWithGroupName()
1000         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1001         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1002         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1003         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1004         #
1005         mm=MEDFileUMesh.New()
1006         mm.setMeshAtLevel(0,m)
1007         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1008         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1009         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1010         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1011         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1012         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1013         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1014         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1015         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1016         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1017         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1018         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1019         mm.changeFamilyId(5,6)
1020         g=mm.getGroupArr(0,"g3")
1021         self.assertTrue(g.isEqual(g3));
1022         g=mm.getGroupArr(0,"g2")
1023         self.assertTrue(g.isEqual(g2));
1024         g=mm.getGroupArr(0,"g1")
1025         self.assertTrue(g.isEqual(g1));
1026         pass
1027     
1028     # bug detected by gauthier
1029     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1030         fname="Pyfile41.med"
1031         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1032         m1=f1.getMesh()
1033         mm1=MEDFileUMesh.New()
1034         mm1.setCoords(m1.getCoords())
1035         mm1.setMeshAtLevel(0,m1)
1036         mm1.write(fname,2)
1037         ff1=MEDFileField1TS.New()
1038         ff1.setFieldNoProfileSBT(f1)
1039         ff1.write(fname,0)
1040         # writing mesh1 and field1, now creation of mesh2 and field2
1041         f2=f1.deepCpy()
1042         m2=f2.getMesh()
1043         m2.translate([0.5,0.6,0.7])
1044         m2.setName("3DSurfMesh_2")
1045         f2.getArray()[:]*=2.
1046         f2.setName("VectorFieldOnCells2")
1047         mm2=MEDFileUMesh.New()
1048         mm2.setCoords(m2.getCoords())
1049         mm2.setMeshAtLevel(0,m2)
1050         mm2.write(fname,0)
1051         ff2=MEDFileField1TS.New()
1052         ff2.setFieldNoProfileSBT(f2)
1053         ff2.write(fname,0)
1054         #
1055         f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1056         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1057         f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1058         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1059         pass
1060
1061     def testMEDLoaderMultiLevelCellField1(self):
1062         fname="Pyfile42.med"
1063         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1064         m=MEDFileUMesh.New()
1065         m.setCoords(m2.getCoords())
1066         m.setMeshAtLevel(0,m2)
1067         m.setMeshAtLevel(-1,m1)
1068         m.setMeshAtLevel(-2,m0)
1069         m.write(fname,2)
1070         #
1071         FieldName1="Field1"
1072         compNames1=["comp1","comp2","comp3"]
1073         ff1=MEDFileField1TS.New()
1074         da2=DataArrayDouble.New()
1075         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1076         da2.iota(7.)
1077         da2.rearrange(len(compNames1))
1078         da2.setInfoOnComponents(compNames1)
1079         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1080         ff1.setFieldNoProfileSBT(f2)
1081         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1082         da0=DataArrayDouble.New()
1083         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1084         da0.iota(190.)
1085         da0.rearrange(len(compNames1))
1086         da0.setInfoOnComponents(compNames1)
1087         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1088         ff1.setFieldNoProfileSBT(f0)
1089         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1090         da1=DataArrayDouble.New()
1091         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1092         da1.iota(90.)
1093         da1.rearrange(len(compNames1))
1094         da1.setInfoOnComponents(compNames1)
1095         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1096         ff1.setFieldNoProfileSBT(f1)
1097         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1098         #
1099         ff1.write(fname,0)
1100         #
1101         FieldName2="Field2"
1102         compNames2=["comp11","comp22"]
1103         ff2=MEDFileField1TS.New()
1104         da0=DataArrayDouble.New()
1105         da0.alloc(m0.getNumberOfCells()*2,1)
1106         da0.iota(-190.)
1107         da0.rearrange(2)
1108         da0.setInfoOnComponents(compNames2)
1109         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1110         ff2.setFieldNoProfileSBT(f0)
1111         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1112         da1=DataArrayDouble.New()
1113         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1114         da1.iota(-90.)
1115         da1.rearrange(len(compNames2))
1116         da1.setInfoOnComponents(compNames2)
1117         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1118         ff2.setFieldNoProfileSBT(f1)
1119         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1120         #
1121         ff2.write(fname,0)
1122         #
1123         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1124         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1125         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1126         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1127         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1128         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1129         pass
1130
1131     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1132         fname="Pyfile43.med"
1133         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1134         m=MEDFileUMesh.New()
1135         m.setMeshAtLevel(0,m2)
1136         m.setMeshAtLevel(-1,m1)
1137         m.setMeshAtLevel(-2,m0)
1138         f=MEDFileField1TS.New()
1139         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1140         ff.setName("NodeFieldPfl")
1141         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1142         ff.setArray(arr)
1143         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1144         f.setFieldProfile(ff,m,-2,pfl)
1145         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1146         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1147         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1148         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1149         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1150         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1151         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1152         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1153         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1154         expected1=[1.,10.,100.,2.,20.,200.]
1155         nodeCoordsWithValue1=[10.,2.5,0.]
1156         nodeCoordsWithValue2=[10.,3.75,0.]
1157         for i in xrange(3):
1158             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1159             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1160             pass
1161         for i in xrange(6):
1162             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1163             pass
1164         del tes0
1165         #
1166         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1167         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1168         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1169         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1170         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1171         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1172         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1173         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1174         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1175         for i in xrange(6):
1176             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1177             pass
1178         m.write(fname,2)
1179         f.write(fname,0)
1180         #
1181         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1182         f=MEDFileField1TS.New()
1183         f.setFieldProfile(ff,m,-2,pfl)
1184         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1185         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1186         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1187         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1188         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1189         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1190         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1191         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1192         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1193         expected2=[2.,20.,200.,1.,10.,100.]
1194         for i in xrange(3):
1195             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1196             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1197             pass
1198         for i in xrange(6):
1199             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1200             pass
1201         #
1202         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1203         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1204         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1205         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1206         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1207         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1208         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1209         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1210         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1211         for i in xrange(6):
1212             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1213             pass
1214         pass
1215
1216     def testDuplicateNodesOnM1Group1(self):
1217         fname="Pyfile44.med"
1218         m=MEDCouplingCMesh.New()
1219         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1220         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1221         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1222         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1223         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1224         m2.setName(m.getName())
1225         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1226         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1227         mm=MEDFileUMesh.New()
1228         mm.setMeshAtLevel(0,m)
1229         mm.setMeshAtLevel(-1,m2)
1230         mm.setGroupsAtLevel(-1,[grp,grp2])
1231         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1232         mm.setGroupsAtLevel(1,[grpNode])
1233         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1234         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1235         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1236         #
1237         self.assertEqual(30,mm.getNumberOfNodes())
1238         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1239         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1240         #
1241         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1242         self.assertEqual([15,16,17],nodes.getValues());
1243         self.assertEqual([7,8,9],cells.getValues());
1244         self.assertEqual([12,13,14],cells2.getValues());
1245         self.assertEqual(33,mm.getNumberOfNodes())
1246         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1247         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1248         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1249         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1250         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
1251         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1252         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
1253         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1254         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])
1255         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1256         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1257         #
1258         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1259         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1260         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1261         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1262         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1263         mm.write(fname,2)
1264         pass
1265
1266     def testDuplicateNodesOnM1Group2(self):
1267         fname="Pyfile45.med"
1268         m=MEDCouplingCMesh.New()
1269         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1270         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1271         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1272         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1273         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1274         m2.setName(m.getName())
1275         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1276         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1277         mm=MEDFileUMesh.New()
1278         mm.setMeshAtLevel(0,m)
1279         mm.setMeshAtLevel(-1,m2)
1280         mm.setGroupsAtLevel(-1,[grp,grp2])
1281         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1282         mm.setGroupsAtLevel(1,[grpNode])
1283         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1284         ref1=[4,9,8,14,15,4,10,9,15,16]
1285         ref2=[4,9,8,14,30,4,10,9,30,16]
1286         #
1287         self.assertEqual(30,mm.getNumberOfNodes())
1288         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1289         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1290         #
1291         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1292         self.assertEqual([15],nodes.getValues());
1293         self.assertEqual([7,8],cells.getValues());
1294         self.assertEqual([12,13],cells2.getValues());
1295         self.assertEqual(31,mm.getNumberOfNodes())
1296         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1297         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1298         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1299         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1300         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
1301         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1302         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
1303         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1304         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])
1305         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1306         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1307         #
1308         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1309         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1310         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1311         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1312         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1313         mm.write(fname,2)       
1314         pass
1315
1316     def testBasicConstructors(self):
1317         fname="Pyfile18.med"
1318         m=MEDFileMesh(fname)
1319         m=MEDFileMesh(fname,"ExampleOfMultiDimW",-1,-1)
1320         m=MEDFileMesh(fname)
1321         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1322         m=MEDFileUMesh(fname)
1323         m=MEDFileUMesh()
1324         self.testMEDMesh6()
1325         m=MEDFileCMesh("MEDFileMesh5.med")
1326         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1327         m=MEDFileCMesh()
1328         m=MEDFileMeshMultiTS()
1329         m=MEDFileMeshMultiTS(fname)
1330         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1331         m=MEDFileMeshes()
1332         m=MEDFileMeshes(fname)
1333         m=MEDFileField1TS()
1334         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1335         m=MEDFileFieldMultiTS()
1336         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1337         m=MEDFileFields()
1338         m=MEDFileFields(fname)
1339         m=MEDFileData()
1340         m=MEDFileData(fname)
1341         #
1342         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1343         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1344         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1345         m=MEDCouplingCMesh()
1346         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1347         m=MEDCouplingFieldTemplate(ON_NODES)
1348         m=MEDCouplingMultiFields([])
1349         m=MEDCouplingFieldOverTime([])
1350         pass
1351
1352     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1353     def testBugSemiPartialField(self):
1354         fname="Pyfile46.med"
1355         m=MEDLoaderDataForTest.build2DMesh_3()
1356         m=m[:10] ; m.setName("mesh")
1357         f=m.getMeasureField(ON_CELLS)
1358         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1359         f.setTime(5.5,3,4)
1360         f.setName("SemiPartialField")
1361         #
1362         f1=f[:6] ; f1.getMesh().setName(m.getName())
1363         f2=f[6:] ; f2.getMesh().setName(m.getName())
1364         #
1365         mm=MEDFileUMesh.New()
1366         mm.setMeshAtLevel(0,m)
1367         ff=MEDFileField1TS.New()
1368         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1369         mm.write(fname,2)
1370         ff.write(fname,0)
1371         #
1372         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1373         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1374         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1375         #
1376         fread.checkCoherency()
1377         fread2.checkCoherency()
1378         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1379         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1380         pass
1381
1382     def testUnPolyze1(self):
1383         fname="Pyfile47.med"
1384         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1385         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]
1386         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1387         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]]))
1388         mm.write(fname,2)
1389         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1390         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1391         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1392         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1393         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1394         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1395         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1396         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1397         # to test
1398         mm.setRenumFieldArr(0,None)
1399         mm.setFamilyFieldArr(-1,None)
1400         pass
1401
1402     def testUnPolyze2(self):
1403         fname="Pyfile48.med"
1404         mfd=MEDFileData.New()
1405         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1406         meshes=MEDFileMeshes.New()
1407         meshes.pushMesh(mm)
1408         mfd.setMeshes(meshes)
1409         fields=MEDFileFields.New()
1410         mfd.setFields(fields)
1411         ff=MEDFileFieldMultiTS.New()
1412         fields.pushField(ff)
1413         #
1414         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1415         f0_0.setTime(9.5,3,4)
1416         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1417         f0_0.setArray(da)
1418         f0_0.setMesh(mm.getMeshAtLevel(0))
1419         ff.appendFieldNoProfileSBT(f0_0)
1420         ff0=ff.getTimeStepAtPos(0)
1421         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1422         f0_1.setTime(9.5,3,4)
1423         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1424         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1425         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1426         f0_1.setArray(da)
1427         ff0.setFieldProfile(f0_1,mm,0,pfl)
1428         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1429         f0_2.setTime(9.5,3,4)
1430         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1431         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
1432         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1433         f0_2.setArray(da)
1434         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1435         mfd.getFields().shallowCpyGlobs(ff0)
1436         #
1437         mfd.unPolyzeMeshes()
1438         #
1439         fmts=mfd.getFields()[0]
1440         self.assertEqual(fmts.getNumberOfTS(),1)
1441         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1442         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1443         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))])
1444         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1445         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1446         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1447         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1448         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1449         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1450         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1451         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))
1452         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1453         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1454         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1455         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1456         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1457         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])
1458         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1459         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1460         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1461         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])
1462         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1463         #
1464         mfd.write(fname,2)
1465         pass
1466
1467     def testGaussWriteOnPfl1(self):
1468         fname="Pyfile49.med"
1469         fname2="Pyfile50.med"
1470         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1471         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1472         mQ8.allocateCells(1)
1473         mQ8.insertNextCell(NORM_QUAD8,range(8))
1474         mQ8.finishInsertingCells()
1475         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1476         mQ4.allocateCells(1)
1477         mQ4.insertNextCell(NORM_QUAD4,range(4))
1478         mQ4.finishInsertingCells()
1479         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1480         mT3.allocateCells(1)
1481         mT3.insertNextCell(NORM_TRI3,range(3))
1482         mT3.finishInsertingCells()
1483         
1484         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.]]
1485         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1486         ms[:]=(elt.deepCpy() for elt in ms)
1487         for m,t in zip(ms,tr):
1488             d=m.getCoords() ; d+= t
1489             pass
1490         m=MEDCouplingUMesh.MergeUMeshes(ms)
1491         m.setName("mesh")
1492         m2=m[:13] ; m2.setName(m.getName())
1493         ### 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.
1494         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1495         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1496         f.setMesh(m2)
1497         f.setTime(4.5,1,2)
1498         da=DataArrayDouble(34) ; da.iota(3.)
1499         f.setArray(da)
1500         f.setName("fieldCellOnPflWithoutPfl")
1501         fInvalid=f.deepCpy()
1502         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])
1503         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])
1504         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])
1505         f.checkCoherency()
1506         fInvalid2=fInvalid.deepCpy()
1507         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1508         #
1509         mm=MEDFileUMesh()
1510         mm.setMeshAtLevel(0,m)
1511         mm.write(fname,2)
1512         #
1513         f1ts=MEDFileField1TS.New()
1514         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1515         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1516         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1517         f1ts.setFieldProfile(f,mm,0,pfl)
1518         f1ts.write(fname,0)
1519         #
1520         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1521         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1522         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1523         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1524         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1525         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1526         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1527         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1528         #
1529         dataRead=MEDFileData.New(fname)
1530         mRead=dataRead.getMeshes()[0]
1531         f1tsRead=dataRead.getFields()[0][0]
1532         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1533         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1534         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1535         f2_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1536         f2_bis.checkCoherency()
1537         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1538         #
1539         MEDLoader.WriteField(fname2,f,True)
1540         f2_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1541         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1542         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1543         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1544         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1545         m2=m[pfl] ; m2.setName(m.getName())
1546         f.setMesh(m2)
1547         f.setTime(4.5,1,2)
1548         da=DataArrayDouble(35) ; da.iota(3.)
1549         f.setArray(da)
1550         f.setName("fieldCellOnPflWithoutPfl2")
1551         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1552         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])
1553         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])
1554         f.checkCoherency()
1555         #
1556         mm=MEDFileUMesh()
1557         mm.setMeshAtLevel(0,m)
1558         mm.write(fname,2)
1559         f1ts=MEDFileField1TS.New()
1560         f1ts.setFieldProfile(f,mm,0,pfl)
1561         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1562         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1563         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1564         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1565         f1ts.write(fname,0)
1566         dataRead=MEDFileData.New(fname)
1567         mRead=dataRead.getMeshes()[0]
1568         f1tsRead=dataRead.getFields()[0][0]
1569         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1570         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1571         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1572         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1573         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1574         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1575         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1576         #
1577         MEDLoader.WriteField(fname2,f,True)
1578         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1579         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1580         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1581         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1582         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1583         f.setMesh(m)
1584         f.setTime(4.5,1,2)
1585         da=DataArrayDouble(60) ; da.iota(3.)
1586         f.setArray(da)
1587         f.setName("fieldCellWithoutPfl")
1588         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])
1589         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])
1590         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])
1591         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])
1592         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])
1593         f.checkCoherency()
1594         mm=MEDFileUMesh()
1595         mm.setMeshAtLevel(0,m) 
1596         f1ts=MEDFileField1TS.New()
1597         f1ts.setFieldNoProfileSBT(f)
1598         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1599         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1600         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1601         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1602         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1603         mm.write(fname,2)
1604         f1ts.write(fname,0)
1605         #
1606         dataRead=MEDFileData.New(fname)
1607         mRead=dataRead.getMeshes()[0]
1608         f1tsRead=dataRead.getFields()[0][0]
1609         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1610         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1611         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1612         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1613         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1614         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1615         #
1616         MEDLoader.WriteField(fname2,f,True)
1617         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1618         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1619         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1620         pass
1621
1622     # Testing profile on nodes when the profile is identity but not on all nodes.
1623     def testMEDFieldPflOnNode1(self):
1624         fname="Pyfile51.med"
1625         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)
1626         m0=MEDCouplingUMesh("Mesh",2)
1627         m0.allocateCells(5)
1628         m0.insertNextCell(NORM_TRI3,[1,4,2])
1629         m0.insertNextCell(NORM_TRI3,[4,5,2])
1630         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1631         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1632         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1633         m0.finishInsertingCells()
1634         m0.setCoords(coo)
1635         m1=MEDCouplingUMesh(m0.getName(),1)
1636         m1.allocateCells(9)
1637         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1638         for i in xrange(9):
1639             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1640             pass
1641         m1.finishInsertingCells()
1642         m1.setCoords(coo)
1643         #
1644         m=MEDFileUMesh()
1645         m.setMeshAtLevel(0,m0)
1646         m.setMeshAtLevel(-1,m1)
1647         #
1648         dt=3 ; it=2 ; tim=4.5
1649         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1650         fieldNode0.setName("fieldNode0")
1651         fieldNode0.setTime(tim,dt,it)
1652         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1653         arr=DataArrayDouble([10,11,12,13,14])
1654         fieldNode0.setArray(arr)
1655         f0=MEDFileField1TS()
1656         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1657         m.write(fname,2) ; f0.write(fname,0)
1658         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1659         fieldNode1.setName("fieldNode1")
1660         fieldNode1.setTime(tim,dt,it)
1661         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1662         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1663         fieldNode1.setArray(arr1)
1664         f1=MEDFileField1TS()
1665         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1666         f1.write(fname,0)
1667         del m,f0,m0,m1,f1
1668         ## Reading from file
1669         m=MEDFileMesh.New(fname)
1670         m0=m.getMeshAtLevel(0)
1671         m00=m0.deepCpy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1672         fieldNode0.setMesh(m00)
1673         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1674         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1675         ff0_1.checkCoherency()
1676         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1677         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1678         ff0_2.checkCoherency()
1679         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1680         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1681         ff0_3.checkCoherency()
1682         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1683         ff0_4=MEDLoader.ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1684         ff0_4.checkCoherency()
1685         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1686         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1687         m1=m.getMeshAtLevel(-1)
1688         m10=m1.deepCpy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1689         fieldNode1.setMesh(m10)
1690         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1691         ff1_1.checkCoherency()
1692         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1693         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1694         ff1_2.checkCoherency()
1695         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1696         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1697         ff1_3.checkCoherency()
1698         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1699         ff1_4=MEDLoader.ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1700         ff1_4.checkCoherency()
1701         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1702         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]
1703         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]
1704         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]
1705         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1706         arr_r.setName(fieldNode1.getArray().getName())
1707         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1708         pfl1_r.setName(pfl1.getName())
1709         self.assertTrue(pfl1_r.isEqual(pfl1))
1710         pass
1711     
1712         # Testing profile on nodes when the profile is identity but not on all nodes.
1713     def testMEDFieldPflOnCell1(self):
1714         fname="Pyfile52.med"
1715         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)
1716         m0=MEDCouplingUMesh("Mesh",2)
1717         m0.allocateCells(5)
1718         m0.insertNextCell(NORM_TRI3,[1,4,2])
1719         m0.insertNextCell(NORM_TRI3,[4,5,2])
1720         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1721         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1722         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1723         m0.finishInsertingCells()
1724         m0.setCoords(coo)
1725         m1=MEDCouplingUMesh(m0.getName(),1)
1726         m1.allocateCells(9)
1727         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1728         for i in xrange(9):
1729             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1730             pass
1731         m1.finishInsertingCells()
1732         m1.setCoords(coo)
1733         #
1734         m=MEDFileUMesh()
1735         m.setMeshAtLevel(0,m0)
1736         m.setMeshAtLevel(-1,m1)
1737         #
1738         dt=3 ; it=2 ; tim=4.5
1739         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1740         fieldCell0.setName("fieldCell0")
1741         fieldCell0.setTime(tim,dt,it)
1742         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1743         arr=DataArrayDouble([10,11,12])
1744         fieldCell0.setArray(arr)
1745         f0=MEDFileField1TS()
1746         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1747         m.write(fname,2) ; f0.write(fname,0)
1748         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1749         fieldCell1.setName("fieldCell1")
1750         fieldCell1.setTime(tim,dt,it)
1751         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1752         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1753         fieldCell1.setArray(arr1)
1754         f1=MEDFileField1TS()
1755         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1756         f1.write(fname,0)
1757         del m,f0,m0,m1,f1
1758         ## Reading from file
1759         m=MEDFileMesh.New(fname)
1760         m0=m.getMeshAtLevel(0)
1761         m00=m0.deepCpy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1762         fieldCell0.setMesh(m00)
1763         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1764         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1765         ff0_1.checkCoherency()
1766         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1767         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1768         ff0_2.checkCoherency()
1769         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1770         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1771         ff0_3.checkCoherency()
1772         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1773         ff0_4=MEDLoader.ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1774         ff0_4.checkCoherency()
1775         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1776         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1777         m1=m.getMeshAtLevel(-1)
1778         m10=m1.deepCpy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1779         fieldCell1.setMesh(m10)
1780         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1781         ff1_1.checkCoherency()
1782         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1783         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1784         ff1_2.checkCoherency()
1785         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1786         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1787         ff1_3.checkCoherency()
1788         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1789         ff1_4=MEDLoader.ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1790         ff1_4.checkCoherency()
1791         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1792         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]
1793         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]
1794         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]
1795         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1796         arr_r.setName(fieldCell1.getArray().getName())
1797         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1798         pfl1_r.setName(pfl1.getName())
1799         self.assertTrue(pfl1_r.isEqual(pfl1))
1800         pass
1801
1802     def testMEDFileUMeshZipCoords1(self):
1803         m=MEDFileUMesh()
1804         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1805         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])
1806         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1807         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1808         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1809         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1810         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1811         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1812         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1813         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1814         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1815         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1816         o2n=m.zipCoords()
1817         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1818         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1819         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1820         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1821         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1822         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1823         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1824         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1825         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1826         pass
1827
1828     def testMEDUMeshAddNodeGroup1(self):
1829         fname="Pyfile53.med"
1830         m=MEDFileUMesh()
1831         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1832         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])
1833         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1834         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1835         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1836         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1837         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1838         #
1839         mm=m.deepCpy()
1840         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
1841         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
1842         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1843         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1844         mm.setFamilyId("MyFam",2)
1845         mm.setFamilyId("MyOtherFam",3)
1846         mm.setFamilyId("MyOther-1",-1)
1847         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1848         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1849         #
1850         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1851         mm.addNodeGroup(daTest)
1852         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1853         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1854         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1855             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1856             pass
1857         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1858         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1859         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1860         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1861         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1862             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1863             pass
1864         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1865         da=DataArrayInt([3,12]) ; da.setName("grp0")
1866         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1867         da.setValues([1])
1868         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1869         mm.write(fname,2)
1870         mm=MEDFileMesh.New(fname)
1871         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1872         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1873         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1874             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1875             pass
1876         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1877         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1878         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1879         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1880         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1881             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1882             pass
1883         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1884         da=DataArrayInt([3,12]) ; da.setName("grp0")
1885         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1886         da.setValues([1])
1887         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1888         pass
1889
1890     def testMEDUMeshAddGroup1(self):
1891         fname="Pyfile54.med"
1892         m=MEDFileUMesh()
1893         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1894         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
1895         for i in xrange(7):
1896             m0.insertNextCell(NORM_TRI3,[1,2,1])
1897             pass
1898         for i in xrange(4):
1899             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
1900             pass
1901         for i in xrange(2):
1902             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
1903             pass
1904         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1905         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1906         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1907         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1908         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1909         #
1910         mm=m.deepCpy()
1911         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
1912         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
1913         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1914         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1915         mm.setFamilyId("MyFam",2)
1916         mm.setFamilyId("MyOtherFam",3)
1917         mm.setFamilyId("MyOther-1",-1)
1918         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1919         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1920         #
1921         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1922         mm.addGroup(0,daTest)
1923         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1924         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1925         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1926             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1927             pass
1928         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1929         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1930         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1931         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1932         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1933             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1934             pass
1935         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
1936         da=DataArrayInt([3,12]) ; da.setName("grp0")
1937         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1938         da.setValues([1])
1939         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1940         mm.write(fname,2)
1941         mm=MEDFileMesh.New(fname)
1942         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1943         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
1944         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1945             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1946             pass
1947         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
1948         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1949         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1950         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1951         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
1952             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1953             pass
1954         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
1955         da=DataArrayInt([3,12]) ; da.setName("grp0")
1956         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1957         da.setValues([1])
1958         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1959         pass
1960
1961     def testHeapMem1(self):
1962         import platform
1963         ver=platform.python_version_tuple()
1964         if int(ver[0])!=2 or int(ver[1])<7:
1965             return
1966         m=MEDCouplingCMesh()
1967         arr=DataArrayDouble(10,1) ; arr.iota(0)
1968         m.setCoords(arr,arr)
1969         m=m.buildUnstructured()
1970         m.setName("mm")
1971         f=m.getMeasureField(ON_CELLS)
1972         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100))
1973         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100))
1974         #
1975         mm=MEDFileUMesh()
1976         mm.setMeshAtLevel(0,m)
1977         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100))
1978         ff=MEDFileField1TS()
1979         ff.setFieldNoProfileSBT(f)
1980         self.assertIn(ff.getHeapMemorySize(),xrange(711-20,711+20))
1981         #
1982         fff=MEDFileFieldMultiTS()
1983         fff.appendFieldNoProfileSBT(f)
1984         self.assertIn(fff.getHeapMemorySize(),xrange(743-30,743+30))
1985         f.setTime(1.,0,-1)
1986         fff.appendFieldNoProfileSBT(f)
1987         self.assertIn(fff.getHeapMemorySize(),xrange(1462-50,1462+50))
1988         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(711-20,711+20))
1989         f2=f[:50]
1990         f2.setTime(2.,1,-1)
1991         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
1992         fff.appendFieldProfile(f2,mm,0,pfl)
1993         self.assertIn(fff.getHeapMemorySize(),xrange(2178-100,2178+100))
1994         self.assertIn(fff.getProfile("pfl_NORM_QUAD4").getHeapMemorySize(),xrange(215-10,215+10))
1995         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(700-30,700+30))
1996         pass
1997
1998     def testCurveLinearMesh1(self):
1999         fname="Pyfile55.med"
2000         mesh=MEDCouplingCurveLinearMesh();
2001         mesh.setTime(2.3,4,5);
2002         mesh.setTimeUnit("us");
2003         mesh.setName("Example of Cuve linear mesh");
2004         mesh.setDescription("buildCLMesh");
2005         a1=DataArrayDouble(3*20,1);
2006         a1.iota(7.) ; a1.rearrange(3);
2007         mesh.setCoords(a1);
2008         mesh.setNodeGridStructure([4,5]);
2009         mesh.checkCoherency();
2010         #
2011         m=MEDFileCurveLinearMesh()
2012         m.setMesh(mesh)
2013         d=DataArrayInt(20) ; d.iota(4)
2014         m.setFamilyFieldArr(1,d)
2015         d3=DataArrayInt(20) ; d3.iota(400)
2016         m.setRenumFieldArr(1,d3)
2017         d2=DataArrayInt(12) ; d2.iota(40)
2018         m.setFamilyFieldArr(0,d2)
2019         d4=DataArrayInt(21) ; d4.iota(4000)
2020         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2021         d4.popBackSilent()
2022         m.setRenumFieldArr(1,d4)
2023         m.write(fname,2)
2024         #
2025         m1=MEDFileCurveLinearMesh(fname)
2026         mm=m1.getMesh()
2027         self.assertTrue(mm.isEqual(mesh,1e-12))
2028         #
2029         m1=MEDFileMesh.New(fname)
2030         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2031         self.assertTrue(isinstance(m1.getUnivName(),str))
2032         self.assertTrue(len(m1.getUnivName())!=0)
2033         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2034         pass
2035
2036     def testParameters1(self):
2037         fname="Pyfile56.med"
2038         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2039         mm=MEDFileCMesh() ; mm.setMesh(m)
2040         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2041         data=MEDFileData()
2042         p=MEDFileParameters()
2043         data.setParams(p) ; data.setMeshes(ms)
2044         pts=MEDFileParameterMultiTS()
2045         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2046         pts.appendValue(1,2,3.4,567.89)
2047         pts.appendValue(2,3,5.6,999.123)
2048         pts2=pts.deepCpy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2049         p.pushParam(pts) ; p.pushParam(pts2)
2050         data.write(fname,2)
2051         p2=MEDFileParameters(fname)
2052         self.assertTrue(p.isEqual(p2,1e-14)[0])
2053         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2054         p3=p.deepCpy()
2055         pts4=pts2.deepCpy()
2056         pts3=pts2.deepCpy()
2057         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2058         pts2.eraseTimeStepIds([0])
2059         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2060         del pts3[[3.4]]
2061         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2062         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2063         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2064         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2065         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2066         p=p3
2067         self.assertTrue(p.isEqual(p2,1e-14)[0])
2068         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2069         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2070         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2071         self.assertEqual(p.getParamsNames(),('A','B'))
2072         ptsr=MEDFileParameterMultiTS(fname,"B")
2073         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2074         ptsr=MEDFileParameterMultiTS(fname)
2075         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2076         p1tsr=MEDFileParameterDouble1TS(fname)
2077         self.assertEqual(p1tsr.getName(),"A")
2078         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2079         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2080         self.assertEqual(p1tsr.getName(),"B")
2081         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2082         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2083         self.assertEqual(p1tsr.getName(),"B")
2084         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2085         data2=MEDFileData(fname)
2086         self.assertEqual(2,data2.getNumberOfParams())
2087         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2088         pass
2089
2090     def testNamesOnCellAndNodesInMeshes1(self):
2091         fname="Pyfile58.med"
2092         fname2="Pyfile59.med"
2093         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2094         m1=m.buildDescendingConnectivity()[0]
2095         m1.sortCellsInMEDFileFrmt()
2096         #
2097         mm=MEDFileUMesh()
2098         mm.setMeshAtLevel(0,m)
2099         mm.setMeshAtLevel(-1,m1)
2100         namesCellL0=DataArrayAsciiChar(6,16)
2101         namesCellL0[:]=["CellL0#%.3d      "%(i) for i in xrange(6)]
2102         mm.setNameFieldAtLevel(0,namesCellL0)
2103         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.substr(2)])
2104         namesCellL1[:]=["CellLM1#%.3d     "%(i) for i in xrange(16)]
2105         mm.setNameFieldAtLevel(-1,namesCellL1)
2106         namesNodes=namesCellL1.substr(4,16)
2107         namesNodes[:]=["Node#%.3d        "%(i) for i in xrange(12)]
2108         mm.setNameFieldAtLevel(1,namesNodes)
2109         mm.write(fname,2)
2110         #
2111         mmr=MEDFileMesh.New(fname)
2112         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2113         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     "%(i) for i in xrange(16)])))
2114         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(12)])))
2115         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2116         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2117         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2118         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2119         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2120         mmCpy=mm.deepCpy()
2121         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2122         # remove names on nodes
2123         mmCpy.setNameFieldAtLevel(1,None)
2124         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2125         mm.setNameFieldAtLevel(1,None)
2126         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2127         mm.setNameFieldAtLevel(-1,None)
2128         mm.write(fname,2)
2129         mmr=MEDFileMesh.New(fname)
2130         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2131         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      "%(i) for i in xrange(6)])))
2132         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2133         #
2134         c=MEDCouplingCMesh()
2135         arr=DataArrayDouble([0.,1.1,2.3])
2136         c.setCoords(arr,arr)
2137         c.setName("cmesh")
2138         cc=MEDFileCMesh()
2139         cc.setMesh(c)
2140         cc.setNameFieldAtLevel(0,DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)]))
2141         cc.setNameFieldAtLevel(1,DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)]))
2142         cc.write(fname2,2)
2143         ccr=MEDFileMesh.New(fname2)
2144         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        "%(i) for i in xrange(4)])))
2145         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        "%(i) for i in xrange(9)])))
2146         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2147         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2148         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2149         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2150         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2151         ccCpy=cc.deepCpy()
2152         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2153         pass
2154
2155     def testToExportInExamples1(self):
2156         m=MEDCouplingCMesh()
2157         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2158         m.setCoords(arr,arr)
2159         m=m.buildUnstructured() ; m.setName("mesh")
2160         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2161         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2162         m2=m.computeSkin()
2163         mm=MEDFileUMesh()
2164         mm.setMeshAtLevel(0,m)
2165         mm.setMeshAtLevel(-1,m2)
2166         mm.setGroupsAtLevel(0,[grp1,grp2])
2167         mm.write("example.med",2)
2168         #
2169         m0=mm.getMeshAtLevel(0)
2170         m1=mm.getMeshAtLevel(-1)
2171         grp1=mm.getGroupArr(0,"grp1")
2172         grp2=mm.getGroupArr(0,"grp2")
2173         grps=[grp1,grp2]
2174         whichGrp=DataArrayInt(m0.getNumberOfCells())
2175         whichGrp.fillWithValue(-1)
2176         for grpId,grp in enumerate(grps):
2177             whichGrp[grp]=grpId
2178             pass
2179         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2180         e,f=a.areCellsIncludedIn(m1,2)
2181         self.assertTrue(e)
2182         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2183         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2184         c2.transformWithIndArr(whichGrp)
2185         splitOfM1=len(grps)*[None]
2186         for grpId,grp in enumerate(grps):
2187             tmp=c2.getIdsEqual(grpId)
2188             splitOfM1[grpId]=tmp
2189             pass
2190         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2191         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2192         pass
2193
2194     def testBugCorrection1(self):
2195         fs=MEDFileFields()
2196         fs.resize(3)
2197         self.assertEqual(fs[0],None)
2198         self.assertEqual(3,len(fs))
2199         pass
2200
2201     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2202         f1Name="Pyfile60.med"
2203         f2Name="Pyfile61.med"
2204         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2205         d1.write(f1Name,2)
2206         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2207         d2.write(f2Name,2)
2208         # reading and compare
2209         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2210         for mn in d1.getMeshes().getMeshesNames():
2211             m1=d1.getMeshes()[mn]
2212             m2=d2.getMeshes()[mn]
2213             for lev in m1.getNonEmptyLevels():
2214                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2215                 for grpName in grpsNames:
2216                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2217                     pass
2218                 pass
2219             pass
2220         for fieldn in d1.getFields().getFieldsNames():
2221             f1=d1.getFields()[fieldn]
2222             f2=d2.getFields()[fieldn]
2223             for it,order,tim in f1.getTimeSteps():
2224                 f1t=f1[it,order]
2225                 f2t=f2[it,order]
2226                 if len(f1t.getPflsReallyUsed())!=0:
2227                     # profile case
2228                     for lev in f1t.getNonEmptyLevels()[1]:
2229                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2230                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2231                         self.assertTrue(pfl1.isEqual(pfl2))
2232                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2233                         pass
2234                     pass
2235                 else:
2236                     # no profile case
2237                     for lev in f1t.getNonEmptyLevels()[1]:
2238                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2239                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2240                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2241                         pass
2242                     pass
2243                 pass
2244             pass
2245         pass
2246
2247     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2248         m=MEDCouplingCMesh()
2249         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2250         m.setCoords(arr,arr,arr)
2251         m=m.buildUnstructured()
2252         m2=m.buildDescendingConnectivity()[0]
2253         m.setName("mesh")
2254         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2255         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2256         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2257         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2258         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2259         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2260         mm=MEDFileUMesh()
2261         mm.setMeshAtLevel(0,m)
2262         mm.setGroupsAtLevel(0,[g1,g2])
2263         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2264         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2265         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2266         mm.normalizeFamIdsMEDFile()
2267         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2268         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2269         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2270         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2271         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2272         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2273         for g in mm.getGroupsOnSpecifiedLev(0):
2274             for f in mm.getFamiliesIdsOnGroup(g):
2275                 self.assertTrue(f<0)
2276                 pass
2277             pass
2278         #
2279         mm=MEDFileUMesh()
2280         mm.setMeshAtLevel(0,m)
2281         mm.setMeshAtLevel(-1,m2)
2282         mm.setGroupsAtLevel(0,[g1,g2])
2283         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2284         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2285         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2286         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2287         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2288         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2289         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2290         mm.normalizeFamIdsMEDFile()
2291         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2292         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2293         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2294         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2295         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2296         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2297         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2298         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2299         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2300         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2301         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2302         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2303         for lev in [0,-1]:
2304             for g in mm.getGroupsOnSpecifiedLev(lev):
2305                 for f in mm.getFamiliesIdsOnGroup(g):
2306                     self.assertTrue(f<0)
2307                     pass
2308                 pass
2309             pass
2310          #
2311         mm=MEDFileUMesh()
2312         mm.setMeshAtLevel(0,m)
2313         mm.setMeshAtLevel(-1,m2)
2314         mm.setGroupsAtLevel(0,[g1,g2])
2315         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2316         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2317         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2318         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2319         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2320         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2321         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2322         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2323         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2324         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2325         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2326         mm.normalizeFamIdsMEDFile()
2327         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2328         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2329         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2330         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2331         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2332         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2333         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2334         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2335         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2336         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2337         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2338         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2339         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2340         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2341         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2342         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2343         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2344         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2345         for lev in [0,-1]:
2346             for g in mm.getGroupsOnSpecifiedLev(lev):
2347                 for f in mm.getFamiliesIdsOnGroup(g):
2348                     self.assertTrue(f<0)
2349                     pass
2350                 pass
2351             pass
2352         for g in mm.getGroupsOnSpecifiedLev(1):
2353             for f in mm.getFamiliesIdsOnGroup(g):
2354                 self.assertTrue(f>0)
2355                 pass
2356             pass
2357         pass
2358     
2359     def testNonRegressionMantis22212ChangeGrpName(self):
2360         fileName="Pyfile62.med"
2361         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2362         m=MEDFileUMesh.New()
2363         m.setCoords(m2.getCoords())
2364         m.setMeshAtLevel(0,m2)
2365         m.setMeshAtLevel(-1,m1)
2366         m.setMeshAtLevel(-2,m0)
2367         m.setFamilyFieldArr(0,f2)
2368         m.setFamilyFieldArr(-1,f1)
2369         m.setFamilyFieldArr(-2,f0)
2370         m.setFamilyFieldArr(1,p)
2371         nbOfFams=len(fns)
2372         for i in xrange(nbOfFams):
2373             m.addFamily(fns[i],fids[i])
2374             pass
2375         nbOfGrps=len(grpns)
2376         for i in xrange(nbOfGrps):
2377             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2378             pass
2379         m.setName(m2.getName())
2380         m.setDescription(m2.getDescription())
2381         m.write(fileName,2)
2382         #
2383         mm0=MEDFileMesh.New(fileName)
2384         mm1=MEDFileMesh.New(fileName)
2385         groupNamesIni=MEDLoader.GetMeshGroupsNames(fileName,"ma")
2386         for name in groupNamesIni:
2387             mm1.changeGroupName(name,name+'N')
2388             pass
2389         mm1.write(fileName,2)
2390         del mm1
2391         #
2392         mm2=MEDFileMesh.New(fileName)
2393         for name in groupNamesIni:
2394             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2395                 arr0=mm0.getGroupArr(lev,name)
2396                 arr2=mm2.getGroupArr(lev,name+'N')
2397                 arr0.setName(name+'N')
2398                 self.assertTrue(arr0.isEqual(arr2))
2399                 pass
2400             pass
2401         pass
2402
2403     def testInt32InMEDFileFieldStar1(self):
2404         fname="Pyfile63.med"
2405         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2406         arr=f1.getArray().convertToIntArr()
2407         f1.setArray(None)
2408         m1=f1.getMesh()
2409         mm1=MEDFileUMesh.New()
2410         mm1.setCoords(m1.getCoords())
2411         mm1.setMeshAtLevel(0,m1)
2412         mm1.setName(m1.getName())
2413         mm1.write(fname,2)
2414         ff1=MEDFileIntField1TS()
2415         ff1.setFieldNoProfileSBT(f1,arr)
2416         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2417         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2418         self.assertTrue(b.isEqual(arr))
2419         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2420         ff1.write(fname,0)
2421         ff2=MEDFileAnyTypeField1TS.New(fname)
2422         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2423         self.assertEqual(ff2.getTime(),[0,1,2.0])
2424         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2425         a,b=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2426         self.assertEqual(b.getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2427         self.assertTrue(b.isEqual(arr))
2428         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2429         ff2.setTime(1,2,3.)
2430         c=ff2.getUndergroundDataArray() ; c*=2
2431         ff2.write(fname,0) # 2 time steps in 
2432         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2433         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2434         self.assertEqual(len(ffs1),2)
2435         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2436         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2437         self.assertTrue(b.isEqual(arr))
2438         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2439         a,b=ffs1[2.].getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2440         self.assertTrue(b.isEqual(arr))
2441         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2442         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2443         a,b=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2444         self.assertTrue(b.isEqual(2*arr))
2445         f1.setTime(3.,1,2)
2446         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2447         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2448         for it in ffs1:
2449             a,b=it.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2450             bc+=b
2451             pass
2452         self.assertTrue(bc.isEqual(3*arr))
2453         nf1=MEDCouplingFieldDouble(ON_NODES)
2454         nf1.setTime(9.,10,-1)
2455         nf1.setMesh(f1.getMesh())
2456         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=range(12) ; narr[:,1]=2*narr[:,0]
2457         nf1.setName("VectorFieldOnNodes")
2458         nff1=MEDFileIntField1TS.New()
2459         nff1.setFieldNoProfileSBT(nf1,narr)
2460         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2461         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2462         nff1.write(fname,0)
2463         #
2464         nf2=MEDCouplingFieldDouble(ON_NODES)
2465         nf2.setTime(19.,20,-11)
2466         nf2.setMesh(f1.getMesh())
2467         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=range(8) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2468         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName())
2469         nff2=MEDFileIntField1TS.New()
2470         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2471         nff2.setFieldProfile(nf2,narr2,mm1,0,npfl)
2472         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2473         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2474         self.assertTrue(b.isEqual(npfl))
2475         self.assertTrue(a.isEqual(narr2))
2476         nff2.write(fname,0)
2477         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2478         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2479         self.assertTrue(b.isEqual(npfl))
2480         self.assertTrue(a.isEqual(narr2))
2481         #
2482         nf3=MEDCouplingFieldDouble(ON_NODES)
2483         nf3.setName("VectorFieldOnNodesDouble")
2484         nf3.setTime(29.,30,-21)
2485         nf3.setMesh(f1.getMesh())
2486         nf3.setArray(f1.getMesh().getCoords())
2487         nff3=MEDFileField1TS.New()
2488         nff3.setFieldNoProfileSBT(nf3)
2489         nff3.write(fname,0)
2490         fs=MEDFileFields(fname)
2491         self.assertEqual(len(fs),4)
2492         ffs=[it for it in fs]
2493         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2494         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2495         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2496         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2497         #
2498         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(arr))
2499         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*arr))
2500         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2501         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2502         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2503         #
2504         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2505         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2506         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2507         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2508         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2509         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2510         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2511         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2512         #
2513         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2514         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2515         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2516         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2517         pass
2518
2519     def testMEDFileFields1(self):
2520         fname="Pyfile64.med"
2521         f1=MEDCouplingFieldDouble(ON_NODES)
2522         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2523         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2524         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2525         f1.setMesh(m)
2526         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=range(12) ; arr[:,1]=2*arr[:,0]
2527         f1.setArray(arr)
2528         f1.setName("Field1")
2529         ff1=MEDFileField1TS.New()
2530         ff1.setFieldNoProfileSBT(f1)
2531         self.assertEqual(ff1.getDtUnit(),"us")
2532         ff1.write(fname,0)
2533         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2534         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2535         #
2536         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2537         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2538         ff1s.setName("Field2")
2539         ff1s.write(fname,0)
2540         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2541         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2542         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2543         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2544         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2545         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2546         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2547         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2548         pass
2549
2550     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2551     def testMEDFileFields2(self):
2552         fname="Pyfile65.med"
2553         # to check that all is initialize 
2554         MEDFileField1TS().__str__()
2555         MEDFileFieldMultiTS().__str__()
2556         # building a mesh containing 4 tri3 + 5 quad4
2557         tri=MEDCouplingUMesh("tri",2)
2558         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2559         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2560         tris=[tri.deepCpy() for i in xrange(4)]
2561         for i,elt in enumerate(tris): elt.translate([i,0])
2562         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2563         quad=MEDCouplingUMesh("quad",2)
2564         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2565         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2566         quads=[quad.deepCpy() for i in xrange(5)]
2567         for i,elt in enumerate(quads): elt.translate([5+i,0])
2568         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2569         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2570         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2571         #
2572         fmts0_0=MEDFileFieldMultiTS()
2573         fmts0_1=MEDFileFieldMultiTS()
2574         # time steps
2575         for i in xrange(10):
2576             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2577             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2578             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2579             f.setTime(float(i+1)+0.1,i+1,-i-1)
2580             fmts0_0.appendFieldNoProfileSBT(f)
2581             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2582             self.assertEqual(fmts0_1.getName(),name1)
2583             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2584             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2585             if i>1:
2586                 # components names have been modified to generate errors
2587                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2588                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2589                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2590                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2591                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2592                 pass
2593             # add a mismatch of nb of compos
2594             pass
2595         fmts0_2=fmts0_0.deepCpy()
2596         fmts0_3=fmts0_0.deepCpy()
2597         fmts0_4=fmts0_0.deepCpy()
2598         fmts0_5=fmts0_0.shallowCpy()
2599         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)
2600         del fmts0_2[::2]
2601         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2602         del fmts0_3[[1.1,(6,-6),9]]
2603         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2604         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2605         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2606         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2607         fmts0_7=fmts0_4[::-3]
2608         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2609         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2610         #
2611         fs0=MEDFileFields()
2612         fs0.pushField(fmts0_0)
2613         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2614         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2615         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2616         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2617         fs0.write(fname,2)
2618         fs0=MEDFileFields(fname)
2619         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2620         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2621         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2622         del fs1[["2ndField",3]]
2623         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2624         fs2=fs0[[0,"4thField"]]
2625         self.assertTrue(isinstance(fs2,MEDFileFields))
2626         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2627         #
2628         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2629         pass
2630
2631     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2632     def testMEDFileFields3(self):
2633         fname="Pyfile66.med"
2634         # building a mesh containing 4 tri3 + 5 quad4
2635         tri=MEDCouplingUMesh("tri",2)
2636         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2637         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2638         tris=[tri.deepCpy() for i in xrange(4)]
2639         for i,elt in enumerate(tris): elt.translate([i,0])
2640         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2641         quad=MEDCouplingUMesh("quad",2)
2642         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2643         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2644         quads=[quad.deepCpy() for i in xrange(5)]
2645         for i,elt in enumerate(quads): elt.translate([5+i,0])
2646         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2647         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2648         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2649         #
2650         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2651         #
2652         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2653         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2654         fmts0_0=MEDFileFieldMultiTS()
2655         fmts0_1=MEDFileFieldMultiTS()
2656         # time steps
2657         for i in xrange(10):
2658             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2659             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2660             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2661             f.setTime(float(i+1)+0.1,i+1,-i-1)
2662             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2663             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2664             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2665             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2666             pass
2667         #
2668         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2669         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2670         fmts0_0.zipPflsNames()
2671         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2672         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2673         fmts0_2=fmts0_0.deepCpy()
2674         fmts0_3=fmts0_0.deepCpy()
2675         fmts0_4=fmts0_0.deepCpy()
2676         fs0=MEDFileFields()
2677         fs0.pushField(fmts0_0)
2678         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2679         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2680         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2681         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2682         #
2683         fmts0_5=MEDFileFieldMultiTS()
2684         for i in xrange(7):
2685             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2686             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2687             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2688             f.setTime(float(i+1)+0.1,i+1,-i-1)
2689             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2690             pass
2691         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2692         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2693         fs0.checkGlobsCoherency()
2694         fs0.write(fname,0)
2695         pass
2696     
2697     def testSplitComponents1(self):
2698         fname="Pyfile67.med"
2699         # building a mesh containing 4 tri3 + 5 quad4
2700         tri=MEDCouplingUMesh("tri",2)
2701         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2702         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2703         tris=[tri.deepCpy() for i in xrange(4)]
2704         for i,elt in enumerate(tris): elt.translate([i,0])
2705         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2706         quad=MEDCouplingUMesh("quad",2)
2707         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2708         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2709         quads=[quad.deepCpy() for i in xrange(5)]
2710         for i,elt in enumerate(quads): elt.translate([5+i,0])
2711         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2712         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2713         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2714         #
2715         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2716         #
2717         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2718         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2719         fs=MEDFileFields()
2720         fmts0_1=MEDFileFieldMultiTS()
2721         # time steps
2722         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2723         for i in xrange(10):
2724             name1="1stField"
2725             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2726             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2727             f.setTime(float(i+1)+0.1,i+1,-i-1)
2728             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2729             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2730             pass
2731         fs.pushField(fmts0_1)
2732         self.assertEqual(1,len(fs))
2733         l=fmts0_1.splitComponents()
2734         self.assertEqual(3,len(l))
2735         for elt in l: self.assertEqual(10,len(elt))
2736         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2737         for elt in l:
2738             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2739             pass
2740         fs.pushFields(l)
2741         self.assertEqual(4,len(fs))
2742         for elt in fs: self.assertEqual(10,len(elt))
2743         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2744         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2745         #
2746         fs.write(fname,0) ; del fs
2747         #
2748         fs1=MEDFileFields(fname)
2749         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2750         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2751         self.assertEqual(4,len(fs1))
2752         for i in xrange(10):
2753             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2754                 f1ts=fs1[fieldName][i]
2755                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2756                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2757                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2758                 pass
2759             f1ts=fs1["1stField"][i]
2760             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2761             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2762             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2763             pass
2764         pass
2765     pass
2766
2767 unittest.main()