Salome HOME
Fix error in deepCopy of MEDFileJoints for ASTERXX splitter
[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         self.assertEqual(1,joint1st_6.getNumberOfCorrespondences())
4993         joint1st_6.clearCorrespondences()
4994         self.assertEqual(0,joint1st_6.getNumberOfCorrespondences())
4995         one_joint=MEDFileJoint()
4996         one_joint.pushStep(joint1st_1)
4997         one_joint.setLocalMeshName("maa1")
4998         one_joint.setRemoteMeshName("maa2")
4999         one_joint.setDescription("joint_description")
5000         one_joint.setJointName("joint_1")
5001         one_joint.setDomainNumber(1)
5002         self.assertEqual( "maa1", one_joint.getLocalMeshName())
5003         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5004         self.assertEqual( "joint_description", one_joint.getDescription())
5005         self.assertEqual( 1, one_joint.getDomainNumber())
5006         self.assertEqual( "joint_1", one_joint.getJointName())
5007         one_joint_copy = one_joint.deepCopy()
5008         self.assertEqual( "maa1", one_joint_copy.getLocalMeshName())
5009         self.assertEqual( "maa2", one_joint_copy.getRemoteMeshName())
5010         self.assertEqual( "joint_description", one_joint_copy.getDescription())
5011         self.assertEqual( 1, one_joint_copy.getDomainNumber())
5012         self.assertEqual( "joint_1", one_joint_copy.getJointName())
5013         pass
5014
5015     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5016     @WriteInTmpDir
5017     def testMEDFileSafeCall0(self):
5018         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5019         fname="Pyfile94.med"
5020         errfname="Pyfile94.err"
5021
5022         import os
5023         # first clean file if needed
5024         if os.path.exists(fname):
5025             os.remove(fname)
5026             pass
5027         # second : build a file from scratch
5028         m=MEDCouplingCMesh()
5029         arr=DataArrayDouble(11) ; arr.iota()
5030         m.setCoords(arr,arr)
5031         mm=MEDFileCMesh()
5032         mm.setMesh(m)
5033         mm.setName("mesh")
5034         mm.write(fname,2)
5035         # third : change permissions to remove write access on created file
5036         os.chmod(fname, 0o444)
5037         # four : try to append data on file -> check that it raises Exception
5038         f=MEDCouplingFieldDouble(ON_CELLS)
5039         f.setName("field")
5040         f.setMesh(m)
5041         f.setArray(DataArrayDouble(100))
5042         f.getArray()[:]=100.
5043         f.checkConsistencyLight()
5044         f1ts=MEDFileField1TS()
5045         f1ts.setFieldNoProfileSBT(f)
5046         # redirect stderr
5047         tmp=StdOutRedirect(errfname)
5048         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5049         del tmp
5050         #
5051         if os.path.exists(errfname):
5052             os.remove(errfname)
5053         #
5054         pass
5055
5056     @WriteInTmpDir
5057     def testUnivStatus1(self):
5058         """ Non regression test to check the effectiveness of univ write status."""
5059         fname="Pyfile95.med"
5060         arr=DataArrayDouble(10) ; arr.iota()
5061         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5062         mm=MEDFileCMesh() ; mm.setMesh(m)
5063         mm.setUnivNameWrStatus(False) # test is here
5064         mm.write(fname,2)
5065         mm=MEDFileCMesh(fname)
5066         self.assertEqual(mm.getUnivName(),"")
5067         mm.setUnivNameWrStatus(True)
5068         mm.write(fname,2)
5069         mm=MEDFileCMesh(fname)
5070         self.assertTrue(mm.getUnivName()!="")
5071         pass
5072
5073     @WriteInTmpDir
5074     def testEmptyMesh(self):
5075       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5076       with 0 tuples """
5077       fname = "Pyfile96.med"
5078       m = MEDCouplingUMesh('toto', 2)
5079       m.setCoords(DataArrayDouble([], 0, 2))
5080       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5081       mfu = MEDFileUMesh()
5082       mfu.setMeshAtLevel(0, m)
5083       mfu.write(fname, 2)
5084       mfu2 = MEDFileUMesh(fname)
5085       self.assertEqual('toto', mfu2.getName())
5086       lvl = mfu2.getNonEmptyLevels()
5087       self.assertEqual((), lvl)
5088
5089     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5090     def testMEDFileUMeshPickeling2(self):
5091       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5092       name="Mesh_1"
5093       grpName1="HAUT"
5094       grpName2="BASE"
5095       hauteur=1.
5096       nbOfNodesPerAxis=3
5097       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5098       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5099       mesh=MEDFileUMesh() ; mesh[0]=m
5100       m1=m.computeSkin() ; mesh[-1]=m1
5101       #
5102       bary1=m1.computeCellCenterOfMass()[:,2]
5103       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5104       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5105       mesh.setGroupsAtLevel(-1,[grp1,grp2])
5106
5107       st=pickle.dumps(mesh,2)
5108       mm=pickle.loads(st)
5109       st2=pickle.dumps(mm,2)
5110       mm2=pickle.loads(st2)
5111       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5112       pass
5113
5114     @WriteInTmpDir
5115     def testMEDFileEquivalence1(self):
5116       """ First check of equivalence implementation in MEDFileMesh"""
5117       fileName="Pyfile97.med"
5118       meshName="M_01"
5119       mm=MEDFileUMesh()
5120       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)])
5121       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5122       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])
5123       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5124       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])
5125       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5126       mm.getFamilyFieldAtLevel(-1)[:]=-2
5127       mm.getFamilyFieldAtLevel(0)[:]=0
5128       mm.addFamily("HOMARD________-1",-1)
5129       mm.addFamily("HOMARD________-2",-2)
5130       mm.addFamily("HOMARD________-3",-3)
5131       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5132
5133       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5134       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."
5135       mm.initializeEquivalences()
5136       eqs=mm.getEquivalences()
5137       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5138       eq0.setDescription(descEq)
5139       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)])
5140       eq0.setArray(-1,corr)
5141       self.assertEqual(eq0.getCell().size(),1)
5142       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5143       eq0.getCell().clear()
5144       self.assertEqual(eq0.getCell().size(),0)
5145       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5146       self.assertEqual(eq0.getCell().size(),1)
5147       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5148       mm.killEquivalences()
5149       mm.initializeEquivalences()
5150       eqs=mm.getEquivalences()
5151       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5152       eq0.setDescription(descEq)
5153       c=eq0.initCell()
5154       c.setArrayForType(NORM_QUAD4,corr)
5155       self.assertEqual(eq0.getCell().size(),1)
5156       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5157       mm2=mm.deepCopy()
5158       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5159       self.assertEqual(mm2.getEquivalences().size(),1)
5160       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5161       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5162       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5163       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5164       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5165       mm.write(fileName,2)
5166       #
5167       mm3=MEDFileMesh.New(fileName)
5168       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5169       pass
5170
5171     @WriteInTmpDir
5172     def testMEDFileForFamiliesPlayer1(self):
5173       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5174       fileName="Pyfile98.med"
5175       meshName="mesh"
5176       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5177       arr=DataArrayDouble(4) ; arr.iota()
5178       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5179       m=m.buildUnstructured()
5180       mm=MEDFileUMesh()
5181       mm[0]=m
5182       mm.setName(meshName)
5183       mm.setFamilyId("FAMILLE_ZERO",0)
5184       mm.getFamilyFieldAtLevel(0)[-3:]=-4
5185       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5186       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5187       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5188       mm.setFamilyFieldArr(1,d)
5189       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5190       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5191       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5192       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5193       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5194       mm.write(fileName,2)
5195       # now read such funny file !
5196       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5197       self.assertTrue(mm.isEqual(mm2,1e-16))
5198       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5199       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5200       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5201       pass
5202
5203     @WriteInTmpDir
5204     def testCartesianizer1(self):
5205       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5206       # UMesh non cart
5207       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5208       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5209       d0=DataArrayInt(16) ; d0[:]=0
5210       d1=DataArrayInt(9)  ; d1[:]=0
5211       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5212       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5213       ref0=mm.getCoords().getHiddenCppPointer()
5214       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5215       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5216       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5217       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5218       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5219       mm.setAxisType(AX_CYL) #<- important
5220       mm2=mm.cartesianize() # the trigger
5221       self.assertEqual(mm2.getAxisType(),AX_CART)
5222       mm.setAxisType(AX_CART) # this is here only to avoid complaints
5223       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5224       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5225       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5226       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5227       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5228       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5229       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5230       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5231       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5232       self.assertEqual(mm2.getName(),mm.getName())
5233       self.assertEqual(mm2.getDescription(),mm.getDescription())
5234       self.assertEqual(mm2.getTime(),mm.getTime())
5235       self.assertEqual(mm2.getTime(),mm.getTime())
5236       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5237       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5238       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5239       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5240       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5241       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5242       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5243       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5244       # UMesh cart
5245       mm.setAxisType(AX_CART)
5246       mm2=mm.cartesianize() # the trigger
5247       self.assertEqual(mm2.getAxisType(),AX_CART)
5248       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5249       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5250       # CurveLinearMesh non cart
5251       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5252       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5253       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5254       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5255       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5256       mm2=mm.cartesianize() # the trigger
5257       self.assertEqual(mm2.getAxisType(),AX_CART)
5258       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5259       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5260       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5261       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5262       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5263       self.assertEqual(mm2.getName(),mm.getName())
5264       self.assertEqual(mm2.getDescription(),mm.getDescription())
5265       self.assertEqual(mm2.getTime(),mm.getTime())
5266       self.assertEqual(mm2.getTime(),mm.getTime())
5267       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5268       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5269       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5270       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5271       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5272       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5273       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5274       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5275       # CurveLinearMesh cart
5276       mm.setAxisType(AX_CART)
5277       mm2=mm.cartesianize() # the trigger
5278       self.assertEqual(mm2.getAxisType(),AX_CART)
5279       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5280       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5281       # CMesh non cart
5282       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5283       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5284       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5285       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5286       mm2=mm.cartesianize() # the trigger
5287       self.assertEqual(mm2.getAxisType(),AX_CART)
5288       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5289       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5290       self.assertEqual(mm2.getName(),mm.getName())
5291       self.assertEqual(mm2.getDescription(),mm.getDescription())
5292       self.assertEqual(mm2.getTime(),mm.getTime())
5293       self.assertEqual(mm2.getTime(),mm.getTime())
5294       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5295       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5296       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5297       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5298       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5299       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5300       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5301       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5302       # CMesh cart
5303       mm.setAxisType(AX_CART)
5304       mm2=mm.cartesianize() # the trigger
5305       self.assertEqual(mm2.getAxisType(),AX_CART)
5306       self.assertTrue(isinstance(mm2,MEDFileCMesh))
5307       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5308       pass
5309
5310     @WriteInTmpDir
5311     def testCheckCoherency(self):
5312       m2 = MEDCouplingUMesh("2d", 2)
5313       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5314       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5315       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5316       mum = MEDFileUMesh()
5317       mum.setMeshAtLevel(0, m2)
5318       mum.setMeshAtLevel(-1, m1)
5319       mum.checkConsistency()
5320       mum2 = mum.deepCopy()
5321
5322       # Nodes
5323       arr = DataArrayInt([2]*4)
5324       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5325       self.assertRaises(InterpKernelException, mum.checkConsistency)
5326       mum=mum2; mum2=mum.deepCopy();
5327       arr = DataArrayInt([2]*4)
5328       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5329       self.assertRaises(InterpKernelException, mum.checkConsistency)
5330       mum=mum2; mum2=mum.deepCopy();
5331       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5332       self.assertRaises(InterpKernelException, mum.checkConsistency)
5333       mum=mum2; mum2=mum.deepCopy();
5334       arr = DataArrayAsciiChar(['tutu           x']*4)
5335       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5336       self.assertRaises(InterpKernelException, mum.checkConsistency)
5337
5338       # 2D
5339       mum=mum2; mum2=mum.deepCopy();
5340       arr = DataArrayInt([2]*2)
5341       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5342       self.assertRaises(InterpKernelException, mum.checkConsistency)
5343       mum=mum2; mum2=mum.deepCopy();
5344       arr = DataArrayInt([2]*2)
5345       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5346       self.assertRaises(InterpKernelException, mum.checkConsistency)
5347       mum=mum2; mum2=mum.deepCopy();
5348       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5349       self.assertRaises(InterpKernelException, mum.checkConsistency)
5350       mum=mum2; mum2=mum.deepCopy();
5351       arr = DataArrayAsciiChar(['tutu           x']*2)
5352       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5353       self.assertRaises(InterpKernelException, mum.checkConsistency)
5354
5355       # 1D
5356       mum=mum2; mum2=mum.deepCopy();
5357       arr = DataArrayInt([2]*5)
5358       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5359       self.assertRaises(InterpKernelException, mum.checkConsistency)
5360       mum=mum2; mum2=mum.deepCopy();
5361       arr = DataArrayInt([2]*5)
5362       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5363       self.assertRaises(InterpKernelException, mum.checkConsistency)
5364       mum=mum2; mum2=mum.deepCopy();
5365       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5366       self.assertRaises(InterpKernelException, mum.checkConsistency)
5367       mum=mum2; mum2=mum.deepCopy();
5368       arr = DataArrayAsciiChar(['tutu           x']*5)
5369       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5370       self.assertRaises(InterpKernelException, mum.checkConsistency)
5371
5372     @WriteInTmpDir
5373     def testCheckSMESHConsistency(self):
5374       m2 = MEDCouplingUMesh("2d", 2)
5375       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5376       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5377       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5378       mum = MEDFileUMesh()
5379       mum.setMeshAtLevel(0, m2)
5380       mum.setMeshAtLevel(-1, m1)
5381       mum.checkConsistency()
5382       mum.checkSMESHConsistency()
5383       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5384       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5385       mum.setRenumFieldArr(0, n2)
5386       mum.setRenumFieldArr(-1, n1)
5387       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5388       mum.setRenumFieldArr(-1, n1+100)
5389       mum.checkSMESHConsistency()
5390       pass
5391
5392     @WriteInTmpDir
5393     def testClearNodeAndCellNumbers(self):
5394       m2 = MEDCouplingUMesh("2d", 2)
5395       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5396       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5397       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5398       mum = MEDFileUMesh()
5399       mum.setMeshAtLevel(0, m2)
5400       mum.setMeshAtLevel(-1, m1)
5401       mum.checkConsistency()
5402       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5403       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5404       mum.setRenumFieldArr(0, n2)
5405       mum.setRenumFieldArr(-1, n1)
5406       mum.clearNodeAndCellNumbers()
5407       mum.checkSMESHConsistency()
5408       pass
5409
5410     @WriteInTmpDir
5411     def testCMeshSetFamilyFieldArrNull(self):
5412       meshName="mesh"
5413       fname="Pyfile99.med"
5414       arrX=DataArrayDouble([0,1,2,3])
5415       arrY=DataArrayDouble([0,1,2])
5416       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5417       mm=MEDFileCMesh() ; mm.setMesh(m)
5418       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5419       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5420       mm.setFamilyFieldArr(0,famCellIds)
5421       mm.setFamilyFieldArr(1,famNodeIds)
5422       mm.write(fname,2)
5423       mm=MEDFileMesh.New(fname)
5424       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5425       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5426       mm.setFamilyFieldArr(0,None)#<- bug was here
5427       mm.setFamilyFieldArr(1,None)#<- bug was here
5428       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5429       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5430       mm3=mm.deepCopy()
5431       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5432       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5433       mm.write(fname,2)
5434       mm2=MEDFileMesh.New(fname)
5435       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5436       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5437       pass
5438
5439     @WriteInTmpDir
5440     def testAppendFieldProfileOnIntField(self):
5441       fname="Pyfile100.med"
5442       arrX=DataArrayDouble([0,1,2,3])
5443       arrY=DataArrayDouble([0,1,2])
5444       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5445       mm=MEDFileCMesh()
5446       mm.setMesh(mesh)
5447       #
5448       fmts=MEDFileIntFieldMultiTS()
5449       pflName="PFL"
5450       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5451       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5452       fieldName="FieldOnCell"
5453       f.setTime(1.2,1,1) ; f.setName(fieldName)
5454       arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5455       fmts.appendFieldProfile(f,mm,0,pfl)
5456       #
5457       mm.write(fname,2)
5458       fmts.write(fname,0)
5459       #
5460       mm=MEDFileMesh.New(fname)
5461       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5462       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5463       self.assertEqual(fmts.getName(),fieldName)
5464       self.assertEqual(len(fmts),1)
5465       f1ts=fmts[0]
5466       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5467       self.assertEqual(pfltest.getName(),pflName)
5468       self.assertEqual(ftest.getName(),fieldName)
5469       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5470       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5471       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5472       self.assertEqual(ftest2.getTime(),f.getTime())
5473       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5474       pass
5475
5476     @WriteInTmpDir
5477     def testMEDFileFieldEasyField1(self):
5478       """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."""
5479       ## Basic test on cells on top level
5480       fname="Pyfile101.med"
5481       fieldName="field1"
5482       mm=MEDFileUMesh()
5483       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5484       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5485       m.allocateCells()
5486       m.insertNextCell(NORM_TRI3,[0,1,2])
5487       m.insertNextCell(NORM_TRI3,[3,4,5])
5488       m.insertNextCell(NORM_TRI3,[6,7,8])
5489       m.insertNextCell(NORM_TRI3,[9,10,11])
5490       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5491       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5492       mm[0]=m
5493       mm.write(fname,2)
5494       arr0=DataArrayDouble([10,11,12,13,100,101])
5495       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5496       f.setName(fieldName) ; f.setTime(2.,6,7)
5497       f0=f.deepCopy()
5498       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5499       ff.write(fname,0)
5500       arr2=arr0+1000 ; f.setArray(arr2)
5501       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5502       ff.write(fname,0)
5503       f1=f.deepCopy()
5504       ##
5505       mm=MEDFileMesh.New(fname)
5506       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5507       ftst0=f1ts.field(mm)
5508       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5509       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5510       ftst1=f1ts.field(mm)
5511       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5512       fmts=MEDFileFieldMultiTS(fname,fieldName)
5513       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5514       ## Basic test on nodes on top level
5515       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5516       f2.setName(fieldName)
5517       mm.write(fname,2)
5518       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5519       #
5520       mm=MEDFileMesh.New(fname)
5521       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5522       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5523       fmts=MEDFileFieldMultiTS(fname,fieldName)
5524       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5525       ## Node on elements
5526       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)
5527       f3.setName(fieldName) ; f3.checkConsistencyLight()
5528       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5529       #
5530       mm=MEDFileMesh.New(fname)
5531       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5532       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5533       ## Gauss
5534       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5535       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])
5536       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)
5537       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)
5538       f4.checkConsistencyLight()
5539       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5540       #
5541       mm=MEDFileMesh.New(fname)
5542       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5543       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5544       pass
5545
5546     @WriteInTmpDir
5547     def testMEDFileFieldEasyField2(self):
5548         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5549         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."""
5550         ## Basic test on cells on top level
5551         fname="Pyfile102.med"
5552         fieldName="field1"
5553         mm=MEDFileUMesh()
5554         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5555         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5556         m.allocateCells()
5557         m.insertNextCell(NORM_TRI3,[0,1,2])
5558         m.insertNextCell(NORM_TRI3,[3,4,5])
5559         m.insertNextCell(NORM_TRI3,[6,7,8])
5560         m.insertNextCell(NORM_TRI3,[9,10,11])
5561         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5562         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5563         mm[0]=m
5564         mm.write(fname,2)
5565         arr0=DataArrayInt32([10,11,12,13,100,101])
5566         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5567         f.setName(fieldName) ; f.setTime(2.,6,7)
5568         f0=f.deepCopy()
5569         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5570         ff.write(fname,0)
5571         arr2=arr0+1000 ; f.setArray(arr2)
5572         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5573         ff.write(fname,0)
5574         f1=f.deepCopy()
5575         ##
5576         mm=MEDFileMesh.New(fname)
5577         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5578         ftst0=f1ts.field(mm)
5579         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5580         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5581         ftst1=f1ts.field(mm)
5582         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5583         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5584         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5585         ## Basic test on nodes on top level
5586         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5587         f2.setName(fieldName)
5588         mm.write(fname,2)
5589         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5590         #
5591         mm=MEDFileMesh.New(fname)
5592         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5593         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5594         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5595         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5596         ## Node on elements
5597         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)
5598         f3.setName(fieldName) ; f3.checkConsistencyLight()
5599         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5600         #
5601         mm=MEDFileMesh.New(fname)
5602         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5603         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5604         ## Gauss
5605         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5606         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])
5607         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)
5608         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)
5609         f4.checkConsistencyLight()
5610         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5611         #
5612         mm=MEDFileMesh.New(fname)
5613         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5614         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5615         pass
5616
5617     @WriteInTmpDir
5618     def testMEDFileFieldEasyField3(self):
5619         """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."""
5620         fname="Pyfile103.med"
5621         fieldName="field1"
5622         mm=MEDFileUMesh()
5623         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5624         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5625         m.allocateCells()
5626         m.insertNextCell(NORM_TRI3,[0,1,2])
5627         m.insertNextCell(NORM_TRI3,[3,4,5])
5628         m.insertNextCell(NORM_TRI3,[6,7,8])
5629         m.insertNextCell(NORM_TRI3,[9,10,11])
5630         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5631         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5632         mm[-1]=m
5633         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5634         m0.allocateCells()
5635         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5636         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5637         mm[0]=m0
5638         mm.write(fname,2)
5639         # start slowly
5640         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5641         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5642         #
5643         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5644         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5645         # here f1 lying on level -1 not 0 check if "field" method detect it !
5646         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5647         f1.setMesh(mm[-1]) # -1 is very important
5648         f1.setTime(16.,3,4)
5649         f1.checkConsistencyLight()
5650         mm.write(fname,2)
5651         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5652         #
5653         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5654         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5655         # nodes on elements
5656         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5657         f3.setMesh(mm[-1]) # this line is important
5658         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)
5659         f3.setName(fieldName) ; f3.checkConsistencyLight()
5660         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5661         #
5662         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5663         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5664         # gauss
5665         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5666         f4.setMesh(mm[-1]) # this line is important
5667         f4.setName(fieldName)
5668         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])
5669         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)
5670         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)
5671         f4.checkConsistencyLight()
5672         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5673         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5674         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5675         pass
5676
5677     @WriteInTmpDir
5678     def testMEDFileFieldEasyField4(self):
5679         """ Same than testMEDFileFieldEasyField3 but with integers"""
5680         fname="Pyfile104.med"
5681         fieldName="field1"
5682         mm=MEDFileUMesh()
5683         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5684         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5685         m.allocateCells()
5686         m.insertNextCell(NORM_TRI3,[0,1,2])
5687         m.insertNextCell(NORM_TRI3,[3,4,5])
5688         m.insertNextCell(NORM_TRI3,[6,7,8])
5689         m.insertNextCell(NORM_TRI3,[9,10,11])
5690         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5691         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5692         mm[-1]=m
5693         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5694         m0.allocateCells()
5695         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5696         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5697         mm[0]=m0
5698         mm.write(fname,2)
5699         # start slowly
5700         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5701         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5702         #
5703         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5704         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5705         # here f1 lying on level -1 not 0 check if "field" method detect it !
5706         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5707         f1.setMesh(mm[-1]) # -1 is very important
5708         f1.setTime(16.,3,4)
5709         f1.checkConsistencyLight()
5710         mm.write(fname,2)
5711         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5712         #
5713         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5714         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5715         # nodes on elements
5716         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5717         f3.setMesh(mm[-1]) # this line is important
5718         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)
5719         f3.setName(fieldName) ; f3.checkConsistencyLight()
5720         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5721         #
5722         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5723         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5724         # gauss
5725         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5726         f4.setMesh(mm[-1]) # this line is important
5727         f4.setName(fieldName)
5728         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])
5729         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)
5730         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)
5731         f4.checkConsistencyLight()
5732         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5733         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5734         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5735         pass
5736
5737     @WriteInTmpDir
5738     def testMEDFileFieldEasyField5(self):
5739         """More and more difficult now look at how profiles are managed by "field" method."""
5740         fname="Pyfile105.med"
5741         fieldName="field1"
5742         mm=MEDFileUMesh()
5743         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5744         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5745         m.allocateCells()
5746         m.insertNextCell(NORM_TRI3,[0,1,2])
5747         m.insertNextCell(NORM_TRI3,[3,4,5])
5748         m.insertNextCell(NORM_TRI3,[6,7,8])
5749         m.insertNextCell(NORM_TRI3,[9,10,11])
5750         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5751         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5752         mm[0]=m
5753         mm.write(fname,2)
5754         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5755         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5756         #
5757         arr0=DataArrayDouble([10,11,12,13])
5758         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5759         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5760         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5761         ff.write(fname,0)
5762         #
5763         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5764         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5765         # more complicated -> multi level
5766         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5767         m0.allocateCells()
5768         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5769         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5770         mm2=MEDFileUMesh()
5771         mm2[0]=m0 ; mm2[-1]=m
5772         #
5773         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5774         #
5775         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5776         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5777         pass
5778
5779     @WriteInTmpDir
5780     def testExtractPart1(self):
5781         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)])
5782         meshName="mesh"
5783         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5784         m0.insertNextCell(NORM_TRI3,[8,4,3])
5785         m0.insertNextCell(NORM_TRI3,[8,9,4])
5786         m0.insertNextCell(NORM_TRI3,[7,13,8])
5787         m0.insertNextCell(NORM_TRI3,[7,12,13])
5788         m0.insertNextCell(NORM_TRI3,[0,6,1])
5789         m0.insertNextCell(NORM_TRI3,[0,5,6])
5790         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5791         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5792         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5793         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5794         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5795         #
5796         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5797         m1.insertNextCell(NORM_SEG2,[10,5])
5798         m1.insertNextCell(NORM_SEG2,[5,0])
5799         m1.insertNextCell(NORM_SEG2,[0,1])
5800         m1.insertNextCell(NORM_SEG2,[1,2])
5801         m1.insertNextCell(NORM_SEG2,[2,3])
5802         m1.insertNextCell(NORM_SEG2,[3,4])
5803         m1.insertNextCell(NORM_SEG2,[4,9])
5804         m1.insertNextCell(NORM_SEG2,[9,14])
5805         m1.insertNextCell(NORM_SEG2,[14,13])
5806         m1.insertNextCell(NORM_SEG2,[13,12])
5807         m1.insertNextCell(NORM_SEG2,[12,11])
5808         m1.insertNextCell(NORM_SEG2,[11,10])
5809         mm=MEDFileUMesh()
5810         mm[0]=m0 ; mm[-1]=m1
5811         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5812         tab={} #
5813         tab[0]=DataArrayInt([0,2,3,4,6,7])
5814         tab[-1]=DataArrayInt([2,3,4,5,9])
5815         fs=MEDFileFields()
5816         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5817         tab[1]=arr0
5818         #
5819         fname0="Field0"
5820         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5821         t0=(16.5,3,4)
5822         ic=["toto [m]"]
5823         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5824         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5825         f0.setMesh(m0) ; f0.setName(fname0)
5826         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5827         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5828         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]))
5829         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5830         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5831         fmts.pushBackTimeStep(f1ts)
5832         #
5833         mmOut=mm.extractPart(tab)
5834         #
5835         fsPart0=fs.extractPart(tab,mm)
5836         self.assertEqual(len(fsPart0),1)
5837         fmtsP=fsPart0[0]
5838         self.assertEqual(len(fmtsP),1)
5839         f1ts=fmtsP[0]
5840         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5841         #
5842         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5843         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5844         #
5845         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5846         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5847         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5848         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5849         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5850         #
5851         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5852         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5853         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5854         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5855         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5856         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5857         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5858         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5859         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5860         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5861         #
5862         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5863         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5864         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5865         # multisteps
5866         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5867         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5868         for i,tt in enumerate(tss):
5869             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5870             myarr=arr0_0+i*1000.
5871             f0.setArray(myarr)
5872             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5873             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5874             pass
5875         fsPart1=fs.extractPart(tab,mm)
5876         self.assertEqual(len(fsPart1),1)
5877         fmtsP=fsPart1[0]
5878         self.assertEqual(len(fmtsP),len(tss))
5879         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5880             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5881             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5882             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5883             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5884             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5885             self.assertEqual(fPart.getTime(),list(tt))
5886             pass
5887         pass
5888
5889     @WriteInTmpDir
5890     def testSymmetryPlusAggregationMFD1(self):
5891         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5892         fname1="Pyfile106_1.med"
5893         fname2="Pyfile106_2.med"
5894         fname3="Pyfile106_3.med"
5895         meshName="mesh"
5896         mm1=MEDFileUMesh()
5897         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5898         mm1.setCoords(da1)
5899         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5900         mm1_0.setCoords(da1)
5901         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5902         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5903         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5904         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5905         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5906         mm1[0]=mm1_0
5907         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5908         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5909         #
5910         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5911         mm1_1.setCoords(da1)
5912         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5913         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5914         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5915         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5916         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5917         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5918         mm1[-1]=mm1_1
5919         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5920         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5921         for i in range(1,10):
5922             mm1.setFamilyId("F%d"%i,i)
5923         mm1.setFamilyId("FAMILLE_ZERO",0)
5924         mm1.setFamilyId("H1",100)
5925         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5926         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5927         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5928         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5929         ##############
5930         mm2=MEDFileUMesh()
5931         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]"])
5932         mm2.setCoords(da1)
5933         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5934         mm2_0.setCoords(da1)
5935         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5936         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5937         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5938         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5939         mm2[0]=mm2_0
5940         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5941         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5942         #
5943         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5944         mm2_1.setCoords(da1)
5945         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5946         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5947         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5948         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5949         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5950         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5951         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5952         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5953         mm2[-1]=mm2_1
5954         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5955         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5956         for i in range(1,12):
5957             mm2.setFamilyId("G%d"%i,i+30)
5958         mm2.setFamilyId("H1",100)
5959         mm2.setFamilyId("FAMILLE_ZERO",0)
5960         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5961         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5962         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5963         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5964         #
5965         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5966         #######
5967         def CheckMesh(tester,mm):
5968             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]"])
5969             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5970             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])))
5971             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5972             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])))
5973             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5974             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5975             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5976             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5977             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5978             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)]
5979             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5980             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5981             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5982             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5983             pass
5984         CheckMesh(self,mm)
5985         ##
5986         fieldName="zeField"
5987         t1=(2.3,3,5)
5988         t2=(5.6,7,12)
5989         infoc=["dd [W]","eee [kA]"]
5990         ##
5991         fmts1=MEDFileFieldMultiTS()
5992         f1ts1=MEDFileField1TS()
5993         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5994         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5995         arr1.setInfoOnComponents(infoc)
5996         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5997         f1_1.checkConsistencyLight()
5998         f1ts1.setFieldNoProfileSBT(f1_1)
5999         #
6000         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
6001         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
6002         arr2.setInfoOnComponents(infoc)
6003         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
6004         f1_2.checkConsistencyLight()
6005         f1ts1.setFieldNoProfileSBT(f1_2)
6006         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6007         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6008         arr3.setInfoOnComponents(infoc)
6009         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6010         f1_3.checkConsistencyLight()
6011         f1ts1.setFieldNoProfileSBT(f1_3)
6012         fmts1.pushBackTimeStep(f1ts1)
6013         #
6014         f1ts2=f1ts1.deepCopy()
6015         f1ts2.setTime(t2[1],t2[2],t2[0])
6016         f1ts2.getUndergroundDataArray()[:]+=2000
6017         fmts1.pushBackTimeStep(f1ts2)
6018         ### fmts2
6019         fmts2=MEDFileFieldMultiTS()
6020         f1ts3=MEDFileField1TS()
6021         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6022         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6023         arr4.setInfoOnComponents(infoc)
6024         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6025         f2_1.checkConsistencyLight()
6026         f1ts3.setFieldNoProfileSBT(f2_1)
6027         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6028         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6029         arr5.setInfoOnComponents(infoc)
6030         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6031         f2_2.checkConsistencyLight()
6032         f1ts3.setFieldNoProfileSBT(f2_2)
6033         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6034         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6035         arr6.setInfoOnComponents(infoc)
6036         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6037         f2_3.checkConsistencyLight()
6038         f1ts3.setFieldNoProfileSBT(f2_3)
6039         fmts2.pushBackTimeStep(f1ts3)
6040         #
6041         f1ts4=f1ts3.deepCopy()
6042         f1ts4.setTime(t2[1],t2[2],t2[0])
6043         f1ts4.getUndergroundDataArray()[:]+=2000
6044         fmts2.pushBackTimeStep(f1ts4)
6045         #
6046         mfd1=MEDFileData()
6047         mfd1.setMeshes(MEDFileMeshes())
6048         mfd1.getMeshes().pushMesh(mm1)
6049         mfd1.setFields(MEDFileFields())
6050         mfd1.getFields().pushField(fmts1)
6051         #
6052         mfd2=MEDFileData()
6053         mfd2.setMeshes(MEDFileMeshes())
6054         mfd2.getMeshes().pushMesh(mm2)
6055         mfd2.setFields(MEDFileFields())
6056         mfd2.getFields().pushField(fmts2)
6057         # ze Call !
6058         mfd=MEDFileData.Aggregate([mfd1,mfd2])
6059         def CheckMFD(tester,mfd):
6060             tester.assertEqual(len(mfd.getMeshes()),1)
6061             tester.assertEqual(len(mfd.getFields()),1)
6062             CheckMesh(self,mfd.getMeshes()[0])
6063             tester.assertEqual(len(mfd.getFields()[0]),2)
6064             zeF1=mfd.getFields()[0][0]
6065             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6066             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6067             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6068             ref.renumberCells(o2n)
6069             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6070             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6071             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6072             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6073             ref.renumberCells(o2n)
6074             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6075             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6076             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6077             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6078             ref.renumberCells(o2n)
6079             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6080             #
6081             zeF2=mfd.getFields()[0][1]
6082             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6083             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6084             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6085             ref.renumberCells(o2n)
6086             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6087             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6088             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6089             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6090             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6091             ref.renumberCells(o2n)
6092             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6093             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6094             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6095             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6096             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6097             ref.renumberCells(o2n)
6098             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6099             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6100         CheckMFD(self,mfd)
6101         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6102         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6103         CheckMFD(self,mfd)
6104         pass
6105
6106     @WriteInTmpDir
6107     def testAggregateWithGroups(self):
6108         """ Testing MEDFileUMesh::Aggretate when groups are present. """
6109         def generate(grp_name, offset):
6110             coo = DataArrayDouble([0., 1., 2.])
6111             coo += offset
6112             m = MEDCouplingCMesh("toto")
6113             m.setCoords(coo, coo)
6114             m = m.buildUnstructured()
6115             mu = MEDFileUMesh.New()
6116             mu.setMeshAtLevel(0, m)
6117             g = DataArrayInt([0])
6118             g.setName(grp_name)
6119             g2 = DataArrayInt([1])
6120             g2.setName("common")  # make a common group for all meshes being merged
6121             mu.setGroupsAtLevel(0, [g, g2])
6122             return mu
6123
6124         m1 = generate("A", 0.)
6125         m2 = generate("B", 2.)
6126         mm = MEDFileUMesh.Aggregate([m1,m2])
6127
6128         self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6129         self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6130         refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6131         self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6132         self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6133         self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6134         self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6135         self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6136         self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6137
6138         pass
6139
6140     @WriteInTmpDir
6141     def testExtrudedMesh1(self):
6142         fname="Pyfile107.med"
6143         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6144         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6145         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6146         mm=MEDFileUMesh(ex)
6147         mm.write(fname,2)
6148         ex2=mm.convertToExtrudedMesh()
6149         mm2=MEDFileMesh.New(fname)
6150         ex3=mm2.convertToExtrudedMesh()
6151         self.assertTrue(ex.isEqual(ex2,1e-12))
6152         self.assertTrue(ex.isEqual(ex3,1e-12))
6153         pass
6154
6155     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6156     @WriteInTmpDir
6157     def testWriteInto30(self):
6158         fname="Pyfile108.med"
6159         fname2="Pyfile109.med"
6160         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6161         mm=MEDFileUMesh() ; mm[0]=m
6162         mm.setFamilyId("FAMILLE_ZERO",0)
6163         #
6164         mm.write33(fname,2)
6165         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6166         mm2=MEDFileUMesh(fname)
6167         self.assertTrue(mm.isEqual(mm2,1e-12))
6168         #
6169         mm.write(fname2,2)
6170         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
6171         pass
6172
6173     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6174     @WriteInTmpDir
6175     def testPickelizationOfMEDFileObjects1(self):
6176         fname="Pyfile110.med"
6177         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)
6178         m0=MEDCouplingUMesh("Mesh",2)
6179         m0.allocateCells(5)
6180         m0.insertNextCell(NORM_TRI3,[1,4,2])
6181         m0.insertNextCell(NORM_TRI3,[4,5,2])
6182         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6183         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6184         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6185         m0.finishInsertingCells()
6186         m0.setCoords(coo)
6187         m1=MEDCouplingUMesh(m0.getName(),1)
6188         m1.allocateCells(9)
6189         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6190         for i in range(9):
6191             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6192             pass
6193         m1.finishInsertingCells()
6194         m1.setCoords(coo)
6195         #
6196         m=MEDFileUMesh()
6197         m.setMeshAtLevel(0,m0)
6198         m.setMeshAtLevel(-1,m1)
6199         #
6200         dt=3 ; it=2 ; tim=4.5
6201         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6202         fieldNode0.setName("fieldNode0")
6203         fieldNode0.setTime(tim,dt,it)
6204         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6205         arr=DataArrayDouble([10,11,12,13,14])
6206         fieldNode0.setArray(arr)
6207         f0=MEDFileField1TS()
6208         f0.setFieldProfile(fieldNode0,m,0,pfl0)
6209         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6210         fieldNode1.setName("fieldNode1")
6211         fieldNode1.setTime(tim,dt,it)
6212         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6213         arr1=DataArrayDouble([20,21,22,23,24,25,26])
6214         fieldNode1.setArray(arr1)
6215         f1=MEDFileField1TS()
6216         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6217         mfd=MEDFileData()
6218         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6219         mfd.getMeshes().pushMesh(m)
6220         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6221         mfd.getFields().pushField(fmts)
6222         # first start gently
6223         d=mfd.serialize()
6224         mfd2=MEDFileData(d)
6225         self.assertEqual(len(mfd2.getMeshes()),1)
6226         self.assertEqual(len(mfd2.getFields()),1)
6227         self.assertEqual(len(mfd2.getFields()[0]),1)
6228         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6229         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6230         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6231         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6232         # OK now end of joke -> serialization of MEDFileData
6233         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6234         mfd3=pickle.loads(st)
6235         # check of object
6236         self.assertEqual(len(mfd3.getMeshes()),1)
6237         self.assertEqual(len(mfd3.getFields()),1)
6238         self.assertEqual(len(mfd3.getFields()[0]),1)
6239         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6240         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6241         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6242         # serialization of MEDFileFields
6243         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6244         fs4=pickle.loads(st)
6245         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6246         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6247         # serialization of MEDFileFieldMulitTS
6248         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6249         fmts5=pickle.loads(st)
6250         ff5=fmts5[0].field(mfd3.getMeshes()[0])
6251         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6252         # serialization of MEDFileField1TS
6253         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6254         f1ts6=pickle.loads(st)
6255         ff6=f1ts6.field(mfd3.getMeshes()[0])
6256         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6257         # serialization of MEDFileMeshes
6258         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6259         ms7=pickle.loads(st)
6260         self.assertEqual(len(ms7),1)
6261         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6262         pass
6263
6264     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6265     @WriteInTmpDir
6266     def testPickelizationOfMEDFileObjects2(self):
6267         # CMesh
6268         self.internalMEDMesh6() # generates MEDFileMesh5.med file
6269         mm=MEDFileMesh.New("MEDFileMesh5.med")
6270         self.assertTrue(isinstance(mm,MEDFileCMesh))
6271         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6272         mm2=pickle.loads(st)
6273         self.assertTrue(isinstance(mm2,MEDFileCMesh))
6274         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6275         # CurveLinear
6276         self.internalCurveLinearMesh1() # generates Pyfile55.med
6277         mm=MEDFileMesh.New("Pyfile55.med")
6278         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6279         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6280         mm3=pickle.loads(st)
6281         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6282         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6283         self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6284         # MEDFileIntFieldMultiTS
6285         fs4=MEDFileFields("Pyfile63.med")
6286         ms4=MEDFileMeshes("Pyfile63.med")
6287         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6288         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6289         fmts5=pickle.loads(st)
6290         self.assertEqual(len(fs4[0]),len(fmts5))
6291         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6292         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6293         # MEDFileIntField1TS
6294         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6295         f1ts6=pickle.loads(st)
6296         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6297         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6298         # MEDFileParameters
6299         self.internalParameters1()# generates Pyfile56.med
6300         params=MEDFileParameters("Pyfile56.med")
6301         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6302         params7=pickle.loads(st)
6303         self.assertEqual(len(params),len(params7))
6304         for i in range(len(params)):
6305             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6306             pass
6307         pass
6308
6309     @WriteInTmpDir
6310     def testGlobalNumOnNodes1(self):
6311         """Test global number on nodes here. Used by partitionners."""
6312         fname="Pyfile112.med"
6313         arr=DataArrayDouble(5) ; arr.iota()
6314         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6315         m.setName("mesh")
6316         mm=MEDFileUMesh()
6317         mm[0]=m
6318         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6319         d=DataArrayInt([7,8,9,2,0])
6320         dRef=d.deepCopy()
6321         mm.setGlobalNumFieldAtLevel(1,d)
6322         mm.checkConsistency()
6323         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6324         mm.checkConsistency()
6325         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6326         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6327         mm.write(fname,2)
6328         mm2=MEDFileMesh.New(fname)
6329         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6330         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6331         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6332         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6333         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6334         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6335         pass
6336
6337     @WriteInTmpDir
6338     def testPartialReadOfEntities1(self):
6339         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6340         fname="Pyfile113.med"
6341         arr=DataArrayDouble(5) ; arr.iota()
6342         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6343         m.setName("mesh")
6344         mm=MEDFileUMesh()
6345         mm[0]=m
6346         #
6347         fieldName="Field"
6348         ts1=(5.,1,2)
6349         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6350         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6351         f1.setTime(*ts1)
6352         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6353         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6354         f2.setTime(*ts1)
6355         f1ts=MEDFileField1TS()
6356         f1ts.setFieldNoProfileSBT(f1)
6357         f1ts.setFieldNoProfileSBT(f2)
6358         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6359         f1ts_2=f1ts.deepCopy()
6360         f1ts_2.getUndergroundDataArray()[:]+=2
6361         f1ts_2.setTime(3,4,6.)
6362         fmts=MEDFileFieldMultiTS()
6363         fmts.pushBackTimeStep(f1ts)
6364         fmts.pushBackTimeStep(f1ts_2)
6365         #
6366         mm.write(fname,2)
6367         fmts.write(fname,0)
6368         #
6369         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6370         mm=MEDFileMesh.New(fname)
6371         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)
6372         fs.loadArrays()
6373         self.assertEqual(len(fs),1)
6374         fmts=fs[0]
6375         self.assertEqual(len(fmts),2)
6376         ff0=fmts[0] ; ff1=fmts[1]
6377         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6378         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6379         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6380         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6381         pass
6382
6383     @WriteInTmpDir
6384     def testFloat32InMEDFileFieldStar1(self):
6385         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6386         fname="Pyfile114.med"
6387         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6388         f1=f1.convertToFloatField()
6389         m1=f1.getMesh()
6390         mm1=MEDFileUMesh.New()
6391         mm1.setCoords(m1.getCoords())
6392         mm1.setMeshAtLevel(0,m1)
6393         mm1.setName(m1.getName())
6394         mm1.write(fname,2)
6395         ff1=MEDFileFloatField1TS()
6396         ff1.setFieldNoProfileSBT(f1)
6397         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6398         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6399         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6400         ff1.write(fname,0)
6401         a,b=ff1.getUndergroundDataArrayExt()
6402         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6403         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6404         ff2=MEDFileAnyTypeField1TS.New(fname)
6405         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6406         self.assertEqual(ff2.getTime(),[0,1,2.0])
6407         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6408         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6409         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6410         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6411         ff2.setTime(1,2,3.)
6412         c=ff2.getUndergroundDataArray() ; c*=2
6413         ff2.write(fname,0) # 2 time steps in
6414         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6415         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6416         self.assertEqual(len(ffs1),2)
6417         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6418         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6419         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6420         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6421         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6422         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6423         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6424         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6425         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6426         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6427         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6428         for it in ffs1:
6429             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6430             bc+=a.getArray()
6431             pass
6432         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6433         nf1=MEDCouplingFieldFloat(ON_NODES)
6434         nf1.setTime(9.,10,-1)
6435         nf1.setMesh(f1.getMesh())
6436         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6437         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6438         nff1=MEDFileFloatField1TS.New()
6439         nff1.setFieldNoProfileSBT(nf1)
6440         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6441         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6442         nff1.write(fname,0)
6443         #
6444         nf2=MEDCouplingFieldFloat(ON_NODES)
6445         nf2.setTime(19.,20,-11)
6446         nf2.setMesh(f1.getMesh())
6447         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6448         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6449         nff2=MEDFileFloatField1TS.New()
6450         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6451         nff2.setFieldProfile(nf2,mm1,0,npfl)
6452         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6453         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6454         self.assertTrue(b.isEqual(npfl))
6455         self.assertTrue(a.isEqual(narr2,1e-7))
6456         nff2.write(fname,0)
6457         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6458         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6459         self.assertTrue(b.isEqual(npfl))
6460         self.assertTrue(a.isEqual(narr2,1e-7))
6461         #
6462         nf3=MEDCouplingFieldDouble(ON_NODES)
6463         nf3.setName("VectorFieldOnNodesDouble")
6464         nf3.setTime(29.,30,-21)
6465         nf3.setMesh(f1.getMesh())
6466         nf3.setArray(f1.getMesh().getCoords())
6467         nff3=MEDFileField1TS.New()
6468         nff3.setFieldNoProfileSBT(nf3)
6469         nff3.write(fname,0)
6470         fs=MEDFileFields(fname)
6471         self.assertEqual(len(fs),4)
6472         ffs=[it for it in fs]
6473         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6474         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6475         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6476         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6477         #
6478         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6479         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6480         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6481         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6482         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6483         #
6484         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6485         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6486         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6487         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6488         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6489         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6490         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6491         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6492         #
6493         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6494         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6495         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6496         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6497         pass
6498
6499     @WriteInTmpDir
6500     def testPenta18_1(self):
6501         """EDF8478 : Test of read/write of penta18"""
6502         fname="Pyfile115.med"
6503         arr=DataArrayDouble([
6504             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6505             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6506             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6507             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6508             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6509             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6510         m=MEDCouplingUMesh("mesh",3)
6511         m.setCoords(arr)
6512         m.allocateCells(1)
6513         m.insertNextCell(NORM_PENTA18,list(range(18)))
6514         m.checkConsistencyLight()
6515         #
6516         f=MEDCouplingFieldDouble(ON_NODES)
6517         f.setMesh(m)
6518         f.setName("FieldOnPenta18")
6519         f.setArray(DataArrayDouble(list(range(18))))
6520         f.checkConsistencyLight()
6521         #
6522         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6523         #
6524         f2=MEDCouplingFieldDouble(ON_NODES)
6525         f2.setMesh(m)
6526         f2.setName("FieldOnPenta18Sub")
6527         f2.setArray(DataArrayDouble(list(range(18))))
6528         f2.checkConsistencyLight()
6529         WriteField(fname,f2,True)
6530         f3=ReadField(fname)
6531         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6532         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6533         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6534         pass
6535
6536     @WriteInTmpDir
6537     def testFieldsLinearToQuadratic(self):
6538         fname="Pyfile117.med"
6539         arr=DataArrayDouble([0,1])
6540         m=MEDCouplingCMesh();
6541         m.setCoords(arr,arr,arr)
6542         m=m.buildUnstructured()
6543         m2=m.deepCopy()
6544         m2.translate([2,0,0])
6545         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6546         m3.setName("mesh")
6547         mm=MEDFileUMesh()
6548         mm[0]=m3
6549         mmq=mm.linearToQuadratic(0)
6550         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6551         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6552         #
6553         f=MEDCouplingFieldDouble(ON_NODES)
6554         f.setName("field")
6555         f.setMesh(m3)
6556         f.setTime(3.,1,2)
6557         arr=DataArrayDouble(m3.getNumberOfNodes())
6558         arr.iota()
6559         f.setArray(arr)
6560         f1ts=MEDFileField1TS()
6561         f1ts.setFieldNoProfileSBT(f)
6562         fmts=MEDFileFieldMultiTS()
6563         fmts.pushBackTimeStep(f1ts)
6564         f1ts_2=f1ts.deepCopy()
6565         f1ts_2.setTime(3,4,5.)
6566         f1ts_2.getUndergroundDataArray()[:]*=2.
6567         fmts.pushBackTimeStep(f1ts_2)
6568         fs=MEDFileFields()
6569         fs.pushField(fmts)
6570         fs2=fs.linearToQuadratic(mms,mmsq)
6571         self.myTester1(fs2,mmsq[0])
6572         # A small Write/Read and test again
6573         mms.write(fname,2) ; fs.write(fname,0)
6574         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6575         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6576         fs2=fs.linearToQuadratic(mms,mmqs)
6577         self.myTester1(fs2,mmqs[0])
6578         pass
6579
6580     def myTester1(self,fs2,mmq):
6581         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)
6582         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])
6583         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])
6584         fToTest=fs2[0][0].field(mmq)
6585         self.assertEqual(fToTest.getTime(),[3.,1,2])
6586         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6587         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6588         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6589         self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6590         # testing 2nd timestep
6591         fToTest=fs2[0][1].field(mmq)
6592         self.assertEqual(fToTest.getTime(),[5.,3,4])
6593         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6594         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6595         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6596         self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6597         pass
6598
6599     @WriteInTmpDir
6600     def testFieldsLinearToQuadratic2(self):
6601         """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6602         GeneratePyfile18(self)
6603         fname="Pyfile118.med"
6604         arr=DataArrayDouble([0,1])
6605         m=MEDCouplingCMesh();
6606         m.setCoords(arr,arr,arr)
6607         m=m.buildUnstructured()
6608         m2=m.deepCopy()
6609         m2.translate([2,0,0])
6610         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6611         m3.setName("mesh")
6612         # add a point for fun
6613         m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6614         #
6615         mm=MEDFileUMesh()
6616         mm[0]=m3
6617         mmq=mm.linearToQuadratic(0)
6618         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6619         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6620         #
6621         f=MEDCouplingFieldDouble(ON_NODES)
6622         f.setName("field")
6623         f.setMesh(m3)
6624         f.setTime(3.,1,2)
6625         arr=DataArrayDouble(8) ; arr.iota()
6626         arr.iota()
6627         f.setArray(arr)
6628         f1ts=MEDFileField1TS()
6629         pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6630         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6631         f1ts_2=f1ts.deepCopy()
6632         f1ts_2.setTime(3,4,5.)
6633         f1ts_2.getUndergroundDataArray()[:]*=4.
6634         fmts=MEDFileFieldMultiTS()
6635         fmts.pushBackTimeStep(f1ts)
6636         fmts.pushBackTimeStep(f1ts_2)
6637         fs=MEDFileFields()
6638         fs.pushField(fmts)
6639         fs2=fs.linearToQuadratic(mms,mmsq)
6640         mms.write(fname,2) ; fs.write(fname,0)
6641         #
6642         self.myTester2(fs2,mmq)
6643         # Read/write
6644         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6645         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6646         fs2=fs.linearToQuadratic(mms,mmqs)
6647         self.myTester2(fs2,mmq)
6648         ## More vicious add single node 16
6649         mm=MEDFileUMesh()
6650         mm[0]=m3
6651         mmq=mm.linearToQuadratic(0)
6652         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6653         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6654         #
6655         f=MEDCouplingFieldDouble(ON_NODES)
6656         f.setName("field")
6657         f.setMesh(m3)
6658         f.setTime(3.,1,2)
6659         arr=DataArrayDouble(9) ; arr.iota()
6660         arr.iota()
6661         f.setArray(arr)
6662         f1ts=MEDFileField1TS()
6663         pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6664         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6665         fmts=MEDFileFieldMultiTS()
6666         fmts.pushBackTimeStep(f1ts)
6667         fs=MEDFileFields()
6668         fs.pushField(fmts)
6669         fs2=fs.linearToQuadratic(mms,mmsq)
6670         #
6671         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")
6672         f1tsToTest=fs2[0][0]
6673         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])
6674         assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6675         assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6676         assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6677         pass
6678
6679     def myTester2(self,fs2,mmq):
6680         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")
6681         f1tsToTest=fs2[0][0]
6682         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])
6683         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6684         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6685         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6686         fToTest=fs2[0][0].field(mmq)
6687         self.assertEqual(fToTest.getTime(),[3.,1,2])
6688         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6689         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])))
6690         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))
6691         self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6692         # 2nd Time step
6693         f1tsToTest=fs2[0][1]
6694         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6695         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6696         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6697         fToTest=fs2[0][1].field(mmq)
6698         self.assertEqual(fToTest.getTime(),[5.,3,4])
6699         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6700         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])))
6701         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))
6702         self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6703
6704         pass
6705
6706     @WriteInTmpDir
6707     def testSetFieldProfileFlatly1(self):
6708         """ 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
6709         a profile."""
6710         arr=DataArrayDouble(10) ; arr.iota()
6711         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6712         m=m.buildUnstructured()
6713         m2=m.deepCopy()
6714         m2.simplexize(0)
6715         m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6716         m.setName("mesh")
6717         mm=MEDFileUMesh()
6718         mm[0]=m
6719         f=MEDCouplingFieldDouble(ON_CELLS)
6720         f.setMesh(m)
6721         arr=DataArrayDouble(m.getNumberOfCells())
6722         arr.iota()
6723         f.setArray(arr)
6724         f.setName("field")
6725         pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6726         #
6727         refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6728         refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6729         #
6730         f1ts=MEDFileField1TS()
6731         f1ts.setFieldProfile(f,mm,0,pfl)
6732         self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6733         self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6734         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6735         #
6736         f1ts=MEDFileField1TS()
6737         f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6738         self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6739         self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6740         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6741         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6742         self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6743         pass
6744
6745     @WriteInTmpDir
6746     def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6747         """ Here multi level groups are created"""
6748         arr=DataArrayDouble(11) ; arr.iota()
6749         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6750         m=m.buildUnstructured()
6751         m.setName("mesh")
6752         m1=m.buildDescendingConnectivity()[0]
6753         mm=MEDFileUMesh()
6754         mm[0]=m ; mm[-1]=m1
6755         ################
6756         grpName="grp0"
6757         grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6758         grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6759         grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6760         grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6761         ################ ajouter un groupe sur plusieurs niveau
6762         mm.addGroup(0,grp1)
6763         mm.addGroup(-1,grp2)
6764         mm.addGroup(0,grp0_0)
6765         mm.addGroup(-1,grp0_1)
6766         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6767         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6768         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6769         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6770         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6771         self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6772         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6773         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6774         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6775         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6776         mm.removeGroupAtLevel(0,grpName)
6777         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6778         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6779         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6780         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6781         mm.removeGroupAtLevel(-1,grpName)
6782         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6783         self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6784         mm.addGroup(-1,grp0_1)
6785         mm.addGroup(0,grp0_0)
6786         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6787         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6788         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6789         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6790         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6791         pass
6792
6793     @WriteInTmpDir
6794     def testYutaka(self):
6795         """ 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...
6796         Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6797         mn="mesh"
6798         m=MEDCouplingCMesh()
6799         arr=DataArrayDouble(4) ; arr.iota()
6800         m.setCoords(arr,arr,arr)
6801         m=m.buildUnstructured()
6802         m.setName(mn)
6803         #
6804         m=m.buildUnstructured()
6805         m1=m.buildDescendingConnectivity()[0]
6806         #
6807         mm=MEDFileUMesh()
6808         mm[0]=m
6809         mm[-1]=m1
6810         #
6811         grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6812         mm.addGroup(0,grp0)
6813         grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6814         mm.addGroup(0,grp1)
6815         grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6816         mm.addGroup(0,grp2)
6817         grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6818         mm.addGroup(-1,grp3)
6819         self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6820         grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6821         mm.addNodeGroup(grp4)
6822         mm.rearrangeFamilies()
6823         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6824         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6825         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6826         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6827         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6828
6829         for grp in [grp0,grp1,grp2,grp3,grp4]:
6830             self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6831             pass
6832         pass
6833
6834     @WriteInTmpDir
6835     def testContxtMger1TS(self):
6836         fname="Pyfile119.med"
6837         coo=DataArrayDouble(1000) ; coo.iota()
6838         m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6839         m.setName("mesh")
6840         WriteMesh(fname,m,True)
6841         f=MEDCouplingFieldDouble(ON_CELLS)
6842         f.setMesh(m)
6843         f.setName("Field")
6844         arr=DataArrayDouble(m.getNumberOfCells())
6845         f.setArray(arr)
6846         f.checkConsistencyLight()
6847         for i in range(10):
6848             arr[:]=float(i+1)
6849             f.setTime(float(i),i,0)
6850             WriteFieldUsingAlreadyWrittenMesh(fname,f)
6851             pass
6852         #
6853         mm=MEDFileMesh.New(fname)
6854         fmts=MEDFileFieldMultiTS(fname,False)
6855         refSize=fmts.getHeapMemorySize()
6856         for f1ts in fmts:
6857             with f1ts:
6858                 f=f1ts.field(mm)
6859                 pass
6860             pass
6861         self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6862         pass
6863
6864     def testZipFamilies1(self):
6865         """
6866         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6867         """
6868         mname="mesh"
6869         arr=DataArrayDouble(10) ; arr.iota()
6870         m=MEDCouplingCMesh()
6871         m.setCoords(arr,arr)
6872         m=m.buildUnstructured()
6873         m.setName(mname)
6874         #
6875         mm=MEDFileUMesh()
6876         mm[0]=m
6877         for i in range(m.getNumberOfCells()):
6878             d = DataArrayInt([i])
6879             d.setName("grp%d"%i)
6880             mm.addGroup(0,d)
6881             pass
6882
6883         grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6884         grp_all.setName("grp_all")
6885         mm.addGroup(0,grp_all)
6886         for i in range(m.getNumberOfCells()):
6887             mm.removeGroup("grp{}".format(i))
6888             pass
6889         #
6890         mm.zipFamilies() # the method to test
6891         #
6892         self.assertEqual(mm.getGroupsNames(),("grp_all",))
6893         self.assertEqual(len(mm.getFamiliesNames()),1)
6894         self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6895         pass
6896
6897     def testZipFamilies2(self):
6898         """
6899         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6900         """
6901         mname="mesh"
6902         arr=DataArrayDouble(21) ; arr.iota()
6903         m=MEDCouplingCMesh()
6904         m.setCoords(arr)
6905         m=m.buildUnstructured()
6906         m.setName(mname)
6907         #
6908         mm=MEDFileUMesh()
6909         mm[0]=m
6910         # 1 and 3 to be merged
6911         # 2 and 5 to be merged
6912         mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6913         for i in range(1,9):
6914             mm.setFamilyId("Fam_{}".format(i),-i)
6915         mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6916         mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6917         mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6918         #
6919         grp0=DataArrayInt([0,1,3,8,10,19])
6920         grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6921         grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6922         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6923         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6924         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6925         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6926         mm.zipFamilies()
6927         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6928         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6929         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6930         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6931         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6932         pass
6933
6934     def testMeshConvertFromMEDFileGeoType(self):
6935         self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6936
6937     @WriteInTmpDir
6938     def testFieldInt64_0(self):
6939         """
6940         Small basic test with I/O of field in int64.
6941         """
6942         fname="Pyfile120.med"
6943         arr = DataArrayDouble([0,1])
6944         m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6945         f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6946         v = 1234567890123456
6947         f.setArray(DataArrayInt64([v]))
6948         f.setMesh(m)
6949         mm = MEDFileUMesh()
6950         mm[0] = m
6951         f1ts = MEDFileInt64Field1TS()
6952         f1ts.setFieldNoProfileSBT(f)
6953         fmts = MEDFileInt64FieldMultiTS()
6954         fmts.pushBackTimeStep(f1ts)
6955         fs = MEDFileFields()
6956         fs.pushField(fmts)
6957         mm.write(fname,2)
6958         fs.write(fname,0)
6959         #
6960         mm = MEDFileMesh.New(fname)
6961         fs = MEDFileFields(fname)
6962         f = fs[0][0].field(mm)
6963         self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6964         self.assertEqual( f.getArray().getIJ(0,0) , v )
6965
6966     @WriteInTmpDir
6967     def testNonRegUMeshSubParts(self):
6968         """
6969         Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6970         """
6971         fname = "Pyfile121.med"
6972         m0 = MEDCouplingUMesh("mesh",1)
6973         coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6974         m0.setCoords(coords)
6975         m0.allocateCells()
6976         m0.insertNextCell(NORM_SEG2,[1,2])
6977         mm = MEDFileUMesh()
6978         mm[0] = m0
6979         m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6980         m1.setCoords(m0.getCoords())
6981         m1.setNodalConnectivity(DataArrayInt([1,2]))
6982         m1.setName(m0.getName())
6983         mm[-1] = m1
6984         fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6985         mm.zipCoords() # <- This call changes the coords and connectivity
6986         mm.write(fname,2)
6987         #
6988         mm = MEDFileMesh.New(fname)
6989         mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6990         self.assertTrue( m0.isEqual(mm[0],1e-12) )
6991         pass
6992
6993     pass
6994
6995 if __name__ == "__main__":
6996     unittest.main()