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