Salome HOME
3f66653fdcaa24a09d82dfc436b48dd8ee5035ff
[modules/med.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2012  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.assertEqual((0,-1),medmesh.getNonEmptyLevels())
33         m1_0=medmesh.getLevel0Mesh(True)
34         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
35         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
36         m2_0=medmesh.getLevelM1Mesh(True)
37         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
38         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
39         pass
40     def testMEDMesh2(self):
41         fileName="Pyfile10.med"
42         mname="3DToto"
43         outFileName="MEDFileMesh1.med"
44         medmesh=MEDFileUMesh.New(fileName,mname)
45         self.assertEqual((0,),medmesh.getNonEmptyLevels())
46         m1_0=medmesh.getLevel0Mesh(True)
47         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
48         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
49         g1_0=medmesh.getGroup(0,"mesh2",True)
50         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
51         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
52         g1_0=medmesh.getGroup(0,"mesh3",True)
53         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
54         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
55         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
56         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
57         g1_1.setName(g1_0.getName())
58         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
59         g1_0=medmesh.getFamily(0,"Family_2",True)
60         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
61         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
62         g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
63         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
64         g1_1.setName(g1_0.getName())
65         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
66         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
67         medmesh.write(outFileName,2);
68         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
69         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
70         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
71         self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
72         famn=medmesh.getFamilyNameGivenId(0)
73         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
74         #without renum
75         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
76         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
77         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
78         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
79         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
80         pass
81
82     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
83     def testMEDMesh3(self):
84         outFileName="MEDFileMesh3.med"
85         c=DataArrayDouble.New()
86         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 ];
87         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
88         c.setValues(coords,9,2)
89         m=MEDCouplingUMesh.New();
90         m.setMeshDimension(2);
91         m.allocateCells(5);
92         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
93         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
94         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
95         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
96         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
97         m.finishInsertingCells();
98         m.setCoords(c)
99         m.checkCoherency()
100         m1=MEDCouplingUMesh.New();
101         m1.setMeshDimension(1);
102         m1.allocateCells(3);
103         m1.insertNextCell(NORM_SEG2,2,[1,4])
104         m1.insertNextCell(NORM_SEG2,2,[3,6])
105         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
106         m1.finishInsertingCells();
107         m1.setCoords(c)
108         m1.checkCoherency()
109         m2=MEDCouplingUMesh.New();
110         m2.setMeshDimension(0);
111         m2.allocateCells(4);
112         m2.insertNextCell(NORM_POINT1,1,[1])
113         m2.insertNextCell(NORM_POINT1,1,[3])
114         m2.insertNextCell(NORM_POINT1,1,[2])
115         m2.insertNextCell(NORM_POINT1,1,[6])
116         m2.finishInsertingCells();
117         m2.setCoords(c)
118         m2.checkCoherency()
119         #
120         mm=MEDFileUMesh.New()
121         mm.setName("MyFirstMEDCouplingMEDmesh")
122         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
123         mm.setCoords(c)
124         mm.setMeshAtLevel(-1,m1);
125         mm.setMeshAtLevel(0,m);
126         mm.setMeshAtLevel(-2,m2);
127         # playing with groups
128         g1_2=DataArrayInt.New()
129         g1_2.setValues([1,3],2,1)
130         g1_2.setName("G1")
131         g2_2=DataArrayInt.New()
132         g2_2.setValues([1,2,3],3,1)
133         g2_2.setName("G2")
134         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
135         g1_1=DataArrayInt.New()
136         g1_1.setValues([0,1,2],3,1)
137         g1_1.setName("G1")
138         g2_1=DataArrayInt.New()
139         g2_1.setValues([0,2],2,1)
140         g2_1.setName("G2")
141         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
142         g1_N=DataArrayInt.New()
143         g1_N.setValues(range(8),8,1)
144         g1_N.setName("G1")
145         g2_N=DataArrayInt.New()
146         g2_N.setValues(range(9),9,1)
147         g2_N.setName("G2")
148         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
149         mm.createGroupOnAll(0,"GrpOnAllCell")
150         # check content of mm
151         t=mm.getGroupArr(0,"G1",False)
152         self.assertTrue(g1_2.isEqual(t));
153         t=mm.getGroupArr(0,"G2",False)
154         self.assertTrue(g2_2.isEqual(t));
155         t=mm.getGroupArr(-1,"G1",False)
156         self.assertTrue(g1_1.isEqual(t));
157         t=mm.getGroupArr(-1,"G2",False)
158         self.assertTrue(g2_1.isEqual(t));
159         t=mm.getGroupArr(1,"G1",False)
160         self.assertTrue(g1_N.isEqual(t));
161         t=mm.getGroupArr(1,"G2",False)
162         self.assertTrue(g2_N.isEqual(t));
163         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
164         t=mm.getGroupArr(0,"GrpOnAllCell")
165         self.assertTrue(t.getValues()==range(5))
166         #
167         mmCpy=mm.deepCpy()
168         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
169         mmCpy.write(outFileName,2);
170         #
171         mm=MEDFileMesh.New(outFileName)
172         mbis=mm.getMeshAtLevel(0)
173         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
174         self.assertTrue(m.isEqual(mbis,1e-12));
175         #
176         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
177         pass
178
179     # this test is the testMEDMesh3 except that permutation is dealed here
180     def testMEDMesh4(self):
181         outFileName="MEDFileMesh4.med"
182         c=DataArrayDouble.New()
183         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 ];
184         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
185         c.setValues(coords,9,2)
186         c.setInfoOnComponent(0,"abcdef [km]")
187         c.setInfoOnComponent(1,"ghij [MW]")
188         m=MEDCouplingUMesh.New();
189         m.setMeshDimension(2);
190         m.allocateCells(5);
191         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
192         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
193         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
194         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
195         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
196         m.finishInsertingCells();
197         m.setCoords(c)
198         m.checkCoherency()
199         m1=MEDCouplingUMesh.New();
200         m1.setMeshDimension(1);
201         m1.allocateCells(3);
202         m1.insertNextCell(NORM_SEG2,2,[1,4])
203         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
204         m1.insertNextCell(NORM_SEG2,2,[3,6])
205         m1.finishInsertingCells();
206         m1.setCoords(c)
207         m1.checkCoherency()
208         m2=MEDCouplingUMesh.New();
209         m2.setMeshDimension(0);
210         m2.allocateCells(4);
211         m2.insertNextCell(NORM_POINT1,1,[1])
212         m2.insertNextCell(NORM_POINT1,1,[3])
213         m2.insertNextCell(NORM_POINT1,1,[2])
214         m2.insertNextCell(NORM_POINT1,1,[6])
215         m2.finishInsertingCells();
216         m2.setCoords(c)
217         m2.checkCoherency()
218         #
219         mm=MEDFileUMesh.New()
220         mm.setName("My2ndMEDCouplingMEDmesh")
221         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
222         mm.setCoords(c)
223         renumNode=DataArrayInt.New()
224         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
225         mm.setRenumFieldArr(1,renumNode)
226         mm.setMeshAtLevel(-1,m1,True);
227         mm.setMeshAtLevel(0,m,True);
228         mm.setMeshAtLevel(-2,m2,True);
229         mm.removeMeshAtLevel(-2)
230         mm.setMeshAtLevel(-2,m2,True);
231         # playing with groups
232         g1_2=DataArrayInt.New()
233         g1_2.setValues([2,3],2,1)
234         g1_2.setName("G1")
235         g2_2=DataArrayInt.New()
236         g2_2.setValues([2,0,3],3,1)
237         g2_2.setName("G2")
238         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
239         g1_1=DataArrayInt.New()
240         g1_1.setValues([0,2,1],3,1)
241         g1_1.setName("G1")
242         g2_1=DataArrayInt.New()
243         g2_1.setValues([0,2],2,1)
244         g2_1.setName("G2")
245         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
246         g1_N=DataArrayInt.New()
247         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
248         g1_N.setName("G1")
249         g2_N=DataArrayInt.New()
250         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
251         g2_N.setName("G2")
252         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
253         # check content of mm
254         t=mm.getGroupArr(0,"G1",True)
255         self.assertTrue(g1_2.isEqual(t));
256         t=mm.getGroupArr(0,"G2",True)
257         self.assertTrue(g2_2.isEqual(t));
258         t=mm.getGroupArr(-1,"G1",True)
259         self.assertTrue(g1_1.isEqual(t));
260         t=mm.getGroupArr(-1,"G2",True)
261         self.assertTrue(g2_1.isEqual(t));
262         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
263         #
264         mm.write(outFileName,2);
265         mm2=MEDFileMesh.New(outFileName)
266         res=mm.isEqual(mm2,1e-12)
267         self.assertTrue(res[0])
268         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
269         self.assertEqual(['Family_10','Family_11','Family_3','Family_4','Family_7'],l)
270         mm2.keepFamIdsOnlyOnLevs([3],[-1])
271         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
272             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
273             pass
274         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
275         self.assertEqual(['Family_10','Family_11','Family_12','Family_3','Family_4','Family_7'],l)
276         #
277         self.assertEqual([7,7,6],mm2.getFamilyFieldAtLevel(-1).getValues())
278         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,8)
279         self.assertEqual([7,8,6],mm2.getFamilyFieldAtLevel(-1).getValues())
280         self.assertTrue(not mm2.existsFamily("Family_8"))
281         mm2.createGroupOnAll(-1,"GrpOnAllFace")
282         self.assertTrue(mm2.existsFamily("Family_8"))
283         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
284         pass
285
286     #testing persistence of retrieved arrays
287     def testMEDMesh5(self):
288         fileName="Pyfile18.med"
289         mname="ExampleOfMultiDimW"
290         medmesh=MEDFileUMesh.New(fileName,mname)
291         m1_0=medmesh.getLevel0Mesh(True)
292         da1=medmesh.getFamilyFieldAtLevel(0)
293         del medmesh
294         self.assertEqual(20,m1_0.getNumberOfCells())
295         self.assertEqual(20,da1.getNumberOfTuples())
296         pass
297
298     def testMEDMesh6(self):
299         outFileName="MEDFileMesh5.med"
300         m=MEDFileCMesh.New()
301         m.setTime(-1,-1,2.3)
302         m1=MEDCouplingCMesh.New();
303         da=DataArrayDouble.New()
304         da.setValues([0.,1.,2.],3,1)
305         da.setInfoOnComponent(0,"XX [mm]")
306         m1.setCoordsAt(0,da)
307         da=DataArrayDouble.New()
308         da.setValues([0.,1.2],2,1)
309         da.setInfoOnComponent(0,"YY [km]")
310         m1.setCoordsAt(1,da)
311         da=DataArrayDouble.New()
312         da.setValues([0.,1.3],2,1)
313         da.setInfoOnComponent(0,"ZZ [um]")
314         m1.setCoordsAt(2,da)
315         m.setMesh(m1)
316         m.setName("myFirstCartMesh")
317         m.setDescription("mmmmpppppppp")
318         m.setTimeValue(2.3)
319         m.setTimeUnit("ms")
320         da=DataArrayInt.New()
321         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
322         m.setFamilyFieldArr(1,da)
323         m.setFamilyId("family1",1)
324         da=m.getFamilyArr(1,"family1")
325         expected1=[2,4,9]
326         self.assertEqual(expected1,da.getValues())
327         m.write(outFileName,2);
328         mm=MEDFileMesh.New(outFileName)
329         self.assertTrue(m.isEqual(mm,1e-12)[0])
330         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
331         m2=mm.getMesh()
332         tt=m.getTime()
333         m1.setTime(tt[2],tt[0],tt[1])
334         m1.setName(m.getName())
335         m1.setTimeUnit(m.getTimeUnit())
336         m1.setDescription(m.getDescription())
337         self.assertTrue(m2.isEqual(m1,1e-12));
338         pass
339
340     def testMEDMesh7(self):
341         fileName="Pyfile24.med"
342         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
343         m=MEDFileUMesh.New()
344         m.setCoords(m2.getCoords())
345         m.setMeshAtLevel(0,m2)
346         m.setMeshAtLevel(-1,m1)
347         m.setMeshAtLevel(-2,m0)
348         m.setFamilyFieldArr(0,f2)
349         m.setFamilyFieldArr(-1,f1)
350         m.setFamilyFieldArr(-2,f0)
351         m.setFamilyFieldArr(1,p)
352         m.setRenumFieldArr(0,n2)
353         m.setRenumFieldArr(-1,n1)
354         m.setRenumFieldArr(-2,n0)
355         nbOfFams=len(fns)
356         for i in xrange(nbOfFams):
357             m.addFamily(fns[i],fids[i])
358             pass
359         nbOfGrps=len(grpns)
360         for i in xrange(nbOfGrps):
361             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
362             pass
363         m.setName(m2.getName())
364         m.setDescription(m2.getDescription())
365         #
366         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
367         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
368         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
369         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
370         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
371         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
372         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
373         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
374         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
375         #
376         m.write(fileName,2)
377         pass
378
379     def funcToTestDelItem(self,ff):
380         del ff[[0.02,(3,4)]]
381         pass
382
383     #emulation of pointe.med file.
384     def testMEDField1(self):
385         mm=MEDFileMesh.New("Pyfile17.med")
386         mm.write("Pyfile17_bis.med",2)
387         ff=MEDFileFieldMultiTS("Pyfile17.med")
388         tsExpected=[[1,2],[3,4],[5,6]]
389         self.assertEqual(3,len(ff))
390         for pos,f1ts in enumerate(ff):
391             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
392             self.assertEqual(type(f1ts),MEDFileField1TS)
393             pass
394         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
395         self.assertEqual([3,4],ff[1].getTime()[:-1])
396         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
397         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
398         ff.write("Pyfile17_bis.med",0)
399         #
400         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
401         self.assertEqual([(1,2),(3,4),(5,6)],ts)
402         self.funcToTestDelItem(ff)
403         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
404         self.assertEqual([(1,2)],ts)
405         pass
406
407     #profiles
408     def testMEDField2(self):
409         mm=MEDFileMesh.New("Pyfile19.med")
410         mm.write("Pyfile19_bis.med",2)
411         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
412         ff.write("Pyfile19_bis.med",0)
413         self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
414         pass
415
416     #gauss points
417     def testMEDField3(self):
418         mm=MEDFileMesh.New("Pyfile13.med")
419         mm.write("Pyfile13_bis.med",2)
420         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
421         ff.write("Pyfile13_bis.med",0)
422         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
423         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
424         f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
425         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
426         pass
427
428     #gauss NE
429     def testMEDField4(self):
430         mm=MEDFileMesh.New("Pyfile14.med")
431         mm.write("Pyfile14_bis.med",2)
432         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
433         ff.write("Pyfile14_bis.med",0)
434         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
435         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
436         f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
437         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
438         pass
439
440     # MEDField get/set on pointe.med
441     def testMEDField5(self):
442         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
443         f=ff.getFieldAtLevel(ON_CELLS,0)
444         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
445         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
446         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
447         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
448         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
449         # no with renumbering
450         f=ff.getFieldAtLevel(ON_CELLS,0,1)
451         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
452         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
453         f=ff.getFieldAtLevel(ON_CELLS,0,3)
454         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
455         f=ff.getFieldAtLevel(ON_CELLS,0,2)
456         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
457         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
458         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
459         pass
460
461     # MEDField get/set on profiles nodes
462     def testMEDField6(self):
463         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
464         its=ff.getIterations()
465         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
466         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
467         f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
468         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
469         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
470         its=ff.getIterations()
471         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
472         f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
473         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
474         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
475         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
476         pass
477
478     # MEDField get/set on profiles cells
479     def testMEDField7(self):
480         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
481         its=ff.getIterations()
482         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
483         f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
484         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
485         pass
486
487     #first test of assignation. No profile and types sorted by type.
488     def testMEDField8(self):
489         fname="Pyfile25.med"
490         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
491         m1=f1.getMesh()
492         mm1=MEDFileUMesh.New()
493         mm1.setCoords(m1.getCoords())
494         mm1.setMeshAtLevel(0,m1)
495         mm1.setName(m1.getName())
496         mm1.write(fname,2)
497         ff1=MEDFileField1TS.New()
498         ff1.setFieldNoProfileSBT(f1)
499         ff1.write(fname,0)
500         f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
501         itt,orr,ti=ff1.getTime()
502         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
503         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
504         ff1.setTime(3,4,2.3)
505         itt,orr,ti=ff1.getTime()
506         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
507         da,infos=ff1.getUndergroundDataArrayExt()
508         f2.getArray().setName(da.getName())#da has the same name than f2
509         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
510         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
511         #
512         fname="Pyfile26.med"
513         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
514         m1=f1.getMesh()
515         mm1=MEDFileUMesh.New()
516         mm1.setCoords(m1.getCoords())
517         mm1.setMeshAtLevel(0,m1)
518         mm1.setName(m1.getName())
519         mm1.write(fname,2)
520         ff1=MEDFileField1TS.New()
521         ff1.setFieldNoProfileSBT(f1)
522         nv=1456.
523         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
524         ff1.write(fname,0)
525         f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
526         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
527         f1.getArray().setIJ(0,0,nv)
528         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
529         #
530         fname="Pyfile27.med"
531         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
532         m1=f1.getMesh()
533         mm1=MEDFileUMesh.New()
534         mm1.setCoords(m1.getCoords())
535         mm1.setMeshAtLevel(0,m1)
536         mm1.setName(m1.getName())
537         mm1.write(fname,2)
538         ff1=MEDFileField1TS.New()
539         ff1.setFieldNoProfileSBT(f1)
540         ff1.write(fname,0)
541         f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
542         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
543         da,infos=ff1.getUndergroundDataArrayExt()
544         f2.getArray().setName(da.getName())#da has the same name than f2
545         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
546         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
547         #
548         fname="Pyfile28.med"
549         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
550         m1=f1.getMesh()
551         mm1=MEDFileUMesh.New()
552         mm1.setCoords(m1.getCoords())
553         mm1.setMeshAtLevel(0,m1)
554         mm1.setName(m1.getName())
555         mm1.write(fname,2)
556         ff1=MEDFileField1TS.New()
557         ff1.setFieldNoProfileSBT(f1)
558         ff1.write(fname,0)
559         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
560         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
561         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
562         sbt=ff2.getFieldSplitedByType2()
563         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
564         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
565         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
566         self.assertEqual(6,loc1.getNumberOfPointsInCells())
567         self.assertEqual(3,loc1.getNumberOfGaussPoints())
568         self.assertEqual(2,loc1.getDimension())
569         da,infos=ff2.getUndergroundDataArrayExt()
570         f2.getArray().setName(da.getName())#da has the same name than f2
571         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
572         self.assertEqual(53,da.getNumberOfTuples())
573         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)
574         #
575         pass
576     
577     def testMEDFileData1(self):
578         fname="Pyfile29.med"
579         d=MEDFileData.New()
580         #
581         m1=MEDLoaderDataForTest.build1DMesh_1()
582         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
583         mmm1=MEDFileMeshMultiTS.New() ;
584         mmm1.setOneTimeStep(mm1)
585         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
586         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
587         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
588         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
589         d.setMeshes(ms)
590         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
591             self.assertEqual(name,mmm.getName())
592             self.assertEqual(type(mmm),MEDFileUMesh)
593             pass
594         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
595         #
596         ff1=MEDFileFieldMultiTS.New()
597         ff21=MEDFileFieldMultiTS.New()
598         ff22=MEDFileFieldMultiTS.New()
599         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
600         f1.getArray().setInfoOnComponent(0,"power [kW]")
601         ff1.appendFieldNoProfileSBT(f1)
602         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
603         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
604         ff21.appendFieldNoProfileSBT(f21)
605         f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
606         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
607         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
608         ff22.appendFieldNoProfileSBT(f22)
609         fs=MEDFileFields.New()
610         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
611         for name,fmts in zip(["f1","f21","f22"],fs):
612             self.assertEqual(name,fmts.getName())
613             pass
614         d.setFields(fs)
615         #
616         fname2="Pyfile29_2.med"
617         d.write(fname2,2)
618         #
619         d2=MEDFileData.New(fname2)
620         self.assertEqual(2,d2.getNumberOfMeshes())
621         self.assertEqual(3,d2.getNumberOfFields())
622         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
623         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
624         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
625         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
626         self.assertTrue(m1.isEqual(m1bis,1e-12))
627         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
628         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
629         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
630         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
631         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
632         pass
633     
634     def testMEDField9(self):
635         # first test field profile WR. Full type but with some type missing
636         fname="Pyfile30.med"
637         m1=MEDLoaderDataForTest.build2DMesh_3()
638         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
639         mm1.write(fname,2)
640         ff1=MEDFileField1TS.New()
641         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
642         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
643         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.
644         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
645         #
646         ff1.setFieldProfile(f1,mm1,0,da)
647         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
648         ff1=ff1.deepCpy()
649         ff1.write(fname,0)
650         #
651         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
652         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
653         self.assertTrue(vals.isEqual(d,1e-14))
654         #
655         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
656         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
657         ff2.deepCpyGlobs(ff3)
658         sbt=ff2.getFieldSplitedByType2()
659         self.assertEqual(3,sbt[0][0])#TRI3
660         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
661         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
662         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
663         self.assertEqual(4,sbt[1][0])#QUAD4
664         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
665         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
666         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
667         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
668         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
669         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
670         self.assertTrue(vals.isEqual(d,1e-14))
671         pass
672     
673     def testMEDField10(self):
674         fname="Pyfile31.med"
675         m1=MEDLoaderDataForTest.build2DMesh_1()
676         m1.renumberCells([0,1,4,2,3,5],False)
677         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
678         mm1.write(fname,2)
679         ff1=MEDFileFieldMultiTS.New()
680         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
681         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
682         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
683         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
684         #
685         ff1.appendFieldProfile(f1,mm1,0,da)
686         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
687         ff1.appendFieldProfile(f1,mm1,0,da)
688         ff1=ff1.deepCpy()
689         ff1.write(fname,0)
690         #
691         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
692         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
693         self.assertTrue(vals.isEqual(e,1e-14))
694         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
695         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
696         self.assertTrue(vals.isEqual(d,1e-14))
697         #
698         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
699         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
700         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
701         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
702         self.assertTrue(vals.isEqual(e,1e-14))
703         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
704         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
705         self.assertTrue(vals.isEqual(d,1e-14))
706         pass
707     
708     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
709     def testMEDField11(self):
710         fname="Pyfile32.med"
711         m1=MEDLoaderDataForTest.build2DMesh_1()
712         m1.renumberCells([0,1,4,2,3,5],False)
713         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
714         mm1.write(fname,2)
715         ff1=MEDFileField1TS.New()
716         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
717         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
718         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.
719         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
720         #
721         ff1.setFieldProfile(f1,mm1,0,da)
722         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
723         ff1.write(fname,0)
724         #
725         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
726         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
727         self.assertTrue(vals.isEqual(d,1e-14))
728         ## #
729         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
730         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
731         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
732         self.assertTrue(vals.isEqual(d,1e-14))
733         pass
734
735     def testMEDField12(self):
736         fname="Pyfile33.med"
737         m1=MEDLoaderDataForTest.build2DMesh_1()
738         m1.renumberCells([0,1,4,2,3,5],False)
739         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
740         mm1.write(fname,2)
741         ff1=MEDFileFieldMultiTS.New()
742         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
743         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
744         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.
745         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
746         #
747         ff1.appendFieldProfile(f1,mm1,0,da)
748         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
749         ff1.appendFieldProfile(f1,mm1,0,da)
750         ff1.write(fname,0)
751         #
752         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
753         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
754         self.assertTrue(vals.isEqual(e,1e-14))
755         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
756         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
757         self.assertTrue(vals.isEqual(d,1e-14))
758         #
759         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
760         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
761         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
762         self.assertTrue(vals.isEqual(e,1e-14))
763         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
764         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
765         self.assertTrue(vals.isEqual(d,1e-14))
766         pass
767
768     def testMEDField13(self):
769         fname="Pyfile34.med"
770         m1=MEDLoaderDataForTest.build2DMesh_1()
771         m1.renumberCells([0,1,4,2,3,5],False)
772         tmp=m1.getName();
773         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
774         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
775         mm1.write(fname,2)
776         ff1=MEDFileField1TS.New()
777         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
778         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
779         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.
780         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
781         #
782         ff1.setFieldProfile(f1,mm1,0,da)
783         ff1.write(fname,0)
784         #
785         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
786         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
787         self.assertTrue(vals.isEqual(d,1e-14))
788         #
789         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
790         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
791         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
792         self.assertTrue(vals.isEqual(d,1e-14))
793         pass
794
795     def testMEDField14(self):
796         fname="Pyfile35.med"
797         m1=MEDLoaderDataForTest.build2DMesh_1()
798         m1.renumberCells([0,1,4,2,3,5],False)
799         tmp=m1.getName();
800         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
801         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
802         mm1.write(fname,2)
803         ff1=MEDFileFieldMultiTS.New()
804         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
805         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
806         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.
807         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
808         #
809         ff1.appendFieldProfile(f1,mm1,0,da)
810         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
811         ff1.appendFieldProfile(f1,mm1,0,da)
812         ff1.write(fname,0)
813         #
814         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
815         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
816         self.assertTrue(vals.isEqual(d,1e-14))
817         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
818         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819         self.assertTrue(vals.isEqual(e,1e-14))
820         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
821         #
822         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
823         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
824         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
825         self.assertTrue(vals.isEqual(d,1e-14))
826         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
827         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
828         self.assertTrue(vals.isEqual(e,1e-14))
829         pass
830     # 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.
831     # 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
832     # 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 !
833     def testMEDField15(self):
834         fname="Pyfile36.med"
835         m0=MEDLoaderDataForTest.build2DMesh_1()
836         m0.renumberCells([0,1,4,2,3,5],False)
837         tmp=m0.getName();
838         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
839         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
840         ff1=MEDFileField1TS.New()
841         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
842         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
843         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.
844         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
845         #
846         ff1.setFieldProfile(f1,mm1,0,da)
847         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
848         mm1.write(fname,2)
849         ff1.write(fname,0)
850         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
851         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
852         self.assertTrue(p1.isIdentity())
853         self.assertEqual(5,p1.getNumberOfTuples())
854         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
855         pass
856     # Test for getFieldAtTopLevel method
857     def testMEDField16(self):
858         fname="Pyfile37.med"
859         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
860         m1=f1.getMesh()
861         mm1=MEDFileUMesh.New()
862         mm1.setCoords(m1.getCoords())
863         mm1.setMeshAtLevel(0,m1)
864         mm1.setName(m1.getName())
865         ff1=MEDFileField1TS.New()
866         ff1.setFieldNoProfileSBT(f1)
867         m2=m1.buildDescendingConnectivity()[0]
868         m2.sortCellsInMEDFileFrmt()
869         m2.setName(m1.getName())
870         mm1.setMeshAtLevel(-1,m2)
871         mm1.write(fname,2)
872         f2=m2.getMeasureField(True)
873         dd=DataArrayDouble.New()
874         dd.alloc(f2.getArray().getNumberOfTuples(),3)
875         dd[:,0]=f2.getArray()
876         dd[:,1]=2*f2.getArray()
877         dd[:,2]=3*f2.getArray()
878         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
879         f2.setArray(dd)
880         f2.copyTinyStringsFrom(f1)
881         f2.copyTinyAttrFrom(f1)
882         ff1.setFieldNoProfileSBT(f2)
883         ff1.write(fname,0)
884         # Reading Pyfile37.med
885         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
886         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
887         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
888         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
889         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
890         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
891         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
892         # More complex
893         fname="Pyfile38.med"
894         mm1.write(fname,2)
895         ff1=MEDFileField1TS.New()
896         ff1.setFieldNoProfileSBT(f2)
897         ff1.write(fname,0)
898         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
899         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
900         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
901         pass
902
903     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
904     def testMEDField17(self):
905         fname="Pyfile39.med"
906         m1=MEDLoaderDataForTest.build2DMesh_1()
907         m1.renumberCells([0,1,4,2,3,5],False)
908         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
909         mm1.write(fname,2)
910         ffs=MEDFileFields.New()
911         ff1=MEDFileFieldMultiTS.New()
912         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
913         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
914         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.
915         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
916         #
917         ff1.appendFieldProfile(f1,mm1,0,da)
918         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
919         ff1.appendFieldProfile(f1,mm1,0,da)
920         ffs.resize(1)
921         ffs.setFieldAtPos(0,ff1)
922         ffs=ffs.deepCpy()
923         ffs.write(fname,0)
924         #
925         ffsr=MEDFileFields.New(fname)
926         ff3=ffsr.getFieldAtPos(0)
927         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
928         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
929         pass
930
931     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
932     def testMEDField18(self):
933         fname="Pyfile40.med"
934         m1=MEDLoaderDataForTest.build2DMesh_1()
935         m1.renumberCells([0,1,4,2,3,5],False)
936         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
937         mm1.write(fname,2)
938         ffs=MEDFileFields.New()
939         ff1=MEDFileFieldMultiTS.New()
940         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
941         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
942         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.
943         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
944         #
945         ff1.appendFieldProfile(f1,mm1,0,da)
946         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
947         ff1.appendFieldProfile(f1,mm1,0,da)
948         ffs.pushField(ff1)
949         ffs.write(fname,0)
950         #
951         ffsr=MEDFileFields.New(fname)
952         ff3=ffsr.getFieldAtPos(0)
953         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
954         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
955         pass
956
957     def testMEDFieldBug1(self):
958         fname="Pyfile13.med"
959         d=MEDFileData.New(fname)
960         self.assertEqual(('GP_MyFirstFieldOnGaussPoint0', 'GP_MyFirstFieldOnGaussPoint1', 'GP_MyFirstFieldOnGaussPoint2'),d.getFields().getFieldAtPos(0).getLocs())
961         pass
962
963     def testMEDMesh8(self):
964         m=MEDLoaderDataForTest.build1DMesh_1()
965         m.convertQuadraticCellsToLinear()
966         mm=MEDFileUMesh.New()
967         mm.setMeshAtLevel(0,m)
968         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
969         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
970         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
971         mm.setGroupsAtLevel(0,[g1,g2],False)
972         self.assertEqual(('g1','g2'),mm.getGroupsNames())
973         self.assertEqual(('Family_2','Family_3'),mm.getFamiliesNames())
974         self.assertEqual(('Family_2',),mm.getFamiliesOnGroup('g1'))
975         self.assertEqual(('Family_3',),mm.getFamiliesOnGroup('g2'))
976         mm.assignFamilyNameWithGroupName()
977         self.assertEqual(('g1','g2'),mm.getGroupsNames())
978         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
979         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
980         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
981         #
982         mm=MEDFileUMesh.New()
983         mm.setMeshAtLevel(0,m)
984         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
985         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
986         self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
987         self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
988         self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
989         self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
990         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
991         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
992         self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
993         self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
994         self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
995         self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
996         mm.changeFamilyId(5,6)
997         g=mm.getGroupArr(0,"g3")
998         self.assertTrue(g.isEqual(g3));
999         g=mm.getGroupArr(0,"g2")
1000         self.assertTrue(g.isEqual(g2));
1001         g=mm.getGroupArr(0,"g1")
1002         self.assertTrue(g.isEqual(g1));
1003         pass
1004     
1005     # bug detected by gauthier
1006     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1007         fname="Pyfile41.med"
1008         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1009         m1=f1.getMesh()
1010         mm1=MEDFileUMesh.New()
1011         mm1.setCoords(m1.getCoords())
1012         mm1.setMeshAtLevel(0,m1)
1013         mm1.write(fname,2)
1014         ff1=MEDFileField1TS.New()
1015         ff1.setFieldNoProfileSBT(f1)
1016         ff1.write(fname,0)
1017         # writing mesh1 and field1, now creation of mesh2 and field2
1018         f2=f1.deepCpy()
1019         m2=f2.getMesh()
1020         m2.translate([0.5,0.6,0.7])
1021         m2.setName("3DSurfMesh_2")
1022         f2.getArray()[:]*=2.
1023         f2.setName("VectorFieldOnCells2")
1024         mm2=MEDFileUMesh.New()
1025         mm2.setCoords(m2.getCoords())
1026         mm2.setMeshAtLevel(0,m2)
1027         mm2.write(fname,0)
1028         ff2=MEDFileField1TS.New()
1029         ff2.setFieldNoProfileSBT(f2)
1030         ff2.write(fname,0)
1031         #
1032         f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1033         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1034         f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1035         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1036         pass
1037
1038     def testMEDLoaderMultiLevelCellField1(self):
1039         fname="Pyfile42.med"
1040         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1041         m=MEDFileUMesh.New()
1042         m.setCoords(m2.getCoords())
1043         m.setMeshAtLevel(0,m2)
1044         m.setMeshAtLevel(-1,m1)
1045         m.setMeshAtLevel(-2,m0)
1046         m.write(fname,2)
1047         #
1048         FieldName1="Field1"
1049         compNames1=["comp1","comp2","comp3"]
1050         ff1=MEDFileField1TS.New()
1051         da2=DataArrayDouble.New()
1052         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1053         da2.iota(7.)
1054         da2.rearrange(len(compNames1))
1055         da2.setInfoOnComponents(compNames1)
1056         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1057         ff1.setFieldNoProfileSBT(f2)
1058         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1059         da0=DataArrayDouble.New()
1060         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1061         da0.iota(190.)
1062         da0.rearrange(len(compNames1))
1063         da0.setInfoOnComponents(compNames1)
1064         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1065         ff1.setFieldNoProfileSBT(f0)
1066         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1067         da1=DataArrayDouble.New()
1068         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1069         da1.iota(90.)
1070         da1.rearrange(len(compNames1))
1071         da1.setInfoOnComponents(compNames1)
1072         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1073         ff1.setFieldNoProfileSBT(f1)
1074         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1075         #
1076         ff1.write(fname,0)
1077         #
1078         FieldName2="Field2"
1079         compNames2=["comp11","comp22"]
1080         ff2=MEDFileField1TS.New()
1081         da0=DataArrayDouble.New()
1082         da0.alloc(m0.getNumberOfCells()*2,1)
1083         da0.iota(-190.)
1084         da0.rearrange(2)
1085         da0.setInfoOnComponents(compNames2)
1086         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1087         ff2.setFieldNoProfileSBT(f0)
1088         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1089         da1=DataArrayDouble.New()
1090         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1091         da1.iota(-90.)
1092         da1.rearrange(len(compNames2))
1093         da1.setInfoOnComponents(compNames2)
1094         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1095         ff2.setFieldNoProfileSBT(f1)
1096         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1097         #
1098         ff2.write(fname,0)
1099         #
1100         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1101         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1102         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1103         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1104         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1105         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1106         pass
1107
1108     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1109         fname="Pyfile43.med"
1110         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1111         m=MEDFileUMesh.New()
1112         m.setMeshAtLevel(0,m2)
1113         m.setMeshAtLevel(-1,m1)
1114         m.setMeshAtLevel(-2,m0)
1115         f=MEDFileField1TS.New()
1116         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1117         ff.setName("NodeFieldPfl")
1118         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1119         ff.setArray(arr)
1120         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1121         f.setFieldProfile(ff,m,-2,pfl)
1122         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1123         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1124         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1125         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1126         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1127         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1128         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1129         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1130         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1131         expected1=[1.,10.,100.,2.,20.,200.]
1132         nodeCoordsWithValue1=[10.,2.5,0.]
1133         nodeCoordsWithValue2=[10.,3.75,0.]
1134         for i in xrange(3):
1135             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1136             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1137             pass
1138         for i in xrange(6):
1139             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1140             pass
1141         del tes0
1142         #
1143         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1144         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1145         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1146         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1147         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1148         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1149         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1150         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1151         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1152         for i in xrange(6):
1153             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1154             pass
1155         m.write(fname,2)
1156         f.write(fname,0)
1157         #
1158         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1159         f=MEDFileField1TS.New()
1160         f.setFieldProfile(ff,m,-2,pfl)
1161         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1162         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1163         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1164         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1165         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1166         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1167         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1168         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1169         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1170         expected2=[2.,20.,200.,1.,10.,100.]
1171         for i in xrange(3):
1172             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1173             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1174             pass
1175         for i in xrange(6):
1176             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1177             pass
1178         #
1179         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1180         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1181         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1182         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1183         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1184         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1185         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1186         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1187         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1188         for i in xrange(6):
1189             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1190             pass
1191         pass
1192
1193     def testDuplicateNodesOnM1Group1(self):
1194         fname="Pyfile44.med"
1195         m=MEDCouplingCMesh.New()
1196         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1197         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1198         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1199         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1200         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1201         m2.setName(m.getName())
1202         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1203         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1204         mm=MEDFileUMesh.New()
1205         mm.setMeshAtLevel(0,m)
1206         mm.setMeshAtLevel(-1,m2)
1207         mm.setGroupsAtLevel(-1,[grp,grp2])
1208         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1209         mm.setGroupsAtLevel(1,[grpNode])
1210         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1211         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1212         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1213         #
1214         self.assertEqual(30,mm.getNumberOfNodes())
1215         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1216         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1217         #
1218         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1219         self.assertEqual([15,16,17],nodes.getValues());
1220         self.assertEqual([7,8,9],cells.getValues());
1221         self.assertEqual([12,13,14],cells2.getValues());
1222         self.assertEqual(33,mm.getNumberOfNodes())
1223         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1224         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1225         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1226         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1227         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
1228         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1229         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
1230         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1231         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])
1232         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1233         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1234         #
1235         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1236         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1237         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1238         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1239         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1240         mm.write(fname,2)
1241         pass
1242
1243     def testDuplicateNodesOnM1Group2(self):
1244         fname="Pyfile45.med"
1245         m=MEDCouplingCMesh.New()
1246         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1247         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1248         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1249         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1250         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1251         m2.setName(m.getName())
1252         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1253         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1254         mm=MEDFileUMesh.New()
1255         mm.setMeshAtLevel(0,m)
1256         mm.setMeshAtLevel(-1,m2)
1257         mm.setGroupsAtLevel(-1,[grp,grp2])
1258         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1259         mm.setGroupsAtLevel(1,[grpNode])
1260         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1261         ref1=[4,9,8,14,15,4,10,9,15,16]
1262         ref2=[4,9,8,14,30,4,10,9,30,16]
1263         #
1264         self.assertEqual(30,mm.getNumberOfNodes())
1265         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1266         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1267         #
1268         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1269         self.assertEqual([15],nodes.getValues());
1270         self.assertEqual([7,8],cells.getValues());
1271         self.assertEqual([12,13],cells2.getValues());
1272         self.assertEqual(31,mm.getNumberOfNodes())
1273         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1274         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1275         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1276         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1277         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
1278         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1279         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
1280         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1281         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])
1282         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1283         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1284         #
1285         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1286         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1287         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1288         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1289         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1290         mm.write(fname,2)       
1291         pass
1292
1293     def testBasicConstructors(self):
1294         fname="Pyfile18.med"
1295         m=MEDFileMesh(fname)
1296         m=MEDFileMesh(fname,"ExampleOfMultiDimW",-1,-1)
1297         m=MEDFileMesh(fname)
1298         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1299         m=MEDFileUMesh(fname)
1300         m=MEDFileUMesh()
1301         self.testMEDMesh6()
1302         m=MEDFileCMesh("MEDFileMesh5.med")
1303         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1304         m=MEDFileCMesh()
1305         m=MEDFileMeshMultiTS()
1306         m=MEDFileMeshMultiTS(fname)
1307         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1308         m=MEDFileMeshes()
1309         m=MEDFileMeshes(fname)
1310         m=MEDFileField1TS()
1311         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1312         m=MEDFileFieldMultiTS()
1313         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1314         m=MEDFileFields()
1315         m=MEDFileFields(fname)
1316         m=MEDFileData()
1317         m=MEDFileData(fname)
1318         #
1319         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1320         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1321         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1322         m=MEDCouplingCMesh()
1323         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1324         m=MEDCouplingFieldTemplate(ON_NODES)
1325         m=MEDCouplingMultiFields([])
1326         m=MEDCouplingFieldOverTime([])
1327         pass
1328
1329     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1330     def testBugSemiPartialField(self):
1331         fname="Pyfile46.med"
1332         m=MEDLoaderDataForTest.build2DMesh_3()
1333         m=m[:10] ; m.setName("mesh")
1334         f=m.getMeasureField(ON_CELLS)
1335         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1336         f.setTime(5.5,3,4)
1337         f.setName("SemiPartialField")
1338         #
1339         f1=f[:6] ; f1.getMesh().setName(m.getName())
1340         f2=f[6:] ; f2.getMesh().setName(m.getName())
1341         #
1342         mm=MEDFileUMesh.New()
1343         mm.setMeshAtLevel(0,m)
1344         ff=MEDFileField1TS.New()
1345         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1346         mm.write(fname,2)
1347         ff.write(fname,0)
1348         #
1349         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1350         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1351         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1352         #
1353         fread.checkCoherency()
1354         fread2.checkCoherency()
1355         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1356         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1357         pass
1358
1359     def testUnPolyze1(self):
1360         fname="Pyfile47.med"
1361         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1362         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]
1363         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1364         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]]))
1365         mm.write(fname,2)
1366         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1367         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1368         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1369         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1370         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1371         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1372         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1373         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1374         # to test
1375         mm.setRenumFieldArr(0,None)
1376         mm.setFamilyFieldArr(-1,None)
1377         pass
1378
1379     def testUnPolyze2(self):
1380         fname="Pyfile48.med"
1381         mfd=MEDFileData.New()
1382         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1383         meshes=MEDFileMeshes.New()
1384         meshes.pushMesh(mm)
1385         mfd.setMeshes(meshes)
1386         fields=MEDFileFields.New()
1387         mfd.setFields(fields)
1388         ff=MEDFileFieldMultiTS.New()
1389         fields.pushField(ff)
1390         #
1391         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1392         f0_0.setTime(9.5,3,4)
1393         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1394         f0_0.setArray(da)
1395         f0_0.setMesh(mm.getMeshAtLevel(0))
1396         ff.appendFieldNoProfileSBT(f0_0)
1397         ff0=ff.getTimeStepAtPos(0)
1398         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1399         f0_1.setTime(9.5,3,4)
1400         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1401         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1402         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1403         f0_1.setArray(da)
1404         ff0.setFieldProfile(f0_1,mm,0,pfl)
1405         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1406         f0_2.setTime(9.5,3,4)
1407         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1408         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
1409         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1410         f0_2.setArray(da)
1411         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1412         mfd.getFields().shallowCpyGlobs(ff0)
1413         #
1414         mfd.unPolyzeMeshes()
1415         #
1416         fmts=mfd.getFields()[0]
1417         self.assertEqual(fmts.getNumberOfTS(),1)
1418         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1419         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1420         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))])
1421         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1422         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1423         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1424         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1425         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1426         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1427         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1428         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))
1429         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1430         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1431         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1432         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1433         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1434         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])
1435         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1436         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1437         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1438         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])
1439         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1440         #
1441         mfd.write(fname,2)
1442         pass
1443
1444     def testGaussWriteOnPfl1(self):
1445         fname="Pyfile49.med"
1446         fname2="Pyfile50.med"
1447         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1448         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1449         mQ8.allocateCells(1)
1450         mQ8.insertNextCell(NORM_QUAD8,range(8))
1451         mQ8.finishInsertingCells()
1452         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1453         mQ4.allocateCells(1)
1454         mQ4.insertNextCell(NORM_QUAD4,range(4))
1455         mQ4.finishInsertingCells()
1456         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1457         mT3.allocateCells(1)
1458         mT3.insertNextCell(NORM_TRI3,range(3))
1459         mT3.finishInsertingCells()
1460         
1461         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.]]
1462         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1463         ms[:]=(elt.deepCpy() for elt in ms)
1464         for m,t in zip(ms,tr):
1465             d=m.getCoords() ; d+= t
1466             pass
1467         m=MEDCouplingUMesh.MergeUMeshes(ms)
1468         m.setName("mesh")
1469         m2=m[:13] ; m2.setName(m.getName())
1470         ### 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.
1471         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1472         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1473         f.setMesh(m2)
1474         f.setTime(4.5,1,2)
1475         da=DataArrayDouble(34) ; da.iota(3.)
1476         f.setArray(da)
1477         f.setName("fieldCellOnPflWithoutPfl")
1478         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])
1479         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])
1480         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])
1481         f.checkCoherency()
1482         #
1483         mm=MEDFileUMesh()
1484         mm.setMeshAtLevel(0,m)
1485         mm.write(fname,2)
1486         #
1487         f1ts=MEDFileField1TS.New()
1488         pfl=DataArrayInt(range(13)) ; pfl.setName("pfl")
1489         f1ts.setFieldProfile(f,mm,0,pfl)
1490         f1ts.write(fname,0)
1491         #
1492         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1493         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1494         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1495         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1496         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1497         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1498         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1499         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1500         #
1501         dataRead=MEDFileData.New(fname)
1502         mRead=dataRead.getMeshes()[0]
1503         f1tsRead=dataRead.getFields()[0][0]
1504         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1505         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1506         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1507         f2_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1508         f2_bis.checkCoherency()
1509         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1510         #
1511         MEDLoader.WriteField(fname2,f,True)
1512         f2_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1513         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1514         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1515         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1516         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1517         m2=m[pfl] ; m2.setName(m.getName())
1518         f.setMesh(m2)
1519         f.setTime(4.5,1,2)
1520         da=DataArrayDouble(35) ; da.iota(3.)
1521         f.setArray(da)
1522         f.setName("fieldCellOnPflWithoutPfl2")
1523         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1524         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])
1525         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])
1526         f.checkCoherency()
1527         #
1528         mm=MEDFileUMesh()
1529         mm.setMeshAtLevel(0,m)
1530         mm.write(fname,2)
1531         f1ts=MEDFileField1TS.New()
1532         f1ts.setFieldProfile(f,mm,0,pfl)
1533         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1534         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1535         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1536         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1537         f1ts.write(fname,0)
1538         dataRead=MEDFileData.New(fname)
1539         mRead=dataRead.getMeshes()[0]
1540         f1tsRead=dataRead.getFields()[0][0]
1541         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1542         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1543         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1544         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1545         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1546         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1547         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1548         #
1549         MEDLoader.WriteField(fname2,f,True)
1550         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1551         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1552         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1553         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1554         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1555         f.setMesh(m)
1556         f.setTime(4.5,1,2)
1557         da=DataArrayDouble(60) ; da.iota(3.)
1558         f.setArray(da)
1559         f.setName("fieldCellWithoutPfl")
1560         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])
1561         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])
1562         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])
1563         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])
1564         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])
1565         f.checkCoherency()
1566         mm=MEDFileUMesh()
1567         mm.setMeshAtLevel(0,m) 
1568         f1ts=MEDFileField1TS.New()
1569         f1ts.setFieldNoProfileSBT(f)
1570         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1571         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1572         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1573         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1574         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1575         mm.write(fname,2)
1576         f1ts.write(fname,0)
1577         #
1578         dataRead=MEDFileData.New(fname)
1579         mRead=dataRead.getMeshes()[0]
1580         f1tsRead=dataRead.getFields()[0][0]
1581         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1582         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1583         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1584         f3_bis=MEDLoader.ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1585         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1586         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1587         #
1588         MEDLoader.WriteField(fname2,f,True)
1589         f3_ter=MEDLoader.ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1590         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1591         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1592         pass
1593
1594     # Testing profile on nodes when the profile is identity but not on all nodes.
1595     def testMEDFieldPflOnNode1(self):
1596         fname="Pyfile51.med"
1597         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)
1598         m0=MEDCouplingUMesh("Mesh",2)
1599         m0.allocateCells(5)
1600         m0.insertNextCell(NORM_TRI3,[1,4,2])
1601         m0.insertNextCell(NORM_TRI3,[4,5,2])
1602         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1603         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1604         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1605         m0.finishInsertingCells()
1606         m0.setCoords(coo)
1607         m1=MEDCouplingUMesh(m0.getName(),1)
1608         m1.allocateCells(9)
1609         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1610         for i in xrange(9):
1611             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1612             pass
1613         m1.finishInsertingCells()
1614         m1.setCoords(coo)
1615         #
1616         m=MEDFileUMesh()
1617         m.setMeshAtLevel(0,m0)
1618         m.setMeshAtLevel(-1,m1)
1619         #
1620         dt=3 ; it=2 ; tim=4.5
1621         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1622         fieldNode0.setName("fieldNode0")
1623         fieldNode0.setTime(tim,dt,it)
1624         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1625         arr=DataArrayDouble([10,11,12,13,14])
1626         fieldNode0.setArray(arr)
1627         f0=MEDFileField1TS()
1628         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1629         m.write(fname,2) ; f0.write(fname,0)
1630         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1631         fieldNode1.setName("fieldNode1")
1632         fieldNode1.setTime(tim,dt,it)
1633         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1634         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1635         fieldNode1.setArray(arr1)
1636         f1=MEDFileField1TS()
1637         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1638         f1.write(fname,0)
1639         del m,f0,m0,m1,f1
1640         ## Reading from file
1641         m=MEDFileMesh.New(fname)
1642         m0=m.getMeshAtLevel(0)
1643         m00=m0.deepCpy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1644         fieldNode0.setMesh(m00)
1645         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1646         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1647         ff0_1.checkCoherency()
1648         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1649         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1650         ff0_2.checkCoherency()
1651         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1652         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1653         ff0_3.checkCoherency()
1654         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1655         ff0_4=MEDLoader.ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1656         ff0_4.checkCoherency()
1657         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1658         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1659         m1=m.getMeshAtLevel(-1)
1660         m10=m1.deepCpy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1661         fieldNode1.setMesh(m10)
1662         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1663         ff1_1.checkCoherency()
1664         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1665         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1666         ff1_2.checkCoherency()
1667         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1668         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1669         ff1_3.checkCoherency()
1670         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1671         ff1_4=MEDLoader.ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1672         ff1_4.checkCoherency()
1673         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1674         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]
1675         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]
1676         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]
1677         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1678         arr_r.setName(fieldNode1.getArray().getName())
1679         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1680         pfl1_r.setName(pfl1.getName())
1681         self.assertTrue(pfl1_r.isEqual(pfl1))
1682         pass
1683     
1684         # Testing profile on nodes when the profile is identity but not on all nodes.
1685     def testMEDFieldPflOnCell1(self):
1686         fname="Pyfile52.med"
1687         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)
1688         m0=MEDCouplingUMesh("Mesh",2)
1689         m0.allocateCells(5)
1690         m0.insertNextCell(NORM_TRI3,[1,4,2])
1691         m0.insertNextCell(NORM_TRI3,[4,5,2])
1692         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1693         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1694         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1695         m0.finishInsertingCells()
1696         m0.setCoords(coo)
1697         m1=MEDCouplingUMesh(m0.getName(),1)
1698         m1.allocateCells(9)
1699         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1700         for i in xrange(9):
1701             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1702             pass
1703         m1.finishInsertingCells()
1704         m1.setCoords(coo)
1705         #
1706         m=MEDFileUMesh()
1707         m.setMeshAtLevel(0,m0)
1708         m.setMeshAtLevel(-1,m1)
1709         #
1710         dt=3 ; it=2 ; tim=4.5
1711         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1712         fieldCell0.setName("fieldCell0")
1713         fieldCell0.setTime(tim,dt,it)
1714         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1715         arr=DataArrayDouble([10,11,12])
1716         fieldCell0.setArray(arr)
1717         f0=MEDFileField1TS()
1718         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1719         m.write(fname,2) ; f0.write(fname,0)
1720         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1721         fieldCell1.setName("fieldCell1")
1722         fieldCell1.setTime(tim,dt,it)
1723         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1724         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1725         fieldCell1.setArray(arr1)
1726         f1=MEDFileField1TS()
1727         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1728         f1.write(fname,0)
1729         del m,f0,m0,m1,f1
1730         ## Reading from file
1731         m=MEDFileMesh.New(fname)
1732         m0=m.getMeshAtLevel(0)
1733         m00=m0.deepCpy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1734         fieldCell0.setMesh(m00)
1735         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1736         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1737         ff0_1.checkCoherency()
1738         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1739         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1740         ff0_2.checkCoherency()
1741         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1742         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1743         ff0_3.checkCoherency()
1744         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1745         ff0_4=MEDLoader.ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1746         ff0_4.checkCoherency()
1747         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1748         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1749         m1=m.getMeshAtLevel(-1)
1750         m10=m1.deepCpy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1751         fieldCell1.setMesh(m10)
1752         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1753         ff1_1.checkCoherency()
1754         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1755         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1756         ff1_2.checkCoherency()
1757         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1758         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1759         ff1_3.checkCoherency()
1760         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1761         ff1_4=MEDLoader.ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1762         ff1_4.checkCoherency()
1763         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1764         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]
1765         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]
1766         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]
1767         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1768         arr_r.setName(fieldCell1.getArray().getName())
1769         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1770         pfl1_r.setName(pfl1.getName())
1771         self.assertTrue(pfl1_r.isEqual(pfl1))
1772         pass
1773
1774     def testMEDFileUMeshZipCoords1(self):
1775         m=MEDFileUMesh()
1776         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1777         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])
1778         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1779         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1780         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1781         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1782         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1783         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1784         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1785         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1786         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1787         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1788         o2n=m.zipCoords()
1789         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1790         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1791         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
1792         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
1793         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
1794         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
1795         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
1796         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
1797         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
1798         pass
1799
1800     def testMEDUMeshAddNodeGroup1(self):
1801         fname="Pyfile53.med"
1802         m=MEDFileUMesh()
1803         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1804         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])
1805         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1806         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1807         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1808         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1809         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1810         #
1811         mm=m.deepCpy()
1812         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
1813         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
1814         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1815         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1816         mm.setFamilyId("MyFam",2)
1817         mm.setFamilyId("MyOtherFam",3)
1818         mm.setFamilyId("MyOther-1",-1)
1819         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1820         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1821         #
1822         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1823         mm.addNodeGroup(daTest)
1824         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1825         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1826         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1827             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1828             pass
1829         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1830         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1831         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1832         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1833         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1834             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1835             pass
1836         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1837         da=DataArrayInt([3,12]) ; da.setName("grp0")
1838         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1839         da.setValues([1])
1840         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1841         mm.write(fname,2)
1842         mm=MEDFileMesh.New(fname)
1843         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
1844         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1845         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
1846             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1847             pass
1848         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1849         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1850         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1851         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1852         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1853             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1854             pass
1855         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1856         da=DataArrayInt([3,12]) ; da.setName("grp0")
1857         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
1858         da.setValues([1])
1859         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1860         pass
1861
1862     def testMEDUMeshAddGroup1(self):
1863         fname="Pyfile54.med"
1864         m=MEDFileUMesh()
1865         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1866         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
1867         for i in xrange(7):
1868             m0.insertNextCell(NORM_TRI3,[1,2,1])
1869             pass
1870         for i in xrange(4):
1871             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
1872             pass
1873         for i in xrange(2):
1874             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
1875             pass
1876         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1877         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1878         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1879         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1880         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1881         #
1882         mm=m.deepCpy()
1883         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
1884         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
1885         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
1886         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
1887         mm.setFamilyId("MyFam",2)
1888         mm.setFamilyId("MyOtherFam",3)
1889         mm.setFamilyId("MyOther-1",-1)
1890         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
1891         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
1892         #
1893         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
1894         mm.addGroup(0,daTest)
1895         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1896         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1897         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1898             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1899             pass
1900         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1901         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1902         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1903         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1904         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1905             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1906             pass
1907         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
1908         da=DataArrayInt([3,12]) ; da.setName("grp0")
1909         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1910         da.setValues([1])
1911         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1912         mm.write(fname,2)
1913         mm=MEDFileMesh.New(fname)
1914         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
1915         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
1916         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
1917             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
1918             pass
1919         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
1920         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
1921         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
1922         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
1923         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
1924             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
1925             pass
1926         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
1927         da=DataArrayInt([3,12]) ; da.setName("grp0")
1928         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
1929         da.setValues([1])
1930         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
1931         pass
1932
1933     def testHeapMem1(self):
1934         import platform
1935         ver=platform.python_version_tuple()
1936         if int(ver[0])!=2 or int(ver[1])<7:
1937             return
1938         m=MEDCouplingCMesh()
1939         arr=DataArrayDouble(10,1) ; arr.iota(0)
1940         m.setCoords(arr,arr)
1941         m=m.buildUnstructured()
1942         m.setName("mm")
1943         f=m.getMeasureField(ON_CELLS)
1944         self.assertIn(m.getHeapMemorySize(),xrange(3552-100,3552+100))
1945         self.assertIn(f.getHeapMemorySize(),xrange(4215-100,4215+100))
1946         #
1947         mm=MEDFileUMesh()
1948         mm.setMeshAtLevel(0,m)
1949         self.assertIn(mm.getHeapMemorySize(),xrange(3889-100,3889+100))
1950         ff=MEDFileField1TS()
1951         ff.setFieldNoProfileSBT(f)
1952         self.assertIn(ff.getHeapMemorySize(),xrange(711-10,711+10))
1953         #
1954         fff=MEDFileFieldMultiTS()
1955         fff.appendFieldNoProfileSBT(f)
1956         self.assertIn(fff.getHeapMemorySize(),xrange(743-10,743+10))
1957         self.assertIn(fff[-1,-1].getHeapMemorySize(),xrange(711-10,711+10))
1958         f.setTime(1.,0,-1)
1959         fff.appendFieldNoProfileSBT(f)
1960         self.assertIn(fff.getHeapMemorySize(),xrange(1462-10,1462+10))
1961         self.assertIn(fff[0,-1].getHeapMemorySize(),xrange(711-10,711+10))
1962         f2=f[:50]
1963         f2.setTime(2.,1,-1)
1964         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
1965         fff.appendFieldProfile(f2,mm,0,pfl)
1966         self.assertIn(fff.getHeapMemorySize(),xrange(2178-100,2178+100))
1967         self.assertIn(fff.getProfile("pfl_NORM_QUAD4").getHeapMemorySize(),xrange(215-10,215+10))
1968         self.assertIn(fff[1,-1].getHeapMemorySize(),xrange(700-10,700+10))
1969         pass
1970
1971     def testCurveLinearMesh1(self):
1972         fname="Pyfile55.med"
1973         mesh=MEDCouplingCurveLinearMesh();
1974         mesh.setTime(2.3,4,5);
1975         mesh.setTimeUnit("us");
1976         mesh.setName("Example of Cuve linear mesh");
1977         mesh.setDescription("buildCLMesh");
1978         a1=DataArrayDouble(3*20,1);
1979         a1.iota(7.) ; a1.rearrange(3);
1980         mesh.setCoords(a1);
1981         mesh.setNodeGridStructure([4,5]);
1982         mesh.checkCoherency();
1983         #
1984         m=MEDFileCurveLinearMesh()
1985         m.setMesh(mesh)
1986         d=DataArrayInt(20) ; d.iota(4)
1987         m.setFamilyFieldArr(1,d)
1988         d3=DataArrayInt(20) ; d3.iota(400)
1989         m.setRenumFieldArr(1,d3)
1990         d2=DataArrayInt(12) ; d2.iota(40)
1991         m.setFamilyFieldArr(0,d2)
1992         d4=DataArrayInt(21) ; d4.iota(4000)
1993         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
1994         d4.popBackSilent()
1995         m.setRenumFieldArr(1,d4)
1996         m.write(fname,2)
1997         #
1998         m1=MEDFileCurveLinearMesh(fname)
1999         mm=m1.getMesh()
2000         self.assertTrue(mm.isEqual(mesh,1e-12))
2001         #
2002         m1=MEDFileMesh.New(fname)
2003         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2004         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2005         pass
2006
2007     pass
2008
2009 unittest.main()