Salome HOME
Merge from V6_main_20120808 08Aug12
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2012  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 from MEDLoader import *
22 import unittest
23 from math import pi,e,sqrt
24 from MEDLoaderDataForTest import MEDLoaderDataForTest
25
26 class MEDLoaderTest(unittest.TestCase):
27     def testMEDMesh1(self):
28         fileName="Pyfile18.med"
29         mname="ExampleOfMultiDimW"
30         medmesh=MEDFileMesh.New(fileName,mname)
31         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
32         m1_0=medmesh.getLevel0Mesh(True)
33         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
34         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
35         m2_0=medmesh.getLevelM1Mesh(True)
36         m2_1=MEDLoader.ReadUMeshFromFile(fileName,mname,-1)
37         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
38         pass
39     def testMEDMesh2(self):
40         fileName="Pyfile10.med"
41         mname="3DToto"
42         outFileName="MEDFileMesh1.med"
43         medmesh=MEDFileUMesh.New(fileName,mname)
44         self.assertEqual((0,),medmesh.getNonEmptyLevels())
45         m1_0=medmesh.getLevel0Mesh(True)
46         m1_1=MEDLoader.ReadUMeshFromFile(fileName,mname,0)
47         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
48         g1_0=medmesh.getGroup(0,"mesh2",True)
49         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
50         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
51         g1_0=medmesh.getGroup(0,"mesh3",True)
52         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
53         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
54         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
55         g1_1=MEDLoader.ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
56         g1_1.setName(g1_0.getName())
57         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
58         g1_0=medmesh.getFamily(0,"Family_2",True)
59         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2"]);
60         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
61         g1_0=medmesh.getFamilies(0,["Family_2","Family_4"],True)
62         g1_1=MEDLoader.ReadUMeshFromFamilies(fileName,mname,0,["Family_2","Family_4"]);
63         g1_1.setName(g1_0.getName())
64         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
65         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
66         medmesh.write(outFileName,2);
67         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",True).getValues());
68         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",True).getValues());
69         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],True).getValues());
70         self.assertEqual([19,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
71         famn=medmesh.getFamilyNameGivenId(0)
72         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
73         #without renum
74         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2",False).getValues());
75         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_2",False).getValues());
76         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_4","Family_2"],False).getValues());
77         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
78         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
79         pass
80
81     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
82     def testMEDMesh3(self):
83         outFileName="MEDFileMesh3.med"
84         c=DataArrayDouble.New()
85         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 ];
86         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
87         c.setValues(coords,9,2)
88         m=MEDCouplingUMesh.New();
89         m.setMeshDimension(2);
90         m.allocateCells(5);
91         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
92         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
93         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
94         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
95         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
96         m.finishInsertingCells();
97         m.setCoords(c)
98         m.checkCoherency()
99         m1=MEDCouplingUMesh.New();
100         m1.setMeshDimension(1);
101         m1.allocateCells(3);
102         m1.insertNextCell(NORM_SEG2,2,[1,4])
103         m1.insertNextCell(NORM_SEG2,2,[3,6])
104         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
105         m1.finishInsertingCells();
106         m1.setCoords(c)
107         m1.checkCoherency()
108         m2=MEDCouplingUMesh.New();
109         m2.setMeshDimension(0);
110         m2.allocateCells(4);
111         m2.insertNextCell(NORM_POINT1,1,[1])
112         m2.insertNextCell(NORM_POINT1,1,[3])
113         m2.insertNextCell(NORM_POINT1,1,[2])
114         m2.insertNextCell(NORM_POINT1,1,[6])
115         m2.finishInsertingCells();
116         m2.setCoords(c)
117         m2.checkCoherency()
118         #
119         mm=MEDFileUMesh.New()
120         mm.setName("MyFirstMEDCouplingMEDmesh")
121         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
122         mm.setCoords(c)
123         mm.setMeshAtLevel(-1,m1);
124         mm.setMeshAtLevel(0,m);
125         mm.setMeshAtLevel(-2,m2);
126         # playing with groups
127         g1_2=DataArrayInt.New()
128         g1_2.setValues([1,3],2,1)
129         g1_2.setName("G1")
130         g2_2=DataArrayInt.New()
131         g2_2.setValues([1,2,3],3,1)
132         g2_2.setName("G2")
133         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
134         g1_1=DataArrayInt.New()
135         g1_1.setValues([0,1,2],3,1)
136         g1_1.setName("G1")
137         g2_1=DataArrayInt.New()
138         g2_1.setValues([0,2],2,1)
139         g2_1.setName("G2")
140         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
141         g1_N=DataArrayInt.New()
142         g1_N.setValues(range(8),8,1)
143         g1_N.setName("G1")
144         g2_N=DataArrayInt.New()
145         g2_N.setValues(range(9),9,1)
146         g2_N.setName("G2")
147         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
148         mm.createGroupOnAll(0,"GrpOnAllCell")
149         # check content of mm
150         t=mm.getGroupArr(0,"G1",False)
151         self.assertTrue(g1_2.isEqual(t));
152         t=mm.getGroupArr(0,"G2",False)
153         self.assertTrue(g2_2.isEqual(t));
154         t=mm.getGroupArr(-1,"G1",False)
155         self.assertTrue(g1_1.isEqual(t));
156         t=mm.getGroupArr(-1,"G2",False)
157         self.assertTrue(g2_1.isEqual(t));
158         t=mm.getGroupArr(1,"G1",False)
159         self.assertTrue(g1_N.isEqual(t));
160         t=mm.getGroupArr(1,"G2",False)
161         self.assertTrue(g2_N.isEqual(t));
162         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
163         t=mm.getGroupArr(0,"GrpOnAllCell")
164         self.assertTrue(t.getValues()==range(5))
165         #
166         mm.write(outFileName,2);
167         #
168         mm=MEDFileMesh.New(outFileName)
169         mbis=mm.getMeshAtLevel(0)
170         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
171         self.assertTrue(m.isEqual(mbis,1e-12));
172         #
173         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),MEDLoader.GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
174         pass
175
176     # this test is the testMEDMesh3 except that permutation is dealed here
177     def testMEDMesh4(self):
178         outFileName="MEDFileMesh4.med"
179         c=DataArrayDouble.New()
180         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 ];
181         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
182         c.setValues(coords,9,2)
183         c.setInfoOnComponent(0,"abcdef [km]")
184         c.setInfoOnComponent(1,"ghij [MW]")
185         m=MEDCouplingUMesh.New();
186         m.setMeshDimension(2);
187         m.allocateCells(5);
188         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
189         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
190         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
191         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
192         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
193         m.finishInsertingCells();
194         m.setCoords(c)
195         m.checkCoherency()
196         m1=MEDCouplingUMesh.New();
197         m1.setMeshDimension(1);
198         m1.allocateCells(3);
199         m1.insertNextCell(NORM_SEG2,2,[1,4])
200         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
201         m1.insertNextCell(NORM_SEG2,2,[3,6])
202         m1.finishInsertingCells();
203         m1.setCoords(c)
204         m1.checkCoherency()
205         m2=MEDCouplingUMesh.New();
206         m2.setMeshDimension(0);
207         m2.allocateCells(4);
208         m2.insertNextCell(NORM_POINT1,1,[1])
209         m2.insertNextCell(NORM_POINT1,1,[3])
210         m2.insertNextCell(NORM_POINT1,1,[2])
211         m2.insertNextCell(NORM_POINT1,1,[6])
212         m2.finishInsertingCells();
213         m2.setCoords(c)
214         m2.checkCoherency()
215         #
216         mm=MEDFileUMesh.New()
217         mm.setName("My2ndMEDCouplingMEDmesh")
218         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
219         mm.setCoords(c)
220         renumNode=DataArrayInt.New()
221         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
222         mm.setRenumFieldArr(1,renumNode)
223         mm.setMeshAtLevel(-1,m1,True);
224         mm.setMeshAtLevel(0,m,True);
225         mm.setMeshAtLevel(-2,m2,True);
226         mm.removeMeshAtLevel(-2)
227         mm.setMeshAtLevel(-2,m2,True);
228         # playing with groups
229         g1_2=DataArrayInt.New()
230         g1_2.setValues([2,3],2,1)
231         g1_2.setName("G1")
232         g2_2=DataArrayInt.New()
233         g2_2.setValues([2,0,3],3,1)
234         g2_2.setName("G2")
235         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
236         g1_1=DataArrayInt.New()
237         g1_1.setValues([0,2,1],3,1)
238         g1_1.setName("G1")
239         g2_1=DataArrayInt.New()
240         g2_1.setValues([0,2],2,1)
241         g2_1.setName("G2")
242         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
243         g1_N=DataArrayInt.New()
244         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
245         g1_N.setName("G1")
246         g2_N=DataArrayInt.New()
247         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
248         g2_N.setName("G2")
249         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
250         # check content of mm
251         t=mm.getGroupArr(0,"G1",True)
252         self.assertTrue(g1_2.isEqual(t));
253         t=mm.getGroupArr(0,"G2",True)
254         self.assertTrue(g2_2.isEqual(t));
255         t=mm.getGroupArr(-1,"G1",True)
256         self.assertTrue(g1_1.isEqual(t));
257         t=mm.getGroupArr(-1,"G2",True)
258         self.assertTrue(g2_1.isEqual(t));
259         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
260         #
261         mm.write(outFileName,2);
262         mm2=MEDFileMesh.New(outFileName)
263         res=mm.isEqual(mm2,1e-12)
264         self.assertTrue(res[0])
265         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
266         self.assertEqual(['Family_10','Family_11','Family_3','Family_4','Family_7'],l)
267         mm2.keepFamIdsOnlyOnLevs([3],[-1])
268         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
269             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
270             pass
271         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
272         self.assertEqual(['Family_10','Family_11','Family_12','Family_3','Family_4','Family_7'],l)
273         #
274         self.assertEqual([7,7,6],mm2.getFamilyFieldAtLevel(-1).getValues())
275         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,8)
276         self.assertEqual([7,8,6],mm2.getFamilyFieldAtLevel(-1).getValues())
277         self.assertTrue(not mm2.existsFamily("Family_8"))
278         mm2.createGroupOnAll(-1,"GrpOnAllFace")
279         self.assertTrue(mm2.existsFamily("Family_8"))
280         self.assertEqual(range(3),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
281         pass
282
283     #testing persistence of retrieved arrays
284     def testMEDMesh5(self):
285         fileName="Pyfile18.med"
286         mname="ExampleOfMultiDimW"
287         medmesh=MEDFileUMesh.New(fileName,mname)
288         m1_0=medmesh.getLevel0Mesh(True)
289         da1=medmesh.getFamilyFieldAtLevel(0)
290         del medmesh
291         self.assertEqual(20,m1_0.getNumberOfCells())
292         self.assertEqual(20,da1.getNumberOfTuples())
293         pass
294
295     def testMEDMesh6(self):
296         outFileName="MEDFileMesh5.med"
297         m=MEDFileCMesh.New()
298         m.setTime(-1,-1,2.3)
299         m1=MEDCouplingCMesh.New();
300         da=DataArrayDouble.New()
301         da.setValues([0.,1.,2.],3,1)
302         da.setInfoOnComponent(0,"XX [mm]")
303         m1.setCoordsAt(0,da)
304         da=DataArrayDouble.New()
305         da.setValues([0.,1.2],2,1)
306         da.setInfoOnComponent(0,"YY [km]")
307         m1.setCoordsAt(1,da)
308         da=DataArrayDouble.New()
309         da.setValues([0.,1.3],2,1)
310         da.setInfoOnComponent(0,"ZZ [um]")
311         m1.setCoordsAt(2,da)
312         m.setMesh(m1)
313         m.setName("myFirstCartMesh")
314         m.setDescription("mmmmpppppppp")
315         m.setTimeValue(2.3)
316         m.setTimeUnit("ms")
317         da=DataArrayInt.New()
318         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
319         m.setFamilyFieldArr(1,da)
320         m.setFamilyId("family1",1)
321         da=m.getFamilyArr(1,"family1")
322         expected1=[2,4,9]
323         self.assertEqual(expected1,da.getValues())
324         m.write(outFileName,2);
325         mm=MEDFileMesh.New(outFileName)
326         self.assertTrue(m.isEqual(mm,1e-12)[0])
327         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
328         m2=mm.getMesh()
329         tt=m.getTime()
330         m1.setTime(tt[2],tt[0],tt[1])
331         m1.setName(m.getName())
332         m1.setTimeUnit(m.getTimeUnit())
333         m1.setDescription(m.getDescription())
334         self.assertTrue(m2.isEqual(m1,1e-12));
335         pass
336
337     def testMEDMesh7(self):
338         fileName="Pyfile24.med"
339         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
340         m=MEDFileUMesh.New()
341         m.setCoords(m2.getCoords())
342         m.setMeshAtLevel(0,m2)
343         m.setMeshAtLevel(-1,m1)
344         m.setMeshAtLevel(-2,m0)
345         m.setFamilyFieldArr(0,f2)
346         m.setFamilyFieldArr(-1,f1)
347         m.setFamilyFieldArr(-2,f0)
348         m.setFamilyFieldArr(1,p)
349         m.setRenumFieldArr(0,n2)
350         m.setRenumFieldArr(-1,n1)
351         m.setRenumFieldArr(-2,n0)
352         nbOfFams=len(fns)
353         for i in xrange(nbOfFams):
354             m.addFamily(fns[i],fids[i])
355             pass
356         nbOfGrps=len(grpns)
357         for i in xrange(nbOfGrps):
358             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
359             pass
360         m.setName(m2.getName())
361         m.setDescription(m2.getDescription())
362         #
363         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
364         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
365         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
366         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
367         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
368         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
369         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
370         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
371         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
372         #
373         m.write(fileName,2)
374         pass
375
376     def funcToTestDelItem(self,ff):
377         del ff[[0.02,(3,4)]]
378         pass
379
380     #emulation of pointe.med file.
381     def testMEDField1(self):
382         mm=MEDFileMesh.New("Pyfile17.med")
383         mm.write("Pyfile17_bis.med",2)
384         ff=MEDFileFieldMultiTS("Pyfile17.med")
385         tsExpected=[[1,2],[3,4],[5,6]]
386         for pos,f1ts in enumerate(ff):
387             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
388             self.assertEqual(type(f1ts),MEDFileField1TS)
389             pass
390         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
391         self.assertEqual([3,4],ff[1].getTime()[:-1])
392         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
393         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
394         ff.write("Pyfile17_bis.med",0)
395         #
396         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
397         self.assertEqual([(1,2),(3,4),(5,6)],ts)
398         self.funcToTestDelItem(ff)
399         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
400         self.assertEqual([(1,2)],ts)
401         pass
402
403     #profiles
404     def testMEDField2(self):
405         mm=MEDFileMesh.New("Pyfile19.med")
406         mm.write("Pyfile19_bis.med",2)
407         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
408         ff.write("Pyfile19_bis.med",0)
409         self.assertEqual([('tyty','mm'),('uiop','MW')],MEDLoader.GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
410         pass
411
412     #gauss points
413     def testMEDField3(self):
414         mm=MEDFileMesh.New("Pyfile13.med")
415         mm.write("Pyfile13_bis.med",2)
416         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
417         ff.write("Pyfile13_bis.med",0)
418         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
419         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
420         f2=MEDLoader.ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
421         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
422         pass
423
424     #gauss NE
425     def testMEDField4(self):
426         mm=MEDFileMesh.New("Pyfile14.med")
427         mm.write("Pyfile14_bis.med",2)
428         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
429         ff.write("Pyfile14_bis.med",0)
430         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
431         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
432         f2=MEDLoader.ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
433         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
434         pass
435
436     # MEDField get/set on pointe.med
437     def testMEDField5(self):
438         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
439         f=ff.getFieldAtLevel(ON_CELLS,0)
440         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
441         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
442         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
443         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
444         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
445         # no with renumbering
446         f=ff.getFieldAtLevel(ON_CELLS,0,1)
447         f2=MEDLoader.ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
448         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
449         f=ff.getFieldAtLevel(ON_CELLS,0,3)
450         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
451         f=ff.getFieldAtLevel(ON_CELLS,0,2)
452         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
453         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
454         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
455         pass
456
457     # MEDField get/set on profiles nodes
458     def testMEDField6(self):
459         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
460         its=ff.getIterations()
461         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
462         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
463         f2=MEDLoader.ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
464         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
465         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
466         its=ff.getIterations()
467         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
468         f2=MEDLoader.ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
469         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
470         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
471         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
472         pass
473
474     # MEDField get/set on profiles cells
475     def testMEDField7(self):
476         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
477         its=ff.getIterations()
478         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
479         f2=MEDLoader.ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
480         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
481         pass
482
483     #first test of assignation. No profile and types sorted by type.
484     def testMEDField8(self):
485         fname="Pyfile25.med"
486         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
487         m1=f1.getMesh()
488         mm1=MEDFileUMesh.New()
489         mm1.setCoords(m1.getCoords())
490         mm1.setMeshAtLevel(0,m1)
491         mm1.setName(m1.getName())
492         mm1.write(fname,2)
493         ff1=MEDFileField1TS.New()
494         ff1.setFieldNoProfileSBT(f1)
495         ff1.write(fname,0)
496         f2=MEDLoader.ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
497         itt,orr,ti=ff1.getTime()
498         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
499         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
500         ff1.setTime(3,4,2.3)
501         itt,orr,ti=ff1.getTime()
502         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
503         da,infos=ff1.getUndergroundDataArrayExt()
504         f2.getArray().setName(da.getName())#da has the same name than f2
505         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
506         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
507         #
508         fname="Pyfile26.med"
509         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
510         m1=f1.getMesh()
511         mm1=MEDFileUMesh.New()
512         mm1.setCoords(m1.getCoords())
513         mm1.setMeshAtLevel(0,m1)
514         mm1.setName(m1.getName())
515         mm1.write(fname,2)
516         ff1=MEDFileField1TS.New()
517         ff1.setFieldNoProfileSBT(f1)
518         nv=1456.
519         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
520         ff1.write(fname,0)
521         f2=MEDLoader.ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
522         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
523         f1.getArray().setIJ(0,0,nv)
524         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
525         #
526         fname="Pyfile27.med"
527         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
528         m1=f1.getMesh()
529         mm1=MEDFileUMesh.New()
530         mm1.setCoords(m1.getCoords())
531         mm1.setMeshAtLevel(0,m1)
532         mm1.setName(m1.getName())
533         mm1.write(fname,2)
534         ff1=MEDFileField1TS.New()
535         ff1.setFieldNoProfileSBT(f1)
536         ff1.write(fname,0)
537         f2=MEDLoader.ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
538         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
539         da,infos=ff1.getUndergroundDataArrayExt()
540         f2.getArray().setName(da.getName())#da has the same name than f2
541         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
542         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
543         #
544         fname="Pyfile28.med"
545         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
546         m1=f1.getMesh()
547         mm1=MEDFileUMesh.New()
548         mm1.setCoords(m1.getCoords())
549         mm1.setMeshAtLevel(0,m1)
550         mm1.setName(m1.getName())
551         mm1.write(fname,2)
552         ff1=MEDFileField1TS.New()
553         ff1.setFieldNoProfileSBT(f1)
554         ff1.write(fname,0)
555         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
556         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
557         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
558         sbt=ff2.getFieldSplitedByType2()
559         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
560         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
561         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
562         self.assertEqual(6,loc1.getNumberOfPointsInCells())
563         self.assertEqual(3,loc1.getNumberOfGaussPoints())
564         self.assertEqual(2,loc1.getDimension())
565         da,infos=ff2.getUndergroundDataArrayExt()
566         f2.getArray().setName(da.getName())#da has the same name than f2
567         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
568         self.assertEqual(53,da.getNumberOfTuples())
569         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)
570         #
571         pass
572     
573     def testMEDFileData1(self):
574         fname="Pyfile29.med"
575         d=MEDFileData.New()
576         #
577         m1=MEDLoaderDataForTest.build1DMesh_1()
578         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
579         mmm1=MEDFileMeshMultiTS.New() ;
580         mmm1.setOneTimeStep(mm1)
581         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
582         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
583         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
584         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
585         d.setMeshes(ms)
586         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
587             self.assertEqual(name,mmm.getName())
588             self.assertEqual(type(mmm),MEDFileUMesh)
589             pass
590         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
591         #
592         ff1=MEDFileFieldMultiTS.New()
593         ff21=MEDFileFieldMultiTS.New()
594         ff22=MEDFileFieldMultiTS.New()
595         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
596         f1.getArray().setInfoOnComponent(0,"power [kW]")
597         ff1.appendFieldNoProfileSBT(f1)
598         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
599         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
600         ff21.appendFieldNoProfileSBT(f21)
601         f22=f21.deepCpy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
602         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
603         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
604         ff22.appendFieldNoProfileSBT(f22)
605         fs=MEDFileFields.New()
606         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
607         for name,fmts in zip(["f1","f21","f22"],fs):
608             self.assertEqual(name,fmts.getName())
609             pass
610         d.setFields(fs)
611         #
612         fname2="Pyfile29_2.med"
613         d.write(fname2,2)
614         #
615         d2=MEDFileData.New(fname2)
616         self.assertEqual(2,d2.getNumberOfMeshes())
617         self.assertEqual(3,d2.getNumberOfFields())
618         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
619         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
620         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
621         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
622         self.assertTrue(m1.isEqual(m1bis,1e-12))
623         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
624         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
625         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
626         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
627         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
628         pass
629     
630     def testMEDField9(self):
631         # first test field profile WR. Full type but with some type missing
632         fname="Pyfile30.med"
633         m1=MEDLoaderDataForTest.build2DMesh_3()
634         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
635         mm1.write(fname,2)
636         ff1=MEDFileField1TS.New()
637         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
638         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
639         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.
640         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
641         #
642         ff1.setFieldProfile(f1,mm1,0,da)
643         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
644         ff1.write(fname,0)
645         #
646         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
647         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
648         self.assertTrue(vals.isEqual(d,1e-14))
649         #
650         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
651         sbt=ff2.getFieldSplitedByType2()
652         self.assertEqual(3,sbt[0][0])#TRI3
653         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
654         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
655         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
656         self.assertEqual(4,sbt[1][0])#QUAD4
657         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
658         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
659         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
660         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
661         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
662         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
663         self.assertTrue(vals.isEqual(d,1e-14))
664         pass
665     
666     def testMEDField10(self):
667         fname="Pyfile31.med"
668         m1=MEDLoaderDataForTest.build2DMesh_1()
669         m1.renumberCells([0,1,4,2,3,5],False)
670         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
671         mm1.write(fname,2)
672         ff1=MEDFileFieldMultiTS.New()
673         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
674         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
675         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.
676         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
677         #
678         ff1.appendFieldProfile(f1,mm1,0,da)
679         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
680         ff1.appendFieldProfile(f1,mm1,0,da)
681         ff1.write(fname,0)
682         #
683         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
684         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
685         self.assertTrue(vals.isEqual(e,1e-14))
686         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
687         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
688         self.assertTrue(vals.isEqual(d,1e-14))
689         #
690         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
691         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
692         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
693         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
694         self.assertTrue(vals.isEqual(e,1e-14))
695         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
696         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
697         self.assertTrue(vals.isEqual(d,1e-14))
698         pass
699     
700     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
701     def testMEDField11(self):
702         fname="Pyfile32.med"
703         m1=MEDLoaderDataForTest.build2DMesh_1()
704         m1.renumberCells([0,1,4,2,3,5],False)
705         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
706         mm1.write(fname,2)
707         ff1=MEDFileField1TS.New()
708         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
709         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
710         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.
711         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
712         #
713         ff1.setFieldProfile(f1,mm1,0,da)
714         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
715         ff1.write(fname,0)
716         #
717         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
718         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
719         self.assertTrue(vals.isEqual(d,1e-14))
720         ## #
721         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
722         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
723         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
724         self.assertTrue(vals.isEqual(d,1e-14))
725         pass
726
727     def testMEDField12(self):
728         fname="Pyfile33.med"
729         m1=MEDLoaderDataForTest.build2DMesh_1()
730         m1.renumberCells([0,1,4,2,3,5],False)
731         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
732         mm1.write(fname,2)
733         ff1=MEDFileFieldMultiTS.New()
734         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
735         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
736         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.
737         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
738         #
739         ff1.appendFieldProfile(f1,mm1,0,da)
740         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
741         ff1.appendFieldProfile(f1,mm1,0,da)
742         ff1.write(fname,0)
743         #
744         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
745         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
746         self.assertTrue(vals.isEqual(e,1e-14))
747         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
748         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
749         self.assertTrue(vals.isEqual(d,1e-14))
750         #
751         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
752         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
753         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
754         self.assertTrue(vals.isEqual(e,1e-14))
755         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
756         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
757         self.assertTrue(vals.isEqual(d,1e-14))
758         pass
759
760     def testMEDField13(self):
761         fname="Pyfile34.med"
762         m1=MEDLoaderDataForTest.build2DMesh_1()
763         m1.renumberCells([0,1,4,2,3,5],False)
764         tmp=m1.getName();
765         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
766         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
767         mm1.write(fname,2)
768         ff1=MEDFileField1TS.New()
769         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
770         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
771         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.
772         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
773         #
774         ff1.setFieldProfile(f1,mm1,0,da)
775         ff1.write(fname,0)
776         #
777         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
778         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
779         self.assertTrue(vals.isEqual(d,1e-14))
780         #
781         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
782         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
783         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
784         self.assertTrue(vals.isEqual(d,1e-14))
785         pass
786
787     def testMEDField14(self):
788         fname="Pyfile35.med"
789         m1=MEDLoaderDataForTest.build2DMesh_1()
790         m1.renumberCells([0,1,4,2,3,5],False)
791         tmp=m1.getName();
792         m1=m1.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
793         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
794         mm1.write(fname,2)
795         ff1=MEDFileFieldMultiTS.New()
796         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
797         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
798         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.
799         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
800         #
801         ff1.appendFieldProfile(f1,mm1,0,da)
802         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
803         ff1.appendFieldProfile(f1,mm1,0,da)
804         ff1.write(fname,0)
805         #
806         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
807         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
808         self.assertTrue(vals.isEqual(d,1e-14))
809         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
810         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
811         self.assertTrue(vals.isEqual(e,1e-14))
812         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
813         #
814         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
815         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
816         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
817         self.assertTrue(vals.isEqual(d,1e-14))
818         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
819         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
820         self.assertTrue(vals.isEqual(e,1e-14))
821         pass
822     # 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.
823     # 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
824     # 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 !
825     def testMEDField15(self):
826         fname="Pyfile36.med"
827         m0=MEDLoaderDataForTest.build2DMesh_1()
828         m0.renumberCells([0,1,4,2,3,5],False)
829         tmp=m0.getName();
830         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
831         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832         ff1=MEDFileField1TS.New()
833         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
834         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
835         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.
836         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
837         #
838         ff1.setFieldProfile(f1,mm1,0,da)
839         m1=m0.buildPartOfMySelf(range(5),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
840         mm1.write(fname,2)
841         ff1.write(fname,0)
842         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
843         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
844         self.assertTrue(p1.isIdentity())
845         self.assertEqual(5,p1.getNumberOfTuples())
846         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
847         pass
848     # Test for getFieldAtTopLevel method
849     def testMEDField16(self):
850         fname="Pyfile37.med"
851         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
852         m1=f1.getMesh()
853         mm1=MEDFileUMesh.New()
854         mm1.setCoords(m1.getCoords())
855         mm1.setMeshAtLevel(0,m1)
856         mm1.setName(m1.getName())
857         ff1=MEDFileField1TS.New()
858         ff1.setFieldNoProfileSBT(f1)
859         m2=m1.buildDescendingConnectivity()[0]
860         m2.sortCellsInMEDFileFrmt()
861         m2.setName(m1.getName())
862         mm1.setMeshAtLevel(-1,m2)
863         mm1.write(fname,2)
864         f2=m2.getMeasureField(True)
865         dd=DataArrayDouble.New()
866         dd.alloc(f2.getArray().getNumberOfTuples(),3)
867         dd[:,0]=f2.getArray()
868         dd[:,1]=2*f2.getArray()
869         dd[:,2]=3*f2.getArray()
870         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
871         f2.setArray(dd)
872         f2.copyTinyStringsFrom(f1)
873         f2.copyTinyAttrFrom(f1)
874         ff1.setFieldNoProfileSBT(f2)
875         ff1.write(fname,0)
876         # Reading Pyfile37.med
877         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
878         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
879         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
880         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
881         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
882         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
883         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
884         # More complex
885         fname="Pyfile38.med"
886         mm1.write(fname,2)
887         ff1=MEDFileField1TS.New()
888         ff1.setFieldNoProfileSBT(f2)
889         ff1.write(fname,0)
890         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
891         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
892         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
893         pass
894
895     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
896     def testMEDField17(self):
897         fname="Pyfile39.med"
898         m1=MEDLoaderDataForTest.build2DMesh_1()
899         m1.renumberCells([0,1,4,2,3,5],False)
900         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
901         mm1.write(fname,2)
902         ffs=MEDFileFields.New()
903         ff1=MEDFileFieldMultiTS.New()
904         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
905         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
906         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.
907         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
908         #
909         ff1.appendFieldProfile(f1,mm1,0,da)
910         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
911         ff1.appendFieldProfile(f1,mm1,0,da)
912         ffs.resize(1)
913         ffs.setFieldAtPos(0,ff1)
914         ffs.write(fname,0)
915         #
916         ffsr=MEDFileFields.New(fname)
917         ff3=ffsr.getFieldAtPos(0)
918         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
919         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
920         pass
921
922     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
923     def testMEDField18(self):
924         fname="Pyfile40.med"
925         m1=MEDLoaderDataForTest.build2DMesh_1()
926         m1.renumberCells([0,1,4,2,3,5],False)
927         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
928         mm1.write(fname,2)
929         ffs=MEDFileFields.New()
930         ff1=MEDFileFieldMultiTS.New()
931         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
932         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
933         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.
934         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
935         #
936         ff1.appendFieldProfile(f1,mm1,0,da)
937         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
938         ff1.appendFieldProfile(f1,mm1,0,da)
939         ffs.pushField(ff1)
940         ffs.write(fname,0)
941         #
942         ffsr=MEDFileFields.New(fname)
943         ff3=ffsr.getFieldAtPos(0)
944         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
945         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
946         pass
947
948     def testMEDFieldBug1(self):
949         fname="Pyfile13.med"
950         d=MEDFileData.New(fname)
951         self.assertEqual(('GP_MyFirstFieldOnGaussPoint0', 'GP_MyFirstFieldOnGaussPoint1', 'GP_MyFirstFieldOnGaussPoint2'),d.getFields().getFieldAtPos(0).getLocs())
952         pass
953
954     def testMEDMesh8(self):
955         m=MEDLoaderDataForTest.build1DMesh_1()
956         m.convertQuadraticCellsToLinear()
957         mm=MEDFileUMesh.New()
958         mm.setMeshAtLevel(0,m)
959         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
960         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
961         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
962         mm.setGroupsAtLevel(0,[g1,g2],False)
963         self.assertEqual(('g1','g2'),mm.getGroupsNames())
964         self.assertEqual(('Family_2','Family_3'),mm.getFamiliesNames())
965         self.assertEqual(('Family_2',),mm.getFamiliesOnGroup('g1'))
966         self.assertEqual(('Family_3',),mm.getFamiliesOnGroup('g2'))
967         mm.assignFamilyNameWithGroupName()
968         self.assertEqual(('g1','g2'),mm.getGroupsNames())
969         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
970         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
971         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
972         #
973         mm=MEDFileUMesh.New()
974         mm.setMeshAtLevel(0,m)
975         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
976         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
977         self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
978         self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
979         self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
980         self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
981         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
982         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
983         self.assertEqual(('Family_2', 'Family_4', 'Family_5'),mm.getFamiliesNames())
984         self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
985         self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
986         self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
987         mm.changeFamilyId(5,6)
988         g=mm.getGroupArr(0,"g3")
989         self.assertTrue(g.isEqual(g3));
990         g=mm.getGroupArr(0,"g2")
991         self.assertTrue(g.isEqual(g2));
992         g=mm.getGroupArr(0,"g1")
993         self.assertTrue(g.isEqual(g1));
994         pass
995     
996     # bug detected by gauthier
997     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
998         fname="Pyfile41.med"
999         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1000         m1=f1.getMesh()
1001         mm1=MEDFileUMesh.New()
1002         mm1.setCoords(m1.getCoords())
1003         mm1.setMeshAtLevel(0,m1)
1004         mm1.write(fname,2)
1005         ff1=MEDFileField1TS.New()
1006         ff1.setFieldNoProfileSBT(f1)
1007         ff1.write(fname,0)
1008         # writing mesh1 and field1, now creation of mesh2 and field2
1009         f2=f1.deepCpy()
1010         m2=f2.getMesh()
1011         m2.translate([0.5,0.6,0.7])
1012         m2.setName("3DSurfMesh_2")
1013         f2.getArray()[:]*=2.
1014         f2.setName("VectorFieldOnCells2")
1015         mm2=MEDFileUMesh.New()
1016         mm2.setCoords(m2.getCoords())
1017         mm2.setMeshAtLevel(0,m2)
1018         mm2.write(fname,0)
1019         ff2=MEDFileField1TS.New()
1020         ff2.setFieldNoProfileSBT(f2)
1021         ff2.write(fname,0)
1022         #
1023         f3=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1024         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1025         f4=MEDLoader.ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1026         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1027         pass
1028
1029     def testMEDLoaderMultiLevelCellField1(self):
1030         fname="Pyfile42.med"
1031         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1032         m=MEDFileUMesh.New()
1033         m.setCoords(m2.getCoords())
1034         m.setMeshAtLevel(0,m2)
1035         m.setMeshAtLevel(-1,m1)
1036         m.setMeshAtLevel(-2,m0)
1037         m.write(fname,2)
1038         #
1039         FieldName1="Field1"
1040         compNames1=["comp1","comp2","comp3"]
1041         ff1=MEDFileField1TS.New()
1042         da2=DataArrayDouble.New()
1043         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1044         da2.iota(7.)
1045         da2.rearrange(len(compNames1))
1046         da2.setInfoOnComponents(compNames1)
1047         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkCoherency()
1048         ff1.setFieldNoProfileSBT(f2)
1049         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1050         da0=DataArrayDouble.New()
1051         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1052         da0.iota(190.)
1053         da0.rearrange(len(compNames1))
1054         da0.setInfoOnComponents(compNames1)
1055         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1056         ff1.setFieldNoProfileSBT(f0)
1057         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1058         da1=DataArrayDouble.New()
1059         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1060         da1.iota(90.)
1061         da1.rearrange(len(compNames1))
1062         da1.setInfoOnComponents(compNames1)
1063         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1064         ff1.setFieldNoProfileSBT(f1)
1065         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1066         #
1067         ff1.write(fname,0)
1068         #
1069         FieldName2="Field2"
1070         compNames2=["comp11","comp22"]
1071         ff2=MEDFileField1TS.New()
1072         da0=DataArrayDouble.New()
1073         da0.alloc(m0.getNumberOfCells()*2,1)
1074         da0.iota(-190.)
1075         da0.rearrange(2)
1076         da0.setInfoOnComponents(compNames2)
1077         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkCoherency()
1078         ff2.setFieldNoProfileSBT(f0)
1079         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1080         da1=DataArrayDouble.New()
1081         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1082         da1.iota(-90.)
1083         da1.rearrange(len(compNames2))
1084         da1.setInfoOnComponents(compNames2)
1085         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkCoherency()
1086         ff2.setFieldNoProfileSBT(f1)
1087         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1088         #
1089         ff2.write(fname,0)
1090         #
1091         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1092         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1093         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1094         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1095         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1096         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1097         pass
1098
1099     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1100         fname="Pyfile43.med"
1101         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1102         m=MEDFileUMesh.New()
1103         m.setMeshAtLevel(0,m2)
1104         m.setMeshAtLevel(-1,m1)
1105         m.setMeshAtLevel(-2,m0)
1106         f=MEDFileField1TS.New()
1107         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1108         ff.setName("NodeFieldPfl")
1109         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1110         ff.setArray(arr)
1111         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1112         f.setFieldProfile(ff,m,-2,pfl)
1113         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1114         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1115         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1116         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1117         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1118         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1119         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1120         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1121         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1122         expected1=[1.,10.,100.,2.,20.,200.]
1123         nodeCoordsWithValue1=[10.,2.5,0.]
1124         nodeCoordsWithValue2=[10.,3.75,0.]
1125         for i in xrange(3):
1126             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1127             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1128             pass
1129         for i in xrange(6):
1130             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1131             pass
1132         del tes0
1133         #
1134         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1135         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1136         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1137         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1138         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1139         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1140         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1141         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1142         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1143         for i in xrange(6):
1144             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1145             pass
1146         m.write(fname,2)
1147         f.write(fname,0)
1148         #
1149         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1150         f=MEDFileField1TS.New()
1151         f.setFieldProfile(ff,m,-2,pfl)
1152         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1153         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1154         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1155         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1156         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1157         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1158         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1159         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1160         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1161         expected2=[2.,20.,200.,1.,10.,100.]
1162         for i in xrange(3):
1163             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1164             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1165             pass
1166         for i in xrange(6):
1167             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1168             pass
1169         #
1170         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1171         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1172         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1173         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1174         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1175         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1176         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1177         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1178         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1179         for i in xrange(6):
1180             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1181             pass
1182         pass
1183
1184     def testDuplicateNodesOnM1Group1(self):
1185         fname="Pyfile44.med"
1186         m=MEDCouplingCMesh.New()
1187         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1188         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1189         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1190         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1191         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1192         m2.setName(m.getName())
1193         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1194         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1195         mm=MEDFileUMesh.New()
1196         mm.setMeshAtLevel(0,m)
1197         mm.setMeshAtLevel(-1,m2)
1198         mm.setGroupsAtLevel(-1,[grp,grp2])
1199         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1200         mm.setGroupsAtLevel(1,[grpNode])
1201         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1202         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1203         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1204         #
1205         self.assertEqual(30,mm.getNumberOfNodes())
1206         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1207         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1208         #
1209         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1210         self.assertEqual([15,16,17],nodes.getValues());
1211         self.assertEqual([7,8,9],cells.getValues());
1212         self.assertEqual([12,13,14],cells2.getValues());
1213         self.assertEqual(33,mm.getNumberOfNodes())
1214         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1215         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1216         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1217         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1218         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
1219         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1220         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
1221         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1222         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])
1223         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1224         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1225         #
1226         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1227         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1228         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1229         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1230         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1231         mm.write(fname,2)
1232         pass
1233
1234     def testDuplicateNodesOnM1Group2(self):
1235         fname="Pyfile45.med"
1236         m=MEDCouplingCMesh.New()
1237         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1238         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1239         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1240         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1241         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1242         m2.setName(m.getName())
1243         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1244         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1245         mm=MEDFileUMesh.New()
1246         mm.setMeshAtLevel(0,m)
1247         mm.setMeshAtLevel(-1,m2)
1248         mm.setGroupsAtLevel(-1,[grp,grp2])
1249         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1250         mm.setGroupsAtLevel(1,[grpNode])
1251         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1252         ref1=[4,9,8,14,15,4,10,9,15,16]
1253         ref2=[4,9,8,14,30,4,10,9,30,16]
1254         #
1255         self.assertEqual(30,mm.getNumberOfNodes())
1256         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1257         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1258         #
1259         nodes,cells,cells2=mm.duplicateNodesOnM1Group("Grp")
1260         self.assertEqual([15],nodes.getValues());
1261         self.assertEqual([7,8],cells.getValues());
1262         self.assertEqual([12,13],cells2.getValues());
1263         self.assertEqual(31,mm.getNumberOfNodes())
1264         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1265         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1266         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1267         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1268         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1269         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1270         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1271         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1272         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1273         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1274         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1275         #
1276         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1277         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1278         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1279         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1280         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1281         mm.write(fname,2)       
1282         pass
1283
1284     def testBasicConstructors(self):
1285         fname="Pyfile18.med"
1286         m=MEDFileMesh(fname)
1287         m=MEDFileMesh(fname,"ExampleOfMultiDimW",-1,-1)
1288         m=MEDFileMesh(fname)
1289         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1290         m=MEDFileUMesh(fname)
1291         m=MEDFileUMesh()
1292         self.testMEDMesh6()
1293         m=MEDFileCMesh("MEDFileMesh5.med")
1294         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1295         m=MEDFileCMesh()
1296         m=MEDFileMeshMultiTS()
1297         m=MEDFileMeshMultiTS(fname)
1298         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1299         m=MEDFileMeshes()
1300         m=MEDFileMeshes(fname)
1301         m=MEDFileField1TS()
1302         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1303         m=MEDFileFieldMultiTS()
1304         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1305         m=MEDFileFields()
1306         m=MEDFileFields(fname)
1307         m=MEDFileData()
1308         m=MEDFileData(fname)
1309         #
1310         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1311         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1312         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1313         m=MEDCouplingCMesh()
1314         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1315         m=MEDCouplingFieldTemplate(ON_NODES)
1316         m=MEDCouplingMultiFields([])
1317         m=MEDCouplingFieldOverTime([])
1318         pass
1319
1320     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1321     def testBugSemiPartialField(self):
1322         fname="Pyfile46.med"
1323         m=MEDLoaderDataForTest.build2DMesh_3()
1324         m=m[:10] ; m.setName("mesh")
1325         f=m.getMeasureField(ON_CELLS)
1326         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1327         f.setTime(5.5,3,4)
1328         f.setName("SemiPartialField")
1329         #
1330         f1=f[:6] ; f1.getMesh().setName(m.getName())
1331         f2=f[6:] ; f2.getMesh().setName(m.getName())
1332         #
1333         mm=MEDFileUMesh.New()
1334         mm.setMeshAtLevel(0,m)
1335         ff=MEDFileField1TS.New()
1336         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1337         mm.write(fname,2)
1338         ff.write(fname,0)
1339         #
1340         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1341         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1342         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1343         #
1344         fread.checkCoherency()
1345         fread2.checkCoherency()
1346         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1347         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1348         pass
1349
1350     def testUnPolyze1(self):
1351         fname="Pyfile47.med"
1352         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1353         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]
1354         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1355         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]]))
1356         mm.write(fname,2)
1357         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1358         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1359         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1360         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1361         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1362         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1363         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1364         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1365         # to test
1366         mm.setRenumFieldArr(0,None)
1367         mm.setFamilyFieldArr(-1,None)
1368         pass
1369
1370     def testUnPolyze2(self):
1371         fname="Pyfile48.med"
1372         mfd=MEDFileData.New()
1373         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1374         meshes=MEDFileMeshes.New()
1375         meshes.pushMesh(mm)
1376         mfd.setMeshes(meshes)
1377         fields=MEDFileFields.New()
1378         mfd.setFields(fields)
1379         ff=MEDFileFieldMultiTS.New()
1380         fields.pushField(ff)
1381         #
1382         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1383         f0_0.setTime(9.5,3,4)
1384         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1385         f0_0.setArray(da)
1386         f0_0.setMesh(mm.getMeshAtLevel(0))
1387         ff.appendFieldNoProfileSBT(f0_0)
1388         ff0=ff.getTimeStepAtPos(0)
1389         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1390         f0_1.setTime(9.5,3,4)
1391         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1392         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1393         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1394         f0_1.setArray(da)
1395         ff0.setFieldProfile(f0_1,mm,0,pfl)
1396         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1397         f0_2.setTime(9.5,3,4)
1398         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1399         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
1400         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1401         f0_2.setArray(da)
1402         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1403         mfd.getFields().shallowCpyGlobs(ff0)
1404         #
1405         mfd.unPolyzeMeshes()
1406         #
1407         fmts=mfd.getFields()[0]
1408         self.assertEqual(fmts.getNumberOfTS(),1)
1409         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1410         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1411         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))])
1412         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1413         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1414         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1415         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1416         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1417         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1418         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1419         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))
1420         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1421         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1422         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1423         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1424         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1425         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])
1426         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1427         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1428         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1429         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])
1430         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1431         #
1432         mfd.write(fname,2)
1433         pass
1434     pass
1435
1436 unittest.main()