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