Salome HOME
Merge V8_3_BR branch.
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016  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, or (at your option) any later version.
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 (EDF R&D)
21
22 from MEDLoader import *
23 import unittest
24 import platform
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest
27 from distutils.version import LooseVersion
28
29 import sys
30 if sys.version_info.major < 3:
31     import cPickle as pickle
32 else:
33     import pickle
34
35 class MEDLoaderTest3(unittest.TestCase):
36     def testMEDMesh1(self):
37         fileName="Pyfile18.med"
38         mname="ExampleOfMultiDimW"
39         medmesh=MEDFileMesh.New(fileName,mname)
40         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
41         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
42         m1_0=medmesh.getLevel0Mesh(True)
43         m1_1=ReadUMeshFromFile(fileName,mname,0)
44         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
45         m2_0=medmesh.getLevelM1Mesh(True)
46         m2_1=ReadUMeshFromFile(fileName,mname,-1)
47         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
48         pass
49
50     def testMEDMesh2(self):
51         fileName="Pyfile10.med"
52         mname="3DToto"
53         outFileName="MEDFileMesh1.med"
54         medmesh=MEDFileUMesh.New(fileName,mname)
55         self.assertEqual((0,),medmesh.getNonEmptyLevels())
56         m1_0=medmesh.getLevel0Mesh(True)
57         m1_1=ReadUMeshFromFile(fileName,mname,0)
58         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
59         g1_0=medmesh.getGroup(0,"mesh2",True)
60         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
61         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
62         g1_0=medmesh.getGroup(0,"mesh3",True)
63         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
64         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
65         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
66         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
67         g1_1.setName(g1_0.getName())
68         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
69         g1_0=medmesh.getFamily(0,"Family_-3",True)
70         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
71         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
72         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
73         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
74         g1_1.setName(g1_0.getName())
75         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
76         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
77         medmesh.write(outFileName,2);
78         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
79         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
80         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
81         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
82         famn=medmesh.getFamilyNameGivenId(0)
83         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
84         #without renum
85         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
86         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
87         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
88         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
89         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
90         pass
91
92     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
93     def testMEDMesh3(self):
94         outFileName="MEDFileMesh3.med"
95         c=DataArrayDouble.New()
96         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 ];
97         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
98         c.setValues(coords,9,2)
99         m=MEDCouplingUMesh.New();
100         m.setMeshDimension(2);
101         m.allocateCells(5);
102         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
103         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
104         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
105         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
106         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
107         m.finishInsertingCells();
108         m.setCoords(c)
109         m.checkConsistencyLight()
110         m1=MEDCouplingUMesh.New();
111         m1.setMeshDimension(1);
112         m1.allocateCells(3);
113         m1.insertNextCell(NORM_SEG2,2,[1,4])
114         m1.insertNextCell(NORM_SEG2,2,[3,6])
115         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
116         m1.finishInsertingCells();
117         m1.setCoords(c)
118         m1.checkConsistencyLight()
119         m2=MEDCouplingUMesh.New();
120         m2.setMeshDimension(0);
121         m2.allocateCells(4);
122         m2.insertNextCell(NORM_POINT1,1,[1])
123         m2.insertNextCell(NORM_POINT1,1,[3])
124         m2.insertNextCell(NORM_POINT1,1,[2])
125         m2.insertNextCell(NORM_POINT1,1,[6])
126         m2.finishInsertingCells();
127         m2.setCoords(c)
128         m2.checkConsistencyLight()
129         #
130         mm=MEDFileUMesh.New()
131         self.assertTrue(mm.getUnivNameWrStatus())
132         mm.setName("MyFirstMEDCouplingMEDmesh")
133         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
134         mm.setCoords(c)
135         mm.setMeshAtLevel(-1,m1);
136         mm.setMeshAtLevel(0,m);
137         mm.setMeshAtLevel(-2,m2);
138         # playing with groups
139         g1_2=DataArrayInt.New()
140         g1_2.setValues([1,3],2,1)
141         g1_2.setName("G1")
142         g2_2=DataArrayInt.New()getCellsContainingPoint
143         g2_2.setValues([1,2,3],3,1)
144         g2_2.setName("G2")
145         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
146         g1_1=DataArrayInt.New()
147         g1_1.setValues([0,1,2],3,1)
148         g1_1.setName("G1")
149         g2_1=DataArrayInt.New()
150         g2_1.setValues([0,2],2,1)
151         g2_1.setName("G2")
152         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
153         g1_N=DataArrayInt.New()
154         g1_N.setValues(list(range(8)),8,1)
155         g1_N.setName("G1")
156         g2_N=DataArrayInt.New()
157         g2_N.setValues(list(range(9)),9,1)
158         g2_N.setName("G2")
159         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
160         mm.createGroupOnAll(0,"GrpOnAllCell")
161         # check content of mm
162         t=mm.getGroupArr(0,"G1",False)
163         self.assertTrue(g1_2.isEqual(t));
164         t=mm.getGroupArr(0,"G2",False)
165         self.assertTrue(g2_2.isEqual(t));
166         t=mm.getGroupArr(-1,"G1",False)
167         self.assertTrue(g1_1.isEqual(t));
168         t=mm.getGroupArr(-1,"G2",False)
169         self.assertTrue(g2_1.isEqual(t));
170         t=mm.getGroupArr(1,"G1",False)
171         self.assertTrue(g1_N.isEqual(t));
172         t=mm.getGroupArr(1,"G2",False)
173         self.assertTrue(g2_N.isEqual(t));
174         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
175         t=mm.getGroupArr(0,"GrpOnAllCell")
176         self.assertTrue(t.getValues()==list(range(5)))
177         #
178         mmCpy=mm.deepCopy()
179         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
180         mmCpy.write(outFileName,2);
181         #
182         mm=MEDFileMesh.New(outFileName)
183         #
184         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
185         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
186         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
187         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
188         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
189         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
190         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
191         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
192         self.assertEqual(3,len(lmm))
193         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
194         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
195         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
196         #
197         self.assertTrue(mm.getUnivNameWrStatus())
198         self.assertTrue(isinstance(mm.getUnivName(),str))
199         self.assertTrue(len(mm.getUnivName())!=0)
200         mbis=mm.getMeshAtLevel(0)
201         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
202         self.assertTrue(m.isEqual(mbis,1e-12));
203         #
204         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
205         pass
206
207     # this test is the testMEDMesh3 except that permutation is dealed here
208     def testMEDMesh4(self):
209         outFileName="MEDFileMesh4.med"
210         c=DataArrayDouble.New()
211         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 ];
212         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
213         c.setValues(coords,9,2)
214         c.setInfoOnComponent(0,"abcdef [km]")
215         c.setInfoOnComponent(1,"ghij [MW]")
216         m=MEDCouplingUMesh.New();
217         m.setMeshDimension(2);
218         m.allocateCells(5);
219         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
220         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
221         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
222         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
223         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
224         m.finishInsertingCells();
225         m.setCoords(c)
226         m.checkConsistencyLight()
227         m1=MEDCouplingUMesh.New();
228         m1.setMeshDimension(1);
229         m1.allocateCells(3);
230         m1.insertNextCell(NORM_SEG2,2,[1,4])
231         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
232         m1.insertNextCell(NORM_SEG2,2,[3,6])
233         m1.finishInsertingCells();
234         m1.setCoords(c)
235         m1.checkConsistencyLight()
236         m2=MEDCouplingUMesh.New();
237         m2.setMeshDimension(0);
238         m2.allocateCells(4);
239         m2.insertNextCell(NORM_POINT1,1,[1])
240         m2.insertNextCell(NORM_POINT1,1,[3])
241         m2.insertNextCell(NORM_POINT1,1,[2])
242         m2.insertNextCell(NORM_POINT1,1,[6])
243         m2.finishInsertingCells();
244         m2.setCoords(c)
245         m2.checkConsistencyLight()
246         #
247         mm=MEDFileUMesh.New()
248         mm.setName("My2ndMEDCouplingMEDmesh")
249         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
250         mm.setCoords(c)
251         renumNode=DataArrayInt.New()
252         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
253         mm.setRenumFieldArr(1,renumNode)
254         mm.setMeshAtLevel(-1,m1,True);
255         mm.setMeshAtLevel(0,m,True);
256         mm.setMeshAtLevel(-2,m2,True);
257         mm.removeMeshAtLevel(-2)
258         mm.setMeshAtLevel(-2,m2,True);
259         # playing with groups
260         g1_2=DataArrayInt.New()
261         g1_2.setValues([2,3],2,1)
262         g1_2.setName("G1")
263         g2_2=DataArrayInt.New()
264         g2_2.setValues([2,0,3],3,1)
265         g2_2.setName("G2")
266         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
267         g1_1=DataArrayInt.New()
268         g1_1.setValues([0,2,1],3,1)
269         g1_1.setName("G1")
270         g2_1=DataArrayInt.New()
271         g2_1.setValues([0,2],2,1)
272         g2_1.setName("G2")
273         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
274         g1_N=DataArrayInt.New()
275         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
276         g1_N.setName("G1")
277         g2_N=DataArrayInt.New()
278         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
279         g2_N.setName("G2")
280         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
281         # check content of mm
282         t=mm.getGroupArr(0,"G1",True)
283         self.assertTrue(g1_2.isEqual(t));
284         t=mm.getGroupArr(0,"G2",True)
285         self.assertTrue(g2_2.isEqual(t));
286         t=mm.getGroupArr(-1,"G1",True)
287         self.assertTrue(g1_1.isEqual(t));
288         t=mm.getGroupArr(-1,"G2",True)
289         self.assertTrue(g2_1.isEqual(t));
290         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
291         #
292         mm.write(outFileName,2);
293         mm2=MEDFileMesh.New(outFileName)
294         res=mm.isEqual(mm2,1e-12)
295         self.assertTrue(res[0])
296         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
297         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
298         mm2.keepFamIdsOnlyOnLevs([3],[-1])
299         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
300             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
301             pass
302         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
303         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
304         #
305         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
306         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
307         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
308         self.assertTrue(not mm2.existsFamily("Family_-8"))
309         mm2.createGroupOnAll(-1,"GrpOnAllFace")
310         self.assertTrue(mm2.existsFamily("Family_-8"))
311         self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
312         pass
313
314     #testing persistence of retrieved arrays
315     def testMEDMesh5(self):
316         fileName="Pyfile18.med"
317         mname="ExampleOfMultiDimW"
318         medmesh=MEDFileUMesh.New(fileName,mname)
319         m1_0=medmesh.getLevel0Mesh(True)
320         da1=medmesh.getFamilyFieldAtLevel(0)
321         del medmesh
322         self.assertEqual(20,m1_0.getNumberOfCells())
323         self.assertEqual(20,da1.getNumberOfTuples())
324         pass
325
326     def testMEDMesh6(self):
327         outFileName="MEDFileMesh5.med"
328         m=MEDFileCMesh.New()
329         m.setTime(-1,-1,2.3)
330         m1=MEDCouplingCMesh.New();
331         da=DataArrayDouble.New()
332         da.setValues([0.,1.,2.],3,1)
333         da.setInfoOnComponent(0,"XX [mm]")
334         m1.setCoordsAt(0,da)
335         da=DataArrayDouble.New()
336         da.setValues([0.,1.2],2,1)
337         da.setInfoOnComponent(0,"YY [km]")
338         m1.setCoordsAt(1,da)
339         da=DataArrayDouble.New()
340         da.setValues([0.,1.3],2,1)
341         da.setInfoOnComponent(0,"ZZ [um]")
342         m1.setCoordsAt(2,da)
343         m.setMesh(m1)
344         self.assertTrue(m[0].isEqual(m1,1e-12))
345         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
346         m.setName("myFirstCartMesh")
347         m.setDescription("mmmmpppppppp")
348         m.setTimeValue(2.3)
349         m.setTimeUnit("ms")
350         da=DataArrayInt.New()
351         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
352         m.setFamilyFieldArr(1,da)
353         m.setFamilyId("family1",1)
354         da=m.getFamilyArr(1,"family1")
355         expected1=[2,4,9]
356         self.assertEqual(expected1,da.getValues())
357         self.assertTrue(m.getUnivNameWrStatus())
358         m.write(outFileName,2);
359         mm=MEDFileMesh.New(outFileName)
360         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
361         self.assertTrue(isinstance(mm,MEDFileCMesh))
362         self.assertTrue(isinstance(mm.getUnivName(),str))
363         self.assertTrue(len(mm.getUnivName())!=0)
364         self.assertTrue(m.isEqual(mm,1e-12)[0])
365         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
366         m2=mm.getMesh()
367         tt=m.getTime()
368         m1.setTime(tt[2],tt[0],tt[1])
369         m1.setName(m.getName())
370         m1.setTimeUnit(m.getTimeUnit())
371         m1.setDescription(m.getDescription())
372         self.assertTrue(m2.isEqual(m1,1e-12));
373         pass
374
375     def testMEDMesh7(self):
376         fileName="Pyfile24.med"
377         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
378         m=MEDFileUMesh.New()
379         m.setCoords(m2.getCoords())
380         m.setMeshAtLevel(0,m2)
381         m.setMeshAtLevel(-1,m1)
382         m.setMeshAtLevel(-2,m0)
383         m.setFamilyFieldArr(0,f2)
384         m.setFamilyFieldArr(-1,f1)
385         m.setFamilyFieldArr(-2,f0)
386         m.setFamilyFieldArr(1,p)
387         m.setRenumFieldArr(0,n2)
388         m.setRenumFieldArr(-1,n1)
389         m.setRenumFieldArr(-2,n0)
390         nbOfFams=len(fns)
391         for i in range(nbOfFams):
392             m.addFamily(fns[i],fids[i])
393             pass
394         nbOfGrps=len(grpns)
395         for i in range(nbOfGrps):
396             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
397             pass
398         m.setName(m2.getName())
399         m.setDescription(m2.getDescription())
400         #
401         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
402         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
403         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
404         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
405         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
406         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
407         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
408         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
409         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
410         #
411         m.write(fileName,2)
412         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
413         pass
414
415     def funcToTestDelItem(self,ff):
416         del ff[[0.02,(3,4)]]
417         pass
418
419     #emulation of pointe.med file.
420     def testMEDField1(self):
421         mm=MEDFileMesh.New("Pyfile17.med")
422         mm.write("Pyfile17_bis.med",2)
423         ff=MEDFileFieldMultiTS("Pyfile17.med")
424         tsExpected=[[1,2],[3,4],[5,6]]
425         self.assertEqual(3,len(ff))
426         for pos,f1ts in enumerate(ff):
427             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
428             self.assertEqual(type(f1ts),MEDFileField1TS)
429             pass
430         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
431         self.assertEqual([3,4],ff[1].getTime()[:-1])
432         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
433         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
434         ff.write("Pyfile17_bis.med",0)
435         #
436         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
437         self.assertEqual([(1,2),(3,4),(5,6)],ts)
438         self.funcToTestDelItem(ff)
439         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
440         self.assertEqual([(1,2)],ts)
441         pass
442
443     #profiles
444     def testMEDField2(self):
445         mm=MEDFileMesh.New("Pyfile19.med")
446         mm.write("Pyfile19_bis.med",2)
447         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
448         ff.write("Pyfile19_bis.med",0)
449         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
450         pass
451
452     #gauss points
453     def testMEDField3(self):
454         mm=MEDFileMesh.New("Pyfile13.med")
455         mm.write("Pyfile13_bis.med",2)
456         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
457         ff.write("Pyfile13_bis.med",0)
458         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
459         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
460         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
461         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
462         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
463         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
464         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
465         ff4=MEDFileField1TS.New("Pyfile13.med")
466         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
467         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
468         pass
469
470     #gauss NE
471     def testMEDField4(self):
472         mm=MEDFileMesh.New("Pyfile14.med")
473         mm.write("Pyfile14_bis.med",2)
474         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
475         ff.write("Pyfile14_bis.med",0)
476         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
477         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
478         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
479         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
480         pass
481
482     # MEDField get/set on pointe.med
483     def testMEDField5(self):
484         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
485         f=ff.getFieldAtLevel(ON_CELLS,0)
486         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
487         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
488         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
489         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
490         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
491         # no with renumbering
492         f=ff.getFieldAtLevel(ON_CELLS,0,1)
493         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
494         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
495         f=ff.getFieldAtLevel(ON_CELLS,0,3)
496         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
497         f=ff.getFieldAtLevel(ON_CELLS,0,2)
498         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
499         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
500         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
501         pass
502
503     # MEDField get/set on profiles nodes
504     def testMEDField6(self):
505         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
506         its=ff.getIterations()
507         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
508         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
509         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
510         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
511         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
512         its=ff.getIterations()
513         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
514         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
515         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
516         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
517         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
518         pass
519
520     # MEDField get/set on profiles cells
521     def testMEDField7(self):
522         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
523         its=ff.getIterations()
524         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
525         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
526         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
527         pass
528
529     #first test of assignation. No profile and types sorted by type.
530     def testMEDField8(self):
531         fname="Pyfile25.med"
532         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
533         m1=f1.getMesh()
534         mm1=MEDFileUMesh.New()
535         mm1.setCoords(m1.getCoords())
536         mm1.setMeshAtLevel(0,m1)
537         mm1.setName(m1.getName())
538         mm1.write(fname,2)
539         ff1=MEDFileField1TS.New()
540         ff1.setFieldNoProfileSBT(f1)
541         ff1.write(fname,0)
542         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
543         itt,orr,ti=ff1.getTime()
544         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
545         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
546         ff1.setTime(3,4,2.3)
547         itt,orr,ti=ff1.getTime()
548         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
549         da,infos=ff1.getUndergroundDataArrayExt()
550         f2.getArray().setName(da.getName())#da has the same name than f2
551         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
552         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
553         #
554         fname="Pyfile26.med"
555         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
556         m1=f1.getMesh()
557         mm1=MEDFileUMesh.New()
558         mm1.setCoords(m1.getCoords())
559         mm1.setMeshAtLevel(0,m1)
560         mm1.setName(m1.getName())
561         mm1.write(fname,2)
562         ff1=MEDFileField1TS.New()
563         ff1.setFieldNoProfileSBT(f1)
564         nv=1456.
565         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
566         ff1.write(fname,0)
567         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
568         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
569         f1.getArray().setIJ(0,0,nv)
570         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
571         #
572         fname="Pyfile27.med"
573         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
574         m1=f1.getMesh()
575         mm1=MEDFileUMesh.New()
576         mm1.setCoords(m1.getCoords())
577         mm1.setMeshAtLevel(0,m1)
578         mm1.setName(m1.getName())
579         mm1.write(fname,2)
580         ff1=MEDFileField1TS.New()
581         ff1.setFieldNoProfileSBT(f1)
582         ff1.write(fname,0)
583         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
584         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
585         da,infos=ff1.getUndergroundDataArrayExt()
586         f2.getArray().setName(da.getName())#da has the same name than f2
587         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
588         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
589         #
590         fname="Pyfile28.med"
591         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
592         f1InvalidCpy=f1.deepCopy()
593         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
594         f1InvalidCpy2=f1.deepCopy()
595         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
596         m1=f1.getMesh()
597         mm1=MEDFileUMesh.New()
598         mm1.setCoords(m1.getCoords())
599         mm1.setMeshAtLevel(0,m1)
600         mm1.setName(m1.getName())
601         mm1.write(fname,2)
602         ff1=MEDFileField1TS.New()
603         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
604         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
605         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
606         ff1.setFieldNoProfileSBT(f1)
607         ff1.write(fname,0)
608         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
609         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
610         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
611         sbt=ff2.getFieldSplitedByType2()
612         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
613         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
614         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
615         self.assertEqual(6,loc1.getNumberOfPointsInCells())
616         self.assertEqual(3,loc1.getNumberOfGaussPoints())
617         self.assertEqual(2,loc1.getDimension())
618         da,infos=ff2.getUndergroundDataArrayExt()
619         f2.getArray().setName(da.getName())#da has the same name than f2
620         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
621         self.assertEqual(53,da.getNumberOfTuples())
622         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)
623         #
624         pass
625     
626     def testMEDFileData1(self):
627         fname="Pyfile29.med"
628         d=MEDFileData.New()
629         #
630         m1=MEDLoaderDataForTest.build1DMesh_1()
631         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
632         mmm1=MEDFileMeshMultiTS.New() ;
633         mmm1.setOneTimeStep(mm1)
634         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
635         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
636         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
637         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
638         d.setMeshes(ms)
639         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
640             self.assertEqual(name,mmm.getName())
641             self.assertEqual(type(mmm),MEDFileUMesh)
642             pass
643         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
644         #
645         ff1=MEDFileFieldMultiTS.New()
646         ff21=MEDFileFieldMultiTS.New()
647         ff22=MEDFileFieldMultiTS.New()
648         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
649         f1.getArray().setInfoOnComponent(0,"power [kW]")
650         ff1.appendFieldNoProfileSBT(f1)
651         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
652         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
653         ff21.appendFieldNoProfileSBT(f21)
654         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
655         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
656         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
657         ff22.appendFieldNoProfileSBT(f22)
658         fs=MEDFileFields.New()
659         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
660         for name,fmts in zip(["f1","f21","f22"],fs):
661             self.assertEqual(name,fmts.getName())
662             pass
663         d.setFields(fs)
664         #
665         fname2="Pyfile29_2.med"
666         d.write(fname2,2)
667         #
668         d2=MEDFileData.New(fname2)
669         self.assertEqual(2,d2.getNumberOfMeshes())
670         self.assertEqual(3,d2.getNumberOfFields())
671         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
672         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
673         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
674         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
675         self.assertTrue(m1.isEqual(m1bis,1e-12))
676         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
677         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
678         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
679         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
680         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
681         pass
682     
683     def testMEDField9(self):
684         # first test field profile WR. Full type but with some type missing
685         fname="Pyfile30.med"
686         m1=MEDLoaderDataForTest.build2DMesh_3()
687         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
688         mm1.write(fname,2)
689         ff1=MEDFileField1TS.New()
690         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
691         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
692         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.
693         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
694         #
695         ff1.setFieldProfile(f1,mm1,0,da)
696         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
697         ff1=ff1.deepCopy()
698         ff1.write(fname,0)
699         #
700         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
701         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
702         self.assertTrue(vals.isEqual(d,1e-14))
703         #
704         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
705         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
706         ff2.deepCpyGlobs(ff3)
707         sbt=ff2.getFieldSplitedByType2()
708         self.assertEqual(3,sbt[0][0])#TRI3
709         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
710         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
711         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
712         self.assertEqual(4,sbt[1][0])#QUAD4
713         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
714         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
715         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
716         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
717         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
718         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
719         self.assertTrue(vals.isEqual(d,1e-14))
720         pass
721     
722     def testMEDField10(self):
723         fname="Pyfile31.med"
724         m1=MEDLoaderDataForTest.build2DMesh_1()
725         m1.renumberCells([0,1,4,2,3,5],False)
726         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
727         mm1.write(fname,2)
728         ff1=MEDFileFieldMultiTS.New()
729         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
730         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
731         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.
732         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
733         #
734         ff1.appendFieldProfile(f1,mm1,0,da)
735         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
736         ff1.appendFieldProfile(f1,mm1,0,da)
737         ff1=ff1.deepCopy()
738         ff1.write(fname,0)
739         #
740         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
741         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
742         self.assertTrue(vals.isEqual(e,1e-14))
743         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
744         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
745         self.assertTrue(vals.isEqual(d,1e-14))
746         #
747         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
748         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
749         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
750         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
751         self.assertTrue(vals.isEqual(e,1e-14))
752         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
753         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
754         self.assertTrue(vals.isEqual(d,1e-14))
755         pass
756     
757     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
758     def testMEDField11(self):
759         fname="Pyfile32.med"
760         m1=MEDLoaderDataForTest.build2DMesh_1()
761         m1.renumberCells([0,1,4,2,3,5],False)
762         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
763         mm1.write(fname,2)
764         ff1=MEDFileField1TS.New()
765         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
766         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
767         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
768         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
769         #
770         ff1.setFieldProfile(f1,mm1,0,da)
771         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
772         ff1.write(fname,0)
773         #
774         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
775         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
776         self.assertTrue(vals.isEqual(d,1e-14))
777         ## #
778         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
779         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
780         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
781         self.assertTrue(vals.isEqual(d,1e-14))
782         pass
783
784     def testMEDField12(self):
785         fname="Pyfile33.med"
786         m1=MEDLoaderDataForTest.build2DMesh_1()
787         m1.renumberCells([0,1,4,2,3,5],False)
788         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
789         mm1.write(fname,2)
790         ff1=MEDFileFieldMultiTS.New()
791         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
792         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
793         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.
794         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
795         #
796         ff1.appendFieldProfile(f1,mm1,0,da)
797         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
798         ff1.appendFieldProfile(f1,mm1,0,da)
799         ff1.write(fname,0)
800         #
801         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
802         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
803         self.assertTrue(vals.isEqual(e,1e-14))
804         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
805         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
806         self.assertTrue(vals.isEqual(d,1e-14))
807         #
808         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
809         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
810         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
811         self.assertTrue(vals.isEqual(e,1e-14))
812         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
813         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
814         self.assertTrue(vals.isEqual(d,1e-14))
815         pass
816
817     def testMEDField13(self):
818         fname="Pyfile34.med"
819         m1=MEDLoaderDataForTest.build2DMesh_1()
820         m1.renumberCells([0,1,4,2,3,5],False)
821         tmp=m1.getName();
822         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
823         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
824         mm1.write(fname,2)
825         ff1=MEDFileField1TS.New()
826         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
827         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
828         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.
829         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
830         #
831         ff1.setFieldProfile(f1,mm1,0,da)
832         ff1.write(fname,0)
833         #
834         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
835         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
836         self.assertTrue(vals.isEqual(d,1e-14))
837         #
838         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
839         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
840         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
841         self.assertTrue(vals.isEqual(d,1e-14))
842         pass
843
844     def testMEDField14(self):
845         fname="Pyfile35.med"
846         m1=MEDLoaderDataForTest.build2DMesh_1()
847         m1.renumberCells([0,1,4,2,3,5],False)
848         tmp=m1.getName();
849         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
850         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
851         mm1.write(fname,2)
852         ff1=MEDFileFieldMultiTS.New()
853         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
854         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
855         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.
856         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
857         #
858         ff1.appendFieldProfile(f1,mm1,0,da)
859         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
860         ff1.appendFieldProfile(f1,mm1,0,da)
861         ff1.write(fname,0)
862         #
863         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
864         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
865         self.assertTrue(vals.isEqual(d,1e-14))
866         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
867         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
868         self.assertTrue(vals.isEqual(e,1e-14))
869         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
870         #
871         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
872         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
873         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
874         self.assertTrue(vals.isEqual(d,1e-14))
875         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
876         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
877         self.assertTrue(vals.isEqual(e,1e-14))
878         pass
879     # 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.
880     # 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
881     # 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 !
882     def testMEDField15(self):
883         fname="Pyfile36.med"
884         m0=MEDLoaderDataForTest.build2DMesh_1()
885         m0.renumberCells([0,1,4,2,3,5],False)
886         tmp=m0.getName();
887         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
888         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
889         ff1=MEDFileField1TS.New()
890         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
891         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
892         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.
893         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
894         #
895         ff1.setFieldProfile(f1,mm1,0,da)
896         m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
897         mm1.write(fname,2)
898         ff1.write(fname,0)
899         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
900         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
901         self.assertTrue(p1.isIota(5))
902         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
903         pass
904     # Test for getFieldAtTopLevel method
905     def testMEDField16(self):
906         fname="Pyfile37.med"
907         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
908         m1=f1.getMesh()
909         mm1=MEDFileUMesh.New()
910         mm1.setCoords(m1.getCoords())
911         mm1.setMeshAtLevel(0,m1)
912         mm1.setName(m1.getName())
913         ff1=MEDFileField1TS.New()
914         ff1.setFieldNoProfileSBT(f1)
915         m2=m1.buildDescendingConnectivity()[0]
916         m2.sortCellsInMEDFileFrmt()
917         m2.setName(m1.getName())
918         mm1.setMeshAtLevel(-1,m2)
919         mm1.write(fname,2)
920         f2=m2.getMeasureField(True)
921         dd=DataArrayDouble.New()
922         dd.alloc(f2.getArray().getNumberOfTuples(),3)
923         dd[:,0]=f2.getArray()
924         dd[:,1]=2*f2.getArray()
925         dd[:,2]=3*f2.getArray()
926         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
927         f2.setArray(dd)
928         f2.copyTinyStringsFrom(f1)
929         f2.copyTinyAttrFrom(f1)
930         ff1.setFieldNoProfileSBT(f2)
931         ff1.write(fname,0)
932         # Reading Pyfile37.med
933         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
934         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
935         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
936         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
937         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
938         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
939         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
940         # More complex
941         fname="Pyfile38.med"
942         mm1.write(fname,2)
943         ff1=MEDFileField1TS.New()
944         ff1.setFieldNoProfileSBT(f2)
945         ff1.write(fname,0)
946         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
947         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
948         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
949         pass
950
951     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
952     def testMEDField17(self):
953         fname="Pyfile39.med"
954         m1=MEDLoaderDataForTest.build2DMesh_1()
955         m1.renumberCells([0,1,4,2,3,5],False)
956         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
957         mm1.write(fname,2)
958         ffs=MEDFileFields.New()
959         ff1=MEDFileFieldMultiTS.New()
960         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
961         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
962         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.
963         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
964         #
965         ff1.appendFieldProfile(f1,mm1,0,da)
966         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
967         ff1.appendFieldProfile(f1,mm1,0,da)
968         ffs.resize(1)
969         ffs.setFieldAtPos(0,ff1)
970         ffs=ffs.deepCopy()
971         ffs.write(fname,0)
972         #
973         ffsr=MEDFileFields.New(fname)
974         ff3=ffsr.getFieldAtPos(0)
975         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
976         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
977         pass
978
979     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
980     def testMEDField18(self):
981         fname="Pyfile40.med"
982         m1=MEDLoaderDataForTest.build2DMesh_1()
983         m1.renumberCells([0,1,4,2,3,5],False)
984         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
985         mm1.write(fname,2)
986         ffs=MEDFileFields.New()
987         ff1=MEDFileFieldMultiTS.New()
988         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
989         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
990         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.
991         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
992         #
993         ff1.appendFieldProfile(f1,mm1,0,da)
994         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
995         ff1.appendFieldProfile(f1,mm1,0,da)
996         ffs.pushField(ff1)
997         ffs.write(fname,0)
998         #
999         ffsr=MEDFileFields.New(fname)
1000         ff3=ffsr.getFieldAtPos(0)
1001         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1002         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1003         pass
1004
1005     def testMEDFieldBug1(self):
1006         fname="Pyfile13.med"
1007         d=MEDFileData.New(fname)
1008         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1009         pass
1010
1011     def testMEDMesh8(self):
1012         m=MEDLoaderDataForTest.build1DMesh_1()
1013         m.convertQuadraticCellsToLinear()
1014         mm=MEDFileUMesh.New()
1015         mm.setMeshAtLevel(0,m)
1016         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1017         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1018         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1019         mm.setGroupsAtLevel(0,[g1,g2],False)
1020         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1021         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1022         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1023         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1024         mm.assignFamilyNameWithGroupName()
1025         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1026         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1027         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1028         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1029         #
1030         mm=MEDFileUMesh.New()
1031         mm.setMeshAtLevel(0,m)
1032         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1033         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1034         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1035         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1036         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1037         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1038         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1039         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1040         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1041         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1042         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1043         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1044         mm.changeFamilyId(5,6)
1045         g=mm.getGroupArr(0,"g3")
1046         self.assertTrue(g.isEqual(g3));
1047         g=mm.getGroupArr(0,"g2")
1048         self.assertTrue(g.isEqual(g2));
1049         g=mm.getGroupArr(0,"g1")
1050         self.assertTrue(g.isEqual(g1));
1051         pass
1052     
1053     # bug detected by gauthier
1054     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1055         fname="Pyfile41.med"
1056         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1057         m1=f1.getMesh()
1058         mm1=MEDFileUMesh.New()
1059         mm1.setCoords(m1.getCoords())
1060         mm1.setMeshAtLevel(0,m1)
1061         mm1.write(fname,2)
1062         ff1=MEDFileField1TS.New()
1063         ff1.setFieldNoProfileSBT(f1)
1064         ff1.write(fname,0)
1065         # writing mesh1 and field1, now creation of mesh2 and field2
1066         f2=f1.deepCopy()
1067         m2=f2.getMesh()
1068         m2.translate([0.5,0.6,0.7])
1069         m2.setName("3DSurfMesh_2")
1070         f2.getArray()[:]*=2.
1071         f2.setName("VectorFieldOnCells2")
1072         mm2=MEDFileUMesh.New()
1073         mm2.setCoords(m2.getCoords())
1074         mm2.setMeshAtLevel(0,m2)
1075         mm2.write(fname,0)
1076         ff2=MEDFileField1TS.New()
1077         ff2.setFieldNoProfileSBT(f2)
1078         ff2.write(fname,0)
1079         #
1080         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1081         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1082         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1083         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1084         pass
1085
1086     def testMEDLoaderMultiLevelCellField1(self):
1087         fname="Pyfile42.med"
1088         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1089         m=MEDFileUMesh.New()
1090         m.setCoords(m2.getCoords())
1091         m.setMeshAtLevel(0,m2)
1092         m.setMeshAtLevel(-1,m1)
1093         m.setMeshAtLevel(-2,m0)
1094         m.write(fname,2)
1095         #
1096         FieldName1="Field1"
1097         compNames1=["comp1","comp2","comp3"]
1098         ff1=MEDFileField1TS.New()
1099         da2=DataArrayDouble.New()
1100         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1101         da2.iota(7.)
1102         da2.rearrange(len(compNames1))
1103         da2.setInfoOnComponents(compNames1)
1104         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1105         ff1.setFieldNoProfileSBT(f2)
1106         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1107         da0=DataArrayDouble.New()
1108         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1109         da0.iota(190.)
1110         da0.rearrange(len(compNames1))
1111         da0.setInfoOnComponents(compNames1)
1112         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1113         ff1.setFieldNoProfileSBT(f0)
1114         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1115         da1=DataArrayDouble.New()
1116         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1117         da1.iota(90.)
1118         da1.rearrange(len(compNames1))
1119         da1.setInfoOnComponents(compNames1)
1120         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1121         ff1.setFieldNoProfileSBT(f1)
1122         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1123         #
1124         ff1.write(fname,0)
1125         #
1126         FieldName2="Field2"
1127         compNames2=["comp11","comp22"]
1128         ff2=MEDFileField1TS.New()
1129         da0=DataArrayDouble.New()
1130         da0.alloc(m0.getNumberOfCells()*2,1)
1131         da0.iota(-190.)
1132         da0.rearrange(2)
1133         da0.setInfoOnComponents(compNames2)
1134         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1135         ff2.setFieldNoProfileSBT(f0)
1136         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1137         da1=DataArrayDouble.New()
1138         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1139         da1.iota(-90.)
1140         da1.rearrange(len(compNames2))
1141         da1.setInfoOnComponents(compNames2)
1142         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1143         ff2.setFieldNoProfileSBT(f1)
1144         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1145         #
1146         ff2.write(fname,0)
1147         #
1148         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1149         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1150         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1151         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1152         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1153         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1154         pass
1155
1156     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1157         fname="Pyfile43.med"
1158         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1159         m=MEDFileUMesh.New()
1160         m.setMeshAtLevel(0,m2)
1161         m.setMeshAtLevel(-1,m1)
1162         m.setMeshAtLevel(-2,m0)
1163         f=MEDFileField1TS.New()
1164         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1165         ff.setName("NodeFieldPfl")
1166         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1167         ff.setArray(arr)
1168         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1169         f.setFieldProfile(ff,m,-2,pfl)
1170         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1171         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1172         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1173         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1174         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1175         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1176         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1177         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1178         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1179         expected1=[1.,10.,100.,2.,20.,200.]
1180         nodeCoordsWithValue1=[10.,2.5,0.]
1181         nodeCoordsWithValue2=[10.,3.75,0.]
1182         for i in range(3):
1183             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1184             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1185             pass
1186         for i in range(6):
1187             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1188             pass
1189         del tes0
1190         #
1191         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1192         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1193         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1194         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1195         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1196         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1197         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1198         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1199         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1200         for i in range(6):
1201             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1202             pass
1203         m.write(fname,2)
1204         f.write(fname,0)
1205         #
1206         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1207         f=MEDFileField1TS.New()
1208         f.setFieldProfile(ff,m,-2,pfl)
1209         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1210         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1211         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1212         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1213         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1214         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1215         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1216         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1217         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1218         expected2=[2.,20.,200.,1.,10.,100.]
1219         for i in range(3):
1220             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1221             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1222             pass
1223         for i in range(6):
1224             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1225             pass
1226         #
1227         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1228         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1229         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1230         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1231         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1232         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1233         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1234         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1235         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1236         for i in range(6):
1237             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1238             pass
1239         pass
1240
1241     def testBuildInnerBoundaryAlongM1Group1(self):
1242         fname="Pyfile44.med"
1243         m=MEDCouplingCMesh.New()
1244         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1245         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1246         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1247         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1248         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1249         m2.setName(m.getName())
1250         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1251         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1252         mm=MEDFileUMesh.New()
1253         mm.setMeshAtLevel(0,m)
1254         mm.setMeshAtLevel(-1,m2)
1255         mm.setGroupsAtLevel(-1,[grp,grp2])
1256         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1257         mm.setGroupsAtLevel(1,[grpNode])
1258         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1259         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1260         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1261         #
1262         self.assertEqual(30,mm.getNumberOfNodes())
1263         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1264         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1265         #
1266         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1267         self.assertEqual([15,16,17],nodes.getValues());
1268         self.assertEqual([7,8,9],cells.getValues());
1269         self.assertEqual([12,13,14],cells2.getValues());
1270         self.assertEqual(33,mm.getNumberOfNodes())
1271         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1272         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1273         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1274         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1275         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
1276         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1277         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
1278         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1279         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])
1280         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1281         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1282         #
1283         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1284         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1285         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1286         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1287         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1288         mm.write(fname,2)
1289         pass
1290
1291     def testBuildInnerBoundaryAlongM1Group2(self):
1292         fname="Pyfile45.med"
1293         m=MEDCouplingCMesh.New()
1294         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1295         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1296         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1297         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1298         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1299         m2.setName(m.getName())
1300         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1301         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1302         mm=MEDFileUMesh.New()
1303         mm.setMeshAtLevel(0,m)
1304         mm.setMeshAtLevel(-1,m2)
1305         mm.setGroupsAtLevel(-1,[grp,grp2])
1306         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1307         mm.setGroupsAtLevel(1,[grpNode])
1308         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1309         ref1=[4,9,8,14,15,4,10,9,15,16]
1310         ref2=[4,9,8,14,30,4,10,9,30,16]
1311         #
1312         self.assertEqual(30,mm.getNumberOfNodes())
1313         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1314         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1315         #
1316         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1317         self.assertEqual([15],nodes.getValues());
1318         self.assertEqual([7,8],cells.getValues());
1319         self.assertEqual([12,13],cells2.getValues());
1320         self.assertEqual(31,mm.getNumberOfNodes())
1321         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1322         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1323         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1324         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1325         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
1326         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1327         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
1328         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1329         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])
1330         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1331         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1332         #
1333         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1334         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1335         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1336         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1337         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1338         mm.write(fname,2)       
1339         pass
1340
1341     def testBuildInnerBoundaryAlongM1Group3(self):
1342         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1343         fname = "Pyfile73.med"
1344         m = MEDCouplingCMesh.New()
1345         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1346         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1347         m = m.buildUnstructured(); m.setName("simple")
1348         m2 = m.buildDescendingConnectivity()[0]
1349         m2.setName(m.getName())
1350             
1351         # A crack in two non connected parts of the mesh:
1352         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp") 
1353
1354         mm = MEDFileUMesh.New()
1355         mm.setMeshAtLevel(0,m)
1356         mm.setMeshAtLevel(-1,m2)
1357         mm.setGroupsAtLevel(-1,[grpSeg])
1358         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1359         self.assertEqual([1,13],nodes.getValues());
1360         self.assertEqual([0,6],cellsMod.getValues());
1361         self.assertEqual([1,7],cellsNotMod.getValues());
1362         self.assertEqual(17,mm.getNumberOfNodes())
1363         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1364         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1365         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1366         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1367         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1368         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1369         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
1370         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1371
1372         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1373         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1374         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1375         #
1376         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1377         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1378         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1379         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1380         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1381         mm.write(fname,2)   
1382
1383     def testBuildInnerBoundaryAlongM1Group4(self):
1384         """ Test case where cells touch the M1 group on some nodes only and not on full egdes (triangle mesh for ex)
1385         """
1386         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1387                                0.,1., 1.,1., 2.,1., 3.,1.,
1388                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1389         conn = [3,0,4,1,  3,1,4,5,
1390                 3,5,9,10, 3,5,10,6,
1391                 3,2,6,7,  3,2,7,3,
1392                 3,4,8,9,  3,4,9,5,
1393                 3,1,5,6,  3,1,6,2,
1394                 3,6,10,11,3,6,11,7]
1395         # Only TRI3:
1396         connI = DataArrayInt()
1397         connI.alloc(13, 1); connI.iota(); connI *= 4
1398         m2 = MEDCouplingUMesh("2D", 2)
1399         m2.setCoords(coo)
1400         m2.setConnectivity(DataArrayInt(conn), connI)
1401         m2.checkConsistency()
1402         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1403         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1404         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1405         mfu = MEDFileUMesh()
1406         mfu.setMeshAtLevel(0, m2)
1407         mfu.setMeshAtLevel(-1, m1)
1408         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1409         nNod = m2.getNumberOfNodes()
1410         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1411         m2_bis = mfu.getMeshAtLevel(0)
1412         m2_bis.checkConsistency()
1413         m1_bis = mfu.getMeshAtLevel(-1)
1414         m1_bis.checkConsistency()
1415         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1416         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1417         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1418         self.assertEqual([6,7], nodesDup.getValues())
1419         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1420         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1421         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1422         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1423         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1424         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1425 #         mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1426         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1427         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1428         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1429         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1430         self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1431         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1432         m_bis0 = mfu.getMeshAtLevel(-1)
1433         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1434         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1435
1436     def testBuildInnerBoundary5(self):
1437         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1438         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1439         coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
1440         200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1441          200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546, 
1442          200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538, 
1443          0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483, 
1444          200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082, 
1445          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1446          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015, 
1447          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784, 
1448          97.16750463405486, 97.18018457127863], 46, 3)
1449         c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1450          39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1451          21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1452          14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1453          17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1454          24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1455          44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1456          44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1457          29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1458          21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1459          30, 2]
1460         cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1461          190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 
1462          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1463         m3 = MEDCouplingUMesh("3D", 3)
1464         m3.setCoords(coo)
1465         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1466         m3.checkConsistency()
1467         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1468         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1469         mfu = MEDFileUMesh()
1470         mfu.setMeshAtLevel(0, m3)
1471         mfu.setMeshAtLevel(-1, m2)
1472         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1473         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1474         mfu.setGroupsAtLevel(-1, [grpIds])
1475         nNod = m3.getNumberOfNodes()
1476         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1477         m3_bis = mfu.getMeshAtLevel(0)
1478         m3_bis.checkConsistency()
1479         m2_bis = mfu.getMeshAtLevel(-1)
1480         m2_bis.checkConsistency()
1481         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1482         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1483         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1484         self.assertEqual([3], nodesDup.getValues())
1485         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1486         self.assertEqual(set([22]), set(cells1.getValues()))
1487         self.assertEqual(set([77]), set(cells2.getValues()))
1488         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1489         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1490         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1491         m_bis0 = mfu.getMeshAtLevel(-1)
1492         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1493         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1494         pass
1495
1496     def testBasicConstructors(self):
1497         fname="Pyfile18.med"
1498         m=MEDFileMesh.New(fname)
1499         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1500         m=MEDFileMesh.New(fname)
1501         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1502         m=MEDFileUMesh(fname)
1503         m=MEDFileUMesh()
1504         self.testMEDMesh6()
1505         m=MEDFileCMesh("MEDFileMesh5.med")
1506         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1507         m=MEDFileCMesh()
1508         m=MEDFileMeshMultiTS()
1509         m=MEDFileMeshMultiTS(fname)
1510         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1511         m=MEDFileMeshes()
1512         m=MEDFileMeshes(fname)
1513         m=MEDFileField1TS()
1514         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1515         m=MEDFileFieldMultiTS()
1516         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1517         m=MEDFileFields()
1518         m=MEDFileFields(fname)
1519         m=MEDFileData()
1520         m=MEDFileData(fname)
1521         #
1522         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1523         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1524         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1525         m=MEDCouplingCMesh()
1526         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1527         m=MEDCouplingFieldTemplate(ON_NODES)
1528         m=MEDCouplingMultiFields([])
1529         m=MEDCouplingFieldOverTime([])
1530         pass
1531
1532     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1533     def testBugSemiPartialField(self):
1534         fname="Pyfile46.med"
1535         m=MEDLoaderDataForTest.build2DMesh_3()
1536         m=m[:10] ; m.setName("mesh")
1537         f=m.getMeasureField(False)
1538         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1539         f.setTime(5.5,3,4)
1540         f.setName("SemiPartialField")
1541         #
1542         f1=f[:6] ; f1.getMesh().setName(m.getName())
1543         f2=f[6:] ; f2.getMesh().setName(m.getName())
1544         #
1545         mm=MEDFileUMesh.New()
1546         mm.setMeshAtLevel(0,m)
1547         ff=MEDFileField1TS.New()
1548         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1549         mm.write(fname,2)
1550         ff.write(fname,0)
1551         #
1552         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1553         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1554         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1555         #
1556         fread.checkConsistencyLight()
1557         fread2.checkConsistencyLight()
1558         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1559         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1560         pass
1561
1562     def testUnPolyze1(self):
1563         fname="Pyfile47.med"
1564         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1565         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]
1566         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1567         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]]))
1568         mm.write(fname,2)
1569         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1570         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1571         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1572         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1573         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1574         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1575         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1576         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1577         # to test
1578         mm.setRenumFieldArr(0,None)
1579         mm.setFamilyFieldArr(-1,None)
1580         pass
1581
1582     def testUnPolyze2(self):
1583         fname="Pyfile48.med"
1584         mfd=MEDFileData.New()
1585         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1586         meshes=MEDFileMeshes.New()
1587         meshes.pushMesh(mm)
1588         mfd.setMeshes(meshes)
1589         fields=MEDFileFields.New()
1590         mfd.setFields(fields)
1591         ff=MEDFileFieldMultiTS.New()
1592         fields.pushField(ff)
1593         #
1594         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1595         f0_0.setTime(9.5,3,4)
1596         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1597         f0_0.setArray(da)
1598         f0_0.setMesh(mm.getMeshAtLevel(0))
1599         ff.appendFieldNoProfileSBT(f0_0)
1600         ff0=ff.getTimeStepAtPos(0)
1601         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1602         f0_1.setTime(9.5,3,4)
1603         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1604         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1605         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1606         f0_1.setArray(da)
1607         ff0.setFieldProfile(f0_1,mm,0,pfl)
1608         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1609         f0_2.setTime(9.5,3,4)
1610         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1611         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
1612         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1613         f0_2.setArray(da)
1614         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1615         mfd.getFields().shallowCpyGlobs(ff0)
1616         #
1617         mfd.unPolyzeMeshes()
1618         #
1619         fmts=mfd.getFields()[0]
1620         self.assertEqual(fmts.getNumberOfTS(),1)
1621         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1622         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1623         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))])
1624         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1625         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1626         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1627         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1628         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1629         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1630         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1631         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))
1632         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1633         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1634         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1635         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1636         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1637         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])
1638         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1639         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1640         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1641         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])
1642         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1643         #
1644         mfd.write(fname,2)
1645         pass
1646
1647     def testGaussWriteOnPfl1(self):
1648         fname="Pyfile49.med"
1649         fname2="Pyfile50.med"
1650         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1651         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1652         mQ8.allocateCells(1)
1653         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1654         mQ8.finishInsertingCells()
1655         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1656         mQ4.allocateCells(1)
1657         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1658         mQ4.finishInsertingCells()
1659         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1660         mT3.allocateCells(1)
1661         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1662         mT3.finishInsertingCells()
1663         
1664         tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]]
1665         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1666         ms[:]=(elt.deepCopy() for elt in ms)
1667         for m,t in zip(ms,tr):
1668             d=m.getCoords() ; d+= t
1669             pass
1670         m=MEDCouplingUMesh.MergeUMeshes(ms)
1671         m.setName("mesh")
1672         m2=m[:13] ; m2.setName(m.getName())
1673         ### Use case 1 : Pfl on all tri3 and on all quad4. If we were on CELLS or GAUSS_NE no pfl were needed. But here 2 discs in tri3.
1674         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1675         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1676         f.setMesh(m2)
1677         f.setTime(4.5,1,2)
1678         da=DataArrayDouble(34) ; da.iota(3.)
1679         f.setArray(da)
1680         f.setName("fieldCellOnPflWithoutPfl")
1681         fInvalid=f.deepCopy()
1682         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1683         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1684         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1685         f.checkConsistencyLight()
1686         fInvalid2=fInvalid.deepCopy()
1687         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1688         #
1689         mm=MEDFileUMesh()
1690         mm.setMeshAtLevel(0,m)
1691         mm.write(fname,2)
1692         #
1693         f1ts=MEDFileField1TS.New()
1694         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1695         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1696         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1697         f1ts.setFieldProfile(f,mm,0,pfl)
1698         f1ts.write(fname,0)
1699         #
1700         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1701         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1702         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1703         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1704         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1705         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1706         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1707         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1708         #
1709         dataRead=MEDFileData.New(fname)
1710         mRead=dataRead.getMeshes()[0]
1711         f1tsRead=dataRead.getFields()[0][0]
1712         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1713         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1714         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1715         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1716         f2_bis.checkConsistencyLight()
1717         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1718         #
1719         WriteField(fname2,f,True)
1720         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1721         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1722         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1723         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1724         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1725         m2=m[pfl] ; m2.setName(m.getName())
1726         f.setMesh(m2)
1727         f.setTime(4.5,1,2)
1728         da=DataArrayDouble(35) ; da.iota(3.)
1729         f.setArray(da)
1730         f.setName("fieldCellOnPflWithoutPfl2")
1731         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1732         f.setGaussLocalizationOnCells([2,4,5],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1733         f.setGaussLocalizationOnCells([6,7,8,9],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1734         f.checkConsistencyLight()
1735         #
1736         mm=MEDFileUMesh()
1737         mm.setMeshAtLevel(0,m)
1738         mm.write(fname,2)
1739         f1ts=MEDFileField1TS.New()
1740         f1ts.setFieldProfile(f,mm,0,pfl)
1741         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1742         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1743         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1744         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1745         f1ts.write(fname,0)
1746         dataRead=MEDFileData.New(fname)
1747         mRead=dataRead.getMeshes()[0]
1748         f1tsRead=dataRead.getFields()[0][0]
1749         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1750         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1751         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1752         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1753         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1754         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1755         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1756         #
1757         WriteField(fname2,f,True)
1758         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1759         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1760         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1761         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1762         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1763         f.setMesh(m)
1764         f.setTime(4.5,1,2)
1765         da=DataArrayDouble(60) ; da.iota(3.)
1766         f.setArray(da)
1767         f.setName("fieldCellWithoutPfl")
1768         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1769         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1770         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1771         f.setGaussLocalizationOnCells([13,14,15,17,18],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8],[0.8,0.1,0.03,0.07])
1772         f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1])
1773         f.checkConsistencyLight()
1774         mm=MEDFileUMesh()
1775         mm.setMeshAtLevel(0,m) 
1776         f1ts=MEDFileField1TS.New()
1777         f1ts.setFieldNoProfileSBT(f)
1778         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1779         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1780         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1781         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1782         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1783         mm.write(fname,2)
1784         f1ts.write(fname,0)
1785         #
1786         dataRead=MEDFileData.New(fname)
1787         mRead=dataRead.getMeshes()[0]
1788         f1tsRead=dataRead.getFields()[0][0]
1789         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1790         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1791         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1792         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1793         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1794         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1795         #
1796         WriteField(fname2,f,True)
1797         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1798         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1799         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1800         pass
1801
1802     # Testing profile on nodes when the profile is identity but not on all nodes.
1803     def testMEDFieldPflOnNode1(self):
1804         fname="Pyfile51.med"
1805         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
1806         m0=MEDCouplingUMesh("Mesh",2)
1807         m0.allocateCells(5)
1808         m0.insertNextCell(NORM_TRI3,[1,4,2])
1809         m0.insertNextCell(NORM_TRI3,[4,5,2])
1810         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1811         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1812         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1813         m0.finishInsertingCells()
1814         m0.setCoords(coo)
1815         m1=MEDCouplingUMesh(m0.getName(),1)
1816         m1.allocateCells(9)
1817         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1818         for i in range(9):
1819             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1820             pass
1821         m1.finishInsertingCells()
1822         m1.setCoords(coo)
1823         #
1824         m=MEDFileUMesh()
1825         m.setMeshAtLevel(0,m0)
1826         m.setMeshAtLevel(-1,m1)
1827         #
1828         dt=3 ; it=2 ; tim=4.5
1829         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1830         fieldNode0.setName("fieldNode0")
1831         fieldNode0.setTime(tim,dt,it)
1832         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1833         arr=DataArrayDouble([10,11,12,13,14])
1834         fieldNode0.setArray(arr)
1835         f0=MEDFileField1TS()
1836         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1837         m.write(fname,2) ; f0.write(fname,0)
1838         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1839         fieldNode1.setName("fieldNode1")
1840         fieldNode1.setTime(tim,dt,it)
1841         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1842         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1843         fieldNode1.setArray(arr1)
1844         f1=MEDFileField1TS()
1845         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1846         f1.write(fname,0)
1847         del m,f0,m0,m1,f1
1848         ## Reading from file
1849         m=MEDFileMesh.New(fname)
1850         m0=m.getMeshAtLevel(0)
1851         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1852         fieldNode0.setMesh(m00)
1853         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1854         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1855         ff0_1.checkConsistencyLight()
1856         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1857         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1858         ff0_2.checkConsistencyLight()
1859         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1860         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1861         ff0_3.checkConsistencyLight()
1862         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1863         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1864         ff0_4.checkConsistencyLight()
1865         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1866         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1867         m1=m.getMeshAtLevel(-1)
1868         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1869         fieldNode1.setMesh(m10)
1870         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1871         ff1_1.checkConsistencyLight()
1872         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1873         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1874         ff1_2.checkConsistencyLight()
1875         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1876         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1877         ff1_3.checkConsistencyLight()
1878         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1879         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1880         ff1_4.checkConsistencyLight()
1881         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1882         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,m0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
1883         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_NODES,0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
1884         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,0,m) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
1885         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1886         arr_r.setName(fieldNode1.getArray().getName())
1887         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1888         pfl1_r.setName(pfl1.getName())
1889         self.assertTrue(pfl1_r.isEqual(pfl1))
1890         pass
1891     
1892         # Testing profile on nodes when the profile is identity but not on all nodes.
1893     def testMEDFieldPflOnCell1(self):
1894         fname="Pyfile52.med"
1895         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
1896         m0=MEDCouplingUMesh("Mesh",2)
1897         m0.allocateCells(5)
1898         m0.insertNextCell(NORM_TRI3,[1,4,2])
1899         m0.insertNextCell(NORM_TRI3,[4,5,2])
1900         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1901         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1902         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1903         m0.finishInsertingCells()
1904         m0.setCoords(coo)
1905         m1=MEDCouplingUMesh(m0.getName(),1)
1906         m1.allocateCells(9)
1907         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1908         for i in range(9):
1909             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1910             pass
1911         m1.finishInsertingCells()
1912         m1.setCoords(coo)
1913         #
1914         m=MEDFileUMesh()
1915         m.setMeshAtLevel(0,m0)
1916         m.setMeshAtLevel(-1,m1)
1917         #
1918         dt=3 ; it=2 ; tim=4.5
1919         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1920         fieldCell0.setName("fieldCell0")
1921         fieldCell0.setTime(tim,dt,it)
1922         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1923         arr=DataArrayDouble([10,11,12])
1924         fieldCell0.setArray(arr)
1925         f0=MEDFileField1TS()
1926         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1927         m.write(fname,2) ; f0.write(fname,0)
1928         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1929         fieldCell1.setName("fieldCell1")
1930         fieldCell1.setTime(tim,dt,it)
1931         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1932         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1933         fieldCell1.setArray(arr1)
1934         f1=MEDFileField1TS()
1935         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1936         f1.write(fname,0)
1937         del m,f0,m0,m1,f1
1938         ## Reading from file
1939         m=MEDFileMesh.New(fname)
1940         m0=m.getMeshAtLevel(0)
1941         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1942         fieldCell0.setMesh(m00)
1943         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1944         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1945         ff0_1.checkConsistencyLight()
1946         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1947         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1948         ff0_2.checkConsistencyLight()
1949         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1950         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1951         ff0_3.checkConsistencyLight()
1952         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1953         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1954         ff0_4.checkConsistencyLight()
1955         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1956         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1957         m1=m.getMeshAtLevel(-1)
1958         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1959         fieldCell1.setMesh(m10)
1960         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1961         ff1_1.checkConsistencyLight()
1962         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1963         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1964         ff1_2.checkConsistencyLight()
1965         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1966         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1967         ff1_3.checkConsistencyLight()
1968         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1969         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
1970         ff1_4.checkConsistencyLight()
1971         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1972         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,m0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
1973         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_CELLS,0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
1974         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,0,m) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
1975         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
1976         arr_r.setName(fieldCell1.getArray().getName())
1977         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
1978         pfl1_r.setName(pfl1.getName())
1979         self.assertTrue(pfl1_r.isEqual(pfl1))
1980         pass
1981
1982     def testMEDFileUMeshZipCoords1(self):
1983         m=MEDFileUMesh()
1984         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
1985         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
1986         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
1987         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
1988         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
1989         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
1990         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
1991         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
1992         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
1993         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
1994         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
1995         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
1996         o2n=m.zipCoords()
1997         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
1998         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
1999         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2000         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2001         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2002         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2003         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2004         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2005         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2006         pass
2007
2008     def testMEDUMeshAddNodeGroup1(self):
2009         fname="Pyfile53.med"
2010         m=MEDFileUMesh()
2011         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2012         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2013         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2014         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2015         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2016         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2017         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2018         #
2019         mm=m.deepCopy()
2020         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2021         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2022         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2023         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2024         mm.setFamilyId("MyFam",2)
2025         mm.setFamilyId("MyOtherFam",3)
2026         mm.setFamilyId("MyOther-1",-1)
2027         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2028         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2029         #
2030         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2031         mm.addNodeGroup(daTest)
2032         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2033         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2034         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2035             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2036             pass
2037         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2038         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2039         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2040         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2041         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2042             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2043             pass
2044         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2045         da=DataArrayInt([3,12]) ; da.setName("grp0")
2046         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2047         da.setValues([1])
2048         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2049         mm.write(fname,2)
2050         mm=MEDFileMesh.New(fname)
2051         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2052         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2053         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2054             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2055             pass
2056         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2057         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2058         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2059         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2060         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2061             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2062             pass
2063         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2064         da=DataArrayInt([3,12]) ; da.setName("grp0")
2065         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2066         da.setValues([1])
2067         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2068         pass
2069
2070     def testMEDUMeshAddGroup1(self):
2071         fname="Pyfile54.med"
2072         m=MEDFileUMesh()
2073         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2074         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2075         for i in range(7):
2076             m0.insertNextCell(NORM_TRI3,[1,2,1])
2077             pass
2078         for i in range(4):
2079             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2080             pass
2081         for i in range(2):
2082             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2083             pass
2084         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2085         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2086         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2087         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2088         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2089         #
2090         mm=m.deepCopy()
2091         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2092         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2093         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2094         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2095         mm.setFamilyId("MyFam",2)
2096         mm.setFamilyId("MyOtherFam",3)
2097         mm.setFamilyId("MyOther-1",-1)
2098         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2099         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2100         #
2101         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2102         mm.addGroup(0,daTest)
2103         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2104         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2105         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2106             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2107             pass
2108         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2109         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2110         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2111         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2112         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2113             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2114             pass
2115         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2116         da=DataArrayInt([3,12]) ; da.setName("grp0")
2117         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2118         da.setValues([1])
2119         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2120         mm.write(fname,2)
2121         mm=MEDFileMesh.New(fname)
2122         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2123         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2124         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2125             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2126             pass
2127         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2128         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2129         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2130         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2131         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2132             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2133             pass
2134         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2135         da=DataArrayInt([3,12]) ; da.setName("grp0")
2136         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2137         da.setValues([1])
2138         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2139         pass
2140
2141     def testHeapMem1(self):
2142         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2143         a.alloc(0,1)
2144         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2145         #
2146         m=MEDCouplingCMesh()
2147         arr=DataArrayDouble(10,1) ; arr.iota(0)
2148         m.setCoords(arr,arr)
2149         m=m.buildUnstructured()
2150         m.setName("mm")
2151         f=m.getMeasureField(False)
2152         self.assertIn(m.getHeapMemorySize(), list(range(3552 - 100, 3552 + 100 + 4 * strMulFac)))
2153         self.assertIn(f.getHeapMemorySize(), list(range(4215 - 100, 4215 + 100 + 8 * strMulFac)))
2154         #
2155         mm=MEDFileUMesh()
2156         mm.setMeshAtLevel(0,m)
2157         self.assertIn(mm.getHeapMemorySize(), list(range(3889 - 100, 4225 + 100 + 10 * strMulFac)))
2158         ff=MEDFileField1TS()
2159         ff.setFieldNoProfileSBT(f)
2160         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2161         #
2162         fff=MEDFileFieldMultiTS()
2163         fff.appendFieldNoProfileSBT(f)
2164         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2165         f.setTime(1.,0,-1)
2166         fff.appendFieldNoProfileSBT(f)
2167         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2168         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2169         f2=f[:50]
2170         f2.setTime(2.,1,-1)
2171         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2172         fff.appendFieldProfile(f2,mm,0,pfl)
2173         self.assertIn(fff.getHeapMemorySize(), list(range(2348 - 130, 2608 + 100 + (10 + 2) * strMulFac)))
2174         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(204 - 10, 204 + 10 + 2 * strMulFac)))
2175         self.assertIn(fff[1, -1].getHeapMemorySize(), list(range(738 - 50, 838 + 30 + 4 * strMulFac)))
2176         pass
2177
2178     def testCurveLinearMesh1(self):
2179         fname="Pyfile55.med"
2180         mesh=MEDCouplingCurveLinearMesh();
2181         mesh.setTime(2.3,4,5);
2182         mesh.setTimeUnit("us");
2183         mesh.setName("Example of Cuve linear mesh");
2184         mesh.setDescription("buildCLMesh");
2185         a1=DataArrayDouble(3*20,1);
2186         a1.iota(7.) ; a1.rearrange(3);
2187         mesh.setCoords(a1);
2188         mesh.setNodeGridStructure([4,5]);
2189         mesh.checkConsistencyLight();
2190         #
2191         m=MEDFileCurveLinearMesh()
2192         m.setMesh(mesh)
2193         d=DataArrayInt(20) ; d.iota(4)
2194         m.setFamilyFieldArr(1,d)
2195         d3=DataArrayInt(20) ; d3.iota(400)
2196         m.setRenumFieldArr(1,d3)
2197         d2=DataArrayInt(12) ; d2.iota(40)
2198         m.setFamilyFieldArr(0,d2)
2199         d4=DataArrayInt(21) ; d4.iota(4000)
2200         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2201         d4.popBackSilent()
2202         m.setRenumFieldArr(1,d4)
2203         m.write(fname,2)
2204         #
2205         m1=MEDFileCurveLinearMesh(fname)
2206         mm=m1.getMesh()
2207         self.assertTrue(mm.isEqual(mesh,1e-12))
2208         self.assertEqual(mm.getSpaceDimension(),3)
2209         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2210         #
2211         m1=MEDFileMesh.New(fname)
2212         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2213         self.assertTrue(isinstance(m1.getUnivName(),str))
2214         self.assertTrue(len(m1.getUnivName())!=0)
2215         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2216         pass
2217
2218     def testParameters1(self):
2219         fname="Pyfile56.med"
2220         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2221         mm=MEDFileCMesh() ; mm.setMesh(m)
2222         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2223         data=MEDFileData()
2224         p=MEDFileParameters()
2225         data.setParams(p) ; data.setMeshes(ms)
2226         pts=MEDFileParameterMultiTS()
2227         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2228         pts.appendValue(1,2,3.4,567.89)
2229         pts.appendValue(2,3,5.6,999.123)
2230         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2231         p.pushParam(pts) ; p.pushParam(pts2)
2232         data.write(fname,2)
2233         p2=MEDFileParameters(fname)
2234         self.assertTrue(p.isEqual(p2,1e-14)[0])
2235         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2236         p3=p.deepCopy()
2237         pts4=pts2.deepCopy()
2238         pts3=pts2.deepCopy()
2239         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2240         pts2.eraseTimeStepIds([0])
2241         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2242         del pts3[[3.4]]
2243         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2244         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2245         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2246         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2247         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2248         p=p3
2249         self.assertTrue(p.isEqual(p2,1e-14)[0])
2250         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2251         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2252         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2253         self.assertEqual(p.getParamsNames(),('A','B'))
2254         ptsr=MEDFileParameterMultiTS(fname,"B")
2255         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2256         ptsr=MEDFileParameterMultiTS(fname)
2257         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2258         p1tsr=MEDFileParameterDouble1TS(fname)
2259         self.assertEqual(p1tsr.getName(),"A")
2260         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2261         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2262         self.assertEqual(p1tsr.getName(),"B")
2263         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2264         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2265         self.assertEqual(p1tsr.getName(),"B")
2266         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2267         data2=MEDFileData(fname)
2268         self.assertEqual(2,data2.getNumberOfParams())
2269         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2270         pass
2271
2272     def testNamesOnCellAndNodesInMeshes1(self):
2273         fname="Pyfile58.med"
2274         fname2="Pyfile59.med"
2275         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2276         m1=m.buildDescendingConnectivity()[0]
2277         m1.sortCellsInMEDFileFrmt()
2278         #
2279         mm=MEDFileUMesh()
2280         mm.setMeshAtLevel(0,m)
2281         mm.setMeshAtLevel(-1,m1)
2282         namesCellL0=DataArrayAsciiChar(6,16)
2283         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2284         mm.setNameFieldAtLevel(0,namesCellL0)
2285         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2286         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2287         mm.setNameFieldAtLevel(-1,namesCellL1)
2288         namesNodes=namesCellL1.subArray(4,16)
2289         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2290         mm.setNameFieldAtLevel(1,namesNodes)
2291         mm.write(fname,2)
2292         #
2293         mmr=MEDFileMesh.New(fname)
2294         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2295         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2296         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2297         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2298         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2299         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2300         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2301         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2302         mmCpy=mm.deepCopy()
2303         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2304         # remove names on nodes
2305         mmCpy.setNameFieldAtLevel(1,None)
2306         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2307         mm.setNameFieldAtLevel(1,None)
2308         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2309         mm.setNameFieldAtLevel(-1,None)
2310         mm.write(fname,2)
2311         mmr=MEDFileMesh.New(fname)
2312         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2313         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2314         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2315         #
2316         c=MEDCouplingCMesh()
2317         arr=DataArrayDouble([0.,1.1,2.3])
2318         c.setCoords(arr,arr)
2319         c.setName("cmesh")
2320         cc=MEDFileCMesh()
2321         cc.setMesh(c)
2322         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2323         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2324         cc.write(fname2,2)
2325         ccr=MEDFileMesh.New(fname2)
2326         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2327         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2328         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2329         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2330         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2331         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2332         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2333         ccCpy=cc.deepCopy()
2334         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2335         pass
2336
2337     def testToExportInExamples1(self):
2338         m=MEDCouplingCMesh()
2339         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2340         m.setCoords(arr,arr)
2341         m=m.buildUnstructured() ; m.setName("mesh")
2342         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2343         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2344         m2=m.computeSkin()
2345         mm=MEDFileUMesh()
2346         mm.setMeshAtLevel(0,m)
2347         mm.setMeshAtLevel(-1,m2)
2348         mm.setGroupsAtLevel(0,[grp1,grp2])
2349         mm.write("example.med",2)
2350         #
2351         m0=mm.getMeshAtLevel(0)
2352         m1=mm.getMeshAtLevel(-1)
2353         grp1=mm.getGroupArr(0,"grp1")
2354         grp2=mm.getGroupArr(0,"grp2")
2355         grps=[grp1,grp2]
2356         whichGrp=DataArrayInt(m0.getNumberOfCells())
2357         whichGrp.fillWithValue(-1)
2358         for grpId,grp in enumerate(grps):
2359             whichGrp[grp]=grpId
2360             pass
2361         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2362         e,f=a.areCellsIncludedIn(m1,2)
2363         self.assertTrue(e)
2364         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2365         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2366         c2.transformWithIndArr(whichGrp)
2367         splitOfM1=len(grps)*[None]
2368         for grpId,grp in enumerate(grps):
2369             tmp=c2.findIdsEqual(grpId)
2370             splitOfM1[grpId]=tmp
2371             pass
2372         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2373         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2374         pass
2375
2376     def testBugCorrection1(self):
2377         fs=MEDFileFields()
2378         fs.resize(3)
2379         self.assertEqual(fs[0],None)
2380         self.assertEqual(3,len(fs))
2381         pass
2382
2383     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2384         f1Name="Pyfile60.med"
2385         f2Name="Pyfile61.med"
2386         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2387         d1.write(f1Name,2)
2388         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2389         d2.write(f2Name,2)
2390         # reading and compare
2391         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2392         for mn in d1.getMeshes().getMeshesNames():
2393             m1=d1.getMeshes()[mn]
2394             m2=d2.getMeshes()[mn]
2395             for lev in m1.getNonEmptyLevels():
2396                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2397                 for grpName in grpsNames:
2398                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2399                     pass
2400                 pass
2401             pass
2402         for fieldn in d1.getFields().getFieldsNames():
2403             f1=d1.getFields()[fieldn]
2404             f2=d2.getFields()[fieldn]
2405             for it,order,tim in f1.getTimeSteps():
2406                 f1t=f1[it,order]
2407                 f2t=f2[it,order]
2408                 if len(f1t.getPflsReallyUsed())!=0:
2409                     # profile case
2410                     for lev in f1t.getNonEmptyLevels()[1]:
2411                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2412                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2413                         self.assertTrue(pfl1.isEqual(pfl2))
2414                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2415                         pass
2416                     pass
2417                 else:
2418                     # no profile case
2419                     for lev in f1t.getNonEmptyLevels()[1]:
2420                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2421                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2422                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2423                         pass
2424                     pass
2425                 pass
2426             pass
2427         pass
2428
2429     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2430         m=MEDCouplingCMesh()
2431         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2432         m.setCoords(arr,arr,arr)
2433         m=m.buildUnstructured()
2434         m2=m.buildDescendingConnectivity()[0]
2435         m.setName("mesh")
2436         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2437         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2438         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2439         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2440         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2441         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2442         mm=MEDFileUMesh()
2443         mm.setMeshAtLevel(0,m)
2444         mm.setGroupsAtLevel(0,[g1,g2])
2445         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2446         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2447         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2448         mm.normalizeFamIdsMEDFile()
2449         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2450         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2451         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2452         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2453         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2454         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2455         for g in mm.getGroupsOnSpecifiedLev(0):
2456             for f in mm.getFamiliesIdsOnGroup(g):
2457                 self.assertTrue(f<0)
2458                 pass
2459             pass
2460         #
2461         mm=MEDFileUMesh()
2462         mm.setMeshAtLevel(0,m)
2463         mm.setMeshAtLevel(-1,m2)
2464         mm.setGroupsAtLevel(0,[g1,g2])
2465         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2466         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2467         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2468         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2469         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2470         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2471         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2472         mm.normalizeFamIdsMEDFile()
2473         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2474         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2475         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2476         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2477         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2478         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2479         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2480         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2481         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2482         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2483         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2484         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2485         for lev in [0,-1]:
2486             for g in mm.getGroupsOnSpecifiedLev(lev):
2487                 for f in mm.getFamiliesIdsOnGroup(g):
2488                     self.assertTrue(f<0)
2489                     pass
2490                 pass
2491             pass
2492          #
2493         mm=MEDFileUMesh()
2494         mm.setMeshAtLevel(0,m)
2495         mm.setMeshAtLevel(-1,m2)
2496         mm.setGroupsAtLevel(0,[g1,g2])
2497         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2498         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2499         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2500         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2501         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2502         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2503         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2504         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2505         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2506         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2507         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2508         mm.normalizeFamIdsMEDFile()
2509         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2510         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2511         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2512         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2513         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2514         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2515         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2516         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2517         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2518         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2519         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2520         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2521         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2522         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2523         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2524         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2525         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2526         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2527         for lev in [0,-1]:
2528             for g in mm.getGroupsOnSpecifiedLev(lev):
2529                 for f in mm.getFamiliesIdsOnGroup(g):
2530                     self.assertTrue(f<0)
2531                     pass
2532                 pass
2533             pass
2534         for g in mm.getGroupsOnSpecifiedLev(1):
2535             for f in mm.getFamiliesIdsOnGroup(g):
2536                 self.assertTrue(f>0)
2537                 pass
2538             pass
2539         pass
2540     
2541     def testNonRegressionMantis22212ChangeGrpName(self):
2542         fileName="Pyfile62.med"
2543         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2544         m=MEDFileUMesh.New()
2545         m.setCoords(m2.getCoords())
2546         m.setMeshAtLevel(0,m2)
2547         m.setMeshAtLevel(-1,m1)
2548         m.setMeshAtLevel(-2,m0)
2549         m.setFamilyFieldArr(0,f2)
2550         m.setFamilyFieldArr(-1,f1)
2551         m.setFamilyFieldArr(-2,f0)
2552         m.setFamilyFieldArr(1,p)
2553         nbOfFams=len(fns)
2554         for i in range(nbOfFams):
2555             m.addFamily(fns[i],fids[i])
2556             pass
2557         nbOfGrps=len(grpns)
2558         for i in range(nbOfGrps):
2559             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2560             pass
2561         m.setName(m2.getName())
2562         m.setDescription(m2.getDescription())
2563         m.write(fileName,2)
2564         #
2565         mm0=MEDFileMesh.New(fileName)
2566         mm1=MEDFileMesh.New(fileName)
2567         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2568         for name in groupNamesIni:
2569             mm1.changeGroupName(name,name+'N')
2570             pass
2571         mm1.write(fileName,2)
2572         del mm1
2573         #
2574         mm2=MEDFileMesh.New(fileName)
2575         for name in groupNamesIni:
2576             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2577                 arr0=mm0.getGroupArr(lev,name)
2578                 arr2=mm2.getGroupArr(lev,name+'N')
2579                 arr0.setName(name+'N')
2580                 self.assertTrue(arr0.isEqual(arr2))
2581                 pass
2582             pass
2583         pass
2584
2585     def testInt32InMEDFileFieldStar1(self):
2586         fname="Pyfile63.med"
2587         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2588         f1=f1.convertToIntField()
2589         m1=f1.getMesh()
2590         mm1=MEDFileUMesh.New()
2591         mm1.setCoords(m1.getCoords())
2592         mm1.setMeshAtLevel(0,m1)
2593         mm1.setName(m1.getName())
2594         mm1.write(fname,2)
2595         ff1=MEDFileIntField1TS()
2596         ff1.setFieldNoProfileSBT(f1)
2597         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2598         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2599         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2600         ff1.write(fname,0)
2601         ff2=MEDFileAnyTypeField1TS.New(fname)
2602         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2603         self.assertEqual(ff2.getTime(),[0,1,2.0])
2604         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2605         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2606         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2607         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2608         ff2.setTime(1,2,3.)
2609         c=ff2.getUndergroundDataArray() ; c*=2
2610         ff2.write(fname,0) # 2 time steps in 
2611         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2612         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2613         self.assertEqual(len(ffs1),2)
2614         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2615         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2616         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2617         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2618         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
2619         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2620         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2621         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2622         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2623         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
2624         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2625         for it in ffs1:
2626             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2627             bc+=a.getArray()
2628             pass
2629         self.assertTrue(bc.isEqual(3*f1.getArray()))
2630         nf1=MEDCouplingFieldInt(ON_NODES)
2631         nf1.setTime(9.,10,-1)
2632         nf1.setMesh(f1.getMesh())
2633         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2634         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2635         nff1=MEDFileIntField1TS.New()
2636         nff1.setFieldNoProfileSBT(nf1)
2637         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2638         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2639         nff1.write(fname,0)
2640         #
2641         nf2=MEDCouplingFieldInt(ON_NODES)
2642         nf2.setTime(19.,20,-11)
2643         nf2.setMesh(f1.getMesh())
2644         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2645         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2646         nff2=MEDFileIntField1TS.New()
2647         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2648         nff2.setFieldProfile(nf2,mm1,0,npfl)
2649         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2650         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2651         self.assertTrue(b.isEqual(npfl))
2652         self.assertTrue(a.isEqual(narr2))
2653         nff2.write(fname,0)
2654         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2655         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2656         self.assertTrue(b.isEqual(npfl))
2657         self.assertTrue(a.isEqual(narr2))
2658         #
2659         nf3=MEDCouplingFieldDouble(ON_NODES)
2660         nf3.setName("VectorFieldOnNodesDouble")
2661         nf3.setTime(29.,30,-21)
2662         nf3.setMesh(f1.getMesh())
2663         nf3.setArray(f1.getMesh().getCoords())
2664         nff3=MEDFileField1TS.New()
2665         nff3.setFieldNoProfileSBT(nf3)
2666         nff3.write(fname,0)
2667         fs=MEDFileFields(fname)
2668         self.assertEqual(len(fs),4)
2669         ffs=[it for it in fs]
2670         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2671         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2672         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2673         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2674         #
2675         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2676         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2677         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2678         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2679         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2680         #
2681         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2682         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2683         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2684         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2685         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2686         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2687         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2688         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2689         #
2690         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2691         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2692         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2693         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2694         pass
2695
2696     def testMEDFileFields1(self):
2697         fname="Pyfile64.med"
2698         f1=MEDCouplingFieldDouble(ON_NODES)
2699         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2700         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2701         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2702         f1.setMesh(m)
2703         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2704         f1.setArray(arr)
2705         f1.setName("Field1")
2706         ff1=MEDFileField1TS.New()
2707         ff1.setFieldNoProfileSBT(f1)
2708         self.assertEqual(ff1.getDtUnit(),"us")
2709         ff1.write(fname,0)
2710         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2711         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2712         #
2713         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2714         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2715         ff1s.setName("Field2")
2716         ff1s.write(fname,0)
2717         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2718         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2719         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2720         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2721         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2722         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2723         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2724         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2725         pass
2726
2727     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2728     def testMEDFileFields2(self):
2729         fname="Pyfile65.med"
2730         # to check that all is initialize 
2731         MEDFileField1TS().__str__()
2732         MEDFileFieldMultiTS().__str__()
2733         # building a mesh containing 4 tri3 + 5 quad4
2734         tri=MEDCouplingUMesh("tri",2)
2735         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2736         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2737         tris = [tri.deepCopy() for i in range(4)]
2738         for i,elt in enumerate(tris): elt.translate([i,0])
2739         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2740         quad=MEDCouplingUMesh("quad",2)
2741         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2742         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2743         quads = [quad.deepCopy() for i in range(5)]
2744         for i,elt in enumerate(quads): elt.translate([5+i,0])
2745         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2746         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2747         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2748         #
2749         fmts0_0=MEDFileFieldMultiTS()
2750         fmts0_1=MEDFileFieldMultiTS()
2751         # time steps
2752         for i in range(10):
2753             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2754             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2755             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2756             f.setTime(float(i+1)+0.1,i+1,-i-1)
2757             fmts0_0.appendFieldNoProfileSBT(f)
2758             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2759             self.assertEqual(fmts0_1.getName(),name1)
2760             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2761             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2762             if i>1:
2763                 # components names have been modified to generate errors
2764                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2765                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2766                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2767                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2768                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2769                 pass
2770             # add a mismatch of nb of compos
2771             pass
2772         fmts0_2=fmts0_0.deepCopy()
2773         fmts0_3=fmts0_0.deepCopy()
2774         fmts0_4=fmts0_0.deepCopy()
2775         fmts0_5=fmts0_0.shallowCpy()
2776         self.assertTrue(len(fmts0_0)==10 and len(fmts0_1)==10 and len(fmts0_2)==10 and len(fmts0_3)==10 and len(fmts0_4)==10 and len(fmts0_5)==10)
2777         del fmts0_2[::2]
2778         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2779         del fmts0_3[[1.1,(6,-6),9]]
2780         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2781         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2782         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2783         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2784         fmts0_7=fmts0_4[::-3]
2785         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2786         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2787         #
2788         fs0=MEDFileFields()
2789         fs0.pushField(fmts0_0)
2790         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2791         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2792         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2793         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2794         fs0.write(fname,2)
2795         fs0=MEDFileFields(fname)
2796         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2797         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2798         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2799         del fs1[["2ndField",3]]
2800         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2801         fs2=fs0[[0,"4thField"]]
2802         self.assertTrue(isinstance(fs2,MEDFileFields))
2803         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2804         #
2805         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2806         pass
2807
2808     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2809     def testMEDFileFields3(self):
2810         fname="Pyfile66.med"
2811         # building a mesh containing 4 tri3 + 5 quad4
2812         tri=MEDCouplingUMesh("tri",2)
2813         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2814         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2815         tris = [tri.deepCopy() for i in range(4)]
2816         for i,elt in enumerate(tris): elt.translate([i,0])
2817         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2818         quad=MEDCouplingUMesh("quad",2)
2819         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2820         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2821         quads = [quad.deepCopy() for i in range(5)]
2822         for i,elt in enumerate(quads): elt.translate([5+i,0])
2823         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2824         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2825         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2826         #
2827         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2828         #
2829         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2830         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2831         fmts0_0=MEDFileFieldMultiTS()
2832         fmts0_1=MEDFileFieldMultiTS()
2833         # time steps
2834         for i in range(10):
2835             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2836             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2837             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2838             f.setTime(float(i+1)+0.1,i+1,-i-1)
2839             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2840             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2841             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2842             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2843             pass
2844         #
2845         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2846         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2847         fmts0_0.zipPflsNames()
2848         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2849         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2850         fmts0_2=fmts0_0.deepCopy()
2851         fmts0_3=fmts0_0.deepCopy()
2852         fmts0_4=fmts0_0.deepCopy()
2853         fs0=MEDFileFields()
2854         fs0.pushField(fmts0_0)
2855         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2856         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2857         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2858         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2859         #
2860         fmts0_5=MEDFileFieldMultiTS()
2861         for i in range(7):
2862             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2863             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2864             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2865             f.setTime(float(i+1)+0.1,i+1,-i-1)
2866             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2867             pass
2868         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2869         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2870         fs0.checkGlobsCoherency()
2871         fs0.write(fname,0)
2872         pass
2873     
2874     def testSplitComponents1(self):
2875         fname="Pyfile67.med"
2876         # building a mesh containing 4 tri3 + 5 quad4
2877         tri=MEDCouplingUMesh("tri",2)
2878         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2879         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2880         tris = [tri.deepCopy() for i in range(4)]
2881         for i,elt in enumerate(tris): elt.translate([i,0])
2882         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2883         quad=MEDCouplingUMesh("quad",2)
2884         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2885         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2886         quads = [quad.deepCopy() for i in range(5)]
2887         for i,elt in enumerate(quads): elt.translate([5+i,0])
2888         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2889         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2890         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2891         #
2892         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2893         #
2894         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2895         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2896         fs=MEDFileFields()
2897         fmts0_1=MEDFileFieldMultiTS()
2898         # time steps
2899         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2900         for i in range(10):
2901             name1="1stField"
2902             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2903             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2904             f.setTime(float(i+1)+0.1,i+1,-i-1)
2905             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2906             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2907             pass
2908         fs.pushField(fmts0_1)
2909         self.assertEqual(1,len(fs))
2910         l=fmts0_1.splitComponents()
2911         self.assertEqual(3,len(l))
2912         for elt in l: self.assertEqual(10,len(elt))
2913         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2914         for elt in l:
2915             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2916             pass
2917         fs.pushFields(l)
2918         self.assertEqual(4,len(fs))
2919         for elt in fs: self.assertEqual(10,len(elt))
2920         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2921         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2922         #
2923         fs.write(fname,0) ; del fs
2924         #
2925         fs1=MEDFileFields(fname)
2926         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2927         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2928         self.assertEqual(4,len(fs1))
2929         for i in range(10):
2930             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2931                 f1ts=fs1[fieldName][i]
2932                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2933                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2934                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2935                 pass
2936             f1ts=fs1["1stField"][i]
2937             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2938             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2939             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2940             pass
2941         pass
2942
2943     def testMEDFileFieldConvertTo1(self):
2944         fname="Pyfile68.med"
2945         # building a mesh containing 4 tri3 + 5 quad4
2946         tri=MEDCouplingUMesh("tri",2)
2947         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2948         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2949         tris = [tri.deepCopy() for i in range(4)]
2950         for i,elt in enumerate(tris): elt.translate([i,0])
2951         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2952         quad=MEDCouplingUMesh("quad",2)
2953         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2954         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2955         quads = [quad.deepCopy() for i in range(5)]
2956         for i,elt in enumerate(quads): elt.translate([5+i,0])
2957         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2958         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2959         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2960         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2961         #
2962         ff0=MEDFileField1TS()
2963         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
2964         f0.checkConsistencyLight()
2965         ff0.setFieldNoProfileSBT(f0)
2966         #
2967         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2968         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2969         #
2970         ff0i=ff0.convertToInt()
2971         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2972         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2973         #
2974         ff1=ff0i.convertToDouble()
2975         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2976         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2977         # With profiles
2978         del arr,f0,ff0,ff1,ff0i,fspExp
2979         ff0=MEDFileField1TS()
2980         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
2981         f0.checkConsistencyLight()
2982         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
2983         ff0.setFieldProfile(f0,mm,0,pfl)
2984         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
2985         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2986         #
2987         ff0i=ff0.convertToInt()
2988         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
2989         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
2990         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
2991         #
2992         ff1=ff0i.convertToDouble()
2993         self.assertTrue(isinstance(ff1,MEDFileField1TS))
2994         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
2995         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
2996         ## MultiTimeSteps
2997         ff0=MEDFileFieldMultiTS()
2998         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(0.1,0,10)
2999         f0.checkConsistencyLight()
3000         ff0.appendFieldProfile(f0,mm,0,pfl)
3001         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(100) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(1.1,1,11)
3002         f0.checkConsistencyLight()
3003         ff0.appendFieldProfile(f0,mm,0,pfl)
3004         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(200) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(2.1,2,12)
3005         f0.checkConsistencyLight()
3006         ff0.appendFieldProfile(f0,mm,0,pfl)
3007         ff1=ff0.convertToInt()
3008         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3009         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3010         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3011             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3012             arr=ff1.getUndergroundDataArray(dt,it)
3013             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3014             pass
3015         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3016         #
3017         mm.write(fname,2)
3018         ff1.write(fname,0)
3019         #
3020         ff1=ff1.convertToDouble()
3021         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3022         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3023         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3024             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3025             arr=ff1.getUndergroundDataArray(dt,it)
3026             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3027             pass
3028         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3029         #
3030         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3031         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3032         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3033         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3034             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3035             arr=ff1.getUndergroundDataArray(dt,it)
3036             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3037             pass
3038         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3039         pass
3040
3041     def testMEDFileFieldPartialLoading(self):
3042         fname="Pyfile69.med"
3043         #
3044         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3045         a.alloc(0,1)
3046         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3047         # building a mesh containing 30 tri3 + 40 quad4
3048         tri=MEDCouplingUMesh("tri",2)
3049         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3050         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3051         tris = [tri.deepCopy() for i in range(30)]
3052         for i,elt in enumerate(tris): elt.translate([i,0])
3053         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3054         quad=MEDCouplingUMesh("quad",2)
3055         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3056         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3057         quads = [quad.deepCopy() for i in range(40)]
3058         for i,elt in enumerate(quads): elt.translate([40+i,0])
3059         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3060         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3061         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3062         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3063         #
3064         ff0=MEDFileField1TS()
3065         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3066         f0.checkConsistencyLight()
3067         ff0.setFieldNoProfileSBT(f0)
3068         ff0.write(fname,0)
3069         #
3070         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3071         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3072         # With profiles
3073         ff0=MEDFileField1TS()
3074         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:50]) ; arr=DataArrayDouble(50*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
3075         f0.checkConsistencyLight()
3076         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3077         ff0.setFieldProfile(f0,mm,0,pfl)
3078         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3079         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3080         ff0.write(fname,0)
3081         #
3082         ff0=MEDFileField1TS(fname,False)
3083         self.assertEqual(ff0.getName(),"FieldCell")
3084         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3085         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3086         heap_memory_ref=ff0.getHeapMemorySize()
3087         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3088         ff0.loadArrays() ##
3089         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3090         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3091         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3092         #
3093         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3094         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3095         heap_memory_ref=ff0.getHeapMemorySize()
3096         self.assertIn(heap_memory_ref, list(range(350, 600 + 6 * strMulFac)))
3097         ff0.loadArrays() ##
3098         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3099         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3100         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3101         ff0.loadArrays() ##
3102         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3103         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3104         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3105         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3106         ff0.loadArrays() ##
3107         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3108         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3109         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3110         ff0.loadArraysIfNecessary() ##
3111         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3112         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3113         heap_memory_ref=ff0.getHeapMemorySize()
3114         self.assertIn(heap_memory_ref, list(range(1100, 1400 + 2 * strMulFac)))
3115         ff0.unloadArrays()
3116         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3117         self.assertEqual(hmd,-800) # -50*8*2
3118         ff0.loadArrays() ##
3119         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3120         #
3121         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3122         heap_memory_ref=ff0.getHeapMemorySize()
3123         self.assertIn(heap_memory_ref, list(range(299, 620 + 6 * strMulFac)))
3124         ff0.loadArrays() ##
3125         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3126         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3127         #
3128         fieldName="FieldCellMultiTS"
3129         ff0=MEDFileFieldMultiTS()
3130         for t in range(20):
3131             f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota(float(t+1000)) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName(fieldName)
3132             f0.setTime(float(t)+0.1,t,100+t)
3133             f0.checkConsistencyLight()
3134             ff0.appendFieldNoProfileSBT(f0)
3135             pass
3136         ff0.write(fname,0)
3137         #
3138         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3139         heap_memory_ref=ff0.getHeapMemorySize()
3140         self.assertIn(heap_memory_ref, list(range(5536, 9212 + (80 + 26 + 1) * strMulFac)))
3141         ff0.loadArrays()
3142         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3143         del ff0
3144         #
3145         ffs=MEDFileFields(fname,False)
3146         heap_memory_ref=ffs.getHeapMemorySize()
3147         self.assertIn(heap_memory_ref, list(range(5335, 10031 + (80 + 50 + len(ffs)) * strMulFac)))
3148         ffs.loadArrays()
3149         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3150         pass
3151
3152     def testMEDFileMeshReadSelector1(self):
3153         mrs=MEDFileMeshReadSelector()
3154         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3155         mrs.__str__() ; mrs.__repr__()
3156         #
3157         mrs=MEDFileMeshReadSelector(0)
3158         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3159         mrs=MEDFileMeshReadSelector(1)
3160         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3161         mrs=MEDFileMeshReadSelector(2)
3162         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3163         mrs=MEDFileMeshReadSelector(3)
3164         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3165         mrs=MEDFileMeshReadSelector(4)
3166         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3167         mrs=MEDFileMeshReadSelector(5)
3168         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3169         mrs=MEDFileMeshReadSelector(6)
3170         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3171         mrs=MEDFileMeshReadSelector(7)
3172         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3173         mrs=MEDFileMeshReadSelector(8)
3174         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3175         mrs=MEDFileMeshReadSelector(9)
3176         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3177         mrs=MEDFileMeshReadSelector(10)
3178         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3179         mrs=MEDFileMeshReadSelector(11)
3180         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3181         mrs=MEDFileMeshReadSelector(12)
3182         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3183         mrs=MEDFileMeshReadSelector(13)
3184         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3185         mrs=MEDFileMeshReadSelector(14)
3186         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3187         mrs=MEDFileMeshReadSelector(15)
3188         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3189         mrs=MEDFileMeshReadSelector(16)
3190         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3191         mrs=MEDFileMeshReadSelector(17)
3192         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3193         mrs=MEDFileMeshReadSelector(18)
3194         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3195         mrs=MEDFileMeshReadSelector(19)
3196         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3197         mrs=MEDFileMeshReadSelector(20)
3198         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3199         mrs=MEDFileMeshReadSelector(21)
3200         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3201         mrs=MEDFileMeshReadSelector(22)
3202         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3203         mrs=MEDFileMeshReadSelector(23)
3204         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3205         mrs=MEDFileMeshReadSelector(24)
3206         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3207         mrs=MEDFileMeshReadSelector(25)
3208         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3209         mrs=MEDFileMeshReadSelector(26)
3210         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3211         mrs=MEDFileMeshReadSelector(27)
3212         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3213         mrs=MEDFileMeshReadSelector(28)
3214         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3215         mrs=MEDFileMeshReadSelector(29)
3216         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3217         mrs=MEDFileMeshReadSelector(30)
3218         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3219         mrs=MEDFileMeshReadSelector(31)
3220         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3221         mrs=MEDFileMeshReadSelector(32)
3222         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3223         mrs=MEDFileMeshReadSelector(33)
3224         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3225         mrs=MEDFileMeshReadSelector(34)
3226         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3227         mrs=MEDFileMeshReadSelector(35)
3228         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3229         mrs=MEDFileMeshReadSelector(36)
3230         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3231         mrs=MEDFileMeshReadSelector(37)
3232         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3233         mrs=MEDFileMeshReadSelector(38)
3234         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3235         mrs=MEDFileMeshReadSelector(39)
3236         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3237         mrs=MEDFileMeshReadSelector(40)
3238         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3239         mrs=MEDFileMeshReadSelector(41)
3240         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3241         mrs=MEDFileMeshReadSelector(42)
3242         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3243         mrs=MEDFileMeshReadSelector(43)
3244         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3245         mrs=MEDFileMeshReadSelector(44)
3246         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3247         mrs=MEDFileMeshReadSelector(45)
3248         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3249         mrs=MEDFileMeshReadSelector(46)
3250         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3251         mrs=MEDFileMeshReadSelector(47)
3252         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3253         mrs=MEDFileMeshReadSelector(48)
3254         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3255         mrs=MEDFileMeshReadSelector(49)
3256         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3257         mrs=MEDFileMeshReadSelector(50)
3258         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3259         mrs=MEDFileMeshReadSelector(51)
3260         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3261         mrs=MEDFileMeshReadSelector(52)
3262         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3263         mrs=MEDFileMeshReadSelector(53)
3264         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3265         mrs=MEDFileMeshReadSelector(54)
3266         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3267         mrs=MEDFileMeshReadSelector(55)
3268         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3269         mrs=MEDFileMeshReadSelector(56)
3270         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3271         mrs=MEDFileMeshReadSelector(57)
3272         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3273         mrs=MEDFileMeshReadSelector(58)
3274         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3275         mrs=MEDFileMeshReadSelector(59)
3276         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3277         mrs=MEDFileMeshReadSelector(60)
3278         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3279         mrs=MEDFileMeshReadSelector(61)
3280         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3281         mrs=MEDFileMeshReadSelector(62)
3282         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3283         mrs=MEDFileMeshReadSelector(63)
3284         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3285         #
3286         mrs=MEDFileMeshReadSelector(63)
3287         mrs.setCellFamilyFieldReading(False)
3288         self.assertEqual(mrs.getCode(),62)
3289         mrs.setCellFamilyFieldReading(True)
3290         self.assertEqual(mrs.getCode(),63)
3291         mrs.setNodeFamilyFieldReading(False)
3292         self.assertEqual(mrs.getCode(),61)
3293         mrs.setNodeFamilyFieldReading(True)
3294         self.assertEqual(mrs.getCode(),63)
3295         mrs.setCellNameFieldReading(False)
3296         self.assertEqual(mrs.getCode(),59)
3297         mrs.setCellNameFieldReading(True)
3298         self.assertEqual(mrs.getCode(),63)
3299         mrs.setNodeNameFieldReading(False)
3300         self.assertEqual(mrs.getCode(),55)
3301         mrs.setNodeNameFieldReading(True)
3302         self.assertEqual(mrs.getCode(),63)
3303         mrs.setCellNumFieldReading(False)
3304         self.assertEqual(mrs.getCode(),47)
3305         mrs.setCellNumFieldReading(True)
3306         self.assertEqual(mrs.getCode(),63)
3307         mrs.setNodeNumFieldReading(False)
3308         self.assertEqual(mrs.getCode(),31)
3309         mrs.setNodeNumFieldReading(True)
3310         self.assertEqual(mrs.getCode(),63)
3311         pass
3312     
3313     def testPartialReadOfMeshes(self):
3314         fname="Pyfile70.med"
3315         # building a mesh containing 4 tri3 + 5 quad4
3316         tri=MEDCouplingUMesh("tri",2)
3317         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3318         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3319         tris = [tri.deepCopy() for i in range(4)]
3320         for i,elt in enumerate(tris): elt.translate([i,0])
3321         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3322         quad=MEDCouplingUMesh("quad",2)
3323         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3324         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3325         quads = [quad.deepCopy() for i in range(5)]
3326         for i,elt in enumerate(quads): elt.translate([5+i,0])
3327         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3328         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3329         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3330         m1=m.buildDescendingConnectivity()[0]
3331         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3332         #
3333         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3334         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3335         mm.setGroupsAtLevel(0,[grp0,grp1])
3336         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3337         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3338         mm.setGroupsAtLevel(-1,[grp2,grp3])
3339         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3340         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3341         mm.setGroupsAtLevel(1,[grp4,grp5])
3342         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3343         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3344         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3345         #
3346         mm.write(fname,2)
3347         ##
3348         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3349         b4_ref_heap_mem=mm.getHeapMemorySize()
3350         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3351         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3352         ref_heap_mem=mm.getHeapMemorySize()
3353         # check the gain of memory using 1GTUMesh instead of UMesh
3354         self.assertTrue(ref_heap_mem-b4_ref_heap_mem>=(32+9)*4*2-32)# 32+9=nbCells 4=sizeof(int) 2=the types+index -32=loss linked to vector
3355         #
3356         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3357         self.assertEqual(len(mm.getGroupsNames()),0)
3358         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3359         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3360         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3361         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3362         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3363         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3364         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3365         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3366         delta1=ref_heap_mem-mm.getHeapMemorySize()
3367         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3368         #
3369         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3370         self.assertEqual(len(mm.getGroupsNames()),6)
3371         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3372         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3373         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3374         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3375         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3376         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3377         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3378         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3379         delta2=ref_heap_mem-mm.getHeapMemorySize()
3380         self.assertTrue(delta2<delta1)
3381         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3382         #
3383         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3384         self.assertEqual(len(mm.getGroupsNames()),6)
3385         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3386         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3387         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3388         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3389         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3390         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3391         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3392         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3393         delta3=ref_heap_mem-mm.getHeapMemorySize()
3394         self.assertTrue(delta3<delta2)
3395         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3396         #
3397         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3398         self.assertEqual(len(mm.getGroupsNames()),6)
3399         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3400         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3401         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3402         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3403         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3404         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3405         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3406         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3407         delta4=ref_heap_mem-mm.getHeapMemorySize()
3408         self.assertTrue(delta4<delta3)
3409         self.assertTrue(delta4>=32*4*2)
3410         #
3411         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3412         self.assertEqual(len(mm.getGroupsNames()),6)
3413         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3414         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3415         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3416         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3417         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3418         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3419         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3420         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3421         delta5=ref_heap_mem-mm.getHeapMemorySize()
3422         self.assertTrue(delta5<delta4)
3423         self.assertEqual(delta5,0)
3424         pass
3425
3426     # this test checks that setFieldProfile perform a check of the array length
3427     # compared to the profile length. This test also checks that mesh attribute of field
3428     # is not used by setFieldProfile (because across this test mesh is equal to None)
3429     def testCheckCompatibilityPfl1(self):
3430         # building a mesh containing 4 tri3 + 5 quad4
3431         tri=MEDCouplingUMesh("tri",2)
3432         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3433         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3434         tris = [tri.deepCopy() for i in range(4)]
3435         for i,elt in enumerate(tris): elt.translate([i,0])
3436         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3437         quad=MEDCouplingUMesh("quad",2)
3438         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3439         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3440         quads = [quad.deepCopy() for i in range(5)]
3441         for i,elt in enumerate(quads): elt.translate([5+i,0])
3442         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3443         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3444         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3445         m1=m.buildDescendingConnectivity()[0]
3446         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3447         #
3448         f1ts=MEDFileField1TS()
3449         f=MEDCouplingFieldDouble(ON_NODES)
3450         vals=DataArrayDouble(7) ; vals.iota(1000)
3451         f.setArray(vals)
3452         f.setName("anonymous") # f has no mesh it is not a bug
3453         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3454         f1ts.setFieldProfile(f,mm,0,pfl)
3455         #
3456         f1ts=MEDFileField1TS()
3457         f=MEDCouplingFieldDouble(ON_NODES)
3458         vals=DataArrayDouble(8) ; vals.iota(1000)
3459         f.setArray(vals)
3460         f.setName("anonymous") # f has no mesh it is not a bug
3461         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3462         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3463         #
3464         f1ts=MEDFileField1TS()
3465         f=MEDCouplingFieldDouble(ON_CELLS)
3466         vals=DataArrayDouble(7) ; vals.iota(1000)
3467         f.setArray(vals)
3468         f.setName("anonymous") # f has no mesh it is not a bug
3469         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3470         f1ts.setFieldProfile(f,mm,0,pfl)
3471         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3472         #
3473         f1ts=MEDFileField1TS()
3474         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3475         vals=DataArrayDouble(27) ; vals.iota(1000)
3476         f.setArray(vals)
3477         f.setName("anonymous") # f has no mesh it is not a bug
3478         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3479         f.setMesh(m[pfl])
3480         f.setGaussLocalizationOnCells([0,1],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.1,0.1],[0.3,0.6,0.1])
3481         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3482         f.setGaussLocalizationOnCells([3,4,5,6],[0.,0.,1.,0.,1.,1.,0.,1.],[0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.5,0.5],[0.2,0.3,0.4,0.07,0.03])
3483         f.setMesh(None)
3484         f1ts.setFieldProfile(f,mm,0,pfl)
3485         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3486         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3487         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3488         vals=DataArrayDouble(27) ; vals.iota(1000)
3489         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3490         #
3491         f1ts=MEDFileField1TS()
3492         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3493         vals=DataArrayDouble(25) ; vals.iota(1000)
3494         f.setArray(vals)
3495         f.setName("anonymous") # f has no mesh it is not a bug
3496         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3497         f1ts.setFieldProfile(f,mm,0,pfl)
3498         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3499         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3500         f.setArray(vals2)
3501         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3502         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3503         #
3504         f1ts=MEDFileField1TS()
3505         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3506         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3507         f.setArray(vals)
3508         f1ts.setFieldProfile(f,mm,0,pfl)
3509         pass
3510     
3511     def testWRMeshWithNoCells(self):
3512         fname="Pyfile71.med"
3513         a=DataArrayDouble(4) ; a.iota()
3514         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3515         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3516         m=MEDFileUMesh()
3517         m.setMeshAtLevel(0,m00)
3518         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3519         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3520         m.write(fname,2)
3521         del m,a,c,m0,m00
3522         #
3523         m=MEDFileMesh.New(fname)
3524         self.assertEqual((),m.getNonEmptyLevels())
3525         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3)]),1e-12))
3526         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3527         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3528         pass
3529
3530     def testWRQPolyg1(self):
3531         fname="Pyfile72.med"
3532         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3533         m.insertNextCell([0,2,1,3])
3534         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3535         #
3536         ms = [m.deepCopy() for i in range(4)]
3537         for i,elt in enumerate(ms):
3538             elt.translate([float(i)*1.5,0.])
3539             pass
3540         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3541         m0.convertAllToPoly()
3542         #
3543         ms = [m.deepCopy() for i in range(5)]
3544         for i,elt in enumerate(ms):
3545             elt.translate([float(i)*1.5,1.5])
3546             pass
3547         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3548         m1.convertAllToPoly()
3549         m1.convertLinearCellsToQuadratic()
3550         #
3551         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3552         ##
3553         mm=MEDFileUMesh()
3554         mm.setMeshAtLevel(0,m)
3555         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3556         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3557         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3558         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3559         ##
3560         mm.write(fname,2)
3561         del mm
3562         #
3563         mm_read=MEDFileUMesh(fname)
3564         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3565         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3566         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3567         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3568         ##
3569         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3570         f.setMesh(m)
3571         arr0=DataArrayDouble(9) ; arr0.iota()
3572         arr1=DataArrayDouble(9) ; arr1.iota(100)
3573         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3574         f.setArray(arr) ; f.checkConsistencyLight()
3575         f.setTime(5.6,1,2)
3576         ff=MEDFileField1TS()
3577         ff.setFieldNoProfileSBT(f)
3578         ff.write(fname,0)
3579         ##
3580         ff_read=MEDFileField1TS(fname)
3581         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3582         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3583         pass
3584
3585     def testLoadIfNecessaryOnFromScratchFields0(self):
3586         """
3587         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3588         """
3589         fname="Pyfile77.med"
3590         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3591         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3592         m.allocateCells()
3593         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3594         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3595         m.finishInsertingCells()
3596         #
3597         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3598         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3599         fs=MEDFileFields()
3600         arrs=4*[None]
3601         #
3602         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3603         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3604         f0.setTime(1.1,1,1)
3605         f0.setName("myELNOField")
3606         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3607         f0.setArray(arrs[0])
3608         ff0.appendFieldNoProfileSBT(f0)
3609         #
3610         f0.setTime(2.2,2,1)
3611         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3612         f0.setArray(arrs[1])
3613         ff0.appendFieldNoProfileSBT(f0)
3614         #
3615         f0.setTime(3.3,3,1)
3616         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3617         f0.setArray(arrs[2])
3618         ff0.appendFieldNoProfileSBT(f0)
3619         #
3620         f0.setTime(4.4,4,1)
3621         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3622         f0.setArray(arrs[3])
3623         ff0.appendFieldNoProfileSBT(f0)
3624         #
3625         for i,arr in enumerate(arrs):
3626             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3627             fs[0][i].loadArraysIfNecessary()
3628             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3629             pass
3630         fs.loadArraysIfNecessary()
3631         for i,arr in enumerate(arrs):
3632             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3633             pass
3634         fs[0].loadArraysIfNecessary()
3635         for i,arr in enumerate(arrs):
3636             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3637             pass
3638         pass
3639     
3640     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3641         """ This test is very important, because the same mechanism is used by the MEDReader to generate a field on all the mesh without any processing and memory.
3642         """
3643         fname="Pyfile78.med"
3644         coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
3645         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3646         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3647         m0.allocateCells()
3648         for elt in [[0,1,2,3],[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7],[5,6,7,8]]:#6
3649             m0.insertNextCell(NORM_TETRA4,elt)
3650             pass
3651         for elt in [[0,1,2,3,4],[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]]:#5
3652             m0.insertNextCell(NORM_PYRA5,elt)
3653             pass
3654         for elt in [[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8]]:#4
3655             m0.insertNextCell(NORM_PENTA6,elt)
3656             pass
3657         m0.checkConsistency()
3658         m1=MEDCouplingUMesh(); m1.setName("mesh")
3659         m1.setMeshDimension(2);
3660         m1.allocateCells(5);
3661         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3662         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3663         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3664         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3665         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3666         m1.setCoords(coords);
3667         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3668         m3.allocateCells()
3669         m3.insertNextCell(NORM_POINT1,[2])
3670         m3.insertNextCell(NORM_POINT1,[3])
3671         m3.insertNextCell(NORM_POINT1,[4])
3672         m3.insertNextCell(NORM_POINT1,[5])
3673         #
3674         mm=MEDFileUMesh()
3675         mm.setMeshAtLevel(0,m0)
3676         mm.setMeshAtLevel(-1,m1)
3677         mm.setMeshAtLevel(-3,m3)
3678         mm.write(fname,2)
3679         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3680         mm=MEDFileMesh.New(fname)
3681         fs=MEDFileFields()
3682         fmts=MEDFileFieldMultiTS()
3683         f1ts=MEDFileField1TS()
3684         for lev in mm.getNonEmptyLevels():
3685             for gt in mm.getGeoTypesAtLevel(lev):
3686                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3687                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3688                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3689                 f.setArray(arr) ; f.setName("f0")
3690                 f1ts.setFieldNoProfileSBT(f)
3691                 pass
3692             pass
3693         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3694         for lev in [0,-1,-3]:
3695             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3696             pass
3697         fmts.pushBackTimeStep(f1ts)
3698         fs.pushField(fmts)
3699         fs.write(fname,0)
3700         del fs,fmts,f1ts
3701         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3702         fs=MEDFileFields(fname)
3703         self.assertEqual(len(fs),1)
3704         self.assertEqual(len(fs[0]),1)
3705         f1ts=fs[0][0]
3706         self.assertEqual(f1ts.getFieldSplitedByType(),[(0,[(0,(0,4),'','')]),(3,[(0,(4,6),'','')]),(4,[(0,(6,9),'','')]),(14,[(0,(9,15),'','')]),(15,[(0,(15,20),'','')]),(16,[(0,(20,24),'','')])])
3707         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0,1,2,3,0,1,0,1,2,0,1,2,3,4,5,0,1,2,3,4,0,1,2,3]),1e-12))
3708         pass
3709
3710     def testMEDFileUMeshSetName(self):
3711         """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the convertion is performed in memory and a preparation is done then.
3712         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3713         """
3714         fname="Pyfile79.med"
3715         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3716         mm=MEDFileUMesh()
3717         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3718         coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
3719         m0.allocateCells(5);
3720         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3721         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3722         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3723         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3724         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3725         m0.setCoords(coords);
3726         mm.setMeshAtLevel(0,m0)
3727         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3728         m2.allocateCells()
3729         m2.insertNextCell(NORM_POINT1,[2])
3730         m2.insertNextCell(NORM_POINT1,[3])
3731         m2.insertNextCell(NORM_POINT1,[4])
3732         m2.insertNextCell(NORM_POINT1,[5])
3733         mm.setMeshAtLevel(-2,m2)
3734         self.assertEqual(mm.getName(),"")
3735         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3736         mm.forceComputationOfParts()
3737         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3738         mm.setName("abc")
3739         self.assertEqual(mm.getName(),"abc")
3740         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3741         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3742         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3743         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3744         pass
3745
3746     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3747         fileName="Pyfile80.med"
3748         m=MEDCouplingCMesh() ; m.setName("cmesh")
3749         arr=DataArrayDouble(6) ; arr.iota()
3750         m.setCoords(arr,arr)
3751         nbCells=m.getNumberOfCells()
3752         self.assertEqual(25,nbCells)
3753         f=MEDCouplingFieldDouble(ON_CELLS)
3754         f.setName("FieldOnCell") ; f.setMesh(m)
3755         arr=DataArrayDouble(nbCells) ; arr.iota()
3756         mm=MEDFileCMesh()
3757         mm.setMesh(m)
3758         #
3759         fmts=MEDFileFieldMultiTS()
3760         #
3761         for i in range(nbCells):
3762             t=(float(i)+0.1,i+1,-i-2)
3763             f.setTime(*t)
3764             arr2=DataArrayDouble(nbCells)
3765             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3766             arr2[perm]=arr
3767             f.setArray(arr2)
3768             f1ts=MEDFileField1TS()
3769             f1ts.setFieldNoProfileSBT(f)
3770             fmts.pushBackTimeStep(f1ts)
3771             pass
3772         fmts.unloadArraysWithoutDataLoss()
3773         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3774         fs=MEDFileFields() ; fs.pushField(fmts)
3775         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3776         fs.unloadArraysWithoutDataLoss()
3777         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3778         f1ts=fs[0][0]
3779         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3780         f1ts.unloadArraysWithoutDataLoss()
3781         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3782         mm.write(fileName,2)
3783         fs.write(fileName,0)
3784         del m,fmts,mm,f,f1ts
3785         ##
3786         mm=MEDFileMesh.New(fileName)
3787         fmts=MEDFileFieldMultiTS(fileName)
3788         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3789         fmts.unloadArraysWithoutDataLoss()
3790         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3791         fmts.loadArraysIfNecessary()
3792         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3793         del mm,fmts
3794         fs=MEDFileFields(fileName)
3795         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3796         fs.unloadArraysWithoutDataLoss()
3797         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3798         fs.loadArraysIfNecessary()
3799         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3800         del fs
3801         f1ts=MEDFileField1TS(fileName)
3802         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3803         f1ts.unloadArraysWithoutDataLoss()
3804         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3805         f1ts.loadArraysIfNecessary()
3806         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3807         pass
3808
3809     def testMEDFileUMeshLoadPart1(self):
3810         """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specfied using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
3811         memory of the returned instance.
3812         """
3813         fileName="Pyfile81.med"
3814         arr=DataArrayDouble(6) ; arr.iota()
3815         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3816         m=m.buildUnstructured()
3817         m.setName("Mesh")
3818         m.changeSpaceDimension(3,0.)
3819         infos=["aa [b]","cc [de]","gg [klm]"]
3820         m.getCoords().setInfoOnComponents(infos)
3821         m.checkConsistency()
3822         mm=MEDFileUMesh()
3823         mm.setMeshAtLevel(0,m)
3824         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3825         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3826         mm.setMeshAtLevel(-1,m1)
3827         renum0=DataArrayInt([3,6,7,10,11,0,2,1,9,8,5,4,12,13,14,24,23,22,21,20,19,18,17,16,15])
3828         famField0=DataArrayInt([-3,-6,-7,-10,-11,0,-2,-1,-9,-8,-5,-4,-12,-13,-14,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15])
3829         namesCellL0=DataArrayAsciiChar(25,16)
3830         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
3831         renumM1=DataArrayInt([3,4,0,2,1])
3832         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3833         mm.setRenumFieldArr(0,renum0)
3834         mm.setFamilyFieldArr(0,famField0)
3835         mm.setNameFieldAtLevel(0,namesCellL0)
3836         mm.setRenumFieldArr(-1,renumM1)
3837         mm.setFamilyFieldArr(-1,famFieldM1)
3838         renum1=DataArrayInt([13,16,17,20,21,10,12,11,19,18,15,14,22,23,24,34,33,32,31,30,29,28,27,26,25,45,44,43,42,41,40,39,38,37,36,35])
3839         famField1=DataArrayInt([-13,-16,-17,-20,-21,-10,-12,-11,-19,-18,-15,-14,-22,-23,-24,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35])
3840         namesNodes=DataArrayAsciiChar(36,16)
3841         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
3842         mm.setRenumFieldArr(1,renum1)
3843         mm.setFamilyFieldArr(1,famField1)
3844         mm.setNameFieldAtLevel(1,namesNodes)
3845         mm.setFamilyId("Fam7",77)
3846         mm.setFamilyId("Fam8",88)
3847         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3848         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3849         mm.write(fileName,2)
3850         #
3851         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3852         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3853         self.assertTrue(mm0.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
3854         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
3855         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3856         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3857         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3858         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3859         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3860         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3861         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3862         #
3863         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3864         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3865         self.assertTrue(mm1.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,6,5,11,12,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,12,11,17,18,13,12,18,19,14,13,19,20,15,14,20,21,16,15,21,22])))
3866         coo=DataArrayDouble([(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(5,3,0),(0,4,0),(1,4,0),(2,4,0),(3,4,0),(4,4,0),(5,4,0),(0,5,0),(1,5,0),(2,5,0),(3,5,0),(4,5,0),(5,5,0)]) ; coo.setInfoOnComponents(infos)
3867         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3868         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3869         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3870         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3871         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3872         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3873         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3874         #
3875         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3876         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3877         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3878         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3879         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3880         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3881         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3882         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3883         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
3884         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3885         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
3886         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3887         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3888         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3889         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3890         pass
3891
3892     def testMEDFileFieldsLoadPart1(self):
3893         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3894         """
3895         fileName="Pyfile82.med"
3896         meshName="Mesh"
3897         compos=["aa [kg]","bbb [m/s]"]
3898         arr=DataArrayDouble(6) ; arr.iota()
3899         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3900         m=m.buildUnstructured()
3901         m.setName(meshName)
3902         m.changeSpaceDimension(3,0.)
3903         infos=["aa [b]","cc [de]","gg [klm]"]
3904         m.getCoords().setInfoOnComponents(infos)
3905         m.checkConsistency()
3906         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3907         f.setName("Field")
3908         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3909         arr[:,0]=list(range(25))
3910         arr[:,1]=list(range(100,125))
3911         f.setArray(arr)
3912         WriteField(fileName,f,True)
3913         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3914         f.setName("FieldNode")
3915         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3916         arr[:,0]=list(range(200,236))
3917         arr[:,1]=list(range(300,336))
3918         f.setArray(arr)
3919         f.checkConsistencyLight()
3920         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3921         #
3922         ms=MEDFileMeshes()
3923         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3924         ms.pushMesh(mm)
3925         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3926         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3927         #
3928         ms=MEDFileMeshes()
3929         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3930         ms.pushMesh(mm)
3931         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3932         fs=fs.deepCopy()
3933         fs[0][0].loadArrays()
3934         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
3935         arr.setInfoOnComponents(compos)
3936         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3937         fs[1][0].loadArrays()
3938         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
3939         arr.setInfoOnComponents(compos)
3940         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3941         pass
3942
3943     def testMEDFileWithoutCells1(self):
3944         fileName="Pyfile83.med"
3945         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3946         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3947         mm=MEDFileUMesh()
3948         mm.setCoords(coo)
3949         mm.setName("mesh")
3950         mm.write(fileName,2)
3951         #
3952         mm=MEDFileMesh.New(fileName)
3953         self.assertEqual(mm.getName(),"mesh")
3954         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3955         pass
3956
3957     def testZipCoordsWithLoadPart1(self):
3958         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3959         """
3960         fileName="Pyfile84.med"
3961         meshName="Mesh"
3962         compos=["aa [kg]","bbb [m/s]"]
3963         arr=DataArrayDouble(6) ; arr.iota()
3964         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3965         m=m.buildUnstructured()
3966         m.setName(meshName)
3967         m.changeSpaceDimension(3,0.)
3968         infos=["aa [b]","cc [de]","gg [klm]"]
3969         m.getCoords().setInfoOnComponents(infos)
3970         m.checkConsistency()
3971         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3972         f.setName("Field")
3973         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3974         arr[:,0]=list(range(25))
3975         arr[:,1]=list(range(100,125))
3976         f.setArray(arr)
3977         WriteField(fileName,f,True)
3978         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3979         f.setName("FieldNode")
3980         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3981         arr[:,0]=list(range(200,236))
3982         arr[:,1]=list(range(300,336))
3983         f.setArray(arr)
3984         f.checkConsistencyLight()
3985         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3986         #
3987         ms=MEDFileMeshes()
3988         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
3989         ms.pushMesh(mm)
3990         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3991         self.assertEqual(spd.getSlice(),slice(4,6,1))
3992         spd=mm.getPartDefAtLevel(1)
3993         self.assertEqual(spd.getSlice(),slice(4,14,1))
3994         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
3995         mm.zipCoords() # <- The important line is here !
3996         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
3997         self.assertEqual(spd.getSlice(),slice(4,6,1))
3998         spd=mm.getPartDefAtLevel(1)
3999         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4000         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4001         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4002         fs[0][0].loadArrays()
4003         arr=DataArrayDouble([(4,104),(5,105)])
4004         arr.setInfoOnComponents(compos)
4005         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4006         fs[1][0].loadArrays()
4007         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4008         arr.setInfoOnComponents(compos)
4009         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4010         pass
4011
4012     def testMEDFileCMeshSetGroupsAtLevel(self):
4013         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4014         """
4015         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4016         m.setName("Mesh")
4017         mm=MEDFileCMesh() ; mm.setMesh(m)
4018         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4019         mm.setGroupsAtLevel(0,[grp])
4020         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4021         pass
4022
4023     def testMEDFileUMeshBuildExtrudedMesh1(self):
4024         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4025         fileName="Pyfile85.med"
4026         meshName2D="Mesh"
4027         meshName1D="Mesh1D"
4028         meshName3DOut="Mesh3D"
4029         #
4030         d1=DataArrayInt([0,4,20,24])
4031         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4032         #
4033         a=DataArrayDouble(6) ; a.iota()
4034         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4035         m=m.buildUnstructured()
4036         d1c=d1.buildComplement(m.getNumberOfCells())
4037         m=m[d1c] ; m.zipCoords()
4038         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4039         m0.simplexize(0)
4040         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4041         m.setName(meshName2D)
4042         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4043         e=d.deltaShiftIndex().findIdsEqual(1)
4044         #
4045         mm=MEDFileUMesh()
4046         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4047         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4048         mm.setGroupsAtLevel(0,[grp0])
4049         grp1=e ; grp1.setName("grp1")
4050         mm.setGroupsAtLevel(-1,[grp1])
4051         mm.write(fileName,2)
4052         #
4053         a=DataArrayDouble(3) ; a.iota()
4054         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4055         tmp.setName(meshName1D)
4056         tmp.changeSpaceDimension(3)
4057         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4058         mm1D=MEDFileUMesh()
4059         mm1D.setMeshAtLevel(0,tmp)
4060         mm1D.write(fileName,0)
4061         # test is here !
4062         mm2D=MEDFileMesh.New(fileName,meshName2D)
4063         mm1D=MEDFileMesh.New(fileName,meshName1D)
4064         m1D=mm1D.getMeshAtLevel(0)
4065         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4066         #
4067         self.assertEqual(mm3D.getName(),mm2D.getName())
4068         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4069         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4070         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4071         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4072         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4073         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4074         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4075         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4076         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4077         d=DataArrayDouble([(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(4.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(4.,1.,0.),(5.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(4.,2.,0.),(5.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.),(4.,3.,0.),(5.,3.,0.),(0.,4.,0.),(1.,4.,0.),(2.,4.,0.),(3.,4.,0.),(4.,4.,0.),(5.,4.,0.),(1.,5.,0.),(2.,5.,0.),(3.,5.,0.),(4.,5.,0.),(1.,0.,1.),(2.,0.,1.),(3.,0.,1.),(4.,0.,1.),(0.,1.,1.),(1.,1.,1.),(2.,1.,1.),(3.,1.,1.),(4.,1.,1.),(5.,1.,1.),(0.,2.,1.),(1.,2.,1.),(2.,2.,1.),(3.,2.,1.),(4.,2.,1.),(5.,2.,1.),(0.,3.,1.),(1.,3.,1.),(2.,3.,1.),(3.,3.,1.),(4.,3.,1.),(5.,3.,1.),(0.,4.,1.),(1.,4.,1.),(2.,4.,1.),(3.,4.,1.),(4.,4.,1.),(5.,4.,1.),(1.,5.,1.),(2.,5.,1.),(3.,5.,1.),(4.,5.,1.),(1.,0.,2.),(2.,0.,2.),(3.,0.,2.),(4.,0.,2.),(0.,1.,2.),(1.,1.,2.),(2.,1.,2.),(3.,1.,2.),(4.,1.,2.),(5.,1.,2.),(0.,2.,2.),(1.,2.,2.),(2.,2.,2.),(3.,2.,2.),(4.,2.,2.),(5.,2.,2.),(0.,3.,2.),(1.,3.,2.),(2.,3.,2.),(3.,3.,2.),(4.,3.,2.),(5.,3.,2.),(0.,4.,2.),(1.,4.,2.),(2.,4.,2.),(3.,4.,2.),(4.,4.,2.),(5.,4.,2.),(1.,5.,2.),(2.,5.,2.),(3.,5.,2.),(4.,5.,2.)])
4078         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4079         d=DataArrayInt([16,1,0,5,33,32,37,16,1,5,6,33,37,38,16,2,1,6,34,33,38,16,2,6,7,34,38,39,16,3,2,7,35,34,39,16,3,7,8,35,39,40,16,5,4,10,37,36,42,16,5,10,11,37,42,43,16,9,8,14,41,40,46,16,9,14,15,41,46,47,16,11,10,16,43,42,48,16,11,16,17,43,48,49,16,15,14,20,47,46,52,16,15,20,21,47,52,53,16,17,16,22,49,48,54,16,17,22,23,49,54,55,16,21,20,26,53,52,58,16,21,26,27,53,58,59,16,24,23,28,56,55,60,16,24,28,29,56,60,61,16,25,24,29,57,56,61,16,25,29,30,57,61,62,16,26,25,30,58,57,62,16,26,30,31,58,62,63,16,33,32,37,65,64,69,16,33,37,38,65,69,70,16,34,33,38,66,65,70,16,34,38,39,66,70,71,16,35,34,39,67,66,71,16,35,39,40,67,71,72,16,37,36,42,69,68,74,16,37,42,43,69,74,75,16,41,40,46,73,72,78,16,41,46,47,73,78,79,16,43,42,48,75,74,80,16,43,48,49,75,80,81,16,47,46,52,79,78,84,16,47,52,53,79,84,85,16,49,48,54,81,80,86,16,49,54,55,81,86,87,16,53,52,58,85,84,90,16,53,58,59,85,90,91,16,56,55,60,88,87,92,16,56,60,61,88,92,93,16,57,56,61,89,88,93,16,57,61,62,89,93,94,16,58,57,62,90,89,94,16,58,62,63,90,94,95,18,6,5,11,12,38,37,43,44,18,7,6,12,13,39,38,44,45,18,8,7,13,14,40,39,45,46,18,12,11,17,18,44,43,49,50,18,13,12,18,19,45,44,50,51,18,14,13,19,20,46,45,51,52,18,18,17,23,24,50,49,55,56,18,19,18,24,25,51,50,56,57,18,20,19,25,26,52,51,57,58,18,38,37,43,44,70,69,75,76,18,39,38,44,45,71,70,76,77,18,40,39,45,46,72,71,77,78,18,44,43,49,50,76,75,81,82,18,45,44,50,51,77,76,82,83,18,46,45,51,52,78,77,83,84,18,50,49,55,56,82,81,87,88,18,51,50,56,57,83,82,88,89,18,52,51,57,58,84,83,89,90])
4080         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4081         d=DataArrayInt([0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,345,354,363,372,381,390,399,408,417,426,435,444,453,462,471,480,489,498])
4082         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4083         d=DataArrayInt([3,1,0,5,3,1,5,6,3,2,1,6,3,2,6,7,3,3,2,7,3,3,7,8,3,5,4,10,3,5,10,11,3,9,8,14,3,9,14,15,3,11,10,16,3,11,16,17,3,15,14,20,3,15,20,21,3,17,16,22,3,17,22,23,3,21,20,26,3,21,26,27,3,24,23,28,3,24,28,29,3,25,24,29,3,25,29,30,3,26,25,30,3,26,30,31,3,65,64,69,3,65,69,70,3,66,65,70,3,66,70,71,3,67,66,71,3,67,71,72,3,69,68,74,3,69,74,75,3,73,72,78,3,73,78,79,3,75,74,80,3,75,80,81,3,79,78,84,3,79,84,85,3,81,80,86,3,81,86,87,3,85,84,90,3,85,90,91,3,88,87,92,3,88,92,93,3,89,88,93,3,89,93,94,3,90,89,94,3,90,94,95,4,1,0,32,33,4,0,5,37,32,4,5,1,33,37,4,5,6,38,37,4,6,1,33,38,4,2,1,33,34,4,6,2,34,38,4,6,7,39,38,4,7,2,34,39,4,3,2,34,35,4,7,3,35,39,4,7,8,40,39,4,8,3,35,40,4,5,4,36,37,4,4,10,42,36,4,10,5,37,42,4,10,11,43,42,4,11,5,37,43,4,9,8,40,41,4,8,14,46,40,4,14,9,41,46,4,14,15,47,46,4,15,9,41,47,4,10,16,48,42,4,16,11,43,48,4,16,17,49,48,4,17,11,43,49,4,14,20,52,46,4,20,15,47,52,4,20,21,53,52,4,21,15,47,53,4,16,22,54,48,4,22,17,49,54,4,22,23,55,54,4,23,17,49,55,4,20,26,58,52,4,26,21,53,58,4,26,27,59,58,4,27,21,53,59,4,24,23,55,56,4,23,28,60,55,4,28,24,56,60,4,28,29,61,60,4,29,24,56,61,4,25,24,56,57,4,29,25,57,61,4,29,30,62,61,4,30,25,57,62,4,26,25,57,58,4,30,26,58,62,4,30,31,63,62,4,31,26,58,63,4,11,12,44,43,4,12,6,38,44,4,12,13,45,44,4,13,7,39,45,4,13,14,46,45,4,17,18,50,49,4,18,12,44,50,4,18,19,51,50,4,19,13,45,51,4,19,20,52,51,4,24,18,50,56,4,25,19,51,57,4,33,32,64,65,4,32,37,69,64,4,37,33,65,69,4,37,38,70,69,4,38,33,65,70,4,34,33,65,66,4,38,34,66,70,4,38,39,71,70,4,39,34,66,71,4,35,34,66,67,4,39,35,67,71,4,39,40,72,71,4,40,35,67,72,4,37,36,68,69,4,36,42,74,68,4,42,37,69,74,4,42,43,75,74,4,43,37,69,75,4,41,40,72,73,4,40,46,78,72,4,46,41,73,78,4,46,47,79,78,4,47,41,73,79,4,42,48,80,74,4,48,43,75,80,4,48,49,81,80,4,49,43,75,81,4,46,52,84,78,4,52,47,79,84,4,52,53,85,84,4,53,47,79,85,4,48,54,86,80,4,54,49,81,86,4,54,55,87,86,4,55,49,81,87,4,52,58,90,84,4,58,53,85,90,4,58,59,91,90,4,59,53,85,91,4,56,55,87,88,4,55,60,92,87,4,60,56,88,92,4,60,61,93,92,4,61,56,88,93,4,57,56,88,89,4,61,57,89,93,4,61,62,94,93,4,62,57,89,94,4,58,57,89,90,4,62,58,90,94,4,62,63,95,94,4,63,58,90,95,4,43,44,76,75,4,44,38,70,76,4,44,45,77,76,4,45,39,71,77,4,45,46,78,77,4,49,50,82,81,4,50,44,76,82,4,50,51,83,82,4,51,45,77,83,4,51,52,84,83,4,56,50,82,88,4,57,51,83,89,4,6,5,11,12,4,7,6,12,13,4,8,7,13,14,4,12,11,17,18,4,13,12,18,19,4,14,13,19,20,4,18,17,23,24,4,19,18,24,25,4,20,19,25,26,4,70,69,75,76,4,71,70,76,77,4,72,71,77,78,4,76,75,81,82,4,77,76,82,83,4,78,77,83,84,4,82,81,87,88,4,83,82,88,89,4,84,83,89,90])
4084         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4085         d=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,792,797,802,807,812,817,822,827,832,837,842,847,852,857,862,867,872,877,882,887,892,897,902,907,912,917,922])
4086         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4087         d=DataArrayInt([1,1,0,1,0,5,1,5,1,1,5,6,1,6,1,1,2,1,1,6,2,1,6,7,1,7,2,1,3,2,1,7,3,1,7,8,1,8,3,1,5,4,1,4,10,1,10,5,1,10,11,1,11,5,1,9,8,1,8,14,1,14,9,1,14,15,1,15,9,1,10,16,1,16,11,1,16,17,1,17,11,1,14,20,1,20,15,1,20,21,1,21,15,1,16,22,1,22,17,1,22,23,1,23,17,1,20,26,1,26,21,1,26,27,1,27,21,1,24,23,1,23,28,1,28,24,1,28,29,1,29,24,1,25,24,1,29,25,1,29,30,1,30,25,1,26,25,1,30,26,1,30,31,1,31,26,1,11,12,1,12,6,1,12,13,1,13,7,1,13,14,1,17,18,1,18,12,1,18,19,1,19,13,1,19,20,1,24,18,1,25,19,1,65,64,1,64,69,1,69,65,1,69,70,1,70,65,1,66,65,1,70,66,1,70,71,1,71,66,1,67,66,1,71,67,1,71,72,1,72,67,1,69,68,1,68,74,1,74,69,1,74,75,1,75,69,1,73,72,1,72,78,1,78,73,1,78,79,1,79,73,1,74,80,1,80,75,1,80,81,1,81,75,1,78,84,1,84,79,1,84,85,1,85,79,1,80,86,1,86,81,1,86,87,1,87,81,1,84,90,1,90,85,1,90,91,1,91,85,1,88,87,1,87,92,1,92,88,1,92,93,1,93,88,1,89,88,1,93,89,1,93,94,1,94,89,1,90,89,1,94,90,1,94,95,1,95,90,1,75,76,1,76,70,1,76,77,1,77,71,1,77,78,1,81,82,1,82,76,1,82,83,1,83,77,1,83,84,1,88,82,1,89,83])
4088         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4089         d=DataArrayInt(129) ; d.iota() ; d*=3
4090         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4091         #
4092         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4093         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4094         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4095         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4096         self.assertTrue(mm3D.getGroupArr(-2,"grp1").isEqualWithoutConsideringStr(DataArrayInt([0,1,5,9,12,13,14,18,22,23,30,31,33,37,38,40,42,46,50,51])))
4097         self.assertTrue(mm3D.getGroupArr(-2,"grp1_top").isEqualWithoutConsideringStr(DataArrayInt([64,65,69,73,76,77,78,82,86,87,94,95,97,101,102,104,106,110,114,115])))
4098         self.assertTrue(mm3D.getGroupArr(0,"grp0_extruded").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,24,25,26,27,28,29,48,49,50,57,58,59])))
4099         self.assertTrue(mm3D.getGroupArr(-1,"grp1_extruded").isEqualWithoutConsideringStr(DataArrayInt([48,49,53,57,60,61,62,66,70,71,78,79,81,85,86,88,90,94,98,99,112,113,117,121,124,125,126,130,134,135,142,143,145,149,150,152,154,158,162,163])))
4100         mm3D.setName("MeshExtruded")
4101         mm3D.write(fileName,0)
4102         pass
4103
4104     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4105     def testMEDFileUMeshPickeling1(self):
4106         outFileName="Pyfile86.med"
4107         c=DataArrayDouble([-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 ],9,2)
4108         c.setInfoOnComponents(["aa","bbb"])
4109         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4110         m=MEDCouplingUMesh();
4111         m.setMeshDimension(2);
4112         m.allocateCells(5);
4113         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4114         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4115         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4116         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4117         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4118         m.finishInsertingCells();
4119         m.setCoords(c)
4120         m.checkConsistencyLight()
4121         m1=MEDCouplingUMesh.New();
4122         m1.setMeshDimension(1);
4123         m1.allocateCells(3);
4124         m1.insertNextCell(NORM_SEG2,2,[1,4])
4125         m1.insertNextCell(NORM_SEG2,2,[3,6])
4126         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4127         m1.finishInsertingCells();
4128         m1.setCoords(c)
4129         m1.checkConsistencyLight()
4130         m2=MEDCouplingUMesh.New();
4131         m2.setMeshDimension(0);
4132         m2.allocateCells(4);
4133         m2.insertNextCell(NORM_POINT1,1,[1])
4134         m2.insertNextCell(NORM_POINT1,1,[3])
4135         m2.insertNextCell(NORM_POINT1,1,[2])
4136         m2.insertNextCell(NORM_POINT1,1,[6])
4137         m2.finishInsertingCells();
4138         m2.setCoords(c)
4139         m2.checkConsistencyLight()
4140         #
4141         mm=MEDFileUMesh.New()
4142         self.assertTrue(mm.getUnivNameWrStatus())
4143         mm.setName("MyFirstMEDCouplingMEDmesh")
4144         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4145         mm.setCoords(c)
4146         mm[-1]=m1;
4147         mm[0]=m;
4148         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4149         mm[-2]=m2;
4150         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4151         # playing with groups
4152         g1_2=DataArrayInt.New()
4153         g1_2.setValues([1,3],2,1)
4154         g1_2.setName("G1")
4155         g2_2=DataArrayInt.New()
4156         g2_2.setValues([1,2,3],3,1)
4157         g2_2.setName("G2")
4158         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4159         g1_1=DataArrayInt.New()
4160         g1_1.setValues([0,1,2],3,1)
4161         g1_1.setName("G1")
4162         g2_1=DataArrayInt.New()
4163         g2_1.setValues([0,2],2,1)
4164         g2_1.setName("G2")
4165         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4166         g1_N=DataArrayInt.New()
4167         g1_N.setValues(list(range(8)),8,1)
4168         g1_N.setName("G1")
4169         g2_N=DataArrayInt.New()
4170         g2_N.setValues(list(range(9)),9,1)
4171         g2_N.setName("G2")
4172         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4173         mm.createGroupOnAll(0,"GrpOnAllCell")
4174         # check content of mm
4175         t=mm.getGroupArr(0,"G1",False)
4176         self.assertTrue(g1_2.isEqual(t));
4177         t=mm.getGroupArr(0,"G2",False)
4178         self.assertTrue(g2_2.isEqual(t));
4179         t=mm.getGroupArr(-1,"G1",False)
4180         self.assertTrue(g1_1.isEqual(t));
4181         t=mm.getGroupArr(-1,"G2",False)
4182         self.assertTrue(g2_1.isEqual(t));
4183         t=mm.getGroupArr(1,"G1",False)
4184         self.assertTrue(g1_N.isEqual(t));
4185         t=mm.getGroupArr(1,"G2",False)
4186         self.assertTrue(g2_N.isEqual(t));
4187         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4188         t=mm.getGroupArr(0,"GrpOnAllCell")
4189         #
4190         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4191         mm2=pickle.loads(st)
4192         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4193         self.assertEqual(mm.getAxisType(),AX_CART)
4194         #
4195         mm.setAxisType(AX_CYL)
4196         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4197         mm2=pickle.loads(st)
4198         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4199         self.assertEqual(mm2.getAxisType(),AX_CYL)
4200         pass
4201
4202     def testMEDFileFieldsLoadSpecificEntities1(self):
4203         nbNodes=11
4204         fieldName="myField"
4205         fileName="Pyfile87.med"
4206         nbPdt=10
4207         meshName="Mesh"
4208         #
4209         m=MEDCouplingCMesh()
4210         arr=DataArrayDouble(nbNodes) ; arr.iota()
4211         m.setCoords(arr)
4212         m=m.buildUnstructured()
4213         m.setName(meshName)
4214         #
4215         fmts=MEDFileFieldMultiTS()
4216         for i in range(nbPdt):
4217             f=MEDCouplingFieldDouble(ON_NODES)
4218             f.setMesh(m)
4219             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4220             f.setArray(arr)
4221             f.setName(fieldName)
4222             f.setTime(float(i),i,0)
4223             fmts.appendFieldNoProfileSBT(f)
4224             pass
4225         #
4226         mm=MEDFileUMesh() ; mm[0]=m
4227         fmts.write(fileName,2)
4228         mm.write(fileName,0)
4229         #
4230         fs=MEDFileFields(fileName,False)
4231         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4232         fs.loadArraysIfNecessary()
4233         fs2.loadArraysIfNecessary()
4234         for i in range(nbPdt):
4235             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4236             pass
4237         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4238         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4239         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4240         fmts=MEDFileFieldMultiTS()
4241         for i in range(nbPdt):
4242             f=MEDCouplingFieldDouble(ON_CELLS)
4243             f.setMesh(m3)
4244             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4245             f.setArray(arr)
4246             f.setName(fieldName)
4247             f.setTime(float(i),i,0)
4248             fmts.appendFieldNoProfileSBT(f)
4249             pass
4250         mm=MEDFileUMesh() ; mm[0]=m3
4251         del mm[0]
4252         self.assertEqual(mm.getNonEmptyLevels(),())
4253         mm[0]=m3
4254         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4255         fmts.write(fileName,2)
4256         fs=MEDFileFields(fileName,False)
4257         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4258         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4259         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4260         fs.loadArraysIfNecessary()
4261         fs2.loadArraysIfNecessary()
4262         fs3.loadArraysIfNecessary()
4263         fs4.loadArraysIfNecessary()
4264         for i in range(nbPdt):
4265             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4266             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4267             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4268             pass
4269         pass
4270
4271     def testMEDFileLotsOfTSRW1(self):
4272         nbNodes=11
4273         fieldName="myField"
4274         fileName="Pyfile88.med"
4275         nbPdt=300 # <- perftest = 30000
4276         meshName="Mesh"
4277         #
4278         maxPdt=100 # <- optimum = 500
4279         m=MEDCouplingCMesh()
4280         arr=DataArrayDouble(nbNodes) ; arr.iota()
4281         m.setCoords(arr)
4282         m=m.buildUnstructured()
4283         m.setName(meshName)
4284         #
4285         nbOfField=nbPdt//maxPdt
4286         fs=MEDFileFields()
4287         for j in range(nbOfField):
4288             fmts=MEDFileFieldMultiTS()
4289             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4290             for i in range(s.start, s.stop, s.step):
4291                 f=MEDCouplingFieldDouble(ON_NODES)
4292                 f.setMesh(m)
4293                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4294                 f.setArray(arr)
4295                 f.setName("%s_%d"%(fieldName,j))
4296                 f.setTime(float(i),i,0)
4297                 fmts.appendFieldNoProfileSBT(f)
4298                 pass
4299             fs.pushField(fmts)
4300             pass
4301         #
4302         mm=MEDFileUMesh() ; mm[0]=m
4303         fs.write(fileName,2)
4304         mm.write(fileName,0)
4305         ############
4306         def appendInDict(d,key,val):
4307             if key in d:
4308                 d[key].append(val)
4309             else:
4310                 d[key]=[val]
4311             pass
4312         import re
4313         allFields=GetAllFieldNames(fileName)
4314         allFieldsDict={}
4315         pat=re.compile("([\d]+)([\s\S]+)$")
4316         for st in allFields:
4317             stRev=st[::-1]
4318             m=pat.match(stRev)
4319             if m:
4320                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4321                 pass
4322             else:
4323                 appendInDict(allFieldsDict,st,'')
4324                 pass
4325             pass
4326         fs2=MEDFileFields()
4327         for k in allFieldsDict:
4328             if allFieldsDict[k]!=['']:
4329                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4330                 pass
4331             fmts2=[]
4332             for it in allFieldsDict[k]:
4333                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4334                 pass
4335             fmts2.reverse()
4336             zeResu=fmts2.pop()
4337             nbIter=len(fmts2)
4338             for ii in range(nbIter):
4339                 zeResu.pushBackTimeSteps(fmts2.pop())
4340                 pass
4341             zeResu.setName(k)
4342             fs2.pushField(zeResu)
4343             pass
4344         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4345         pass
4346     
4347     def testMEDFileMeshRearrangeFamIds1(self):
4348         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4349         fileName="Pyfile89.med"
4350         meshName='Maillage_2'
4351         mm=MEDFileUMesh()
4352         coords=DataArrayDouble([(0.,0.,0.),(0.,0.,200.),(0.,200.,200.),(0.,200.,0.),(200.,0.,0.),(200.,0.,200.),(200.,200.,200.),(200.,200.,0.),(0.,0.,100.),(0.,100.,200.),(0.,200.,100.),(0.,100.,0.),(200.,0.,100.),(200.,100.,200.),(200.,200.,100.),(200.,100.,0.),(100.,0.,0.),(100.,0.,200.),(100.,200.,0.),(100.,200.,200.),(0.,116.87743909766768,83.12256090233232),(200.,116.87743909766768,83.12256090233232),(116.87743909766769,0.,116.87743909766769),(116.87743909766769,200.,116.87743909766769),(116.87743909766769,116.87743909766769,0.),(116.87743909766769,116.87743909766769,200.),(63.3851584383713,56.1391811199829,119.728314479261),(138.008709441123,116.039297556044,119.903790959468)])
4353         #
4354         c0=DataArrayInt([14,1,26,9,8,14,17,26,1,8,14,27,26,17,22,14,26,16,20,8,14,8,0,16,11,14,16,20,11,24,14,25,20,26,27,14,22,26,24,27,14,26,16,22,24,14,8,26,22,17,14,20,9,25,26,14,19,20,25,23,14,23,6,27,25,14,19,23,10,20,14,27,22,21,24,14,27,21,14,18,14,26,9,25,17,14,13,27,25,17,14,27,18,24,21,14,22,21,15,12,14,27,20,24,18,14,23,25,27,20,14,13,27,6,25,14,23,27,6,14,14,15,16,22,12,14,27,17,13,22,14,22,27,21,13,14,24,16,22,15,14,24,18,7,21,14,12,4,15,16,14,22,12,5,13,14,8,26,16,22,14,13,27,21,14,14,20,18,10,3,14,14,27,18,23,14,14,27,6,13,14,21,22,13,12,14,25,26,17,27,14,19,9,25,20,14,26,24,20,16,14,22,24,15,21,14,9,26,1,17,14,23,27,18,20,14,20,11,18,3,14,14,18,21,7,14,19,2,9,10,14,19,23,25,6,14,18,23,20,10,14,20,26,8,9,14,22,13,5,17,14,24,11,18,20,14,21,15,7,24,14,19,20,10,9,14,20,26,27,24,14,16,8,11,20])
4355         c0i=DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275])
4356         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4357         m0.setConnectivity(c0,c0i)
4358         mm[0]=m0
4359         #
4360         c1=DataArrayInt([3,8,20,11,3,8,9,20,3,9,2,10,3,20,9,10,3,0,8,11,3,9,8,1,3,20,10,3,3,11,20,3,3,15,21,12,3,5,12,13,3,21,13,12,3,15,12,4,3,14,6,13,3,14,13,21,3,7,14,21,3,7,21,15,3,5,22,12,3,4,12,16,3,17,1,8,3,16,8,0,3,5,17,22,3,12,22,16,3,22,17,8,3,16,22,8,3,10,2,19,3,7,18,14,3,14,23,6,3,3,10,18,3,23,19,6,3,18,23,14,3,10,19,23,3,10,23,18,3,3,18,11,3,7,24,18,3,15,4,16,3,11,16,0,3,7,15,24,3,18,24,11,3,24,15,16,3,11,24,16,3,9,19,2,3,19,25,6,3,17,5,13,3,1,17,9,3,25,13,6,3,9,25,19,3,17,13,25,3,17,25,9])
4361         c1i=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192])
4362         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4363         m1.setConnectivity(c1,c1i)
4364         mm[-1]=m1
4365         #
4366         c2=DataArrayInt([0,8,8,1,1,9,9,2,3,10,10,2,0,11,11,3,4,12,12,5,5,13,13,6,7,14,14,6,4,15,15,7,0,16,16,4,1,17,17,5,3,18,18,7,2,19,19,6])
4367         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4368         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4369         mm[-2]=m2.buildUnstructured()
4370         #
4371         ref0=DataArrayInt(55) ; ref0[:]=0
4372         mm.setFamilyFieldArr(0,ref0)
4373         mm.setFamilyFieldArr(1,DataArrayInt([0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
4374         ref1=DataArrayInt([0,0,0,0,0,0,0,0,-6,-6,-6,-6,-6,-6,-6,-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4375         mm.setFamilyFieldArr(-1,ref1)
4376         ref2=DataArrayInt([0,0,-7,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4377         mm.setFamilyFieldArr(-2,ref2)
4378         #
4379         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4380             mm.setFamilyId(f,fid)
4381         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4382             mm.setFamiliesOnGroup(grp,fams)
4383         mm.write(fileName,2)
4384         #
4385         mm=MEDFileMesh.New(fileName)
4386         grp=mm.getGroup(-1,"Groupe_1")
4387         dai=grp.computeFetchedNodeIds()
4388         dai.setName("TOTO")
4389         mm.addGroup(1,dai)
4390         mm.rearrangeFamilies() # <- the aim of the test
4391         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4392         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4393         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4394         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4395         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([0,0,2,0,9,9,9,9,0,0,0,0,9,9,9,9,0,0,0,0,0,9,0,0,0,0,0,0])))
4396         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4397         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4398         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4399         for elt,fams in allGrps:
4400             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4401         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4402         for elt,eltId in allFams:
4403             self.assertEqual(mm.getFamilyId(elt),eltId)
4404         pass
4405
4406     def testNonRegrCMeshSetFieldPfl1(self):
4407         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4408         ff=MEDFileField1TS()
4409         meshName="mesh"
4410         mm=MEDFileCMesh()
4411         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4412         m.setCoords(arr)
4413         m.setName(meshName)
4414         mm.setMesh(m)
4415         field=MEDCouplingFieldDouble(ON_CELLS)
4416         field.setMesh(m)
4417         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4418         field.setName("Field")
4419         field.checkConsistencyLight()
4420         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4421         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4422         self.assertEqual(ff.getPfls(),())
4423         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4424         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4425         del ff,mm,field,field2,pfl
4426         # same with unstructured mesh
4427         ff=MEDFileField1TS()
4428         meshName="mesh"
4429         mm=MEDFileUMesh()
4430         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4431         m.setCoords(arr)
4432         m.setName(meshName)
4433         m=m.buildUnstructured()
4434         mm[0]=m
4435         field=MEDCouplingFieldDouble(ON_CELLS)
4436         field.setMesh(m)
4437         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4438         field.setName("Field")
4439         field.checkConsistencyLight()
4440         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4441         ff.setFieldProfile(field,mm,0,pfl)
4442         self.assertEqual(ff.getPfls(),())
4443         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4444         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4445         pass
4446
4447     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4448         meshName="mesh"
4449         fileName="Pyfile90.med"
4450         fileName2="Pyfile91.med"
4451         arr=DataArrayDouble(5) ; arr.iota()
4452         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4453         m=m.buildUnstructured()
4454         d=DataArrayInt([3,7,11,15])
4455         m1=m[d]
4456         m1.simplexize(0)
4457         m2=m[d.buildComplement(m.getNumberOfCells())]
4458         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4459         m.changeSpaceDimension(3,0.)
4460         arr=DataArrayDouble(3) ; arr.iota()
4461         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4462         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4463         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4464         m3D=m.buildExtrudedMesh(m1D,0)
4465         m3D.sortCellsInMEDFileFrmt()
4466         m3D.setName(meshName)
4467         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4468         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4469         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4470         #
4471         mm=MEDFileUMesh()
4472         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4473         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4474         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4475         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4476         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4477         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4478         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4479         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4480         mm.setGroupsAtLevel(0,[vol1,vol2])
4481         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4482         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4483         #
4484         mmOut1=mm.linearToQuadratic(0,0.)
4485         mmOut1.write(fileName2,2)
4486         mmOut2=mmOut1.quadraticToLinear(0.)
4487         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4488         pass
4489
4490     def testMEDFileMeshAddGroup1(self):
4491         m=MEDCouplingCMesh()
4492         arrX=DataArrayDouble(9) ; arrX.iota()
4493         arrY=DataArrayDouble(4) ; arrY.iota()
4494         m.setCoords(arrX,arrY)
4495         m.setName("mesh")
4496         mm=MEDFileCMesh()
4497         mm.setMesh(m)
4498         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4499         mm.addGroup(0,grp0)
4500         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4501         mm.addGroup(0,grp1)
4502         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4503         mm.addGroup(0,grp2)
4504         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4505         mm.addGroup(0,grp3)
4506         for grp in [grp0,grp1,grp2,grp3]:
4507             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4508         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4509         delta=12
4510         for grp in [grp0,grp1,grp2,grp3]:
4511             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4512             mm.addGroup(1,grpNode)
4513         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4514         for grp in [grp0,grp1,grp2,grp3]:
4515             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4516         for grp in [grp0,grp1,grp2,grp3]:
4517             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4518             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4519         mm.normalizeFamIdsMEDFile()
4520         for grp in [grp0,grp1,grp2,grp3]:
4521             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4522         for grp in [grp0,grp1,grp2,grp3]:
4523             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4524             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4525         pass
4526
4527     pass
4528     def testMEDFileJoint1(self):
4529         fileName="Pyfile92.med"
4530         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4531         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4532         mm=MEDFileUMesh()
4533         mm.setCoords(coo)
4534         mm.setName("maa1")
4535         mm.setDescription("un maillage")
4536         mm.write(fileName,2)
4537         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4538         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4539         one_step_joint=MEDFileJointOneStep()
4540         one_step_joint.pushCorrespondence(cell_correspond)
4541         one_step_joint.pushCorrespondence(node_correspond)
4542         one_joint=MEDFileJoint()
4543         one_joint.pushStep(one_step_joint)
4544         one_joint.setLocalMeshName("maa1")
4545         one_joint.setRemoteMeshName("maa1")
4546         one_joint.setDescription("joint_description")
4547         one_joint.setJointName("joint_1")
4548         one_joint.setDomainNumber(1)
4549         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4550         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4551         self.assertEqual( one_joint.getDescription(), "joint_description")
4552         self.assertEqual( one_joint.getJointName(), "joint_1")
4553         self.assertEqual( one_joint.getDomainNumber(), 1)
4554         joints=MEDFileJoints()
4555         joints.pushJoint(one_joint);
4556         joints.write(fileName,0)
4557         # read back
4558         jointsR=MEDFileJoints(fileName,mm.getName())
4559         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4560         jR = jointsR.getJointAtPos(0)
4561         self.assertTrue( jR.isEqual( one_joint ))
4562         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4563         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4564         jointsR.destroyJointAtPos(0)
4565         
4566     pass
4567     def testMEDFileJoint2(self):
4568         fileNameWr="Pyfile93.med"
4569         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4570         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4571         mm=MEDFileUMesh()
4572         mm.setCoords(coo)
4573         mm.setName("maa1")
4574         mm.setDescription("un maillage")
4575         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4576         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4577         one_step_joint=MEDFileJointOneStep()
4578         two_step_joint=MEDFileJointOneStep()
4579         one_joint=MEDFileJoint()
4580         two_joint=MEDFileJoint()
4581         one_step_joint.pushCorrespondence(node_correspond)
4582         one_joint.pushStep(one_step_joint)
4583         two_step_joint.pushCorrespondence(cell_correspond)
4584         two_step_joint.pushCorrespondence(node_correspond)
4585         two_joint.pushStep(two_step_joint)
4586         one_joint.setLocalMeshName("maa1")
4587         one_joint.setRemoteMeshName("maa1")
4588         one_joint.setDescription("joint_description_1")
4589         one_joint.setJointName("joint_1")
4590         one_joint.setDomainNumber(1)
4591         two_joint.setLocalMeshName("maa1")
4592         two_joint.setRemoteMeshName("maa1")
4593         two_joint.setDescription("joint_description_2")
4594         two_joint.setJointName("joint_2")
4595         two_joint.setDomainNumber(2)
4596         joints=MEDFileJoints()
4597         joints.pushJoint(one_joint)
4598         joints.pushJoint(two_joint)
4599         mm.setJoints( joints )
4600         mm.write(fileNameWr,2)
4601         #
4602         mm=MEDFileMesh.New(fileNameWr)
4603         self.assertEqual( mm.getNumberOfJoints(), 2)
4604         jointsR = mm.getJoints();
4605         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4606         self.assertEqual( len( jointsR ), 2 )
4607         jointR1 = jointsR[0]
4608         jointR2 = jointsR[1]
4609         self.assertFalse( jointR1 is None )
4610         self.assertFalse( jointR2 is None )
4611         self.assertTrue( jointR1.isEqual( one_joint ))
4612         self.assertTrue( jointR2.isEqual( two_joint ))
4613         pass
4614
4615     def testMEDFileJoint1(self):
4616         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4617         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4618         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4619         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4620         joint1st_1=MEDFileJointOneStep()
4621         joint1st_1.pushCorrespondence(cell_correspond)
4622         joint1st_1.pushCorrespondence(node_correspond)
4623         joint1st_2=MEDFileJointOneStep()
4624         joint1st_2.pushCorrespondence(cell_correspond)
4625         joint1st_2.pushCorrespondence(node_correspond)
4626         joint1st_3=MEDFileJointOneStep()
4627         joint1st_3.pushCorrespondence(node_correspond)
4628         joint1st_3.pushCorrespondence(cell_correspond)
4629         joint1st_4=MEDFileJointOneStep()
4630         joint1st_4.pushCorrespondence(cell_correspond)
4631         joint1st_5=MEDFileJointOneStep()
4632         joint1st_5.pushCorrespondence(cell_correspon2)
4633         joint1st_6=MEDFileJointOneStep()
4634         joint1st_6.pushCorrespondence(cell_correspon3)
4635         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4636         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4637         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4638         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4639         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4640         one_joint=MEDFileJoint()
4641         one_joint.pushStep(joint1st_1)
4642         one_joint.setLocalMeshName("maa1")
4643         one_joint.setRemoteMeshName("maa2")
4644         one_joint.setDescription("joint_description")
4645         one_joint.setJointName("joint_1")
4646         one_joint.setDomainNumber(1)
4647         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4648         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4649         self.assertEqual( "joint_description", one_joint.getDescription())
4650         self.assertEqual( 1, one_joint.getDomainNumber())
4651         self.assertEqual( "joint_1", one_joint.getJointName())
4652         pass
4653
4654     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4655     def testMEDFileSafeCall0(self):
4656         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4657         fname="Pyfile94.med"
4658         errfname="Pyfile94.err"
4659         class StdOutRedirect(object):
4660             def __init__(self,fileName):
4661                 import os,sys
4662                 sys.stderr.flush()
4663                 self.stdoutOld=os.dup(2)
4664                 self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
4665                 fd2=os.dup2(self.fdOfSinkFile,2)
4666                 self.origPyVal=sys.stderr
4667                 class FlushFile(object):
4668                     def __init__(self,f):
4669                         self.f=f
4670                     def write(self,st):
4671                         self.f.write(st)
4672                         self.f.flush()
4673                     def flush(self):
4674                         return self.f.flush()
4675                     def isatty(self):
4676                         return self.f.isatty()
4677                 sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
4678             def __del__(self):
4679                 import os,sys
4680                 sys.stderr=self.origPyVal
4681                 if sys.version_info.major >= 3:
4682                     self.fdOfSinkFile.close()
4683                     pass
4684                 #os.fsync(self.fdOfSinkFile)
4685                 os.fsync(2)
4686                 os.dup2(self.stdoutOld,2)
4687                 os.close(self.stdoutOld)
4688         import os
4689         # first clean file if needed
4690         if os.path.exists(fname):
4691             os.remove(fname)
4692             pass
4693         # second : build a file from scratch
4694         m=MEDCouplingCMesh()
4695         arr=DataArrayDouble(11) ; arr.iota()
4696         m.setCoords(arr,arr)
4697         mm=MEDFileCMesh()
4698         mm.setMesh(m)
4699         mm.setName("mesh")
4700         mm.write(fname,2)
4701         # third : change permissions to remove write access on created file
4702         os.chmod(fname, 0o444)
4703         # four : try to append data on file -> check that it raises Exception
4704         f=MEDCouplingFieldDouble(ON_CELLS)
4705         f.setName("field")
4706         f.setMesh(m)
4707         f.setArray(DataArrayDouble(100))
4708         f.getArray()[:]=100.
4709         f.checkConsistencyLight()
4710         f1ts=MEDFileField1TS()
4711         f1ts.setFieldNoProfileSBT(f)
4712         # redirect stderr
4713         tmp=StdOutRedirect(errfname)
4714         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4715         del tmp
4716         #
4717         if os.path.exists(errfname):
4718             os.remove(errfname)
4719         #
4720         pass
4721
4722     def testUnivStatus1(self):
4723         """ Non regression test to check the effectiveness of univ write status."""
4724         fname="Pyfile95.med"
4725         arr=DataArrayDouble(10) ; arr.iota()
4726         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4727         mm=MEDFileCMesh() ; mm.setMesh(m)
4728         mm.setUnivNameWrStatus(False) # test is here
4729         mm.write(fname,2)
4730         mm=MEDFileCMesh(fname)
4731         self.assertEqual(mm.getUnivName(),"")
4732         mm.setUnivNameWrStatus(True)
4733         mm.write(fname,2)
4734         mm=MEDFileCMesh(fname)
4735         self.assertTrue(mm.getUnivName()!="")
4736         pass
4737     
4738     def testEmptyMesh(self):
4739       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4740       with 0 tuples """
4741       fname = "Pyfile96.med" 
4742       m = MEDCouplingUMesh('toto', 2)
4743       m.setCoords(DataArrayDouble([], 0, 2))
4744       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4745       mfu = MEDFileUMesh()
4746       mfu.setMeshAtLevel(0, m)
4747       mfu.write(fname, 2)
4748       mfu2 = MEDFileUMesh(fname)
4749       self.assertEqual('toto', mfu2.getName())
4750       lvl = mfu2.getNonEmptyLevels()
4751       self.assertEqual((), lvl)
4752
4753     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4754     def testMEDFileUMeshPickeling2(self):
4755       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4756       name="Mesh_1"
4757       grpName1="HAUT"
4758       grpName2="BASE"
4759       hauteur=1.
4760       nbOfNodesPerAxis=3
4761       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4762       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4763       mesh=MEDFileUMesh() ; mesh[0]=m
4764       m1=m.computeSkin() ; mesh[-1]=m1
4765       #
4766       bary1=m1.computeCellCenterOfMass()[:,2]
4767       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4768       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4769       mesh.setGroupsAtLevel(-1,[grp1,grp2])
4770       
4771       st=pickle.dumps(mesh,2)
4772       mm=pickle.loads(st)
4773       st2=pickle.dumps(mm,2)
4774       mm2=pickle.loads(st2)
4775       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4776       pass
4777
4778     def testMEDFileEquivalence1(self):
4779       """ First check of equivalence implementation in MEDFileMesh"""
4780       fileName="Pyfile97.med"
4781       meshName="M_01"
4782       mm=MEDFileUMesh()
4783       coo=DataArrayDouble([(0,0,0),(6,0,0),(19,0,0),(36,0,0),(0,4,0),(6,4,0),(19,4,0),(36,4,0),(0,13,0),(6,13,0),(19,13,0),(36,13,0),(0,24,0),(6,24,0),(19,24,0),(36,24,0),(0,0,6),(6,0,6),(19,0,6),(36,0,6),(0,4,6),(6,4,6),(19,4,6),(36,4,6),(0,13,6),(6,13,6),(19,13,6),(36,13,6),(0,24,6),(6,24,6),(19,24,6),(36,24,6),(6,0,3),(6,2,0),(12.5,0,0),(19,0,3),(19,2,0),(6,4,3),(12.5,4,0),(19,4,3),(6,2,6),(12.5,0,6),(19,2,6),(12.5,4,6),(6,2,3),(12.5,0,3),(12.5,2,0),(19,2,3),(12.5,4,3),(12.5,2,6),(12.5,2,3)])
4784       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4785       connQ4=DataArrayInt([1,17,21,5,2,18,22,6,21,5,6,22,1,32,44,33,17,40,44,32,21,37,44,40,5,33,44,37,2,35,47,36,18,42,47,35,22,39,47,42,6,36,47,39,21,37,48,43,5,38,48,37,6,39,48,38,22,43,48,39])
4786       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4787       connH8=DataArrayInt([20,16,17,21,4,0,1,5,22,18,19,23,6,2,3,7,24,20,21,25,8,4,5,9,25,21,22,26,9,5,6,10,26,22,23,27,10,6,7,11,28,24,25,29,12,8,9,13,29,25,26,30,13,9,10,14,30,26,27,31,14,10,11,15,21,40,49,43,37,44,50,48,40,17,41,49,44,32,45,50,49,41,18,42,50,45,35,47,43,49,42,22,48,50,47,39,44,32,45,50,33,1,34,46,37,44,50,48,5,33,46,38,48,50,47,39,38,46,36,6,50,45,35,47,46,34,2,36])
4788       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4789       mm.getFamilyFieldAtLevel(-1)[:]=-2
4790       mm.getFamilyFieldAtLevel(0)[:]=0
4791       mm.addFamily("HOMARD________-1",-1)
4792       mm.addFamily("HOMARD________-2",-2)
4793       mm.addFamily("HOMARD________-3",-3)
4794       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4795       
4796       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4797       descEq="Cette equivalence decrit les mailles a recoller. Dans chaque correspondance, le premier numero est celui de la maille coupee ; le second numero est celui d'une des petites mailles en regard."
4798       mm.initializeEquivalences()
4799       eqs=mm.getEquivalences()
4800       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4801       eq0.setDescription(descEq)
4802       corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
4803       eq0.setArray(-1,corr)
4804       self.assertEqual(eq0.getCell().size(),1)
4805       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4806       eq0.getCell().clear()
4807       self.assertEqual(eq0.getCell().size(),0)
4808       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4809       self.assertEqual(eq0.getCell().size(),1)
4810       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4811       mm.killEquivalences()
4812       mm.initializeEquivalences()
4813       eqs=mm.getEquivalences()
4814       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4815       eq0.setDescription(descEq)
4816       c=eq0.initCell()
4817       c.setArrayForType(NORM_QUAD4,corr)
4818       self.assertEqual(eq0.getCell().size(),1)
4819       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4820       mm2=mm.deepCopy()
4821       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4822       self.assertEqual(mm2.getEquivalences().size(),1)
4823       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4824       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4825       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4826       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4827       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4828       mm.write(fileName,2)
4829       #
4830       mm3=MEDFileMesh.New(fileName)
4831       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4832       pass
4833
4834     def testMEDFileForFamiliesPlayer1(self):
4835       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4836       fileName="Pyfile98.med"
4837       meshName="mesh"
4838       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
4839       arr=DataArrayDouble(4) ; arr.iota()
4840       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4841       m=m.buildUnstructured()
4842       mm=MEDFileUMesh()
4843       mm[0]=m
4844       mm.setName(meshName)
4845       mm.setFamilyId("FAMILLE_ZERO",0)
4846       mm.getFamilyFieldAtLevel(0)[-3:]=-4
4847       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
4848       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
4849       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
4850       mm.setFamilyFieldArr(1,d)
4851       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
4852       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
4853       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4854       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
4855       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
4856       mm.write(fileName,2)
4857       # now read such funny file !
4858       mm2=MEDFileMesh.New(fileName) # <- normaly mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
4859       self.assertTrue(mm.isEqual(mm2,1e-16))
4860       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4861       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
4862       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
4863       pass
4864
4865     def testCartesianizer1(self):
4866       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
4867       # UMesh non cart
4868       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4869       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
4870       d0=DataArrayInt(16) ; d0[:]=0
4871       d1=DataArrayInt(9)  ; d1[:]=0
4872       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4873       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4874       ref0=mm.getCoords().getHiddenCppPointer()
4875       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
4876       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
4877       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
4878       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
4879       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4880       mm.setAxisType(AX_CYL) #<- important
4881       mm2=mm.cartesianize() # the trigger
4882       self.assertEqual(mm2.getAxisType(),AX_CART)
4883       mm.setAxisType(AX_CART) # this is here only to avoid complaints
4884       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4885       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4886       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
4887       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
4888       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
4889       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4890       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
4891       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
4892       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
4893       self.assertEqual(mm2.getName(),mm.getName())
4894       self.assertEqual(mm2.getDescription(),mm.getDescription())
4895       self.assertEqual(mm2.getTime(),mm.getTime())
4896       self.assertEqual(mm2.getTime(),mm.getTime())
4897       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4898       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4899       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4900       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4901       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4902       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4903       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4904       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4905       # UMesh cart
4906       mm.setAxisType(AX_CART)
4907       mm2=mm.cartesianize() # the trigger
4908       self.assertEqual(mm2.getAxisType(),AX_CART)
4909       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4910       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4911       # CurveLinearMesh non cart
4912       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
4913       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4914       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4915       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4916       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
4917       mm2=mm.cartesianize() # the trigger
4918       self.assertEqual(mm2.getAxisType(),AX_CART)
4919       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4920       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4921       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4922       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4923       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4924       self.assertEqual(mm2.getName(),mm.getName())
4925       self.assertEqual(mm2.getDescription(),mm.getDescription())
4926       self.assertEqual(mm2.getTime(),mm.getTime())
4927       self.assertEqual(mm2.getTime(),mm.getTime())
4928       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4929       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4930       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4931       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4932       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4933       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4934       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4935       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4936       # CurveLinearMesh cart
4937       mm.setAxisType(AX_CART)
4938       mm2=mm.cartesianize() # the trigger
4939       self.assertEqual(mm2.getAxisType(),AX_CART)
4940       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4941       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4942       # CMesh non cart
4943       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4944       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4945       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4946       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4947       mm2=mm.cartesianize() # the trigger
4948       self.assertEqual(mm2.getAxisType(),AX_CART)
4949       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4950       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4951       self.assertEqual(mm2.getName(),mm.getName())
4952       self.assertEqual(mm2.getDescription(),mm.getDescription())
4953       self.assertEqual(mm2.getTime(),mm.getTime())
4954       self.assertEqual(mm2.getTime(),mm.getTime())
4955       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4956       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4957       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4958       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4959       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4960       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4961       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4962       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4963       # CMesh cart
4964       mm.setAxisType(AX_CART)
4965       mm2=mm.cartesianize() # the trigger
4966       self.assertEqual(mm2.getAxisType(),AX_CART)
4967       self.assertTrue(isinstance(mm2,MEDFileCMesh))
4968       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4969       pass
4970
4971     def testCheckCoherency(self):
4972       m2 = MEDCouplingUMesh("2d", 2)
4973       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
4974       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
4975       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
4976       mum = MEDFileUMesh()
4977       mum.setMeshAtLevel(0, m2)
4978       mum.setMeshAtLevel(-1, m1)
4979       mum.checkConsistency()
4980       mum2 = mum.deepCopy()
4981
4982       # Nodes
4983       arr = DataArrayInt([2]*4)
4984       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
4985       self.assertRaises(InterpKernelException, mum.checkConsistency)
4986       mum=mum2; mum2=mum.deepCopy();
4987       arr = DataArrayInt([2]*4)
4988       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
4989       self.assertRaises(InterpKernelException, mum.checkConsistency)
4990       mum=mum2; mum2=mum.deepCopy();
4991       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
4992       self.assertRaises(InterpKernelException, mum.checkConsistency)
4993       mum=mum2; mum2=mum.deepCopy();
4994       arr = DataArrayAsciiChar(['tutu           x']*4)
4995       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
4996       self.assertRaises(InterpKernelException, mum.checkConsistency)
4997
4998       # 2D
4999       mum=mum2; mum2=mum.deepCopy();
5000       arr = DataArrayInt([2]*2)
5001       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5002       self.assertRaises(InterpKernelException, mum.checkConsistency)
5003       mum=mum2; mum2=mum.deepCopy();
5004       arr = DataArrayInt([2]*2)
5005       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5006       self.assertRaises(InterpKernelException, mum.checkConsistency)
5007       mum=mum2; mum2=mum.deepCopy();
5008       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5009       self.assertRaises(InterpKernelException, mum.checkConsistency)
5010       mum=mum2; mum2=mum.deepCopy();
5011       arr = DataArrayAsciiChar(['tutu           x']*2)
5012       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5013       self.assertRaises(InterpKernelException, mum.checkConsistency)
5014
5015       # 1D
5016       mum=mum2; mum2=mum.deepCopy();
5017       arr = DataArrayInt([2]*5)
5018       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5019       self.assertRaises(InterpKernelException, mum.checkConsistency)
5020       mum=mum2; mum2=mum.deepCopy();
5021       arr = DataArrayInt([2]*5)
5022       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5023       self.assertRaises(InterpKernelException, mum.checkConsistency)
5024       mum=mum2; mum2=mum.deepCopy();
5025       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5026       self.assertRaises(InterpKernelException, mum.checkConsistency)
5027       mum=mum2; mum2=mum.deepCopy();
5028       arr = DataArrayAsciiChar(['tutu           x']*5)
5029       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5030       self.assertRaises(InterpKernelException, mum.checkConsistency)
5031
5032     def testCheckSMESHConsistency(self):
5033       m2 = MEDCouplingUMesh("2d", 2)
5034       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5035       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5036       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5037       mum = MEDFileUMesh()
5038       mum.setMeshAtLevel(0, m2)
5039       mum.setMeshAtLevel(-1, m1)
5040       mum.checkConsistency()
5041       mum.checkSMESHConsistency()
5042       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5043       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5044       mum.setRenumFieldArr(0, n2)
5045       mum.setRenumFieldArr(-1, n1)
5046       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5047       mum.setRenumFieldArr(-1, n1+100)
5048       mum.checkSMESHConsistency()
5049       pass
5050
5051     def testClearNodeAndCellNumbers(self):
5052       m2 = MEDCouplingUMesh("2d", 2)
5053       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5054       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5055       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5056       mum = MEDFileUMesh()
5057       mum.setMeshAtLevel(0, m2)
5058       mum.setMeshAtLevel(-1, m1)
5059       mum.checkConsistency()
5060       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5061       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5062       mum.setRenumFieldArr(0, n2)
5063       mum.setRenumFieldArr(-1, n1)
5064       mum.clearNodeAndCellNumbers()
5065       mum.checkSMESHConsistency()
5066       pass
5067
5068     def testCMeshSetFamilyFieldArrNull(self):
5069       meshName="mesh"
5070       fname="Pyfile99.med"
5071       arrX=DataArrayDouble([0,1,2,3])
5072       arrY=DataArrayDouble([0,1,2])
5073       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5074       mm=MEDFileCMesh() ; mm.setMesh(m)
5075       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5076       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5077       mm.setFamilyFieldArr(0,famCellIds)
5078       mm.setFamilyFieldArr(1,famNodeIds)
5079       mm.write(fname,2)
5080       mm=MEDFileMesh.New(fname)
5081       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5082       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5083       mm.setFamilyFieldArr(0,None)#<- bug was here
5084       mm.setFamilyFieldArr(1,None)#<- bug was here
5085       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5086       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5087       mm3=mm.deepCopy()
5088       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5089       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5090       mm.write(fname,2)
5091       mm2=MEDFileMesh.New(fname)
5092       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5093       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5094       pass
5095
5096     def testAppendFieldProfileOnIntField(self):
5097       fname="Pyfile100.med"
5098       arrX=DataArrayDouble([0,1,2,3])
5099       arrY=DataArrayDouble([0,1,2])
5100       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5101       mm=MEDFileCMesh()
5102       mm.setMesh(mesh)
5103       #
5104       fmts=MEDFileIntFieldMultiTS()
5105       pflName="PFL"
5106       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5107       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5108       fieldName="FieldOnCell"
5109       f.setTime(1.2,1,1) ; f.setName(fieldName)
5110       arr=DataArrayInt([101,102,103]) ; f.setArray(arr)
5111       fmts.appendFieldProfile(f,mm,0,pfl)
5112       #
5113       mm.write(fname,2)
5114       fmts.write(fname,0)
5115       #
5116       mm=MEDFileMesh.New(fname)
5117       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5118       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5119       self.assertEqual(fmts.getName(),fieldName)
5120       self.assertEqual(len(fmts),1)
5121       f1ts=fmts[0]
5122       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5123       self.assertEqual(pfltest.getName(),pflName)
5124       self.assertEqual(ftest.getName(),fieldName)
5125       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5126       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5127       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5128       self.assertEqual(ftest2.getTime(),f.getTime())
5129       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5130       pass
5131
5132     def testMEDFileFieldEasyField1(self):
5133       """Check for all spatial discretization of field (cells,nodes,elno,gauss) for double field that all is OK. Here no profile and only top level is considered."""
5134       ## Basic test on cells on top level
5135       fname="Pyfile101.med"
5136       fieldName="field1"
5137       mm=MEDFileUMesh()
5138       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5139       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5140       m.allocateCells()
5141       m.insertNextCell(NORM_TRI3,[0,1,2])
5142       m.insertNextCell(NORM_TRI3,[3,4,5])
5143       m.insertNextCell(NORM_TRI3,[6,7,8])
5144       m.insertNextCell(NORM_TRI3,[9,10,11])
5145       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5146       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5147       mm[0]=m
5148       mm.write(fname,2)
5149       arr0=DataArrayDouble([10,11,12,13,100,101])
5150       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5151       f.setName(fieldName) ; f.setTime(2.,6,7)
5152       f0=f.deepCopy()
5153       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5154       ff.write(fname,0)
5155       arr2=arr0+1000 ; f.setArray(arr2)
5156       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5157       ff.write(fname,0)
5158       f1=f.deepCopy()
5159       ##
5160       mm=MEDFileMesh.New(fname)
5161       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5162       ftst0=f1ts.field(mm)
5163       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5164       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5165       ftst1=f1ts.field(mm)
5166       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5167       fmts=MEDFileFieldMultiTS(fname,fieldName)
5168       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5169       ## Basic test on nodes on top level
5170       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5171       f2.setName(fieldName)
5172       mm.write(fname,2)
5173       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5174       #
5175       mm=MEDFileMesh.New(fname)
5176       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5177       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5178       fmts=MEDFileFieldMultiTS(fname,fieldName)
5179       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5180       ## Node on elements
5181       f3=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5182       f3.setName(fieldName) ; f3.checkConsistencyLight()
5183       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5184       #
5185       mm=MEDFileMesh.New(fname)
5186       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5187       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5188       ## Gauss
5189       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5190       f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,1.],[0.1,0.1, 0.2,0.2, 0.3,0.3, 0.4,0.4, 0.5,0.5],[0.2,0.3,0.1,0.05,0.35])
5191       f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5192       arr4=DataArrayDouble([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5193       f4.checkConsistencyLight()
5194       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5195       #
5196       mm=MEDFileMesh.New(fname)
5197       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5198       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5199       pass
5200   
5201     def testMEDFileFieldEasyField2(self):
5202         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5203         Check for all spatial discretization of field (cells,nodes,elno,gauss) for int field that all is OK. Here no profile and only top level is considered."""
5204         ## Basic test on cells on top level
5205         fname="Pyfile102.med"
5206         fieldName="field1"
5207         mm=MEDFileUMesh()
5208         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5209         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5210         m.allocateCells()
5211         m.insertNextCell(NORM_TRI3,[0,1,2])
5212         m.insertNextCell(NORM_TRI3,[3,4,5])
5213         m.insertNextCell(NORM_TRI3,[6,7,8])
5214         m.insertNextCell(NORM_TRI3,[9,10,11])
5215         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5216         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5217         mm[0]=m
5218         mm.write(fname,2)
5219         arr0=DataArrayInt([10,11,12,13,100,101])
5220         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5221         f.setName(fieldName) ; f.setTime(2.,6,7)
5222         f0=f.deepCopy()
5223         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5224         ff.write(fname,0)
5225         arr2=arr0+1000 ; f.setArray(arr2)
5226         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5227         ff.write(fname,0)
5228         f1=f.deepCopy()
5229         ##
5230         mm=MEDFileMesh.New(fname)
5231         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5232         ftst0=f1ts.field(mm)
5233         self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5234         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5235         ftst1=f1ts.field(mm)
5236         self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5237         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5238         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5239         ## Basic test on nodes on top level
5240         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5241         f2.setName(fieldName)
5242         mm.write(fname,2)
5243         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5244         #
5245         mm=MEDFileMesh.New(fname)
5246         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5247         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5248         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5249         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5250         ## Node on elements
5251         f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5252         f3.setName(fieldName) ; f3.checkConsistencyLight()
5253         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5254         #
5255         mm=MEDFileMesh.New(fname)
5256         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5257         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5258         ## Gauss
5259         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5260         f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,1.],[0.1,0.1, 0.2,0.2, 0.3,0.3, 0.4,0.4, 0.5,0.5],[0.2,0.3,0.1,0.05,0.35])
5261         f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5262         arr4=DataArrayInt([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5263         f4.checkConsistencyLight()
5264         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5265         #
5266         mm=MEDFileMesh.New(fname)
5267         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5268         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5269         pass
5270
5271     def testMEDFileFieldEasyField3(self):
5272         """Here a multi level mesh. And field on cells lying on different level of this mesh. Show how "field" method deal with that. Here on field double are considered."""
5273         fname="Pyfile103.med"
5274         fieldName="field1"
5275         mm=MEDFileUMesh()
5276         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5277         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5278         m.allocateCells()
5279         m.insertNextCell(NORM_TRI3,[0,1,2])
5280         m.insertNextCell(NORM_TRI3,[3,4,5])
5281         m.insertNextCell(NORM_TRI3,[6,7,8])
5282         m.insertNextCell(NORM_TRI3,[9,10,11])
5283         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5284         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5285         mm[-1]=m
5286         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5287         m0.allocateCells()
5288         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5289         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5290         mm[0]=m0
5291         mm.write(fname,2)
5292         # start slowly
5293         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5294         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5295         #
5296         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5297         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5298         # here f1 lying on level -1 not 0 check if "field" method detect it !
5299         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5300         f1.setMesh(mm[-1]) # -1 is very important
5301         f1.setTime(16.,3,4)
5302         f1.checkConsistencyLight()
5303         mm.write(fname,2)
5304         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5305         #
5306         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5307         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5308         # nodes on elements
5309         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5310         f3.setMesh(mm[-1]) # this line is important
5311         arr3=DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5312         f3.setName(fieldName) ; f3.checkConsistencyLight()
5313         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5314         #
5315         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5316         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5317         # gauss
5318         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5319         f4.setMesh(mm[-1]) # this line is important
5320         f4.setName(fieldName)
5321         f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,1.],[0.1,0.1, 0.2,0.2, 0.3,0.3, 0.4,0.4, 0.5,0.5],[0.2,0.3,0.1,0.05,0.35])
5322         f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5323         arr4=DataArrayDouble([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5324         f4.checkConsistencyLight()
5325         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5326         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5327         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5328         pass
5329
5330     def testMEDFileFieldEasyField4(self):
5331         """ Same than testMEDFileFieldEasyField3 but with integers"""
5332         fname="Pyfile104.med"
5333         fieldName="field1"
5334         mm=MEDFileUMesh()
5335         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5336         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5337         m.allocateCells()
5338         m.insertNextCell(NORM_TRI3,[0,1,2])
5339         m.insertNextCell(NORM_TRI3,[3,4,5])
5340         m.insertNextCell(NORM_TRI3,[6,7,8])
5341         m.insertNextCell(NORM_TRI3,[9,10,11])
5342         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5343         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5344         mm[-1]=m
5345         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5346         m0.allocateCells()
5347         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5348         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5349         mm[0]=m0
5350         mm.write(fname,2)
5351         # start slowly
5352         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5353         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5354         #
5355         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5356         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5357         # here f1 lying on level -1 not 0 check if "field" method detect it !
5358         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5359         f1.setMesh(mm[-1]) # -1 is very important
5360         f1.setTime(16.,3,4)
5361         f1.checkConsistencyLight()
5362         mm.write(fname,2)
5363         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5364         #
5365         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5366         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5367         # nodes on elements
5368         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5369         f3.setMesh(mm[-1]) # this line is important
5370         arr3=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5371         f3.setName(fieldName) ; f3.checkConsistencyLight()
5372         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5373         #
5374         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5375         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5376         # gauss
5377         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5378         f4.setMesh(mm[-1]) # this line is important
5379         f4.setName(fieldName)
5380         f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,1.],[0.1,0.1, 0.2,0.2, 0.3,0.3, 0.4,0.4, 0.5,0.5],[0.2,0.3,0.1,0.05,0.35])
5381         f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5)
5382         arr4=DataArrayInt([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4)
5383         f4.checkConsistencyLight()
5384         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5385         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5386         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5387         pass
5388
5389     def testMEDFileFieldEasyField5(self):
5390         """More and more difficult now look at how profiles are managed by "field" method."""
5391         fname="Pyfile105.med"
5392         fieldName="field1"
5393         mm=MEDFileUMesh()
5394         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5395         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5396         m.allocateCells()
5397         m.insertNextCell(NORM_TRI3,[0,1,2])
5398         m.insertNextCell(NORM_TRI3,[3,4,5])
5399         m.insertNextCell(NORM_TRI3,[6,7,8])
5400         m.insertNextCell(NORM_TRI3,[9,10,11])
5401         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5402         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5403         mm[0]=m
5404         mm.write(fname,2)
5405         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5406         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5407         #
5408         arr0=DataArrayDouble([10,11,12,13])
5409         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5410         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5411         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5412         ff.write(fname,0)
5413         #
5414         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5415         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5416         # more complicated -> multi level
5417         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5418         m0.allocateCells()
5419         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5420         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5421         mm2=MEDFileUMesh()
5422         mm2[0]=m0 ; mm2[-1]=m
5423         #
5424         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5425         #
5426         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5427         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5428         pass
5429
5430     def testExtractPart1(self):
5431         coo=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2)])
5432         meshName="mesh"
5433         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5434         m0.insertNextCell(NORM_TRI3,[8,4,3])
5435         m0.insertNextCell(NORM_TRI3,[8,9,4])
5436         m0.insertNextCell(NORM_TRI3,[7,13,8])
5437         m0.insertNextCell(NORM_TRI3,[7,12,13])
5438         m0.insertNextCell(NORM_TRI3,[0,6,1])
5439         m0.insertNextCell(NORM_TRI3,[0,5,6])
5440         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5441         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5442         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5443         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5444         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5445         #
5446         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5447         m1.insertNextCell(NORM_SEG2,[10,5])
5448         m1.insertNextCell(NORM_SEG2,[5,0])
5449         m1.insertNextCell(NORM_SEG2,[0,1])
5450         m1.insertNextCell(NORM_SEG2,[1,2])
5451         m1.insertNextCell(NORM_SEG2,[2,3])
5452         m1.insertNextCell(NORM_SEG2,[3,4])
5453         m1.insertNextCell(NORM_SEG2,[4,9])
5454         m1.insertNextCell(NORM_SEG2,[9,14])
5455         m1.insertNextCell(NORM_SEG2,[14,13])
5456         m1.insertNextCell(NORM_SEG2,[13,12])
5457         m1.insertNextCell(NORM_SEG2,[12,11])
5458         m1.insertNextCell(NORM_SEG2,[11,10])
5459         mm=MEDFileUMesh()
5460         mm[0]=m0 ; mm[-1]=m1
5461         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5462         tab={} #
5463         tab[0]=DataArrayInt([0,2,3,4,6,7])
5464         tab[-1]=DataArrayInt([2,3,4,5,9])
5465         fs=MEDFileFields()
5466         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5467         tab[1]=arr0
5468         #
5469         fname0="Field0"
5470         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5471         t0=(16.5,3,4)
5472         ic=["toto [m]"]
5473         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5474         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5475         f0.setMesh(m0) ; f0.setName(fname0)
5476         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5477         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5478         f2=MEDCouplingFieldDouble(ON_NODES) ; f2.setTime(*t0) ; f2.setArray(DataArrayDouble([300,301,302,303,304,305,306,307,308,309,310,311,312,313,314]))
5479         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5480         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5481         fmts.pushBackTimeStep(f1ts)
5482         #
5483         mmOut=mm.extractPart(tab)
5484         #
5485         fsPart0=fs.extractPart(tab,mm)
5486         self.assertEqual(len(fsPart0),1)
5487         fmtsP=fsPart0[0]
5488         self.assertEqual(len(fmtsP),1)
5489         f1ts=fmtsP[0]
5490         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5491         #
5492         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5493         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5494         #
5495         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5496         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5497         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5498         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5499         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5500         #
5501         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5502         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5503         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5504         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5505         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5506         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5507         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5508         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5509         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5510         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5511         #
5512         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5513         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5514         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5515         # multisteps
5516         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5517         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5518         for i,tt in enumerate(tss):
5519             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5520             myarr=arr0_0+i*1000.
5521             f0.setArray(myarr)
5522             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5523             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5524             pass
5525         fsPart1=fs.extractPart(tab,mm)
5526         self.assertEqual(len(fsPart1),1)
5527         fmtsP=fsPart1[0]
5528         self.assertEqual(len(fmtsP),len(tss))
5529         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5530             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5531             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5532             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5533             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5534             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5535             self.assertEqual(fPart.getTime(),list(tt))
5536             pass
5537         pass
5538
5539     def testSymmetryPlusAggregationMFD1(self):
5540         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5541         fname1="Pyfile106_1.med"
5542         fname2="Pyfile106_2.med"
5543         fname3="Pyfile106_3.med"
5544         meshName="mesh"
5545         mm1=MEDFileUMesh()
5546         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5547         mm1.setCoords(da1)
5548         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5549         mm1_0.setCoords(da1)
5550         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5551         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5552         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5553         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5554         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5555         mm1[0]=mm1_0
5556         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5557         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5558         #
5559         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5560         mm1_1.setCoords(da1)
5561         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5562         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5563         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5564         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5565         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5566         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5567         mm1[-1]=mm1_1
5568         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5569         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5570         for i in range(1,10):
5571             mm1.setFamilyId("F%d"%i,i)
5572         mm1.setFamilyId("FAMILLE_ZERO",0)
5573         mm1.setFamilyId("H1",100)
5574         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5575         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5576         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5577         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5578         ##############
5579         mm2=MEDFileUMesh()
5580         da1=DataArrayDouble([9,10,30,11,12,31,13,14,32,15,16,33,17,18,34],5,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5581         mm2.setCoords(da1)
5582         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5583         mm2_0.setCoords(da1)
5584         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5585         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5586         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5587         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5588         mm2[0]=mm2_0
5589         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5590         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5591         #
5592         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5593         mm2_1.setCoords(da1)
5594         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5595         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5596         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5597         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5598         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5599         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5600         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5601         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5602         mm2[-1]=mm2_1
5603         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5604         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5605         for i in range(1,12):
5606             mm2.setFamilyId("G%d"%i,i+30)
5607         mm2.setFamilyId("H1",100)
5608         mm2.setFamilyId("FAMILLE_ZERO",0)
5609         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5610         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5611         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5612         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5613         #
5614         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5615         #######
5616         def CheckMesh(tester,mm):
5617             cooExp=DataArrayDouble([(1,2,10),(3,4,11),(5,6,12),(7,8,13),(9,10,30),(11,12,31),(13,14,32),(15,16,33),(17,18,34)]) ; cooExp.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5618             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5619             tester.assertTrue(mm[0].getNodalConnectivity().isEqual(DataArrayInt([14,0,1,2,3,14,4,5,6,7,14,104,105,106,107,14,108,109,110,111,14,112,113,114,115,16,8,9,10,11,12,13,16,14,15,16,17,18,19,16,20,21,22,23,24,25,16,116,117,118,119,120,121])))
5620             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5621             tester.assertTrue(mm[-1].getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,104,105,106,3,107,108,109,3,110,111,112,4,6,7,8,9,4,10,11,12,13,4,14,15,16,17,4,18,19,20,21,4,113,114,115,116,4,117,118,119,120,4,121,122,123,124,4,125,126,127,128,4,129,130,131,132])))
5622             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5623             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5624             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5625             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5626             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5627             refFamIds=[("FAMILLE_ZERO",0),('F1',1),('F2',2),('F3',3),('F4',4),('F5',5),('F6',6),('F7',7),('F8',8),('F9',9),('G1',31),('G10',40),('G11',41),('G2',32),('G3',33),('G4',34),('G5',35),('G6',36),('G7',37),('G8',38),('G9',39),("H1",100)]
5628             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5629             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5630             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5631             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5632             pass
5633         CheckMesh(self,mm)
5634         ##
5635         fieldName="zeField"
5636         t1=(2.3,3,5)
5637         t2=(5.6,7,12)
5638         infoc=["dd [W]","eee [kA]"]
5639         ##
5640         fmts1=MEDFileFieldMultiTS()
5641         f1ts1=MEDFileField1TS()
5642         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5643         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5644         arr1.setInfoOnComponents(infoc)
5645         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5646         f1_1.checkConsistencyLight()
5647         f1ts1.setFieldNoProfileSBT(f1_1)
5648         #
5649         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5650         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5651         arr2.setInfoOnComponents(infoc)
5652         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5653         f1_2.checkConsistencyLight()
5654         f1ts1.setFieldNoProfileSBT(f1_2)
5655         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5656         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5657         arr3.setInfoOnComponents(infoc)
5658         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5659         f1_3.checkConsistencyLight()
5660         f1ts1.setFieldNoProfileSBT(f1_3)
5661         fmts1.pushBackTimeStep(f1ts1)
5662         #
5663         f1ts2=f1ts1.deepCopy()
5664         f1ts2.setTime(t2[1],t2[2],t2[0])
5665         f1ts2.getUndergroundDataArray()[:]+=2000
5666         fmts1.pushBackTimeStep(f1ts2)
5667         ### fmts2
5668         fmts2=MEDFileFieldMultiTS()
5669         f1ts3=MEDFileField1TS()
5670         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5671         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5672         arr4.setInfoOnComponents(infoc)
5673         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5674         f2_1.checkConsistencyLight()
5675         f1ts3.setFieldNoProfileSBT(f2_1)
5676         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5677         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5678         arr5.setInfoOnComponents(infoc)
5679         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5680         f2_2.checkConsistencyLight()
5681         f1ts3.setFieldNoProfileSBT(f2_2)
5682         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5683         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5684         arr6.setInfoOnComponents(infoc)
5685         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5686         f2_3.checkConsistencyLight()
5687         f1ts3.setFieldNoProfileSBT(f2_3)
5688         fmts2.pushBackTimeStep(f1ts3)
5689         #
5690         f1ts4=f1ts3.deepCopy()
5691         f1ts4.setTime(t2[1],t2[2],t2[0])
5692         f1ts4.getUndergroundDataArray()[:]+=2000
5693         fmts2.pushBackTimeStep(f1ts4)
5694         #
5695         mfd1=MEDFileData()
5696         mfd1.setMeshes(MEDFileMeshes())
5697         mfd1.getMeshes().pushMesh(mm1)
5698         mfd1.setFields(MEDFileFields())
5699         mfd1.getFields().pushField(fmts1)
5700         #
5701         mfd2=MEDFileData()
5702         mfd2.setMeshes(MEDFileMeshes())
5703         mfd2.getMeshes().pushMesh(mm2)
5704         mfd2.setFields(MEDFileFields())
5705         mfd2.getFields().pushField(fmts2)
5706         # ze Call !
5707         mfd=MEDFileData.Aggregate([mfd1,mfd2])
5708         def CheckMFD(tester,mfd):
5709             tester.assertEqual(len(mfd.getMeshes()),1)
5710             tester.assertEqual(len(mfd.getFields()),1)
5711             CheckMesh(self,mfd.getMeshes()[0])
5712             tester.assertEqual(len(mfd.getFields()[0]),2)
5713             zeF1=mfd.getFields()[0][0]
5714             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5715             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5716             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5717             ref.renumberCells(o2n)
5718             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5719             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5720             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5721             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5722             ref.renumberCells(o2n)
5723             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5724             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5725             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5726             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5727             ref.renumberCells(o2n)
5728             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5729             #
5730             zeF2=mfd.getFields()[0][1]
5731             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5732             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5733             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5734             ref.renumberCells(o2n)
5735             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5736             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5737             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5738             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5739             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5740             ref.renumberCells(o2n)
5741             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5742             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5743             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5744             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5745             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5746             ref.renumberCells(o2n)
5747             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5748             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5749         CheckMFD(self,mfd)
5750         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5751         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5752         CheckMFD(self,mfd)
5753         pass
5754
5755     def testExtrudedMesh1(self):
5756         fname="Pyfile107.med"
5757         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
5758         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
5759         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
5760         mm=MEDFileUMesh(ex)
5761         mm.write(fname,2)
5762         ex2=mm.convertToExtrudedMesh()
5763         mm2=MEDFileMesh.New(fname)
5764         ex3=mm2.convertToExtrudedMesh()
5765         self.assertTrue(ex.isEqual(ex2,1e-12))
5766         self.assertTrue(ex.isEqual(ex3,1e-12))
5767         pass
5768     
5769     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
5770     def testWriteInto30(self):
5771         fname="Pyfile108.med"
5772         fname2="Pyfile109.med"
5773         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
5774         mm=MEDFileUMesh() ; mm[0]=m
5775         mm.setFamilyId("FAMILLE_ZERO",0)
5776         #
5777         mm.write30(fname,2)
5778         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,0]) # checks that just written MED file has a version == 3.0.x
5779         mm2=MEDFileUMesh(fname)
5780         self.assertTrue(mm.isEqual(mm2,1e-12))
5781         #
5782         mm.write(fname2,2)
5783         assert(LooseVersion(MEDFileVersionOfFileStr(fname2)).version[:2]==list(MEDFileVersion()[:2])) # checks that MED file version of written mesh is thoose of the current MED file lib
5784         pass
5785
5786     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5787     def testPickelizationOfMEDFileObjects1(self):
5788         fname="Pyfile110.med"
5789         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
5790         m0=MEDCouplingUMesh("Mesh",2)
5791         m0.allocateCells(5)
5792         m0.insertNextCell(NORM_TRI3,[1,4,2])
5793         m0.insertNextCell(NORM_TRI3,[4,5,2])
5794         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
5795         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
5796         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
5797         m0.finishInsertingCells()
5798         m0.setCoords(coo)
5799         m1=MEDCouplingUMesh(m0.getName(),1)
5800         m1.allocateCells(9)
5801         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
5802         for i in range(9):
5803             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
5804             pass
5805         m1.finishInsertingCells()
5806         m1.setCoords(coo)
5807         #
5808         m=MEDFileUMesh()
5809         m.setMeshAtLevel(0,m0)
5810         m.setMeshAtLevel(-1,m1)
5811         #
5812         dt=3 ; it=2 ; tim=4.5
5813         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
5814         fieldNode0.setName("fieldNode0")
5815         fieldNode0.setTime(tim,dt,it)
5816         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
5817         arr=DataArrayDouble([10,11,12,13,14])
5818         fieldNode0.setArray(arr)
5819         f0=MEDFileField1TS()
5820         f0.setFieldProfile(fieldNode0,m,0,pfl0)
5821         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
5822         fieldNode1.setName("fieldNode1")
5823         fieldNode1.setTime(tim,dt,it)
5824         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
5825         arr1=DataArrayDouble([20,21,22,23,24,25,26])
5826         fieldNode1.setArray(arr1)
5827         f1=MEDFileField1TS()
5828         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
5829         mfd=MEDFileData()
5830         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
5831         mfd.getMeshes().pushMesh(m)
5832         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
5833         mfd.getFields().pushField(fmts)
5834         # first start gently
5835         d=mfd.serialize()
5836         mfd2=MEDFileData(d)
5837         self.assertEqual(len(mfd2.getMeshes()),1)
5838         self.assertEqual(len(mfd2.getFields()),1)
5839         self.assertEqual(len(mfd2.getFields()[0]),1)
5840         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
5841         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
5842         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
5843         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
5844         # OK now end of joke -> serialization of MEDFileData
5845         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
5846         mfd3=pickle.loads(st)
5847         # check of object
5848         self.assertEqual(len(mfd3.getMeshes()),1)
5849         self.assertEqual(len(mfd3.getFields()),1)
5850         self.assertEqual(len(mfd3.getFields()[0]),1)
5851         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
5852         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
5853         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
5854         # serialization of MEDFileFields
5855         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
5856         fs4=pickle.loads(st)
5857         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
5858         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
5859         # serialization of MEDFileFieldMulitTS
5860         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
5861         fmts5=pickle.loads(st)
5862         ff5=fmts5[0].field(mfd3.getMeshes()[0])
5863         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
5864         # serialization of MEDFileField1TS
5865         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
5866         f1ts6=pickle.loads(st)
5867         ff6=f1ts6.field(mfd3.getMeshes()[0])
5868         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
5869         # serialization of MEDFileMeshes
5870         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
5871         ms7=pickle.loads(st)
5872         self.assertEqual(len(ms7),1)
5873         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
5874         pass
5875
5876     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5877     def testPickelizationOfMEDFileObjects2(self):
5878         # CMesh
5879         self.testMEDMesh6() # generates MEDFileMesh5.med file
5880         mm=MEDFileMesh.New("MEDFileMesh5.med")
5881         self.assertTrue(isinstance(mm,MEDFileCMesh))
5882         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
5883         mm2=pickle.loads(st)
5884         self.assertTrue(isinstance(mm2,MEDFileCMesh))
5885         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
5886         # CurveLinear
5887         self.testCurveLinearMesh1() # generates Pyfile55.med
5888         mm=MEDFileMesh.New("Pyfile55.med")
5889         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
5890         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
5891         mm3=pickle.loads(st)
5892         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
5893         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
5894         self.testInt32InMEDFileFieldStar1()# generates Pyfile63.med
5895         # MEDFileIntFieldMultiTS
5896         fs4=MEDFileFields("Pyfile63.med")
5897         ms4=MEDFileMeshes("Pyfile63.med")
5898         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
5899         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
5900         fmts5=pickle.loads(st)
5901         self.assertEqual(len(fs4[0]),len(fmts5))
5902         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
5903         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,1e-12))
5904         # MEDFileIntField1TS
5905         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
5906         f1ts6=pickle.loads(st)
5907         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
5908         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,1e-12))
5909         # MEDFileParameters
5910         self.testParameters1()# generates Pyfile56.med
5911         params=MEDFileParameters("Pyfile56.med")
5912         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
5913         params7=pickle.loads(st)
5914         self.assertEqual(len(params),len(params7))
5915         for i in range(len(params)):
5916             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
5917             pass
5918         pass
5919
5920     def testGlobalNumOnNodes1(self):
5921         """Test global number on nodes here. Used by partitionners."""
5922         fname="Pyfile112.med"
5923         arr=DataArrayDouble(5) ; arr.iota()
5924         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
5925         m.setName("mesh")
5926         mm=MEDFileUMesh()
5927         mm[0]=m
5928         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
5929         d=DataArrayInt([7,8,9,2,0])
5930         dRef=d.deepCopy()
5931         mm.setGlobalNumFieldAtLevel(1,d)
5932         mm.checkConsistency()
5933         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
5934         mm.checkConsistency()
5935         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
5936         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
5937         mm.write(fname,2)
5938         mm2=MEDFileMesh.New(fname)
5939         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5940         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
5941         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
5942         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5943         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
5944         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5945         pass
5946
5947     def testPartialReadOfEntities1(self):
5948         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
5949         fname="Pyfile113.med"
5950         arr=DataArrayDouble(5) ; arr.iota()
5951         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
5952         m.setName("mesh")
5953         mm=MEDFileUMesh()
5954         mm[0]=m
5955         #
5956         fieldName="Field"
5957         ts1=(5.,1,2)
5958         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
5959         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
5960         f1.setTime(*ts1)
5961         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
5962         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
5963         f2.setTime(*ts1)
5964         f1ts=MEDFileField1TS()
5965         f1ts.setFieldNoProfileSBT(f1)
5966         f1ts.setFieldNoProfileSBT(f2)
5967         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
5968         f1ts_2=f1ts.deepCopy()
5969         f1ts_2.getUndergroundDataArray()[:]+=2
5970         f1ts_2.setTime(3,4,6.)
5971         fmts=MEDFileFieldMultiTS()
5972         fmts.pushBackTimeStep(f1ts)
5973         fmts.pushBackTimeStep(f1ts_2)
5974         #
5975         mm.write(fname,2)
5976         fmts.write(fname,0)
5977         #
5978         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
5979         mm=MEDFileMesh.New(fname)
5980         fs=MEDFileFields(fname,False,ent) # the important line is here - We specify to MEDFileFields to read only nodes part to speed up read phase (by avoiding to scan all entities time geo types)
5981         fs.loadArrays()
5982         self.assertEqual(len(fs),1)
5983         fmts=fs[0]
5984         self.assertEqual(len(fmts),2)
5985         ff0=fmts[0] ; ff1=fmts[1]
5986         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
5987         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
5988         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
5989         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
5990         pass
5991     
5992     pass
5993
5994 if __name__ == "__main__":
5995     unittest.main()