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