Salome HOME
Bug fix: buildInnerBoundaryAlongM1Group
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021  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     @WriteInTmpDir
1732     def testBasicConstructors(self):
1733         GeneratePyfile18(self)
1734         fname="Pyfile18.med"
1735         TestWriteUMeshesRW1(self)
1736         m=MEDFileMesh.New(fname)
1737         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1738         m=MEDFileMesh.New(fname)
1739         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1740         m=MEDFileUMesh(fname)
1741         m=MEDFileUMesh()
1742         self.internalMEDMesh6()
1743         m=MEDFileCMesh("MEDFileMesh5.med")
1744         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1745         m=MEDFileCMesh()
1746         m=MEDFileMeshMultiTS()
1747         m=MEDFileMeshMultiTS(fname)
1748         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1749         m=MEDFileMeshes()
1750         m=MEDFileMeshes(fname)
1751         m=MEDFileField1TS()
1752         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1753         m=MEDFileFieldMultiTS()
1754         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1755         m=MEDFileFields()
1756         m=MEDFileFields(fname)
1757         m=MEDFileData()
1758         m=MEDFileData(fname)
1759         #
1760         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1761         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1762         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1763         m=MEDCouplingCMesh()
1764         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1765         m=MEDCouplingFieldTemplate(ON_NODES)
1766         m=MEDCouplingMultiFields([])
1767         m=MEDCouplingFieldOverTime([])
1768         pass
1769
1770     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1771     @WriteInTmpDir
1772     def testBugSemiPartialField(self):
1773         fname="Pyfile46.med"
1774         m=MEDLoaderDataForTest.build2DMesh_3()
1775         m=m[:10] ; m.setName("mesh")
1776         f=m.getMeasureField(False)
1777         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1778         f.setTime(5.5,3,4)
1779         f.setName("SemiPartialField")
1780         #
1781         f1=f[:6] ; f1.getMesh().setName(m.getName())
1782         f2=f[6:] ; f2.getMesh().setName(m.getName())
1783         #
1784         mm=MEDFileUMesh.New()
1785         mm.setMeshAtLevel(0,m)
1786         ff=MEDFileField1TS.New()
1787         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1788         mm.write(fname,2)
1789         ff.write(fname,0)
1790         #
1791         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1792         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1793         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1794         #
1795         fread.checkConsistencyLight()
1796         fread2.checkConsistencyLight()
1797         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1798         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1799         pass
1800
1801     @WriteInTmpDir
1802     def testUnPolyze1(self):
1803         fname="Pyfile47.med"
1804         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1805         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]
1806         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1807         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]]))
1808         mm.write(fname,2)
1809         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1810         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1811         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1812         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1813         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1814         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1815         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1816         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1817         # to test
1818         mm.setRenumFieldArr(0,None)
1819         mm.setFamilyFieldArr(-1,None)
1820         pass
1821
1822     @WriteInTmpDir
1823     def testUnPolyze2(self):
1824         fname="Pyfile48.med"
1825         mfd=MEDFileData.New()
1826         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1827         meshes=MEDFileMeshes.New()
1828         meshes.pushMesh(mm)
1829         mfd.setMeshes(meshes)
1830         fields=MEDFileFields.New()
1831         mfd.setFields(fields)
1832         ff=MEDFileFieldMultiTS.New()
1833         fields.pushField(ff)
1834         #
1835         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1836         f0_0.setTime(9.5,3,4)
1837         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1838         f0_0.setArray(da)
1839         f0_0.setMesh(mm.getMeshAtLevel(0))
1840         ff.appendFieldNoProfileSBT(f0_0)
1841         ff0=ff.getTimeStepAtPos(0)
1842         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1843         f0_1.setTime(9.5,3,4)
1844         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1845         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1846         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1847         f0_1.setArray(da)
1848         ff0.setFieldProfile(f0_1,mm,0,pfl)
1849         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1850         f0_2.setTime(9.5,3,4)
1851         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1852         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
1853         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1854         f0_2.setArray(da)
1855         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1856         mfd.getFields().shallowCpyGlobs(ff0)
1857         #
1858         mfd.unPolyzeMeshes()
1859         #
1860         fmts=mfd.getFields()[0]
1861         self.assertEqual(fmts.getNumberOfTS(),1)
1862         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1863         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1864         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))])
1865         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1866         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1867         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1868         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1869         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1870         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1871         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1872         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))
1873         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1874         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1875         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1876         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1877         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1878         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])
1879         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1880         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1881         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1882         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])
1883         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1884         #
1885         mfd.write(fname,2)
1886         pass
1887
1888     @WriteInTmpDir
1889     def testGaussWriteOnPfl1(self):
1890         fname="Pyfile49.med"
1891         fname2="Pyfile50.med"
1892         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1893         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1894         mQ8.allocateCells(1)
1895         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1896         mQ8.finishInsertingCells()
1897         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1898         mQ4.allocateCells(1)
1899         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1900         mQ4.finishInsertingCells()
1901         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1902         mT3.allocateCells(1)
1903         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1904         mT3.finishInsertingCells()
1905
1906         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.]]
1907         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1908         ms[:]=(elt.deepCopy() for elt in ms)
1909         for m,t in zip(ms,tr):
1910             d=m.getCoords() ; d+= t
1911             pass
1912         m=MEDCouplingUMesh.MergeUMeshes(ms)
1913         m.setName("mesh")
1914         m2=m[:13] ; m2.setName(m.getName())
1915         ### 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.
1916         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1917         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1918         f.setMesh(m2)
1919         f.setTime(4.5,1,2)
1920         da=DataArrayDouble(34) ; da.iota(3.)
1921         f.setArray(da)
1922         f.setName("fieldCellOnPflWithoutPfl")
1923         fInvalid=f.deepCopy()
1924         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])
1925         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])
1926         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])
1927         f.checkConsistencyLight()
1928         fInvalid2=fInvalid.deepCopy()
1929         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1930         #
1931         mm=MEDFileUMesh()
1932         mm.setMeshAtLevel(0,m)
1933         mm.write(fname,2)
1934         #
1935         f1ts=MEDFileField1TS.New()
1936         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1937         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1938         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1939         f1ts.setFieldProfile(f,mm,0,pfl)
1940         f1ts.write(fname,0)
1941         #
1942         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1943         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1944         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1945         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1946         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1947         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1948         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1949         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1950         #
1951         dataRead=MEDFileData.New(fname)
1952         mRead=dataRead.getMeshes()[0]
1953         f1tsRead=dataRead.getFields()[0][0]
1954         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1955         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1956         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1957         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1958         f2_bis.checkConsistencyLight()
1959         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1960         #
1961         WriteField(fname2,f,True)
1962         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1963         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1964         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1965         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1966         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1967         m2=m[pfl] ; m2.setName(m.getName())
1968         f.setMesh(m2)
1969         f.setTime(4.5,1,2)
1970         da=DataArrayDouble(35) ; da.iota(3.)
1971         f.setArray(da)
1972         f.setName("fieldCellOnPflWithoutPfl2")
1973         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1974         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])
1975         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])
1976         f.checkConsistencyLight()
1977         #
1978         mm=MEDFileUMesh()
1979         mm.setMeshAtLevel(0,m)
1980         mm.write(fname,2)
1981         f1ts=MEDFileField1TS.New()
1982         f1ts.setFieldProfile(f,mm,0,pfl)
1983         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1984         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1985         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1986         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1987         f1ts.write(fname,0)
1988         dataRead=MEDFileData.New(fname)
1989         mRead=dataRead.getMeshes()[0]
1990         f1tsRead=dataRead.getFields()[0][0]
1991         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1992         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1993         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1994         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1995         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1996         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1997         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1998         #
1999         WriteField(fname2,f,True)
2000         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2001         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2002         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2003         ## Use case 3 : no pfl but creation of pfls due to gauss pts
2004         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2005         f.setMesh(m)
2006         f.setTime(4.5,1,2)
2007         da=DataArrayDouble(60) ; da.iota(3.)
2008         f.setArray(da)
2009         f.setName("fieldCellWithoutPfl")
2010         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])
2011         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])
2012         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])
2013         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])
2014         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])
2015         f.checkConsistencyLight()
2016         mm=MEDFileUMesh()
2017         mm.setMeshAtLevel(0,m)
2018         f1ts=MEDFileField1TS.New()
2019         f1ts.setFieldNoProfileSBT(f)
2020         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2021         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2022         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2023         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2024         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2025         mm.write(fname,2)
2026         f1ts.write(fname,0)
2027         #
2028         dataRead=MEDFileData.New(fname)
2029         mRead=dataRead.getMeshes()[0]
2030         f1tsRead=dataRead.getFields()[0][0]
2031         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2032         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2033         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2034         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2035         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2036         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2037         #
2038         WriteField(fname2,f,True)
2039         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2040         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2041         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2042         pass
2043
2044     # Testing profile on nodes when the profile is identity but not on all nodes.
2045     @WriteInTmpDir
2046     def testMEDFieldPflOnNode1(self):
2047         fname="Pyfile51.med"
2048         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)
2049         m0=MEDCouplingUMesh("Mesh",2)
2050         m0.allocateCells(5)
2051         m0.insertNextCell(NORM_TRI3,[1,4,2])
2052         m0.insertNextCell(NORM_TRI3,[4,5,2])
2053         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2054         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2055         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2056         m0.finishInsertingCells()
2057         m0.setCoords(coo)
2058         m1=MEDCouplingUMesh(m0.getName(),1)
2059         m1.allocateCells(9)
2060         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2061         for i in range(9):
2062             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2063             pass
2064         m1.finishInsertingCells()
2065         m1.setCoords(coo)
2066         #
2067         m=MEDFileUMesh()
2068         m.setMeshAtLevel(0,m0)
2069         m.setMeshAtLevel(-1,m1)
2070         #
2071         dt=3 ; it=2 ; tim=4.5
2072         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2073         fieldNode0.setName("fieldNode0")
2074         fieldNode0.setTime(tim,dt,it)
2075         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2076         arr=DataArrayDouble([10,11,12,13,14])
2077         fieldNode0.setArray(arr)
2078         f0=MEDFileField1TS()
2079         f0.setFieldProfile(fieldNode0,m,0,pfl0)
2080         m.write(fname,2) ; f0.write(fname,0)
2081         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2082         fieldNode1.setName("fieldNode1")
2083         fieldNode1.setTime(tim,dt,it)
2084         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2085         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2086         fieldNode1.setArray(arr1)
2087         f1=MEDFileField1TS()
2088         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2089         f1.write(fname,0)
2090         del m,f0,m0,m1,f1
2091         ## Reading from file
2092         m=MEDFileMesh.New(fname)
2093         m0=m.getMeshAtLevel(0)
2094         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2095         fieldNode0.setMesh(m00)
2096         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2097         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2098         ff0_1.checkConsistencyLight()
2099         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2100         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2101         ff0_2.checkConsistencyLight()
2102         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2103         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2104         ff0_3.checkConsistencyLight()
2105         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2106         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2107         ff0_4.checkConsistencyLight()
2108         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2109         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2110         m1=m.getMeshAtLevel(-1)
2111         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2112         fieldNode1.setMesh(m10)
2113         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2114         ff1_1.checkConsistencyLight()
2115         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2116         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2117         ff1_2.checkConsistencyLight()
2118         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2119         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2120         ff1_3.checkConsistencyLight()
2121         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2122         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2123         ff1_4.checkConsistencyLight()
2124         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2125         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]
2126         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]
2127         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]
2128         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2129         arr_r.setName(fieldNode1.getArray().getName())
2130         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2131         pfl1_r.setName(pfl1.getName())
2132         self.assertTrue(pfl1_r.isEqual(pfl1))
2133         pass
2134
2135         # Testing profile on nodes when the profile is identity but not on all nodes.
2136     @WriteInTmpDir
2137     def testMEDFieldPflOnCell1(self):
2138         fname="Pyfile52.med"
2139         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)
2140         m0=MEDCouplingUMesh("Mesh",2)
2141         m0.allocateCells(5)
2142         m0.insertNextCell(NORM_TRI3,[1,4,2])
2143         m0.insertNextCell(NORM_TRI3,[4,5,2])
2144         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2145         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2146         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2147         m0.finishInsertingCells()
2148         m0.setCoords(coo)
2149         m1=MEDCouplingUMesh(m0.getName(),1)
2150         m1.allocateCells(9)
2151         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2152         for i in range(9):
2153             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2154             pass
2155         m1.finishInsertingCells()
2156         m1.setCoords(coo)
2157         #
2158         m=MEDFileUMesh()
2159         m.setMeshAtLevel(0,m0)
2160         m.setMeshAtLevel(-1,m1)
2161         #
2162         dt=3 ; it=2 ; tim=4.5
2163         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2164         fieldCell0.setName("fieldCell0")
2165         fieldCell0.setTime(tim,dt,it)
2166         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2167         arr=DataArrayDouble([10,11,12])
2168         fieldCell0.setArray(arr)
2169         f0=MEDFileField1TS()
2170         f0.setFieldProfile(fieldCell0,m,0,pfl0)
2171         m.write(fname,2) ; f0.write(fname,0)
2172         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2173         fieldCell1.setName("fieldCell1")
2174         fieldCell1.setTime(tim,dt,it)
2175         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2176         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2177         fieldCell1.setArray(arr1)
2178         f1=MEDFileField1TS()
2179         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2180         f1.write(fname,0)
2181         del m,f0,m0,m1,f1
2182         ## Reading from file
2183         m=MEDFileMesh.New(fname)
2184         m0=m.getMeshAtLevel(0)
2185         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2186         fieldCell0.setMesh(m00)
2187         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2188         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2189         ff0_1.checkConsistencyLight()
2190         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2191         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2192         ff0_2.checkConsistencyLight()
2193         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2194         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2195         ff0_3.checkConsistencyLight()
2196         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2197         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2198         ff0_4.checkConsistencyLight()
2199         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2200         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2201         m1=m.getMeshAtLevel(-1)
2202         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2203         fieldCell1.setMesh(m10)
2204         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2205         ff1_1.checkConsistencyLight()
2206         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2207         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2208         ff1_2.checkConsistencyLight()
2209         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2210         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2211         ff1_3.checkConsistencyLight()
2212         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2213         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2214         ff1_4.checkConsistencyLight()
2215         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2216         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]
2217         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]
2218         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]
2219         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2220         arr_r.setName(fieldCell1.getArray().getName())
2221         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2222         pfl1_r.setName(pfl1.getName())
2223         self.assertTrue(pfl1_r.isEqual(pfl1))
2224         pass
2225
2226     @WriteInTmpDir
2227     def testMEDFileUMeshZipCoords1(self):
2228         m=MEDFileUMesh()
2229         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2230         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])
2231         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2232         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2233         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2234         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2235         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2236         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2237         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2238         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2239         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2240         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2241         o2n=m.zipCoords()
2242         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2243         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2244         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2245         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2246         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2247         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2248         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2249         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2250         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2251         pass
2252
2253     @WriteInTmpDir
2254     def testMEDUMeshAddNodeGroup1(self):
2255         fname="Pyfile53.med"
2256         m=MEDFileUMesh()
2257         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2258         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])
2259         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2260         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2261         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2262         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2263         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2264         #
2265         mm=m.deepCopy()
2266         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2267         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2268         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2269         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2270         mm.setFamilyId("MyFam",2)
2271         mm.setFamilyId("MyOtherFam",3)
2272         mm.setFamilyId("MyOther-1",-1)
2273         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2274         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2275         #
2276         self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2277         #
2278         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2279         mm.addNodeGroup(daTest)
2280         self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2281         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
2282         #
2283         expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2284         self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2285         #
2286         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2287         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2288         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2289             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2290             pass
2291         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2292         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2293         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2294         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2295         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2296             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2297             pass
2298         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2299         da=DataArrayInt([3,12]) ; da.setName("grp0")
2300         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2301         da.setValues([1])
2302         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2303         mm.write(fname,2)
2304         mm=MEDFileMesh.New(fname)
2305         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2306         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2307         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2308             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2309             pass
2310         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2311         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2312         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2313         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2314         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2315             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2316             pass
2317         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2318         da=DataArrayInt([3,12]) ; da.setName("grp0")
2319         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2320         da.setValues([1])
2321         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2322         pass
2323
2324     @WriteInTmpDir
2325     def testMEDUMeshAddGroup1(self):
2326         fname="Pyfile54.med"
2327         m=MEDFileUMesh()
2328         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2329         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2330         for i in range(7):
2331             m0.insertNextCell(NORM_TRI3,[1,2,1])
2332             pass
2333         for i in range(4):
2334             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2335             pass
2336         for i in range(2):
2337             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2338             pass
2339         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2340         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2341         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2342         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2343         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2344         #
2345         mm=m.deepCopy()
2346         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2347         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2348         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2349         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2350         mm.setFamilyId("MyFam",2)
2351         mm.setFamilyId("MyOtherFam",3)
2352         mm.setFamilyId("MyOther-1",-1)
2353         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2354         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2355         #
2356         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2357         mm.addGroup(0,daTest)
2358         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2359         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2360         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2361             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2362             pass
2363         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2364         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2365         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2366         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2367         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2368             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2369             pass
2370         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2371         da=DataArrayInt([3,12]) ; da.setName("grp0")
2372         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2373         da.setValues([1])
2374         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2375         mm.write(fname,2)
2376         mm=MEDFileMesh.New(fname)
2377         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2378         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2379         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2380             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2381             pass
2382         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2383         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2384         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2385         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2386         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2387             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2388             pass
2389         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2390         da=DataArrayInt([3,12]) ; da.setName("grp0")
2391         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2392         da.setValues([1])
2393         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2394         pass
2395
2396     @WriteInTmpDir
2397     def testHeapMem1(self):
2398         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2399         a.alloc(0,1)
2400         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2401         #
2402         m=MEDCouplingCMesh()
2403         arr=DataArrayDouble(10,1) ; arr.iota(0)
2404         m.setCoords(arr,arr)
2405         m=m.buildUnstructured()
2406         m.setName("mm")
2407         f=m.getMeasureField(False)
2408         cooMem = 100 * 2 * 8
2409         nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2410         indexMem = 82 * MEDCouplingSizeOfIDs()//8
2411         meshMem = cooMem + nodalMem + indexMem
2412         self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2413         delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2414         self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2415         #
2416         mm=MEDFileUMesh()
2417         mm.setMeshAtLevel(0,m)
2418         self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2419         ff=MEDFileField1TS()
2420         ff.setFieldNoProfileSBT(f)
2421         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2422         #
2423         fff=MEDFileFieldMultiTS()
2424         fff.appendFieldNoProfileSBT(f)
2425         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2426         f.setTime(1.,0,-1)
2427         fff.appendFieldNoProfileSBT(f)
2428         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2429         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2430         f2=f[:50]
2431         f2.setTime(2.,1,-1)
2432         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2433         fff.appendFieldProfile(f2,mm,0,pfl)
2434         self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2435         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2436         self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8))  + 30 + 4 * strMulFac))
2437         pass
2438
2439     def internalCurveLinearMesh1(self):
2440         fname="Pyfile55.med"
2441         mesh=MEDCouplingCurveLinearMesh();
2442         mesh.setTime(2.3,4,5);
2443         mesh.setTimeUnit("us");
2444         mesh.setName("Example of Cuve linear mesh");
2445         mesh.setDescription("buildCLMesh");
2446         a1=DataArrayDouble(3*20,1);
2447         a1.iota(7.) ; a1.rearrange(3);
2448         mesh.setCoords(a1);
2449         mesh.setNodeGridStructure([4,5]);
2450         mesh.checkConsistencyLight();
2451         #
2452         m=MEDFileCurveLinearMesh()
2453         m.setMesh(mesh)
2454         d=DataArrayInt(20) ; d.iota(4)
2455         m.setFamilyFieldArr(1,d)
2456         d3=DataArrayInt(20) ; d3.iota(400)
2457         m.setRenumFieldArr(1,d3)
2458         d2=DataArrayInt(12) ; d2.iota(40)
2459         m.setFamilyFieldArr(0,d2)
2460         d4=DataArrayInt(21) ; d4.iota(4000)
2461         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2462         d4.popBackSilent()
2463         m.setRenumFieldArr(1,d4)
2464         m.write(fname,2)
2465         #
2466         m1=MEDFileCurveLinearMesh(fname)
2467         mm=m1.getMesh()
2468         self.assertTrue(mm.isEqual(mesh,1e-12))
2469         self.assertEqual(mm.getSpaceDimension(),3)
2470         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2471         #
2472         m1=MEDFileMesh.New(fname)
2473         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2474         self.assertTrue(isinstance(m1.getUnivName(),str))
2475         self.assertTrue(len(m1.getUnivName())!=0)
2476         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2477         pass
2478
2479     @WriteInTmpDir
2480     def testCurveLinearMesh1(self):
2481         self.internalCurveLinearMesh1()
2482
2483     @WriteInTmpDir
2484     def testParameters1(self):
2485         self.internalParameters1()
2486
2487     def internalParameters1(self):
2488         fname="Pyfile56.med"
2489         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2490         mm=MEDFileCMesh() ; mm.setMesh(m)
2491         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2492         data=MEDFileData()
2493         p=MEDFileParameters()
2494         data.setParams(p) ; data.setMeshes(ms)
2495         pts=MEDFileParameterMultiTS()
2496         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2497         pts.appendValue(1,2,3.4,567.89)
2498         pts.appendValue(2,3,5.6,999.123)
2499         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2500         p.pushParam(pts) ; p.pushParam(pts2)
2501         data.write(fname,2)
2502         p2=MEDFileParameters(fname)
2503         self.assertTrue(p.isEqual(p2,1e-14)[0])
2504         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2505         p3=p.deepCopy()
2506         pts4=pts2.deepCopy()
2507         pts3=pts2.deepCopy()
2508         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2509         pts2.eraseTimeStepIds([0])
2510         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2511         del pts3[[3.4]]
2512         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2513         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2514         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2515         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2516         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2517         p=p3
2518         self.assertTrue(p.isEqual(p2,1e-14)[0])
2519         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2520         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2521         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2522         self.assertEqual(p.getParamsNames(),('A','B'))
2523         ptsr=MEDFileParameterMultiTS(fname,"B")
2524         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2525         ptsr=MEDFileParameterMultiTS(fname)
2526         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2527         p1tsr=MEDFileParameterDouble1TS(fname)
2528         self.assertEqual(p1tsr.getName(),"A")
2529         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2530         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2531         self.assertEqual(p1tsr.getName(),"B")
2532         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2533         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2534         self.assertEqual(p1tsr.getName(),"B")
2535         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2536         data2=MEDFileData(fname)
2537         self.assertEqual(2,data2.getNumberOfParams())
2538         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2539         pass
2540
2541     @WriteInTmpDir
2542     def testNamesOnCellAndNodesInMeshes1(self):
2543         fname="Pyfile58.med"
2544         fname2="Pyfile59.med"
2545         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2546         m1=m.buildDescendingConnectivity()[0]
2547         m1.sortCellsInMEDFileFrmt()
2548         #
2549         mm=MEDFileUMesh()
2550         mm.setMeshAtLevel(0,m)
2551         mm.setMeshAtLevel(-1,m1)
2552         namesCellL0=DataArrayAsciiChar(6,16)
2553         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2554         mm.setNameFieldAtLevel(0,namesCellL0)
2555         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2556         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2557         mm.setNameFieldAtLevel(-1,namesCellL1)
2558         namesNodes=namesCellL1.subArray(4,16)
2559         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2560         mm.setNameFieldAtLevel(1,namesNodes)
2561         mm.write(fname,2)
2562         #
2563         mmr=MEDFileMesh.New(fname)
2564         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2565         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2566         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2567         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2568         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2569         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2570         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2571         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2572         mmCpy=mm.deepCopy()
2573         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2574         # remove names on nodes
2575         mmCpy.setNameFieldAtLevel(1,None)
2576         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2577         mm.setNameFieldAtLevel(1,None)
2578         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2579         mm.setNameFieldAtLevel(-1,None)
2580         mm.write(fname,2)
2581         mmr=MEDFileMesh.New(fname)
2582         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2583         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2584         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2585         #
2586         c=MEDCouplingCMesh()
2587         arr=DataArrayDouble([0.,1.1,2.3])
2588         c.setCoords(arr,arr)
2589         c.setName("cmesh")
2590         cc=MEDFileCMesh()
2591         cc.setMesh(c)
2592         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2593         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2594         cc.write(fname2,2)
2595         ccr=MEDFileMesh.New(fname2)
2596         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2597         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2598         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2599         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2600         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2601         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2602         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2603         ccCpy=cc.deepCopy()
2604         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2605         pass
2606
2607     @WriteInTmpDir
2608     def testToExportInExamples1(self):
2609         m=MEDCouplingCMesh()
2610         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2611         m.setCoords(arr,arr)
2612         m=m.buildUnstructured() ; m.setName("mesh")
2613         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2614         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2615         m2=m.computeSkin()
2616         mm=MEDFileUMesh()
2617         mm.setMeshAtLevel(0,m)
2618         mm.setMeshAtLevel(-1,m2)
2619         mm.setGroupsAtLevel(0,[grp1,grp2])
2620         mm.write("example.med",2)
2621         #
2622         m0=mm.getMeshAtLevel(0)
2623         m1=mm.getMeshAtLevel(-1)
2624         grp1=mm.getGroupArr(0,"grp1")
2625         grp2=mm.getGroupArr(0,"grp2")
2626         grps=[grp1,grp2]
2627         whichGrp=DataArrayInt(m0.getNumberOfCells())
2628         whichGrp.fillWithValue(-1)
2629         for grpId,grp in enumerate(grps):
2630             whichGrp[grp]=grpId
2631             pass
2632         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2633         e,f=a.areCellsIncludedIn(m1,2)
2634         self.assertTrue(e)
2635         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2636         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2637         c2.transformWithIndArr(whichGrp)
2638         splitOfM1=len(grps)*[None]
2639         for grpId,grp in enumerate(grps):
2640             tmp=c2.findIdsEqual(grpId)
2641             splitOfM1[grpId]=tmp
2642             pass
2643         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2644         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2645         pass
2646
2647     @WriteInTmpDir
2648     def testBugCorrection1(self):
2649         fs=MEDFileFields()
2650         fs.resize(3)
2651         self.assertEqual(fs[0],None)
2652         self.assertEqual(3,len(fs))
2653         pass
2654
2655     @WriteInTmpDir
2656     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2657         f1Name="Pyfile60.med"
2658         f2Name="Pyfile61.med"
2659         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2660         d1.write(f1Name,2)
2661         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2662         d2.write(f2Name,2)
2663         # reading and compare
2664         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2665         for mn in d1.getMeshes().getMeshesNames():
2666             m1=d1.getMeshes()[mn]
2667             m2=d2.getMeshes()[mn]
2668             for lev in m1.getNonEmptyLevels():
2669                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2670                 for grpName in grpsNames:
2671                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2672                     pass
2673                 pass
2674             pass
2675         for fieldn in d1.getFields().getFieldsNames():
2676             f1=d1.getFields()[fieldn]
2677             f2=d2.getFields()[fieldn]
2678             for it,order,tim in f1.getTimeSteps():
2679                 f1t=f1[it,order]
2680                 f2t=f2[it,order]
2681                 if len(f1t.getPflsReallyUsed())!=0:
2682                     # profile case
2683                     for lev in f1t.getNonEmptyLevels()[1]:
2684                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2685                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2686                         self.assertTrue(pfl1.isEqual(pfl2))
2687                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2688                         pass
2689                     pass
2690                 else:
2691                     # no profile case
2692                     for lev in f1t.getNonEmptyLevels()[1]:
2693                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2694                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2695                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2696                         pass
2697                     pass
2698                 pass
2699             pass
2700         pass
2701
2702     @WriteInTmpDir
2703     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2704         m=MEDCouplingCMesh()
2705         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2706         m.setCoords(arr,arr,arr)
2707         m=m.buildUnstructured()
2708         m2=m.buildDescendingConnectivity()[0]
2709         m.setName("mesh")
2710         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2711         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2712         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2713         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2714         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2715         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2716         mm=MEDFileUMesh()
2717         mm.setMeshAtLevel(0,m)
2718         mm.setGroupsAtLevel(0,[g1,g2])
2719         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2720         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2721         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2722         mm.normalizeFamIdsMEDFile()
2723         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2724         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2725         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2726         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2727         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2728         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2729         for g in mm.getGroupsOnSpecifiedLev(0):
2730             for f in mm.getFamiliesIdsOnGroup(g):
2731                 self.assertTrue(f<0)
2732                 pass
2733             pass
2734         #
2735         mm=MEDFileUMesh()
2736         mm.setMeshAtLevel(0,m)
2737         mm.setMeshAtLevel(-1,m2)
2738         mm.setGroupsAtLevel(0,[g1,g2])
2739         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2740         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2741         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2742         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2743         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2744         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2745         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2746         mm.normalizeFamIdsMEDFile()
2747         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2748         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2749         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2750         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2751         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2752         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2753         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2754         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2755         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2756         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2757         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2758         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2759         for lev in [0,-1]:
2760             for g in mm.getGroupsOnSpecifiedLev(lev):
2761                 for f in mm.getFamiliesIdsOnGroup(g):
2762                     self.assertTrue(f<0)
2763                     pass
2764                 pass
2765             pass
2766          #
2767         mm=MEDFileUMesh()
2768         mm.setMeshAtLevel(0,m)
2769         mm.setMeshAtLevel(-1,m2)
2770         mm.setGroupsAtLevel(0,[g1,g2])
2771         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2772         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2773         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2774         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2775         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2776         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2777         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2778         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2779         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2780         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2781         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2782         mm.normalizeFamIdsMEDFile()
2783         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2784         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2785         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2786         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2787         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2788         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2789         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2790         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2791         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2792         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2793         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2794         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2795         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2796         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2797         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2798         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2799         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2800         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
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         for g in mm.getGroupsOnSpecifiedLev(1):
2809             for f in mm.getFamiliesIdsOnGroup(g):
2810                 self.assertTrue(f>0)
2811                 pass
2812             pass
2813         pass
2814
2815     @WriteInTmpDir
2816     def testNonRegressionMantis22212ChangeGrpName(self):
2817         fileName="Pyfile62.med"
2818         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2819         m=MEDFileUMesh.New()
2820         m.setCoords(m2.getCoords())
2821         m.setMeshAtLevel(0,m2)
2822         m.setMeshAtLevel(-1,m1)
2823         m.setMeshAtLevel(-2,m0)
2824         m.setFamilyFieldArr(0,f2)
2825         m.setFamilyFieldArr(-1,f1)
2826         m.setFamilyFieldArr(-2,f0)
2827         m.setFamilyFieldArr(1,p)
2828         nbOfFams=len(fns)
2829         for i in range(nbOfFams):
2830             m.addFamily(fns[i],fids[i])
2831             pass
2832         nbOfGrps=len(grpns)
2833         for i in range(nbOfGrps):
2834             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2835             pass
2836         m.setName(m2.getName())
2837         m.setDescription(m2.getDescription())
2838         m.write(fileName,2)
2839         #
2840         mm0=MEDFileMesh.New(fileName)
2841         mm1=MEDFileMesh.New(fileName)
2842         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2843         for name in groupNamesIni:
2844             mm1.changeGroupName(name,name+'N')
2845             pass
2846         mm1.write(fileName,2)
2847         del mm1
2848         #
2849         mm2=MEDFileMesh.New(fileName)
2850         for name in groupNamesIni:
2851             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2852                 arr0=mm0.getGroupArr(lev,name)
2853                 arr2=mm2.getGroupArr(lev,name+'N')
2854                 arr0.setName(name+'N')
2855                 self.assertTrue(arr0.isEqual(arr2))
2856                 pass
2857             pass
2858         pass
2859
2860     @WriteInTmpDir
2861     def testInt32InMEDFileFieldStar1(self):
2862         self.internalInt32InMEDFileFieldStar1()
2863
2864     def internalInt32InMEDFileFieldStar1(self):
2865         fname="Pyfile63.med"
2866         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2867         f1=f1.convertToIntField()
2868         m1=f1.getMesh()
2869         mm1=MEDFileUMesh.New()
2870         mm1.setCoords(m1.getCoords())
2871         mm1.setMeshAtLevel(0,m1)
2872         mm1.setName(m1.getName())
2873         mm1.write(fname,2)
2874         ff1=MEDFileIntField1TS()
2875         ff1.setFieldNoProfileSBT(f1)
2876         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2877         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2878         self.assertTrue(a.isEqual(f1,1e-12,0))
2879         ff1.write(fname,0)
2880         a,b=ff1.getUndergroundDataArrayExt()
2881         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2882         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2883         ff2=MEDFileAnyTypeField1TS.New(fname)
2884         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2885         self.assertEqual(ff2.getTime(),[0,1,2.0])
2886         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2887         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2888         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2889         self.assertTrue(a.isEqual(f1,1e-12,0))
2890         ff2.setTime(1,2,3.)
2891         c=ff2.getUndergroundDataArray() ; c*=2
2892         ff2.write(fname,0) # 2 time steps in
2893         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2894         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2895         self.assertEqual(len(ffs1),2)
2896         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2897         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2898         self.assertTrue(a.isEqual(f1,1e-12,0))
2899         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2900         self.assertTrue(a.isEqual(f1,1e-12,0))
2901         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2902         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2903         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2904         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2905         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2906         bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2907         for it in ffs1:
2908             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2909             bc+=a.getArray()
2910             pass
2911         self.assertTrue(bc.isEqual(3*f1.getArray()))
2912         nf1=MEDCouplingFieldInt(ON_NODES)
2913         nf1.setTime(9.,10,-1)
2914         nf1.setMesh(f1.getMesh())
2915         narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2916         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2917         nff1=MEDFileIntField1TS.New()
2918         nff1.setFieldNoProfileSBT(nf1)
2919         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2920         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2921         nff1.write(fname,0)
2922         #
2923         nf2=MEDCouplingFieldInt(ON_NODES)
2924         nf2.setTime(19.,20,-11)
2925         nf2.setMesh(f1.getMesh())
2926         narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2927         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2928         nff2=MEDFileIntField1TS.New()
2929         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2930         nff2.setFieldProfile(nf2,mm1,0,npfl)
2931         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2932         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2933         self.assertTrue(b.isEqual(npfl))
2934         self.assertTrue(a.isEqual(narr2))
2935         nff2.write(fname,0)
2936         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2937         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2938         self.assertTrue(b.isEqual(npfl))
2939         self.assertTrue(a.isEqual(narr2))
2940         #
2941         nf3=MEDCouplingFieldDouble(ON_NODES)
2942         nf3.setName("VectorFieldOnNodesDouble")
2943         nf3.setTime(29.,30,-21)
2944         nf3.setMesh(f1.getMesh())
2945         nf3.setArray(f1.getMesh().getCoords())
2946         nff3=MEDFileField1TS.New()
2947         nff3.setFieldNoProfileSBT(nf3)
2948         nff3.write(fname,0)
2949         fs=MEDFileFields(fname)
2950         self.assertEqual(len(fs),4)
2951         ffs=[it for it in fs]
2952         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2953         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2954         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2955         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2956         #
2957         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2958         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2959         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2960         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2961         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2962         #
2963         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2964         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2965         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2966         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2967         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2968         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2969         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2970         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2971         #
2972         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2973         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2974         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2975         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2976         pass
2977
2978     @WriteInTmpDir
2979     def testMEDFileFields1(self):
2980         fname="Pyfile64.med"
2981         f1=MEDCouplingFieldDouble(ON_NODES)
2982         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2983         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2984         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2985         f1.setMesh(m)
2986         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2987         f1.setArray(arr)
2988         f1.setName("Field1")
2989         ff1=MEDFileField1TS.New()
2990         ff1.setFieldNoProfileSBT(f1)
2991         self.assertEqual(ff1.getDtUnit(),"us")
2992         ff1.write(fname,0)
2993         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2994         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2995         #
2996         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2997         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2998         ff1s.setName("Field2")
2999         ff1s.write(fname,0)
3000         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3001         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3002         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3003         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3004         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3005         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3006         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3007         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3008         pass
3009
3010     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3011     @WriteInTmpDir
3012     def testMEDFileFields2(self):
3013         fname="Pyfile65.med"
3014         # to check that all is initialize
3015         MEDFileField1TS().__str__()
3016         MEDFileFieldMultiTS().__str__()
3017         # building a mesh containing 4 tri3 + 5 quad4
3018         tri=MEDCouplingUMesh("tri",2)
3019         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3020         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3021         tris = [tri.deepCopy() for i in range(4)]
3022         for i,elt in enumerate(tris): elt.translate([i,0])
3023         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3024         quad=MEDCouplingUMesh("quad",2)
3025         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3026         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3027         quads = [quad.deepCopy() for i in range(5)]
3028         for i,elt in enumerate(quads): elt.translate([5+i,0])
3029         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3030         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3031         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3032         #
3033         fmts0_0=MEDFileFieldMultiTS()
3034         fmts0_1=MEDFileFieldMultiTS()
3035         # time steps
3036         for i in range(10):
3037             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3038             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3039             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3040             f.setTime(float(i+1)+0.1,i+1,-i-1)
3041             fmts0_0.appendFieldNoProfileSBT(f)
3042             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3043             self.assertEqual(fmts0_1.getName(),name1)
3044             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3045             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3046             if i>1:
3047                 # components names have been modified to generate errors
3048                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3049                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3050                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3051                 f1ts.setInfo(['aa [bb]','eee [dd]'])
3052                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3053                 pass
3054             # add a mismatch of nb of compos
3055             pass
3056         fmts0_2=fmts0_0.deepCopy()
3057         fmts0_3=fmts0_0.deepCopy()
3058         fmts0_4=fmts0_0.deepCopy()
3059         fmts0_5=fmts0_0.shallowCpy()
3060         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)
3061         del fmts0_2[::2]
3062         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3063         del fmts0_3[[1.1,(6,-6),9]]
3064         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3065         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3066         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3067         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3068         fmts0_7=fmts0_4[::-3]
3069         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3070         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3071         #
3072         fs0=MEDFileFields()
3073         fs0.pushField(fmts0_0)
3074         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3075         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3076         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3077         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3078         fs0.write(fname,2)
3079         fs0=MEDFileFields(fname)
3080         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3081         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3082         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3083         del fs1[["2ndField",3]]
3084         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3085         fs2=fs0[[0,"4thField"]]
3086         self.assertTrue(isinstance(fs2,MEDFileFields))
3087         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3088         #
3089         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3090         pass
3091
3092     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3093     @WriteInTmpDir
3094     def testMEDFileFields3(self):
3095         fname="Pyfile66.med"
3096         # building a mesh containing 4 tri3 + 5 quad4
3097         tri=MEDCouplingUMesh("tri",2)
3098         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3099         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3100         tris = [tri.deepCopy() for i in range(4)]
3101         for i,elt in enumerate(tris): elt.translate([i,0])
3102         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3103         quad=MEDCouplingUMesh("quad",2)
3104         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3105         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3106         quads = [quad.deepCopy() for i in range(5)]
3107         for i,elt in enumerate(quads): elt.translate([5+i,0])
3108         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3109         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3110         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3111         #
3112         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3113         #
3114         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3115         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3116         fmts0_0=MEDFileFieldMultiTS()
3117         fmts0_1=MEDFileFieldMultiTS()
3118         # time steps
3119         for i in range(10):
3120             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3121             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3122             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3123             f.setTime(float(i+1)+0.1,i+1,-i-1)
3124             fmts0_0.appendFieldProfile(f,mm,0,pfl)
3125             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3126             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3127             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3128             pass
3129         #
3130         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3131         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3132         fmts0_0.zipPflsNames()
3133         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3134         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3135         fmts0_2=fmts0_0.deepCopy()
3136         fmts0_3=fmts0_0.deepCopy()
3137         fmts0_4=fmts0_0.deepCopy()
3138         fs0=MEDFileFields()
3139         fs0.pushField(fmts0_0)
3140         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3141         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3142         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3143         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3144         #
3145         fmts0_5=MEDFileFieldMultiTS()
3146         for i in range(7):
3147             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3148             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3149             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3150             f.setTime(float(i+1)+0.1,i+1,-i-1)
3151             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3152             pass
3153         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3154         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3155         fs0.checkGlobsCoherency()
3156         fs0.write(fname,0)
3157         pass
3158
3159     @WriteInTmpDir
3160     def testSplitComponents1(self):
3161         fname="Pyfile67.med"
3162         # building a mesh containing 4 tri3 + 5 quad4
3163         tri=MEDCouplingUMesh("tri",2)
3164         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3165         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3166         tris = [tri.deepCopy() for i in range(4)]
3167         for i,elt in enumerate(tris): elt.translate([i,0])
3168         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3169         quad=MEDCouplingUMesh("quad",2)
3170         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3171         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3172         quads = [quad.deepCopy() for i in range(5)]
3173         for i,elt in enumerate(quads): elt.translate([5+i,0])
3174         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3175         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3176         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3177         #
3178         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3179         #
3180         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3181         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3182         fs=MEDFileFields()
3183         fmts0_1=MEDFileFieldMultiTS()
3184         # time steps
3185         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3186         for i in range(10):
3187             name1="1stField"
3188             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3189             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3190             f.setTime(float(i+1)+0.1,i+1,-i-1)
3191             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3192             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3193             pass
3194         fs.pushField(fmts0_1)
3195         self.assertEqual(1,len(fs))
3196         l=fmts0_1.splitComponents()
3197         self.assertEqual(3,len(l))
3198         for elt in l: self.assertEqual(10,len(elt))
3199         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3200         for elt in l:
3201             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3202             pass
3203         fs.pushFields(l)
3204         self.assertEqual(4,len(fs))
3205         for elt in fs: self.assertEqual(10,len(elt))
3206         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3207         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3208         #
3209         fs.write(fname,0) ; del fs
3210         #
3211         fs1=MEDFileFields(fname)
3212         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3213         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3214         self.assertEqual(4,len(fs1))
3215         for i in range(10):
3216             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3217                 f1ts=fs1[fieldName][i]
3218                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3219                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3220                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3221                 pass
3222             f1ts=fs1["1stField"][i]
3223             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3224             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3225             self.assertTrue(d.isEqual(f.getArray(),1e-13))
3226             pass
3227         pass
3228
3229     @WriteInTmpDir
3230     def testMEDFileFieldConvertTo1(self):
3231         fname="Pyfile68.med"
3232         # building a mesh containing 4 tri3 + 5 quad4
3233         tri=MEDCouplingUMesh("tri",2)
3234         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3235         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3236         tris = [tri.deepCopy() for i in range(4)]
3237         for i,elt in enumerate(tris): elt.translate([i,0])
3238         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3239         quad=MEDCouplingUMesh("quad",2)
3240         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3241         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3242         quads = [quad.deepCopy() for i in range(5)]
3243         for i,elt in enumerate(quads): elt.translate([5+i,0])
3244         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3245         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3246         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3247         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3248         #
3249         ff0=MEDFileField1TS()
3250         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")
3251         f0.checkConsistencyLight()
3252         ff0.setFieldNoProfileSBT(f0)
3253         #
3254         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3255         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3256         #
3257         ff0i=ff0.convertToInt()
3258         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3259         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3260         #
3261         ff1=ff0i.convertToDouble()
3262         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3263         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3264         # For int64
3265         ff0i64=ff0.convertToInt64()
3266         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3267         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3268         #
3269         ff2=ff0i64.convertToDouble()
3270         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3271         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3272         # With profiles
3273         del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3274         ff0=MEDFileField1TS()
3275         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")
3276         f0.checkConsistencyLight()
3277         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3278         ff0.setFieldProfile(f0,mm,0,pfl)
3279         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3280         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3281         #
3282         ff0i=ff0.convertToInt()
3283         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3284         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3285         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3286         #
3287         ff1=ff0i.convertToDouble()
3288         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3289         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3290         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3291         # For Int64
3292         ff0i64=ff0.convertToInt64()
3293         self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3294         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3295         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3296         #
3297         ff2=ff0i64.convertToDouble()
3298         self.assertTrue(isinstance(ff2,MEDFileField1TS))
3299         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3300         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3301         ## MultiTimeSteps
3302         ff0=MEDFileFieldMultiTS()
3303         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)
3304         f0.checkConsistencyLight()
3305         ff0.appendFieldProfile(f0,mm,0,pfl)
3306         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)
3307         f0.checkConsistencyLight()
3308         ff0.appendFieldProfile(f0,mm,0,pfl)
3309         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)
3310         f0.checkConsistencyLight()
3311         ff0.appendFieldProfile(f0,mm,0,pfl)
3312         ff1=ff0.convertToInt()
3313         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3314         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3315         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3316             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3317             arr=ff1.getUndergroundDataArray(dt,it)
3318             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3319             pass
3320         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3321         #
3322         mm.write(fname,2)
3323         ff1.write(fname,0)
3324         #
3325         ff1=ff1.convertToDouble()
3326         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3327         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3328         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3329             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3330             arr=ff1.getUndergroundDataArray(dt,it)
3331             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3332             pass
3333         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3334         #
3335         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3336         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3337         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3338         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3339             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3340             arr=ff1.getUndergroundDataArray(dt,it)
3341             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3342             pass
3343         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3344         pass
3345
3346     @WriteInTmpDir
3347     def testMEDFileFieldPartialLoading(self):
3348         fname="Pyfile69.med"
3349         #
3350         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3351         a.alloc(0,1)
3352         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3353         # building a mesh containing 30 tri3 + 40 quad4
3354         tri=MEDCouplingUMesh("tri",2)
3355         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3356         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3357         tris = [tri.deepCopy() for i in range(30)]
3358         for i,elt in enumerate(tris): elt.translate([i,0])
3359         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3360         quad=MEDCouplingUMesh("quad",2)
3361         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3362         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3363         quads = [quad.deepCopy() for i in range(40)]
3364         for i,elt in enumerate(quads): elt.translate([40+i,0])
3365         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3366         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3367         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3368         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3369         #
3370         ff0=MEDFileField1TS()
3371         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")
3372         f0.checkConsistencyLight()
3373         ff0.setFieldNoProfileSBT(f0)
3374         ff0.write(fname,0)
3375         #
3376         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3377         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3378         # With profiles
3379         ff0=MEDFileField1TS()
3380         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")
3381         f0.checkConsistencyLight()
3382         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3383         ff0.setFieldProfile(f0,mm,0,pfl)
3384         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3385         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3386         ff0.write(fname,0)
3387         #
3388         ff0=MEDFileField1TS(fname,False)
3389         self.assertEqual(ff0.getName(),"FieldCell")
3390         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3391         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3392         heap_memory_ref=ff0.getHeapMemorySize()
3393         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3394         ff0.loadArrays() ##
3395         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3396         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3397         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3398         #
3399         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3400         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3401         heap_memory_ref=ff0.getHeapMemorySize()
3402         self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3403         ff0.loadArrays() ##
3404         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3405         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3406         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3407         ff0.loadArrays() ##
3408         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3409         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3410         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3411         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3412         ff0.loadArrays() ##
3413         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3414         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3415         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3416         ff0.loadArraysIfNecessary() ##
3417         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3418         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3419         heap_memory_ref=ff0.getHeapMemorySize()
3420         self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3421         ff0.unloadArrays()
3422         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3423         self.assertEqual(hmd,-800) # -50*8*2
3424         ff0.loadArrays() ##
3425         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3426         #
3427         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3428         heap_memory_ref=ff0.getHeapMemorySize()
3429         self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3430         ff0.loadArrays() ##
3431         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3432         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3433         #
3434         fieldName="FieldCellMultiTS"
3435         ff0=MEDFileFieldMultiTS()
3436         for t in range(20):
3437             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)
3438             f0.setTime(float(t)+0.1,t,100+t)
3439             f0.checkConsistencyLight()
3440             ff0.appendFieldNoProfileSBT(f0)
3441             pass
3442         ff0.write(fname,0)
3443         #
3444         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3445         heap_memory_ref=ff0.getHeapMemorySize()
3446         self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3447         ff0.loadArrays()
3448         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3449         del ff0
3450         #
3451         ffs=MEDFileFields(fname,False)
3452         heap_memory_ref=ffs.getHeapMemorySize()
3453         self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3454         ffs.loadArrays()
3455         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3456         pass
3457
3458     @WriteInTmpDir
3459     def testMEDFileMeshReadSelector1(self):
3460         mrs=MEDFileMeshReadSelector()
3461         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3462         mrs.__str__() ; mrs.__repr__()
3463         #
3464         mrs=MEDFileMeshReadSelector(0)
3465         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())
3466         mrs=MEDFileMeshReadSelector(1)
3467         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3468         mrs=MEDFileMeshReadSelector(2)
3469         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3470         mrs=MEDFileMeshReadSelector(3)
3471         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3472         mrs=MEDFileMeshReadSelector(4)
3473         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3474         mrs=MEDFileMeshReadSelector(5)
3475         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3476         mrs=MEDFileMeshReadSelector(6)
3477         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3478         mrs=MEDFileMeshReadSelector(7)
3479         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3480         mrs=MEDFileMeshReadSelector(8)
3481         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3482         mrs=MEDFileMeshReadSelector(9)
3483         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3484         mrs=MEDFileMeshReadSelector(10)
3485         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3486         mrs=MEDFileMeshReadSelector(11)
3487         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3488         mrs=MEDFileMeshReadSelector(12)
3489         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3490         mrs=MEDFileMeshReadSelector(13)
3491         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3492         mrs=MEDFileMeshReadSelector(14)
3493         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3494         mrs=MEDFileMeshReadSelector(15)
3495         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3496         mrs=MEDFileMeshReadSelector(16)
3497         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3498         mrs=MEDFileMeshReadSelector(17)
3499         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3500         mrs=MEDFileMeshReadSelector(18)
3501         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3502         mrs=MEDFileMeshReadSelector(19)
3503         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3504         mrs=MEDFileMeshReadSelector(20)
3505         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3506         mrs=MEDFileMeshReadSelector(21)
3507         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3508         mrs=MEDFileMeshReadSelector(22)
3509         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3510         mrs=MEDFileMeshReadSelector(23)
3511         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3512         mrs=MEDFileMeshReadSelector(24)
3513         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3514         mrs=MEDFileMeshReadSelector(25)
3515         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3516         mrs=MEDFileMeshReadSelector(26)
3517         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3518         mrs=MEDFileMeshReadSelector(27)
3519         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3520         mrs=MEDFileMeshReadSelector(28)
3521         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3522         mrs=MEDFileMeshReadSelector(29)
3523         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3524         mrs=MEDFileMeshReadSelector(30)
3525         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3526         mrs=MEDFileMeshReadSelector(31)
3527         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3528         mrs=MEDFileMeshReadSelector(32)
3529         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3530         mrs=MEDFileMeshReadSelector(33)
3531         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3532         mrs=MEDFileMeshReadSelector(34)
3533         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3534         mrs=MEDFileMeshReadSelector(35)
3535         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3536         mrs=MEDFileMeshReadSelector(36)
3537         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3538         mrs=MEDFileMeshReadSelector(37)
3539         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3540         mrs=MEDFileMeshReadSelector(38)
3541         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3542         mrs=MEDFileMeshReadSelector(39)
3543         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3544         mrs=MEDFileMeshReadSelector(40)
3545         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3546         mrs=MEDFileMeshReadSelector(41)
3547         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3548         mrs=MEDFileMeshReadSelector(42)
3549         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3550         mrs=MEDFileMeshReadSelector(43)
3551         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3552         mrs=MEDFileMeshReadSelector(44)
3553         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3554         mrs=MEDFileMeshReadSelector(45)
3555         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3556         mrs=MEDFileMeshReadSelector(46)
3557         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3558         mrs=MEDFileMeshReadSelector(47)
3559         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3560         mrs=MEDFileMeshReadSelector(48)
3561         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3562         mrs=MEDFileMeshReadSelector(49)
3563         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3564         mrs=MEDFileMeshReadSelector(50)
3565         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3566         mrs=MEDFileMeshReadSelector(51)
3567         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3568         mrs=MEDFileMeshReadSelector(52)
3569         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3570         mrs=MEDFileMeshReadSelector(53)
3571         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3572         mrs=MEDFileMeshReadSelector(54)
3573         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3574         mrs=MEDFileMeshReadSelector(55)
3575         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3576         mrs=MEDFileMeshReadSelector(56)
3577         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3578         mrs=MEDFileMeshReadSelector(57)
3579         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3580         mrs=MEDFileMeshReadSelector(58)
3581         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3582         mrs=MEDFileMeshReadSelector(59)
3583         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3584         mrs=MEDFileMeshReadSelector(60)
3585         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3586         mrs=MEDFileMeshReadSelector(61)
3587         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3588         mrs=MEDFileMeshReadSelector(62)
3589         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3590         mrs=MEDFileMeshReadSelector(63)
3591         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3592         #
3593         mrs=MEDFileMeshReadSelector(63)
3594         mrs.setCellFamilyFieldReading(False)
3595         self.assertEqual(mrs.getCode(),62)
3596         mrs.setCellFamilyFieldReading(True)
3597         self.assertEqual(mrs.getCode(),63)
3598         mrs.setNodeFamilyFieldReading(False)
3599         self.assertEqual(mrs.getCode(),61)
3600         mrs.setNodeFamilyFieldReading(True)
3601         self.assertEqual(mrs.getCode(),63)
3602         mrs.setCellNameFieldReading(False)
3603         self.assertEqual(mrs.getCode(),59)
3604         mrs.setCellNameFieldReading(True)
3605         self.assertEqual(mrs.getCode(),63)
3606         mrs.setNodeNameFieldReading(False)
3607         self.assertEqual(mrs.getCode(),55)
3608         mrs.setNodeNameFieldReading(True)
3609         self.assertEqual(mrs.getCode(),63)
3610         mrs.setCellNumFieldReading(False)
3611         self.assertEqual(mrs.getCode(),47)
3612         mrs.setCellNumFieldReading(True)
3613         self.assertEqual(mrs.getCode(),63)
3614         mrs.setNodeNumFieldReading(False)
3615         self.assertEqual(mrs.getCode(),31)
3616         mrs.setNodeNumFieldReading(True)
3617         self.assertEqual(mrs.getCode(),63)
3618         pass
3619
3620     @WriteInTmpDir
3621     def testPartialReadOfMeshes(self):
3622         fname="Pyfile70.med"
3623         # building a mesh containing 4 tri3 + 5 quad4
3624         tri=MEDCouplingUMesh("tri",2)
3625         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3626         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3627         tris = [tri.deepCopy() for i in range(4)]
3628         for i,elt in enumerate(tris): elt.translate([i,0])
3629         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3630         quad=MEDCouplingUMesh("quad",2)
3631         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3632         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3633         quads = [quad.deepCopy() for i in range(5)]
3634         for i,elt in enumerate(quads): elt.translate([5+i,0])
3635         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3636         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3637         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3638         m1=m.buildDescendingConnectivity()[0]
3639         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3640         #
3641         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3642         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3643         mm.setGroupsAtLevel(0,[grp0,grp1])
3644         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3645         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3646         mm.setGroupsAtLevel(-1,[grp2,grp3])
3647         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3648         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3649         mm.setGroupsAtLevel(1,[grp4,grp5])
3650         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3651         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3652         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3653         #
3654         mm.write(fname,2)
3655         ##
3656         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3657         b4_ref_heap_mem=mm.getHeapMemorySize()
3658         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3659         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3660         ref_heap_mem=mm.getHeapMemorySize()
3661         # check the gain of memory using 1GTUMesh instead of UMesh
3662         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
3663         #
3664         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3665         self.assertEqual(len(mm.getGroupsNames()),0)
3666         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3667         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3668         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3669         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3670         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3671         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3672         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3673         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3674         delta1=ref_heap_mem-mm.getHeapMemorySize()
3675         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3676         #
3677         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3678         self.assertEqual(len(mm.getGroupsNames()),6)
3679         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3680         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3681         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3682         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3683         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3684         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3685         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3686         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3687         delta2=ref_heap_mem-mm.getHeapMemorySize()
3688         self.assertTrue(delta2<delta1)
3689         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3690         #
3691         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3692         self.assertEqual(len(mm.getGroupsNames()),6)
3693         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3694         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3695         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3696         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3697         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3698         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3699         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3700         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3701         delta3=ref_heap_mem-mm.getHeapMemorySize()
3702         self.assertTrue(delta3<delta2)
3703         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3704         #
3705         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3706         self.assertEqual(len(mm.getGroupsNames()),6)
3707         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3708         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3709         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3710         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3711         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3712         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3713         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3714         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3715         delta4=ref_heap_mem-mm.getHeapMemorySize()
3716         self.assertTrue(delta4<delta3)
3717         self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3718         #
3719         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
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)!=None)
3726         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3727         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3728         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3729         delta5=ref_heap_mem-mm.getHeapMemorySize()
3730         self.assertTrue(delta5<delta4)
3731         self.assertEqual(delta5,0)
3732         pass
3733
3734     # this test checks that setFieldProfile perform a check of the array length
3735     # compared to the profile length. This test also checks that mesh attribute of field
3736     # is not used by setFieldProfile (because across this test mesh is equal to None)
3737     @WriteInTmpDir
3738     def testCheckCompatibilityPfl1(self):
3739         # building a mesh containing 4 tri3 + 5 quad4
3740         tri=MEDCouplingUMesh("tri",2)
3741         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3742         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3743         tris = [tri.deepCopy() for i in range(4)]
3744         for i,elt in enumerate(tris): elt.translate([i,0])
3745         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3746         quad=MEDCouplingUMesh("quad",2)
3747         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3748         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3749         quads = [quad.deepCopy() for i in range(5)]
3750         for i,elt in enumerate(quads): elt.translate([5+i,0])
3751         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3752         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3753         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3754         m1=m.buildDescendingConnectivity()[0]
3755         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3756         #
3757         f1ts=MEDFileField1TS()
3758         f=MEDCouplingFieldDouble(ON_NODES)
3759         vals=DataArrayDouble(7) ; vals.iota(1000)
3760         f.setArray(vals)
3761         f.setName("anonymous") # f has no mesh it is not a bug
3762         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3763         f1ts.setFieldProfile(f,mm,0,pfl)
3764         #
3765         f1ts=MEDFileField1TS()
3766         f=MEDCouplingFieldDouble(ON_NODES)
3767         vals=DataArrayDouble(8) ; vals.iota(1000)
3768         f.setArray(vals)
3769         f.setName("anonymous") # f has no mesh it is not a bug
3770         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3771         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3772         #
3773         f1ts=MEDFileField1TS()
3774         f=MEDCouplingFieldDouble(ON_CELLS)
3775         vals=DataArrayDouble(7) ; vals.iota(1000)
3776         f.setArray(vals)
3777         f.setName("anonymous") # f has no mesh it is not a bug
3778         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3779         f1ts.setFieldProfile(f,mm,0,pfl)
3780         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3781         #
3782         f1ts=MEDFileField1TS()
3783         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3784         vals=DataArrayDouble(27) ; vals.iota(1000)
3785         f.setArray(vals)
3786         f.setName("anonymous") # f has no mesh it is not a bug
3787         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3788         f.setMesh(m[pfl])
3789         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])
3790         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3791         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])
3792         f.setMesh(None)
3793         f1ts.setFieldProfile(f,mm,0,pfl)
3794         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3795         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3796         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3797         vals=DataArrayDouble(27) ; vals.iota(1000)
3798         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3799         #
3800         f1ts=MEDFileField1TS()
3801         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3802         vals=DataArrayDouble(25) ; vals.iota(1000)
3803         f.setArray(vals)
3804         f.setName("anonymous") # f has no mesh it is not a bug
3805         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3806         f1ts.setFieldProfile(f,mm,0,pfl)
3807         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3808         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3809         f.setArray(vals2)
3810         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3811         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3812         #
3813         f1ts=MEDFileField1TS()
3814         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3815         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3816         f.setArray(vals)
3817         f1ts.setFieldProfile(f,mm,0,pfl)
3818         pass
3819
3820     @WriteInTmpDir
3821     def testWRMeshWithNoCells(self):
3822         fname="Pyfile71.med"
3823         a=DataArrayDouble(4) ; a.iota()
3824         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3825         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3826         m=MEDFileUMesh()
3827         m.setMeshAtLevel(0,m00)
3828         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3829         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3830         m.write(fname,2)
3831         del m,a,c,m0,m00
3832         #
3833         m=MEDFileMesh.New(fname)
3834         self.assertEqual((),m.getNonEmptyLevels())
3835         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))
3836         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3837         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3838         pass
3839
3840     @WriteInTmpDir
3841     def testWRQPolyg1(self):
3842         fname="Pyfile72.med"
3843         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3844         m.insertNextCell([0,2,1,3])
3845         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3846         #
3847         ms = [m.deepCopy() for i in range(4)]
3848         for i,elt in enumerate(ms):
3849             elt.translate([float(i)*1.5,0.])
3850             pass
3851         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3852         m0.convertAllToPoly()
3853         #
3854         ms = [m.deepCopy() for i in range(5)]
3855         for i,elt in enumerate(ms):
3856             elt.translate([float(i)*1.5,1.5])
3857             pass
3858         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3859         m1.convertAllToPoly()
3860         m1.convertLinearCellsToQuadratic()
3861         #
3862         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3863         ##
3864         mm=MEDFileUMesh()
3865         mm.setMeshAtLevel(0,m)
3866         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3867         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3868         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3869         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3870         ##
3871         mm.write(fname,2)
3872         del mm
3873         #
3874         mm_read=MEDFileUMesh(fname)
3875         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3876         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3877         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3878         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3879         ##
3880         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3881         f.setMesh(m)
3882         arr0=DataArrayDouble(9) ; arr0.iota()
3883         arr1=DataArrayDouble(9) ; arr1.iota(100)
3884         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3885         f.setArray(arr) ; f.checkConsistencyLight()
3886         f.setTime(5.6,1,2)
3887         ff=MEDFileField1TS()
3888         ff.setFieldNoProfileSBT(f)
3889         ff.write(fname,0)
3890         ##
3891         ff_read=MEDFileField1TS(fname)
3892         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3893         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3894         pass
3895
3896     @WriteInTmpDir
3897     def testLoadIfNecessaryOnFromScratchFields0(self):
3898         """
3899         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3900         """
3901         fname="Pyfile77.med"
3902         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3903         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3904         m.allocateCells()
3905         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3906         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3907         m.finishInsertingCells()
3908         #
3909         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3910         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3911         fs=MEDFileFields()
3912         arrs=4*[None]
3913         #
3914         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3915         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3916         f0.setTime(1.1,1,1)
3917         f0.setName("myELNOField")
3918         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3919         f0.setArray(arrs[0])
3920         ff0.appendFieldNoProfileSBT(f0)
3921         #
3922         f0.setTime(2.2,2,1)
3923         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3924         f0.setArray(arrs[1])
3925         ff0.appendFieldNoProfileSBT(f0)
3926         #
3927         f0.setTime(3.3,3,1)
3928         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3929         f0.setArray(arrs[2])
3930         ff0.appendFieldNoProfileSBT(f0)
3931         #
3932         f0.setTime(4.4,4,1)
3933         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3934         f0.setArray(arrs[3])
3935         ff0.appendFieldNoProfileSBT(f0)
3936         #
3937         for i,arr in enumerate(arrs):
3938             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3939             fs[0][i].loadArraysIfNecessary()
3940             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3941             pass
3942         fs.loadArraysIfNecessary()
3943         for i,arr in enumerate(arrs):
3944             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3945             pass
3946         fs[0].loadArraysIfNecessary()
3947         for i,arr in enumerate(arrs):
3948             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3949             pass
3950         pass
3951
3952     @WriteInTmpDir
3953     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3954         """ 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.
3955         """
3956         fname="Pyfile78.med"
3957         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)
3958         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3959         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3960         m0.allocateCells()
3961         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
3962             m0.insertNextCell(NORM_TETRA4,elt)
3963             pass
3964         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
3965             m0.insertNextCell(NORM_PYRA5,elt)
3966             pass
3967         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
3968             m0.insertNextCell(NORM_PENTA6,elt)
3969             pass
3970         m0.checkConsistency()
3971         m1=MEDCouplingUMesh(); m1.setName("mesh")
3972         m1.setMeshDimension(2);
3973         m1.allocateCells(5);
3974         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3975         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3976         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3977         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3978         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3979         m1.setCoords(coords);
3980         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3981         m3.allocateCells()
3982         m3.insertNextCell(NORM_POINT1,[2])
3983         m3.insertNextCell(NORM_POINT1,[3])
3984         m3.insertNextCell(NORM_POINT1,[4])
3985         m3.insertNextCell(NORM_POINT1,[5])
3986         #
3987         mm=MEDFileUMesh()
3988         mm.setMeshAtLevel(0,m0)
3989         mm.setMeshAtLevel(-1,m1)
3990         mm.setMeshAtLevel(-3,m3)
3991         mm.write(fname,2)
3992         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3993         mm=MEDFileMesh.New(fname)
3994         fs=MEDFileFields()
3995         fmts=MEDFileFieldMultiTS()
3996         f1ts=MEDFileField1TS()
3997         for lev in mm.getNonEmptyLevels():
3998             for gt in mm.getGeoTypesAtLevel(lev):
3999                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4000                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4001                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4002                 f.setArray(arr) ; f.setName("f0")
4003                 f1ts.setFieldNoProfileSBT(f)
4004                 pass
4005             pass
4006         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4007         for lev in [0,-1,-3]:
4008             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4009             pass
4010         fmts.pushBackTimeStep(f1ts)
4011         fs.pushField(fmts)
4012         fs.write(fname,0)
4013         del fs,fmts,f1ts
4014         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4015         fs=MEDFileFields(fname)
4016         self.assertEqual(len(fs),1)
4017         self.assertEqual(len(fs[0]),1)
4018         f1ts=fs[0][0]
4019         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),'','')])])
4020         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))
4021         pass
4022
4023     @WriteInTmpDir
4024     def testMEDFileUMeshSetName(self):
4025         """ 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.
4026         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4027         """
4028         fname="Pyfile79.med"
4029         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4030         mm=MEDFileUMesh()
4031         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4032         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)
4033         m0.allocateCells(5);
4034         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4035         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4036         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4037         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4038         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4039         m0.setCoords(coords);
4040         mm.setMeshAtLevel(0,m0)
4041         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4042         m2.allocateCells()
4043         m2.insertNextCell(NORM_POINT1,[2])
4044         m2.insertNextCell(NORM_POINT1,[3])
4045         m2.insertNextCell(NORM_POINT1,[4])
4046         m2.insertNextCell(NORM_POINT1,[5])
4047         mm.setMeshAtLevel(-2,m2)
4048         self.assertEqual(mm.getName(),"")
4049         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4050         mm.forceComputationOfParts()
4051         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4052         mm.setName("abc")
4053         self.assertEqual(mm.getName(),"abc")
4054         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4055         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4056         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4057         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4058         pass
4059
4060     @WriteInTmpDir
4061     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4062         fileName="Pyfile80.med"
4063         m=MEDCouplingCMesh() ; m.setName("cmesh")
4064         arr=DataArrayDouble(6) ; arr.iota()
4065         m.setCoords(arr,arr)
4066         nbCells=m.getNumberOfCells()
4067         self.assertEqual(25,nbCells)
4068         f=MEDCouplingFieldDouble(ON_CELLS)
4069         f.setName("FieldOnCell") ; f.setMesh(m)
4070         arr=DataArrayDouble(nbCells) ; arr.iota()
4071         mm=MEDFileCMesh()
4072         mm.setMesh(m)
4073         #
4074         fmts=MEDFileFieldMultiTS()
4075         #
4076         for i in range(nbCells):
4077             t=(float(i)+0.1,i+1,-i-2)
4078             f.setTime(*t)
4079             arr2=DataArrayDouble(nbCells)
4080             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4081             arr2[perm]=arr
4082             f.setArray(arr2)
4083             f1ts=MEDFileField1TS()
4084             f1ts.setFieldNoProfileSBT(f)
4085             fmts.pushBackTimeStep(f1ts)
4086             pass
4087         fmts.unloadArraysWithoutDataLoss()
4088         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))
4089         fs=MEDFileFields() ; fs.pushField(fmts)
4090         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))
4091         fs.unloadArraysWithoutDataLoss()
4092         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))
4093         f1ts=fs[0][0]
4094         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))
4095         f1ts.unloadArraysWithoutDataLoss()
4096         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))
4097         mm.write(fileName,2)
4098         fs.write(fileName,0)
4099         del m,fmts,mm,f,f1ts
4100         ##
4101         mm=MEDFileMesh.New(fileName)
4102         fmts=MEDFileFieldMultiTS(fileName)
4103         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))
4104         fmts.unloadArraysWithoutDataLoss()
4105         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4106         fmts.loadArraysIfNecessary()
4107         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))
4108         del mm,fmts
4109         fs=MEDFileFields(fileName)
4110         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))
4111         fs.unloadArraysWithoutDataLoss()
4112         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4113         fs.loadArraysIfNecessary()
4114         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))
4115         del fs
4116         f1ts=MEDFileField1TS(fileName)
4117         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))
4118         f1ts.unloadArraysWithoutDataLoss()
4119         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4120         f1ts.loadArraysIfNecessary()
4121         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))
4122         pass
4123
4124     @WriteInTmpDir
4125     def testMEDFileUMeshLoadPart1(self):
4126         """ 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
4127         memory of the returned instance.
4128         """
4129         fileName="Pyfile81.med"
4130         arr=DataArrayDouble(6) ; arr.iota()
4131         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4132         m=m.buildUnstructured()
4133         m.setName("Mesh")
4134         m.changeSpaceDimension(3,0.)
4135         infos=["aa [b]","cc [de]","gg [klm]"]
4136         m.getCoords().setInfoOnComponents(infos)
4137         m.checkConsistency()
4138         mm=MEDFileUMesh()
4139         mm.setMeshAtLevel(0,m)
4140         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4141         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4142         mm.setMeshAtLevel(-1,m1)
4143         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])
4144         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])
4145         namesCellL0=DataArrayAsciiChar(25,16)
4146         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
4147         renumM1=DataArrayInt([3,4,0,2,1])
4148         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4149         mm.setRenumFieldArr(0,renum0)
4150         mm.setFamilyFieldArr(0,famField0)
4151         mm.setNameFieldAtLevel(0,namesCellL0)
4152         mm.setRenumFieldArr(-1,renumM1)
4153         mm.setFamilyFieldArr(-1,famFieldM1)
4154         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])
4155         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])
4156         namesNodes=DataArrayAsciiChar(36,16)
4157         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
4158         mm.setRenumFieldArr(1,renum1)
4159         mm.setFamilyFieldArr(1,famField1)
4160         mm.setNameFieldAtLevel(1,namesNodes)
4161         mm.setFamilyId("Fam7",77)
4162         mm.setFamilyId("Fam8",88)
4163         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4164         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4165         mm.write(fileName,2)
4166         #
4167         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4168         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4169         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])))
4170         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)
4171         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4172         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4173         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4174         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4175         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4176         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4177         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4178         #
4179         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4180         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4181         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])))
4182         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)
4183         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4184         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4185         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4186         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4187         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4188         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4189         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4190         #
4191         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4192         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4193         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4194         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4195         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4196         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4197         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4198         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4199         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])))
4200         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4201         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)
4202         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4203         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4204         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4205         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4206         pass
4207
4208     @WriteInTmpDir
4209     def testMEDFileFieldsLoadPart1(self):
4210         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4211         """
4212         fileName="Pyfile82.med"
4213         meshName="Mesh"
4214         compos=["aa [kg]","bbb [m/s]"]
4215         arr=DataArrayDouble(6) ; arr.iota()
4216         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4217         m=m.buildUnstructured()
4218         m.setName(meshName)
4219         m.changeSpaceDimension(3,0.)
4220         infos=["aa [b]","cc [de]","gg [klm]"]
4221         m.getCoords().setInfoOnComponents(infos)
4222         m.checkConsistency()
4223         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4224         f.setName("Field")
4225         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4226         arr[:,0]=list(range(25))
4227         arr[:,1]=list(range(100,125))
4228         f.setArray(arr)
4229         WriteField(fileName,f,True)
4230         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4231         f.setName("FieldNode")
4232         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4233         arr[:,0]=list(range(200,236))
4234         arr[:,1]=list(range(300,336))
4235         f.setArray(arr)
4236         f.checkConsistencyLight()
4237         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4238         #
4239         ms=MEDFileMeshes()
4240         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4241         ms.pushMesh(mm)
4242         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4243         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4244         #
4245         ms=MEDFileMeshes()
4246         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4247         ms.pushMesh(mm)
4248         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4249         fs=fs.deepCopy()
4250         fs[0][0].loadArrays()
4251         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4252         arr.setInfoOnComponents(compos)
4253         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4254         fs[1][0].loadArrays()
4255         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4256         arr.setInfoOnComponents(compos)
4257         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4258         pass
4259
4260     @WriteInTmpDir
4261     def testMEDFileWithoutCells1(self):
4262         fileName="Pyfile83.med"
4263         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4264         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4265         mm=MEDFileUMesh()
4266         mm.setCoords(coo)
4267         mm.setName("mesh")
4268         mm.write(fileName,2)
4269         #
4270         mm=MEDFileMesh.New(fileName)
4271         self.assertEqual(mm.getName(),"mesh")
4272         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4273         pass
4274
4275     @WriteInTmpDir
4276     def testZipCoordsWithLoadPart1(self):
4277         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4278         """
4279         fileName="Pyfile84.med"
4280         meshName="Mesh"
4281         compos=["aa [kg]","bbb [m/s]"]
4282         arr=DataArrayDouble(6) ; arr.iota()
4283         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4284         m=m.buildUnstructured()
4285         m.setName(meshName)
4286         m.changeSpaceDimension(3,0.)
4287         infos=["aa [b]","cc [de]","gg [klm]"]
4288         m.getCoords().setInfoOnComponents(infos)
4289         m.checkConsistency()
4290         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4291         f.setName("Field")
4292         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4293         arr[:,0]=list(range(25))
4294         arr[:,1]=list(range(100,125))
4295         f.setArray(arr)
4296         WriteField(fileName,f,True)
4297         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4298         f.setName("FieldNode")
4299         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4300         arr[:,0]=list(range(200,236))
4301         arr[:,1]=list(range(300,336))
4302         f.setArray(arr)
4303         f.checkConsistencyLight()
4304         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4305         #
4306         ms=MEDFileMeshes()
4307         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4308         ms.pushMesh(mm)
4309         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4310         self.assertEqual(spd.getSlice(),slice(4,6,1))
4311         spd=mm.getPartDefAtLevel(1)
4312         self.assertEqual(spd.getSlice(),slice(4,14,1))
4313         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4314         mm.zipCoords() # <- The important line is here !
4315         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4316         self.assertEqual(spd.getSlice(),slice(4,6,1))
4317         spd=mm.getPartDefAtLevel(1)
4318         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4319         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4320         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4321         fs[0][0].loadArrays()
4322         arr=DataArrayDouble([(4,104),(5,105)])
4323         arr.setInfoOnComponents(compos)
4324         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4325         fs[1][0].loadArrays()
4326         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4327         arr.setInfoOnComponents(compos)
4328         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4329         m_ref = mm[0].deepCopy()
4330         # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4331         ms=MEDFileMeshes()
4332         mrs = MEDFileMeshReadSelector()
4333         mrs.setNumberOfCoordsLoadSessions(2)
4334         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4335         ms.pushMesh(mm)
4336         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4337         self.assertEqual(spd.getSlice(),slice(4,6,1))
4338         spd=mm.getPartDefAtLevel(1)
4339         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4340         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4341         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4342         fs[0][0].loadArrays()
4343         arr=DataArrayDouble([(4,104),(5,105)])
4344         arr.setInfoOnComponents(compos)
4345         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4346         fs[1][0].loadArrays()
4347         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4348         arr.setInfoOnComponents(compos)
4349         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4350         self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4351         pass
4352
4353     @WriteInTmpDir
4354     def testMEDFileCMeshSetGroupsAtLevel(self):
4355         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4356         """
4357         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4358         m.setName("Mesh")
4359         mm=MEDFileCMesh() ; mm.setMesh(m)
4360         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4361         mm.setGroupsAtLevel(0,[grp])
4362         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4363         pass
4364
4365     @WriteInTmpDir
4366     def testMEDFileUMeshBuildExtrudedMesh1(self):
4367         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4368         fileName="Pyfile85.med"
4369         meshName2D="Mesh"
4370         meshName1D="Mesh1D"
4371         meshName3DOut="Mesh3D"
4372         #
4373         d1=DataArrayInt([0,4,20,24])
4374         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4375         #
4376         a=DataArrayDouble(6) ; a.iota()
4377         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4378         m=m.buildUnstructured()
4379         d1c=d1.buildComplement(m.getNumberOfCells())
4380         m=m[d1c] ; m.zipCoords()
4381         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4382         m0.simplexize(0)
4383         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4384         m.setName(meshName2D)
4385         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4386         e=d.deltaShiftIndex().findIdsEqual(1)
4387         #
4388         mm=MEDFileUMesh()
4389         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4390         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4391         mm.setGroupsAtLevel(0,[grp0])
4392         grp1=e ; grp1.setName("grp1")
4393         mm.setGroupsAtLevel(-1,[grp1])
4394         mm.write(fileName,2)
4395         #
4396         a=DataArrayDouble(3) ; a.iota()
4397         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4398         tmp.setName(meshName1D)
4399         tmp.changeSpaceDimension(3)
4400         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4401         mm1D=MEDFileUMesh()
4402         mm1D.setMeshAtLevel(0,tmp)
4403         mm1D.write(fileName,0)
4404         # test is here !
4405         mm2D=MEDFileMesh.New(fileName,meshName2D)
4406         mm1D=MEDFileMesh.New(fileName,meshName1D)
4407         m1D=mm1D.getMeshAtLevel(0)
4408         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4409         #
4410         self.assertEqual(mm3D.getName(),mm2D.getName())
4411         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4412         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4413         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4414         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4415         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4416         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4417         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4418         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4419         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4420         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.)])
4421         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4422         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])
4423         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4424         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])
4425         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4426         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])
4427         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4428         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])
4429         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4430         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])
4431         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4432         d=DataArrayInt(129) ; d.iota() ; d*=3
4433         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4434         #
4435         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4436         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4437         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4438         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4439         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])))
4440         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])))
4441         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])))
4442         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])))
4443         mm3D.setName("MeshExtruded")
4444         mm3D.write(fileName,0)
4445         pass
4446
4447     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4448     @WriteInTmpDir
4449     def testMEDFileUMeshPickeling1(self):
4450         outFileName="Pyfile86.med"
4451         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)
4452         c.setInfoOnComponents(["aa","bbb"])
4453         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4454         m=MEDCouplingUMesh();
4455         m.setMeshDimension(2);
4456         m.allocateCells(5);
4457         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4458         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4459         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4460         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4461         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4462         m.finishInsertingCells();
4463         m.setCoords(c)
4464         m.checkConsistencyLight()
4465         m1=MEDCouplingUMesh.New();
4466         m1.setMeshDimension(1);
4467         m1.allocateCells(3);
4468         m1.insertNextCell(NORM_SEG2,2,[1,4])
4469         m1.insertNextCell(NORM_SEG2,2,[3,6])
4470         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4471         m1.finishInsertingCells();
4472         m1.setCoords(c)
4473         m1.checkConsistencyLight()
4474         m2=MEDCouplingUMesh.New();
4475         m2.setMeshDimension(0);
4476         m2.allocateCells(4);
4477         m2.insertNextCell(NORM_POINT1,1,[1])
4478         m2.insertNextCell(NORM_POINT1,1,[3])
4479         m2.insertNextCell(NORM_POINT1,1,[2])
4480         m2.insertNextCell(NORM_POINT1,1,[6])
4481         m2.finishInsertingCells();
4482         m2.setCoords(c)
4483         m2.checkConsistencyLight()
4484         #
4485         mm=MEDFileUMesh.New()
4486         self.assertTrue(mm.getUnivNameWrStatus())
4487         mm.setName("MyFirstMEDCouplingMEDmesh")
4488         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4489         mm.setCoords(c)
4490         mm[-1]=m1;
4491         mm[0]=m;
4492         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4493         mm[-2]=m2;
4494         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4495         # playing with groups
4496         g1_2=DataArrayInt.New()
4497         g1_2.setValues([1,3],2,1)
4498         g1_2.setName("G1")
4499         g2_2=DataArrayInt.New()
4500         g2_2.setValues([1,2,3],3,1)
4501         g2_2.setName("G2")
4502         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4503         g1_1=DataArrayInt.New()
4504         g1_1.setValues([0,1,2],3,1)
4505         g1_1.setName("G1")
4506         g2_1=DataArrayInt.New()
4507         g2_1.setValues([0,2],2,1)
4508         g2_1.setName("G2")
4509         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4510         g1_N=DataArrayInt.New()
4511         g1_N.setValues(list(range(8)),8,1)
4512         g1_N.setName("G1")
4513         g2_N=DataArrayInt.New()
4514         g2_N.setValues(list(range(9)),9,1)
4515         g2_N.setName("G2")
4516         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4517         mm.createGroupOnAll(0,"GrpOnAllCell")
4518         # check content of mm
4519         t=mm.getGroupArr(0,"G1",False)
4520         self.assertTrue(g1_2.isEqual(t));
4521         t=mm.getGroupArr(0,"G2",False)
4522         self.assertTrue(g2_2.isEqual(t));
4523         t=mm.getGroupArr(-1,"G1",False)
4524         self.assertTrue(g1_1.isEqual(t));
4525         t=mm.getGroupArr(-1,"G2",False)
4526         self.assertTrue(g2_1.isEqual(t));
4527         t=mm.getGroupArr(1,"G1",False)
4528         self.assertTrue(g1_N.isEqual(t));
4529         t=mm.getGroupArr(1,"G2",False)
4530         self.assertTrue(g2_N.isEqual(t));
4531         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4532         t=mm.getGroupArr(0,"GrpOnAllCell")
4533         #
4534         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4535         mm2=pickle.loads(st)
4536         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4537         self.assertEqual(mm.getAxisType(),AX_CART)
4538         #
4539         mm.setAxisType(AX_CYL)
4540         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4541         mm2=pickle.loads(st)
4542         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4543         self.assertEqual(mm2.getAxisType(),AX_CYL)
4544         pass
4545
4546     @WriteInTmpDir
4547     def testMEDFileFieldsLoadSpecificEntities1(self):
4548         nbNodes=11
4549         fieldName="myField"
4550         fileName="Pyfile87.med"
4551         nbPdt=10
4552         meshName="Mesh"
4553         #
4554         m=MEDCouplingCMesh()
4555         arr=DataArrayDouble(nbNodes) ; arr.iota()
4556         m.setCoords(arr)
4557         m=m.buildUnstructured()
4558         m.setName(meshName)
4559         #
4560         fmts=MEDFileFieldMultiTS()
4561         for i in range(nbPdt):
4562             f=MEDCouplingFieldDouble(ON_NODES)
4563             f.setMesh(m)
4564             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4565             f.setArray(arr)
4566             f.setName(fieldName)
4567             f.setTime(float(i),i,0)
4568             fmts.appendFieldNoProfileSBT(f)
4569             pass
4570         #
4571         mm=MEDFileUMesh() ; mm[0]=m
4572         fmts.write(fileName,2)
4573         mm.write(fileName,0)
4574         #
4575         fs=MEDFileFields(fileName,False)
4576         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4577         fs.loadArraysIfNecessary()
4578         fs2.loadArraysIfNecessary()
4579         for i in range(nbPdt):
4580             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4581             pass
4582         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4583         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4584         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4585         fmts=MEDFileFieldMultiTS()
4586         for i in range(nbPdt):
4587             f=MEDCouplingFieldDouble(ON_CELLS)
4588             f.setMesh(m3)
4589             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4590             f.setArray(arr)
4591             f.setName(fieldName)
4592             f.setTime(float(i),i,0)
4593             fmts.appendFieldNoProfileSBT(f)
4594             pass
4595         mm=MEDFileUMesh() ; mm[0]=m3
4596         del mm[0]
4597         self.assertEqual(mm.getNonEmptyLevels(),())
4598         mm[0]=m3
4599         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4600         fmts.write(fileName,2)
4601         fs=MEDFileFields(fileName,False)
4602         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4603         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4604         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4605         fs.loadArraysIfNecessary()
4606         fs2.loadArraysIfNecessary()
4607         fs3.loadArraysIfNecessary()
4608         fs4.loadArraysIfNecessary()
4609         for i in range(nbPdt):
4610             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4611             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4612             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4613             pass
4614         pass
4615
4616     @WriteInTmpDir
4617     def testMEDFileLotsOfTSRW1(self):
4618         nbNodes=11
4619         fieldName="myField"
4620         fileName="Pyfile88.med"
4621         nbPdt=300 # <- perftest = 30000
4622         meshName="Mesh"
4623         #
4624         maxPdt=100 # <- optimum = 500
4625         m=MEDCouplingCMesh()
4626         arr=DataArrayDouble(nbNodes) ; arr.iota()
4627         m.setCoords(arr)
4628         m=m.buildUnstructured()
4629         m.setName(meshName)
4630         #
4631         nbOfField=nbPdt//maxPdt
4632         fs=MEDFileFields()
4633         for j in range(nbOfField):
4634             fmts=MEDFileFieldMultiTS()
4635             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4636             for i in range(s.start, s.stop, s.step):
4637                 f=MEDCouplingFieldDouble(ON_NODES)
4638                 f.setMesh(m)
4639                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4640                 f.setArray(arr)
4641                 f.setName("%s_%d"%(fieldName,j))
4642                 f.setTime(float(i),i,0)
4643                 fmts.appendFieldNoProfileSBT(f)
4644                 pass
4645             fs.pushField(fmts)
4646             pass
4647         #
4648         mm=MEDFileUMesh() ; mm[0]=m
4649         fs.write(fileName,2)
4650         mm.write(fileName,0)
4651         ############
4652         def appendInDict(d,key,val):
4653             if key in d:
4654                 d[key].append(val)
4655             else:
4656                 d[key]=[val]
4657             pass
4658         import re
4659         allFields=GetAllFieldNames(fileName)
4660         allFieldsDict={}
4661         pat=re.compile("([\d]+)([\s\S]+)$")
4662         for st in allFields:
4663             stRev=st[::-1]
4664             m=pat.match(stRev)
4665             if m:
4666                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4667                 pass
4668             else:
4669                 appendInDict(allFieldsDict,st,'')
4670                 pass
4671             pass
4672         fs2=MEDFileFields()
4673         for k in allFieldsDict:
4674             if allFieldsDict[k]!=['']:
4675                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4676                 pass
4677             fmts2=[]
4678             for it in allFieldsDict[k]:
4679                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4680                 pass
4681             fmts2.reverse()
4682             zeResu=fmts2.pop()
4683             nbIter=len(fmts2)
4684             for ii in range(nbIter):
4685                 zeResu.pushBackTimeSteps(fmts2.pop())
4686                 pass
4687             zeResu.setName(k)
4688             fs2.pushField(zeResu)
4689             pass
4690         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4691         pass
4692
4693     @WriteInTmpDir
4694     def testMEDFileMeshRearrangeFamIds1(self):
4695         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4696         fileName="Pyfile89.med"
4697         meshName='Maillage_2'
4698         mm=MEDFileUMesh()
4699         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)])
4700         #
4701         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])
4702         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])
4703         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4704         m0.setConnectivity(c0,c0i)
4705         mm[0]=m0
4706         #
4707         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])
4708         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])
4709         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4710         m1.setConnectivity(c1,c1i)
4711         mm[-1]=m1
4712         #
4713         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])
4714         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4715         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4716         mm[-2]=m2.buildUnstructured()
4717         #
4718         ref0=DataArrayInt(55) ; ref0[:]=0
4719         mm.setFamilyFieldArr(0,ref0)
4720         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]))
4721         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])
4722         mm.setFamilyFieldArr(-1,ref1)
4723         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])
4724         mm.setFamilyFieldArr(-2,ref2)
4725         #
4726         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4727             mm.setFamilyId(f,fid)
4728         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4729             mm.setFamiliesOnGroup(grp,fams)
4730         mm.write(fileName,2)
4731         #
4732         mm=MEDFileMesh.New(fileName)
4733         grp=mm.getGroup(-1,"Groupe_1")
4734         dai=grp.computeFetchedNodeIds()
4735         dai.setName("TOTO")
4736         mm.addGroup(1,dai)
4737         mm.rearrangeFamilies() # <- the aim of the test
4738         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4739         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4740         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4741         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4742         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])))
4743         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4744         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4745         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4746         for elt,fams in allGrps:
4747             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4748         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4749         for elt,eltId in allFams:
4750             self.assertEqual(mm.getFamilyId(elt),eltId)
4751         pass
4752
4753     @WriteInTmpDir
4754     def testNonRegrCMeshSetFieldPfl1(self):
4755         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4756         ff=MEDFileField1TS()
4757         meshName="mesh"
4758         mm=MEDFileCMesh()
4759         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4760         m.setCoords(arr)
4761         m.setName(meshName)
4762         mm.setMesh(m)
4763         field=MEDCouplingFieldDouble(ON_CELLS)
4764         field.setMesh(m)
4765         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4766         field.setName("Field")
4767         field.checkConsistencyLight()
4768         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4769         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4770         self.assertEqual(ff.getPfls(),())
4771         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4772         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4773         del ff,mm,field,field2,pfl
4774         # same with unstructured mesh
4775         ff=MEDFileField1TS()
4776         meshName="mesh"
4777         mm=MEDFileUMesh()
4778         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4779         m.setCoords(arr)
4780         m.setName(meshName)
4781         m=m.buildUnstructured()
4782         mm[0]=m
4783         field=MEDCouplingFieldDouble(ON_CELLS)
4784         field.setMesh(m)
4785         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4786         field.setName("Field")
4787         field.checkConsistencyLight()
4788         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4789         ff.setFieldProfile(field,mm,0,pfl)
4790         self.assertEqual(ff.getPfls(),())
4791         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4792         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4793         pass
4794
4795     @WriteInTmpDir
4796     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4797         meshName="mesh"
4798         fileName="Pyfile90.med"
4799         fileName2="Pyfile91.med"
4800         arr=DataArrayDouble(5) ; arr.iota()
4801         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4802         m=m.buildUnstructured()
4803         d=DataArrayInt([3,7,11,15])
4804         m1=m[d]
4805         m1.simplexize(0)
4806         m2=m[d.buildComplement(m.getNumberOfCells())]
4807         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4808         m.changeSpaceDimension(3,0.)
4809         arr=DataArrayDouble(3) ; arr.iota()
4810         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4811         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4812         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4813         m3D=m.buildExtrudedMesh(m1D,0)
4814         m3D.sortCellsInMEDFileFrmt()
4815         m3D.setName(meshName)
4816         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4817         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4818         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4819         #
4820         mm=MEDFileUMesh()
4821         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4822         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4823         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4824         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4825         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4826         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4827         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4828         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4829         mm.setGroupsAtLevel(0,[vol1,vol2])
4830         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4831         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4832         #
4833         mmOut1=mm.linearToQuadratic(0,0.)
4834         mmOut1.write(fileName2,2)
4835         mmOut2=mmOut1.quadraticToLinear(0.)
4836         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4837         pass
4838
4839     @WriteInTmpDir
4840     def testMEDFileMeshAddGroup1(self):
4841         m=MEDCouplingCMesh()
4842         arrX=DataArrayDouble(9) ; arrX.iota()
4843         arrY=DataArrayDouble(4) ; arrY.iota()
4844         m.setCoords(arrX,arrY)
4845         m.setName("mesh")
4846         mm=MEDFileCMesh()
4847         mm.setMesh(m)
4848         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4849         mm.addGroup(0,grp0)
4850         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4851         mm.addGroup(0,grp1)
4852         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4853         mm.addGroup(0,grp2)
4854         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4855         mm.addGroup(0,grp3)
4856         for grp in [grp0,grp1,grp2,grp3]:
4857             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4858         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4859         delta=12
4860         for grp in [grp0,grp1,grp2,grp3]:
4861             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4862             mm.addGroup(1,grpNode)
4863         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4864         for grp in [grp0,grp1,grp2,grp3]:
4865             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4866         for grp in [grp0,grp1,grp2,grp3]:
4867             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4868             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4869         mm.normalizeFamIdsMEDFile()
4870         for grp in [grp0,grp1,grp2,grp3]:
4871             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4872         for grp in [grp0,grp1,grp2,grp3]:
4873             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4874             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4875         pass
4876
4877     @WriteInTmpDir
4878     def testMEDFileJoint1(self):
4879         fileName="Pyfile92.med"
4880         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4881         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4882         mm=MEDFileUMesh()
4883         mm.setCoords(coo)
4884         mm.setName("maa1")
4885         mm.setDescription("un maillage")
4886         mm.write(fileName,2)
4887         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4888         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4889         one_step_joint=MEDFileJointOneStep()
4890         one_step_joint.pushCorrespondence(cell_correspond)
4891         one_step_joint.pushCorrespondence(node_correspond)
4892         one_joint=MEDFileJoint()
4893         one_joint.pushStep(one_step_joint)
4894         one_joint.setLocalMeshName("maa1")
4895         one_joint.setRemoteMeshName("maa1")
4896         one_joint.setDescription("joint_description")
4897         one_joint.setJointName("joint_1")
4898         one_joint.setDomainNumber(1)
4899         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4900         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4901         self.assertEqual( one_joint.getDescription(), "joint_description")
4902         self.assertEqual( one_joint.getJointName(), "joint_1")
4903         self.assertEqual( one_joint.getDomainNumber(), 1)
4904         joints=MEDFileJoints()
4905         joints.pushJoint(one_joint);
4906         joints.write(fileName,0)
4907         # read back
4908         jointsR=MEDFileJoints(fileName,mm.getName())
4909         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4910         jR = jointsR.getJointAtPos(0)
4911         self.assertTrue( jR.isEqual( one_joint ))
4912         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4913         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4914         jointsR.destroyJointAtPos(0)
4915         pass
4916
4917     @WriteInTmpDir
4918     def testMEDFileJoint2(self):
4919         fileNameWr="Pyfile93.med"
4920         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4921         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4922         mm=MEDFileUMesh()
4923         mm.setCoords(coo)
4924         mm.setName("maa1")
4925         mm.setDescription("un maillage")
4926         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4927         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4928         one_step_joint=MEDFileJointOneStep()
4929         two_step_joint=MEDFileJointOneStep()
4930         one_joint=MEDFileJoint()
4931         two_joint=MEDFileJoint()
4932         one_step_joint.pushCorrespondence(node_correspond)
4933         one_joint.pushStep(one_step_joint)
4934         two_step_joint.pushCorrespondence(cell_correspond)
4935         two_step_joint.pushCorrespondence(node_correspond)
4936         two_joint.pushStep(two_step_joint)
4937         one_joint.setLocalMeshName("maa1")
4938         one_joint.setRemoteMeshName("maa1")
4939         one_joint.setDescription("joint_description_1")
4940         one_joint.setJointName("joint_1")
4941         one_joint.setDomainNumber(1)
4942         two_joint.setLocalMeshName("maa1")
4943         two_joint.setRemoteMeshName("maa1")
4944         two_joint.setDescription("joint_description_2")
4945         two_joint.setJointName("joint_2")
4946         two_joint.setDomainNumber(2)
4947         joints=MEDFileJoints()
4948         joints.pushJoint(one_joint)
4949         joints.pushJoint(two_joint)
4950         mm.setJoints( joints )
4951         mm.write(fileNameWr,2)
4952         #
4953         mm=MEDFileMesh.New(fileNameWr)
4954         self.assertEqual( mm.getNumberOfJoints(), 2)
4955         jointsR = mm.getJoints();
4956         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4957         self.assertEqual( len( jointsR ), 2 )
4958         jointR1 = jointsR[0]
4959         jointR2 = jointsR[1]
4960         self.assertFalse( jointR1 is None )
4961         self.assertFalse( jointR2 is None )
4962         self.assertTrue( jointR1.isEqual( one_joint ))
4963         self.assertTrue( jointR2.isEqual( two_joint ))
4964         pass
4965
4966     @WriteInTmpDir
4967     def testMEDFileJoint1(self):
4968         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4969         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4970         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4971         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4972         joint1st_1=MEDFileJointOneStep()
4973         joint1st_1.pushCorrespondence(cell_correspond)
4974         joint1st_1.pushCorrespondence(node_correspond)
4975         joint1st_2=MEDFileJointOneStep()
4976         joint1st_2.pushCorrespondence(cell_correspond)
4977         joint1st_2.pushCorrespondence(node_correspond)
4978         joint1st_3=MEDFileJointOneStep()
4979         joint1st_3.pushCorrespondence(node_correspond)
4980         joint1st_3.pushCorrespondence(cell_correspond)
4981         joint1st_4=MEDFileJointOneStep()
4982         joint1st_4.pushCorrespondence(cell_correspond)
4983         joint1st_5=MEDFileJointOneStep()
4984         joint1st_5.pushCorrespondence(cell_correspon2)
4985         joint1st_6=MEDFileJointOneStep()
4986         joint1st_6.pushCorrespondence(cell_correspon3)
4987         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4988         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4989         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4990         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4991         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4992         one_joint=MEDFileJoint()
4993         one_joint.pushStep(joint1st_1)
4994         one_joint.setLocalMeshName("maa1")
4995         one_joint.setRemoteMeshName("maa2")
4996         one_joint.setDescription("joint_description")
4997         one_joint.setJointName("joint_1")
4998         one_joint.setDomainNumber(1)
4999         self.assertEqual( "maa1", one_joint.getLocalMeshName())
5000         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5001         self.assertEqual( "joint_description", one_joint.getDescription())
5002         self.assertEqual( 1, one_joint.getDomainNumber())
5003         self.assertEqual( "joint_1", one_joint.getJointName())
5004         pass
5005
5006     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5007     @WriteInTmpDir
5008     def testMEDFileSafeCall0(self):
5009         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5010         fname="Pyfile94.med"
5011         errfname="Pyfile94.err"
5012
5013         import os
5014         # first clean file if needed
5015         if os.path.exists(fname):
5016             os.remove(fname)
5017             pass
5018         # second : build a file from scratch
5019         m=MEDCouplingCMesh()
5020         arr=DataArrayDouble(11) ; arr.iota()
5021         m.setCoords(arr,arr)
5022         mm=MEDFileCMesh()
5023         mm.setMesh(m)
5024         mm.setName("mesh")
5025         mm.write(fname,2)
5026         # third : change permissions to remove write access on created file
5027         os.chmod(fname, 0o444)
5028         # four : try to append data on file -> check that it raises Exception
5029         f=MEDCouplingFieldDouble(ON_CELLS)
5030         f.setName("field")
5031         f.setMesh(m)
5032         f.setArray(DataArrayDouble(100))
5033         f.getArray()[:]=100.
5034         f.checkConsistencyLight()
5035         f1ts=MEDFileField1TS()
5036         f1ts.setFieldNoProfileSBT(f)
5037         # redirect stderr
5038         tmp=StdOutRedirect(errfname)
5039         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5040         del tmp
5041         #
5042         if os.path.exists(errfname):
5043             os.remove(errfname)
5044         #
5045         pass
5046
5047     @WriteInTmpDir
5048     def testUnivStatus1(self):
5049         """ Non regression test to check the effectiveness of univ write status."""
5050         fname="Pyfile95.med"
5051         arr=DataArrayDouble(10) ; arr.iota()
5052         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5053         mm=MEDFileCMesh() ; mm.setMesh(m)
5054         mm.setUnivNameWrStatus(False) # test is here
5055         mm.write(fname,2)
5056         mm=MEDFileCMesh(fname)
5057         self.assertEqual(mm.getUnivName(),"")
5058         mm.setUnivNameWrStatus(True)
5059         mm.write(fname,2)
5060         mm=MEDFileCMesh(fname)
5061         self.assertTrue(mm.getUnivName()!="")
5062         pass
5063
5064     @WriteInTmpDir
5065     def testEmptyMesh(self):
5066       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5067       with 0 tuples """
5068       fname = "Pyfile96.med"
5069       m = MEDCouplingUMesh('toto', 2)
5070       m.setCoords(DataArrayDouble([], 0, 2))
5071       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5072       mfu = MEDFileUMesh()
5073       mfu.setMeshAtLevel(0, m)
5074       mfu.write(fname, 2)
5075       mfu2 = MEDFileUMesh(fname)
5076       self.assertEqual('toto', mfu2.getName())
5077       lvl = mfu2.getNonEmptyLevels()
5078       self.assertEqual((), lvl)
5079
5080     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5081     def testMEDFileUMeshPickeling2(self):
5082       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5083       name="Mesh_1"
5084       grpName1="HAUT"
5085       grpName2="BASE"
5086       hauteur=1.
5087       nbOfNodesPerAxis=3
5088       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5089       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5090       mesh=MEDFileUMesh() ; mesh[0]=m
5091       m1=m.computeSkin() ; mesh[-1]=m1
5092       #
5093       bary1=m1.computeCellCenterOfMass()[:,2]
5094       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5095       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5096       mesh.setGroupsAtLevel(-1,[grp1,grp2])
5097
5098       st=pickle.dumps(mesh,2)
5099       mm=pickle.loads(st)
5100       st2=pickle.dumps(mm,2)
5101       mm2=pickle.loads(st2)
5102       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5103       pass
5104
5105     @WriteInTmpDir
5106     def testMEDFileEquivalence1(self):
5107       """ First check of equivalence implementation in MEDFileMesh"""
5108       fileName="Pyfile97.med"
5109       meshName="M_01"
5110       mm=MEDFileUMesh()
5111       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)])
5112       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5113       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])
5114       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5115       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])
5116       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5117       mm.getFamilyFieldAtLevel(-1)[:]=-2
5118       mm.getFamilyFieldAtLevel(0)[:]=0
5119       mm.addFamily("HOMARD________-1",-1)
5120       mm.addFamily("HOMARD________-2",-2)
5121       mm.addFamily("HOMARD________-3",-3)
5122       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5123
5124       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5125       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."
5126       mm.initializeEquivalences()
5127       eqs=mm.getEquivalences()
5128       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5129       eq0.setDescription(descEq)
5130       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)])
5131       eq0.setArray(-1,corr)
5132       self.assertEqual(eq0.getCell().size(),1)
5133       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5134       eq0.getCell().clear()
5135       self.assertEqual(eq0.getCell().size(),0)
5136       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5137       self.assertEqual(eq0.getCell().size(),1)
5138       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5139       mm.killEquivalences()
5140       mm.initializeEquivalences()
5141       eqs=mm.getEquivalences()
5142       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5143       eq0.setDescription(descEq)
5144       c=eq0.initCell()
5145       c.setArrayForType(NORM_QUAD4,corr)
5146       self.assertEqual(eq0.getCell().size(),1)
5147       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5148       mm2=mm.deepCopy()
5149       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5150       self.assertEqual(mm2.getEquivalences().size(),1)
5151       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5152       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5153       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5154       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5155       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5156       mm.write(fileName,2)
5157       #
5158       mm3=MEDFileMesh.New(fileName)
5159       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5160       pass
5161
5162     @WriteInTmpDir
5163     def testMEDFileForFamiliesPlayer1(self):
5164       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5165       fileName="Pyfile98.med"
5166       meshName="mesh"
5167       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5168       arr=DataArrayDouble(4) ; arr.iota()
5169       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5170       m=m.buildUnstructured()
5171       mm=MEDFileUMesh()
5172       mm[0]=m
5173       mm.setName(meshName)
5174       mm.setFamilyId("FAMILLE_ZERO",0)
5175       mm.getFamilyFieldAtLevel(0)[-3:]=-4
5176       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5177       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5178       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5179       mm.setFamilyFieldArr(1,d)
5180       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5181       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5182       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5183       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5184       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5185       mm.write(fileName,2)
5186       # now read such funny file !
5187       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5188       self.assertTrue(mm.isEqual(mm2,1e-16))
5189       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5190       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5191       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5192       pass
5193
5194     @WriteInTmpDir
5195     def testCartesianizer1(self):
5196       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5197       # UMesh non cart
5198       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5199       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5200       d0=DataArrayInt(16) ; d0[:]=0
5201       d1=DataArrayInt(9)  ; d1[:]=0
5202       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5203       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5204       ref0=mm.getCoords().getHiddenCppPointer()
5205       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5206       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5207       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5208       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5209       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5210       mm.setAxisType(AX_CYL) #<- important
5211       mm2=mm.cartesianize() # the trigger
5212       self.assertEqual(mm2.getAxisType(),AX_CART)
5213       mm.setAxisType(AX_CART) # this is here only to avoid complaints
5214       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5215       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5216       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5217       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5218       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5219       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5220       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5221       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5222       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5223       self.assertEqual(mm2.getName(),mm.getName())
5224       self.assertEqual(mm2.getDescription(),mm.getDescription())
5225       self.assertEqual(mm2.getTime(),mm.getTime())
5226       self.assertEqual(mm2.getTime(),mm.getTime())
5227       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5228       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5229       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5230       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5231       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5232       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5233       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5234       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5235       # UMesh cart
5236       mm.setAxisType(AX_CART)
5237       mm2=mm.cartesianize() # the trigger
5238       self.assertEqual(mm2.getAxisType(),AX_CART)
5239       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5240       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5241       # CurveLinearMesh non cart
5242       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5243       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5244       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5245       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5246       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5247       mm2=mm.cartesianize() # the trigger
5248       self.assertEqual(mm2.getAxisType(),AX_CART)
5249       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5250       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5251       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5252       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5253       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5254       self.assertEqual(mm2.getName(),mm.getName())
5255       self.assertEqual(mm2.getDescription(),mm.getDescription())
5256       self.assertEqual(mm2.getTime(),mm.getTime())
5257       self.assertEqual(mm2.getTime(),mm.getTime())
5258       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5259       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5260       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5261       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5262       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5263       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5264       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5265       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5266       # CurveLinearMesh cart
5267       mm.setAxisType(AX_CART)
5268       mm2=mm.cartesianize() # the trigger
5269       self.assertEqual(mm2.getAxisType(),AX_CART)
5270       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5271       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5272       # CMesh non cart
5273       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5274       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5275       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5276       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5277       mm2=mm.cartesianize() # the trigger
5278       self.assertEqual(mm2.getAxisType(),AX_CART)
5279       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5280       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5281       self.assertEqual(mm2.getName(),mm.getName())
5282       self.assertEqual(mm2.getDescription(),mm.getDescription())
5283       self.assertEqual(mm2.getTime(),mm.getTime())
5284       self.assertEqual(mm2.getTime(),mm.getTime())
5285       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5286       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5287       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5288       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5289       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5290       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5291       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5292       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5293       # CMesh cart
5294       mm.setAxisType(AX_CART)
5295       mm2=mm.cartesianize() # the trigger
5296       self.assertEqual(mm2.getAxisType(),AX_CART)
5297       self.assertTrue(isinstance(mm2,MEDFileCMesh))
5298       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5299       pass
5300
5301     @WriteInTmpDir
5302     def testCheckCoherency(self):
5303       m2 = MEDCouplingUMesh("2d", 2)
5304       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5305       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5306       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5307       mum = MEDFileUMesh()
5308       mum.setMeshAtLevel(0, m2)
5309       mum.setMeshAtLevel(-1, m1)
5310       mum.checkConsistency()
5311       mum2 = mum.deepCopy()
5312
5313       # Nodes
5314       arr = DataArrayInt([2]*4)
5315       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5316       self.assertRaises(InterpKernelException, mum.checkConsistency)
5317       mum=mum2; mum2=mum.deepCopy();
5318       arr = DataArrayInt([2]*4)
5319       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5320       self.assertRaises(InterpKernelException, mum.checkConsistency)
5321       mum=mum2; mum2=mum.deepCopy();
5322       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5323       self.assertRaises(InterpKernelException, mum.checkConsistency)
5324       mum=mum2; mum2=mum.deepCopy();
5325       arr = DataArrayAsciiChar(['tutu           x']*4)
5326       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5327       self.assertRaises(InterpKernelException, mum.checkConsistency)
5328
5329       # 2D
5330       mum=mum2; mum2=mum.deepCopy();
5331       arr = DataArrayInt([2]*2)
5332       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5333       self.assertRaises(InterpKernelException, mum.checkConsistency)
5334       mum=mum2; mum2=mum.deepCopy();
5335       arr = DataArrayInt([2]*2)
5336       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5337       self.assertRaises(InterpKernelException, mum.checkConsistency)
5338       mum=mum2; mum2=mum.deepCopy();
5339       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5340       self.assertRaises(InterpKernelException, mum.checkConsistency)
5341       mum=mum2; mum2=mum.deepCopy();
5342       arr = DataArrayAsciiChar(['tutu           x']*2)
5343       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5344       self.assertRaises(InterpKernelException, mum.checkConsistency)
5345
5346       # 1D
5347       mum=mum2; mum2=mum.deepCopy();
5348       arr = DataArrayInt([2]*5)
5349       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5350       self.assertRaises(InterpKernelException, mum.checkConsistency)
5351       mum=mum2; mum2=mum.deepCopy();
5352       arr = DataArrayInt([2]*5)
5353       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5354       self.assertRaises(InterpKernelException, mum.checkConsistency)
5355       mum=mum2; mum2=mum.deepCopy();
5356       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5357       self.assertRaises(InterpKernelException, mum.checkConsistency)
5358       mum=mum2; mum2=mum.deepCopy();
5359       arr = DataArrayAsciiChar(['tutu           x']*5)
5360       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5361       self.assertRaises(InterpKernelException, mum.checkConsistency)
5362
5363     @WriteInTmpDir
5364     def testCheckSMESHConsistency(self):
5365       m2 = MEDCouplingUMesh("2d", 2)
5366       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5367       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5368       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5369       mum = MEDFileUMesh()
5370       mum.setMeshAtLevel(0, m2)
5371       mum.setMeshAtLevel(-1, m1)
5372       mum.checkConsistency()
5373       mum.checkSMESHConsistency()
5374       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5375       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5376       mum.setRenumFieldArr(0, n2)
5377       mum.setRenumFieldArr(-1, n1)
5378       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5379       mum.setRenumFieldArr(-1, n1+100)
5380       mum.checkSMESHConsistency()
5381       pass
5382
5383     @WriteInTmpDir
5384     def testClearNodeAndCellNumbers(self):
5385       m2 = MEDCouplingUMesh("2d", 2)
5386       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5387       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5388       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5389       mum = MEDFileUMesh()
5390       mum.setMeshAtLevel(0, m2)
5391       mum.setMeshAtLevel(-1, m1)
5392       mum.checkConsistency()
5393       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5394       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5395       mum.setRenumFieldArr(0, n2)
5396       mum.setRenumFieldArr(-1, n1)
5397       mum.clearNodeAndCellNumbers()
5398       mum.checkSMESHConsistency()
5399       pass
5400
5401     @WriteInTmpDir
5402     def testCMeshSetFamilyFieldArrNull(self):
5403       meshName="mesh"
5404       fname="Pyfile99.med"
5405       arrX=DataArrayDouble([0,1,2,3])
5406       arrY=DataArrayDouble([0,1,2])
5407       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5408       mm=MEDFileCMesh() ; mm.setMesh(m)
5409       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5410       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5411       mm.setFamilyFieldArr(0,famCellIds)
5412       mm.setFamilyFieldArr(1,famNodeIds)
5413       mm.write(fname,2)
5414       mm=MEDFileMesh.New(fname)
5415       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5416       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5417       mm.setFamilyFieldArr(0,None)#<- bug was here
5418       mm.setFamilyFieldArr(1,None)#<- bug was here
5419       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5420       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5421       mm3=mm.deepCopy()
5422       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5423       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5424       mm.write(fname,2)
5425       mm2=MEDFileMesh.New(fname)
5426       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5427       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5428       pass
5429
5430     @WriteInTmpDir
5431     def testAppendFieldProfileOnIntField(self):
5432       fname="Pyfile100.med"
5433       arrX=DataArrayDouble([0,1,2,3])
5434       arrY=DataArrayDouble([0,1,2])
5435       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5436       mm=MEDFileCMesh()
5437       mm.setMesh(mesh)
5438       #
5439       fmts=MEDFileIntFieldMultiTS()
5440       pflName="PFL"
5441       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5442       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5443       fieldName="FieldOnCell"
5444       f.setTime(1.2,1,1) ; f.setName(fieldName)
5445       arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5446       fmts.appendFieldProfile(f,mm,0,pfl)
5447       #
5448       mm.write(fname,2)
5449       fmts.write(fname,0)
5450       #
5451       mm=MEDFileMesh.New(fname)
5452       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5453       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5454       self.assertEqual(fmts.getName(),fieldName)
5455       self.assertEqual(len(fmts),1)
5456       f1ts=fmts[0]
5457       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5458       self.assertEqual(pfltest.getName(),pflName)
5459       self.assertEqual(ftest.getName(),fieldName)
5460       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5461       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5462       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5463       self.assertEqual(ftest2.getTime(),f.getTime())
5464       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5465       pass
5466
5467     @WriteInTmpDir
5468     def testMEDFileFieldEasyField1(self):
5469       """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."""
5470       ## Basic test on cells on top level
5471       fname="Pyfile101.med"
5472       fieldName="field1"
5473       mm=MEDFileUMesh()
5474       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5475       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5476       m.allocateCells()
5477       m.insertNextCell(NORM_TRI3,[0,1,2])
5478       m.insertNextCell(NORM_TRI3,[3,4,5])
5479       m.insertNextCell(NORM_TRI3,[6,7,8])
5480       m.insertNextCell(NORM_TRI3,[9,10,11])
5481       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5482       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5483       mm[0]=m
5484       mm.write(fname,2)
5485       arr0=DataArrayDouble([10,11,12,13,100,101])
5486       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5487       f.setName(fieldName) ; f.setTime(2.,6,7)
5488       f0=f.deepCopy()
5489       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5490       ff.write(fname,0)
5491       arr2=arr0+1000 ; f.setArray(arr2)
5492       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5493       ff.write(fname,0)
5494       f1=f.deepCopy()
5495       ##
5496       mm=MEDFileMesh.New(fname)
5497       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5498       ftst0=f1ts.field(mm)
5499       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5500       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5501       ftst1=f1ts.field(mm)
5502       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5503       fmts=MEDFileFieldMultiTS(fname,fieldName)
5504       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5505       ## Basic test on nodes on top level
5506       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5507       f2.setName(fieldName)
5508       mm.write(fname,2)
5509       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5510       #
5511       mm=MEDFileMesh.New(fname)
5512       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5513       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5514       fmts=MEDFileFieldMultiTS(fname,fieldName)
5515       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5516       ## Node on elements
5517       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)
5518       f3.setName(fieldName) ; f3.checkConsistencyLight()
5519       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5520       #
5521       mm=MEDFileMesh.New(fname)
5522       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5523       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5524       ## Gauss
5525       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5526       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])
5527       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)
5528       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)
5529       f4.checkConsistencyLight()
5530       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5531       #
5532       mm=MEDFileMesh.New(fname)
5533       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5534       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5535       pass
5536
5537     @WriteInTmpDir
5538     def testMEDFileFieldEasyField2(self):
5539         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5540         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."""
5541         ## Basic test on cells on top level
5542         fname="Pyfile102.med"
5543         fieldName="field1"
5544         mm=MEDFileUMesh()
5545         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5546         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5547         m.allocateCells()
5548         m.insertNextCell(NORM_TRI3,[0,1,2])
5549         m.insertNextCell(NORM_TRI3,[3,4,5])
5550         m.insertNextCell(NORM_TRI3,[6,7,8])
5551         m.insertNextCell(NORM_TRI3,[9,10,11])
5552         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5553         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5554         mm[0]=m
5555         mm.write(fname,2)
5556         arr0=DataArrayInt32([10,11,12,13,100,101])
5557         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5558         f.setName(fieldName) ; f.setTime(2.,6,7)
5559         f0=f.deepCopy()
5560         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5561         ff.write(fname,0)
5562         arr2=arr0+1000 ; f.setArray(arr2)
5563         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5564         ff.write(fname,0)
5565         f1=f.deepCopy()
5566         ##
5567         mm=MEDFileMesh.New(fname)
5568         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5569         ftst0=f1ts.field(mm)
5570         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5571         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5572         ftst1=f1ts.field(mm)
5573         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5574         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5575         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5576         ## Basic test on nodes on top level
5577         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5578         f2.setName(fieldName)
5579         mm.write(fname,2)
5580         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5581         #
5582         mm=MEDFileMesh.New(fname)
5583         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5584         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5585         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5586         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5587         ## Node on elements
5588         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)
5589         f3.setName(fieldName) ; f3.checkConsistencyLight()
5590         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5591         #
5592         mm=MEDFileMesh.New(fname)
5593         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5594         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5595         ## Gauss
5596         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5597         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])
5598         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)
5599         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)
5600         f4.checkConsistencyLight()
5601         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5602         #
5603         mm=MEDFileMesh.New(fname)
5604         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5605         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5606         pass
5607
5608     @WriteInTmpDir
5609     def testMEDFileFieldEasyField3(self):
5610         """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."""
5611         fname="Pyfile103.med"
5612         fieldName="field1"
5613         mm=MEDFileUMesh()
5614         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5615         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5616         m.allocateCells()
5617         m.insertNextCell(NORM_TRI3,[0,1,2])
5618         m.insertNextCell(NORM_TRI3,[3,4,5])
5619         m.insertNextCell(NORM_TRI3,[6,7,8])
5620         m.insertNextCell(NORM_TRI3,[9,10,11])
5621         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5622         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5623         mm[-1]=m
5624         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5625         m0.allocateCells()
5626         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5627         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5628         mm[0]=m0
5629         mm.write(fname,2)
5630         # start slowly
5631         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5632         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5633         #
5634         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5635         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5636         # here f1 lying on level -1 not 0 check if "field" method detect it !
5637         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5638         f1.setMesh(mm[-1]) # -1 is very important
5639         f1.setTime(16.,3,4)
5640         f1.checkConsistencyLight()
5641         mm.write(fname,2)
5642         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5643         #
5644         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5645         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5646         # nodes on elements
5647         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5648         f3.setMesh(mm[-1]) # this line is important
5649         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)
5650         f3.setName(fieldName) ; f3.checkConsistencyLight()
5651         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5652         #
5653         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5654         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5655         # gauss
5656         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5657         f4.setMesh(mm[-1]) # this line is important
5658         f4.setName(fieldName)
5659         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])
5660         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)
5661         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)
5662         f4.checkConsistencyLight()
5663         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5664         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5665         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5666         pass
5667
5668     @WriteInTmpDir
5669     def testMEDFileFieldEasyField4(self):
5670         """ Same than testMEDFileFieldEasyField3 but with integers"""
5671         fname="Pyfile104.med"
5672         fieldName="field1"
5673         mm=MEDFileUMesh()
5674         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5675         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5676         m.allocateCells()
5677         m.insertNextCell(NORM_TRI3,[0,1,2])
5678         m.insertNextCell(NORM_TRI3,[3,4,5])
5679         m.insertNextCell(NORM_TRI3,[6,7,8])
5680         m.insertNextCell(NORM_TRI3,[9,10,11])
5681         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5682         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5683         mm[-1]=m
5684         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5685         m0.allocateCells()
5686         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5687         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5688         mm[0]=m0
5689         mm.write(fname,2)
5690         # start slowly
5691         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5692         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5693         #
5694         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5695         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5696         # here f1 lying on level -1 not 0 check if "field" method detect it !
5697         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5698         f1.setMesh(mm[-1]) # -1 is very important
5699         f1.setTime(16.,3,4)
5700         f1.checkConsistencyLight()
5701         mm.write(fname,2)
5702         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5703         #
5704         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5705         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5706         # nodes on elements
5707         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5708         f3.setMesh(mm[-1]) # this line is important
5709         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)
5710         f3.setName(fieldName) ; f3.checkConsistencyLight()
5711         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5712         #
5713         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5714         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5715         # gauss
5716         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5717         f4.setMesh(mm[-1]) # this line is important
5718         f4.setName(fieldName)
5719         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])
5720         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)
5721         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)
5722         f4.checkConsistencyLight()
5723         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5724         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5725         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5726         pass
5727
5728     @WriteInTmpDir
5729     def testMEDFileFieldEasyField5(self):
5730         """More and more difficult now look at how profiles are managed by "field" method."""
5731         fname="Pyfile105.med"
5732         fieldName="field1"
5733         mm=MEDFileUMesh()
5734         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5735         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5736         m.allocateCells()
5737         m.insertNextCell(NORM_TRI3,[0,1,2])
5738         m.insertNextCell(NORM_TRI3,[3,4,5])
5739         m.insertNextCell(NORM_TRI3,[6,7,8])
5740         m.insertNextCell(NORM_TRI3,[9,10,11])
5741         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5742         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5743         mm[0]=m
5744         mm.write(fname,2)
5745         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5746         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5747         #
5748         arr0=DataArrayDouble([10,11,12,13])
5749         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5750         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5751         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5752         ff.write(fname,0)
5753         #
5754         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5755         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5756         # more complicated -> multi level
5757         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5758         m0.allocateCells()
5759         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5760         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5761         mm2=MEDFileUMesh()
5762         mm2[0]=m0 ; mm2[-1]=m
5763         #
5764         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5765         #
5766         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5767         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5768         pass
5769
5770     @WriteInTmpDir
5771     def testExtractPart1(self):
5772         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)])
5773         meshName="mesh"
5774         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5775         m0.insertNextCell(NORM_TRI3,[8,4,3])
5776         m0.insertNextCell(NORM_TRI3,[8,9,4])
5777         m0.insertNextCell(NORM_TRI3,[7,13,8])
5778         m0.insertNextCell(NORM_TRI3,[7,12,13])
5779         m0.insertNextCell(NORM_TRI3,[0,6,1])
5780         m0.insertNextCell(NORM_TRI3,[0,5,6])
5781         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5782         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5783         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5784         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5785         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5786         #
5787         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5788         m1.insertNextCell(NORM_SEG2,[10,5])
5789         m1.insertNextCell(NORM_SEG2,[5,0])
5790         m1.insertNextCell(NORM_SEG2,[0,1])
5791         m1.insertNextCell(NORM_SEG2,[1,2])
5792         m1.insertNextCell(NORM_SEG2,[2,3])
5793         m1.insertNextCell(NORM_SEG2,[3,4])
5794         m1.insertNextCell(NORM_SEG2,[4,9])
5795         m1.insertNextCell(NORM_SEG2,[9,14])
5796         m1.insertNextCell(NORM_SEG2,[14,13])
5797         m1.insertNextCell(NORM_SEG2,[13,12])
5798         m1.insertNextCell(NORM_SEG2,[12,11])
5799         m1.insertNextCell(NORM_SEG2,[11,10])
5800         mm=MEDFileUMesh()
5801         mm[0]=m0 ; mm[-1]=m1
5802         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5803         tab={} #
5804         tab[0]=DataArrayInt([0,2,3,4,6,7])
5805         tab[-1]=DataArrayInt([2,3,4,5,9])
5806         fs=MEDFileFields()
5807         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5808         tab[1]=arr0
5809         #
5810         fname0="Field0"
5811         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5812         t0=(16.5,3,4)
5813         ic=["toto [m]"]
5814         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5815         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5816         f0.setMesh(m0) ; f0.setName(fname0)
5817         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5818         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5819         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]))
5820         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5821         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5822         fmts.pushBackTimeStep(f1ts)
5823         #
5824         mmOut=mm.extractPart(tab)
5825         #
5826         fsPart0=fs.extractPart(tab,mm)
5827         self.assertEqual(len(fsPart0),1)
5828         fmtsP=fsPart0[0]
5829         self.assertEqual(len(fmtsP),1)
5830         f1ts=fmtsP[0]
5831         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5832         #
5833         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5834         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5835         #
5836         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5837         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5838         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5839         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5840         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5841         #
5842         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5843         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5844         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5845         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5846         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5847         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5848         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5849         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5850         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5851         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5852         #
5853         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5854         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5855         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5856         # multisteps
5857         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5858         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5859         for i,tt in enumerate(tss):
5860             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5861             myarr=arr0_0+i*1000.
5862             f0.setArray(myarr)
5863             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5864             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5865             pass
5866         fsPart1=fs.extractPart(tab,mm)
5867         self.assertEqual(len(fsPart1),1)
5868         fmtsP=fsPart1[0]
5869         self.assertEqual(len(fmtsP),len(tss))
5870         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5871             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5872             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5873             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5874             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5875             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5876             self.assertEqual(fPart.getTime(),list(tt))
5877             pass
5878         pass
5879
5880     @WriteInTmpDir
5881     def testSymmetryPlusAggregationMFD1(self):
5882         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5883         fname1="Pyfile106_1.med"
5884         fname2="Pyfile106_2.med"
5885         fname3="Pyfile106_3.med"
5886         meshName="mesh"
5887         mm1=MEDFileUMesh()
5888         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5889         mm1.setCoords(da1)
5890         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5891         mm1_0.setCoords(da1)
5892         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5893         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5894         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5895         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5896         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5897         mm1[0]=mm1_0
5898         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5899         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5900         #
5901         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5902         mm1_1.setCoords(da1)
5903         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5904         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5905         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5906         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5907         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5908         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5909         mm1[-1]=mm1_1
5910         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5911         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5912         for i in range(1,10):
5913             mm1.setFamilyId("F%d"%i,i)
5914         mm1.setFamilyId("FAMILLE_ZERO",0)
5915         mm1.setFamilyId("H1",100)
5916         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5917         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5918         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5919         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5920         ##############
5921         mm2=MEDFileUMesh()
5922         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]"])
5923         mm2.setCoords(da1)
5924         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5925         mm2_0.setCoords(da1)
5926         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5927         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5928         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5929         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5930         mm2[0]=mm2_0
5931         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5932         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5933         #
5934         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5935         mm2_1.setCoords(da1)
5936         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5937         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5938         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5939         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5940         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5941         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5942         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5943         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5944         mm2[-1]=mm2_1
5945         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5946         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5947         for i in range(1,12):
5948             mm2.setFamilyId("G%d"%i,i+30)
5949         mm2.setFamilyId("H1",100)
5950         mm2.setFamilyId("FAMILLE_ZERO",0)
5951         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5952         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5953         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5954         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5955         #
5956         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5957         #######
5958         def CheckMesh(tester,mm):
5959             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]"])
5960             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5961             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])))
5962             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5963             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])))
5964             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5965             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5966             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5967             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5968             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5969             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)]
5970             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5971             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5972             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5973             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5974             pass
5975         CheckMesh(self,mm)
5976         ##
5977         fieldName="zeField"
5978         t1=(2.3,3,5)
5979         t2=(5.6,7,12)
5980         infoc=["dd [W]","eee [kA]"]
5981         ##
5982         fmts1=MEDFileFieldMultiTS()
5983         f1ts1=MEDFileField1TS()
5984         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5985         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5986         arr1.setInfoOnComponents(infoc)
5987         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5988         f1_1.checkConsistencyLight()
5989         f1ts1.setFieldNoProfileSBT(f1_1)
5990         #
5991         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5992         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5993         arr2.setInfoOnComponents(infoc)
5994         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5995         f1_2.checkConsistencyLight()
5996         f1ts1.setFieldNoProfileSBT(f1_2)
5997         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5998         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5999         arr3.setInfoOnComponents(infoc)
6000         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6001         f1_3.checkConsistencyLight()
6002         f1ts1.setFieldNoProfileSBT(f1_3)
6003         fmts1.pushBackTimeStep(f1ts1)
6004         #
6005         f1ts2=f1ts1.deepCopy()
6006         f1ts2.setTime(t2[1],t2[2],t2[0])
6007         f1ts2.getUndergroundDataArray()[:]+=2000
6008         fmts1.pushBackTimeStep(f1ts2)
6009         ### fmts2
6010         fmts2=MEDFileFieldMultiTS()
6011         f1ts3=MEDFileField1TS()
6012         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6013         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6014         arr4.setInfoOnComponents(infoc)
6015         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6016         f2_1.checkConsistencyLight()
6017         f1ts3.setFieldNoProfileSBT(f2_1)
6018         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6019         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6020         arr5.setInfoOnComponents(infoc)
6021         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6022         f2_2.checkConsistencyLight()
6023         f1ts3.setFieldNoProfileSBT(f2_2)
6024         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6025         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6026         arr6.setInfoOnComponents(infoc)
6027         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6028         f2_3.checkConsistencyLight()
6029         f1ts3.setFieldNoProfileSBT(f2_3)
6030         fmts2.pushBackTimeStep(f1ts3)
6031         #
6032         f1ts4=f1ts3.deepCopy()
6033         f1ts4.setTime(t2[1],t2[2],t2[0])
6034         f1ts4.getUndergroundDataArray()[:]+=2000
6035         fmts2.pushBackTimeStep(f1ts4)
6036         #
6037         mfd1=MEDFileData()
6038         mfd1.setMeshes(MEDFileMeshes())
6039         mfd1.getMeshes().pushMesh(mm1)
6040         mfd1.setFields(MEDFileFields())
6041         mfd1.getFields().pushField(fmts1)
6042         #
6043         mfd2=MEDFileData()
6044         mfd2.setMeshes(MEDFileMeshes())
6045         mfd2.getMeshes().pushMesh(mm2)
6046         mfd2.setFields(MEDFileFields())
6047         mfd2.getFields().pushField(fmts2)
6048         # ze Call !
6049         mfd=MEDFileData.Aggregate([mfd1,mfd2])
6050         def CheckMFD(tester,mfd):
6051             tester.assertEqual(len(mfd.getMeshes()),1)
6052             tester.assertEqual(len(mfd.getFields()),1)
6053             CheckMesh(self,mfd.getMeshes()[0])
6054             tester.assertEqual(len(mfd.getFields()[0]),2)
6055             zeF1=mfd.getFields()[0][0]
6056             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6057             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6058             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6059             ref.renumberCells(o2n)
6060             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6061             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6062             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6063             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6064             ref.renumberCells(o2n)
6065             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6066             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6067             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6068             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6069             ref.renumberCells(o2n)
6070             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6071             #
6072             zeF2=mfd.getFields()[0][1]
6073             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6074             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6075             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6076             ref.renumberCells(o2n)
6077             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6078             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6079             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6080             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6081             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6082             ref.renumberCells(o2n)
6083             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6084             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6085             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6086             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6087             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6088             ref.renumberCells(o2n)
6089             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6090             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6091         CheckMFD(self,mfd)
6092         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6093         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6094         CheckMFD(self,mfd)
6095         pass
6096
6097     @WriteInTmpDir
6098     def testAggregateWithGroups(self):
6099         """ Testing MEDFileUMesh::Aggretate when groups are present. """
6100         def generate(grp_name, offset):
6101             coo = DataArrayDouble([0., 1., 2.])
6102             coo += offset
6103             m = MEDCouplingCMesh("toto")
6104             m.setCoords(coo, coo)
6105             m = m.buildUnstructured()
6106             mu = MEDFileUMesh.New()
6107             mu.setMeshAtLevel(0, m)
6108             g = DataArrayInt([0])
6109             g.setName(grp_name)
6110             g2 = DataArrayInt([1])
6111             g2.setName("common")  # make a common group for all meshes being merged
6112             mu.setGroupsAtLevel(0, [g, g2])
6113             return mu
6114
6115         m1 = generate("A", 0.)
6116         m2 = generate("B", 2.)
6117         mm = MEDFileUMesh.Aggregate([m1,m2])
6118
6119         self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6120         self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6121         refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6122         self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6123         self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6124         self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6125         self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6126         self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6127         self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6128
6129         pass
6130
6131     @WriteInTmpDir
6132     def testExtrudedMesh1(self):
6133         fname="Pyfile107.med"
6134         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6135         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6136         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6137         mm=MEDFileUMesh(ex)
6138         mm.write(fname,2)
6139         ex2=mm.convertToExtrudedMesh()
6140         mm2=MEDFileMesh.New(fname)
6141         ex3=mm2.convertToExtrudedMesh()
6142         self.assertTrue(ex.isEqual(ex2,1e-12))
6143         self.assertTrue(ex.isEqual(ex3,1e-12))
6144         pass
6145
6146     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6147     @WriteInTmpDir
6148     def testWriteInto30(self):
6149         fname="Pyfile108.med"
6150         fname2="Pyfile109.med"
6151         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6152         mm=MEDFileUMesh() ; mm[0]=m
6153         mm.setFamilyId("FAMILLE_ZERO",0)
6154         #
6155         mm.write33(fname,2)
6156         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6157         mm2=MEDFileUMesh(fname)
6158         self.assertTrue(mm.isEqual(mm2,1e-12))
6159         #
6160         mm.write(fname2,2)
6161         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
6162         pass
6163
6164     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6165     @WriteInTmpDir
6166     def testPickelizationOfMEDFileObjects1(self):
6167         fname="Pyfile110.med"
6168         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)
6169         m0=MEDCouplingUMesh("Mesh",2)
6170         m0.allocateCells(5)
6171         m0.insertNextCell(NORM_TRI3,[1,4,2])
6172         m0.insertNextCell(NORM_TRI3,[4,5,2])
6173         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6174         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6175         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6176         m0.finishInsertingCells()
6177         m0.setCoords(coo)
6178         m1=MEDCouplingUMesh(m0.getName(),1)
6179         m1.allocateCells(9)
6180         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6181         for i in range(9):
6182             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6183             pass
6184         m1.finishInsertingCells()
6185         m1.setCoords(coo)
6186         #
6187         m=MEDFileUMesh()
6188         m.setMeshAtLevel(0,m0)
6189         m.setMeshAtLevel(-1,m1)
6190         #
6191         dt=3 ; it=2 ; tim=4.5
6192         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6193         fieldNode0.setName("fieldNode0")
6194         fieldNode0.setTime(tim,dt,it)
6195         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6196         arr=DataArrayDouble([10,11,12,13,14])
6197         fieldNode0.setArray(arr)
6198         f0=MEDFileField1TS()
6199         f0.setFieldProfile(fieldNode0,m,0,pfl0)
6200         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6201         fieldNode1.setName("fieldNode1")
6202         fieldNode1.setTime(tim,dt,it)
6203         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6204         arr1=DataArrayDouble([20,21,22,23,24,25,26])
6205         fieldNode1.setArray(arr1)
6206         f1=MEDFileField1TS()
6207         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6208         mfd=MEDFileData()
6209         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6210         mfd.getMeshes().pushMesh(m)
6211         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6212         mfd.getFields().pushField(fmts)
6213         # first start gently
6214         d=mfd.serialize()
6215         mfd2=MEDFileData(d)
6216         self.assertEqual(len(mfd2.getMeshes()),1)
6217         self.assertEqual(len(mfd2.getFields()),1)
6218         self.assertEqual(len(mfd2.getFields()[0]),1)
6219         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6220         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6221         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6222         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6223         # OK now end of joke -> serialization of MEDFileData
6224         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6225         mfd3=pickle.loads(st)
6226         # check of object
6227         self.assertEqual(len(mfd3.getMeshes()),1)
6228         self.assertEqual(len(mfd3.getFields()),1)
6229         self.assertEqual(len(mfd3.getFields()[0]),1)
6230         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6231         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6232         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6233         # serialization of MEDFileFields
6234         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6235         fs4=pickle.loads(st)
6236         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6237         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6238         # serialization of MEDFileFieldMulitTS
6239         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6240         fmts5=pickle.loads(st)
6241         ff5=fmts5[0].field(mfd3.getMeshes()[0])
6242         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6243         # serialization of MEDFileField1TS
6244         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6245         f1ts6=pickle.loads(st)
6246         ff6=f1ts6.field(mfd3.getMeshes()[0])
6247         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6248         # serialization of MEDFileMeshes
6249         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6250         ms7=pickle.loads(st)
6251         self.assertEqual(len(ms7),1)
6252         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6253         pass
6254
6255     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6256     @WriteInTmpDir
6257     def testPickelizationOfMEDFileObjects2(self):
6258         # CMesh
6259         self.internalMEDMesh6() # generates MEDFileMesh5.med file
6260         mm=MEDFileMesh.New("MEDFileMesh5.med")
6261         self.assertTrue(isinstance(mm,MEDFileCMesh))
6262         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6263         mm2=pickle.loads(st)
6264         self.assertTrue(isinstance(mm2,MEDFileCMesh))
6265         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6266         # CurveLinear
6267         self.internalCurveLinearMesh1() # generates Pyfile55.med
6268         mm=MEDFileMesh.New("Pyfile55.med")
6269         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6270         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6271         mm3=pickle.loads(st)
6272         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6273         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6274         self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6275         # MEDFileIntFieldMultiTS
6276         fs4=MEDFileFields("Pyfile63.med")
6277         ms4=MEDFileMeshes("Pyfile63.med")
6278         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6279         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6280         fmts5=pickle.loads(st)
6281         self.assertEqual(len(fs4[0]),len(fmts5))
6282         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6283         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6284         # MEDFileIntField1TS
6285         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6286         f1ts6=pickle.loads(st)
6287         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6288         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6289         # MEDFileParameters
6290         self.internalParameters1()# generates Pyfile56.med
6291         params=MEDFileParameters("Pyfile56.med")
6292         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6293         params7=pickle.loads(st)
6294         self.assertEqual(len(params),len(params7))
6295         for i in range(len(params)):
6296             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6297             pass
6298         pass
6299
6300     @WriteInTmpDir
6301     def testGlobalNumOnNodes1(self):
6302         """Test global number on nodes here. Used by partitionners."""
6303         fname="Pyfile112.med"
6304         arr=DataArrayDouble(5) ; arr.iota()
6305         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6306         m.setName("mesh")
6307         mm=MEDFileUMesh()
6308         mm[0]=m
6309         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6310         d=DataArrayInt([7,8,9,2,0])
6311         dRef=d.deepCopy()
6312         mm.setGlobalNumFieldAtLevel(1,d)
6313         mm.checkConsistency()
6314         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6315         mm.checkConsistency()
6316         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6317         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6318         mm.write(fname,2)
6319         mm2=MEDFileMesh.New(fname)
6320         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6321         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6322         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6323         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6324         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6325         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6326         pass
6327
6328     @WriteInTmpDir
6329     def testPartialReadOfEntities1(self):
6330         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6331         fname="Pyfile113.med"
6332         arr=DataArrayDouble(5) ; arr.iota()
6333         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6334         m.setName("mesh")
6335         mm=MEDFileUMesh()
6336         mm[0]=m
6337         #
6338         fieldName="Field"
6339         ts1=(5.,1,2)
6340         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6341         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6342         f1.setTime(*ts1)
6343         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6344         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6345         f2.setTime(*ts1)
6346         f1ts=MEDFileField1TS()
6347         f1ts.setFieldNoProfileSBT(f1)
6348         f1ts.setFieldNoProfileSBT(f2)
6349         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6350         f1ts_2=f1ts.deepCopy()
6351         f1ts_2.getUndergroundDataArray()[:]+=2
6352         f1ts_2.setTime(3,4,6.)
6353         fmts=MEDFileFieldMultiTS()
6354         fmts.pushBackTimeStep(f1ts)
6355         fmts.pushBackTimeStep(f1ts_2)
6356         #
6357         mm.write(fname,2)
6358         fmts.write(fname,0)
6359         #
6360         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6361         mm=MEDFileMesh.New(fname)
6362         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)
6363         fs.loadArrays()
6364         self.assertEqual(len(fs),1)
6365         fmts=fs[0]
6366         self.assertEqual(len(fmts),2)
6367         ff0=fmts[0] ; ff1=fmts[1]
6368         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6369         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6370         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6371         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6372         pass
6373
6374     @WriteInTmpDir
6375     def testFloat32InMEDFileFieldStar1(self):
6376         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6377         fname="Pyfile114.med"
6378         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6379         f1=f1.convertToFloatField()
6380         m1=f1.getMesh()
6381         mm1=MEDFileUMesh.New()
6382         mm1.setCoords(m1.getCoords())
6383         mm1.setMeshAtLevel(0,m1)
6384         mm1.setName(m1.getName())
6385         mm1.write(fname,2)
6386         ff1=MEDFileFloatField1TS()
6387         ff1.setFieldNoProfileSBT(f1)
6388         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6389         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6390         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6391         ff1.write(fname,0)
6392         a,b=ff1.getUndergroundDataArrayExt()
6393         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6394         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6395         ff2=MEDFileAnyTypeField1TS.New(fname)
6396         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6397         self.assertEqual(ff2.getTime(),[0,1,2.0])
6398         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6399         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6400         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6401         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6402         ff2.setTime(1,2,3.)
6403         c=ff2.getUndergroundDataArray() ; c*=2
6404         ff2.write(fname,0) # 2 time steps in
6405         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6406         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6407         self.assertEqual(len(ffs1),2)
6408         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6409         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6410         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6411         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6412         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6413         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6414         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6415         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6416         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6417         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6418         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6419         for it in ffs1:
6420             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6421             bc+=a.getArray()
6422             pass
6423         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6424         nf1=MEDCouplingFieldFloat(ON_NODES)
6425         nf1.setTime(9.,10,-1)
6426         nf1.setMesh(f1.getMesh())
6427         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6428         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6429         nff1=MEDFileFloatField1TS.New()
6430         nff1.setFieldNoProfileSBT(nf1)
6431         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6432         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6433         nff1.write(fname,0)
6434         #
6435         nf2=MEDCouplingFieldFloat(ON_NODES)
6436         nf2.setTime(19.,20,-11)
6437         nf2.setMesh(f1.getMesh())
6438         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6439         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6440         nff2=MEDFileFloatField1TS.New()
6441         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6442         nff2.setFieldProfile(nf2,mm1,0,npfl)
6443         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6444         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6445         self.assertTrue(b.isEqual(npfl))
6446         self.assertTrue(a.isEqual(narr2,1e-7))
6447         nff2.write(fname,0)
6448         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6449         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6450         self.assertTrue(b.isEqual(npfl))
6451         self.assertTrue(a.isEqual(narr2,1e-7))
6452         #
6453         nf3=MEDCouplingFieldDouble(ON_NODES)
6454         nf3.setName("VectorFieldOnNodesDouble")
6455         nf3.setTime(29.,30,-21)
6456         nf3.setMesh(f1.getMesh())
6457         nf3.setArray(f1.getMesh().getCoords())
6458         nff3=MEDFileField1TS.New()
6459         nff3.setFieldNoProfileSBT(nf3)
6460         nff3.write(fname,0)
6461         fs=MEDFileFields(fname)
6462         self.assertEqual(len(fs),4)
6463         ffs=[it for it in fs]
6464         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6465         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6466         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6467         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6468         #
6469         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6470         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6471         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6472         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6473         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6474         #
6475         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6476         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6477         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6478         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6479         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6480         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6481         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6482         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6483         #
6484         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6485         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6486         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6487         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6488         pass
6489
6490     @WriteInTmpDir
6491     def testPenta18_1(self):
6492         """EDF8478 : Test of read/write of penta18"""
6493         fname="Pyfile115.med"
6494         arr=DataArrayDouble([
6495             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6496             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6497             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6498             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6499             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6500             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6501         m=MEDCouplingUMesh("mesh",3)
6502         m.setCoords(arr)
6503         m.allocateCells(1)
6504         m.insertNextCell(NORM_PENTA18,list(range(18)))
6505         m.checkConsistencyLight()
6506         #
6507         f=MEDCouplingFieldDouble(ON_NODES)
6508         f.setMesh(m)
6509         f.setName("FieldOnPenta18")
6510         f.setArray(DataArrayDouble(list(range(18))))
6511         f.checkConsistencyLight()
6512         #
6513         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6514         #
6515         f2=MEDCouplingFieldDouble(ON_NODES)
6516         f2.setMesh(m)
6517         f2.setName("FieldOnPenta18Sub")
6518         f2.setArray(DataArrayDouble(list(range(18))))
6519         f2.checkConsistencyLight()
6520         WriteField(fname,f2,True)
6521         f3=ReadField(fname)
6522         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6523         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6524         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6525         pass
6526
6527     @WriteInTmpDir
6528     def testFieldsLinearToQuadratic(self):
6529         fname="Pyfile117.med"
6530         arr=DataArrayDouble([0,1])
6531         m=MEDCouplingCMesh();
6532         m.setCoords(arr,arr,arr)
6533         m=m.buildUnstructured()
6534         m2=m.deepCopy()
6535         m2.translate([2,0,0])
6536         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6537         m3.setName("mesh")
6538         mm=MEDFileUMesh()
6539         mm[0]=m3
6540         mmq=mm.linearToQuadratic(0)
6541         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6542         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6543         #
6544         f=MEDCouplingFieldDouble(ON_NODES)
6545         f.setName("field")
6546         f.setMesh(m3)
6547         f.setTime(3.,1,2)
6548         arr=DataArrayDouble(m3.getNumberOfNodes())
6549         arr.iota()
6550         f.setArray(arr)
6551         f1ts=MEDFileField1TS()
6552         f1ts.setFieldNoProfileSBT(f)
6553         fmts=MEDFileFieldMultiTS()
6554         fmts.pushBackTimeStep(f1ts)
6555         f1ts_2=f1ts.deepCopy()
6556         f1ts_2.setTime(3,4,5.)
6557         f1ts_2.getUndergroundDataArray()[:]*=2.
6558         fmts.pushBackTimeStep(f1ts_2)
6559         fs=MEDFileFields()
6560         fs.pushField(fmts)
6561         fs2=fs.linearToQuadratic(mms,mmsq)
6562         self.myTester1(fs2,mmsq[0])
6563         # A small Write/Read and test again
6564         mms.write(fname,2) ; fs.write(fname,0)
6565         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6566         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6567         fs2=fs.linearToQuadratic(mms,mmqs)
6568         self.myTester1(fs2,mmqs[0])
6569         pass
6570
6571     def myTester1(self,fs2,mmq):
6572         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)
6573         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])
6574         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])
6575         fToTest=fs2[0][0].field(mmq)
6576         self.assertEqual(fToTest.getTime(),[3.,1,2])
6577         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6578         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6579         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6580         self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6581         # testing 2nd timestep
6582         fToTest=fs2[0][1].field(mmq)
6583         self.assertEqual(fToTest.getTime(),[5.,3,4])
6584         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6585         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6586         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6587         self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6588         pass
6589
6590     @WriteInTmpDir
6591     def testFieldsLinearToQuadratic2(self):
6592         """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6593         GeneratePyfile18(self)
6594         fname="Pyfile118.med"
6595         arr=DataArrayDouble([0,1])
6596         m=MEDCouplingCMesh();
6597         m.setCoords(arr,arr,arr)
6598         m=m.buildUnstructured()
6599         m2=m.deepCopy()
6600         m2.translate([2,0,0])
6601         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6602         m3.setName("mesh")
6603         # add a point for fun
6604         m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6605         #
6606         mm=MEDFileUMesh()
6607         mm[0]=m3
6608         mmq=mm.linearToQuadratic(0)
6609         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6610         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6611         #
6612         f=MEDCouplingFieldDouble(ON_NODES)
6613         f.setName("field")
6614         f.setMesh(m3)
6615         f.setTime(3.,1,2)
6616         arr=DataArrayDouble(8) ; arr.iota()
6617         arr.iota()
6618         f.setArray(arr)
6619         f1ts=MEDFileField1TS()
6620         pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6621         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6622         f1ts_2=f1ts.deepCopy()
6623         f1ts_2.setTime(3,4,5.)
6624         f1ts_2.getUndergroundDataArray()[:]*=4.
6625         fmts=MEDFileFieldMultiTS()
6626         fmts.pushBackTimeStep(f1ts)
6627         fmts.pushBackTimeStep(f1ts_2)
6628         fs=MEDFileFields()
6629         fs.pushField(fmts)
6630         fs2=fs.linearToQuadratic(mms,mmsq)
6631         mms.write(fname,2) ; fs.write(fname,0)
6632         #
6633         self.myTester2(fs2,mmq)
6634         # Read/write
6635         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6636         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6637         fs2=fs.linearToQuadratic(mms,mmqs)
6638         self.myTester2(fs2,mmq)
6639         ## More vicious add single node 16
6640         mm=MEDFileUMesh()
6641         mm[0]=m3
6642         mmq=mm.linearToQuadratic(0)
6643         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6644         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6645         #
6646         f=MEDCouplingFieldDouble(ON_NODES)
6647         f.setName("field")
6648         f.setMesh(m3)
6649         f.setTime(3.,1,2)
6650         arr=DataArrayDouble(9) ; arr.iota()
6651         arr.iota()
6652         f.setArray(arr)
6653         f1ts=MEDFileField1TS()
6654         pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6655         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6656         fmts=MEDFileFieldMultiTS()
6657         fmts.pushBackTimeStep(f1ts)
6658         fs=MEDFileFields()
6659         fs.pushField(fmts)
6660         fs2=fs.linearToQuadratic(mms,mmsq)
6661         #
6662         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")
6663         f1tsToTest=fs2[0][0]
6664         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])
6665         assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6666         assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6667         assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6668         pass
6669
6670     def myTester2(self,fs2,mmq):
6671         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")
6672         f1tsToTest=fs2[0][0]
6673         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])
6674         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6675         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6676         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6677         fToTest=fs2[0][0].field(mmq)
6678         self.assertEqual(fToTest.getTime(),[3.,1,2])
6679         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6680         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])))
6681         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))
6682         self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6683         # 2nd Time step
6684         f1tsToTest=fs2[0][1]
6685         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6686         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6687         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6688         fToTest=fs2[0][1].field(mmq)
6689         self.assertEqual(fToTest.getTime(),[5.,3,4])
6690         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6691         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])))
6692         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))
6693         self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6694
6695         pass
6696
6697     @WriteInTmpDir
6698     def testSetFieldProfileFlatly1(self):
6699         """ 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
6700         a profile."""
6701         arr=DataArrayDouble(10) ; arr.iota()
6702         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6703         m=m.buildUnstructured()
6704         m2=m.deepCopy()
6705         m2.simplexize(0)
6706         m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6707         m.setName("mesh")
6708         mm=MEDFileUMesh()
6709         mm[0]=m
6710         f=MEDCouplingFieldDouble(ON_CELLS)
6711         f.setMesh(m)
6712         arr=DataArrayDouble(m.getNumberOfCells())
6713         arr.iota()
6714         f.setArray(arr)
6715         f.setName("field")
6716         pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6717         #
6718         refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6719         refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6720         #
6721         f1ts=MEDFileField1TS()
6722         f1ts.setFieldProfile(f,mm,0,pfl)
6723         self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6724         self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6725         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6726         #
6727         f1ts=MEDFileField1TS()
6728         f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6729         self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6730         self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6731         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6732         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6733         self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6734         pass
6735
6736     @WriteInTmpDir
6737     def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6738         """ Here multi level groups are created"""
6739         arr=DataArrayDouble(11) ; arr.iota()
6740         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6741         m=m.buildUnstructured()
6742         m.setName("mesh")
6743         m1=m.buildDescendingConnectivity()[0]
6744         mm=MEDFileUMesh()
6745         mm[0]=m ; mm[-1]=m1
6746         ################
6747         grpName="grp0"
6748         grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6749         grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6750         grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6751         grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6752         ################ ajouter un groupe sur plusieurs niveau
6753         mm.addGroup(0,grp1)
6754         mm.addGroup(-1,grp2)
6755         mm.addGroup(0,grp0_0)
6756         mm.addGroup(-1,grp0_1)
6757         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6758         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6759         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6760         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6761         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6762         self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6763         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6764         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6765         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6766         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6767         mm.removeGroupAtLevel(0,grpName)
6768         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6769         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6770         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6771         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6772         mm.removeGroupAtLevel(-1,grpName)
6773         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6774         self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6775         mm.addGroup(-1,grp0_1)
6776         mm.addGroup(0,grp0_0)
6777         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6778         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6779         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6780         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6781         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6782         pass
6783
6784     @WriteInTmpDir
6785     def testYutaka(self):
6786         """ 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...
6787         Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6788         mn="mesh"
6789         m=MEDCouplingCMesh()
6790         arr=DataArrayDouble(4) ; arr.iota()
6791         m.setCoords(arr,arr,arr)
6792         m=m.buildUnstructured()
6793         m.setName(mn)
6794         #
6795         m=m.buildUnstructured()
6796         m1=m.buildDescendingConnectivity()[0]
6797         #
6798         mm=MEDFileUMesh()
6799         mm[0]=m
6800         mm[-1]=m1
6801         #
6802         grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6803         mm.addGroup(0,grp0)
6804         grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6805         mm.addGroup(0,grp1)
6806         grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6807         mm.addGroup(0,grp2)
6808         grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6809         mm.addGroup(-1,grp3)
6810         self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6811         grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6812         mm.addNodeGroup(grp4)
6813         mm.rearrangeFamilies()
6814         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6815         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6816         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6817         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6818         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6819
6820         for grp in [grp0,grp1,grp2,grp3,grp4]:
6821             self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6822             pass
6823         pass
6824
6825     @WriteInTmpDir
6826     def testContxtMger1TS(self):
6827         fname="Pyfile119.med"
6828         coo=DataArrayDouble(1000) ; coo.iota()
6829         m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6830         m.setName("mesh")
6831         WriteMesh(fname,m,True)
6832         f=MEDCouplingFieldDouble(ON_CELLS)
6833         f.setMesh(m)
6834         f.setName("Field")
6835         arr=DataArrayDouble(m.getNumberOfCells())
6836         f.setArray(arr)
6837         f.checkConsistencyLight()
6838         for i in range(10):
6839             arr[:]=float(i+1)
6840             f.setTime(float(i),i,0)
6841             WriteFieldUsingAlreadyWrittenMesh(fname,f)
6842             pass
6843         #
6844         mm=MEDFileMesh.New(fname)
6845         fmts=MEDFileFieldMultiTS(fname,False)
6846         refSize=fmts.getHeapMemorySize()
6847         for f1ts in fmts:
6848             with f1ts:
6849                 f=f1ts.field(mm)
6850                 pass
6851             pass
6852         self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6853         pass
6854
6855     def testZipFamilies1(self):
6856         """
6857         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6858         """
6859         mname="mesh"
6860         arr=DataArrayDouble(10) ; arr.iota()
6861         m=MEDCouplingCMesh()
6862         m.setCoords(arr,arr)
6863         m=m.buildUnstructured()
6864         m.setName(mname)
6865         #
6866         mm=MEDFileUMesh()
6867         mm[0]=m
6868         for i in range(m.getNumberOfCells()):
6869             d = DataArrayInt([i])
6870             d.setName("grp%d"%i)
6871             mm.addGroup(0,d)
6872             pass
6873
6874         grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6875         grp_all.setName("grp_all")
6876         mm.addGroup(0,grp_all)
6877         for i in range(m.getNumberOfCells()):
6878             mm.removeGroup("grp{}".format(i))
6879             pass
6880         #
6881         mm.zipFamilies() # the method to test
6882         #
6883         self.assertEqual(mm.getGroupsNames(),("grp_all",))
6884         self.assertEqual(len(mm.getFamiliesNames()),1)
6885         self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6886         pass
6887
6888     def testZipFamilies2(self):
6889         """
6890         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6891         """
6892         mname="mesh"
6893         arr=DataArrayDouble(21) ; arr.iota()
6894         m=MEDCouplingCMesh()
6895         m.setCoords(arr)
6896         m=m.buildUnstructured()
6897         m.setName(mname)
6898         #
6899         mm=MEDFileUMesh()
6900         mm[0]=m
6901         # 1 and 3 to be merged
6902         # 2 and 5 to be merged
6903         mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6904         for i in range(1,9):
6905             mm.setFamilyId("Fam_{}".format(i),-i)
6906         mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6907         mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6908         mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6909         #
6910         grp0=DataArrayInt([0,1,3,8,10,19])
6911         grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6912         grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6913         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6914         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6915         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6916         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6917         mm.zipFamilies()
6918         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6919         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6920         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6921         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6922         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6923         pass
6924
6925     def testMeshConvertFromMEDFileGeoType(self):
6926         self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6927
6928     @WriteInTmpDir
6929     def testFieldInt64_0(self):
6930         """
6931         Small basic test with I/O of field in int64.
6932         """
6933         fname="Pyfile120.med"
6934         arr = DataArrayDouble([0,1])
6935         m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6936         f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6937         v = 1234567890123456
6938         f.setArray(DataArrayInt64([v]))
6939         f.setMesh(m)
6940         mm = MEDFileUMesh()
6941         mm[0] = m
6942         f1ts = MEDFileInt64Field1TS()
6943         f1ts.setFieldNoProfileSBT(f)
6944         fmts = MEDFileInt64FieldMultiTS()
6945         fmts.pushBackTimeStep(f1ts)
6946         fs = MEDFileFields()
6947         fs.pushField(fmts)
6948         mm.write(fname,2)
6949         fs.write(fname,0)
6950         #
6951         mm = MEDFileMesh.New(fname)
6952         fs = MEDFileFields(fname)
6953         f = fs[0][0].field(mm)
6954         self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6955         self.assertEqual( f.getArray().getIJ(0,0) , v )
6956
6957     @WriteInTmpDir
6958     def testNonRegUMeshSubParts(self):
6959         """
6960         Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6961         """
6962         fname = "Pyfile121.med"
6963         m0 = MEDCouplingUMesh("mesh",1)
6964         coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6965         m0.setCoords(coords)
6966         m0.allocateCells()
6967         m0.insertNextCell(NORM_SEG2,[1,2])
6968         mm = MEDFileUMesh()
6969         mm[0] = m0
6970         m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6971         m1.setCoords(m0.getCoords())
6972         m1.setNodalConnectivity(DataArrayInt([1,2]))
6973         m1.setName(m0.getName())
6974         mm[-1] = m1
6975         fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6976         mm.zipCoords() # <- This call changes the coords and connectivity
6977         mm.write(fname,2)
6978         #
6979         mm = MEDFileMesh.New(fname)
6980         mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6981         self.assertTrue( m0.isEqual(mm[0],1e-12) )
6982         pass
6983
6984     pass
6985
6986 if __name__ == "__main__":
6987     unittest.main()