Salome HOME
Fix problems with `salome test`
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2022  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,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
29
30 import sys
31 if sys.version_info.major < 3:
32     import cPickle as pickle
33 else:
34     import pickle
35
36 class StdOutRedirect(object):
37     def __init__(self,fileName):
38         import os,sys
39         sys.stderr.flush()
40         self.stdoutOld=os.dup(2)
41         self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42         fd2=os.dup2(self.fdOfSinkFile,2)
43         self.origPyVal=sys.stderr
44         class FlushFile(object):
45             def __init__(self,f):
46                 self.f=f
47             def write(self,st):
48                 self.f.write(st)
49                 self.f.flush()
50             def flush(self):
51                 return self.f.flush()
52             def isatty(self):
53                 return self.f.isatty()
54             def close(self):
55                 os.fsync(self.f)
56                 self.f.close();
57         sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
58     def __del__(self):
59         import os,sys
60         sys.stderr.close()
61         sys.stderr=self.origPyVal
62         os.fsync(2)
63         os.dup2(self.stdoutOld,2)
64         os.close(self.stdoutOld)
65
66 class MEDLoaderTest3(unittest.TestCase):
67     @WriteInTmpDir
68     def testMEDMesh1(self):
69         GeneratePyfile18(self)
70         fileName="Pyfile18.med"
71         mname="ExampleOfMultiDimW"
72         medmesh=MEDFileMesh.New(fileName,mname)
73         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75         m1_0=medmesh.getLevel0Mesh(True)
76         m1_1=ReadUMeshFromFile(fileName,mname,0)
77         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78         m2_0=medmesh.getLevelM1Mesh(True)
79         m2_1=ReadUMeshFromFile(fileName,mname,-1)
80         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
81         pass
82
83     @WriteInTmpDir
84     def testMEDMesh2(self):
85         GeneratePyfile10(self)
86         fileName="Pyfile10.med"
87         mname="3DToto"
88         outFileName="MEDFileMesh1.med"
89         medmesh=MEDFileUMesh.New(fileName,mname)
90         self.assertEqual((0,),medmesh.getNonEmptyLevels())
91         m1_0=medmesh.getLevel0Mesh(True)
92         m1_1=ReadUMeshFromFile(fileName,mname,0)
93         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94         g1_0=medmesh.getGroup(0,"mesh2",True)
95         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97         g1_0=medmesh.getGroup(0,"mesh3",True)
98         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102         g1_1.setName(g1_0.getName())
103         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104         g1_0=medmesh.getFamily(0,"Family_-3",True)
105         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109         g1_1.setName(g1_0.getName())
110         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112         medmesh.write(outFileName,2);
113         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117         famn=medmesh.getFamilyNameGivenId(0)
118         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
119         #without renum
120         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
125         pass
126
127     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
128     @WriteInTmpDir
129     def testMEDMesh3(self):
130         outFileName="MEDFileMesh3.med"
131         c=DataArrayDouble.New()
132         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 ];
133         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134         c.setValues(coords,9,2)
135         m=MEDCouplingUMesh.New();
136         m.setMeshDimension(2);
137         m.allocateCells(5);
138         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143         m.finishInsertingCells();
144         m.setCoords(c)
145         m.checkConsistencyLight()
146         m1=MEDCouplingUMesh.New();
147         m1.setMeshDimension(1);
148         m1.allocateCells(3);
149         m1.insertNextCell(NORM_SEG2,2,[1,4])
150         m1.insertNextCell(NORM_SEG2,2,[3,6])
151         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152         m1.finishInsertingCells();
153         m1.setCoords(c)
154         m1.checkConsistencyLight()
155         m2=MEDCouplingUMesh.New();
156         m2.setMeshDimension(0);
157         m2.allocateCells(4);
158         m2.insertNextCell(NORM_POINT1,1,[1])
159         m2.insertNextCell(NORM_POINT1,1,[3])
160         m2.insertNextCell(NORM_POINT1,1,[2])
161         m2.insertNextCell(NORM_POINT1,1,[6])
162         m2.finishInsertingCells();
163         m2.setCoords(c)
164         m2.checkConsistencyLight()
165         #
166         mm=MEDFileUMesh.New()
167         self.assertTrue(mm.getUnivNameWrStatus())
168         mm.setName("MyFirstMEDCouplingMEDmesh")
169         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
170         mm.setCoords(c)
171         mm.setMeshAtLevel(-1,m1);
172         mm.setMeshAtLevel(0,m);
173         mm.setMeshAtLevel(-2,m2);
174         # playing with groups
175         g1_2=DataArrayInt.New()
176         g1_2.setValues([1,3],2,1)
177         g1_2.setName("G1")
178         g2_2=DataArrayInt.New()
179         g2_2.setValues([1,2,3],3,1)
180         g2_2.setName("G2")
181         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182         g1_1=DataArrayInt.New()
183         g1_1.setValues([0,1,2],3,1)
184         g1_1.setName("G1")
185         g2_1=DataArrayInt.New()
186         g2_1.setValues([0,2],2,1)
187         g2_1.setName("G2")
188         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189         g1_N=DataArrayInt.New()
190         g1_N.setValues(list(range(8)),8,1)
191         g1_N.setName("G1")
192         g2_N=DataArrayInt.New()
193         g2_N.setValues(list(range(9)),9,1)
194         g2_N.setName("G2")
195         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196         mm.createGroupOnAll(0,"GrpOnAllCell")
197         # check content of mm
198         t=mm.getGroupArr(0,"G1",False)
199         self.assertTrue(g1_2.isEqual(t));
200         t=mm.getGroupArr(0,"G2",False)
201         self.assertTrue(g2_2.isEqual(t));
202         t=mm.getGroupArr(-1,"G1",False)
203         self.assertTrue(g1_1.isEqual(t));
204         t=mm.getGroupArr(-1,"G2",False)
205         self.assertTrue(g2_1.isEqual(t));
206         t=mm.getGroupArr(1,"G1",False)
207         self.assertTrue(g1_N.isEqual(t));
208         t=mm.getGroupArr(1,"G2",False)
209         self.assertTrue(g2_N.isEqual(t));
210         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211         t=mm.getGroupArr(0,"GrpOnAllCell")
212         self.assertTrue(t.getValues()==list(range(5)))
213         #
214         mmCpy=mm.deepCopy()
215         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216         mmCpy.write(outFileName,2);
217         #
218         mm=MEDFileMesh.New(outFileName)
219         #
220         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228         self.assertEqual(3,len(lmm))
229         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
232         #
233         self.assertTrue(mm.getUnivNameWrStatus())
234         self.assertTrue(isinstance(mm.getUnivName(),str))
235         self.assertTrue(len(mm.getUnivName())!=0)
236         mbis=mm.getMeshAtLevel(0)
237         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238         self.assertTrue(m.isEqual(mbis,1e-12));
239         #
240         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
241         pass
242
243     # this test is the testMEDMesh3 except that permutation is dealed here
244     @WriteInTmpDir
245     def testMEDMesh4(self):
246         outFileName="MEDFileMesh4.med"
247         c=DataArrayDouble.New()
248         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 ];
249         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250         c.setValues(coords,9,2)
251         c.setInfoOnComponent(0,"abcdef [km]")
252         c.setInfoOnComponent(1,"ghij [MW]")
253         m=MEDCouplingUMesh.New();
254         m.setMeshDimension(2);
255         m.allocateCells(5);
256         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261         m.finishInsertingCells();
262         m.setCoords(c)
263         m.checkConsistencyLight()
264         m1=MEDCouplingUMesh.New();
265         m1.setMeshDimension(1);
266         m1.allocateCells(3);
267         m1.insertNextCell(NORM_SEG2,2,[1,4])
268         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269         m1.insertNextCell(NORM_SEG2,2,[3,6])
270         m1.finishInsertingCells();
271         m1.setCoords(c)
272         m1.checkConsistencyLight()
273         m2=MEDCouplingUMesh.New();
274         m2.setMeshDimension(0);
275         m2.allocateCells(4);
276         m2.insertNextCell(NORM_POINT1,1,[1])
277         m2.insertNextCell(NORM_POINT1,1,[3])
278         m2.insertNextCell(NORM_POINT1,1,[2])
279         m2.insertNextCell(NORM_POINT1,1,[6])
280         m2.finishInsertingCells();
281         m2.setCoords(c)
282         m2.checkConsistencyLight()
283         #
284         mm=MEDFileUMesh.New()
285         mm.setName("My2ndMEDCouplingMEDmesh")
286         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
287         mm.setCoords(c)
288         renumNode=DataArrayInt.New()
289         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290         mm.setRenumFieldArr(1,renumNode)
291         mm.computeRevNum()
292         mm.setMeshAtLevel(-1,m1,True);
293         mm.setMeshAtLevel(0,m,True);
294         mm.setMeshAtLevel(-2,m2,True);
295         mm.removeMeshAtLevel(-2)
296         mm.setMeshAtLevel(-2,m2,True);
297         # playing with groups
298         g1_2=DataArrayInt.New()
299         g1_2.setValues([2,3],2,1)
300         g1_2.setName("G1")
301         g2_2=DataArrayInt.New()
302         g2_2.setValues([2,0,3],3,1)
303         g2_2.setName("G2")
304         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305         g1_1=DataArrayInt.New()
306         g1_1.setValues([0,2,1],3,1)
307         g1_1.setName("G1")
308         g2_1=DataArrayInt.New()
309         g2_1.setValues([0,2],2,1)
310         g2_1.setName("G2")
311         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312         g1_N=DataArrayInt.New()
313         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
314         g1_N.setName("G1")
315         g2_N=DataArrayInt.New()
316         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
317         g2_N.setName("G2")
318         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319         # check content of mm
320         t=mm.getGroupArr(0,"G1",True)
321         self.assertTrue(g1_2.isEqual(t));
322         t=mm.getGroupArr(0,"G2",True)
323         self.assertTrue(g2_2.isEqual(t));
324         t=mm.getGroupArr(-1,"G1",True)
325         self.assertTrue(g1_1.isEqual(t));
326         t=mm.getGroupArr(-1,"G2",True)
327         self.assertTrue(g2_1.isEqual(t));
328         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
329         #
330         mm.write(outFileName,2);
331         mm2=MEDFileMesh.New(outFileName)
332         res=mm.isEqual(mm2,1e-12)
333         self.assertTrue(res[0])
334         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336         mm2.keepFamIdsOnlyOnLevs([3],[-1])
337         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
339             pass
340         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
342         #
343         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346         self.assertTrue(not mm2.existsFamily("Family_-8"))
347         mm2.createGroupOnAll(-1,"GrpOnAllFace")
348         self.assertTrue(mm2.existsFamily("Family_-8"))
349         self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
350         pass
351
352     #testing persistence of retrieved arrays
353     @WriteInTmpDir
354     def testMEDMesh5(self):
355         GeneratePyfile18(self)
356         fileName="Pyfile18.med"
357         mname="ExampleOfMultiDimW"
358         medmesh=MEDFileUMesh.New(fileName,mname)
359         m1_0=medmesh.getLevel0Mesh(True)
360         da1=medmesh.getFamilyFieldAtLevel(0)
361         del medmesh
362         self.assertEqual(20,m1_0.getNumberOfCells())
363         self.assertEqual(20,da1.getNumberOfTuples())
364         pass
365
366     def internalMEDMesh6(self):
367         outFileName="MEDFileMesh5.med"
368         m=MEDFileCMesh.New()
369         m.setTime(-1,-1,2.3)
370         m1=MEDCouplingCMesh.New();
371         da=DataArrayDouble.New()
372         da.setValues([0.,1.,2.],3,1)
373         da.setInfoOnComponent(0,"XX [mm]")
374         m1.setCoordsAt(0,da)
375         da=DataArrayDouble.New()
376         da.setValues([0.,1.2],2,1)
377         da.setInfoOnComponent(0,"YY [km]")
378         m1.setCoordsAt(1,da)
379         da=DataArrayDouble.New()
380         da.setValues([0.,1.3],2,1)
381         da.setInfoOnComponent(0,"ZZ [um]")
382         m1.setCoordsAt(2,da)
383         m.setMesh(m1)
384         self.assertTrue(m[0].isEqual(m1,1e-12))
385         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386         m.setName("myFirstCartMesh")
387         m.setDescription("mmmmpppppppp")
388         m.setTimeValue(2.3)
389         m.setTimeUnit("ms")
390         da=DataArrayInt.New()
391         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392         m.setFamilyFieldArr(1,da)
393         m.setFamilyId("family1",1)
394         da=m.getFamilyArr(1,"family1")
395         expected1=[2,4,9]
396         self.assertEqual(expected1,da.getValues())
397         self.assertTrue(m.getUnivNameWrStatus())
398         m.write(outFileName,2);
399         mm=MEDFileMesh.New(outFileName)
400         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401         self.assertTrue(isinstance(mm,MEDFileCMesh))
402         self.assertTrue(isinstance(mm.getUnivName(),str))
403         self.assertTrue(len(mm.getUnivName())!=0)
404         self.assertTrue(m.isEqual(mm,1e-12)[0])
405         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
406         m2=mm.getMesh()
407         tt=m.getTime()
408         m1.setTime(tt[2],tt[0],tt[1])
409         m1.setName(m.getName())
410         m1.setTimeUnit(m.getTimeUnit())
411         m1.setDescription(m.getDescription())
412         self.assertTrue(m2.isEqual(m1,1e-12));
413
414     @WriteInTmpDir
415     def testMEDMesh6(self):
416         self.internalMEDMesh6()
417         pass
418
419     @WriteInTmpDir
420     def testMEDMesh7(self):
421         fileName="Pyfile24.med"
422         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
423         m=MEDFileUMesh.New()
424         m.setCoords(m2.getCoords())
425         m.setMeshAtLevel(0,m2)
426         m.setMeshAtLevel(-1,m1)
427         m.setMeshAtLevel(-2,m0)
428         m.setFamilyFieldArr(0,f2)
429         m.setFamilyFieldArr(-1,f1)
430         m.setFamilyFieldArr(-2,f0)
431         m.setFamilyFieldArr(1,p)
432         m.setRenumFieldArr(0,n2)
433         m.setRenumFieldArr(-1,n1)
434         m.setRenumFieldArr(-2,n0)
435         nbOfFams=len(fns)
436         for i in range(nbOfFams):
437             m.addFamily(fns[i],fids[i])
438             pass
439         nbOfGrps=len(grpns)
440         for i in range(nbOfGrps):
441             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
442             pass
443         m.setName(m2.getName())
444         m.setDescription(m2.getDescription())
445         #
446         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
455         #
456         m.write(fileName,2)
457         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
458         pass
459
460     def funcToTestDelItem(self,ff):
461         del ff[[0.02,(3,4)]]
462         pass
463
464     #emulation of pointe.med file.
465     @WriteInTmpDir
466     def testMEDField1(self):
467         TestMultiFieldShuffleRW1(self)
468         mm=MEDFileMesh.New("Pyfile17.med")
469         mm.write("Pyfile17_bis.med",2)
470         ff=MEDFileFieldMultiTS("Pyfile17.med")
471         tsExpected=[[1,2],[3,4],[5,6]]
472         self.assertEqual(3,len(ff))
473         for pos,f1ts in enumerate(ff):
474             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475             self.assertEqual(type(f1ts),MEDFileField1TS)
476             pass
477         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478         self.assertEqual([3,4],ff[1].getTime()[:-1])
479         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481         ff.write("Pyfile17_bis.med",0)
482         #
483         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484         self.assertEqual([(1,2),(3,4),(5,6)],ts)
485         self.funcToTestDelItem(ff)
486         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487         self.assertEqual([(1,2)],ts)
488         pass
489
490     #profiles
491     @WriteInTmpDir
492     def testMEDField2(self):
493         GeneratePyfile19(self)
494         mm=MEDFileMesh.New("Pyfile19.med")
495         mm.write("Pyfile19_bis.med",2)
496         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497         ff.write("Pyfile19_bis.med",0)
498         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
499         pass
500
501     #gauss points
502     @WriteInTmpDir
503     def testMEDField3(self):
504         GeneratePyfile13(self)
505         mm=MEDFileMesh.New("Pyfile13.med")
506         mm.write("Pyfile13_bis.med",2)
507         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508         ff.write("Pyfile13_bis.med",0)
509         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516         ff4=MEDFileField1TS.New("Pyfile13.med")
517         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
519         pass
520
521     #gauss NE
522     @WriteInTmpDir
523     def testMEDField4(self):
524         GeneratePyfile14(self)
525         mm=MEDFileMesh.New("Pyfile14.med")
526         mm.write("Pyfile14_bis.med",2)
527         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528         ff.write("Pyfile14_bis.med",0)
529         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
533         pass
534
535     # MEDField get/set on pointe.med
536     @WriteInTmpDir
537     def testMEDField5(self):
538         TestMultiFieldShuffleRW1(self)
539         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540         f=ff.getFieldAtLevel(ON_CELLS,0)
541         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546         # no with renumbering
547         f=ff.getFieldAtLevel(ON_CELLS,0,1)
548         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550         f=ff.getFieldAtLevel(ON_CELLS,0,3)
551         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552         f=ff.getFieldAtLevel(ON_CELLS,0,2)
553         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
556         pass
557
558     # MEDField get/set on profiles nodes
559     @WriteInTmpDir
560     def testMEDField6(self):
561         GeneratePyfile7(self)
562         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563         its=ff.getIterations()
564         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568         GeneratePyfile19(self)
569         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570         its=ff.getIterations()
571         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
576         pass
577
578     # MEDField get/set on profiles cells
579     @WriteInTmpDir
580     def testMEDField7(self):
581         GeneratePyfile12(self)
582         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583         its=ff.getIterations()
584         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
587         pass
588
589     #first test of assignation. No profile and types sorted by type.
590     @WriteInTmpDir
591     def testMEDField8(self):
592         fname="Pyfile25.med"
593         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
594         m1=f1.getMesh()
595         mm1=MEDFileUMesh.New()
596         mm1.setCoords(m1.getCoords())
597         mm1.setMeshAtLevel(0,m1)
598         mm1.setName(m1.getName())
599         mm1.write(fname,2)
600         ff1=MEDFileField1TS.New()
601         ff1.setFieldNoProfileSBT(f1)
602         ff1.write(fname,0)
603         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604         itt,orr,ti=ff1.getTime()
605         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
607         ff1.setTime(3,4,2.3)
608         itt,orr,ti=ff1.getTime()
609         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
610         f1.setTime(5.5,7,8)
611         ff1.copyTimeInfoFrom(f1)
612         itt,orr,ti=ff1.getTime()
613         self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614         da,infos=ff1.getUndergroundDataArrayExt()
615         f2.getArray().setName(da.getName())#da has the same name than f2
616         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
618         #
619         fname="Pyfile26.med"
620         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
621         m1=f1.getMesh()
622         mm1=MEDFileUMesh.New()
623         mm1.setCoords(m1.getCoords())
624         mm1.setMeshAtLevel(0,m1)
625         mm1.setName(m1.getName())
626         mm1.write(fname,2)
627         ff1=MEDFileField1TS.New()
628         ff1.setFieldNoProfileSBT(f1)
629         nv=1456.
630         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
631         ff1.write(fname,0)
632         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634         f1.getArray().setIJ(0,0,nv)
635         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
636         #
637         fname="Pyfile27.med"
638         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
639         m1=f1.getMesh()
640         mm1=MEDFileUMesh.New()
641         mm1.setCoords(m1.getCoords())
642         mm1.setMeshAtLevel(0,m1)
643         mm1.setName(m1.getName())
644         mm1.write(fname,2)
645         ff1=MEDFileField1TS.New()
646         ff1.setFieldNoProfileSBT(f1)
647         ff1.write(fname,0)
648         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650         da,infos=ff1.getUndergroundDataArrayExt()
651         f2.getArray().setName(da.getName())#da has the same name than f2
652         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
654         #
655         fname="Pyfile28.med"
656         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657         f1InvalidCpy=f1.deepCopy()
658         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659         f1InvalidCpy2=f1.deepCopy()
660         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
661         m1=f1.getMesh()
662         mm1=MEDFileUMesh.New()
663         mm1.setCoords(m1.getCoords())
664         mm1.setMeshAtLevel(0,m1)
665         mm1.setName(m1.getName())
666         mm1.write(fname,2)
667         ff1=MEDFileField1TS.New()
668         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671         ff1.setFieldNoProfileSBT(f1)
672         ff1.write(fname,0)
673         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676         sbt=ff2.getFieldSplitedByType2()
677         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680         self.assertEqual(6,loc1.getNumberOfPointsInCells())
681         self.assertEqual(3,loc1.getNumberOfGaussPoints())
682         self.assertEqual(2,loc1.getDimension())
683         da,infos=ff2.getUndergroundDataArrayExt()
684         f2.getArray().setName(da.getName())#da has the same name than f2
685         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686         self.assertEqual(53,da.getNumberOfTuples())
687         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)
688         #
689         pass
690
691     @WriteInTmpDir
692     def testMEDFileData1(self):
693         fname="Pyfile29.med"
694         d=MEDFileData.New()
695         #
696         m1=MEDLoaderDataForTest.build1DMesh_1()
697         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698         mmm1=MEDFileMeshMultiTS.New() ;
699         mmm1.setOneTimeStep(mm1)
700         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
704         d.setMeshes(ms)
705         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706             self.assertEqual(name,mmm.getName())
707             self.assertEqual(type(mmm),MEDFileUMesh)
708             pass
709         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
710         #
711         ff1=MEDFileFieldMultiTS.New()
712         ff21=MEDFileFieldMultiTS.New()
713         ff22=MEDFileFieldMultiTS.New()
714         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715         f1.getArray().setInfoOnComponent(0,"power [kW]")
716         ff1.appendFieldNoProfileSBT(f1)
717         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719         ff21.appendFieldNoProfileSBT(f21)
720         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723         ff22.appendFieldNoProfileSBT(f22)
724         fs=MEDFileFields.New()
725         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726         for name,fmts in zip(["f1","f21","f22"],fs):
727             self.assertEqual(name,fmts.getName())
728             pass
729         d.setFields(fs)
730         #
731         fname2="Pyfile29_2.med"
732         d.write(fname2,2)
733         #
734         d2=MEDFileData.New(fname2)
735         self.assertEqual(2,d2.getNumberOfMeshes())
736         self.assertEqual(3,d2.getNumberOfFields())
737         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741         self.assertTrue(m1.isEqual(m1bis,1e-12))
742         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
747         pass
748
749     @WriteInTmpDir
750     def testMEDField9(self):
751         # first test field profile WR. Full type but with some type missing
752         fname="Pyfile30.med"
753         m1=MEDLoaderDataForTest.build2DMesh_3()
754         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
755         mm1.write(fname,2)
756         ff1=MEDFileField1TS.New()
757         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
761         #
762         ff1.setFieldProfile(f1,mm1,0,da)
763         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
764         ff1=ff1.deepCopy()
765         ff1.write(fname,0)
766         #
767         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769         self.assertTrue(vals.isEqual(d,1e-14))
770         #
771         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773         ff2.deepCpyGlobs(ff3)
774         sbt=ff2.getFieldSplitedByType2()
775         self.assertEqual(3,sbt[0][0])#TRI3
776         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779         self.assertEqual(4,sbt[1][0])#QUAD4
780         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786         self.assertTrue(vals.isEqual(d,1e-14))
787         pass
788
789     @WriteInTmpDir
790     def testMEDField10(self):
791         fname="Pyfile31.med"
792         m1=MEDLoaderDataForTest.build2DMesh_1()
793         m1.renumberCells([0,1,4,2,3,5],False)
794         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
795         mm1.write(fname,2)
796         ff1=MEDFileFieldMultiTS.New()
797         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
801         #
802         ff1.appendFieldProfile(f1,mm1,0,da)
803         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804         ff1.appendFieldProfile(f1,mm1,0,da)
805         ff1=ff1.deepCopy()
806         ff1.write(fname,0)
807         #
808         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810         self.assertTrue(vals.isEqual(e,1e-14))
811         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813         self.assertTrue(vals.isEqual(d,1e-14))
814         #
815         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819         self.assertTrue(vals.isEqual(e,1e-14))
820         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822         self.assertTrue(vals.isEqual(d,1e-14))
823         pass
824
825     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
826     @WriteInTmpDir
827     def testMEDField11(self):
828         fname="Pyfile32.med"
829         m1=MEDLoaderDataForTest.build2DMesh_1()
830         m1.renumberCells([0,1,4,2,3,5],False)
831         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832         mm1.write(fname,2)
833         ff1=MEDFileField1TS.New()
834         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
838         #
839         ff1.setFieldProfile(f1,mm1,0,da)
840         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
841         ff1.write(fname,0)
842         #
843         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845         self.assertTrue(vals.isEqual(d,1e-14))
846         ## #
847         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850         self.assertTrue(vals.isEqual(d,1e-14))
851         pass
852
853     @WriteInTmpDir
854     def testMEDField12(self):
855         fname="Pyfile33.med"
856         m1=MEDLoaderDataForTest.build2DMesh_1()
857         m1.renumberCells([0,1,4,2,3,5],False)
858         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
859         mm1.write(fname,2)
860         ff1=MEDFileFieldMultiTS.New()
861         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863         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.
864         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
865         #
866         ff1.appendFieldProfile(f1,mm1,0,da)
867         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868         ff1.appendFieldProfile(f1,mm1,0,da)
869         ff1.write(fname,0)
870         #
871         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873         self.assertTrue(vals.isEqual(e,1e-14))
874         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876         self.assertTrue(vals.isEqual(d,1e-14))
877         #
878         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881         self.assertTrue(vals.isEqual(e,1e-14))
882         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884         self.assertTrue(vals.isEqual(d,1e-14))
885         pass
886
887     @WriteInTmpDir
888     def testMEDField13(self):
889         fname="Pyfile34.med"
890         m1=MEDLoaderDataForTest.build2DMesh_1()
891         m1.renumberCells([0,1,4,2,3,5],False)
892         tmp=m1.getName();
893         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
895         mm1.write(fname,2)
896         ff1=MEDFileField1TS.New()
897         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899         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.
900         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
901         #
902         ff1.setFieldProfile(f1,mm1,0,da)
903         ff1.write(fname,0)
904         #
905         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907         self.assertTrue(vals.isEqual(d,1e-14))
908         #
909         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912         self.assertTrue(vals.isEqual(d,1e-14))
913         pass
914
915     @WriteInTmpDir
916     def testMEDField14(self):
917         fname="Pyfile35.med"
918         m1=MEDLoaderDataForTest.build2DMesh_1()
919         m1.renumberCells([0,1,4,2,3,5],False)
920         tmp=m1.getName();
921         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
923         mm1.write(fname,2)
924         ff1=MEDFileFieldMultiTS.New()
925         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927         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.
928         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
929         #
930         ff1.appendFieldProfile(f1,mm1,0,da)
931         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932         ff1.appendFieldProfile(f1,mm1,0,da)
933         ff1.write(fname,0)
934         #
935         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937         self.assertTrue(vals.isEqual(d,1e-14))
938         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940         self.assertTrue(vals.isEqual(e,1e-14))
941         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
942         #
943         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946         self.assertTrue(vals.isEqual(d,1e-14))
947         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949         self.assertTrue(vals.isEqual(e,1e-14))
950         pass
951     # 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.
952     # 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
953     # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
954     @WriteInTmpDir
955     def testMEDField15(self):
956         fname="Pyfile36.med"
957         m0=MEDLoaderDataForTest.build2DMesh_1()
958         m0.renumberCells([0,1,4,2,3,5],False)
959         tmp=m0.getName();
960         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
961         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962         ff1=MEDFileField1TS.New()
963         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965         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.
966         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
967         #
968         ff1.setFieldProfile(f1,mm1,0,da)
969         m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
970         mm1.write(fname,2)
971         ff1.write(fname,0)
972         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974         self.assertTrue(p1.isIota(5))
975         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
976         pass
977     # Test for getFieldAtTopLevel method
978     @WriteInTmpDir
979     def testMEDField16(self):
980         fname="Pyfile37.med"
981         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
982         m1=f1.getMesh()
983         mm1=MEDFileUMesh.New()
984         mm1.setCoords(m1.getCoords())
985         mm1.setMeshAtLevel(0,m1)
986         mm1.setName(m1.getName())
987         ff1=MEDFileField1TS.New()
988         ff1.setFieldNoProfileSBT(f1)
989         m2=m1.buildDescendingConnectivity()[0]
990         m2.sortCellsInMEDFileFrmt()
991         m2.setName(m1.getName())
992         mm1.setMeshAtLevel(-1,m2)
993         mm1.write(fname,2)
994         f2=m2.getMeasureField(True)
995         dd=DataArrayDouble.New()
996         dd.alloc(f2.getArray().getNumberOfTuples(),3)
997         dd[:,0]=f2.getArray()
998         dd[:,1]=2*f2.getArray()
999         dd[:,2]=3*f2.getArray()
1000         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1001         f2.setArray(dd)
1002         f2.copyTinyStringsFrom(f1)
1003         f2.copyTinyAttrFrom(f1)
1004         ff1.setFieldNoProfileSBT(f2)
1005         ff1.write(fname,0)
1006         # Reading Pyfile37.med
1007         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1014         # More complex
1015         fname="Pyfile38.med"
1016         mm1.write(fname,2)
1017         ff1=MEDFileField1TS.New()
1018         ff1.setFieldNoProfileSBT(f2)
1019         ff1.write(fname,0)
1020         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1023         pass
1024
1025     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1026     @WriteInTmpDir
1027     def testMEDField17(self):
1028         fname="Pyfile39.med"
1029         m1=MEDLoaderDataForTest.build2DMesh_1()
1030         m1.renumberCells([0,1,4,2,3,5],False)
1031         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1032         mm1.write(fname,2)
1033         ffs=MEDFileFields.New()
1034         ff1=MEDFileFieldMultiTS.New()
1035         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037         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.
1038         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1039         #
1040         ff1.appendFieldProfile(f1,mm1,0,da)
1041         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042         ff1.appendFieldProfile(f1,mm1,0,da)
1043         ffs.resize(1)
1044         ffs.setFieldAtPos(0,ff1)
1045         ffs=ffs.deepCopy()
1046         ffs.write(fname,0)
1047         #
1048         ffsr=MEDFileFields.New(fname)
1049         ff3=ffsr.getFieldAtPos(0)
1050         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1052         pass
1053
1054     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1055     @WriteInTmpDir
1056     def testMEDField18(self):
1057         fname="Pyfile40.med"
1058         m1=MEDLoaderDataForTest.build2DMesh_1()
1059         m1.renumberCells([0,1,4,2,3,5],False)
1060         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1061         mm1.write(fname,2)
1062         ffs=MEDFileFields.New()
1063         ff1=MEDFileFieldMultiTS.New()
1064         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066         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.
1067         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1068         #
1069         ff1.appendFieldProfile(f1,mm1,0,da)
1070         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071         ff1.appendFieldProfile(f1,mm1,0,da)
1072         ffs.pushField(ff1)
1073         ffs.write(fname,0)
1074         #
1075         ffsr=MEDFileFields.New(fname)
1076         ff3=ffsr.getFieldAtPos(0)
1077         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1079         pass
1080
1081     @WriteInTmpDir
1082     def testMEDFieldBug1(self):
1083         GeneratePyfile13(self)
1084         fname="Pyfile13.med"
1085         d=MEDFileData.New(fname)
1086         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1087         pass
1088
1089     @WriteInTmpDir
1090     def testMEDMesh8(self):
1091         m=MEDLoaderDataForTest.build1DMesh_1()
1092         m.convertQuadraticCellsToLinear()
1093         mm=MEDFileUMesh.New()
1094         mm.setMeshAtLevel(0,m)
1095         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098         mm.setGroupsAtLevel(0,[g1,g2],False)
1099         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103         mm.assignFamilyNameWithGroupName()
1104         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1108         #
1109         mm=MEDFileUMesh.New()
1110         mm.setMeshAtLevel(0,m)
1111         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123         mm.changeFamilyId(5,6)
1124         g=mm.getGroupArr(0,"g3")
1125         self.assertTrue(g.isEqual(g3));
1126         g=mm.getGroupArr(0,"g2")
1127         self.assertTrue(g.isEqual(g2));
1128         g=mm.getGroupArr(0,"g1")
1129         self.assertTrue(g.isEqual(g1));
1130         pass
1131
1132     # bug detected by gauthier
1133     @WriteInTmpDir
1134     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135         fname="Pyfile41.med"
1136         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1137         m1=f1.getMesh()
1138         mm1=MEDFileUMesh.New()
1139         mm1.setCoords(m1.getCoords())
1140         mm1.setMeshAtLevel(0,m1)
1141         mm1.write(fname,2)
1142         ff1=MEDFileField1TS.New()
1143         ff1.setFieldNoProfileSBT(f1)
1144         ff1.write(fname,0)
1145         # writing mesh1 and field1, now creation of mesh2 and field2
1146         f2=f1.deepCopy()
1147         m2=f2.getMesh()
1148         m2.translate([0.5,0.6,0.7])
1149         m2.setName("3DSurfMesh_2")
1150         f2.getArray()[:]*=2.
1151         f2.setName("VectorFieldOnCells2")
1152         mm2=MEDFileUMesh.New()
1153         mm2.setCoords(m2.getCoords())
1154         mm2.setMeshAtLevel(0,m2)
1155         mm2.write(fname,0)
1156         ff2=MEDFileField1TS.New()
1157         ff2.setFieldNoProfileSBT(f2)
1158         ff2.write(fname,0)
1159         #
1160         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1164         pass
1165
1166     @WriteInTmpDir
1167     def testMEDLoaderMultiLevelCellField1(self):
1168         fname="Pyfile42.med"
1169         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170         m=MEDFileUMesh.New()
1171         m.setCoords(m2.getCoords())
1172         m.setMeshAtLevel(0,m2)
1173         m.setMeshAtLevel(-1,m1)
1174         m.setMeshAtLevel(-2,m0)
1175         m.write(fname,2)
1176         #
1177         FieldName1="Field1"
1178         compNames1=["comp1","comp2","comp3"]
1179         ff1=MEDFileField1TS.New()
1180         da2=DataArrayDouble.New()
1181         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1182         da2.iota(7.)
1183         da2.rearrange(len(compNames1))
1184         da2.setInfoOnComponents(compNames1)
1185         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186         ff1.setFieldNoProfileSBT(f2)
1187         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188         da0=DataArrayDouble.New()
1189         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1190         da0.iota(190.)
1191         da0.rearrange(len(compNames1))
1192         da0.setInfoOnComponents(compNames1)
1193         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194         ff1.setFieldNoProfileSBT(f0)
1195         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196         da1=DataArrayDouble.New()
1197         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1198         da1.iota(90.)
1199         da1.rearrange(len(compNames1))
1200         da1.setInfoOnComponents(compNames1)
1201         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202         ff1.setFieldNoProfileSBT(f1)
1203         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1204         #
1205         ff1.write(fname,0)
1206         #
1207         FieldName2="Field2"
1208         compNames2=["comp11","comp22"]
1209         ff2=MEDFileField1TS.New()
1210         da0=DataArrayDouble.New()
1211         da0.alloc(m0.getNumberOfCells()*2,1)
1212         da0.iota(-190.)
1213         da0.rearrange(2)
1214         da0.setInfoOnComponents(compNames2)
1215         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216         ff2.setFieldNoProfileSBT(f0)
1217         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218         da1=DataArrayDouble.New()
1219         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1220         da1.iota(-90.)
1221         da1.rearrange(len(compNames2))
1222         da1.setInfoOnComponents(compNames2)
1223         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224         ff2.setFieldNoProfileSBT(f1)
1225         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1226         #
1227         ff2.write(fname,0)
1228         #
1229         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1235         pass
1236
1237     @WriteInTmpDir
1238     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239         fname="Pyfile43.med"
1240         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241         m=MEDFileUMesh.New()
1242         m.setMeshAtLevel(0,m2)
1243         m.setMeshAtLevel(-1,m1)
1244         m.setMeshAtLevel(-2,m0)
1245         f=MEDFileField1TS.New()
1246         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247         ff.setName("NodeFieldPfl")
1248         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1249         ff.setArray(arr)
1250         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251         f.setFieldProfile(ff,m,-2,pfl)
1252         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261         expected1=[1.,10.,100.,2.,20.,200.]
1262         nodeCoordsWithValue1=[10.,2.5,0.]
1263         nodeCoordsWithValue2=[10.,3.75,0.]
1264         for i in range(3):
1265             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1267             pass
1268         for i in range(6):
1269             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1270             pass
1271         del tes0
1272         #
1273         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1282         for i in range(6):
1283             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1284             pass
1285         m.write(fname,2)
1286         f.write(fname,0)
1287         #
1288         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289         f=MEDFileField1TS.New()
1290         f.setFieldProfile(ff,m,-2,pfl)
1291         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300         expected2=[2.,20.,200.,1.,10.,100.]
1301         for i in range(3):
1302             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1304             pass
1305         for i in range(6):
1306             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1307             pass
1308         #
1309         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1318         for i in range(6):
1319             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1320             pass
1321         pass
1322
1323     @WriteInTmpDir
1324     def testBuildInnerBoundaryAlongM1Group1(self):
1325         fname="Pyfile44.med"
1326         m=MEDCouplingCMesh.New()
1327         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332         m2.setName(m.getName())
1333         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335         mm=MEDFileUMesh.New()
1336         mm.setMeshAtLevel(0,m)
1337         mm.setMeshAtLevel(-1,m2)
1338         mm.setGroupsAtLevel(-1,[grp,grp2])
1339         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340         mm.setGroupsAtLevel(1,[grpNode])
1341         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1344         #
1345         self.assertEqual(30,mm.getNumberOfNodes())
1346         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1348         #
1349         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350         self.assertEqual([15,16,17],nodes.getValues());
1351         self.assertEqual([7,8,9],cells.getValues());
1352         self.assertEqual([12,13,14],cells2.getValues());
1353         self.assertEqual(33,mm.getNumberOfNodes())
1354         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358         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
1359         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360         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
1361         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362         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])
1363         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1365         #
1366         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1371         mm.write(fname,2)
1372         pass
1373
1374     @WriteInTmpDir
1375     def testBuildInnerBoundaryAlongM1Group2(self):
1376         fname="Pyfile45.med"
1377         m=MEDCouplingCMesh.New()
1378         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383         m2.setName(m.getName())
1384         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386         mm=MEDFileUMesh.New()
1387         mm.setMeshAtLevel(0,m)
1388         mm.setMeshAtLevel(-1,m2)
1389         mm.setGroupsAtLevel(-1,[grp,grp2])
1390         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391         mm.setGroupsAtLevel(1,[grpNode])
1392         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393         ref1=[4,9,8,14,15,4,10,9,15,16]
1394         ref2=[4,9,8,14,30,4,10,9,30,16]
1395         #
1396         self.assertEqual(30,mm.getNumberOfNodes())
1397         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1399         #
1400         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401         self.assertEqual([15],nodes.getValues());
1402         self.assertEqual([7,8],cells.getValues());
1403         self.assertEqual([12,13],cells2.getValues());
1404         self.assertEqual(31,mm.getNumberOfNodes())
1405         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409         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
1410         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411         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
1412         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413         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])
1414         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1416         #
1417         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1422         mm.write(fname,2)
1423         pass
1424
1425     @WriteInTmpDir
1426     def testBuildInnerBoundaryAlongM1Group3(self):
1427         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428         fname = "Pyfile73.med"
1429         m = MEDCouplingCMesh.New()
1430         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432         m = m.buildUnstructured(); m.setName("simple")
1433         m2 = m.buildDescendingConnectivity()[0]
1434         m2.setName(m.getName())
1435
1436         # A crack in two non connected parts of the mesh:
1437         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1438
1439         mm = MEDFileUMesh.New()
1440         mm.setMeshAtLevel(0,m)
1441         mm.setMeshAtLevel(-1,m2)
1442         mm.setGroupsAtLevel(-1,[grpSeg])
1443         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444         self.assertEqual([1,13],nodes.getValues());
1445         self.assertEqual([0,6],cellsMod.getValues());
1446         self.assertEqual([1,7],cellsNotMod.getValues());
1447         self.assertEqual(17,mm.getNumberOfNodes())
1448         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454         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
1455         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1456
1457         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1460         #
1461         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1465         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1466         mm.write(fname,2)
1467
1468     @WriteInTmpDir
1469     def testBuildInnerBoundaryAlongM1Group4(self):
1470         """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1471         """
1472         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473                                0.,1., 1.,1., 2.,1., 3.,1.,
1474                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475         conn = [3,0,4,1,  3,1,4,5,
1476                 3,5,9,10, 3,5,10,6,
1477                 3,2,6,7,  3,2,7,3,
1478                 3,4,8,9,  3,4,9,5,
1479                 3,1,5,6,  3,1,6,2,
1480                 3,6,10,11,3,6,11,7]
1481         # Only TRI3:
1482         connI = DataArrayInt()
1483         connI.alloc(13, 1); connI.iota(); connI *= 4
1484         m2 = MEDCouplingUMesh("2D", 2)
1485         m2.setCoords(coo)
1486         m2.setConnectivity(DataArrayInt(conn), connI)
1487         m2.checkConsistency()
1488         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491         mfu = MEDFileUMesh()
1492         mfu.setMeshAtLevel(0, m2)
1493         mfu.setMeshAtLevel(-1, m1)
1494         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495         nNod = m2.getNumberOfNodes()
1496         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497         m2_bis = mfu.getMeshAtLevel(0)
1498         m2_bis.checkConsistency()
1499         m1_bis = mfu.getMeshAtLevel(-1)
1500         m1_bis.checkConsistency()
1501         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504         self.assertEqual([6,7], nodesDup.getValues())
1505         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1512         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1513         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1514         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1515         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
1516         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1517         m_bis0 = mfu.getMeshAtLevel(-1)
1518         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1519         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1520
1521     @WriteInTmpDir
1522     def testBuildInnerBoundary5(self):
1523         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1524         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1525         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,
1526         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,
1527          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,
1528          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,
1529          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,
1530          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,
1531          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1532          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1533          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1534          97.16750463405486, 97.18018457127863], 46, 3)
1535         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,
1536          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,
1537          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,
1538          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,
1539          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,
1540          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,
1541          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,
1542          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,
1543          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,
1544          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,
1545          30, 2]
1546         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,
1547          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,
1548          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1549         m3 = MEDCouplingUMesh("3D", 3)
1550         m3.setCoords(coo)
1551         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1552         m3.checkConsistency()
1553         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1554         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1555         mfu = MEDFileUMesh()
1556         mfu.setMeshAtLevel(0, m3)
1557         mfu.setMeshAtLevel(-1, m2)
1558         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1559         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1560         mfu.setGroupsAtLevel(-1, [grpIds])
1561         nNod = m3.getNumberOfNodes()
1562         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1563         m3_bis = mfu.getMeshAtLevel(0)
1564         m3_bis.checkConsistency()
1565         m2_bis = mfu.getMeshAtLevel(-1)
1566         m2_bis.checkConsistency()
1567         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1568         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1569         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1570         self.assertEqual([3], nodesDup.getValues())
1571         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1572         self.assertEqual(set([22]), set(cells1.getValues()))
1573         self.assertEqual(set([77]), set(cells2.getValues()))
1574         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1575         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1576         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1577         m_bis0 = mfu.getMeshAtLevel(-1)
1578         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1579         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1580         pass
1581
1582     @WriteInTmpDir
1583     def testBuildInnerBoundary6(self):
1584         """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1585         The singular point was wrongly duplicated.
1586         """
1587         coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1588                                 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1589                                 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1590                                 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1591                                 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1592                                 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1593                                 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1594         c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1595               18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1596               28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1597         cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1598         m3 = MEDCouplingUMesh("3D", 3)
1599         m3.setCoords(coo)
1600         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1601         m3.checkConsistency()
1602         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1603         grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1604         mfu = MEDFileUMesh()
1605         mfu.setMeshAtLevel(0, m3)
1606         mfu.setMeshAtLevel(-1, m2)
1607         mfu.setGroupsAtLevel(-1, [grpIds])
1608         nNod = m3.getNumberOfNodes()
1609         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1610         m3_bis = mfu.getMeshAtLevel(0)
1611         m3_bis.checkConsistency()
1612         m2_bis = mfu.getMeshAtLevel(-1)
1613         m2_bis.checkConsistency()
1614         self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1615         self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1616         self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1617         self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1618         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1619         self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1620         self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1621         self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1622         self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1623         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1624         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1625         pass
1626
1627     @WriteInTmpDir
1628     def testBuildInnerBoundary7(self):
1629         """ 3D test where the crack has another funny shape with another singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1630         Once the crack is inserted, the cells on either side of the crack do not necessarily form a connex spread zone. This was not properly handled either. 
1631         """
1632         m3 = MEDCouplingUMesh('box', 3)
1633         coo = DataArrayDouble([(5,17,0),(0,17,0),(0,12,0),(5,12,0),(15,17,0),(15,12,0),(20,12,0),(20,17,0),(20,2,0),(15,2,0),(15,-3,0),(20,-3,0),(5,-3,0),(5,2,0),(0,-3,0),(0,2,0),(5,17,10),(5,17,20),(5,17,30),(5,17,40),(0,17,10),(0,17,20),(0,17,30),(0,17,40),(0,12,10),(0,12,20),(0,12,30),(0,12,40),(5,12,10),(5,12,20),(5,12,30),(5,12,40),(15,17,10),(15,17,20),(15,17,30),(15,17,40),(15,12,10),(15,12,20),(15,12,30),(15,12,40),(20,12,10),(20,12,20),(20,12,30),(20,12,40),(20,17,10),(20,17,20),(20,17,30),(20,17,40),(20,2,10),(20,2,20),(20,2,30),(20,2,40),(15,2,10),(15,2,20),(15,2,30),(15,2,40),(15,-3,10),(15,-3,20),(15,-3,30),(15,-3,40),(20,-3,10),(20,-3,20),(20,-3,30),(20,-3,40),
1634                                (5,-3,10),(5,-3,20),(5,-3,30),(5,-3,40),(5,2,10),(5,2,20),(5,2,30),(5,2,40),(0,-3,10),(0,-3,20),(0,-3,30),(0,-3,40),(0,2,10),(0,2,20),(0,2,30),(0,2,40),(20,8,0),(0,8,0),(20,8,10),(20,8,20),(20,8,30),(20,8,40),(15,8,30),(15,8,40),(5,8,30),(5,8,40),(0,8,10),(0,8,20),(0,8,30),(0,8,40)])
1635         m3.setCoords(coo)
1636         c = DataArrayInt([31, 0, 3, 2, 1, -1, 16, 20, 24, 28, -1, 0, 16, 28, 3, -1, 3, 28, 24, 2, -1, 2, 24, 20, 1, -1, 1, 20, 16, 0, 31, 16, 28, 24, 20, -1, 17, 21, 25, 29, -1, 16, 17, 29, 28, -1, 28, 29, 25, 24, -1, 24, 25, 21, 20, -1, 20, 21, 17, 16, 31, 17, 29, 25, 21, -1, 18, 22, 26, 30, -1, 17, 18, 30, 29, -1, 29, 30, 26, 25, -1, 25, 26, 22, 21, -1, 21, 22, 18, 17, 31, 18, 30, 26, 22, -1, 19, 23, 27, 31, -1, 18, 19, 31, 30, -1, 30, 31, 27, 26, -1, 26, 27, 23, 22, -1, 22, 23, 19, 18, 31, 4, 5, 3, 0, -1, 32, 16, 28, 36, -1, 4, 32, 36, 5, -1, 5, 36, 28, 3, -1, 3, 28, 16, 0, -1, 0, 16, 32, 4, 31, 32, 36, 28, 16, -1, 33, 17, 29, 37, -1, 32, 33, 37,
1637                           36, -1, 36, 37, 29, 28, -1, 28, 29, 17, 16, -1, 16, 17, 33, 32, 31, 33, 37, 29, 17, -1, 34, 18, 30, 38, -1, 33, 34, 38, 37, -1, 37, 38, 30, 29, -1, 29, 30, 18, 17, -1, 17, 18, 34, 33, 31, 34, 38, 30, 18, -1, 35, 19, 31, 39, -1, 34, 35, 39, 38, -1, 38, 39, 31, 30, -1, 30, 31, 19, 18, -1, 18, 19, 35, 34, 31, 6, 5, 4, 7, -1, 40, 44, 32, 36, -1, 6, 40, 36, 5, -1, 5, 36, 32, 4, -1, 4, 32, 44, 7, -1, 7, 44, 40, 6, 31, 40, 36, 32, 44, -1, 41, 45, 33, 37, -1, 40, 41, 37, 36, -1, 36, 37, 33, 32, -1, 32, 33, 45, 44, -1, 44, 45, 41, 40, 31, 41, 37, 33, 45, -1, 42, 46, 34, 38, -1, 41, 42, 38, 37, -1, 37, 38, 34, 33, -1, 33, 34, 46, 45, -1, 45, 46, 42, 41, 31,
1638                           42, 38, 34, 46, -1, 43, 47, 35, 39, -1, 42, 43, 39, 38, -1, 38, 39, 35, 34, -1, 34, 35, 47, 46, -1, 46, 47, 43, 42, 31, 80, 9, 5, 6, -1, 82, 40, 36, 52, -1, 80, 82, 52, 9, -1, 9, 52, 36, 5, -1, 5, 36, 40, 6, -1, 6, 40, 82, 80, 31, 82, 52, 36, 40, -1, 83, 41, 37, 53, -1, 82, 83, 53, 52, -1, 52, 53, 37, 36, -1, 36, 37, 41, 40, -1, 40, 41, 83, 82, 31, 83, 53, 37, 41, -1, 84, 42, 38, 86, -1, 83, 84, 86, 53, -1, 53, 86, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 84, 83, 31, 84, 86, 38, 42, -1, 85, 43, 39, 87, -1, 84, 85, 87, 86, -1, 86, 87, 39, 38, -1, 38, 39, 43, 42, -1, 42, 43, 85, 84, 31, 10, 9, 8, 11, -1, 56, 60, 48, 52, -1, 10, 56, 52, 9, -1, 9, 52,
1639                           48, 8, -1, 8, 48, 60, 11, -1, 11, 60, 56, 10, 31, 56, 52,
1640                           48, 60, -1, 57, 61, 49, 53, -1, 56, 57, 53, 52, -1, 52, 53, 49, 48, -1, 48, 49, 61, 60, -1, 60, 61, 57, 56, 31, 57, 53, 49, 61, -1, 58, 62, 50, 54, -1, 57, 58, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, 61, 62, 58, 57, 31, 58, 54, 50, 62, -1, 59, 63, 51, 55, -1, 58, 59, 55, 54, -1, 54, 55, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 59, 58, 31, 12, 13, 9, 10, -1, 64, 56, 52, 68, -1, 12, 64, 68, 13, -1, 13, 68, 52, 9, -1, 9, 52, 56, 10, -1, 10, 56, 64, 12, 31, 64, 68, 52, 56, -1, 65, 57, 53, 69, -1, 64, 65, 69, 68, -1, 68, 69, 53, 52, -1, 52, 53, 57, 56, -1, 56, 57, 65, 64, 31, 65, 69, 53, 57, -1, 66, 58, 54, 70, -1, 65, 66, 70, 69, -1, 69, 70,
1641                           54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 66, 65, 31, 66, 70, 54, 58, -1, 67, 59, 55, 71, -1, 66, 67, 71, 70, -1, 70, 71, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 67, 66, 31, 14, 15, 13, 12, -1, 72, 64, 68, 76, -1, 14, 72, 76, 15, -1, 15, 76, 68, 13, -1, 13, 68, 64, 12, -1, 12, 64, 72, 14, 31, 72, 76, 68, 64, -1, 73, 65, 69, 77, -1, 72, 73, 77, 76, -1, 76, 77, 69, 68, -1, 68, 69, 65, 64, -1, 64, 65, 73, 72, 31, 73, 77, 69, 65, -1, 74, 66, 70, 78, -1, 73, 74, 78, 77, -1, 77, 78, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 74, 73, 31, 74, 78, 70, 66, -1, 75, 67, 71, 79, -1, 74, 75, 79, 78, -1, 78, 79, 71, 70, -1, 70, 71, 67, 66, -1,
1642                           66, 67, 75, 74, 31, 2, 3, 13, 81, -1, 24, 90, 68, 28, -1, 2, 24, 28, 3, -1, 3, 28, 68, 13, -1, 13, 68, 90, 81, -1, 81, 90, 24, 2, 31, 24, 28, 68, 90, -1, 25, 91, 69, 29, -1, 24, 25, 29, 28, -1, 28, 29, 69, 68, -1, 68, 69, 91, 90, -1, 90, 91, 25, 24, 31, 25, 29, 69, 91, -1, 26, 92, 88, 30, -1, 25, 26, 30, 29, -1, 29, 30, 88, 69, -1, 69, 88, 92, 91, -1, 91, 92, 26, 25, 31, 26, 30, 88, 92, -1, 27, 93, 89, 31, -1, 26, 27, 31, 30, -1, 30, 31, 89, 88, -1, 88, 89, 93, 92, -1, 92, 93, 27, 26, 31, 13, 3, 5, 9, -1, 68, 52, 36, 28, -1, 13, 68, 28, 3, -1, 3, 28, 36, 5, -1, 5, 36, 52, 9, -1, 9, 52, 68, 13, 31, 68, 28, 36, 52, -1, 69, 53, 37, 29, -1, 68, 69, 29,
1643                           28, -1, 28, 29, 37, 36, -1, 36, 37, 53, 52, -1, 52, 53, 69, 68, 31, 69, 29, 37, 53, -1, 88, 86, 38, 30, -1, 69, 88, 30, 29, -1, 29, 30, 38, 37, -1, 37, 38, 86, 53, -1, 53, 86, 88, 69, 31, 88, 30, 38, 86, -1, 89, 87, 39, 31, -1, 88, 89, 31, 30, -1, 30, 31, 39, 38, -1, 38, 39, 87, 86, -1, 86, 87, 89, 88])
1644         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080])
1645         m3.setConnectivity(c, cI)
1646         m3.checkConsistency()
1647         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1648         grpIds = DataArrayInt([2,7,12,17,95,99,103,107,129,133,137,141]); grpIds.setName("group")
1649         mfu = MEDFileUMesh()
1650         mfu.setMeshAtLevel(0, m3)
1651         mfu.setMeshAtLevel(-1, m2)
1652         mfu.setGroupsAtLevel(-1, [grpIds])
1653         nNod = m3.getNumberOfNodes()
1654         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1655         m3_bis = mfu.getMeshAtLevel(0)
1656         m3_bis.checkConsistency()
1657         m2_bis = mfu.getMeshAtLevel(-1)
1658         m2_bis.checkConsistency()
1659         self.assertEqual(nNod+22, mfu.getNumberOfNodes())
1660         self.assertEqual(nNod+22, m3_bis.getNumberOfNodes())
1661         self.assertEqual(nNod+22, m2_bis.getNumberOfNodes())
1662         self.assertEqual([0, 3, 12, 13, 16, 17, 18, 19, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89], nodesDup.getValues())
1663         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1664         self.assertEqual(set([0, 1, 2, 3, 24, 25, 26, 27, 28, 29, 30, 31]), set(cells1.getValues()))
1665         self.assertEqual(set([4, 5, 6, 7, 20, 21, 22, 23, 32, 33, 34, 35]), set(cells2.getValues()))
1666         self.assertEqual([2, 7, 12, 17, 95, 99, 103, 107, 129, 133, 137, 141],mfu.getGroupArr(-1,"group").getValues())
1667         self.assertEqual([151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1668         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1669         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1670         pass
1671
1672     def testBuildInnerBoundary8(self):
1673         """ 3D test where the crack leaves 'naked' cells. If we call a 'close-to-crack cell' a cell which shares a face with the M1 group,
1674          a 'naked cell' is a cell that has some node duplicated, but which do not share any face with a 'close-to-crack cell'. In this case
1675          it is tricky to decide whether this cell should be renumbered or not ...
1676          Warning: on the mesh below some points have already been doubled by a previous cut. 
1677         """
1678         m3 = MEDCouplingUMesh('box', 3)
1679         coo = DataArrayDouble([(0,15,0),(0,5,0),(3,5,0),(5,5,0),(5,15,0),(5,20,0),(0,20,0),(15,20,0),(15,15,0),(20,15,0),(20,20,0),(20,5,0),(15,5,0),(15,0,0),(20,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),
1680         (3,3,0),(0,0,0),(0,3,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(0,5,10),(0,5,20),(0,5,30),(0,5,40),(3,5,10),(3,5,20),(3,5,30),(3,5,40),(5,5,10),(5,5,20),(5,5,30),(5,5,40),(5,15,10),(5,15,20),(5,15,30),
1681         (5,15,40),(5,20,10),(5,20,20),(5,20,30),(5,20,40),(0,20,10),(0,20,20),(0,20,30),(0,20,40),(15,20,10),(15,20,20),(15,20,30),(15,20,40),(15,15,10),(15,15,20),(15,15,30),(15,15,40),(20,15,10),(20,15,20),
1682         (20,15,30),(20,15,40),(20,20,10),(20,20,20),(20,20,30),(20,20,40),(20,5,10),(20,5,20),(20,5,30),(20,5,40),(15,5,10),(15,5,20),(15,5,30),(15,5,40),(15,0,10),(15,0,20),(15,0,30),(15,0,40),(20,0,10),
1683         (20,0,20),(20,0,30),(20,0,40),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,-1.60551e-25,30),(5,-1.60551e-25,40),(5,3,10),(5,3,20),(5,3,30),(5,3,40),(3,0,10),(3,0,20),(3,0,30),(3,0,40),(3,3,10),(3,3,20),
1684         (3,3,30),(3,3,40),(0,0,10),(0,0,20),(0,0,30),(0,0,40),(0,3,10),(0,3,20),(0,3,30),(0,3,40),(0,9,0),(3,9,0),(20,9,0),(0,9,10),(0,9,20),(0,9,30),(0,9,40),(3,9,10),(3,9,20),(3,9,30),(3,9,40),(5,9,30),
1685         (5,9,40),(20,9,10),(20,9,20),(20,9,30),(20,9,40),(15,9,30),(15,9,40),(0,15,0),(20,15,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(5,15,30),(5,15,40),(15,15,30),(15,15,40),(20,15,10),(20,15,20),(20,15,30),
1686         (20,15,40)])
1687         m3.setCoords(coo)
1688         c = DataArrayInt([31, 5, 4, 124, 6, -1, 41, 45, 126, 37, -1, 5, 41, 37, 4, -1, 4, 37, 126, 124, -1, 124, 126, 45, 6, -1, 6, 45, 41, 5, 31, 41, 37, 126, 45, -1, 42, 46, 127, 38, -1, 41, 42, 38, 37, -1, 37, 38, 127, 126, -1, 126, 127, 46, 45, -1, 45, 46, 42, 41, 31, 42, 38, 127, 46, -1, 43, 47, 128, 130, -1, 42, 43, 130, 38, -1, 38, 130, 128, 127, -1, 127, 128, 47, 46, -1, 46, 47, 43, 42, 31, 43, 130, 128, 47,
1689         -1, 44, 48, 129, 131, -1, 43, 44, 131, 130, -1, 130, 131, 129, 128, -1, 128, 129, 48, 47, -1, 47, 48, 44, 43, 31, 7, 8, 4, 5, -1, 49, 41, 37, 53, -1, 7, 49, 53, 8, -1, 8, 53, 37, 4, -1, 4, 37, 41, 5, -1, 5, 41, 49, 7, 31, 49, 53, 37, 41, -1, 50, 42, 38, 54, -1, 49, 50, 54, 53, -1, 53, 54, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 50, 49, 31, 50, 54, 38, 42, -1, 51, 43, 130, 132, -1, 50, 51, 132, 54, -1, 54, 132,
1690         130, 38, -1, 38, 130, 43, 42, -1, 42, 43, 51, 50, 31, 51, 132, 130, 43, -1, 52, 44, 131, 133, -1, 51, 52, 133, 132, -1, 132, 133, 131, 130, -1, 130, 131, 44, 43, -1, 43, 44, 52, 51, 31, 125, 8, 7, 10, -1, 134, 61, 49, 53, -1, 125, 134, 53, 8, -1, 8, 53, 49, 7, -1, 7, 49, 61, 10, -1, 10, 61, 134, 125, 31, 134, 53, 49, 61, -1, 135, 62, 50, 54, -1, 134, 135, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1,
1691         61, 62, 135, 134, 31, 135, 54, 50, 62, -1, 136, 63, 51, 132, -1, 135, 136, 132, 54, -1, 54, 132, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 136, 135, 31, 136, 132, 51, 63, -1, 137, 64, 52, 133, -1, 136, 137, 133, 132, -1, 132, 133, 52, 51, -1, 51, 52, 64, 63, -1, 63, 64, 137, 136, 31, 107, 12, 8, 9, -1, 118, 57, 53, 69, -1, 107, 118, 69, 12, -1, 12, 69, 53, 8, -1, 8, 53, 57, 9, -1, 9, 57, 118, 107, 31, 118, 69,
1692         53, 57, -1, 119, 58, 54, 70, -1, 118, 119, 70, 69, -1, 69, 70, 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 119, 118, 31, 119, 70, 54, 58, -1, 120, 59, 55, 122, -1, 119, 120, 122, 70, -1, 70, 122, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 120, 119, 31, 120, 122, 55, 59, -1, 121, 60, 56, 123, -1, 120, 121, 123, 122, -1, 122, 123, 56, 55, -1, 55, 56, 60, 59, -1, 59, 60, 121, 120, 31, 13, 12, 11, 14, -1, 73, 77, 65, 69,
1693         -1, 13, 73, 69, 12, -1, 12, 69, 65, 11, -1, 11, 65, 77, 14, -1, 14, 77, 73, 13, 31, 73, 69, 65, 77, -1, 74, 78, 66, 70, -1, 73, 74, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 78, 77, -1, 77, 78, 74, 73, 31, 74, 70, 66, 78, -1, 75, 79, 67, 71, -1, 74, 75, 71, 70, -1, 70, 71, 67, 66, -1, 66, 67, 79, 78, -1, 78, 79, 75, 74, 31, 75, 71, 67, 79, -1, 76, 80, 68, 72, -1, 75, 76, 72, 71, -1, 71, 72, 68, 67, -1, 67, 68, 80,
1694         79, -1, 79, 80, 76, 75, 31, 17, 18, 16, 15, -1, 89, 81, 85, 93, -1, 17, 89, 93, 18, -1, 18, 93, 85, 16, -1, 16, 85, 81, 15, -1, 15, 81, 89, 17, 31, 89, 93, 85, 81, -1, 90, 82, 86, 94, -1, 89, 90, 94, 93, -1, 93, 94, 86, 85, -1, 85, 86, 82, 81, -1, 81, 82, 90, 89, 31, 90, 94, 86, 82, -1, 91, 83, 87, 95, -1, 90, 91, 95, 94, -1, 94, 95, 87, 86, -1, 86, 87, 83, 82, -1, 82, 83, 91, 90, 31, 91, 95, 87, 83, -1, 92, 84,
1695         88, 96, -1, 91, 92, 96, 95, -1, 95, 96, 88, 87, -1, 87, 88, 84, 83, -1, 83, 84, 92, 91, 31, 19, 20, 18, 17, -1, 97, 89, 93, 101, -1, 19, 97, 101, 20, -1, 20, 101, 93, 18, -1, 18, 93, 89, 17, -1, 17, 89, 97, 19, 31, 97, 101, 93, 89, -1, 98, 90, 94, 102, -1, 97, 98, 102, 101, -1, 101, 102, 94, 93, -1, 93, 94, 90, 89, -1, 89, 90, 98, 97, 31, 98, 102, 94, 90, -1, 99, 91, 95, 103, -1, 98, 99, 103, 102, -1, 102, 103,
1696         95, 94, -1, 94, 95, 91, 90, -1, 90, 91, 99, 98, 31, 99, 103, 95, 91, -1, 100, 92, 96, 104, -1, 99, 100, 104, 103, -1, 103, 104, 96, 95, -1, 95, 96, 92, 91, -1, 91, 92, 100, 99, 31, 1, 2, 18, 20, -1, 25, 101, 93, 29, -1, 1, 25, 29, 2, -1, 2, 29, 93, 18, -1, 18, 93, 101, 20, -1, 20, 101, 25, 1, 31, 25, 29, 93, 101, -1, 26, 102, 94, 30, -1, 25, 26, 30, 29, -1, 29, 30, 94, 93, -1, 93, 94, 102, 101, -1, 101, 102,
1697         26, 25, 31, 26, 30, 94, 102, -1, 27, 103, 95, 31, -1, 26, 27, 31, 30, -1, 30, 31, 95, 94, -1, 94, 95, 103, 102, -1, 102, 103, 27, 26, 31, 27, 31, 95, 103, -1, 28, 104, 96, 32, -1, 27, 28, 32, 31, -1, 31, 32, 96, 95, -1, 95, 96, 104, 103, -1, 103, 104, 28, 27, 31, 3, 4, 8, 12, -1, 33, 69, 53, 37, -1, 3, 33, 37, 4, -1, 4, 37, 53, 8, -1, 8, 53, 69, 12, -1, 12, 69, 33, 3, 31, 33, 37, 53, 69, -1, 34, 70, 54, 38, -1,
1698         33, 34, 38, 37, -1, 37, 38, 54, 53, -1, 53, 54, 70, 69, -1, 69, 70, 34, 33, 31, 34, 38, 54, 70, -1, 116, 122, 55, 39, -1, 34, 116, 39, 38, -1, 38, 39, 55, 54, -1, 54, 55, 122, 70, -1, 70, 122, 116, 34, 31, 116, 39, 55, 122, -1, 117, 123, 56, 40, -1, 116, 117, 40, 39, -1, 39, 40, 56, 55, -1, 55, 56, 123, 122, -1, 122, 123, 117, 116, 31, 16, 18, 2, 3, -1, 85, 33, 29, 93, -1, 16, 85, 93, 18, -1, 18, 93, 29, 2,
1699         -1, 2, 29, 33, 3, -1, 3, 33, 85, 16, 31, 85, 93, 29, 33, -1, 86, 34, 30, 94, -1, 85, 86, 94, 93, -1, 93, 94, 30, 29, -1, 29, 30, 34, 33, -1, 33, 34, 86, 85, 31, 86, 94, 30, 34, -1, 87, 35, 31, 95, -1, 86, 87, 95, 94, -1, 94, 95, 31, 30, -1, 30, 31, 35, 34, -1, 34, 35, 87, 86, 31, 87, 95, 31, 35, -1, 88, 36, 32, 96, -1, 87, 88, 96, 95, -1, 95, 96, 32, 31, -1, 31, 32, 36, 35, -1, 35, 36, 88, 87, 31, 4, 3, 106,
1700         105, 0, -1, 37, 21, 108, 112, 33, -1, 3, 4, 37, 33, -1, 106, 3, 33, 112, -1, 105, 106, 112, 108, -1, 0, 105, 108, 21, -1, 4, 0, 21, 37, 31, 37, 33, 112, 108, 21, -1, 38, 22, 109, 113, 34, -1, 33, 37, 38, 34, -1, 112, 33, 34, 113, -1, 108, 112, 113, 109, -1, 21, 108, 109, 22, -1, 37, 21, 22, 38, 31, 38, 34, 113, 109, 22, -1, 39, 23, 110, 114, 116, -1, 34, 38, 39, 116, -1, 113, 34, 116, 114, -1, 109, 113, 114, 110,
1701         -1, 22, 109, 110, 23, -1, 38, 22, 23, 39, 31, 39, 116, 114, 110, 23, -1, 40, 24, 111, 115, 117, -1, 116, 39, 40, 117, -1, 114, 116, 117, 115, -1, 110, 114, 115, 111, -1, 23, 110, 111, 24, -1, 39, 23, 24, 40, 31, 16, 3, 12, 13, 15, -1, 85, 81, 73, 69, 33, -1, 3, 16, 85, 33, -1, 12, 3, 33, 69, -1, 13, 12, 69, 73, -1, 15, 13, 73, 81, -1, 16, 15, 81, 85, 31, 85, 33, 69, 73, 81, -1, 86, 82, 74, 70, 34, -1, 33, 85,
1702         86, 34, -1, 69, 33, 34, 70, -1, 73, 69, 70, 74, -1, 81, 73, 74, 82, -1, 85, 81, 82, 86, 31, 86, 34, 70, 74, 82, -1, 87, 83, 75, 71, 35, -1, 34, 86, 87, 35, -1, 70, 34, 35, 71, -1, 74, 70, 71, 75, -1, 82, 74, 75, 83, -1, 86, 82, 83, 87, 31, 87, 35, 71, 75, 83, -1, 88, 84, 76, 72, 36, -1, 35, 87, 88, 36, -1, 71, 35, 36, 72, -1, 75, 71, 72, 76, -1, 83, 75, 76, 84, -1, 87, 83, 84, 88])
1703         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080, 1110, 1140, 1170, 1200, 1237, 1274, 1311, 1348, 1385, 1422, 1459, 1496])
1704         m3.setConnectivity(c, cI)
1705         m3.checkConsistency()
1706         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1707         grpIds = DataArrayInt([2,7,12,17,101,106,111,116,160,164,170,173,176,179]); grpIds.setName("group")
1708         mfu = MEDFileUMesh()
1709         mfu.setMeshAtLevel(0, m3)
1710         mfu.setMeshAtLevel(-1, m2)
1711         mfu.setGroupsAtLevel(-1, [grpIds])
1712         nNod = m3.getNumberOfNodes()
1713         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1714         m3_bis = mfu.getMeshAtLevel(0)
1715         m3_bis.checkConsistency()
1716         m2_bis = mfu.getMeshAtLevel(-1)
1717         m2_bis.checkConsistency()
1718         self.assertEqual(nNod+23, mfu.getNumberOfNodes())
1719         self.assertEqual(nNod+23, m3_bis.getNumberOfNodes())
1720         self.assertEqual(nNod+23, m2_bis.getNumberOfNodes())
1721         self.assertEqual([5, 15, 16, 35, 36, 39, 40, 41, 42, 43, 44, 81, 82, 83, 84, 85, 86, 87, 88, 116, 117, 130, 131], nodesDup.getValues())
1722         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1723         self.assertEqual(set([0, 1, 2, 3, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39]), set(cells1.getValues()))
1724         self.assertEqual(set([4, 5, 6, 7, 42, 43, 44, 45, 46, 47]), set(cells2.getValues()))
1725         self.assertEqual([2, 7, 12, 17, 101, 106, 111, 116, 160, 164, 170, 173, 176, 179],mfu.getGroupArr(-1,"group").getValues())
1726         self.assertEqual([212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1727         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1728         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1729         pass
1730
1731     def testBuildInnerBoundary9(self):
1732         """ 3D test where the crack is performed so that two non-connex parts are found facing one single connex part on the other side
1733         of the crack. 
1734         """
1735         m3 = MEDCouplingUMesh('box', 3)
1736         coo = DataArrayDouble([(0,4.6,0),(3,4.6,0),(5,4.6,0),(15,4.6,0),(15,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),(3,3.8,0),(0,0,0),(0,3.8,0),(0,4.6,10),(0,4.6,20),(3,4.6,10),(3,4.6,20),(5,4.6,10),(5,4.6,20),(15,4.6,10),(15,4.6,20),(15,0,10),(15,0,20),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,3,10),(5,3,20),(3,0,10),(3,0,20),(3,3.8,10),(3,3.8,20),(0,0,10),(0,0,20),(0,3.8,10),(0,3.8,20),(3,3,0),(0,3,0),(3,3,10),(3,3,20),(0,3,10),(0,3,20)])
1737         m3.setCoords(coo)
1738         c = DataArrayInt([31, 7, 33, 6, 5, -1, 25, 21, 23, 35, -1, 7, 25, 35, 33, -1, 33, 35, 23, 6, -1, 6, 23, 21, 5, -1, 5, 21, 25, 7, 31, 25, 35, 23, 21, -1, 26, 22, 24, 36, -1, 25, 26, 36, 35, -1, 35, 36, 24, 23, -1, 23, 24, 22, 21, -1, 21, 22, 26, 25, 31, 9, 34, 33, 7, -1, 29, 25, 35, 37, -1, 9, 29, 37, 34, -1, 34, 37, 35, 33, -1, 33, 35, 25, 7, -1, 7, 25, 29, 9, 31, 29, 37, 35, 25, -1, 30, 26, 36, 38, -1, 29, 30, 38, 37, -1, 37, 38, 36, 35, -1, 35, 36, 26, 25, -1, 25, 26, 30, 29, 31, 0, 1, 8, 10, -1, 11, 31, 27, 13, -1, 0, 11, 13, 1, -1, 1, 13, 27, 8, -1, 8, 27, 31, 10, -1, 10, 31, 11, 0, 31, 11, 13, 27, 31, -1, 12, 32, 28, 14, -1, 11, 12, 14, 13, -1, 13, 14, 28, 27, -1, 27, 28, 32, 31, -1, 31, 32, 12, 11, 31, 6, 8, 1, 2, -1, 23, 15, 13, 27, -1, 6, 23, 27, 8, -1, 8, 27, 13, 1, -1, 1, 13, 15, 2, -1, 2, 15, 23, 6, 31, 23, 27, 13, 15, -1, 24, 16, 14, 28, -1, 23, 24, 28, 27, -1, 27, 28, 14, 13, -1, 13, 14, 16, 15, -1, 15, 16, 24, 23, 31, 6, 2, 3, 4, 5, -1, 23, 21, 19, 17, 15, -1, 2, 6, 23, 15, -1, 3, 2, 15, 17, -1, 4, 3, 17, 19, -1, 5, 4, 19, 21, -1, 6, 5, 21, 23, 31, 23, 15, 17, 19, 21, -1, 24, 22, 20, 18, 16, -1, 15, 23, 24, 16, -1, 17, 15, 16, 18, -1, 19, 17, 18, 20, -1, 21, 19, 20, 22, -1, 23, 21, 22, 24])
1739         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 277, 314])
1740         m3.setConnectivity(c, cI)
1741         m3.checkConsistency()
1742         m2, _, _,_,_ = m3.buildDescendingConnectivity()
1743         grpIds = DataArrayInt([4,9,35,39]); grpIds.setName("group")
1744         mfu = MEDFileUMesh()
1745         mfu.setMeshAtLevel(0, m3)
1746         mfu.setMeshAtLevel(-1, m2)
1747         mfu.setGroupsAtLevel(-1, [grpIds])
1748         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1749         grpIds = DataArrayInt([4,9,35,39]); grpIds.setName("group")
1750         mfu = MEDFileUMesh()
1751         mfu.setMeshAtLevel(0, m3)
1752         mfu.setMeshAtLevel(-1, m2)
1753         mfu.setGroupsAtLevel(-1, [grpIds])
1754         nNod = m3.getNumberOfNodes()
1755         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1756         m3_bis = mfu.getMeshAtLevel(0)
1757         m3_bis.checkConsistency()
1758         m2_bis = mfu.getMeshAtLevel(-1)
1759         m2_bis.checkConsistency()
1760         self.assertEqual(nNod+9, mfu.getNumberOfNodes())
1761         self.assertEqual(nNod+9, m3_bis.getNumberOfNodes())
1762         self.assertEqual(nNod+9, m2_bis.getNumberOfNodes())
1763         self.assertEqual([2, 5, 6, 15, 16, 21, 22, 23, 24], nodesDup.getValues())
1764         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1765         self.assertEqual(set([0,1,6,7]), set(cells1.getValues()))
1766         self.assertEqual(set([8,9]), set(cells2.getValues()))
1767         self.assertEqual([4,9,35,39],mfu.getGroupArr(-1,"group").getValues())
1768         self.assertEqual([49, 50, 51, 52],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1769         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1770         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1771         pass
1772
1773     @WriteInTmpDir
1774     def testBasicConstructors(self):
1775         GeneratePyfile18(self)
1776         fname="Pyfile18.med"
1777         TestWriteUMeshesRW1(self)
1778         m=MEDFileMesh.New(fname)
1779         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1780         m=MEDFileMesh.New(fname)
1781         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1782         m=MEDFileUMesh(fname)
1783         m=MEDFileUMesh()
1784         self.internalMEDMesh6()
1785         m=MEDFileCMesh("MEDFileMesh5.med")
1786         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1787         m=MEDFileCMesh()
1788         m=MEDFileMeshMultiTS()
1789         m=MEDFileMeshMultiTS(fname)
1790         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1791         m=MEDFileMeshes()
1792         m=MEDFileMeshes(fname)
1793         m=MEDFileField1TS()
1794         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1795         m=MEDFileFieldMultiTS()
1796         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1797         m=MEDFileFields()
1798         m=MEDFileFields(fname)
1799         m=MEDFileData()
1800         m=MEDFileData(fname)
1801         #
1802         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1803         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1804         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1805         m=MEDCouplingCMesh()
1806         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1807         m=MEDCouplingFieldTemplate(ON_NODES)
1808         m=MEDCouplingMultiFields([])
1809         m=MEDCouplingFieldOverTime([])
1810         pass
1811
1812     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1813     @WriteInTmpDir
1814     def testBugSemiPartialField(self):
1815         fname="Pyfile46.med"
1816         m=MEDLoaderDataForTest.build2DMesh_3()
1817         m=m[:10] ; m.setName("mesh")
1818         f=m.getMeasureField(False)
1819         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1820         f.setTime(5.5,3,4)
1821         f.setName("SemiPartialField")
1822         #
1823         f1=f[:6] ; f1.getMesh().setName(m.getName())
1824         f2=f[6:] ; f2.getMesh().setName(m.getName())
1825         #
1826         mm=MEDFileUMesh.New()
1827         mm.setMeshAtLevel(0,m)
1828         ff=MEDFileField1TS.New()
1829         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1830         mm.write(fname,2)
1831         ff.write(fname,0)
1832         #
1833         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1834         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1835         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1836         #
1837         fread.checkConsistencyLight()
1838         fread2.checkConsistencyLight()
1839         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1840         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1841         pass
1842
1843     @WriteInTmpDir
1844     def testUnPolyze1(self):
1845         fname="Pyfile47.med"
1846         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1847         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]
1848         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1849         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]]))
1850         mm.write(fname,2)
1851         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1852         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1853         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1854         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1855         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1856         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1857         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1858         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1859         # to test
1860         mm.setRenumFieldArr(0,None)
1861         mm.setFamilyFieldArr(-1,None)
1862         pass
1863
1864     @WriteInTmpDir
1865     def testUnPolyze2(self):
1866         fname="Pyfile48.med"
1867         mfd=MEDFileData.New()
1868         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1869         meshes=MEDFileMeshes.New()
1870         meshes.pushMesh(mm)
1871         mfd.setMeshes(meshes)
1872         fields=MEDFileFields.New()
1873         mfd.setFields(fields)
1874         ff=MEDFileFieldMultiTS.New()
1875         fields.pushField(ff)
1876         #
1877         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1878         f0_0.setTime(9.5,3,4)
1879         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1880         f0_0.setArray(da)
1881         f0_0.setMesh(mm.getMeshAtLevel(0))
1882         ff.appendFieldNoProfileSBT(f0_0)
1883         ff0=ff.getTimeStepAtPos(0)
1884         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1885         f0_1.setTime(9.5,3,4)
1886         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1887         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1888         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1889         f0_1.setArray(da)
1890         ff0.setFieldProfile(f0_1,mm,0,pfl)
1891         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1892         f0_2.setTime(9.5,3,4)
1893         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1894         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
1895         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1896         f0_2.setArray(da)
1897         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1898         mfd.getFields().shallowCpyGlobs(ff0)
1899         #
1900         mfd.unPolyzeMeshes()
1901         #
1902         fmts=mfd.getFields()[0]
1903         self.assertEqual(fmts.getNumberOfTS(),1)
1904         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1905         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1906         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))])
1907         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1908         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1909         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1910         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1911         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1912         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1913         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1914         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))
1915         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1916         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1917         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1918         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1919         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1920         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])
1921         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1922         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1923         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1924         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])
1925         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1926         #
1927         mfd.write(fname,2)
1928         pass
1929
1930     @WriteInTmpDir
1931     def testGaussWriteOnPfl1(self):
1932         fname="Pyfile49.med"
1933         fname2="Pyfile50.med"
1934         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1935         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1936         mQ8.allocateCells(1)
1937         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1938         mQ8.finishInsertingCells()
1939         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1940         mQ4.allocateCells(1)
1941         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1942         mQ4.finishInsertingCells()
1943         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1944         mT3.allocateCells(1)
1945         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1946         mT3.finishInsertingCells()
1947
1948         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.]]
1949         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1950         ms[:]=(elt.deepCopy() for elt in ms)
1951         for m,t in zip(ms,tr):
1952             d=m.getCoords() ; d+= t
1953             pass
1954         m=MEDCouplingUMesh.MergeUMeshes(ms)
1955         m.setName("mesh")
1956         m2=m[:13] ; m2.setName(m.getName())
1957         ### 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.
1958         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1959         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1960         f.setMesh(m2)
1961         f.setTime(4.5,1,2)
1962         da=DataArrayDouble(34) ; da.iota(3.)
1963         f.setArray(da)
1964         f.setName("fieldCellOnPflWithoutPfl")
1965         fInvalid=f.deepCopy()
1966         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])
1967         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])
1968         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])
1969         f.checkConsistencyLight()
1970         fInvalid2=fInvalid.deepCopy()
1971         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1972         #
1973         mm=MEDFileUMesh()
1974         mm.setMeshAtLevel(0,m)
1975         mm.write(fname,2)
1976         #
1977         f1ts=MEDFileField1TS.New()
1978         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1979         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1980         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1981         f1ts.setFieldProfile(f,mm,0,pfl)
1982         f1ts.write(fname,0)
1983         #
1984         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1985         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1986         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1987         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1988         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1989         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1990         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1991         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1992         #
1993         dataRead=MEDFileData.New(fname)
1994         mRead=dataRead.getMeshes()[0]
1995         f1tsRead=dataRead.getFields()[0][0]
1996         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1997         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1998         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1999         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2000         f2_bis.checkConsistencyLight()
2001         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
2002         #
2003         WriteField(fname2,f,True)
2004         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2005         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
2006         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
2007         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2008         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
2009         m2=m[pfl] ; m2.setName(m.getName())
2010         f.setMesh(m2)
2011         f.setTime(4.5,1,2)
2012         da=DataArrayDouble(35) ; da.iota(3.)
2013         f.setArray(da)
2014         f.setName("fieldCellOnPflWithoutPfl2")
2015         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
2016         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])
2017         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])
2018         f.checkConsistencyLight()
2019         #
2020         mm=MEDFileUMesh()
2021         mm.setMeshAtLevel(0,m)
2022         mm.write(fname,2)
2023         f1ts=MEDFileField1TS.New()
2024         f1ts.setFieldProfile(f,mm,0,pfl)
2025         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
2026         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
2027         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
2028         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
2029         f1ts.write(fname,0)
2030         dataRead=MEDFileData.New(fname)
2031         mRead=dataRead.getMeshes()[0]
2032         f1tsRead=dataRead.getFields()[0][0]
2033         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2034         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2035         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
2036         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2037         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2038         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
2039         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2040         #
2041         WriteField(fname2,f,True)
2042         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2043         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2044         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2045         ## Use case 3 : no pfl but creation of pfls due to gauss pts
2046         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2047         f.setMesh(m)
2048         f.setTime(4.5,1,2)
2049         da=DataArrayDouble(60) ; da.iota(3.)
2050         f.setArray(da)
2051         f.setName("fieldCellWithoutPfl")
2052         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])
2053         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])
2054         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])
2055         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])
2056         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])
2057         f.checkConsistencyLight()
2058         mm=MEDFileUMesh()
2059         mm.setMeshAtLevel(0,m)
2060         f1ts=MEDFileField1TS.New()
2061         f1ts.setFieldNoProfileSBT(f)
2062         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2063         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2064         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2065         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2066         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2067         mm.write(fname,2)
2068         f1ts.write(fname,0)
2069         #
2070         dataRead=MEDFileData.New(fname)
2071         mRead=dataRead.getMeshes()[0]
2072         f1tsRead=dataRead.getFields()[0][0]
2073         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2074         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2075         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2076         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2077         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2078         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2079         #
2080         WriteField(fname2,f,True)
2081         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2082         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2083         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2084         pass
2085
2086     # Testing profile on nodes when the profile is identity but not on all nodes.
2087     @WriteInTmpDir
2088     def testMEDFieldPflOnNode1(self):
2089         fname="Pyfile51.med"
2090         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)
2091         m0=MEDCouplingUMesh("Mesh",2)
2092         m0.allocateCells(5)
2093         m0.insertNextCell(NORM_TRI3,[1,4,2])
2094         m0.insertNextCell(NORM_TRI3,[4,5,2])
2095         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2096         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2097         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2098         m0.finishInsertingCells()
2099         m0.setCoords(coo)
2100         m1=MEDCouplingUMesh(m0.getName(),1)
2101         m1.allocateCells(9)
2102         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2103         for i in range(9):
2104             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2105             pass
2106         m1.finishInsertingCells()
2107         m1.setCoords(coo)
2108         #
2109         m=MEDFileUMesh()
2110         m.setMeshAtLevel(0,m0)
2111         m.setMeshAtLevel(-1,m1)
2112         #
2113         dt=3 ; it=2 ; tim=4.5
2114         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2115         fieldNode0.setName("fieldNode0")
2116         fieldNode0.setTime(tim,dt,it)
2117         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2118         arr=DataArrayDouble([10,11,12,13,14])
2119         fieldNode0.setArray(arr)
2120         f0=MEDFileField1TS()
2121         f0.setFieldProfile(fieldNode0,m,0,pfl0)
2122         m.write(fname,2) ; f0.write(fname,0)
2123         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2124         fieldNode1.setName("fieldNode1")
2125         fieldNode1.setTime(tim,dt,it)
2126         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2127         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2128         fieldNode1.setArray(arr1)
2129         f1=MEDFileField1TS()
2130         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2131         f1.write(fname,0)
2132         del m,f0,m0,m1,f1
2133         ## Reading from file
2134         m=MEDFileMesh.New(fname)
2135         m0=m.getMeshAtLevel(0)
2136         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2137         fieldNode0.setMesh(m00)
2138         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2139         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2140         ff0_1.checkConsistencyLight()
2141         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2142         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2143         ff0_2.checkConsistencyLight()
2144         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2145         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2146         ff0_3.checkConsistencyLight()
2147         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2148         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2149         ff0_4.checkConsistencyLight()
2150         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2151         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2152         m1=m.getMeshAtLevel(-1)
2153         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2154         fieldNode1.setMesh(m10)
2155         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2156         ff1_1.checkConsistencyLight()
2157         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2158         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2159         ff1_2.checkConsistencyLight()
2160         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2161         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2162         ff1_3.checkConsistencyLight()
2163         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2164         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2165         ff1_4.checkConsistencyLight()
2166         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2167         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]
2168         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]
2169         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]
2170         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2171         arr_r.setName(fieldNode1.getArray().getName())
2172         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2173         pfl1_r.setName(pfl1.getName())
2174         self.assertTrue(pfl1_r.isEqual(pfl1))
2175         pass
2176
2177         # Testing profile on nodes when the profile is identity but not on all nodes.
2178     @WriteInTmpDir
2179     def testMEDFieldPflOnCell1(self):
2180         fname="Pyfile52.med"
2181         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)
2182         m0=MEDCouplingUMesh("Mesh",2)
2183         m0.allocateCells(5)
2184         m0.insertNextCell(NORM_TRI3,[1,4,2])
2185         m0.insertNextCell(NORM_TRI3,[4,5,2])
2186         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2187         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2188         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2189         m0.finishInsertingCells()
2190         m0.setCoords(coo)
2191         m1=MEDCouplingUMesh(m0.getName(),1)
2192         m1.allocateCells(9)
2193         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2194         for i in range(9):
2195             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2196             pass
2197         m1.finishInsertingCells()
2198         m1.setCoords(coo)
2199         #
2200         m=MEDFileUMesh()
2201         m.setMeshAtLevel(0,m0)
2202         m.setMeshAtLevel(-1,m1)
2203         #
2204         dt=3 ; it=2 ; tim=4.5
2205         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2206         fieldCell0.setName("fieldCell0")
2207         fieldCell0.setTime(tim,dt,it)
2208         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2209         arr=DataArrayDouble([10,11,12])
2210         fieldCell0.setArray(arr)
2211         f0=MEDFileField1TS()
2212         f0.setFieldProfile(fieldCell0,m,0,pfl0)
2213         m.write(fname,2) ; f0.write(fname,0)
2214         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2215         fieldCell1.setName("fieldCell1")
2216         fieldCell1.setTime(tim,dt,it)
2217         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2218         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2219         fieldCell1.setArray(arr1)
2220         f1=MEDFileField1TS()
2221         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2222         f1.write(fname,0)
2223         del m,f0,m0,m1,f1
2224         ## Reading from file
2225         m=MEDFileMesh.New(fname)
2226         m0=m.getMeshAtLevel(0)
2227         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2228         fieldCell0.setMesh(m00)
2229         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2230         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2231         ff0_1.checkConsistencyLight()
2232         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2233         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2234         ff0_2.checkConsistencyLight()
2235         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2236         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2237         ff0_3.checkConsistencyLight()
2238         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2239         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2240         ff0_4.checkConsistencyLight()
2241         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2242         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2243         m1=m.getMeshAtLevel(-1)
2244         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2245         fieldCell1.setMesh(m10)
2246         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2247         ff1_1.checkConsistencyLight()
2248         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2249         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2250         ff1_2.checkConsistencyLight()
2251         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2252         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2253         ff1_3.checkConsistencyLight()
2254         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2255         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2256         ff1_4.checkConsistencyLight()
2257         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2258         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]
2259         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]
2260         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]
2261         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2262         arr_r.setName(fieldCell1.getArray().getName())
2263         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2264         pfl1_r.setName(pfl1.getName())
2265         self.assertTrue(pfl1_r.isEqual(pfl1))
2266         pass
2267
2268     @WriteInTmpDir
2269     def testMEDFileUMeshZipCoords1(self):
2270         m=MEDFileUMesh()
2271         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2272         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])
2273         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2274         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2275         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2276         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2277         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2278         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2279         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2280         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2281         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2282         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2283         o2n=m.zipCoords()
2284         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2285         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2286         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2287         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2288         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2289         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2290         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2291         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2292         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2293         pass
2294
2295     @WriteInTmpDir
2296     def testMEDUMeshAddNodeGroup1(self):
2297         fname="Pyfile53.med"
2298         m=MEDFileUMesh()
2299         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2300         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])
2301         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2302         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2303         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2304         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2305         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2306         #
2307         mm=m.deepCopy()
2308         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2309         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2310         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2311         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2312         mm.setFamilyId("MyFam",2)
2313         mm.setFamilyId("MyOtherFam",3)
2314         mm.setFamilyId("MyOther-1",-1)
2315         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2316         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2317         #
2318         self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2319         #
2320         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2321         mm.addNodeGroup(daTest)
2322         self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2323         self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2324         #
2325         expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2326         self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2327         #
2328         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2329         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2330         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2331             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2332             pass
2333         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2334         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2335         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2336         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2337         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2338             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2339             pass
2340         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2341         da=DataArrayInt([3,12]) ; da.setName("grp0")
2342         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2343         da.setValues([1])
2344         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2345         mm.write(fname,2)
2346         mm=MEDFileMesh.New(fname)
2347         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2348         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2349         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2350             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2351             pass
2352         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2353         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2354         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2355         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2356         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2357             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2358             pass
2359         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2360         da=DataArrayInt([3,12]) ; da.setName("grp0")
2361         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2362         da.setValues([1])
2363         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2364         pass
2365
2366     @WriteInTmpDir
2367     def testMEDUMeshAddGroup1(self):
2368         fname="Pyfile54.med"
2369         m=MEDFileUMesh()
2370         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2371         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2372         for i in range(7):
2373             m0.insertNextCell(NORM_TRI3,[1,2,1])
2374             pass
2375         for i in range(4):
2376             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2377             pass
2378         for i in range(2):
2379             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2380             pass
2381         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2382         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2383         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2384         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2385         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2386         #
2387         mm=m.deepCopy()
2388         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2389         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2390         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2391         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2392         mm.setFamilyId("MyFam",2)
2393         mm.setFamilyId("MyOtherFam",3)
2394         mm.setFamilyId("MyOther-1",-1)
2395         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2396         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2397         #
2398         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2399         mm.addGroup(0,daTest)
2400         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2401         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2402         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2403             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2404             pass
2405         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2406         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2407         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2408         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2409         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2410             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2411             pass
2412         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2413         da=DataArrayInt([3,12]) ; da.setName("grp0")
2414         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2415         da.setValues([1])
2416         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2417         mm.write(fname,2)
2418         mm=MEDFileMesh.New(fname)
2419         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2420         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2421         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2422             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2423             pass
2424         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2425         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2426         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2427         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2428         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2429             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2430             pass
2431         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2432         da=DataArrayInt([3,12]) ; da.setName("grp0")
2433         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2434         da.setValues([1])
2435         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2436         pass
2437
2438     @WriteInTmpDir
2439     def testHeapMem1(self):
2440         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2441         a.alloc(0,1)
2442         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2443         #
2444         m=MEDCouplingCMesh()
2445         arr=DataArrayDouble(10,1) ; arr.iota(0)
2446         m.setCoords(arr,arr)
2447         m=m.buildUnstructured()
2448         m.setName("mm")
2449         f=m.getMeasureField(False)
2450         cooMem = 100 * 2 * 8
2451         nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2452         indexMem = 82 * MEDCouplingSizeOfIDs()//8
2453         meshMem = cooMem + nodalMem + indexMem
2454         self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2455         delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2456         self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2457         #
2458         mm=MEDFileUMesh()
2459         mm.setMeshAtLevel(0,m)
2460         self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2461         ff=MEDFileField1TS()
2462         ff.setFieldNoProfileSBT(f)
2463         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2464         #
2465         fff=MEDFileFieldMultiTS()
2466         fff.appendFieldNoProfileSBT(f)
2467         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2468         f.setTime(1.,0,-1)
2469         fff.appendFieldNoProfileSBT(f)
2470         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2471         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2472         f2=f[:50]
2473         f2.setTime(2.,1,-1)
2474         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2475         fff.appendFieldProfile(f2,mm,0,pfl)
2476         self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2477         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2478         self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8))  + 30 + 4 * strMulFac))
2479         pass
2480
2481     def internalCurveLinearMesh1(self):
2482         fname="Pyfile55.med"
2483         mesh=MEDCouplingCurveLinearMesh();
2484         mesh.setTime(2.3,4,5);
2485         mesh.setTimeUnit("us");
2486         mesh.setName("Example of Cuve linear mesh");
2487         mesh.setDescription("buildCLMesh");
2488         a1=DataArrayDouble(3*20,1);
2489         a1.iota(7.) ; a1.rearrange(3);
2490         mesh.setCoords(a1);
2491         mesh.setNodeGridStructure([4,5]);
2492         mesh.checkConsistencyLight();
2493         #
2494         m=MEDFileCurveLinearMesh()
2495         m.setMesh(mesh)
2496         d=DataArrayInt(20) ; d.iota(4)
2497         m.setFamilyFieldArr(1,d)
2498         d3=DataArrayInt(20) ; d3.iota(400)
2499         m.setRenumFieldArr(1,d3)
2500         d2=DataArrayInt(12) ; d2.iota(40)
2501         m.setFamilyFieldArr(0,d2)
2502         d4=DataArrayInt(21) ; d4.iota(4000)
2503         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2504         d4.popBackSilent()
2505         m.setRenumFieldArr(1,d4)
2506         m.write(fname,2)
2507         #
2508         m1=MEDFileCurveLinearMesh(fname)
2509         mm=m1.getMesh()
2510         self.assertTrue(mm.isEqual(mesh,1e-12))
2511         self.assertEqual(mm.getSpaceDimension(),3)
2512         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2513         #
2514         m1=MEDFileMesh.New(fname)
2515         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2516         self.assertTrue(isinstance(m1.getUnivName(),str))
2517         self.assertTrue(len(m1.getUnivName())!=0)
2518         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2519         pass
2520
2521     @WriteInTmpDir
2522     def testCurveLinearMesh1(self):
2523         self.internalCurveLinearMesh1()
2524
2525     @WriteInTmpDir
2526     def testParameters1(self):
2527         self.internalParameters1()
2528
2529     def internalParameters1(self):
2530         fname="Pyfile56.med"
2531         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2532         mm=MEDFileCMesh() ; mm.setMesh(m)
2533         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2534         data=MEDFileData()
2535         p=MEDFileParameters()
2536         data.setParams(p) ; data.setMeshes(ms)
2537         pts=MEDFileParameterMultiTS()
2538         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2539         pts.appendValue(1,2,3.4,567.89)
2540         pts.appendValue(2,3,5.6,999.123)
2541         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2542         p.pushParam(pts) ; p.pushParam(pts2)
2543         data.write(fname,2)
2544         p2=MEDFileParameters(fname)
2545         self.assertTrue(p.isEqual(p2,1e-14)[0])
2546         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2547         p3=p.deepCopy()
2548         pts4=pts2.deepCopy()
2549         pts3=pts2.deepCopy()
2550         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2551         pts2.eraseTimeStepIds([0])
2552         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2553         del pts3[[3.4]]
2554         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2555         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2556         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2557         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2558         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2559         p=p3
2560         self.assertTrue(p.isEqual(p2,1e-14)[0])
2561         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2562         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2563         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2564         self.assertEqual(p.getParamsNames(),('A','B'))
2565         ptsr=MEDFileParameterMultiTS(fname,"B")
2566         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2567         ptsr=MEDFileParameterMultiTS(fname)
2568         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2569         p1tsr=MEDFileParameterDouble1TS(fname)
2570         self.assertEqual(p1tsr.getName(),"A")
2571         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2572         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2573         self.assertEqual(p1tsr.getName(),"B")
2574         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2575         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2576         self.assertEqual(p1tsr.getName(),"B")
2577         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2578         data2=MEDFileData(fname)
2579         self.assertEqual(2,data2.getNumberOfParams())
2580         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2581         pass
2582
2583     @WriteInTmpDir
2584     def testNamesOnCellAndNodesInMeshes1(self):
2585         fname="Pyfile58.med"
2586         fname2="Pyfile59.med"
2587         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2588         m1=m.buildDescendingConnectivity()[0]
2589         m1.sortCellsInMEDFileFrmt()
2590         #
2591         mm=MEDFileUMesh()
2592         mm.setMeshAtLevel(0,m)
2593         mm.setMeshAtLevel(-1,m1)
2594         namesCellL0=DataArrayAsciiChar(6,16)
2595         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2596         mm.setNameFieldAtLevel(0,namesCellL0)
2597         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2598         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2599         mm.setNameFieldAtLevel(-1,namesCellL1)
2600         namesNodes=namesCellL1.subArray(4,16)
2601         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2602         mm.setNameFieldAtLevel(1,namesNodes)
2603         mm.write(fname,2)
2604         #
2605         mmr=MEDFileMesh.New(fname)
2606         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2607         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2608         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2609         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2610         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2611         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2612         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2613         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2614         mmCpy=mm.deepCopy()
2615         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2616         # remove names on nodes
2617         mmCpy.setNameFieldAtLevel(1,None)
2618         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2619         mm.setNameFieldAtLevel(1,None)
2620         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2621         mm.setNameFieldAtLevel(-1,None)
2622         mm.write(fname,2)
2623         mmr=MEDFileMesh.New(fname)
2624         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2625         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2626         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2627         #
2628         c=MEDCouplingCMesh()
2629         arr=DataArrayDouble([0.,1.1,2.3])
2630         c.setCoords(arr,arr)
2631         c.setName("cmesh")
2632         cc=MEDFileCMesh()
2633         cc.setMesh(c)
2634         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2635         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2636         cc.write(fname2,2)
2637         ccr=MEDFileMesh.New(fname2)
2638         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2639         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2640         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2641         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2642         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2643         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2644         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2645         ccCpy=cc.deepCopy()
2646         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2647         pass
2648
2649     @WriteInTmpDir
2650     def testToExportInExamples1(self):
2651         m=MEDCouplingCMesh()
2652         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2653         m.setCoords(arr,arr)
2654         m=m.buildUnstructured() ; m.setName("mesh")
2655         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2656         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2657         m2=m.computeSkin()
2658         mm=MEDFileUMesh()
2659         mm.setMeshAtLevel(0,m)
2660         mm.setMeshAtLevel(-1,m2)
2661         mm.setGroupsAtLevel(0,[grp1,grp2])
2662         mm.write("example.med",2)
2663         #
2664         m0=mm.getMeshAtLevel(0)
2665         m1=mm.getMeshAtLevel(-1)
2666         grp1=mm.getGroupArr(0,"grp1")
2667         grp2=mm.getGroupArr(0,"grp2")
2668         grps=[grp1,grp2]
2669         whichGrp=DataArrayInt(m0.getNumberOfCells())
2670         whichGrp.fillWithValue(-1)
2671         for grpId,grp in enumerate(grps):
2672             whichGrp[grp]=grpId
2673             pass
2674         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2675         e,f=a.areCellsIncludedIn(m1,2)
2676         self.assertTrue(e)
2677         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2678         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2679         c2.transformWithIndArr(whichGrp)
2680         splitOfM1=len(grps)*[None]
2681         for grpId,grp in enumerate(grps):
2682             tmp=c2.findIdsEqual(grpId)
2683             splitOfM1[grpId]=tmp
2684             pass
2685         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2686         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2687         pass
2688
2689     @WriteInTmpDir
2690     def testBugCorrection1(self):
2691         fs=MEDFileFields()
2692         fs.resize(3)
2693         self.assertEqual(fs[0],None)
2694         self.assertEqual(3,len(fs))
2695         pass
2696
2697     @WriteInTmpDir
2698     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2699         f1Name="Pyfile60.med"
2700         f2Name="Pyfile61.med"
2701         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2702         d1.write(f1Name,2)
2703         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2704         d2.write(f2Name,2)
2705         # reading and compare
2706         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2707         for mn in d1.getMeshes().getMeshesNames():
2708             m1=d1.getMeshes()[mn]
2709             m2=d2.getMeshes()[mn]
2710             for lev in m1.getNonEmptyLevels():
2711                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2712                 for grpName in grpsNames:
2713                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2714                     pass
2715                 pass
2716             pass
2717         for fieldn in d1.getFields().getFieldsNames():
2718             f1=d1.getFields()[fieldn]
2719             f2=d2.getFields()[fieldn]
2720             for it,order,tim in f1.getTimeSteps():
2721                 f1t=f1[it,order]
2722                 f2t=f2[it,order]
2723                 if len(f1t.getPflsReallyUsed())!=0:
2724                     # profile case
2725                     for lev in f1t.getNonEmptyLevels()[1]:
2726                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2727                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2728                         self.assertTrue(pfl1.isEqual(pfl2))
2729                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2730                         pass
2731                     pass
2732                 else:
2733                     # no profile case
2734                     for lev in f1t.getNonEmptyLevels()[1]:
2735                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2736                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2737                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2738                         pass
2739                     pass
2740                 pass
2741             pass
2742         pass
2743
2744     @WriteInTmpDir
2745     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2746         m=MEDCouplingCMesh()
2747         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2748         m.setCoords(arr,arr,arr)
2749         m=m.buildUnstructured()
2750         m2=m.buildDescendingConnectivity()[0]
2751         m.setName("mesh")
2752         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2753         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2754         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2755         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2756         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2757         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2758         mm=MEDFileUMesh()
2759         mm.setMeshAtLevel(0,m)
2760         mm.setGroupsAtLevel(0,[g1,g2])
2761         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2762         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2763         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2764         mm.normalizeFamIdsMEDFile()
2765         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2766         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2767         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2768         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2769         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2770         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2771         for g in mm.getGroupsOnSpecifiedLev(0):
2772             for f in mm.getFamiliesIdsOnGroup(g):
2773                 self.assertTrue(f<0)
2774                 pass
2775             pass
2776         #
2777         mm=MEDFileUMesh()
2778         mm.setMeshAtLevel(0,m)
2779         mm.setMeshAtLevel(-1,m2)
2780         mm.setGroupsAtLevel(0,[g1,g2])
2781         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2782         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2783         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2784         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2785         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2786         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2787         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2788         mm.normalizeFamIdsMEDFile()
2789         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2790         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2791         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2792         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2793         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2794         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2795         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2796         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2797         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2798         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2799         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2800         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2801         for lev in [0,-1]:
2802             for g in mm.getGroupsOnSpecifiedLev(lev):
2803                 for f in mm.getFamiliesIdsOnGroup(g):
2804                     self.assertTrue(f<0)
2805                     pass
2806                 pass
2807             pass
2808          #
2809         mm=MEDFileUMesh()
2810         mm.setMeshAtLevel(0,m)
2811         mm.setMeshAtLevel(-1,m2)
2812         mm.setGroupsAtLevel(0,[g1,g2])
2813         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2814         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2815         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2816         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2817         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2818         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2819         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2820         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2821         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2822         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2823         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2824         mm.normalizeFamIdsMEDFile()
2825         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2826         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2827         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2828         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2829         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2830         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2831         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2832         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2833         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2834         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2835         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2836         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2837         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2838         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2839         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2840         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2841         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2842         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2843         for lev in [0,-1]:
2844             for g in mm.getGroupsOnSpecifiedLev(lev):
2845                 for f in mm.getFamiliesIdsOnGroup(g):
2846                     self.assertTrue(f<0)
2847                     pass
2848                 pass
2849             pass
2850         for g in mm.getGroupsOnSpecifiedLev(1):
2851             for f in mm.getFamiliesIdsOnGroup(g):
2852                 self.assertTrue(f>0)
2853                 pass
2854             pass
2855         pass
2856
2857     @WriteInTmpDir
2858     def testNonRegressionMantis22212ChangeGrpName(self):
2859         fileName="Pyfile62.med"
2860         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2861         m=MEDFileUMesh.New()
2862         m.setCoords(m2.getCoords())
2863         m.setMeshAtLevel(0,m2)
2864         m.setMeshAtLevel(-1,m1)
2865         m.setMeshAtLevel(-2,m0)
2866         m.setFamilyFieldArr(0,f2)
2867         m.setFamilyFieldArr(-1,f1)
2868         m.setFamilyFieldArr(-2,f0)
2869         m.setFamilyFieldArr(1,p)
2870         nbOfFams=len(fns)
2871         for i in range(nbOfFams):
2872             m.addFamily(fns[i],fids[i])
2873             pass
2874         nbOfGrps=len(grpns)
2875         for i in range(nbOfGrps):
2876             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2877             pass
2878         m.setName(m2.getName())
2879         m.setDescription(m2.getDescription())
2880         m.write(fileName,2)
2881         #
2882         mm0=MEDFileMesh.New(fileName)
2883         mm1=MEDFileMesh.New(fileName)
2884         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2885         for name in groupNamesIni:
2886             mm1.changeGroupName(name,name+'N')
2887             pass
2888         mm1.write(fileName,2)
2889         del mm1
2890         #
2891         mm2=MEDFileMesh.New(fileName)
2892         for name in groupNamesIni:
2893             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2894                 arr0=mm0.getGroupArr(lev,name)
2895                 arr2=mm2.getGroupArr(lev,name+'N')
2896                 arr0.setName(name+'N')
2897                 self.assertTrue(arr0.isEqual(arr2))
2898                 pass
2899             pass
2900         pass
2901
2902     @WriteInTmpDir
2903     def testInt32InMEDFileFieldStar1(self):
2904         self.internalInt32InMEDFileFieldStar1()
2905
2906     def internalInt32InMEDFileFieldStar1(self):
2907         fname="Pyfile63.med"
2908         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2909         f1=f1.convertToIntField()
2910         m1=f1.getMesh()
2911         mm1=MEDFileUMesh.New()
2912         mm1.setCoords(m1.getCoords())
2913         mm1.setMeshAtLevel(0,m1)
2914         mm1.setName(m1.getName())
2915         mm1.write(fname,2)
2916         ff1=MEDFileIntField1TS()
2917         ff1.setFieldNoProfileSBT(f1)
2918         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2919         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2920         self.assertTrue(a.isEqual(f1,1e-12,0))
2921         ff1.write(fname,0)
2922         a,b=ff1.getUndergroundDataArrayExt()
2923         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2924         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2925         ff2=MEDFileAnyTypeField1TS.New(fname)
2926         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2927         self.assertEqual(ff2.getTime(),[0,1,2.0])
2928         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2929         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2930         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2931         self.assertTrue(a.isEqual(f1,1e-12,0))
2932         ff2.setTime(1,2,3.)
2933         c=ff2.getUndergroundDataArray() ; c*=2
2934         ff2.write(fname,0) # 2 time steps in
2935         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2936         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2937         self.assertEqual(len(ffs1),2)
2938         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2939         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2940         self.assertTrue(a.isEqual(f1,1e-12,0))
2941         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2942         self.assertTrue(a.isEqual(f1,1e-12,0))
2943         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2944         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2945         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2946         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2947         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2948         bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2949         for it in ffs1:
2950             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2951             bc+=a.getArray()
2952             pass
2953         self.assertTrue(bc.isEqual(3*f1.getArray()))
2954         nf1=MEDCouplingFieldInt(ON_NODES)
2955         nf1.setTime(9.,10,-1)
2956         nf1.setMesh(f1.getMesh())
2957         narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2958         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2959         nff1=MEDFileIntField1TS.New()
2960         nff1.setFieldNoProfileSBT(nf1)
2961         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2962         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2963         nff1.write(fname,0)
2964         #
2965         nf2=MEDCouplingFieldInt(ON_NODES)
2966         nf2.setTime(19.,20,-11)
2967         nf2.setMesh(f1.getMesh())
2968         narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2969         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2970         nff2=MEDFileIntField1TS.New()
2971         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2972         nff2.setFieldProfile(nf2,mm1,0,npfl)
2973         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2974         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2975         self.assertTrue(b.isEqual(npfl))
2976         self.assertTrue(a.isEqual(narr2))
2977         nff2.write(fname,0)
2978         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2979         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2980         self.assertTrue(b.isEqual(npfl))
2981         self.assertTrue(a.isEqual(narr2))
2982         #
2983         nf3=MEDCouplingFieldDouble(ON_NODES)
2984         nf3.setName("VectorFieldOnNodesDouble")
2985         nf3.setTime(29.,30,-21)
2986         nf3.setMesh(f1.getMesh())
2987         nf3.setArray(f1.getMesh().getCoords())
2988         nff3=MEDFileField1TS.New()
2989         nff3.setFieldNoProfileSBT(nf3)
2990         nff3.write(fname,0)
2991         fs=MEDFileFields(fname)
2992         self.assertEqual(len(fs),4)
2993         ffs=[it for it in fs]
2994         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2995         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2996         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2997         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2998         #
2999         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
3000         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
3001         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
3002         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
3003         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
3004         #
3005         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
3006         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
3007         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
3008         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
3009         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
3010         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
3011         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
3012         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
3013         #
3014         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
3015         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
3016         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
3017         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
3018         pass
3019
3020     @WriteInTmpDir
3021     def testMEDFileFields1(self):
3022         fname="Pyfile64.med"
3023         f1=MEDCouplingFieldDouble(ON_NODES)
3024         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
3025         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
3026         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
3027         f1.setMesh(m)
3028         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
3029         f1.setArray(arr)
3030         f1.setName("Field1")
3031         ff1=MEDFileField1TS.New()
3032         ff1.setFieldNoProfileSBT(f1)
3033         self.assertEqual(ff1.getDtUnit(),"us")
3034         ff1.write(fname,0)
3035         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3036         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3037         #
3038         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3039         ff1s=MEDFileFieldMultiTS(fname,"Field1")
3040         ff1s.setName("Field2")
3041         ff1s.write(fname,0)
3042         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3043         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3044         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3045         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3046         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3047         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3048         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3049         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3050         pass
3051
3052     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3053     @WriteInTmpDir
3054     def testMEDFileFields2(self):
3055         fname="Pyfile65.med"
3056         # to check that all is initialize
3057         MEDFileField1TS().__str__()
3058         MEDFileFieldMultiTS().__str__()
3059         # building a mesh containing 4 tri3 + 5 quad4
3060         tri=MEDCouplingUMesh("tri",2)
3061         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3062         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3063         tris = [tri.deepCopy() for i in range(4)]
3064         for i,elt in enumerate(tris): elt.translate([i,0])
3065         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3066         quad=MEDCouplingUMesh("quad",2)
3067         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3068         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3069         quads = [quad.deepCopy() for i in range(5)]
3070         for i,elt in enumerate(quads): elt.translate([5+i,0])
3071         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3072         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3073         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3074         #
3075         fmts0_0=MEDFileFieldMultiTS()
3076         fmts0_1=MEDFileFieldMultiTS()
3077         # time steps
3078         for i in range(10):
3079             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3080             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3081             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3082             f.setTime(float(i+1)+0.1,i+1,-i-1)
3083             fmts0_0.appendFieldNoProfileSBT(f)
3084             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3085             self.assertEqual(fmts0_1.getName(),name1)
3086             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3087             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3088             if i>1:
3089                 # components names have been modified to generate errors
3090                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3091                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3092                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3093                 f1ts.setInfo(['aa [bb]','eee [dd]'])
3094                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3095                 pass
3096             # add a mismatch of nb of compos
3097             pass
3098         fmts0_2=fmts0_0.deepCopy()
3099         fmts0_3=fmts0_0.deepCopy()
3100         fmts0_4=fmts0_0.deepCopy()
3101         fmts0_5=fmts0_0.shallowCpy()
3102         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)
3103         del fmts0_2[::2]
3104         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3105         del fmts0_3[[1.1,(6,-6),9]]
3106         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3107         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3108         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3109         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3110         fmts0_7=fmts0_4[::-3]
3111         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3112         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3113         #
3114         fs0=MEDFileFields()
3115         fs0.pushField(fmts0_0)
3116         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3117         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3118         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3119         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3120         fs0.write(fname,2)
3121         fs0=MEDFileFields(fname)
3122         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3123         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3124         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3125         del fs1[["2ndField",3]]
3126         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3127         fs2=fs0[[0,"4thField"]]
3128         self.assertTrue(isinstance(fs2,MEDFileFields))
3129         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3130         #
3131         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3132         pass
3133
3134     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3135     @WriteInTmpDir
3136     def testMEDFileFields3(self):
3137         fname="Pyfile66.med"
3138         # building a mesh containing 4 tri3 + 5 quad4
3139         tri=MEDCouplingUMesh("tri",2)
3140         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3141         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3142         tris = [tri.deepCopy() for i in range(4)]
3143         for i,elt in enumerate(tris): elt.translate([i,0])
3144         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3145         quad=MEDCouplingUMesh("quad",2)
3146         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3147         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3148         quads = [quad.deepCopy() for i in range(5)]
3149         for i,elt in enumerate(quads): elt.translate([5+i,0])
3150         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3151         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3152         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3153         #
3154         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3155         #
3156         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3157         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3158         fmts0_0=MEDFileFieldMultiTS()
3159         fmts0_1=MEDFileFieldMultiTS()
3160         # time steps
3161         for i in range(10):
3162             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3163             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3164             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3165             f.setTime(float(i+1)+0.1,i+1,-i-1)
3166             fmts0_0.appendFieldProfile(f,mm,0,pfl)
3167             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3168             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3169             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3170             pass
3171         #
3172         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3173         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3174         fmts0_0.zipPflsNames()
3175         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3176         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3177         fmts0_2=fmts0_0.deepCopy()
3178         fmts0_3=fmts0_0.deepCopy()
3179         fmts0_4=fmts0_0.deepCopy()
3180         fs0=MEDFileFields()
3181         fs0.pushField(fmts0_0)
3182         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3183         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3184         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3185         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3186         #
3187         fmts0_5=MEDFileFieldMultiTS()
3188         for i in range(7):
3189             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3190             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3191             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3192             f.setTime(float(i+1)+0.1,i+1,-i-1)
3193             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3194             pass
3195         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3196         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3197         fs0.checkGlobsCoherency()
3198         fs0.write(fname,0)
3199         pass
3200
3201     @WriteInTmpDir
3202     def testSplitComponents1(self):
3203         fname="Pyfile67.med"
3204         # building a mesh containing 4 tri3 + 5 quad4
3205         tri=MEDCouplingUMesh("tri",2)
3206         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3207         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3208         tris = [tri.deepCopy() for i in range(4)]
3209         for i,elt in enumerate(tris): elt.translate([i,0])
3210         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3211         quad=MEDCouplingUMesh("quad",2)
3212         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3213         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3214         quads = [quad.deepCopy() for i in range(5)]
3215         for i,elt in enumerate(quads): elt.translate([5+i,0])
3216         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3217         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3218         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3219         #
3220         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3221         #
3222         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3223         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3224         fs=MEDFileFields()
3225         fmts0_1=MEDFileFieldMultiTS()
3226         # time steps
3227         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3228         for i in range(10):
3229             name1="1stField"
3230             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3231             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3232             f.setTime(float(i+1)+0.1,i+1,-i-1)
3233             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3234             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3235             pass
3236         fs.pushField(fmts0_1)
3237         self.assertEqual(1,len(fs))
3238         l=fmts0_1.splitComponents()
3239         self.assertEqual(3,len(l))
3240         for elt in l: self.assertEqual(10,len(elt))
3241         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3242         for elt in l:
3243             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3244             pass
3245         fs.pushFields(l)
3246         self.assertEqual(4,len(fs))
3247         for elt in fs: self.assertEqual(10,len(elt))
3248         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3249         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3250         #
3251         fs.write(fname,0) ; del fs
3252         #
3253         fs1=MEDFileFields(fname)
3254         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3255         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3256         self.assertEqual(4,len(fs1))
3257         for i in range(10):
3258             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3259                 f1ts=fs1[fieldName][i]
3260                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3261                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3262                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3263                 pass
3264             f1ts=fs1["1stField"][i]
3265             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3266             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3267             self.assertTrue(d.isEqual(f.getArray(),1e-13))
3268             pass
3269         pass
3270
3271     @WriteInTmpDir
3272     def testMEDFileFieldConvertTo1(self):
3273         fname="Pyfile68.med"
3274         # building a mesh containing 4 tri3 + 5 quad4
3275         tri=MEDCouplingUMesh("tri",2)
3276         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3277         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3278         tris = [tri.deepCopy() for i in range(4)]
3279         for i,elt in enumerate(tris): elt.translate([i,0])
3280         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3281         quad=MEDCouplingUMesh("quad",2)
3282         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3283         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3284         quads = [quad.deepCopy() for i in range(5)]
3285         for i,elt in enumerate(quads): elt.translate([5+i,0])
3286         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3287         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3288         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3289         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3290         #
3291         ff0=MEDFileField1TS()
3292         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")
3293         f0.checkConsistencyLight()
3294         ff0.setFieldNoProfileSBT(f0)
3295         #
3296         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3297         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3298         #
3299         ff0i=ff0.convertToInt()
3300         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3301         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3302         #
3303         ff1=ff0i.convertToDouble()
3304         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3305         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3306         # For int64
3307         ff0i64=ff0.convertToInt64()
3308         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3309         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3310         #
3311         ff2=ff0i64.convertToDouble()
3312         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3313         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3314         # With profiles
3315         del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3316         ff0=MEDFileField1TS()
3317         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")
3318         f0.checkConsistencyLight()
3319         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3320         ff0.setFieldProfile(f0,mm,0,pfl)
3321         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3322         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3323         #
3324         ff0i=ff0.convertToInt()
3325         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3326         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3327         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3328         #
3329         ff1=ff0i.convertToDouble()
3330         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3331         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3332         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3333         # For Int64
3334         ff0i64=ff0.convertToInt64()
3335         self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3336         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3337         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3338         #
3339         ff2=ff0i64.convertToDouble()
3340         self.assertTrue(isinstance(ff2,MEDFileField1TS))
3341         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3342         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3343         ## MultiTimeSteps
3344         ff0=MEDFileFieldMultiTS()
3345         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)
3346         f0.checkConsistencyLight()
3347         ff0.appendFieldProfile(f0,mm,0,pfl)
3348         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)
3349         f0.checkConsistencyLight()
3350         ff0.appendFieldProfile(f0,mm,0,pfl)
3351         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)
3352         f0.checkConsistencyLight()
3353         ff0.appendFieldProfile(f0,mm,0,pfl)
3354         ff1=ff0.convertToInt()
3355         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3356         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3357         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3358             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3359             arr=ff1.getUndergroundDataArray(dt,it)
3360             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3361             pass
3362         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3363         #
3364         mm.write(fname,2)
3365         ff1.write(fname,0)
3366         #
3367         ff1=ff1.convertToDouble()
3368         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3369         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3370         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3371             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3372             arr=ff1.getUndergroundDataArray(dt,it)
3373             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3374             pass
3375         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3376         #
3377         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3378         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3379         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3380         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3381             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3382             arr=ff1.getUndergroundDataArray(dt,it)
3383             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3384             pass
3385         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3386         pass
3387
3388     @WriteInTmpDir
3389     def testMEDFileFieldPartialLoading(self):
3390         fname="Pyfile69.med"
3391         #
3392         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3393         a.alloc(0,1)
3394         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3395         # building a mesh containing 30 tri3 + 40 quad4
3396         tri=MEDCouplingUMesh("tri",2)
3397         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3398         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3399         tris = [tri.deepCopy() for i in range(30)]
3400         for i,elt in enumerate(tris): elt.translate([i,0])
3401         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3402         quad=MEDCouplingUMesh("quad",2)
3403         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3404         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3405         quads = [quad.deepCopy() for i in range(40)]
3406         for i,elt in enumerate(quads): elt.translate([40+i,0])
3407         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3408         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3409         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3410         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3411         #
3412         ff0=MEDFileField1TS()
3413         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")
3414         f0.checkConsistencyLight()
3415         ff0.setFieldNoProfileSBT(f0)
3416         ff0.write(fname,0)
3417         #
3418         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3419         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3420         # With profiles
3421         ff0=MEDFileField1TS()
3422         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")
3423         f0.checkConsistencyLight()
3424         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3425         ff0.setFieldProfile(f0,mm,0,pfl)
3426         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3427         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3428         ff0.write(fname,0)
3429         #
3430         ff0=MEDFileField1TS(fname,False)
3431         self.assertEqual(ff0.getName(),"FieldCell")
3432         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3433         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3434         heap_memory_ref=ff0.getHeapMemorySize()
3435         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3436         ff0.loadArrays() ##
3437         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3438         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3439         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3440         #
3441         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3442         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3443         heap_memory_ref=ff0.getHeapMemorySize()
3444         self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3445         ff0.loadArrays() ##
3446         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3447         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3448         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3449         ff0.loadArrays() ##
3450         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3451         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3452         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3453         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3454         ff0.loadArrays() ##
3455         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3456         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3457         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3458         ff0.loadArraysIfNecessary() ##
3459         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3460         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3461         heap_memory_ref=ff0.getHeapMemorySize()
3462         self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3463         ff0.unloadArrays()
3464         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3465         self.assertEqual(hmd,-800) # -50*8*2
3466         ff0.loadArrays() ##
3467         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3468         #
3469         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3470         heap_memory_ref=ff0.getHeapMemorySize()
3471         self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3472         ff0.loadArrays() ##
3473         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3474         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3475         #
3476         fieldName="FieldCellMultiTS"
3477         ff0=MEDFileFieldMultiTS()
3478         for t in range(20):
3479             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)
3480             f0.setTime(float(t)+0.1,t,100+t)
3481             f0.checkConsistencyLight()
3482             ff0.appendFieldNoProfileSBT(f0)
3483             pass
3484         ff0.write(fname,0)
3485         #
3486         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3487         heap_memory_ref=ff0.getHeapMemorySize()
3488         self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3489         ff0.loadArrays()
3490         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3491         del ff0
3492         #
3493         ffs=MEDFileFields(fname,False)
3494         heap_memory_ref=ffs.getHeapMemorySize()
3495         self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3496         ffs.loadArrays()
3497         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3498         pass
3499
3500     @WriteInTmpDir
3501     def testMEDFileMeshReadSelector1(self):
3502         mrs=MEDFileMeshReadSelector()
3503         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3504         mrs.__str__() ; mrs.__repr__()
3505         #
3506         mrs=MEDFileMeshReadSelector(0)
3507         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())
3508         mrs=MEDFileMeshReadSelector(1)
3509         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3510         mrs=MEDFileMeshReadSelector(2)
3511         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3512         mrs=MEDFileMeshReadSelector(3)
3513         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3514         mrs=MEDFileMeshReadSelector(4)
3515         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3516         mrs=MEDFileMeshReadSelector(5)
3517         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3518         mrs=MEDFileMeshReadSelector(6)
3519         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3520         mrs=MEDFileMeshReadSelector(7)
3521         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3522         mrs=MEDFileMeshReadSelector(8)
3523         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3524         mrs=MEDFileMeshReadSelector(9)
3525         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3526         mrs=MEDFileMeshReadSelector(10)
3527         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3528         mrs=MEDFileMeshReadSelector(11)
3529         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3530         mrs=MEDFileMeshReadSelector(12)
3531         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3532         mrs=MEDFileMeshReadSelector(13)
3533         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3534         mrs=MEDFileMeshReadSelector(14)
3535         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3536         mrs=MEDFileMeshReadSelector(15)
3537         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3538         mrs=MEDFileMeshReadSelector(16)
3539         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3540         mrs=MEDFileMeshReadSelector(17)
3541         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3542         mrs=MEDFileMeshReadSelector(18)
3543         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3544         mrs=MEDFileMeshReadSelector(19)
3545         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3546         mrs=MEDFileMeshReadSelector(20)
3547         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3548         mrs=MEDFileMeshReadSelector(21)
3549         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3550         mrs=MEDFileMeshReadSelector(22)
3551         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3552         mrs=MEDFileMeshReadSelector(23)
3553         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3554         mrs=MEDFileMeshReadSelector(24)
3555         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3556         mrs=MEDFileMeshReadSelector(25)
3557         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3558         mrs=MEDFileMeshReadSelector(26)
3559         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3560         mrs=MEDFileMeshReadSelector(27)
3561         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3562         mrs=MEDFileMeshReadSelector(28)
3563         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3564         mrs=MEDFileMeshReadSelector(29)
3565         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3566         mrs=MEDFileMeshReadSelector(30)
3567         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3568         mrs=MEDFileMeshReadSelector(31)
3569         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3570         mrs=MEDFileMeshReadSelector(32)
3571         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3572         mrs=MEDFileMeshReadSelector(33)
3573         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3574         mrs=MEDFileMeshReadSelector(34)
3575         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3576         mrs=MEDFileMeshReadSelector(35)
3577         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3578         mrs=MEDFileMeshReadSelector(36)
3579         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3580         mrs=MEDFileMeshReadSelector(37)
3581         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3582         mrs=MEDFileMeshReadSelector(38)
3583         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3584         mrs=MEDFileMeshReadSelector(39)
3585         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3586         mrs=MEDFileMeshReadSelector(40)
3587         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3588         mrs=MEDFileMeshReadSelector(41)
3589         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3590         mrs=MEDFileMeshReadSelector(42)
3591         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3592         mrs=MEDFileMeshReadSelector(43)
3593         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3594         mrs=MEDFileMeshReadSelector(44)
3595         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3596         mrs=MEDFileMeshReadSelector(45)
3597         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3598         mrs=MEDFileMeshReadSelector(46)
3599         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3600         mrs=MEDFileMeshReadSelector(47)
3601         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3602         mrs=MEDFileMeshReadSelector(48)
3603         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3604         mrs=MEDFileMeshReadSelector(49)
3605         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3606         mrs=MEDFileMeshReadSelector(50)
3607         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3608         mrs=MEDFileMeshReadSelector(51)
3609         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3610         mrs=MEDFileMeshReadSelector(52)
3611         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3612         mrs=MEDFileMeshReadSelector(53)
3613         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3614         mrs=MEDFileMeshReadSelector(54)
3615         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3616         mrs=MEDFileMeshReadSelector(55)
3617         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3618         mrs=MEDFileMeshReadSelector(56)
3619         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3620         mrs=MEDFileMeshReadSelector(57)
3621         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3622         mrs=MEDFileMeshReadSelector(58)
3623         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3624         mrs=MEDFileMeshReadSelector(59)
3625         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3626         mrs=MEDFileMeshReadSelector(60)
3627         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3628         mrs=MEDFileMeshReadSelector(61)
3629         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3630         mrs=MEDFileMeshReadSelector(62)
3631         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3632         mrs=MEDFileMeshReadSelector(63)
3633         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3634         #
3635         mrs=MEDFileMeshReadSelector(63)
3636         mrs.setCellFamilyFieldReading(False)
3637         self.assertEqual(mrs.getCode(),62)
3638         mrs.setCellFamilyFieldReading(True)
3639         self.assertEqual(mrs.getCode(),63)
3640         mrs.setNodeFamilyFieldReading(False)
3641         self.assertEqual(mrs.getCode(),61)
3642         mrs.setNodeFamilyFieldReading(True)
3643         self.assertEqual(mrs.getCode(),63)
3644         mrs.setCellNameFieldReading(False)
3645         self.assertEqual(mrs.getCode(),59)
3646         mrs.setCellNameFieldReading(True)
3647         self.assertEqual(mrs.getCode(),63)
3648         mrs.setNodeNameFieldReading(False)
3649         self.assertEqual(mrs.getCode(),55)
3650         mrs.setNodeNameFieldReading(True)
3651         self.assertEqual(mrs.getCode(),63)
3652         mrs.setCellNumFieldReading(False)
3653         self.assertEqual(mrs.getCode(),47)
3654         mrs.setCellNumFieldReading(True)
3655         self.assertEqual(mrs.getCode(),63)
3656         mrs.setNodeNumFieldReading(False)
3657         self.assertEqual(mrs.getCode(),31)
3658         mrs.setNodeNumFieldReading(True)
3659         self.assertEqual(mrs.getCode(),63)
3660         pass
3661
3662     @WriteInTmpDir
3663     def testPartialReadOfMeshes(self):
3664         fname="Pyfile70.med"
3665         # building a mesh containing 4 tri3 + 5 quad4
3666         tri=MEDCouplingUMesh("tri",2)
3667         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3668         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3669         tris = [tri.deepCopy() for i in range(4)]
3670         for i,elt in enumerate(tris): elt.translate([i,0])
3671         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3672         quad=MEDCouplingUMesh("quad",2)
3673         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3674         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3675         quads = [quad.deepCopy() for i in range(5)]
3676         for i,elt in enumerate(quads): elt.translate([5+i,0])
3677         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3678         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3679         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3680         m1=m.buildDescendingConnectivity()[0]
3681         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3682         #
3683         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3684         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3685         mm.setGroupsAtLevel(0,[grp0,grp1])
3686         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3687         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3688         mm.setGroupsAtLevel(-1,[grp2,grp3])
3689         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3690         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3691         mm.setGroupsAtLevel(1,[grp4,grp5])
3692         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3693         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3694         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3695         #
3696         mm.write(fname,2)
3697         ##
3698         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3699         b4_ref_heap_mem=mm.getHeapMemorySize()
3700         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3701         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3702         ref_heap_mem=mm.getHeapMemorySize()
3703         # check the gain of memory using 1GTUMesh instead of UMesh
3704         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
3705         #
3706         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3707         self.assertEqual(len(mm.getGroupsNames()),0)
3708         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3709         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3710         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3711         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3712         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3713         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3714         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3715         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3716         delta1=ref_heap_mem-mm.getHeapMemorySize()
3717         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3718         #
3719         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3720         self.assertEqual(len(mm.getGroupsNames()),6)
3721         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3722         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3723         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3724         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3725         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3726         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3727         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3728         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3729         delta2=ref_heap_mem-mm.getHeapMemorySize()
3730         self.assertTrue(delta2<delta1)
3731         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3732         #
3733         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3734         self.assertEqual(len(mm.getGroupsNames()),6)
3735         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3736         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3737         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3738         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3739         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3740         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3741         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3742         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3743         delta3=ref_heap_mem-mm.getHeapMemorySize()
3744         self.assertTrue(delta3<delta2)
3745         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3746         #
3747         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3748         self.assertEqual(len(mm.getGroupsNames()),6)
3749         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3750         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3751         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3752         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3753         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3754         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3755         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3756         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3757         delta4=ref_heap_mem-mm.getHeapMemorySize()
3758         self.assertTrue(delta4<delta3)
3759         self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3760         #
3761         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3762         self.assertEqual(len(mm.getGroupsNames()),6)
3763         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3764         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3765         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3766         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3767         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3768         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3769         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3770         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3771         delta5=ref_heap_mem-mm.getHeapMemorySize()
3772         self.assertTrue(delta5<delta4)
3773         self.assertEqual(delta5,0)
3774         pass
3775
3776     # this test checks that setFieldProfile perform a check of the array length
3777     # compared to the profile length. This test also checks that mesh attribute of field
3778     # is not used by setFieldProfile (because across this test mesh is equal to None)
3779     @WriteInTmpDir
3780     def testCheckCompatibilityPfl1(self):
3781         # building a mesh containing 4 tri3 + 5 quad4
3782         tri=MEDCouplingUMesh("tri",2)
3783         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3784         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3785         tris = [tri.deepCopy() for i in range(4)]
3786         for i,elt in enumerate(tris): elt.translate([i,0])
3787         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3788         quad=MEDCouplingUMesh("quad",2)
3789         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3790         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3791         quads = [quad.deepCopy() for i in range(5)]
3792         for i,elt in enumerate(quads): elt.translate([5+i,0])
3793         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3794         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3795         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3796         m1=m.buildDescendingConnectivity()[0]
3797         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3798         #
3799         f1ts=MEDFileField1TS()
3800         f=MEDCouplingFieldDouble(ON_NODES)
3801         vals=DataArrayDouble(7) ; vals.iota(1000)
3802         f.setArray(vals)
3803         f.setName("anonymous") # f has no mesh it is not a bug
3804         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3805         f1ts.setFieldProfile(f,mm,0,pfl)
3806         #
3807         f1ts=MEDFileField1TS()
3808         f=MEDCouplingFieldDouble(ON_NODES)
3809         vals=DataArrayDouble(8) ; vals.iota(1000)
3810         f.setArray(vals)
3811         f.setName("anonymous") # f has no mesh it is not a bug
3812         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3813         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3814         #
3815         f1ts=MEDFileField1TS()
3816         f=MEDCouplingFieldDouble(ON_CELLS)
3817         vals=DataArrayDouble(7) ; vals.iota(1000)
3818         f.setArray(vals)
3819         f.setName("anonymous") # f has no mesh it is not a bug
3820         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3821         f1ts.setFieldProfile(f,mm,0,pfl)
3822         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3823         #
3824         f1ts=MEDFileField1TS()
3825         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3826         vals=DataArrayDouble(27) ; vals.iota(1000)
3827         f.setArray(vals)
3828         f.setName("anonymous") # f has no mesh it is not a bug
3829         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3830         f.setMesh(m[pfl])
3831         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])
3832         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3833         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])
3834         f.setMesh(None)
3835         f1ts.setFieldProfile(f,mm,0,pfl)
3836         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3837         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3838         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3839         vals=DataArrayDouble(27) ; vals.iota(1000)
3840         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3841         #
3842         f1ts=MEDFileField1TS()
3843         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3844         vals=DataArrayDouble(25) ; vals.iota(1000)
3845         f.setArray(vals)
3846         f.setName("anonymous") # f has no mesh it is not a bug
3847         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3848         f1ts.setFieldProfile(f,mm,0,pfl)
3849         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3850         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3851         f.setArray(vals2)
3852         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3853         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3854         #
3855         f1ts=MEDFileField1TS()
3856         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3857         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3858         f.setArray(vals)
3859         f1ts.setFieldProfile(f,mm,0,pfl)
3860         pass
3861
3862     @WriteInTmpDir
3863     def testWRMeshWithNoCells(self):
3864         fname="Pyfile71.med"
3865         a=DataArrayDouble(4) ; a.iota()
3866         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3867         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3868         m=MEDFileUMesh()
3869         m.setMeshAtLevel(0,m00)
3870         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3871         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3872         m.write(fname,2)
3873         del m,a,c,m0,m00
3874         #
3875         m=MEDFileMesh.New(fname)
3876         self.assertEqual((),m.getNonEmptyLevels())
3877         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))
3878         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3879         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3880         pass
3881
3882     @WriteInTmpDir
3883     def testWRQPolyg1(self):
3884         fname="Pyfile72.med"
3885         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3886         m.insertNextCell([0,2,1,3])
3887         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3888         #
3889         ms = [m.deepCopy() for i in range(4)]
3890         for i,elt in enumerate(ms):
3891             elt.translate([float(i)*1.5,0.])
3892             pass
3893         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3894         m0.convertAllToPoly()
3895         #
3896         ms = [m.deepCopy() for i in range(5)]
3897         for i,elt in enumerate(ms):
3898             elt.translate([float(i)*1.5,1.5])
3899             pass
3900         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3901         m1.convertAllToPoly()
3902         m1.convertLinearCellsToQuadratic()
3903         #
3904         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3905         ##
3906         mm=MEDFileUMesh()
3907         mm.setMeshAtLevel(0,m)
3908         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3909         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3910         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3911         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3912         ##
3913         mm.write(fname,2)
3914         del mm
3915         #
3916         mm_read=MEDFileUMesh(fname)
3917         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3918         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3919         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3920         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3921         ##
3922         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3923         f.setMesh(m)
3924         arr0=DataArrayDouble(9) ; arr0.iota()
3925         arr1=DataArrayDouble(9) ; arr1.iota(100)
3926         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3927         f.setArray(arr) ; f.checkConsistencyLight()
3928         f.setTime(5.6,1,2)
3929         ff=MEDFileField1TS()
3930         ff.setFieldNoProfileSBT(f)
3931         ff.write(fname,0)
3932         ##
3933         ff_read=MEDFileField1TS(fname)
3934         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3935         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3936         pass
3937
3938     @WriteInTmpDir
3939     def testLoadIfNecessaryOnFromScratchFields0(self):
3940         """
3941         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3942         """
3943         fname="Pyfile77.med"
3944         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3945         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3946         m.allocateCells()
3947         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3948         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3949         m.finishInsertingCells()
3950         #
3951         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3952         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3953         fs=MEDFileFields()
3954         arrs=4*[None]
3955         #
3956         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3957         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3958         f0.setTime(1.1,1,1)
3959         f0.setName("myELNOField")
3960         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3961         f0.setArray(arrs[0])
3962         ff0.appendFieldNoProfileSBT(f0)
3963         #
3964         f0.setTime(2.2,2,1)
3965         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3966         f0.setArray(arrs[1])
3967         ff0.appendFieldNoProfileSBT(f0)
3968         #
3969         f0.setTime(3.3,3,1)
3970         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3971         f0.setArray(arrs[2])
3972         ff0.appendFieldNoProfileSBT(f0)
3973         #
3974         f0.setTime(4.4,4,1)
3975         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3976         f0.setArray(arrs[3])
3977         ff0.appendFieldNoProfileSBT(f0)
3978         #
3979         for i,arr in enumerate(arrs):
3980             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3981             fs[0][i].loadArraysIfNecessary()
3982             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3983             pass
3984         fs.loadArraysIfNecessary()
3985         for i,arr in enumerate(arrs):
3986             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3987             pass
3988         fs[0].loadArraysIfNecessary()
3989         for i,arr in enumerate(arrs):
3990             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3991             pass
3992         pass
3993
3994     @WriteInTmpDir
3995     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3996         """ 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.
3997         """
3998         fname="Pyfile78.med"
3999         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)
4000         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4001         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
4002         m0.allocateCells()
4003         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
4004             m0.insertNextCell(NORM_TETRA4,elt)
4005             pass
4006         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
4007             m0.insertNextCell(NORM_PYRA5,elt)
4008             pass
4009         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
4010             m0.insertNextCell(NORM_PENTA6,elt)
4011             pass
4012         m0.checkConsistency()
4013         m1=MEDCouplingUMesh(); m1.setName("mesh")
4014         m1.setMeshDimension(2);
4015         m1.allocateCells(5);
4016         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4017         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4018         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4019         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4020         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4021         m1.setCoords(coords);
4022         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
4023         m3.allocateCells()
4024         m3.insertNextCell(NORM_POINT1,[2])
4025         m3.insertNextCell(NORM_POINT1,[3])
4026         m3.insertNextCell(NORM_POINT1,[4])
4027         m3.insertNextCell(NORM_POINT1,[5])
4028         #
4029         mm=MEDFileUMesh()
4030         mm.setMeshAtLevel(0,m0)
4031         mm.setMeshAtLevel(-1,m1)
4032         mm.setMeshAtLevel(-3,m3)
4033         mm.write(fname,2)
4034         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
4035         mm=MEDFileMesh.New(fname)
4036         fs=MEDFileFields()
4037         fmts=MEDFileFieldMultiTS()
4038         f1ts=MEDFileField1TS()
4039         for lev in mm.getNonEmptyLevels():
4040             for gt in mm.getGeoTypesAtLevel(lev):
4041                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4042                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4043                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4044                 f.setArray(arr) ; f.setName("f0")
4045                 f1ts.setFieldNoProfileSBT(f)
4046                 pass
4047             pass
4048         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4049         for lev in [0,-1,-3]:
4050             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4051             pass
4052         fmts.pushBackTimeStep(f1ts)
4053         fs.pushField(fmts)
4054         fs.write(fname,0)
4055         del fs,fmts,f1ts
4056         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4057         fs=MEDFileFields(fname)
4058         self.assertEqual(len(fs),1)
4059         self.assertEqual(len(fs[0]),1)
4060         f1ts=fs[0][0]
4061         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),'','')])])
4062         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))
4063         pass
4064
4065     @WriteInTmpDir
4066     def testMEDFileUMeshSetName(self):
4067         """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the conversion is performed in memory and a preparation is done then.
4068         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4069         """
4070         fname="Pyfile79.med"
4071         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4072         mm=MEDFileUMesh()
4073         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4074         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)
4075         m0.allocateCells(5);
4076         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4077         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4078         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4079         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4080         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4081         m0.setCoords(coords);
4082         mm.setMeshAtLevel(0,m0)
4083         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4084         m2.allocateCells()
4085         m2.insertNextCell(NORM_POINT1,[2])
4086         m2.insertNextCell(NORM_POINT1,[3])
4087         m2.insertNextCell(NORM_POINT1,[4])
4088         m2.insertNextCell(NORM_POINT1,[5])
4089         mm.setMeshAtLevel(-2,m2)
4090         self.assertEqual(mm.getName(),"")
4091         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4092         mm.forceComputationOfParts()
4093         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4094         mm.setName("abc")
4095         self.assertEqual(mm.getName(),"abc")
4096         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4097         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4098         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4099         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4100         pass
4101
4102     @WriteInTmpDir
4103     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4104         fileName="Pyfile80.med"
4105         m=MEDCouplingCMesh() ; m.setName("cmesh")
4106         arr=DataArrayDouble(6) ; arr.iota()
4107         m.setCoords(arr,arr)
4108         nbCells=m.getNumberOfCells()
4109         self.assertEqual(25,nbCells)
4110         f=MEDCouplingFieldDouble(ON_CELLS)
4111         f.setName("FieldOnCell") ; f.setMesh(m)
4112         arr=DataArrayDouble(nbCells) ; arr.iota()
4113         mm=MEDFileCMesh()
4114         mm.setMesh(m)
4115         #
4116         fmts=MEDFileFieldMultiTS()
4117         #
4118         for i in range(nbCells):
4119             t=(float(i)+0.1,i+1,-i-2)
4120             f.setTime(*t)
4121             arr2=DataArrayDouble(nbCells)
4122             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4123             arr2[perm]=arr
4124             f.setArray(arr2)
4125             f1ts=MEDFileField1TS()
4126             f1ts.setFieldNoProfileSBT(f)
4127             fmts.pushBackTimeStep(f1ts)
4128             pass
4129         fmts.unloadArraysWithoutDataLoss()
4130         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))
4131         fs=MEDFileFields() ; fs.pushField(fmts)
4132         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))
4133         fs.unloadArraysWithoutDataLoss()
4134         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))
4135         f1ts=fs[0][0]
4136         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))
4137         f1ts.unloadArraysWithoutDataLoss()
4138         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))
4139         mm.write(fileName,2)
4140         fs.write(fileName,0)
4141         del m,fmts,mm,f,f1ts
4142         ##
4143         mm=MEDFileMesh.New(fileName)
4144         fmts=MEDFileFieldMultiTS(fileName)
4145         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))
4146         fmts.unloadArraysWithoutDataLoss()
4147         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4148         fmts.loadArraysIfNecessary()
4149         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))
4150         del mm,fmts
4151         fs=MEDFileFields(fileName)
4152         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))
4153         fs.unloadArraysWithoutDataLoss()
4154         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4155         fs.loadArraysIfNecessary()
4156         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))
4157         del fs
4158         f1ts=MEDFileField1TS(fileName)
4159         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))
4160         f1ts.unloadArraysWithoutDataLoss()
4161         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4162         f1ts.loadArraysIfNecessary()
4163         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))
4164         pass
4165
4166     @WriteInTmpDir
4167     def testMEDFileUMeshLoadPart1(self):
4168         """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specified using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
4169         memory of the returned instance.
4170         """
4171         fileName="Pyfile81.med"
4172         arr=DataArrayDouble(6) ; arr.iota()
4173         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4174         m=m.buildUnstructured()
4175         m.setName("Mesh")
4176         m.changeSpaceDimension(3,0.)
4177         infos=["aa [b]","cc [de]","gg [klm]"]
4178         m.getCoords().setInfoOnComponents(infos)
4179         m.checkConsistency()
4180         mm=MEDFileUMesh()
4181         mm.setMeshAtLevel(0,m)
4182         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4183         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4184         mm.setMeshAtLevel(-1,m1)
4185         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])
4186         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])
4187         namesCellL0=DataArrayAsciiChar(25,16)
4188         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
4189         renumM1=DataArrayInt([3,4,0,2,1])
4190         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4191         mm.setRenumFieldArr(0,renum0)
4192         mm.setFamilyFieldArr(0,famField0)
4193         mm.setNameFieldAtLevel(0,namesCellL0)
4194         mm.setRenumFieldArr(-1,renumM1)
4195         mm.setFamilyFieldArr(-1,famFieldM1)
4196         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])
4197         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])
4198         namesNodes=DataArrayAsciiChar(36,16)
4199         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
4200         mm.setRenumFieldArr(1,renum1)
4201         mm.setFamilyFieldArr(1,famField1)
4202         mm.setNameFieldAtLevel(1,namesNodes)
4203         mm.setFamilyId("Fam7",77)
4204         mm.setFamilyId("Fam8",88)
4205         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4206         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4207         mm.write(fileName,2)
4208         #
4209         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4210         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4211         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])))
4212         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)
4213         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4214         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4215         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4216         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4217         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4218         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4219         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4220         #
4221         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4222         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4223         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])))
4224         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)
4225         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4226         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4227         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4228         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4229         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4230         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4231         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4232         #
4233         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4234         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4235         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4236         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4237         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4238         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4239         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4240         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4241         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])))
4242         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4243         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)
4244         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4245         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4246         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4247         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4248         pass
4249
4250     @WriteInTmpDir
4251     def testMEDFileFieldsLoadPart1(self):
4252         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4253         """
4254         fileName="Pyfile82.med"
4255         meshName="Mesh"
4256         compos=["aa [kg]","bbb [m/s]"]
4257         arr=DataArrayDouble(6) ; arr.iota()
4258         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4259         m=m.buildUnstructured()
4260         m.setName(meshName)
4261         m.changeSpaceDimension(3,0.)
4262         infos=["aa [b]","cc [de]","gg [klm]"]
4263         m.getCoords().setInfoOnComponents(infos)
4264         m.checkConsistency()
4265         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4266         f.setName("Field")
4267         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4268         arr[:,0]=list(range(25))
4269         arr[:,1]=list(range(100,125))
4270         f.setArray(arr)
4271         WriteField(fileName,f,True)
4272         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4273         f.setName("FieldNode")
4274         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4275         arr[:,0]=list(range(200,236))
4276         arr[:,1]=list(range(300,336))
4277         f.setArray(arr)
4278         f.checkConsistencyLight()
4279         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4280         #
4281         ms=MEDFileMeshes()
4282         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4283         ms.pushMesh(mm)
4284         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4285         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4286         #
4287         ms=MEDFileMeshes()
4288         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4289         ms.pushMesh(mm)
4290         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4291         fs=fs.deepCopy()
4292         fs[0][0].loadArrays()
4293         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4294         arr.setInfoOnComponents(compos)
4295         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4296         fs[1][0].loadArrays()
4297         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4298         arr.setInfoOnComponents(compos)
4299         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4300         pass
4301
4302     @WriteInTmpDir
4303     def testMEDFileWithoutCells1(self):
4304         fileName="Pyfile83.med"
4305         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4306         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4307         mm=MEDFileUMesh()
4308         mm.setCoords(coo)
4309         mm.setName("mesh")
4310         mm.write(fileName,2)
4311         #
4312         mm=MEDFileMesh.New(fileName)
4313         self.assertEqual(mm.getName(),"mesh")
4314         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4315         pass
4316
4317     @WriteInTmpDir
4318     def testZipCoordsWithLoadPart1(self):
4319         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4320         """
4321         fileName="Pyfile84.med"
4322         meshName="Mesh"
4323         compos=["aa [kg]","bbb [m/s]"]
4324         arr=DataArrayDouble(6) ; arr.iota()
4325         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4326         m=m.buildUnstructured()
4327         m.setName(meshName)
4328         m.changeSpaceDimension(3,0.)
4329         infos=["aa [b]","cc [de]","gg [klm]"]
4330         m.getCoords().setInfoOnComponents(infos)
4331         m.checkConsistency()
4332         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4333         f.setName("Field")
4334         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4335         arr[:,0]=list(range(25))
4336         arr[:,1]=list(range(100,125))
4337         f.setArray(arr)
4338         WriteField(fileName,f,True)
4339         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4340         f.setName("FieldNode")
4341         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4342         arr[:,0]=list(range(200,236))
4343         arr[:,1]=list(range(300,336))
4344         f.setArray(arr)
4345         f.checkConsistencyLight()
4346         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4347         #
4348         ms=MEDFileMeshes()
4349         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4350         ms.pushMesh(mm)
4351         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4352         self.assertEqual(spd.getSlice(),slice(4,6,1))
4353         spd=mm.getPartDefAtLevel(1)
4354         self.assertEqual(spd.getSlice(),slice(4,14,1))
4355         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4356         mm.zipCoords() # <- The important line is here !
4357         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4358         self.assertEqual(spd.getSlice(),slice(4,6,1))
4359         spd=mm.getPartDefAtLevel(1)
4360         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4361         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4362         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4363         fs[0][0].loadArrays()
4364         arr=DataArrayDouble([(4,104),(5,105)])
4365         arr.setInfoOnComponents(compos)
4366         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4367         fs[1][0].loadArrays()
4368         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4369         arr.setInfoOnComponents(compos)
4370         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4371         m_ref = mm[0].deepCopy()
4372         # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4373         ms=MEDFileMeshes()
4374         mrs = MEDFileMeshReadSelector()
4375         mrs.setNumberOfCoordsLoadSessions(2)
4376         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4377         ms.pushMesh(mm)
4378         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4379         self.assertEqual(spd.getSlice(),slice(4,6,1))
4380         spd=mm.getPartDefAtLevel(1)
4381         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4382         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4383         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4384         fs[0][0].loadArrays()
4385         arr=DataArrayDouble([(4,104),(5,105)])
4386         arr.setInfoOnComponents(compos)
4387         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4388         fs[1][0].loadArrays()
4389         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4390         arr.setInfoOnComponents(compos)
4391         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4392         self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4393         pass
4394
4395     @WriteInTmpDir
4396     def testMEDFileCMeshSetGroupsAtLevel(self):
4397         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4398         """
4399         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4400         m.setName("Mesh")
4401         mm=MEDFileCMesh() ; mm.setMesh(m)
4402         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4403         mm.setGroupsAtLevel(0,[grp])
4404         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4405         pass
4406
4407     @WriteInTmpDir
4408     def testMEDFileUMeshBuildExtrudedMesh1(self):
4409         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4410         fileName="Pyfile85.med"
4411         meshName2D="Mesh"
4412         meshName1D="Mesh1D"
4413         meshName3DOut="Mesh3D"
4414         #
4415         d1=DataArrayInt([0,4,20,24])
4416         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4417         #
4418         a=DataArrayDouble(6) ; a.iota()
4419         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4420         m=m.buildUnstructured()
4421         d1c=d1.buildComplement(m.getNumberOfCells())
4422         m=m[d1c] ; m.zipCoords()
4423         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4424         m0.simplexize(0)
4425         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4426         m.setName(meshName2D)
4427         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4428         e=d.deltaShiftIndex().findIdsEqual(1)
4429         #
4430         mm=MEDFileUMesh()
4431         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4432         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4433         mm.setGroupsAtLevel(0,[grp0])
4434         grp1=e ; grp1.setName("grp1")
4435         mm.setGroupsAtLevel(-1,[grp1])
4436         mm.write(fileName,2)
4437         #
4438         a=DataArrayDouble(3) ; a.iota()
4439         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4440         tmp.setName(meshName1D)
4441         tmp.changeSpaceDimension(3)
4442         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4443         mm1D=MEDFileUMesh()
4444         mm1D.setMeshAtLevel(0,tmp)
4445         mm1D.write(fileName,0)
4446         # test is here !
4447         mm2D=MEDFileMesh.New(fileName,meshName2D)
4448         mm1D=MEDFileMesh.New(fileName,meshName1D)
4449         m1D=mm1D.getMeshAtLevel(0)
4450         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4451         #
4452         self.assertEqual(mm3D.getName(),mm2D.getName())
4453         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4454         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4455         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4456         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4457         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4458         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4459         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4460         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4461         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4462         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.)])
4463         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4464         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])
4465         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4466         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])
4467         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4468         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])
4469         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4470         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])
4471         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4472         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])
4473         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4474         d=DataArrayInt(129) ; d.iota() ; d*=3
4475         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4476         #
4477         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4478         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4479         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4480         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4481         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])))
4482         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])))
4483         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])))
4484         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])))
4485         mm3D.setName("MeshExtruded")
4486         mm3D.write(fileName,0)
4487         pass
4488
4489     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4490     @WriteInTmpDir
4491     def testMEDFileUMeshPickeling1(self):
4492         outFileName="Pyfile86.med"
4493         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)
4494         c.setInfoOnComponents(["aa","bbb"])
4495         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4496         m=MEDCouplingUMesh();
4497         m.setMeshDimension(2);
4498         m.allocateCells(5);
4499         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4500         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4501         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4502         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4503         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4504         m.finishInsertingCells();
4505         m.setCoords(c)
4506         m.checkConsistencyLight()
4507         m1=MEDCouplingUMesh.New();
4508         m1.setMeshDimension(1);
4509         m1.allocateCells(3);
4510         m1.insertNextCell(NORM_SEG2,2,[1,4])
4511         m1.insertNextCell(NORM_SEG2,2,[3,6])
4512         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4513         m1.finishInsertingCells();
4514         m1.setCoords(c)
4515         m1.checkConsistencyLight()
4516         m2=MEDCouplingUMesh.New();
4517         m2.setMeshDimension(0);
4518         m2.allocateCells(4);
4519         m2.insertNextCell(NORM_POINT1,1,[1])
4520         m2.insertNextCell(NORM_POINT1,1,[3])
4521         m2.insertNextCell(NORM_POINT1,1,[2])
4522         m2.insertNextCell(NORM_POINT1,1,[6])
4523         m2.finishInsertingCells();
4524         m2.setCoords(c)
4525         m2.checkConsistencyLight()
4526         #
4527         mm=MEDFileUMesh.New()
4528         self.assertTrue(mm.getUnivNameWrStatus())
4529         mm.setName("MyFirstMEDCouplingMEDmesh")
4530         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4531         mm.setCoords(c)
4532         mm[-1]=m1;
4533         mm[0]=m;
4534         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4535         mm[-2]=m2;
4536         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4537         # playing with groups
4538         g1_2=DataArrayInt.New()
4539         g1_2.setValues([1,3],2,1)
4540         g1_2.setName("G1")
4541         g2_2=DataArrayInt.New()
4542         g2_2.setValues([1,2,3],3,1)
4543         g2_2.setName("G2")
4544         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4545         g1_1=DataArrayInt.New()
4546         g1_1.setValues([0,1,2],3,1)
4547         g1_1.setName("G1")
4548         g2_1=DataArrayInt.New()
4549         g2_1.setValues([0,2],2,1)
4550         g2_1.setName("G2")
4551         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4552         g1_N=DataArrayInt.New()
4553         g1_N.setValues(list(range(8)),8,1)
4554         g1_N.setName("G1")
4555         g2_N=DataArrayInt.New()
4556         g2_N.setValues(list(range(9)),9,1)
4557         g2_N.setName("G2")
4558         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4559         mm.createGroupOnAll(0,"GrpOnAllCell")
4560         # check content of mm
4561         t=mm.getGroupArr(0,"G1",False)
4562         self.assertTrue(g1_2.isEqual(t));
4563         t=mm.getGroupArr(0,"G2",False)
4564         self.assertTrue(g2_2.isEqual(t));
4565         t=mm.getGroupArr(-1,"G1",False)
4566         self.assertTrue(g1_1.isEqual(t));
4567         t=mm.getGroupArr(-1,"G2",False)
4568         self.assertTrue(g2_1.isEqual(t));
4569         t=mm.getGroupArr(1,"G1",False)
4570         self.assertTrue(g1_N.isEqual(t));
4571         t=mm.getGroupArr(1,"G2",False)
4572         self.assertTrue(g2_N.isEqual(t));
4573         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4574         t=mm.getGroupArr(0,"GrpOnAllCell")
4575         #
4576         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4577         mm2=pickle.loads(st)
4578         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4579         self.assertEqual(mm.getAxisType(),AX_CART)
4580         #
4581         mm.setAxisType(AX_CYL)
4582         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4583         mm2=pickle.loads(st)
4584         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4585         self.assertEqual(mm2.getAxisType(),AX_CYL)
4586         pass
4587
4588     @WriteInTmpDir
4589     def testMEDFileFieldsLoadSpecificEntities1(self):
4590         nbNodes=11
4591         fieldName="myField"
4592         fileName="Pyfile87.med"
4593         nbPdt=10
4594         meshName="Mesh"
4595         #
4596         m=MEDCouplingCMesh()
4597         arr=DataArrayDouble(nbNodes) ; arr.iota()
4598         m.setCoords(arr)
4599         m=m.buildUnstructured()
4600         m.setName(meshName)
4601         #
4602         fmts=MEDFileFieldMultiTS()
4603         for i in range(nbPdt):
4604             f=MEDCouplingFieldDouble(ON_NODES)
4605             f.setMesh(m)
4606             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4607             f.setArray(arr)
4608             f.setName(fieldName)
4609             f.setTime(float(i),i,0)
4610             fmts.appendFieldNoProfileSBT(f)
4611             pass
4612         #
4613         mm=MEDFileUMesh() ; mm[0]=m
4614         fmts.write(fileName,2)
4615         mm.write(fileName,0)
4616         #
4617         fs=MEDFileFields(fileName,False)
4618         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4619         fs.loadArraysIfNecessary()
4620         fs2.loadArraysIfNecessary()
4621         for i in range(nbPdt):
4622             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4623             pass
4624         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4625         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4626         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4627         fmts=MEDFileFieldMultiTS()
4628         for i in range(nbPdt):
4629             f=MEDCouplingFieldDouble(ON_CELLS)
4630             f.setMesh(m3)
4631             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4632             f.setArray(arr)
4633             f.setName(fieldName)
4634             f.setTime(float(i),i,0)
4635             fmts.appendFieldNoProfileSBT(f)
4636             pass
4637         mm=MEDFileUMesh() ; mm[0]=m3
4638         del mm[0]
4639         self.assertEqual(mm.getNonEmptyLevels(),())
4640         mm[0]=m3
4641         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4642         fmts.write(fileName,2)
4643         fs=MEDFileFields(fileName,False)
4644         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4645         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4646         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4647         fs.loadArraysIfNecessary()
4648         fs2.loadArraysIfNecessary()
4649         fs3.loadArraysIfNecessary()
4650         fs4.loadArraysIfNecessary()
4651         for i in range(nbPdt):
4652             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4653             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4654             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4655             pass
4656         pass
4657
4658     @WriteInTmpDir
4659     def testMEDFileLotsOfTSRW1(self):
4660         nbNodes=11
4661         fieldName="myField"
4662         fileName="Pyfile88.med"
4663         nbPdt=300 # <- perftest = 30000
4664         meshName="Mesh"
4665         #
4666         maxPdt=100 # <- optimum = 500
4667         m=MEDCouplingCMesh()
4668         arr=DataArrayDouble(nbNodes) ; arr.iota()
4669         m.setCoords(arr)
4670         m=m.buildUnstructured()
4671         m.setName(meshName)
4672         #
4673         nbOfField=nbPdt//maxPdt
4674         fs=MEDFileFields()
4675         for j in range(nbOfField):
4676             fmts=MEDFileFieldMultiTS()
4677             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4678             for i in range(s.start, s.stop, s.step):
4679                 f=MEDCouplingFieldDouble(ON_NODES)
4680                 f.setMesh(m)
4681                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4682                 f.setArray(arr)
4683                 f.setName("%s_%d"%(fieldName,j))
4684                 f.setTime(float(i),i,0)
4685                 fmts.appendFieldNoProfileSBT(f)
4686                 pass
4687             fs.pushField(fmts)
4688             pass
4689         #
4690         mm=MEDFileUMesh() ; mm[0]=m
4691         fs.write(fileName,2)
4692         mm.write(fileName,0)
4693         ############
4694         def appendInDict(d,key,val):
4695             if key in d:
4696                 d[key].append(val)
4697             else:
4698                 d[key]=[val]
4699             pass
4700         import re
4701         allFields=GetAllFieldNames(fileName)
4702         allFieldsDict={}
4703         pat=re.compile("([\d]+)([\s\S]+)$")
4704         for st in allFields:
4705             stRev=st[::-1]
4706             m=pat.match(stRev)
4707             if m:
4708                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4709                 pass
4710             else:
4711                 appendInDict(allFieldsDict,st,'')
4712                 pass
4713             pass
4714         fs2=MEDFileFields()
4715         for k in allFieldsDict:
4716             if allFieldsDict[k]!=['']:
4717                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4718                 pass
4719             fmts2=[]
4720             for it in allFieldsDict[k]:
4721                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4722                 pass
4723             fmts2.reverse()
4724             zeResu=fmts2.pop()
4725             nbIter=len(fmts2)
4726             for ii in range(nbIter):
4727                 zeResu.pushBackTimeSteps(fmts2.pop())
4728                 pass
4729             zeResu.setName(k)
4730             fs2.pushField(zeResu)
4731             pass
4732         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4733         pass
4734
4735     @WriteInTmpDir
4736     def testMEDFileMeshRearrangeFamIds1(self):
4737         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4738         fileName="Pyfile89.med"
4739         meshName='Maillage_2'
4740         mm=MEDFileUMesh()
4741         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)])
4742         #
4743         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])
4744         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])
4745         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4746         m0.setConnectivity(c0,c0i)
4747         mm[0]=m0
4748         #
4749         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])
4750         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])
4751         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4752         m1.setConnectivity(c1,c1i)
4753         mm[-1]=m1
4754         #
4755         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])
4756         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4757         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4758         mm[-2]=m2.buildUnstructured()
4759         #
4760         ref0=DataArrayInt(55) ; ref0[:]=0
4761         mm.setFamilyFieldArr(0,ref0)
4762         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]))
4763         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])
4764         mm.setFamilyFieldArr(-1,ref1)
4765         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])
4766         mm.setFamilyFieldArr(-2,ref2)
4767         #
4768         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4769             mm.setFamilyId(f,fid)
4770         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4771             mm.setFamiliesOnGroup(grp,fams)
4772         mm.write(fileName,2)
4773         #
4774         mm=MEDFileMesh.New(fileName)
4775         grp=mm.getGroup(-1,"Groupe_1")
4776         dai=grp.computeFetchedNodeIds()
4777         dai.setName("TOTO")
4778         mm.addGroup(1,dai)
4779         mm.rearrangeFamilies() # <- the aim of the test
4780         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4781         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4782         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4783         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4784         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])))
4785         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4786         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4787         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4788         for elt,fams in allGrps:
4789             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4790         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4791         for elt,eltId in allFams:
4792             self.assertEqual(mm.getFamilyId(elt),eltId)
4793         pass
4794
4795     @WriteInTmpDir
4796     def testNonRegrCMeshSetFieldPfl1(self):
4797         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4798         ff=MEDFileField1TS()
4799         meshName="mesh"
4800         mm=MEDFileCMesh()
4801         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4802         m.setCoords(arr)
4803         m.setName(meshName)
4804         mm.setMesh(m)
4805         field=MEDCouplingFieldDouble(ON_CELLS)
4806         field.setMesh(m)
4807         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4808         field.setName("Field")
4809         field.checkConsistencyLight()
4810         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4811         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4812         self.assertEqual(ff.getPfls(),())
4813         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4814         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4815         del ff,mm,field,field2,pfl
4816         # same with unstructured mesh
4817         ff=MEDFileField1TS()
4818         meshName="mesh"
4819         mm=MEDFileUMesh()
4820         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4821         m.setCoords(arr)
4822         m.setName(meshName)
4823         m=m.buildUnstructured()
4824         mm[0]=m
4825         field=MEDCouplingFieldDouble(ON_CELLS)
4826         field.setMesh(m)
4827         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4828         field.setName("Field")
4829         field.checkConsistencyLight()
4830         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4831         ff.setFieldProfile(field,mm,0,pfl)
4832         self.assertEqual(ff.getPfls(),())
4833         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4834         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4835         pass
4836
4837     @WriteInTmpDir
4838     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4839         meshName="mesh"
4840         fileName="Pyfile90.med"
4841         fileName2="Pyfile91.med"
4842         arr=DataArrayDouble(5) ; arr.iota()
4843         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4844         m=m.buildUnstructured()
4845         d=DataArrayInt([3,7,11,15])
4846         m1=m[d]
4847         m1.simplexize(0)
4848         m2=m[d.buildComplement(m.getNumberOfCells())]
4849         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4850         m.changeSpaceDimension(3,0.)
4851         arr=DataArrayDouble(3) ; arr.iota()
4852         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4853         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4854         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4855         m3D=m.buildExtrudedMesh(m1D,0)
4856         m3D.sortCellsInMEDFileFrmt()
4857         m3D.setName(meshName)
4858         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4859         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4860         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4861         #
4862         mm=MEDFileUMesh()
4863         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4864         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4865         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4866         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4867         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4868         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4869         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4870         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4871         mm.setGroupsAtLevel(0,[vol1,vol2])
4872         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4873         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4874         #
4875         mmOut1=mm.linearToQuadratic(0,0.)
4876         mmOut1.write(fileName2,2)
4877         mmOut2=mmOut1.quadraticToLinear(0.)
4878         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4879         pass
4880
4881     @WriteInTmpDir
4882     def testMEDFileMeshAddGroup1(self):
4883         m=MEDCouplingCMesh()
4884         arrX=DataArrayDouble(9) ; arrX.iota()
4885         arrY=DataArrayDouble(4) ; arrY.iota()
4886         m.setCoords(arrX,arrY)
4887         m.setName("mesh")
4888         mm=MEDFileCMesh()
4889         mm.setMesh(m)
4890         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4891         mm.addGroup(0,grp0)
4892         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4893         mm.addGroup(0,grp1)
4894         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4895         mm.addGroup(0,grp2)
4896         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4897         mm.addGroup(0,grp3)
4898         for grp in [grp0,grp1,grp2,grp3]:
4899             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4900         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4901         delta=12
4902         for grp in [grp0,grp1,grp2,grp3]:
4903             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4904             mm.addGroup(1,grpNode)
4905         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4906         for grp in [grp0,grp1,grp2,grp3]:
4907             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4908         for grp in [grp0,grp1,grp2,grp3]:
4909             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4910             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4911         mm.normalizeFamIdsMEDFile()
4912         for grp in [grp0,grp1,grp2,grp3]:
4913             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4914         for grp in [grp0,grp1,grp2,grp3]:
4915             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4916             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4917         pass
4918
4919     @WriteInTmpDir
4920     def testMEDFileJoint1(self):
4921         fileName="Pyfile92.med"
4922         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4923         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4924         mm=MEDFileUMesh()
4925         mm.setCoords(coo)
4926         mm.setName("maa1")
4927         mm.setDescription("un maillage")
4928         mm.write(fileName,2)
4929         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4930         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4931         one_step_joint=MEDFileJointOneStep()
4932         one_step_joint.pushCorrespondence(cell_correspond)
4933         one_step_joint.pushCorrespondence(node_correspond)
4934         one_joint=MEDFileJoint()
4935         one_joint.pushStep(one_step_joint)
4936         one_joint.setLocalMeshName("maa1")
4937         one_joint.setRemoteMeshName("maa1")
4938         one_joint.setDescription("joint_description")
4939         one_joint.setJointName("joint_1")
4940         one_joint.setDomainNumber(1)
4941         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4942         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4943         self.assertEqual( one_joint.getDescription(), "joint_description")
4944         self.assertEqual( one_joint.getJointName(), "joint_1")
4945         self.assertEqual( one_joint.getDomainNumber(), 1)
4946         joints=MEDFileJoints()
4947         joints.pushJoint(one_joint);
4948         joints.write(fileName,0)
4949         # read back
4950         jointsR=MEDFileJoints(fileName,mm.getName())
4951         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4952         jR = jointsR.getJointAtPos(0)
4953         self.assertTrue( jR.isEqual( one_joint ))
4954         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4955         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4956         jointsR.destroyJointAtPos(0)
4957         pass
4958
4959     @WriteInTmpDir
4960     def testMEDFileJoint2(self):
4961         fileNameWr="Pyfile93.med"
4962         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4963         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4964         mm=MEDFileUMesh()
4965         mm.setCoords(coo)
4966         mm.setName("maa1")
4967         mm.setDescription("un maillage")
4968         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4969         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4970         one_step_joint=MEDFileJointOneStep()
4971         two_step_joint=MEDFileJointOneStep()
4972         one_joint=MEDFileJoint()
4973         two_joint=MEDFileJoint()
4974         one_step_joint.pushCorrespondence(node_correspond)
4975         one_joint.pushStep(one_step_joint)
4976         two_step_joint.pushCorrespondence(cell_correspond)
4977         two_step_joint.pushCorrespondence(node_correspond)
4978         two_joint.pushStep(two_step_joint)
4979         one_joint.setLocalMeshName("maa1")
4980         one_joint.setRemoteMeshName("maa1")
4981         one_joint.setDescription("joint_description_1")
4982         one_joint.setJointName("joint_1")
4983         one_joint.setDomainNumber(1)
4984         two_joint.setLocalMeshName("maa1")
4985         two_joint.setRemoteMeshName("maa1")
4986         two_joint.setDescription("joint_description_2")
4987         two_joint.setJointName("joint_2")
4988         two_joint.setDomainNumber(2)
4989         joints=MEDFileJoints()
4990         joints.pushJoint(one_joint)
4991         joints.pushJoint(two_joint)
4992         mm.setJoints( joints )
4993         mm.write(fileNameWr,2)
4994         #
4995         mm=MEDFileMesh.New(fileNameWr)
4996         self.assertEqual( mm.getNumberOfJoints(), 2)
4997         jointsR = mm.getJoints();
4998         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4999         self.assertEqual( len( jointsR ), 2 )
5000         jointR1 = jointsR[0]
5001         jointR2 = jointsR[1]
5002         self.assertFalse( jointR1 is None )
5003         self.assertFalse( jointR2 is None )
5004         self.assertTrue( jointR1.isEqual( one_joint ))
5005         self.assertTrue( jointR2.isEqual( two_joint ))
5006         pass
5007
5008     @WriteInTmpDir
5009     def testMEDFileJoint1(self):
5010         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
5011         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
5012         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
5013         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
5014         joint1st_1=MEDFileJointOneStep()
5015         joint1st_1.pushCorrespondence(cell_correspond)
5016         joint1st_1.pushCorrespondence(node_correspond)
5017         joint1st_2=MEDFileJointOneStep()
5018         joint1st_2.pushCorrespondence(cell_correspond)
5019         joint1st_2.pushCorrespondence(node_correspond)
5020         joint1st_3=MEDFileJointOneStep()
5021         joint1st_3.pushCorrespondence(node_correspond)
5022         joint1st_3.pushCorrespondence(cell_correspond)
5023         joint1st_4=MEDFileJointOneStep()
5024         joint1st_4.pushCorrespondence(cell_correspond)
5025         joint1st_5=MEDFileJointOneStep()
5026         joint1st_5.pushCorrespondence(cell_correspon2)
5027         joint1st_6=MEDFileJointOneStep()
5028         joint1st_6.pushCorrespondence(cell_correspon3)
5029         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
5030         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
5031         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
5032         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
5033         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
5034         self.assertEqual(1,joint1st_6.getNumberOfCorrespondences())
5035         joint1st_6.clearCorrespondences()
5036         self.assertEqual(0,joint1st_6.getNumberOfCorrespondences())
5037         one_joint=MEDFileJoint()
5038         one_joint.pushStep(joint1st_1)
5039         one_joint.setLocalMeshName("maa1")
5040         one_joint.setRemoteMeshName("maa2")
5041         one_joint.setDescription("joint_description")
5042         one_joint.setJointName("joint_1")
5043         one_joint.setDomainNumber(1)
5044         self.assertEqual( "maa1", one_joint.getLocalMeshName())
5045         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5046         self.assertEqual( "joint_description", one_joint.getDescription())
5047         self.assertEqual( 1, one_joint.getDomainNumber())
5048         self.assertEqual( "joint_1", one_joint.getJointName())
5049         one_joint_copy = one_joint.deepCopy()
5050         self.assertEqual( "maa1", one_joint_copy.getLocalMeshName())
5051         self.assertEqual( "maa2", one_joint_copy.getRemoteMeshName())
5052         self.assertEqual( "joint_description", one_joint_copy.getDescription())
5053         self.assertEqual( 1, one_joint_copy.getDomainNumber())
5054         self.assertEqual( "joint_1", one_joint_copy.getJointName())
5055         pass
5056
5057     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5058     @WriteInTmpDir
5059     def testMEDFileSafeCall0(self):
5060         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5061         fname="Pyfile94.med"
5062         errfname="Pyfile94.err"
5063
5064         import os
5065         # first clean file if needed
5066         if os.path.exists(fname):
5067             os.remove(fname)
5068             pass
5069         # second : build a file from scratch
5070         m=MEDCouplingCMesh()
5071         arr=DataArrayDouble(11) ; arr.iota()
5072         m.setCoords(arr,arr)
5073         mm=MEDFileCMesh()
5074         mm.setMesh(m)
5075         mm.setName("mesh")
5076         mm.write(fname,2)
5077         # third : change permissions to remove write access on created file
5078         os.chmod(fname, 0o444)
5079         # four : try to append data on file -> check that it raises Exception
5080         f=MEDCouplingFieldDouble(ON_CELLS)
5081         f.setName("field")
5082         f.setMesh(m)
5083         f.setArray(DataArrayDouble(100))
5084         f.getArray()[:]=100.
5085         f.checkConsistencyLight()
5086         f1ts=MEDFileField1TS()
5087         f1ts.setFieldNoProfileSBT(f)
5088         # redirect stderr
5089         tmp=StdOutRedirect(errfname)
5090         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5091         del tmp
5092         #
5093         if os.path.exists(errfname):
5094             os.remove(errfname)
5095         #
5096         pass
5097
5098     @WriteInTmpDir
5099     def testUnivStatus1(self):
5100         """ Non regression test to check the effectiveness of univ write status."""
5101         fname="Pyfile95.med"
5102         arr=DataArrayDouble(10) ; arr.iota()
5103         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5104         mm=MEDFileCMesh() ; mm.setMesh(m)
5105         mm.setUnivNameWrStatus(False) # test is here
5106         mm.write(fname,2)
5107         mm=MEDFileCMesh(fname)
5108         self.assertEqual(mm.getUnivName(),"")
5109         mm.setUnivNameWrStatus(True)
5110         mm.write(fname,2)
5111         mm=MEDFileCMesh(fname)
5112         self.assertTrue(mm.getUnivName()!="")
5113         pass
5114
5115     @WriteInTmpDir
5116     def testEmptyMesh(self):
5117       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5118       with 0 tuples """
5119       fname = "Pyfile96.med"
5120       m = MEDCouplingUMesh('toto', 2)
5121       m.setCoords(DataArrayDouble([], 0, 2))
5122       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5123       mfu = MEDFileUMesh()
5124       mfu.setMeshAtLevel(0, m)
5125       mfu.write(fname, 2)
5126       mfu2 = MEDFileUMesh(fname)
5127       self.assertEqual('toto', mfu2.getName())
5128       lvl = mfu2.getNonEmptyLevels()
5129       self.assertEqual((), lvl)
5130
5131     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5132     def testMEDFileUMeshPickeling2(self):
5133       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5134       name="Mesh_1"
5135       grpName1="HAUT"
5136       grpName2="BASE"
5137       hauteur=1.
5138       nbOfNodesPerAxis=3
5139       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5140       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5141       mesh=MEDFileUMesh() ; mesh[0]=m
5142       m1=m.computeSkin() ; mesh[-1]=m1
5143       #
5144       bary1=m1.computeCellCenterOfMass()[:,2]
5145       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5146       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5147       mesh.setGroupsAtLevel(-1,[grp1,grp2])
5148
5149       st=pickle.dumps(mesh,2)
5150       mm=pickle.loads(st)
5151       st2=pickle.dumps(mm,2)
5152       mm2=pickle.loads(st2)
5153       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5154       pass
5155
5156     @WriteInTmpDir
5157     def testMEDFileEquivalence1(self):
5158       """ First check of equivalence implementation in MEDFileMesh"""
5159       fileName="Pyfile97.med"
5160       meshName="M_01"
5161       mm=MEDFileUMesh()
5162       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)])
5163       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5164       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])
5165       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5166       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])
5167       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5168       mm.getFamilyFieldAtLevel(-1)[:]=-2
5169       mm.getFamilyFieldAtLevel(0)[:]=0
5170       mm.addFamily("HOMARD________-1",-1)
5171       mm.addFamily("HOMARD________-2",-2)
5172       mm.addFamily("HOMARD________-3",-3)
5173       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5174
5175       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5176       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."
5177       mm.initializeEquivalences()
5178       eqs=mm.getEquivalences()
5179       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5180       eq0.setDescription(descEq)
5181       corr=DataArrayInt32([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
5182       eq0.setArray(-1,corr)
5183       self.assertEqual(eq0.getCell().size(),1)
5184       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5185       eq0.getCell().clear()
5186       self.assertEqual(eq0.getCell().size(),0)
5187       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5188       self.assertEqual(eq0.getCell().size(),1)
5189       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5190       mm.killEquivalences()
5191       mm.initializeEquivalences()
5192       eqs=mm.getEquivalences()
5193       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5194       eq0.setDescription(descEq)
5195       c=eq0.initCell()
5196       c.setArrayForType(NORM_QUAD4,corr)
5197       self.assertEqual(eq0.getCell().size(),1)
5198       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5199       mm2=mm.deepCopy()
5200       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5201       self.assertEqual(mm2.getEquivalences().size(),1)
5202       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5203       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5204       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5205       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5206       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5207       mm.write(fileName,2)
5208       #
5209       mm3=MEDFileMesh.New(fileName)
5210       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5211       pass
5212
5213     @WriteInTmpDir
5214     def testMEDFileForFamiliesPlayer1(self):
5215       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5216       fileName="Pyfile98.med"
5217       meshName="mesh"
5218       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5219       arr=DataArrayDouble(4) ; arr.iota()
5220       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5221       m=m.buildUnstructured()
5222       mm=MEDFileUMesh()
5223       mm[0]=m
5224       mm.setName(meshName)
5225       mm.setFamilyId("FAMILLE_ZERO",0)
5226       mm.getFamilyFieldAtLevel(0)[-3:]=-4
5227       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5228       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5229       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5230       mm.setFamilyFieldArr(1,d)
5231       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5232       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5233       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5234       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5235       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5236       mm.write(fileName,2)
5237       # now read such funny file !
5238       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5239       self.assertTrue(mm.isEqual(mm2,1e-16))
5240       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5241       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5242       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5243       pass
5244
5245     @WriteInTmpDir
5246     def testCartesianizer1(self):
5247       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5248       # UMesh non cart
5249       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5250       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5251       d0=DataArrayInt(16) ; d0[:]=0
5252       d1=DataArrayInt(9)  ; d1[:]=0
5253       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5254       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5255       ref0=mm.getCoords().getHiddenCppPointer()
5256       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5257       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5258       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5259       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5260       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5261       mm.setAxisType(AX_CYL) #<- important
5262       mm2=mm.cartesianize() # the trigger
5263       self.assertEqual(mm2.getAxisType(),AX_CART)
5264       mm.setAxisType(AX_CART) # this is here only to avoid complaints
5265       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5266       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5267       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5268       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5269       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5270       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5271       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5272       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5273       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5274       self.assertEqual(mm2.getName(),mm.getName())
5275       self.assertEqual(mm2.getDescription(),mm.getDescription())
5276       self.assertEqual(mm2.getTime(),mm.getTime())
5277       self.assertEqual(mm2.getTime(),mm.getTime())
5278       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5279       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5280       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5281       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5282       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5283       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5284       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5285       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5286       # UMesh cart
5287       mm.setAxisType(AX_CART)
5288       mm2=mm.cartesianize() # the trigger
5289       self.assertEqual(mm2.getAxisType(),AX_CART)
5290       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5291       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5292       # CurveLinearMesh non cart
5293       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5294       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5295       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5296       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5297       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5298       mm2=mm.cartesianize() # the trigger
5299       self.assertEqual(mm2.getAxisType(),AX_CART)
5300       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5301       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5302       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5303       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5304       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5305       self.assertEqual(mm2.getName(),mm.getName())
5306       self.assertEqual(mm2.getDescription(),mm.getDescription())
5307       self.assertEqual(mm2.getTime(),mm.getTime())
5308       self.assertEqual(mm2.getTime(),mm.getTime())
5309       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5310       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5311       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5312       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5313       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5314       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5315       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5316       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5317       # CurveLinearMesh cart
5318       mm.setAxisType(AX_CART)
5319       mm2=mm.cartesianize() # the trigger
5320       self.assertEqual(mm2.getAxisType(),AX_CART)
5321       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5322       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5323       # CMesh non cart
5324       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5325       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5326       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5327       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5328       mm2=mm.cartesianize() # the trigger
5329       self.assertEqual(mm2.getAxisType(),AX_CART)
5330       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5331       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5332       self.assertEqual(mm2.getName(),mm.getName())
5333       self.assertEqual(mm2.getDescription(),mm.getDescription())
5334       self.assertEqual(mm2.getTime(),mm.getTime())
5335       self.assertEqual(mm2.getTime(),mm.getTime())
5336       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5337       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5338       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5339       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5340       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5341       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5342       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5343       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5344       # CMesh cart
5345       mm.setAxisType(AX_CART)
5346       mm2=mm.cartesianize() # the trigger
5347       self.assertEqual(mm2.getAxisType(),AX_CART)
5348       self.assertTrue(isinstance(mm2,MEDFileCMesh))
5349       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5350       pass
5351
5352     @WriteInTmpDir
5353     def testCheckCoherency(self):
5354       m2 = MEDCouplingUMesh("2d", 2)
5355       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5356       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5357       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5358       mum = MEDFileUMesh()
5359       mum.setMeshAtLevel(0, m2)
5360       mum.setMeshAtLevel(-1, m1)
5361       mum.checkConsistency()
5362       mum2 = mum.deepCopy()
5363
5364       # Nodes
5365       arr = DataArrayInt([2]*4)
5366       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5367       self.assertRaises(InterpKernelException, mum.checkConsistency)
5368       mum=mum2; mum2=mum.deepCopy();
5369       arr = DataArrayInt([2]*4)
5370       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5371       self.assertRaises(InterpKernelException, mum.checkConsistency)
5372       mum=mum2; mum2=mum.deepCopy();
5373       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5374       self.assertRaises(InterpKernelException, mum.checkConsistency)
5375       mum=mum2; mum2=mum.deepCopy();
5376       arr = DataArrayAsciiChar(['tutu           x']*4)
5377       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5378       self.assertRaises(InterpKernelException, mum.checkConsistency)
5379
5380       # 2D
5381       mum=mum2; mum2=mum.deepCopy();
5382       arr = DataArrayInt([2]*2)
5383       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5384       self.assertRaises(InterpKernelException, mum.checkConsistency)
5385       mum=mum2; mum2=mum.deepCopy();
5386       arr = DataArrayInt([2]*2)
5387       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5388       self.assertRaises(InterpKernelException, mum.checkConsistency)
5389       mum=mum2; mum2=mum.deepCopy();
5390       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5391       self.assertRaises(InterpKernelException, mum.checkConsistency)
5392       mum=mum2; mum2=mum.deepCopy();
5393       arr = DataArrayAsciiChar(['tutu           x']*2)
5394       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5395       self.assertRaises(InterpKernelException, mum.checkConsistency)
5396
5397       # 1D
5398       mum=mum2; mum2=mum.deepCopy();
5399       arr = DataArrayInt([2]*5)
5400       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5401       self.assertRaises(InterpKernelException, mum.checkConsistency)
5402       mum=mum2; mum2=mum.deepCopy();
5403       arr = DataArrayInt([2]*5)
5404       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5405       self.assertRaises(InterpKernelException, mum.checkConsistency)
5406       mum=mum2; mum2=mum.deepCopy();
5407       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5408       self.assertRaises(InterpKernelException, mum.checkConsistency)
5409       mum=mum2; mum2=mum.deepCopy();
5410       arr = DataArrayAsciiChar(['tutu           x']*5)
5411       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5412       self.assertRaises(InterpKernelException, mum.checkConsistency)
5413
5414     @WriteInTmpDir
5415     def testCheckSMESHConsistency(self):
5416       m2 = MEDCouplingUMesh("2d", 2)
5417       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5418       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5419       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5420       mum = MEDFileUMesh()
5421       mum.setMeshAtLevel(0, m2)
5422       mum.setMeshAtLevel(-1, m1)
5423       mum.checkConsistency()
5424       mum.checkSMESHConsistency()
5425       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5426       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5427       mum.setRenumFieldArr(0, n2)
5428       mum.setRenumFieldArr(-1, n1)
5429       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5430       mum.setRenumFieldArr(-1, n1+100)
5431       mum.checkSMESHConsistency()
5432       pass
5433
5434     @WriteInTmpDir
5435     def testClearNodeAndCellNumbers(self):
5436       m2 = MEDCouplingUMesh("2d", 2)
5437       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5438       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5439       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5440       mum = MEDFileUMesh()
5441       mum.setMeshAtLevel(0, m2)
5442       mum.setMeshAtLevel(-1, m1)
5443       mum.checkConsistency()
5444       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5445       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5446       mum.setRenumFieldArr(0, n2)
5447       mum.setRenumFieldArr(-1, n1)
5448       mum.clearNodeAndCellNumbers()
5449       mum.checkSMESHConsistency()
5450       pass
5451
5452     @WriteInTmpDir
5453     def testCMeshSetFamilyFieldArrNull(self):
5454       meshName="mesh"
5455       fname="Pyfile99.med"
5456       arrX=DataArrayDouble([0,1,2,3])
5457       arrY=DataArrayDouble([0,1,2])
5458       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5459       mm=MEDFileCMesh() ; mm.setMesh(m)
5460       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5461       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5462       mm.setFamilyFieldArr(0,famCellIds)
5463       mm.setFamilyFieldArr(1,famNodeIds)
5464       mm.write(fname,2)
5465       mm=MEDFileMesh.New(fname)
5466       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5467       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5468       mm.setFamilyFieldArr(0,None)#<- bug was here
5469       mm.setFamilyFieldArr(1,None)#<- bug was here
5470       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5471       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5472       mm3=mm.deepCopy()
5473       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5474       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5475       mm.write(fname,2)
5476       mm2=MEDFileMesh.New(fname)
5477       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5478       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5479       pass
5480
5481     @WriteInTmpDir
5482     def testAppendFieldProfileOnIntField(self):
5483       fname="Pyfile100.med"
5484       arrX=DataArrayDouble([0,1,2,3])
5485       arrY=DataArrayDouble([0,1,2])
5486       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5487       mm=MEDFileCMesh()
5488       mm.setMesh(mesh)
5489       #
5490       fmts=MEDFileIntFieldMultiTS()
5491       pflName="PFL"
5492       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5493       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5494       fieldName="FieldOnCell"
5495       f.setTime(1.2,1,1) ; f.setName(fieldName)
5496       arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5497       fmts.appendFieldProfile(f,mm,0,pfl)
5498       #
5499       mm.write(fname,2)
5500       fmts.write(fname,0)
5501       #
5502       mm=MEDFileMesh.New(fname)
5503       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5504       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5505       self.assertEqual(fmts.getName(),fieldName)
5506       self.assertEqual(len(fmts),1)
5507       f1ts=fmts[0]
5508       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5509       self.assertEqual(pfltest.getName(),pflName)
5510       self.assertEqual(ftest.getName(),fieldName)
5511       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5512       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5513       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5514       self.assertEqual(ftest2.getTime(),f.getTime())
5515       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5516       pass
5517
5518     @WriteInTmpDir
5519     def testMEDFileFieldEasyField1(self):
5520       """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."""
5521       ## Basic test on cells on top level
5522       fname="Pyfile101.med"
5523       fieldName="field1"
5524       mm=MEDFileUMesh()
5525       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5526       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5527       m.allocateCells()
5528       m.insertNextCell(NORM_TRI3,[0,1,2])
5529       m.insertNextCell(NORM_TRI3,[3,4,5])
5530       m.insertNextCell(NORM_TRI3,[6,7,8])
5531       m.insertNextCell(NORM_TRI3,[9,10,11])
5532       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5533       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5534       mm[0]=m
5535       mm.write(fname,2)
5536       arr0=DataArrayDouble([10,11,12,13,100,101])
5537       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5538       f.setName(fieldName) ; f.setTime(2.,6,7)
5539       f0=f.deepCopy()
5540       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5541       ff.write(fname,0)
5542       arr2=arr0+1000 ; f.setArray(arr2)
5543       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5544       ff.write(fname,0)
5545       f1=f.deepCopy()
5546       ##
5547       mm=MEDFileMesh.New(fname)
5548       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5549       ftst0=f1ts.field(mm)
5550       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5551       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5552       ftst1=f1ts.field(mm)
5553       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5554       fmts=MEDFileFieldMultiTS(fname,fieldName)
5555       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5556       ## Basic test on nodes on top level
5557       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5558       f2.setName(fieldName)
5559       mm.write(fname,2)
5560       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5561       #
5562       mm=MEDFileMesh.New(fname)
5563       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5564       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5565       fmts=MEDFileFieldMultiTS(fname,fieldName)
5566       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5567       ## Node on elements
5568       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)
5569       f3.setName(fieldName) ; f3.checkConsistencyLight()
5570       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5571       #
5572       mm=MEDFileMesh.New(fname)
5573       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5574       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5575       ## Gauss
5576       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5577       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])
5578       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)
5579       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)
5580       f4.checkConsistencyLight()
5581       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5582       #
5583       mm=MEDFileMesh.New(fname)
5584       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5585       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5586       pass
5587
5588     @WriteInTmpDir
5589     def testMEDFileFieldEasyField2(self):
5590         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5591         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."""
5592         ## Basic test on cells on top level
5593         fname="Pyfile102.med"
5594         fieldName="field1"
5595         mm=MEDFileUMesh()
5596         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5597         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5598         m.allocateCells()
5599         m.insertNextCell(NORM_TRI3,[0,1,2])
5600         m.insertNextCell(NORM_TRI3,[3,4,5])
5601         m.insertNextCell(NORM_TRI3,[6,7,8])
5602         m.insertNextCell(NORM_TRI3,[9,10,11])
5603         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5604         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5605         mm[0]=m
5606         mm.write(fname,2)
5607         arr0=DataArrayInt32([10,11,12,13,100,101])
5608         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5609         f.setName(fieldName) ; f.setTime(2.,6,7)
5610         f0=f.deepCopy()
5611         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5612         ff.write(fname,0)
5613         arr2=arr0+1000 ; f.setArray(arr2)
5614         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5615         ff.write(fname,0)
5616         f1=f.deepCopy()
5617         ##
5618         mm=MEDFileMesh.New(fname)
5619         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5620         ftst0=f1ts.field(mm)
5621         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5622         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5623         ftst1=f1ts.field(mm)
5624         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5625         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5626         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5627         ## Basic test on nodes on top level
5628         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5629         f2.setName(fieldName)
5630         mm.write(fname,2)
5631         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5632         #
5633         mm=MEDFileMesh.New(fname)
5634         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5635         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5636         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5637         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5638         ## Node on elements
5639         f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt32([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)
5640         f3.setName(fieldName) ; f3.checkConsistencyLight()
5641         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5642         #
5643         mm=MEDFileMesh.New(fname)
5644         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5645         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5646         ## Gauss
5647         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5648         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])
5649         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)
5650         arr4=DataArrayInt32([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)
5651         f4.checkConsistencyLight()
5652         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5653         #
5654         mm=MEDFileMesh.New(fname)
5655         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5656         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5657         pass
5658
5659     @WriteInTmpDir
5660     def testMEDFileFieldEasyField3(self):
5661         """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."""
5662         fname="Pyfile103.med"
5663         fieldName="field1"
5664         mm=MEDFileUMesh()
5665         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5666         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5667         m.allocateCells()
5668         m.insertNextCell(NORM_TRI3,[0,1,2])
5669         m.insertNextCell(NORM_TRI3,[3,4,5])
5670         m.insertNextCell(NORM_TRI3,[6,7,8])
5671         m.insertNextCell(NORM_TRI3,[9,10,11])
5672         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5673         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5674         mm[-1]=m
5675         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5676         m0.allocateCells()
5677         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5678         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5679         mm[0]=m0
5680         mm.write(fname,2)
5681         # start slowly
5682         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5683         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5684         #
5685         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5686         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5687         # here f1 lying on level -1 not 0 check if "field" method detect it !
5688         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5689         f1.setMesh(mm[-1]) # -1 is very important
5690         f1.setTime(16.,3,4)
5691         f1.checkConsistencyLight()
5692         mm.write(fname,2)
5693         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5694         #
5695         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5696         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5697         # nodes on elements
5698         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5699         f3.setMesh(mm[-1]) # this line is important
5700         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)
5701         f3.setName(fieldName) ; f3.checkConsistencyLight()
5702         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5703         #
5704         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5705         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5706         # gauss
5707         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5708         f4.setMesh(mm[-1]) # this line is important
5709         f4.setName(fieldName)
5710         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])
5711         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)
5712         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)
5713         f4.checkConsistencyLight()
5714         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5715         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5716         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5717         pass
5718
5719     @WriteInTmpDir
5720     def testMEDFileFieldEasyField4(self):
5721         """ Same than testMEDFileFieldEasyField3 but with integers"""
5722         fname="Pyfile104.med"
5723         fieldName="field1"
5724         mm=MEDFileUMesh()
5725         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5726         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5727         m.allocateCells()
5728         m.insertNextCell(NORM_TRI3,[0,1,2])
5729         m.insertNextCell(NORM_TRI3,[3,4,5])
5730         m.insertNextCell(NORM_TRI3,[6,7,8])
5731         m.insertNextCell(NORM_TRI3,[9,10,11])
5732         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5733         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5734         mm[-1]=m
5735         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5736         m0.allocateCells()
5737         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5738         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5739         mm[0]=m0
5740         mm.write(fname,2)
5741         # start slowly
5742         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5743         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5744         #
5745         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5746         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5747         # here f1 lying on level -1 not 0 check if "field" method detect it !
5748         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5749         f1.setMesh(mm[-1]) # -1 is very important
5750         f1.setTime(16.,3,4)
5751         f1.checkConsistencyLight()
5752         mm.write(fname,2)
5753         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5754         #
5755         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5756         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5757         # nodes on elements
5758         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5759         f3.setMesh(mm[-1]) # this line is important
5760         arr3=DataArrayInt32([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)
5761         f3.setName(fieldName) ; f3.checkConsistencyLight()
5762         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5763         #
5764         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5765         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5766         # gauss
5767         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5768         f4.setMesh(mm[-1]) # this line is important
5769         f4.setName(fieldName)
5770         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])
5771         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)
5772         arr4=DataArrayInt32([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)
5773         f4.checkConsistencyLight()
5774         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5775         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5776         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5777         pass
5778
5779     @WriteInTmpDir
5780     def testMEDFileFieldEasyField5(self):
5781         """More and more difficult now look at how profiles are managed by "field" method."""
5782         fname="Pyfile105.med"
5783         fieldName="field1"
5784         mm=MEDFileUMesh()
5785         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5786         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5787         m.allocateCells()
5788         m.insertNextCell(NORM_TRI3,[0,1,2])
5789         m.insertNextCell(NORM_TRI3,[3,4,5])
5790         m.insertNextCell(NORM_TRI3,[6,7,8])
5791         m.insertNextCell(NORM_TRI3,[9,10,11])
5792         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5793         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5794         mm[0]=m
5795         mm.write(fname,2)
5796         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5797         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5798         #
5799         arr0=DataArrayDouble([10,11,12,13])
5800         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5801         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5802         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5803         ff.write(fname,0)
5804         #
5805         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5806         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5807         # more complicated -> multi level
5808         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5809         m0.allocateCells()
5810         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5811         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5812         mm2=MEDFileUMesh()
5813         mm2[0]=m0 ; mm2[-1]=m
5814         #
5815         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5816         #
5817         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5818         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5819         pass
5820
5821     @WriteInTmpDir
5822     def testExtractPart1(self):
5823         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)])
5824         meshName="mesh"
5825         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5826         m0.insertNextCell(NORM_TRI3,[8,4,3])
5827         m0.insertNextCell(NORM_TRI3,[8,9,4])
5828         m0.insertNextCell(NORM_TRI3,[7,13,8])
5829         m0.insertNextCell(NORM_TRI3,[7,12,13])
5830         m0.insertNextCell(NORM_TRI3,[0,6,1])
5831         m0.insertNextCell(NORM_TRI3,[0,5,6])
5832         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5833         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5834         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5835         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5836         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5837         #
5838         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5839         m1.insertNextCell(NORM_SEG2,[10,5])
5840         m1.insertNextCell(NORM_SEG2,[5,0])
5841         m1.insertNextCell(NORM_SEG2,[0,1])
5842         m1.insertNextCell(NORM_SEG2,[1,2])
5843         m1.insertNextCell(NORM_SEG2,[2,3])
5844         m1.insertNextCell(NORM_SEG2,[3,4])
5845         m1.insertNextCell(NORM_SEG2,[4,9])
5846         m1.insertNextCell(NORM_SEG2,[9,14])
5847         m1.insertNextCell(NORM_SEG2,[14,13])
5848         m1.insertNextCell(NORM_SEG2,[13,12])
5849         m1.insertNextCell(NORM_SEG2,[12,11])
5850         m1.insertNextCell(NORM_SEG2,[11,10])
5851         mm=MEDFileUMesh()
5852         mm[0]=m0 ; mm[-1]=m1
5853         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5854         tab={} #
5855         tab[0]=DataArrayInt([0,2,3,4,6,7])
5856         tab[-1]=DataArrayInt([2,3,4,5,9])
5857         fs=MEDFileFields()
5858         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5859         tab[1]=arr0
5860         #
5861         fname0="Field0"
5862         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5863         t0=(16.5,3,4)
5864         ic=["toto [m]"]
5865         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5866         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5867         f0.setMesh(m0) ; f0.setName(fname0)
5868         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5869         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5870         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]))
5871         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5872         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5873         fmts.pushBackTimeStep(f1ts)
5874         #
5875         mmOut=mm.extractPart(tab)
5876         #
5877         fsPart0=fs.extractPart(tab,mm)
5878         self.assertEqual(len(fsPart0),1)
5879         fmtsP=fsPart0[0]
5880         self.assertEqual(len(fmtsP),1)
5881         f1ts=fmtsP[0]
5882         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5883         #
5884         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5885         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5886         #
5887         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5888         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5889         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5890         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5891         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5892         #
5893         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5894         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5895         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5896         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5897         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5898         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5899         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5900         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5901         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5902         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5903         #
5904         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5905         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5906         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5907         # multisteps
5908         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5909         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5910         for i,tt in enumerate(tss):
5911             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5912             myarr=arr0_0+i*1000.
5913             f0.setArray(myarr)
5914             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5915             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5916             pass
5917         fsPart1=fs.extractPart(tab,mm)
5918         self.assertEqual(len(fsPart1),1)
5919         fmtsP=fsPart1[0]
5920         self.assertEqual(len(fmtsP),len(tss))
5921         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5922             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5923             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5924             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5925             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5926             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5927             self.assertEqual(fPart.getTime(),list(tt))
5928             pass
5929         pass
5930
5931     @WriteInTmpDir
5932     def testSymmetryPlusAggregationMFD1(self):
5933         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5934         fname1="Pyfile106_1.med"
5935         fname2="Pyfile106_2.med"
5936         fname3="Pyfile106_3.med"
5937         meshName="mesh"
5938         mm1=MEDFileUMesh()
5939         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5940         mm1.setCoords(da1)
5941         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5942         mm1_0.setCoords(da1)
5943         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5944         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5945         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5946         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5947         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5948         mm1[0]=mm1_0
5949         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5950         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5951         #
5952         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5953         mm1_1.setCoords(da1)
5954         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5955         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5956         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5957         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5958         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5959         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5960         mm1[-1]=mm1_1
5961         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5962         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5963         for i in range(1,10):
5964             mm1.setFamilyId("F%d"%i,i)
5965         mm1.setFamilyId("FAMILLE_ZERO",0)
5966         mm1.setFamilyId("H1",100)
5967         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5968         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5969         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5970         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5971         ##############
5972         mm2=MEDFileUMesh()
5973         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]"])
5974         mm2.setCoords(da1)
5975         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5976         mm2_0.setCoords(da1)
5977         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5978         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5979         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5980         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5981         mm2[0]=mm2_0
5982         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5983         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5984         #
5985         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5986         mm2_1.setCoords(da1)
5987         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5988         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5989         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5990         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5991         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5992         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5993         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5994         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5995         mm2[-1]=mm2_1
5996         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5997         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5998         for i in range(1,12):
5999             mm2.setFamilyId("G%d"%i,i+30)
6000         mm2.setFamilyId("H1",100)
6001         mm2.setFamilyId("FAMILLE_ZERO",0)
6002         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
6003         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
6004         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
6005         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
6006         #
6007         mm=MEDFileUMesh.Aggregate([mm1,mm2])
6008         #######
6009         def CheckMesh(tester,mm):
6010             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]"])
6011             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
6012             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])))
6013             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
6014             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])))
6015             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
6016             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
6017             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
6018             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
6019             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
6020             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)]
6021             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6022             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6023             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
6024             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
6025             pass
6026         CheckMesh(self,mm)
6027         ##
6028         fieldName="zeField"
6029         t1=(2.3,3,5)
6030         t2=(5.6,7,12)
6031         infoc=["dd [W]","eee [kA]"]
6032         ##
6033         fmts1=MEDFileFieldMultiTS()
6034         f1ts1=MEDFileField1TS()
6035         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
6036         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
6037         arr1.setInfoOnComponents(infoc)
6038         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
6039         f1_1.checkConsistencyLight()
6040         f1ts1.setFieldNoProfileSBT(f1_1)
6041         #
6042         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
6043         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
6044         arr2.setInfoOnComponents(infoc)
6045         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
6046         f1_2.checkConsistencyLight()
6047         f1ts1.setFieldNoProfileSBT(f1_2)
6048         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6049         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6050         arr3.setInfoOnComponents(infoc)
6051         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6052         f1_3.checkConsistencyLight()
6053         f1ts1.setFieldNoProfileSBT(f1_3)
6054         fmts1.pushBackTimeStep(f1ts1)
6055         #
6056         f1ts2=f1ts1.deepCopy()
6057         f1ts2.setTime(t2[1],t2[2],t2[0])
6058         f1ts2.getUndergroundDataArray()[:]+=2000
6059         fmts1.pushBackTimeStep(f1ts2)
6060         ### fmts2
6061         fmts2=MEDFileFieldMultiTS()
6062         f1ts3=MEDFileField1TS()
6063         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6064         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6065         arr4.setInfoOnComponents(infoc)
6066         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6067         f2_1.checkConsistencyLight()
6068         f1ts3.setFieldNoProfileSBT(f2_1)
6069         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6070         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6071         arr5.setInfoOnComponents(infoc)
6072         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6073         f2_2.checkConsistencyLight()
6074         f1ts3.setFieldNoProfileSBT(f2_2)
6075         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6076         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6077         arr6.setInfoOnComponents(infoc)
6078         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6079         f2_3.checkConsistencyLight()
6080         f1ts3.setFieldNoProfileSBT(f2_3)
6081         fmts2.pushBackTimeStep(f1ts3)
6082         #
6083         f1ts4=f1ts3.deepCopy()
6084         f1ts4.setTime(t2[1],t2[2],t2[0])
6085         f1ts4.getUndergroundDataArray()[:]+=2000
6086         fmts2.pushBackTimeStep(f1ts4)
6087         #
6088         mfd1=MEDFileData()
6089         mfd1.setMeshes(MEDFileMeshes())
6090         mfd1.getMeshes().pushMesh(mm1)
6091         mfd1.setFields(MEDFileFields())
6092         mfd1.getFields().pushField(fmts1)
6093         #
6094         mfd2=MEDFileData()
6095         mfd2.setMeshes(MEDFileMeshes())
6096         mfd2.getMeshes().pushMesh(mm2)
6097         mfd2.setFields(MEDFileFields())
6098         mfd2.getFields().pushField(fmts2)
6099         # ze Call !
6100         mfd=MEDFileData.Aggregate([mfd1,mfd2])
6101         def CheckMFD(tester,mfd):
6102             tester.assertEqual(len(mfd.getMeshes()),1)
6103             tester.assertEqual(len(mfd.getFields()),1)
6104             CheckMesh(self,mfd.getMeshes()[0])
6105             tester.assertEqual(len(mfd.getFields()[0]),2)
6106             zeF1=mfd.getFields()[0][0]
6107             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6108             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6109             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6110             ref.renumberCells(o2n)
6111             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6112             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6113             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6114             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6115             ref.renumberCells(o2n)
6116             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6117             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6118             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6119             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6120             ref.renumberCells(o2n)
6121             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6122             #
6123             zeF2=mfd.getFields()[0][1]
6124             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6125             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6126             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6127             ref.renumberCells(o2n)
6128             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6129             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6130             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6131             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6132             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6133             ref.renumberCells(o2n)
6134             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6135             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6136             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6137             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6138             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6139             ref.renumberCells(o2n)
6140             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6141             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6142         CheckMFD(self,mfd)
6143         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6144         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6145         CheckMFD(self,mfd)
6146         pass
6147
6148     @WriteInTmpDir
6149     def testAggregateWithGroups(self):
6150         """ Testing MEDFileUMesh::Aggretate when groups are present. """
6151         def generate(grp_name, offset):
6152             coo = DataArrayDouble([0., 1., 2.])
6153             coo += offset
6154             m = MEDCouplingCMesh("toto")
6155             m.setCoords(coo, coo)
6156             m = m.buildUnstructured()
6157             mu = MEDFileUMesh.New()
6158             mu.setMeshAtLevel(0, m)
6159             g = DataArrayInt([0])
6160             g.setName(grp_name)
6161             g2 = DataArrayInt([1])
6162             g2.setName("common")  # make a common group for all meshes being merged
6163             mu.setGroupsAtLevel(0, [g, g2])
6164             return mu
6165
6166         m1 = generate("A", 0.)
6167         m2 = generate("B", 2.)
6168         mm = MEDFileUMesh.Aggregate([m1,m2])
6169
6170         self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6171         self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6172         refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6173         self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6174         self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6175         self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6176         self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6177         self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6178         self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6179
6180         pass
6181
6182     @WriteInTmpDir
6183     def testExtrudedMesh1(self):
6184         fname="Pyfile107.med"
6185         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6186         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6187         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6188         mm=MEDFileUMesh(ex)
6189         mm.write(fname,2)
6190         ex2=mm.convertToExtrudedMesh()
6191         mm2=MEDFileMesh.New(fname)
6192         ex3=mm2.convertToExtrudedMesh()
6193         self.assertTrue(ex.isEqual(ex2,1e-12))
6194         self.assertTrue(ex.isEqual(ex3,1e-12))
6195         pass
6196
6197     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6198     @WriteInTmpDir
6199     def testWriteInto30(self):
6200         fname="Pyfile108.med"
6201         fname2="Pyfile109.med"
6202         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6203         mm=MEDFileUMesh() ; mm[0]=m
6204         mm.setFamilyId("FAMILLE_ZERO",0)
6205         #
6206         mm.write33(fname,2)
6207         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6208         mm2=MEDFileUMesh(fname)
6209         self.assertTrue(mm.isEqual(mm2,1e-12))
6210         #
6211         mm.write(fname2,2)
6212         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
6213         pass
6214
6215     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6216     @WriteInTmpDir
6217     def testPickelizationOfMEDFileObjects1(self):
6218         fname="Pyfile110.med"
6219         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)
6220         m0=MEDCouplingUMesh("Mesh",2)
6221         m0.allocateCells(5)
6222         m0.insertNextCell(NORM_TRI3,[1,4,2])
6223         m0.insertNextCell(NORM_TRI3,[4,5,2])
6224         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6225         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6226         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6227         m0.finishInsertingCells()
6228         m0.setCoords(coo)
6229         m1=MEDCouplingUMesh(m0.getName(),1)
6230         m1.allocateCells(9)
6231         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6232         for i in range(9):
6233             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6234             pass
6235         m1.finishInsertingCells()
6236         m1.setCoords(coo)
6237         #
6238         m=MEDFileUMesh()
6239         m.setMeshAtLevel(0,m0)
6240         m.setMeshAtLevel(-1,m1)
6241         #
6242         dt=3 ; it=2 ; tim=4.5
6243         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6244         fieldNode0.setName("fieldNode0")
6245         fieldNode0.setTime(tim,dt,it)
6246         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6247         arr=DataArrayDouble([10,11,12,13,14])
6248         fieldNode0.setArray(arr)
6249         f0=MEDFileField1TS()
6250         f0.setFieldProfile(fieldNode0,m,0,pfl0)
6251         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6252         fieldNode1.setName("fieldNode1")
6253         fieldNode1.setTime(tim,dt,it)
6254         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6255         arr1=DataArrayDouble([20,21,22,23,24,25,26])
6256         fieldNode1.setArray(arr1)
6257         f1=MEDFileField1TS()
6258         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6259         mfd=MEDFileData()
6260         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6261         mfd.getMeshes().pushMesh(m)
6262         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6263         mfd.getFields().pushField(fmts)
6264         # first start gently
6265         d=mfd.serialize()
6266         mfd2=MEDFileData(d)
6267         self.assertEqual(len(mfd2.getMeshes()),1)
6268         self.assertEqual(len(mfd2.getFields()),1)
6269         self.assertEqual(len(mfd2.getFields()[0]),1)
6270         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6271         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6272         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6273         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6274         # OK now end of joke -> serialization of MEDFileData
6275         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6276         mfd3=pickle.loads(st)
6277         # check of object
6278         self.assertEqual(len(mfd3.getMeshes()),1)
6279         self.assertEqual(len(mfd3.getFields()),1)
6280         self.assertEqual(len(mfd3.getFields()[0]),1)
6281         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6282         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6283         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6284         # serialization of MEDFileFields
6285         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6286         fs4=pickle.loads(st)
6287         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6288         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6289         # serialization of MEDFileFieldMulitTS
6290         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6291         fmts5=pickle.loads(st)
6292         ff5=fmts5[0].field(mfd3.getMeshes()[0])
6293         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6294         # serialization of MEDFileField1TS
6295         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6296         f1ts6=pickle.loads(st)
6297         ff6=f1ts6.field(mfd3.getMeshes()[0])
6298         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6299         # serialization of MEDFileMeshes
6300         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6301         ms7=pickle.loads(st)
6302         self.assertEqual(len(ms7),1)
6303         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6304         pass
6305
6306     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6307     @WriteInTmpDir
6308     def testPickelizationOfMEDFileObjects2(self):
6309         # CMesh
6310         self.internalMEDMesh6() # generates MEDFileMesh5.med file
6311         mm=MEDFileMesh.New("MEDFileMesh5.med")
6312         self.assertTrue(isinstance(mm,MEDFileCMesh))
6313         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6314         mm2=pickle.loads(st)
6315         self.assertTrue(isinstance(mm2,MEDFileCMesh))
6316         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6317         # CurveLinear
6318         self.internalCurveLinearMesh1() # generates Pyfile55.med
6319         mm=MEDFileMesh.New("Pyfile55.med")
6320         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6321         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6322         mm3=pickle.loads(st)
6323         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6324         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6325         self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6326         # MEDFileIntFieldMultiTS
6327         fs4=MEDFileFields("Pyfile63.med")
6328         ms4=MEDFileMeshes("Pyfile63.med")
6329         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6330         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6331         fmts5=pickle.loads(st)
6332         self.assertEqual(len(fs4[0]),len(fmts5))
6333         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6334         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6335         # MEDFileIntField1TS
6336         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6337         f1ts6=pickle.loads(st)
6338         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6339         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6340         # MEDFileParameters
6341         self.internalParameters1()# generates Pyfile56.med
6342         params=MEDFileParameters("Pyfile56.med")
6343         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6344         params7=pickle.loads(st)
6345         self.assertEqual(len(params),len(params7))
6346         for i in range(len(params)):
6347             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6348             pass
6349         pass
6350
6351     @WriteInTmpDir
6352     def testGlobalNumOnNodes1(self):
6353         """Test global number on nodes here. Used by partitionners."""
6354         fname="Pyfile112.med"
6355         arr=DataArrayDouble(5) ; arr.iota()
6356         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6357         m.setName("mesh")
6358         mm=MEDFileUMesh()
6359         mm[0]=m
6360         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6361         d=DataArrayInt([7,8,9,2,0])
6362         dRef=d.deepCopy()
6363         mm.setGlobalNumFieldAtLevel(1,d)
6364         mm.checkConsistency()
6365         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6366         mm.checkConsistency()
6367         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6368         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6369         mm.write(fname,2)
6370         mm2=MEDFileMesh.New(fname)
6371         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6372         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6373         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6374         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6375         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6376         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6377         pass
6378
6379     @WriteInTmpDir
6380     def testPartialReadOfEntities1(self):
6381         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6382         fname="Pyfile113.med"
6383         arr=DataArrayDouble(5) ; arr.iota()
6384         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6385         m.setName("mesh")
6386         mm=MEDFileUMesh()
6387         mm[0]=m
6388         #
6389         fieldName="Field"
6390         ts1=(5.,1,2)
6391         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6392         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6393         f1.setTime(*ts1)
6394         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6395         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6396         f2.setTime(*ts1)
6397         f1ts=MEDFileField1TS()
6398         f1ts.setFieldNoProfileSBT(f1)
6399         f1ts.setFieldNoProfileSBT(f2)
6400         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6401         f1ts_2=f1ts.deepCopy()
6402         f1ts_2.getUndergroundDataArray()[:]+=2
6403         f1ts_2.setTime(3,4,6.)
6404         fmts=MEDFileFieldMultiTS()
6405         fmts.pushBackTimeStep(f1ts)
6406         fmts.pushBackTimeStep(f1ts_2)
6407         #
6408         mm.write(fname,2)
6409         fmts.write(fname,0)
6410         #
6411         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6412         mm=MEDFileMesh.New(fname)
6413         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)
6414         fs.loadArrays()
6415         self.assertEqual(len(fs),1)
6416         fmts=fs[0]
6417         self.assertEqual(len(fmts),2)
6418         ff0=fmts[0] ; ff1=fmts[1]
6419         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6420         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6421         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6422         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6423         pass
6424
6425     @WriteInTmpDir
6426     def testFloat32InMEDFileFieldStar1(self):
6427         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6428         fname="Pyfile114.med"
6429         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6430         f1=f1.convertToFloatField()
6431         m1=f1.getMesh()
6432         mm1=MEDFileUMesh.New()
6433         mm1.setCoords(m1.getCoords())
6434         mm1.setMeshAtLevel(0,m1)
6435         mm1.setName(m1.getName())
6436         mm1.write(fname,2)
6437         ff1=MEDFileFloatField1TS()
6438         ff1.setFieldNoProfileSBT(f1)
6439         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6440         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6441         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6442         ff1.write(fname,0)
6443         a,b=ff1.getUndergroundDataArrayExt()
6444         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6445         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6446         ff2=MEDFileAnyTypeField1TS.New(fname)
6447         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6448         self.assertEqual(ff2.getTime(),[0,1,2.0])
6449         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6450         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6451         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6452         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6453         ff2.setTime(1,2,3.)
6454         c=ff2.getUndergroundDataArray() ; c*=2
6455         ff2.write(fname,0) # 2 time steps in
6456         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6457         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6458         self.assertEqual(len(ffs1),2)
6459         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6460         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6461         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6462         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6463         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6464         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6465         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6466         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6467         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6468         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6469         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6470         for it in ffs1:
6471             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6472             bc+=a.getArray()
6473             pass
6474         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6475         nf1=MEDCouplingFieldFloat(ON_NODES)
6476         nf1.setTime(9.,10,-1)
6477         nf1.setMesh(f1.getMesh())
6478         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6479         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6480         nff1=MEDFileFloatField1TS.New()
6481         nff1.setFieldNoProfileSBT(nf1)
6482         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6483         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6484         nff1.write(fname,0)
6485         #
6486         nf2=MEDCouplingFieldFloat(ON_NODES)
6487         nf2.setTime(19.,20,-11)
6488         nf2.setMesh(f1.getMesh())
6489         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6490         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6491         nff2=MEDFileFloatField1TS.New()
6492         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6493         nff2.setFieldProfile(nf2,mm1,0,npfl)
6494         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6495         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6496         self.assertTrue(b.isEqual(npfl))
6497         self.assertTrue(a.isEqual(narr2,1e-7))
6498         nff2.write(fname,0)
6499         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6500         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6501         self.assertTrue(b.isEqual(npfl))
6502         self.assertTrue(a.isEqual(narr2,1e-7))
6503         #
6504         nf3=MEDCouplingFieldDouble(ON_NODES)
6505         nf3.setName("VectorFieldOnNodesDouble")
6506         nf3.setTime(29.,30,-21)
6507         nf3.setMesh(f1.getMesh())
6508         nf3.setArray(f1.getMesh().getCoords())
6509         nff3=MEDFileField1TS.New()
6510         nff3.setFieldNoProfileSBT(nf3)
6511         nff3.write(fname,0)
6512         fs=MEDFileFields(fname)
6513         self.assertEqual(len(fs),4)
6514         ffs=[it for it in fs]
6515         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6516         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6517         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6518         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6519         #
6520         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6521         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6522         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6523         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6524         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6525         #
6526         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6527         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6528         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6529         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6530         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6531         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6532         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6533         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6534         #
6535         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6536         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6537         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6538         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6539         pass
6540
6541     @WriteInTmpDir
6542     def testPenta18_1(self):
6543         """EDF8478 : Test of read/write of penta18"""
6544         fname="Pyfile115.med"
6545         arr=DataArrayDouble([
6546             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6547             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6548             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6549             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6550             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6551             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6552         m=MEDCouplingUMesh("mesh",3)
6553         m.setCoords(arr)
6554         m.allocateCells(1)
6555         m.insertNextCell(NORM_PENTA18,list(range(18)))
6556         m.checkConsistencyLight()
6557         #
6558         f=MEDCouplingFieldDouble(ON_NODES)
6559         f.setMesh(m)
6560         f.setName("FieldOnPenta18")
6561         f.setArray(DataArrayDouble(list(range(18))))
6562         f.checkConsistencyLight()
6563         #
6564         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6565         #
6566         f2=MEDCouplingFieldDouble(ON_NODES)
6567         f2.setMesh(m)
6568         f2.setName("FieldOnPenta18Sub")
6569         f2.setArray(DataArrayDouble(list(range(18))))
6570         f2.checkConsistencyLight()
6571         WriteField(fname,f2,True)
6572         f3=ReadField(fname)
6573         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6574         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6575         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6576         pass
6577
6578     @WriteInTmpDir
6579     def testFieldsLinearToQuadratic(self):
6580         fname="Pyfile117.med"
6581         arr=DataArrayDouble([0,1])
6582         m=MEDCouplingCMesh();
6583         m.setCoords(arr,arr,arr)
6584         m=m.buildUnstructured()
6585         m2=m.deepCopy()
6586         m2.translate([2,0,0])
6587         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6588         m3.setName("mesh")
6589         mm=MEDFileUMesh()
6590         mm[0]=m3
6591         mmq=mm.linearToQuadratic(0)
6592         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6593         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6594         #
6595         f=MEDCouplingFieldDouble(ON_NODES)
6596         f.setName("field")
6597         f.setMesh(m3)
6598         f.setTime(3.,1,2)
6599         arr=DataArrayDouble(m3.getNumberOfNodes())
6600         arr.iota()
6601         f.setArray(arr)
6602         f1ts=MEDFileField1TS()
6603         f1ts.setFieldNoProfileSBT(f)
6604         fmts=MEDFileFieldMultiTS()
6605         fmts.pushBackTimeStep(f1ts)
6606         f1ts_2=f1ts.deepCopy()
6607         f1ts_2.setTime(3,4,5.)
6608         f1ts_2.getUndergroundDataArray()[:]*=2.
6609         fmts.pushBackTimeStep(f1ts_2)
6610         fs=MEDFileFields()
6611         fs.pushField(fmts)
6612         fs2=fs.linearToQuadratic(mms,mmsq)
6613         self.myTester1(fs2,mmsq[0])
6614         # A small Write/Read and test again
6615         mms.write(fname,2) ; fs.write(fname,0)
6616         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6617         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6618         fs2=fs.linearToQuadratic(mms,mmqs)
6619         self.myTester1(fs2,mmqs[0])
6620         pass
6621
6622     def myTester1(self,fs2,mmq):
6623         dataExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,0.,1.,0.,1.,1.,0.,0.,0.,1.,1.,0.,1.,0.,1.,1.,1.,1.,1.,2.,0.,0.,3.,0.,0.,2.,1.,0.,3.,1.,0.,2.,0.,1.,3.,0.,1.,2.,1.,1.,3.,1.,1.,0.5, 0.,0.,0.,0.5, 0.,0.5, 1.,0.,1.,0.5, 0.,0.5, 0.,1.,0.,0.5, 1.,0.5, 1.,1.,1.,0.5, 1.,1.,0.,0.5, 0.,0.,0.5, 0.,1.,0.5, 1.,1.,0.5, 2.5, 0.,0.,2.,0.5, 0.,2.5, 1.,0.,3.,0.5, 0.,2.5, 0.,1.,2.,0.5, 1.,2.5, 1.,1.,3.,0.5, 1.,3.,0.,0.5, 2.,0.,0.5, 2.,1.,0.5, 3.,1.,0.5],40,3)
6624         dataExp1=DataArrayInt([1,0,2,3,5,4,6,7,16,17,18,19,20,21,22,23,24,25,26,27,9,8,10,11,13,12,14,15,28,29,30,31,32,33,34,35,36,37,38,39])
6625         dataExp2=DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0.5,1,2.5,2,4.5,5,6.5,6,3,2,4,5,8.5,9,10.5,10,12.5,13,14.5,14,11,10,12,13])
6626         fToTest=fs2[0][0].field(mmq)
6627         self.assertEqual(fToTest.getTime(),[3.,1,2])
6628         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6629         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6630         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6631         self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6632         # testing 2nd timestep
6633         fToTest=fs2[0][1].field(mmq)
6634         self.assertEqual(fToTest.getTime(),[5.,3,4])
6635         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6636         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6637         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6638         self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6639         pass
6640
6641     @WriteInTmpDir
6642     def testFieldsLinearToQuadratic2(self):
6643         """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6644         GeneratePyfile18(self)
6645         fname="Pyfile118.med"
6646         arr=DataArrayDouble([0,1])
6647         m=MEDCouplingCMesh();
6648         m.setCoords(arr,arr,arr)
6649         m=m.buildUnstructured()
6650         m2=m.deepCopy()
6651         m2.translate([2,0,0])
6652         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6653         m3.setName("mesh")
6654         # add a point for fun
6655         m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6656         #
6657         mm=MEDFileUMesh()
6658         mm[0]=m3
6659         mmq=mm.linearToQuadratic(0)
6660         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6661         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6662         #
6663         f=MEDCouplingFieldDouble(ON_NODES)
6664         f.setName("field")
6665         f.setMesh(m3)
6666         f.setTime(3.,1,2)
6667         arr=DataArrayDouble(8) ; arr.iota()
6668         arr.iota()
6669         f.setArray(arr)
6670         f1ts=MEDFileField1TS()
6671         pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6672         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6673         f1ts_2=f1ts.deepCopy()
6674         f1ts_2.setTime(3,4,5.)
6675         f1ts_2.getUndergroundDataArray()[:]*=4.
6676         fmts=MEDFileFieldMultiTS()
6677         fmts.pushBackTimeStep(f1ts)
6678         fmts.pushBackTimeStep(f1ts_2)
6679         fs=MEDFileFields()
6680         fs.pushField(fmts)
6681         fs2=fs.linearToQuadratic(mms,mmsq)
6682         mms.write(fname,2) ; fs.write(fname,0)
6683         #
6684         self.myTester2(fs2,mmq)
6685         # Read/write
6686         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6687         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6688         fs2=fs.linearToQuadratic(mms,mmqs)
6689         self.myTester2(fs2,mmq)
6690         ## More vicious add single node 16
6691         mm=MEDFileUMesh()
6692         mm[0]=m3
6693         mmq=mm.linearToQuadratic(0)
6694         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6695         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6696         #
6697         f=MEDCouplingFieldDouble(ON_NODES)
6698         f.setName("field")
6699         f.setMesh(m3)
6700         f.setTime(3.,1,2)
6701         arr=DataArrayDouble(9) ; arr.iota()
6702         arr.iota()
6703         f.setArray(arr)
6704         f1ts=MEDFileField1TS()
6705         pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6706         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6707         fmts=MEDFileFieldMultiTS()
6708         fmts.pushBackTimeStep(f1ts)
6709         fs=MEDFileFields()
6710         fs.pushField(fmts)
6711         fs2=fs.linearToQuadratic(mms,mmsq)
6712         #
6713         pflExpected=DataArrayInt([8,9,10,11,12,13,14,15,16,29,30,31,32,33,34,35,36,37,38,39,40]) ; pflExpected.setName("pfl_NODE")
6714         f1tsToTest=fs2[0][0]
6715         exp1=DataArrayDouble([0,1,2,3,4,5,6,7,8,0.5,1,2.5,2,4.5,5,6.5,6,3,2,4,5])
6716         assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6717         assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6718         assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6719         pass
6720
6721     def myTester2(self,fs2,mmq):
6722         pflExpected=DataArrayInt([8,9,10,11,12,13,14,15,29,30,31,32,33,34,35,36,37,38,39,40]) ; pflExpected.setName("pfl_NODE")
6723         f1tsToTest=fs2[0][0]
6724         exp1=DataArrayDouble([0,1,2,3,4,5,6,7,0.5,1,2.5,2,4.5,5,6.5,6,3,2,4,5])
6725         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6726         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6727         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6728         fToTest=fs2[0][0].field(mmq)
6729         self.assertEqual(fToTest.getTime(),[3.,1,2])
6730         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6731         self.assertTrue(mTest.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19])))
6732         self.assertTrue(mTest.getCoords().isEqual(DataArrayDouble([(2,0,0),(3,0,0),(2,1,0),(3,1,0),(2,0,1),(3,0,1),(2,1,1),(3,1,1),(2.5,0,0),(2,0.5,0),(2.5,1,0),(3,0.5,0),(2.5,0,1),(2,0.5,1),(2.5,1,1),(3,0.5,1),(3,0,0.5),(2,0,0.5),(2,1,0.5),(3,1,0.5)],20,3),1e-12))
6733         self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6734         # 2nd Time step
6735         f1tsToTest=fs2[0][1]
6736         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6737         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6738         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6739         fToTest=fs2[0][1].field(mmq)
6740         self.assertEqual(fToTest.getTime(),[5.,3,4])
6741         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6742         self.assertTrue(mTest.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19])))
6743         self.assertTrue(mTest.getCoords().isEqual(DataArrayDouble([(2,0,0),(3,0,0),(2,1,0),(3,1,0),(2,0,1),(3,0,1),(2,1,1),(3,1,1),(2.5,0,0),(2,0.5,0),(2.5,1,0),(3,0.5,0),(2.5,0,1),(2,0.5,1),(2.5,1,1),(3,0.5,1),(3,0,0.5),(2,0,0.5),(2,1,0.5),(3,1,0.5)],20,3),1e-12))
6744         self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6745
6746         pass
6747
6748     @WriteInTmpDir
6749     def testSetFieldProfileFlatly1(self):
6750         """ Sometimes for downstream code fan of profiles, profile are requested unconditionally. setFieldProfile try to reduce at most profile usage. So setFieldProfileFlatly has been added to always create
6751         a profile."""
6752         arr=DataArrayDouble(10) ; arr.iota()
6753         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6754         m=m.buildUnstructured()
6755         m2=m.deepCopy()
6756         m2.simplexize(0)
6757         m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6758         m.setName("mesh")
6759         mm=MEDFileUMesh()
6760         mm[0]=m
6761         f=MEDCouplingFieldDouble(ON_CELLS)
6762         f.setMesh(m)
6763         arr=DataArrayDouble(m.getNumberOfCells())
6764         arr.iota()
6765         f.setArray(arr)
6766         f.setName("field")
6767         pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6768         #
6769         refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6770         refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6771         #
6772         f1ts=MEDFileField1TS()
6773         f1ts.setFieldProfile(f,mm,0,pfl)
6774         self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6775         self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6776         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6777         #
6778         f1ts=MEDFileField1TS()
6779         f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6780         self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6781         self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6782         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6783         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6784         self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6785         pass
6786
6787     @WriteInTmpDir
6788     def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6789         """ Here multi level groups are created"""
6790         arr=DataArrayDouble(11) ; arr.iota()
6791         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6792         m=m.buildUnstructured()
6793         m.setName("mesh")
6794         m1=m.buildDescendingConnectivity()[0]
6795         mm=MEDFileUMesh()
6796         mm[0]=m ; mm[-1]=m1
6797         ################
6798         grpName="grp0"
6799         grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6800         grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6801         grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6802         grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6803         ################ ajouter un groupe sur plusieurs niveau
6804         mm.addGroup(0,grp1)
6805         mm.addGroup(-1,grp2)
6806         mm.addGroup(0,grp0_0)
6807         mm.addGroup(-1,grp0_1)
6808         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6809         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6810         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6811         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6812         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6813         self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6814         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6815         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6816         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6817         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6818         mm.removeGroupAtLevel(0,grpName)
6819         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6820         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6821         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6822         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6823         mm.removeGroupAtLevel(-1,grpName)
6824         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6825         self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6826         mm.addGroup(-1,grp0_1)
6827         mm.addGroup(0,grp0_0)
6828         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6829         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6830         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6831         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6832         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6833         pass
6834
6835     @WriteInTmpDir
6836     def testYutaka(self):
6837         """ Thank you to Yutaka Nishizawa for having report this bug. At level -1, adding a first group on all entities leads to a group lying on family 0...
6838         Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6839         mn="mesh"
6840         m=MEDCouplingCMesh()
6841         arr=DataArrayDouble(4) ; arr.iota()
6842         m.setCoords(arr,arr,arr)
6843         m=m.buildUnstructured()
6844         m.setName(mn)
6845         #
6846         m=m.buildUnstructured()
6847         m1=m.buildDescendingConnectivity()[0]
6848         #
6849         mm=MEDFileUMesh()
6850         mm[0]=m
6851         mm[-1]=m1
6852         #
6853         grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6854         mm.addGroup(0,grp0)
6855         grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6856         mm.addGroup(0,grp1)
6857         grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6858         mm.addGroup(0,grp2)
6859         grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6860         mm.addGroup(-1,grp3)
6861         self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6862         grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6863         mm.addNodeGroup(grp4)
6864         mm.rearrangeFamilies()
6865         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6866         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6867         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6868         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6869         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6870
6871         for grp in [grp0,grp1,grp2,grp3,grp4]:
6872             self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6873             pass
6874         pass
6875
6876     @WriteInTmpDir
6877     def testContxtMger1TS(self):
6878         fname="Pyfile119.med"
6879         coo=DataArrayDouble(1000) ; coo.iota()
6880         m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6881         m.setName("mesh")
6882         WriteMesh(fname,m,True)
6883         f=MEDCouplingFieldDouble(ON_CELLS)
6884         f.setMesh(m)
6885         f.setName("Field")
6886         arr=DataArrayDouble(m.getNumberOfCells())
6887         f.setArray(arr)
6888         f.checkConsistencyLight()
6889         for i in range(10):
6890             arr[:]=float(i+1)
6891             f.setTime(float(i),i,0)
6892             WriteFieldUsingAlreadyWrittenMesh(fname,f)
6893             pass
6894         #
6895         mm=MEDFileMesh.New(fname)
6896         fmts=MEDFileFieldMultiTS(fname,False)
6897         refSize=fmts.getHeapMemorySize()
6898         for f1ts in fmts:
6899             with f1ts:
6900                 f=f1ts.field(mm)
6901                 pass
6902             pass
6903         self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6904         pass
6905
6906     def testZipFamilies1(self):
6907         """
6908         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6909         """
6910         mname="mesh"
6911         arr=DataArrayDouble(10) ; arr.iota()
6912         m=MEDCouplingCMesh()
6913         m.setCoords(arr,arr)
6914         m=m.buildUnstructured()
6915         m.setName(mname)
6916         #
6917         mm=MEDFileUMesh()
6918         mm[0]=m
6919         for i in range(m.getNumberOfCells()):
6920             d = DataArrayInt([i])
6921             d.setName("grp%d"%i)
6922             mm.addGroup(0,d)
6923             pass
6924
6925         grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6926         grp_all.setName("grp_all")
6927         mm.addGroup(0,grp_all)
6928         for i in range(m.getNumberOfCells()):
6929             mm.removeGroup("grp{}".format(i))
6930             pass
6931         #
6932         mm.zipFamilies() # the method to test
6933         #
6934         self.assertEqual(mm.getGroupsNames(),("grp_all",))
6935         self.assertEqual(len(mm.getFamiliesNames()),1)
6936         self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6937         pass
6938
6939     def testZipFamilies2(self):
6940         """
6941         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6942         """
6943         mname="mesh"
6944         arr=DataArrayDouble(21) ; arr.iota()
6945         m=MEDCouplingCMesh()
6946         m.setCoords(arr)
6947         m=m.buildUnstructured()
6948         m.setName(mname)
6949         #
6950         mm=MEDFileUMesh()
6951         mm[0]=m
6952         # 1 and 3 to be merged
6953         # 2 and 5 to be merged
6954         mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6955         for i in range(1,9):
6956             mm.setFamilyId("Fam_{}".format(i),-i)
6957         mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6958         mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6959         mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6960         #
6961         grp0=DataArrayInt([0,1,3,8,10,19])
6962         grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6963         grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6964         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6965         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6966         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6967         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6968         mm.zipFamilies()
6969         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6970         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6971         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6972         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6973         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6974         pass
6975
6976     def testMeshConvertFromMEDFileGeoType(self):
6977         self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6978
6979     @WriteInTmpDir
6980     def testFieldInt64_0(self):
6981         """
6982         Small basic test with I/O of field in int64.
6983         """
6984         fname="Pyfile120.med"
6985         arr = DataArrayDouble([0,1])
6986         m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6987         f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6988         v = 1234567890123456
6989         f.setArray(DataArrayInt64([v]))
6990         f.setMesh(m)
6991         mm = MEDFileUMesh()
6992         mm[0] = m
6993         f1ts = MEDFileInt64Field1TS()
6994         f1ts.setFieldNoProfileSBT(f)
6995         fmts = MEDFileInt64FieldMultiTS()
6996         fmts.pushBackTimeStep(f1ts)
6997         fs = MEDFileFields()
6998         fs.pushField(fmts)
6999         mm.write(fname,2)
7000         fs.write(fname,0)
7001         #
7002         mm = MEDFileMesh.New(fname)
7003         fs = MEDFileFields(fname)
7004         f = fs[0][0].field(mm)
7005         self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
7006         self.assertEqual( f.getArray().getIJ(0,0) , v )
7007
7008     @WriteInTmpDir
7009     def testNonRegUMeshSubParts(self):
7010         """
7011         Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
7012         """
7013         fname = "Pyfile121.med"
7014         m0 = MEDCouplingUMesh("mesh",1)
7015         coords = DataArrayDouble([(0,0),(1,0),(2,0)])
7016         m0.setCoords(coords)
7017         m0.allocateCells()
7018         m0.insertNextCell(NORM_SEG2,[1,2])
7019         mm = MEDFileUMesh()
7020         mm[0] = m0
7021         m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
7022         m1.setCoords(m0.getCoords())
7023         m1.setNodalConnectivity(DataArrayInt([1,2]))
7024         m1.setName(m0.getName())
7025         mm[-1] = m1
7026         fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
7027         mm.zipCoords() # <- This call changes the coords and connectivity
7028         mm.write(fname,2)
7029         #
7030         mm = MEDFileMesh.New(fname)
7031         mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
7032         self.assertTrue( m0.isEqual(mm[0],1e-12) )
7033         pass
7034
7035     pass
7036
7037 if __name__ == "__main__":
7038     unittest.main()