Salome HOME
Addition of MEDFileJointOneStep.clearCorrespondences method to update joints for...
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (EDF R&D)
21
22 from MEDLoader import *
23 import unittest
24 import platform
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
29
30 import sys
31 if sys.version_info.major < 3:
32     import cPickle as pickle
33 else:
34     import pickle
35
36 class StdOutRedirect(object):
37     def __init__(self,fileName):
38         import os,sys
39         sys.stderr.flush()
40         self.stdoutOld=os.dup(2)
41         self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42         fd2=os.dup2(self.fdOfSinkFile,2)
43         self.origPyVal=sys.stderr
44         class FlushFile(object):
45             def __init__(self,f):
46                 self.f=f
47             def write(self,st):
48                 self.f.write(st)
49                 self.f.flush()
50             def flush(self):
51                 return self.f.flush()
52             def isatty(self):
53                 return self.f.isatty()
54             def close(self):
55                 os.fsync(self.f)
56                 self.f.close();
57         sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
58     def __del__(self):
59         import os,sys
60         sys.stderr.close()
61         sys.stderr=self.origPyVal
62         os.fsync(2)
63         os.dup2(self.stdoutOld,2)
64         os.close(self.stdoutOld)
65
66 class MEDLoaderTest3(unittest.TestCase):
67     @WriteInTmpDir
68     def testMEDMesh1(self):
69         GeneratePyfile18(self)
70         fileName="Pyfile18.med"
71         mname="ExampleOfMultiDimW"
72         medmesh=MEDFileMesh.New(fileName,mname)
73         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75         m1_0=medmesh.getLevel0Mesh(True)
76         m1_1=ReadUMeshFromFile(fileName,mname,0)
77         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78         m2_0=medmesh.getLevelM1Mesh(True)
79         m2_1=ReadUMeshFromFile(fileName,mname,-1)
80         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
81         pass
82
83     @WriteInTmpDir
84     def testMEDMesh2(self):
85         GeneratePyfile10(self)
86         fileName="Pyfile10.med"
87         mname="3DToto"
88         outFileName="MEDFileMesh1.med"
89         medmesh=MEDFileUMesh.New(fileName,mname)
90         self.assertEqual((0,),medmesh.getNonEmptyLevels())
91         m1_0=medmesh.getLevel0Mesh(True)
92         m1_1=ReadUMeshFromFile(fileName,mname,0)
93         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94         g1_0=medmesh.getGroup(0,"mesh2",True)
95         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97         g1_0=medmesh.getGroup(0,"mesh3",True)
98         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102         g1_1.setName(g1_0.getName())
103         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104         g1_0=medmesh.getFamily(0,"Family_-3",True)
105         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109         g1_1.setName(g1_0.getName())
110         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112         medmesh.write(outFileName,2);
113         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117         famn=medmesh.getFamilyNameGivenId(0)
118         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
119         #without renum
120         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
125         pass
126
127     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
128     @WriteInTmpDir
129     def testMEDMesh3(self):
130         outFileName="MEDFileMesh3.med"
131         c=DataArrayDouble.New()
132         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134         c.setValues(coords,9,2)
135         m=MEDCouplingUMesh.New();
136         m.setMeshDimension(2);
137         m.allocateCells(5);
138         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143         m.finishInsertingCells();
144         m.setCoords(c)
145         m.checkConsistencyLight()
146         m1=MEDCouplingUMesh.New();
147         m1.setMeshDimension(1);
148         m1.allocateCells(3);
149         m1.insertNextCell(NORM_SEG2,2,[1,4])
150         m1.insertNextCell(NORM_SEG2,2,[3,6])
151         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152         m1.finishInsertingCells();
153         m1.setCoords(c)
154         m1.checkConsistencyLight()
155         m2=MEDCouplingUMesh.New();
156         m2.setMeshDimension(0);
157         m2.allocateCells(4);
158         m2.insertNextCell(NORM_POINT1,1,[1])
159         m2.insertNextCell(NORM_POINT1,1,[3])
160         m2.insertNextCell(NORM_POINT1,1,[2])
161         m2.insertNextCell(NORM_POINT1,1,[6])
162         m2.finishInsertingCells();
163         m2.setCoords(c)
164         m2.checkConsistencyLight()
165         #
166         mm=MEDFileUMesh.New()
167         self.assertTrue(mm.getUnivNameWrStatus())
168         mm.setName("MyFirstMEDCouplingMEDmesh")
169         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
170         mm.setCoords(c)
171         mm.setMeshAtLevel(-1,m1);
172         mm.setMeshAtLevel(0,m);
173         mm.setMeshAtLevel(-2,m2);
174         # playing with groups
175         g1_2=DataArrayInt.New()
176         g1_2.setValues([1,3],2,1)
177         g1_2.setName("G1")
178         g2_2=DataArrayInt.New()
179         g2_2.setValues([1,2,3],3,1)
180         g2_2.setName("G2")
181         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182         g1_1=DataArrayInt.New()
183         g1_1.setValues([0,1,2],3,1)
184         g1_1.setName("G1")
185         g2_1=DataArrayInt.New()
186         g2_1.setValues([0,2],2,1)
187         g2_1.setName("G2")
188         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189         g1_N=DataArrayInt.New()
190         g1_N.setValues(list(range(8)),8,1)
191         g1_N.setName("G1")
192         g2_N=DataArrayInt.New()
193         g2_N.setValues(list(range(9)),9,1)
194         g2_N.setName("G2")
195         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196         mm.createGroupOnAll(0,"GrpOnAllCell")
197         # check content of mm
198         t=mm.getGroupArr(0,"G1",False)
199         self.assertTrue(g1_2.isEqual(t));
200         t=mm.getGroupArr(0,"G2",False)
201         self.assertTrue(g2_2.isEqual(t));
202         t=mm.getGroupArr(-1,"G1",False)
203         self.assertTrue(g1_1.isEqual(t));
204         t=mm.getGroupArr(-1,"G2",False)
205         self.assertTrue(g2_1.isEqual(t));
206         t=mm.getGroupArr(1,"G1",False)
207         self.assertTrue(g1_N.isEqual(t));
208         t=mm.getGroupArr(1,"G2",False)
209         self.assertTrue(g2_N.isEqual(t));
210         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211         t=mm.getGroupArr(0,"GrpOnAllCell")
212         self.assertTrue(t.getValues()==list(range(5)))
213         #
214         mmCpy=mm.deepCopy()
215         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216         mmCpy.write(outFileName,2);
217         #
218         mm=MEDFileMesh.New(outFileName)
219         #
220         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228         self.assertEqual(3,len(lmm))
229         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
232         #
233         self.assertTrue(mm.getUnivNameWrStatus())
234         self.assertTrue(isinstance(mm.getUnivName(),str))
235         self.assertTrue(len(mm.getUnivName())!=0)
236         mbis=mm.getMeshAtLevel(0)
237         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238         self.assertTrue(m.isEqual(mbis,1e-12));
239         #
240         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
241         pass
242
243     # this test is the testMEDMesh3 except that permutation is dealed here
244     @WriteInTmpDir
245     def testMEDMesh4(self):
246         outFileName="MEDFileMesh4.med"
247         c=DataArrayDouble.New()
248         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250         c.setValues(coords,9,2)
251         c.setInfoOnComponent(0,"abcdef [km]")
252         c.setInfoOnComponent(1,"ghij [MW]")
253         m=MEDCouplingUMesh.New();
254         m.setMeshDimension(2);
255         m.allocateCells(5);
256         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261         m.finishInsertingCells();
262         m.setCoords(c)
263         m.checkConsistencyLight()
264         m1=MEDCouplingUMesh.New();
265         m1.setMeshDimension(1);
266         m1.allocateCells(3);
267         m1.insertNextCell(NORM_SEG2,2,[1,4])
268         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269         m1.insertNextCell(NORM_SEG2,2,[3,6])
270         m1.finishInsertingCells();
271         m1.setCoords(c)
272         m1.checkConsistencyLight()
273         m2=MEDCouplingUMesh.New();
274         m2.setMeshDimension(0);
275         m2.allocateCells(4);
276         m2.insertNextCell(NORM_POINT1,1,[1])
277         m2.insertNextCell(NORM_POINT1,1,[3])
278         m2.insertNextCell(NORM_POINT1,1,[2])
279         m2.insertNextCell(NORM_POINT1,1,[6])
280         m2.finishInsertingCells();
281         m2.setCoords(c)
282         m2.checkConsistencyLight()
283         #
284         mm=MEDFileUMesh.New()
285         mm.setName("My2ndMEDCouplingMEDmesh")
286         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
287         mm.setCoords(c)
288         renumNode=DataArrayInt.New()
289         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290         mm.setRenumFieldArr(1,renumNode)
291         mm.computeRevNum()
292         mm.setMeshAtLevel(-1,m1,True);
293         mm.setMeshAtLevel(0,m,True);
294         mm.setMeshAtLevel(-2,m2,True);
295         mm.removeMeshAtLevel(-2)
296         mm.setMeshAtLevel(-2,m2,True);
297         # playing with groups
298         g1_2=DataArrayInt.New()
299         g1_2.setValues([2,3],2,1)
300         g1_2.setName("G1")
301         g2_2=DataArrayInt.New()
302         g2_2.setValues([2,0,3],3,1)
303         g2_2.setName("G2")
304         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305         g1_1=DataArrayInt.New()
306         g1_1.setValues([0,2,1],3,1)
307         g1_1.setName("G1")
308         g2_1=DataArrayInt.New()
309         g2_1.setValues([0,2],2,1)
310         g2_1.setName("G2")
311         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312         g1_N=DataArrayInt.New()
313         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
314         g1_N.setName("G1")
315         g2_N=DataArrayInt.New()
316         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
317         g2_N.setName("G2")
318         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319         # check content of mm
320         t=mm.getGroupArr(0,"G1",True)
321         self.assertTrue(g1_2.isEqual(t));
322         t=mm.getGroupArr(0,"G2",True)
323         self.assertTrue(g2_2.isEqual(t));
324         t=mm.getGroupArr(-1,"G1",True)
325         self.assertTrue(g1_1.isEqual(t));
326         t=mm.getGroupArr(-1,"G2",True)
327         self.assertTrue(g2_1.isEqual(t));
328         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
329         #
330         mm.write(outFileName,2);
331         mm2=MEDFileMesh.New(outFileName)
332         res=mm.isEqual(mm2,1e-12)
333         self.assertTrue(res[0])
334         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336         mm2.keepFamIdsOnlyOnLevs([3],[-1])
337         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
339             pass
340         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
342         #
343         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346         self.assertTrue(not mm2.existsFamily("Family_-8"))
347         mm2.createGroupOnAll(-1,"GrpOnAllFace")
348         self.assertTrue(mm2.existsFamily("Family_-8"))
349         self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
350         pass
351
352     #testing persistence of retrieved arrays
353     @WriteInTmpDir
354     def testMEDMesh5(self):
355         GeneratePyfile18(self)
356         fileName="Pyfile18.med"
357         mname="ExampleOfMultiDimW"
358         medmesh=MEDFileUMesh.New(fileName,mname)
359         m1_0=medmesh.getLevel0Mesh(True)
360         da1=medmesh.getFamilyFieldAtLevel(0)
361         del medmesh
362         self.assertEqual(20,m1_0.getNumberOfCells())
363         self.assertEqual(20,da1.getNumberOfTuples())
364         pass
365
366     def internalMEDMesh6(self):
367         outFileName="MEDFileMesh5.med"
368         m=MEDFileCMesh.New()
369         m.setTime(-1,-1,2.3)
370         m1=MEDCouplingCMesh.New();
371         da=DataArrayDouble.New()
372         da.setValues([0.,1.,2.],3,1)
373         da.setInfoOnComponent(0,"XX [mm]")
374         m1.setCoordsAt(0,da)
375         da=DataArrayDouble.New()
376         da.setValues([0.,1.2],2,1)
377         da.setInfoOnComponent(0,"YY [km]")
378         m1.setCoordsAt(1,da)
379         da=DataArrayDouble.New()
380         da.setValues([0.,1.3],2,1)
381         da.setInfoOnComponent(0,"ZZ [um]")
382         m1.setCoordsAt(2,da)
383         m.setMesh(m1)
384         self.assertTrue(m[0].isEqual(m1,1e-12))
385         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386         m.setName("myFirstCartMesh")
387         m.setDescription("mmmmpppppppp")
388         m.setTimeValue(2.3)
389         m.setTimeUnit("ms")
390         da=DataArrayInt.New()
391         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392         m.setFamilyFieldArr(1,da)
393         m.setFamilyId("family1",1)
394         da=m.getFamilyArr(1,"family1")
395         expected1=[2,4,9]
396         self.assertEqual(expected1,da.getValues())
397         self.assertTrue(m.getUnivNameWrStatus())
398         m.write(outFileName,2);
399         mm=MEDFileMesh.New(outFileName)
400         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401         self.assertTrue(isinstance(mm,MEDFileCMesh))
402         self.assertTrue(isinstance(mm.getUnivName(),str))
403         self.assertTrue(len(mm.getUnivName())!=0)
404         self.assertTrue(m.isEqual(mm,1e-12)[0])
405         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
406         m2=mm.getMesh()
407         tt=m.getTime()
408         m1.setTime(tt[2],tt[0],tt[1])
409         m1.setName(m.getName())
410         m1.setTimeUnit(m.getTimeUnit())
411         m1.setDescription(m.getDescription())
412         self.assertTrue(m2.isEqual(m1,1e-12));
413
414     @WriteInTmpDir
415     def testMEDMesh6(self):
416         self.internalMEDMesh6()
417         pass
418
419     @WriteInTmpDir
420     def testMEDMesh7(self):
421         fileName="Pyfile24.med"
422         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
423         m=MEDFileUMesh.New()
424         m.setCoords(m2.getCoords())
425         m.setMeshAtLevel(0,m2)
426         m.setMeshAtLevel(-1,m1)
427         m.setMeshAtLevel(-2,m0)
428         m.setFamilyFieldArr(0,f2)
429         m.setFamilyFieldArr(-1,f1)
430         m.setFamilyFieldArr(-2,f0)
431         m.setFamilyFieldArr(1,p)
432         m.setRenumFieldArr(0,n2)
433         m.setRenumFieldArr(-1,n1)
434         m.setRenumFieldArr(-2,n0)
435         nbOfFams=len(fns)
436         for i in range(nbOfFams):
437             m.addFamily(fns[i],fids[i])
438             pass
439         nbOfGrps=len(grpns)
440         for i in range(nbOfGrps):
441             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
442             pass
443         m.setName(m2.getName())
444         m.setDescription(m2.getDescription())
445         #
446         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
455         #
456         m.write(fileName,2)
457         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
458         pass
459
460     def funcToTestDelItem(self,ff):
461         del ff[[0.02,(3,4)]]
462         pass
463
464     #emulation of pointe.med file.
465     @WriteInTmpDir
466     def testMEDField1(self):
467         TestMultiFieldShuffleRW1(self)
468         mm=MEDFileMesh.New("Pyfile17.med")
469         mm.write("Pyfile17_bis.med",2)
470         ff=MEDFileFieldMultiTS("Pyfile17.med")
471         tsExpected=[[1,2],[3,4],[5,6]]
472         self.assertEqual(3,len(ff))
473         for pos,f1ts in enumerate(ff):
474             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475             self.assertEqual(type(f1ts),MEDFileField1TS)
476             pass
477         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478         self.assertEqual([3,4],ff[1].getTime()[:-1])
479         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481         ff.write("Pyfile17_bis.med",0)
482         #
483         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484         self.assertEqual([(1,2),(3,4),(5,6)],ts)
485         self.funcToTestDelItem(ff)
486         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487         self.assertEqual([(1,2)],ts)
488         pass
489
490     #profiles
491     @WriteInTmpDir
492     def testMEDField2(self):
493         GeneratePyfile19(self)
494         mm=MEDFileMesh.New("Pyfile19.med")
495         mm.write("Pyfile19_bis.med",2)
496         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497         ff.write("Pyfile19_bis.med",0)
498         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
499         pass
500
501     #gauss points
502     @WriteInTmpDir
503     def testMEDField3(self):
504         GeneratePyfile13(self)
505         mm=MEDFileMesh.New("Pyfile13.med")
506         mm.write("Pyfile13_bis.med",2)
507         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508         ff.write("Pyfile13_bis.med",0)
509         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516         ff4=MEDFileField1TS.New("Pyfile13.med")
517         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
519         pass
520
521     #gauss NE
522     @WriteInTmpDir
523     def testMEDField4(self):
524         GeneratePyfile14(self)
525         mm=MEDFileMesh.New("Pyfile14.med")
526         mm.write("Pyfile14_bis.med",2)
527         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528         ff.write("Pyfile14_bis.med",0)
529         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
533         pass
534
535     # MEDField get/set on pointe.med
536     @WriteInTmpDir
537     def testMEDField5(self):
538         TestMultiFieldShuffleRW1(self)
539         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540         f=ff.getFieldAtLevel(ON_CELLS,0)
541         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546         # no with renumbering
547         f=ff.getFieldAtLevel(ON_CELLS,0,1)
548         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550         f=ff.getFieldAtLevel(ON_CELLS,0,3)
551         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552         f=ff.getFieldAtLevel(ON_CELLS,0,2)
553         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
556         pass
557
558     # MEDField get/set on profiles nodes
559     @WriteInTmpDir
560     def testMEDField6(self):
561         GeneratePyfile7(self)
562         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563         its=ff.getIterations()
564         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568         GeneratePyfile19(self)
569         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570         its=ff.getIterations()
571         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
576         pass
577
578     # MEDField get/set on profiles cells
579     @WriteInTmpDir
580     def testMEDField7(self):
581         GeneratePyfile12(self)
582         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583         its=ff.getIterations()
584         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
587         pass
588
589     #first test of assignation. No profile and types sorted by type.
590     @WriteInTmpDir
591     def testMEDField8(self):
592         fname="Pyfile25.med"
593         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
594         m1=f1.getMesh()
595         mm1=MEDFileUMesh.New()
596         mm1.setCoords(m1.getCoords())
597         mm1.setMeshAtLevel(0,m1)
598         mm1.setName(m1.getName())
599         mm1.write(fname,2)
600         ff1=MEDFileField1TS.New()
601         ff1.setFieldNoProfileSBT(f1)
602         ff1.write(fname,0)
603         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604         itt,orr,ti=ff1.getTime()
605         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
607         ff1.setTime(3,4,2.3)
608         itt,orr,ti=ff1.getTime()
609         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
610         f1.setTime(5.5,7,8)
611         ff1.copyTimeInfoFrom(f1)
612         itt,orr,ti=ff1.getTime()
613         self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614         da,infos=ff1.getUndergroundDataArrayExt()
615         f2.getArray().setName(da.getName())#da has the same name than f2
616         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
618         #
619         fname="Pyfile26.med"
620         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
621         m1=f1.getMesh()
622         mm1=MEDFileUMesh.New()
623         mm1.setCoords(m1.getCoords())
624         mm1.setMeshAtLevel(0,m1)
625         mm1.setName(m1.getName())
626         mm1.write(fname,2)
627         ff1=MEDFileField1TS.New()
628         ff1.setFieldNoProfileSBT(f1)
629         nv=1456.
630         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
631         ff1.write(fname,0)
632         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634         f1.getArray().setIJ(0,0,nv)
635         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
636         #
637         fname="Pyfile27.med"
638         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
639         m1=f1.getMesh()
640         mm1=MEDFileUMesh.New()
641         mm1.setCoords(m1.getCoords())
642         mm1.setMeshAtLevel(0,m1)
643         mm1.setName(m1.getName())
644         mm1.write(fname,2)
645         ff1=MEDFileField1TS.New()
646         ff1.setFieldNoProfileSBT(f1)
647         ff1.write(fname,0)
648         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650         da,infos=ff1.getUndergroundDataArrayExt()
651         f2.getArray().setName(da.getName())#da has the same name than f2
652         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
654         #
655         fname="Pyfile28.med"
656         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657         f1InvalidCpy=f1.deepCopy()
658         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659         f1InvalidCpy2=f1.deepCopy()
660         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
661         m1=f1.getMesh()
662         mm1=MEDFileUMesh.New()
663         mm1.setCoords(m1.getCoords())
664         mm1.setMeshAtLevel(0,m1)
665         mm1.setName(m1.getName())
666         mm1.write(fname,2)
667         ff1=MEDFileField1TS.New()
668         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671         ff1.setFieldNoProfileSBT(f1)
672         ff1.write(fname,0)
673         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676         sbt=ff2.getFieldSplitedByType2()
677         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680         self.assertEqual(6,loc1.getNumberOfPointsInCells())
681         self.assertEqual(3,loc1.getNumberOfGaussPoints())
682         self.assertEqual(2,loc1.getDimension())
683         da,infos=ff2.getUndergroundDataArrayExt()
684         f2.getArray().setName(da.getName())#da has the same name than f2
685         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686         self.assertEqual(53,da.getNumberOfTuples())
687         self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
688         #
689         pass
690
691     @WriteInTmpDir
692     def testMEDFileData1(self):
693         fname="Pyfile29.med"
694         d=MEDFileData.New()
695         #
696         m1=MEDLoaderDataForTest.build1DMesh_1()
697         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698         mmm1=MEDFileMeshMultiTS.New() ;
699         mmm1.setOneTimeStep(mm1)
700         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
704         d.setMeshes(ms)
705         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706             self.assertEqual(name,mmm.getName())
707             self.assertEqual(type(mmm),MEDFileUMesh)
708             pass
709         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
710         #
711         ff1=MEDFileFieldMultiTS.New()
712         ff21=MEDFileFieldMultiTS.New()
713         ff22=MEDFileFieldMultiTS.New()
714         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715         f1.getArray().setInfoOnComponent(0,"power [kW]")
716         ff1.appendFieldNoProfileSBT(f1)
717         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719         ff21.appendFieldNoProfileSBT(f21)
720         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723         ff22.appendFieldNoProfileSBT(f22)
724         fs=MEDFileFields.New()
725         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726         for name,fmts in zip(["f1","f21","f22"],fs):
727             self.assertEqual(name,fmts.getName())
728             pass
729         d.setFields(fs)
730         #
731         fname2="Pyfile29_2.med"
732         d.write(fname2,2)
733         #
734         d2=MEDFileData.New(fname2)
735         self.assertEqual(2,d2.getNumberOfMeshes())
736         self.assertEqual(3,d2.getNumberOfFields())
737         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741         self.assertTrue(m1.isEqual(m1bis,1e-12))
742         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
747         pass
748
749     @WriteInTmpDir
750     def testMEDField9(self):
751         # first test field profile WR. Full type but with some type missing
752         fname="Pyfile30.med"
753         m1=MEDLoaderDataForTest.build2DMesh_3()
754         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
755         mm1.write(fname,2)
756         ff1=MEDFileField1TS.New()
757         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
761         #
762         ff1.setFieldProfile(f1,mm1,0,da)
763         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
764         ff1=ff1.deepCopy()
765         ff1.write(fname,0)
766         #
767         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769         self.assertTrue(vals.isEqual(d,1e-14))
770         #
771         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773         ff2.deepCpyGlobs(ff3)
774         sbt=ff2.getFieldSplitedByType2()
775         self.assertEqual(3,sbt[0][0])#TRI3
776         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779         self.assertEqual(4,sbt[1][0])#QUAD4
780         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786         self.assertTrue(vals.isEqual(d,1e-14))
787         pass
788
789     @WriteInTmpDir
790     def testMEDField10(self):
791         fname="Pyfile31.med"
792         m1=MEDLoaderDataForTest.build2DMesh_1()
793         m1.renumberCells([0,1,4,2,3,5],False)
794         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
795         mm1.write(fname,2)
796         ff1=MEDFileFieldMultiTS.New()
797         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
801         #
802         ff1.appendFieldProfile(f1,mm1,0,da)
803         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804         ff1.appendFieldProfile(f1,mm1,0,da)
805         ff1=ff1.deepCopy()
806         ff1.write(fname,0)
807         #
808         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810         self.assertTrue(vals.isEqual(e,1e-14))
811         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813         self.assertTrue(vals.isEqual(d,1e-14))
814         #
815         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819         self.assertTrue(vals.isEqual(e,1e-14))
820         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822         self.assertTrue(vals.isEqual(d,1e-14))
823         pass
824
825     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
826     @WriteInTmpDir
827     def testMEDField11(self):
828         fname="Pyfile32.med"
829         m1=MEDLoaderDataForTest.build2DMesh_1()
830         m1.renumberCells([0,1,4,2,3,5],False)
831         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832         mm1.write(fname,2)
833         ff1=MEDFileField1TS.New()
834         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
838         #
839         ff1.setFieldProfile(f1,mm1,0,da)
840         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
841         ff1.write(fname,0)
842         #
843         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845         self.assertTrue(vals.isEqual(d,1e-14))
846         ## #
847         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850         self.assertTrue(vals.isEqual(d,1e-14))
851         pass
852
853     @WriteInTmpDir
854     def testMEDField12(self):
855         fname="Pyfile33.med"
856         m1=MEDLoaderDataForTest.build2DMesh_1()
857         m1.renumberCells([0,1,4,2,3,5],False)
858         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
859         mm1.write(fname,2)
860         ff1=MEDFileFieldMultiTS.New()
861         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
865         #
866         ff1.appendFieldProfile(f1,mm1,0,da)
867         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868         ff1.appendFieldProfile(f1,mm1,0,da)
869         ff1.write(fname,0)
870         #
871         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873         self.assertTrue(vals.isEqual(e,1e-14))
874         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876         self.assertTrue(vals.isEqual(d,1e-14))
877         #
878         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881         self.assertTrue(vals.isEqual(e,1e-14))
882         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884         self.assertTrue(vals.isEqual(d,1e-14))
885         pass
886
887     @WriteInTmpDir
888     def testMEDField13(self):
889         fname="Pyfile34.med"
890         m1=MEDLoaderDataForTest.build2DMesh_1()
891         m1.renumberCells([0,1,4,2,3,5],False)
892         tmp=m1.getName();
893         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
895         mm1.write(fname,2)
896         ff1=MEDFileField1TS.New()
897         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
901         #
902         ff1.setFieldProfile(f1,mm1,0,da)
903         ff1.write(fname,0)
904         #
905         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907         self.assertTrue(vals.isEqual(d,1e-14))
908         #
909         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912         self.assertTrue(vals.isEqual(d,1e-14))
913         pass
914
915     @WriteInTmpDir
916     def testMEDField14(self):
917         fname="Pyfile35.med"
918         m1=MEDLoaderDataForTest.build2DMesh_1()
919         m1.renumberCells([0,1,4,2,3,5],False)
920         tmp=m1.getName();
921         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
923         mm1.write(fname,2)
924         ff1=MEDFileFieldMultiTS.New()
925         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
929         #
930         ff1.appendFieldProfile(f1,mm1,0,da)
931         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932         ff1.appendFieldProfile(f1,mm1,0,da)
933         ff1.write(fname,0)
934         #
935         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937         self.assertTrue(vals.isEqual(d,1e-14))
938         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940         self.assertTrue(vals.isEqual(e,1e-14))
941         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
942         #
943         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946         self.assertTrue(vals.isEqual(d,1e-14))
947         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949         self.assertTrue(vals.isEqual(e,1e-14))
950         pass
951     # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952     # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953     # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
954     @WriteInTmpDir
955     def testMEDField15(self):
956         fname="Pyfile36.med"
957         m0=MEDLoaderDataForTest.build2DMesh_1()
958         m0.renumberCells([0,1,4,2,3,5],False)
959         tmp=m0.getName();
960         m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962         ff1=MEDFileField1TS.New()
963         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
967         #
968         ff1.setFieldProfile(f1,mm1,0,da)
969         m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
970         mm1.write(fname,2)
971         ff1.write(fname,0)
972         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974         self.assertTrue(p1.isIota(5))
975         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
976         pass
977     # Test for getFieldAtTopLevel method
978     @WriteInTmpDir
979     def testMEDField16(self):
980         fname="Pyfile37.med"
981         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
982         m1=f1.getMesh()
983         mm1=MEDFileUMesh.New()
984         mm1.setCoords(m1.getCoords())
985         mm1.setMeshAtLevel(0,m1)
986         mm1.setName(m1.getName())
987         ff1=MEDFileField1TS.New()
988         ff1.setFieldNoProfileSBT(f1)
989         m2=m1.buildDescendingConnectivity()[0]
990         m2.sortCellsInMEDFileFrmt()
991         m2.setName(m1.getName())
992         mm1.setMeshAtLevel(-1,m2)
993         mm1.write(fname,2)
994         f2=m2.getMeasureField(True)
995         dd=DataArrayDouble.New()
996         dd.alloc(f2.getArray().getNumberOfTuples(),3)
997         dd[:,0]=f2.getArray()
998         dd[:,1]=2*f2.getArray()
999         dd[:,2]=3*f2.getArray()
1000         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1001         f2.setArray(dd)
1002         f2.copyTinyStringsFrom(f1)
1003         f2.copyTinyAttrFrom(f1)
1004         ff1.setFieldNoProfileSBT(f2)
1005         ff1.write(fname,0)
1006         # Reading Pyfile37.med
1007         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1014         # More complex
1015         fname="Pyfile38.med"
1016         mm1.write(fname,2)
1017         ff1=MEDFileField1TS.New()
1018         ff1.setFieldNoProfileSBT(f2)
1019         ff1.write(fname,0)
1020         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1023         pass
1024
1025     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1026     @WriteInTmpDir
1027     def testMEDField17(self):
1028         fname="Pyfile39.med"
1029         m1=MEDLoaderDataForTest.build2DMesh_1()
1030         m1.renumberCells([0,1,4,2,3,5],False)
1031         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1032         mm1.write(fname,2)
1033         ffs=MEDFileFields.New()
1034         ff1=MEDFileFieldMultiTS.New()
1035         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1039         #
1040         ff1.appendFieldProfile(f1,mm1,0,da)
1041         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042         ff1.appendFieldProfile(f1,mm1,0,da)
1043         ffs.resize(1)
1044         ffs.setFieldAtPos(0,ff1)
1045         ffs=ffs.deepCopy()
1046         ffs.write(fname,0)
1047         #
1048         ffsr=MEDFileFields.New(fname)
1049         ff3=ffsr.getFieldAtPos(0)
1050         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1052         pass
1053
1054     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1055     @WriteInTmpDir
1056     def testMEDField18(self):
1057         fname="Pyfile40.med"
1058         m1=MEDLoaderDataForTest.build2DMesh_1()
1059         m1.renumberCells([0,1,4,2,3,5],False)
1060         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1061         mm1.write(fname,2)
1062         ffs=MEDFileFields.New()
1063         ff1=MEDFileFieldMultiTS.New()
1064         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1068         #
1069         ff1.appendFieldProfile(f1,mm1,0,da)
1070         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071         ff1.appendFieldProfile(f1,mm1,0,da)
1072         ffs.pushField(ff1)
1073         ffs.write(fname,0)
1074         #
1075         ffsr=MEDFileFields.New(fname)
1076         ff3=ffsr.getFieldAtPos(0)
1077         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1079         pass
1080
1081     @WriteInTmpDir
1082     def testMEDFieldBug1(self):
1083         GeneratePyfile13(self)
1084         fname="Pyfile13.med"
1085         d=MEDFileData.New(fname)
1086         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1087         pass
1088
1089     @WriteInTmpDir
1090     def testMEDMesh8(self):
1091         m=MEDLoaderDataForTest.build1DMesh_1()
1092         m.convertQuadraticCellsToLinear()
1093         mm=MEDFileUMesh.New()
1094         mm.setMeshAtLevel(0,m)
1095         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098         mm.setGroupsAtLevel(0,[g1,g2],False)
1099         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103         mm.assignFamilyNameWithGroupName()
1104         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1108         #
1109         mm=MEDFileUMesh.New()
1110         mm.setMeshAtLevel(0,m)
1111         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123         mm.changeFamilyId(5,6)
1124         g=mm.getGroupArr(0,"g3")
1125         self.assertTrue(g.isEqual(g3));
1126         g=mm.getGroupArr(0,"g2")
1127         self.assertTrue(g.isEqual(g2));
1128         g=mm.getGroupArr(0,"g1")
1129         self.assertTrue(g.isEqual(g1));
1130         pass
1131
1132     # bug detected by gauthier
1133     @WriteInTmpDir
1134     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135         fname="Pyfile41.med"
1136         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1137         m1=f1.getMesh()
1138         mm1=MEDFileUMesh.New()
1139         mm1.setCoords(m1.getCoords())
1140         mm1.setMeshAtLevel(0,m1)
1141         mm1.write(fname,2)
1142         ff1=MEDFileField1TS.New()
1143         ff1.setFieldNoProfileSBT(f1)
1144         ff1.write(fname,0)
1145         # writing mesh1 and field1, now creation of mesh2 and field2
1146         f2=f1.deepCopy()
1147         m2=f2.getMesh()
1148         m2.translate([0.5,0.6,0.7])
1149         m2.setName("3DSurfMesh_2")
1150         f2.getArray()[:]*=2.
1151         f2.setName("VectorFieldOnCells2")
1152         mm2=MEDFileUMesh.New()
1153         mm2.setCoords(m2.getCoords())
1154         mm2.setMeshAtLevel(0,m2)
1155         mm2.write(fname,0)
1156         ff2=MEDFileField1TS.New()
1157         ff2.setFieldNoProfileSBT(f2)
1158         ff2.write(fname,0)
1159         #
1160         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1164         pass
1165
1166     @WriteInTmpDir
1167     def testMEDLoaderMultiLevelCellField1(self):
1168         fname="Pyfile42.med"
1169         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170         m=MEDFileUMesh.New()
1171         m.setCoords(m2.getCoords())
1172         m.setMeshAtLevel(0,m2)
1173         m.setMeshAtLevel(-1,m1)
1174         m.setMeshAtLevel(-2,m0)
1175         m.write(fname,2)
1176         #
1177         FieldName1="Field1"
1178         compNames1=["comp1","comp2","comp3"]
1179         ff1=MEDFileField1TS.New()
1180         da2=DataArrayDouble.New()
1181         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1182         da2.iota(7.)
1183         da2.rearrange(len(compNames1))
1184         da2.setInfoOnComponents(compNames1)
1185         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186         ff1.setFieldNoProfileSBT(f2)
1187         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188         da0=DataArrayDouble.New()
1189         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1190         da0.iota(190.)
1191         da0.rearrange(len(compNames1))
1192         da0.setInfoOnComponents(compNames1)
1193         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194         ff1.setFieldNoProfileSBT(f0)
1195         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196         da1=DataArrayDouble.New()
1197         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1198         da1.iota(90.)
1199         da1.rearrange(len(compNames1))
1200         da1.setInfoOnComponents(compNames1)
1201         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202         ff1.setFieldNoProfileSBT(f1)
1203         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1204         #
1205         ff1.write(fname,0)
1206         #
1207         FieldName2="Field2"
1208         compNames2=["comp11","comp22"]
1209         ff2=MEDFileField1TS.New()
1210         da0=DataArrayDouble.New()
1211         da0.alloc(m0.getNumberOfCells()*2,1)
1212         da0.iota(-190.)
1213         da0.rearrange(2)
1214         da0.setInfoOnComponents(compNames2)
1215         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216         ff2.setFieldNoProfileSBT(f0)
1217         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218         da1=DataArrayDouble.New()
1219         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1220         da1.iota(-90.)
1221         da1.rearrange(len(compNames2))
1222         da1.setInfoOnComponents(compNames2)
1223         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224         ff2.setFieldNoProfileSBT(f1)
1225         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1226         #
1227         ff2.write(fname,0)
1228         #
1229         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1235         pass
1236
1237     @WriteInTmpDir
1238     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239         fname="Pyfile43.med"
1240         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241         m=MEDFileUMesh.New()
1242         m.setMeshAtLevel(0,m2)
1243         m.setMeshAtLevel(-1,m1)
1244         m.setMeshAtLevel(-2,m0)
1245         f=MEDFileField1TS.New()
1246         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247         ff.setName("NodeFieldPfl")
1248         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1249         ff.setArray(arr)
1250         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251         f.setFieldProfile(ff,m,-2,pfl)
1252         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261         expected1=[1.,10.,100.,2.,20.,200.]
1262         nodeCoordsWithValue1=[10.,2.5,0.]
1263         nodeCoordsWithValue2=[10.,3.75,0.]
1264         for i in range(3):
1265             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1267             pass
1268         for i in range(6):
1269             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1270             pass
1271         del tes0
1272         #
1273         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1282         for i in range(6):
1283             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1284             pass
1285         m.write(fname,2)
1286         f.write(fname,0)
1287         #
1288         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289         f=MEDFileField1TS.New()
1290         f.setFieldProfile(ff,m,-2,pfl)
1291         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300         expected2=[2.,20.,200.,1.,10.,100.]
1301         for i in range(3):
1302             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1304             pass
1305         for i in range(6):
1306             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1307             pass
1308         #
1309         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1318         for i in range(6):
1319             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1320             pass
1321         pass
1322
1323     @WriteInTmpDir
1324     def testBuildInnerBoundaryAlongM1Group1(self):
1325         fname="Pyfile44.med"
1326         m=MEDCouplingCMesh.New()
1327         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332         m2.setName(m.getName())
1333         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335         mm=MEDFileUMesh.New()
1336         mm.setMeshAtLevel(0,m)
1337         mm.setMeshAtLevel(-1,m2)
1338         mm.setGroupsAtLevel(-1,[grp,grp2])
1339         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340         mm.setGroupsAtLevel(1,[grpNode])
1341         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1344         #
1345         self.assertEqual(30,mm.getNumberOfNodes())
1346         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1348         #
1349         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350         self.assertEqual([15,16,17],nodes.getValues());
1351         self.assertEqual([7,8,9],cells.getValues());
1352         self.assertEqual([12,13,14],cells2.getValues());
1353         self.assertEqual(33,mm.getNumberOfNodes())
1354         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1365         #
1366         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1371         mm.write(fname,2)
1372         pass
1373
1374     @WriteInTmpDir
1375     def testBuildInnerBoundaryAlongM1Group2(self):
1376         fname="Pyfile45.med"
1377         m=MEDCouplingCMesh.New()
1378         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383         m2.setName(m.getName())
1384         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386         mm=MEDFileUMesh.New()
1387         mm.setMeshAtLevel(0,m)
1388         mm.setMeshAtLevel(-1,m2)
1389         mm.setGroupsAtLevel(-1,[grp,grp2])
1390         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391         mm.setGroupsAtLevel(1,[grpNode])
1392         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393         ref1=[4,9,8,14,15,4,10,9,15,16]
1394         ref2=[4,9,8,14,30,4,10,9,30,16]
1395         #
1396         self.assertEqual(30,mm.getNumberOfNodes())
1397         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1399         #
1400         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401         self.assertEqual([15],nodes.getValues());
1402         self.assertEqual([7,8],cells.getValues());
1403         self.assertEqual([12,13],cells2.getValues());
1404         self.assertEqual(31,mm.getNumberOfNodes())
1405         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1416         #
1417         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1422         mm.write(fname,2)
1423         pass
1424
1425     @WriteInTmpDir
1426     def testBuildInnerBoundaryAlongM1Group3(self):
1427         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428         fname = "Pyfile73.med"
1429         m = MEDCouplingCMesh.New()
1430         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432         m = m.buildUnstructured(); m.setName("simple")
1433         m2 = m.buildDescendingConnectivity()[0]
1434         m2.setName(m.getName())
1435
1436         # A crack in two non connected parts of the mesh:
1437         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1438
1439         mm = MEDFileUMesh.New()
1440         mm.setMeshAtLevel(0,m)
1441         mm.setMeshAtLevel(-1,m2)
1442         mm.setGroupsAtLevel(-1,[grpSeg])
1443         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444         self.assertEqual([1,13],nodes.getValues());
1445         self.assertEqual([0,6],cellsMod.getValues());
1446         self.assertEqual([1,7],cellsNotMod.getValues());
1447         self.assertEqual(17,mm.getNumberOfNodes())
1448         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1456
1457         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1460         #
1461         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1465         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1466         mm.write(fname,2)
1467
1468     @WriteInTmpDir
1469     def testBuildInnerBoundaryAlongM1Group4(self):
1470         """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1471         """
1472         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473                                0.,1., 1.,1., 2.,1., 3.,1.,
1474                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475         conn = [3,0,4,1,  3,1,4,5,
1476                 3,5,9,10, 3,5,10,6,
1477                 3,2,6,7,  3,2,7,3,
1478                 3,4,8,9,  3,4,9,5,
1479                 3,1,5,6,  3,1,6,2,
1480                 3,6,10,11,3,6,11,7]
1481         # Only TRI3:
1482         connI = DataArrayInt()
1483         connI.alloc(13, 1); connI.iota(); connI *= 4
1484         m2 = MEDCouplingUMesh("2D", 2)
1485         m2.setCoords(coo)
1486         m2.setConnectivity(DataArrayInt(conn), connI)
1487         m2.checkConsistency()
1488         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491         mfu = MEDFileUMesh()
1492         mfu.setMeshAtLevel(0, m2)
1493         mfu.setMeshAtLevel(-1, m1)
1494         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495         nNod = m2.getNumberOfNodes()
1496         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497         m2_bis = mfu.getMeshAtLevel(0)
1498         m2_bis.checkConsistency()
1499         m1_bis = mfu.getMeshAtLevel(-1)
1500         m1_bis.checkConsistency()
1501         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504         self.assertEqual([6,7], nodesDup.getValues())
1505         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1512         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1513         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1514         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1515         self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1516         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1517         m_bis0 = mfu.getMeshAtLevel(-1)
1518         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1519         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1520
1521     @WriteInTmpDir
1522     def testBuildInnerBoundary5(self):
1523         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1524         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1525         coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1526         200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1527          200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1528          200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1529          0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1530          200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1531          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1532          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1533          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1534          97.16750463405486, 97.18018457127863], 46, 3)
1535         c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1536          39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1537          21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1538          14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1539          17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1540          24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1541          44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1542          44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1543          29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1544          21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1545          30, 2]
1546         cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1547          190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1548          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1549         m3 = MEDCouplingUMesh("3D", 3)
1550         m3.setCoords(coo)
1551         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1552         m3.checkConsistency()
1553         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1554         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1555         mfu = MEDFileUMesh()
1556         mfu.setMeshAtLevel(0, m3)
1557         mfu.setMeshAtLevel(-1, m2)
1558         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1559         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1560         mfu.setGroupsAtLevel(-1, [grpIds])
1561         nNod = m3.getNumberOfNodes()
1562         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1563         m3_bis = mfu.getMeshAtLevel(0)
1564         m3_bis.checkConsistency()
1565         m2_bis = mfu.getMeshAtLevel(-1)
1566         m2_bis.checkConsistency()
1567         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1568         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1569         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1570         self.assertEqual([3], nodesDup.getValues())
1571         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1572         self.assertEqual(set([22]), set(cells1.getValues()))
1573         self.assertEqual(set([77]), set(cells2.getValues()))
1574         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1575         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1576         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1577         m_bis0 = mfu.getMeshAtLevel(-1)
1578         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1579         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1580         pass
1581
1582     @WriteInTmpDir
1583     def testBuildInnerBoundary6(self):
1584         """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1585         The singular point was wrongly duplicated.
1586         """
1587         coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1588                                 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1589                                 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1590                                 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1591                                 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1592                                 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1593                                 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1594         c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1595               18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1596               28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1597         cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1598         m3 = MEDCouplingUMesh("3D", 3)
1599         m3.setCoords(coo)
1600         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1601         m3.checkConsistency()
1602         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1603         grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1604         mfu = MEDFileUMesh()
1605         mfu.setMeshAtLevel(0, m3)
1606         mfu.setMeshAtLevel(-1, m2)
1607         mfu.setGroupsAtLevel(-1, [grpIds])
1608         nNod = m3.getNumberOfNodes()
1609         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1610         m3_bis = mfu.getMeshAtLevel(0)
1611         m3_bis.checkConsistency()
1612         m2_bis = mfu.getMeshAtLevel(-1)
1613         m2_bis.checkConsistency()
1614         self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1615         self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1616         self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1617         self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1618         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1619         self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1620         self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1621         self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1622         self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1623         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1624         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1625         pass
1626
1627     @WriteInTmpDir
1628     def testBuildInnerBoundary7(self):
1629         """ 3D test where the crack has another funny shape with another singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1630         Once the crack is inserted, the cells on either side of the crack do not necessarily form a connex spread zone. This was not properly handled either. 
1631         """
1632         m3 = MEDCouplingUMesh('box', 3)
1633         coo = DataArrayDouble([(5,17,0),(0,17,0),(0,12,0),(5,12,0),(15,17,0),(15,12,0),(20,12,0),(20,17,0),(20,2,0),(15,2,0),(15,-3,0),(20,-3,0),(5,-3,0),(5,2,0),(0,-3,0),(0,2,0),(5,17,10),(5,17,20),(5,17,30),(5,17,40),(0,17,10),(0,17,20),(0,17,30),(0,17,40),(0,12,10),(0,12,20),(0,12,30),(0,12,40),(5,12,10),(5,12,20),(5,12,30),(5,12,40),(15,17,10),(15,17,20),(15,17,30),(15,17,40),(15,12,10),(15,12,20),(15,12,30),(15,12,40),(20,12,10),(20,12,20),(20,12,30),(20,12,40),(20,17,10),(20,17,20),(20,17,30),(20,17,40),(20,2,10),(20,2,20),(20,2,30),(20,2,40),(15,2,10),(15,2,20),(15,2,30),(15,2,40),(15,-3,10),(15,-3,20),(15,-3,30),(15,-3,40),(20,-3,10),(20,-3,20),(20,-3,30),(20,-3,40),
1634                                (5,-3,10),(5,-3,20),(5,-3,30),(5,-3,40),(5,2,10),(5,2,20),(5,2,30),(5,2,40),(0,-3,10),(0,-3,20),(0,-3,30),(0,-3,40),(0,2,10),(0,2,20),(0,2,30),(0,2,40),(20,8,0),(0,8,0),(20,8,10),(20,8,20),(20,8,30),(20,8,40),(15,8,30),(15,8,40),(5,8,30),(5,8,40),(0,8,10),(0,8,20),(0,8,30),(0,8,40)])
1635         m3.setCoords(coo)
1636         c = DataArrayInt([31, 0, 3, 2, 1, -1, 16, 20, 24, 28, -1, 0, 16, 28, 3, -1, 3, 28, 24, 2, -1, 2, 24, 20, 1, -1, 1, 20, 16, 0, 31, 16, 28, 24, 20, -1, 17, 21, 25, 29, -1, 16, 17, 29, 28, -1, 28, 29, 25, 24, -1, 24, 25, 21, 20, -1, 20, 21, 17, 16, 31, 17, 29, 25, 21, -1, 18, 22, 26, 30, -1, 17, 18, 30, 29, -1, 29, 30, 26, 25, -1, 25, 26, 22, 21, -1, 21, 22, 18, 17, 31, 18, 30, 26, 22, -1, 19, 23, 27, 31, -1, 18, 19, 31, 30, -1, 30, 31, 27, 26, -1, 26, 27, 23, 22, -1, 22, 23, 19, 18, 31, 4, 5, 3, 0, -1, 32, 16, 28, 36, -1, 4, 32, 36, 5, -1, 5, 36, 28, 3, -1, 3, 28, 16, 0, -1, 0, 16, 32, 4, 31, 32, 36, 28, 16, -1, 33, 17, 29, 37, -1, 32, 33, 37,
1637                           36, -1, 36, 37, 29, 28, -1, 28, 29, 17, 16, -1, 16, 17, 33, 32, 31, 33, 37, 29, 17, -1, 34, 18, 30, 38, -1, 33, 34, 38, 37, -1, 37, 38, 30, 29, -1, 29, 30, 18, 17, -1, 17, 18, 34, 33, 31, 34, 38, 30, 18, -1, 35, 19, 31, 39, -1, 34, 35, 39, 38, -1, 38, 39, 31, 30, -1, 30, 31, 19, 18, -1, 18, 19, 35, 34, 31, 6, 5, 4, 7, -1, 40, 44, 32, 36, -1, 6, 40, 36, 5, -1, 5, 36, 32, 4, -1, 4, 32, 44, 7, -1, 7, 44, 40, 6, 31, 40, 36, 32, 44, -1, 41, 45, 33, 37, -1, 40, 41, 37, 36, -1, 36, 37, 33, 32, -1, 32, 33, 45, 44, -1, 44, 45, 41, 40, 31, 41, 37, 33, 45, -1, 42, 46, 34, 38, -1, 41, 42, 38, 37, -1, 37, 38, 34, 33, -1, 33, 34, 46, 45, -1, 45, 46, 42, 41, 31,
1638                           42, 38, 34, 46, -1, 43, 47, 35, 39, -1, 42, 43, 39, 38, -1, 38, 39, 35, 34, -1, 34, 35, 47, 46, -1, 46, 47, 43, 42, 31, 80, 9, 5, 6, -1, 82, 40, 36, 52, -1, 80, 82, 52, 9, -1, 9, 52, 36, 5, -1, 5, 36, 40, 6, -1, 6, 40, 82, 80, 31, 82, 52, 36, 40, -1, 83, 41, 37, 53, -1, 82, 83, 53, 52, -1, 52, 53, 37, 36, -1, 36, 37, 41, 40, -1, 40, 41, 83, 82, 31, 83, 53, 37, 41, -1, 84, 42, 38, 86, -1, 83, 84, 86, 53, -1, 53, 86, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 84, 83, 31, 84, 86, 38, 42, -1, 85, 43, 39, 87, -1, 84, 85, 87, 86, -1, 86, 87, 39, 38, -1, 38, 39, 43, 42, -1, 42, 43, 85, 84, 31, 10, 9, 8, 11, -1, 56, 60, 48, 52, -1, 10, 56, 52, 9, -1, 9, 52,
1639                           48, 8, -1, 8, 48, 60, 11, -1, 11, 60, 56, 10, 31, 56, 52,
1640                           48, 60, -1, 57, 61, 49, 53, -1, 56, 57, 53, 52, -1, 52, 53, 49, 48, -1, 48, 49, 61, 60, -1, 60, 61, 57, 56, 31, 57, 53, 49, 61, -1, 58, 62, 50, 54, -1, 57, 58, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, 61, 62, 58, 57, 31, 58, 54, 50, 62, -1, 59, 63, 51, 55, -1, 58, 59, 55, 54, -1, 54, 55, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 59, 58, 31, 12, 13, 9, 10, -1, 64, 56, 52, 68, -1, 12, 64, 68, 13, -1, 13, 68, 52, 9, -1, 9, 52, 56, 10, -1, 10, 56, 64, 12, 31, 64, 68, 52, 56, -1, 65, 57, 53, 69, -1, 64, 65, 69, 68, -1, 68, 69, 53, 52, -1, 52, 53, 57, 56, -1, 56, 57, 65, 64, 31, 65, 69, 53, 57, -1, 66, 58, 54, 70, -1, 65, 66, 70, 69, -1, 69, 70,
1641                           54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 66, 65, 31, 66, 70, 54, 58, -1, 67, 59, 55, 71, -1, 66, 67, 71, 70, -1, 70, 71, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 67, 66, 31, 14, 15, 13, 12, -1, 72, 64, 68, 76, -1, 14, 72, 76, 15, -1, 15, 76, 68, 13, -1, 13, 68, 64, 12, -1, 12, 64, 72, 14, 31, 72, 76, 68, 64, -1, 73, 65, 69, 77, -1, 72, 73, 77, 76, -1, 76, 77, 69, 68, -1, 68, 69, 65, 64, -1, 64, 65, 73, 72, 31, 73, 77, 69, 65, -1, 74, 66, 70, 78, -1, 73, 74, 78, 77, -1, 77, 78, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 74, 73, 31, 74, 78, 70, 66, -1, 75, 67, 71, 79, -1, 74, 75, 79, 78, -1, 78, 79, 71, 70, -1, 70, 71, 67, 66, -1,
1642                           66, 67, 75, 74, 31, 2, 3, 13, 81, -1, 24, 90, 68, 28, -1, 2, 24, 28, 3, -1, 3, 28, 68, 13, -1, 13, 68, 90, 81, -1, 81, 90, 24, 2, 31, 24, 28, 68, 90, -1, 25, 91, 69, 29, -1, 24, 25, 29, 28, -1, 28, 29, 69, 68, -1, 68, 69, 91, 90, -1, 90, 91, 25, 24, 31, 25, 29, 69, 91, -1, 26, 92, 88, 30, -1, 25, 26, 30, 29, -1, 29, 30, 88, 69, -1, 69, 88, 92, 91, -1, 91, 92, 26, 25, 31, 26, 30, 88, 92, -1, 27, 93, 89, 31, -1, 26, 27, 31, 30, -1, 30, 31, 89, 88, -1, 88, 89, 93, 92, -1, 92, 93, 27, 26, 31, 13, 3, 5, 9, -1, 68, 52, 36, 28, -1, 13, 68, 28, 3, -1, 3, 28, 36, 5, -1, 5, 36, 52, 9, -1, 9, 52, 68, 13, 31, 68, 28, 36, 52, -1, 69, 53, 37, 29, -1, 68, 69, 29,
1643                           28, -1, 28, 29, 37, 36, -1, 36, 37, 53, 52, -1, 52, 53, 69, 68, 31, 69, 29, 37, 53, -1, 88, 86, 38, 30, -1, 69, 88, 30, 29, -1, 29, 30, 38, 37, -1, 37, 38, 86, 53, -1, 53, 86, 88, 69, 31, 88, 30, 38, 86, -1, 89, 87, 39, 31, -1, 88, 89, 31, 30, -1, 30, 31, 39, 38, -1, 38, 39, 87, 86, -1, 86, 87, 89, 88])
1644         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080])
1645         m3.setConnectivity(c, cI)
1646         m3.checkConsistency()
1647         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1648         grpIds = DataArrayInt([2,7,12,17,95,99,103,107,129,133,137,141]); grpIds.setName("group")
1649         mfu = MEDFileUMesh()
1650         mfu.setMeshAtLevel(0, m3)
1651         mfu.setMeshAtLevel(-1, m2)
1652         mfu.setGroupsAtLevel(-1, [grpIds])
1653         nNod = m3.getNumberOfNodes()
1654         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1655         m3_bis = mfu.getMeshAtLevel(0)
1656         m3_bis.checkConsistency()
1657         m2_bis = mfu.getMeshAtLevel(-1)
1658         m2_bis.checkConsistency()
1659         self.assertEqual(nNod+22, mfu.getNumberOfNodes())
1660         self.assertEqual(nNod+22, m3_bis.getNumberOfNodes())
1661         self.assertEqual(nNod+22, m2_bis.getNumberOfNodes())
1662         self.assertEqual([0, 3, 12, 13, 16, 17, 18, 19, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89], nodesDup.getValues())
1663         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1664         self.assertEqual(set([0, 1, 2, 3, 24, 25, 26, 27, 28, 29, 30, 31]), set(cells1.getValues()))
1665         self.assertEqual(set([4, 5, 6, 7, 20, 21, 22, 23, 32, 33, 34, 35]), set(cells2.getValues()))
1666         self.assertEqual([2, 7, 12, 17, 95, 99, 103, 107, 129, 133, 137, 141],mfu.getGroupArr(-1,"group").getValues())
1667         self.assertEqual([151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1668         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1669         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1670         pass
1671
1672     def testBuildInnerBoundary8(self):
1673         """ 3D test where the crack leaves 'naked' cells. If we call a 'close-to-crack cell' a cell which shares a face with the M1 group,
1674          a 'naked cell' is a cell that has some node duplicated, but which do not share any face with a 'close-to-crack cell'. In this case
1675          it is tricky to decide whether this cell should be renumbered or not ...
1676          Warning: on the mesh below some points have already been doubled by a previous cut. 
1677         """
1678         m3 = MEDCouplingUMesh('box', 3)
1679         coo = DataArrayDouble([(0,15,0),(0,5,0),(3,5,0),(5,5,0),(5,15,0),(5,20,0),(0,20,0),(15,20,0),(15,15,0),(20,15,0),(20,20,0),(20,5,0),(15,5,0),(15,0,0),(20,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),
1680         (3,3,0),(0,0,0),(0,3,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(0,5,10),(0,5,20),(0,5,30),(0,5,40),(3,5,10),(3,5,20),(3,5,30),(3,5,40),(5,5,10),(5,5,20),(5,5,30),(5,5,40),(5,15,10),(5,15,20),(5,15,30),
1681         (5,15,40),(5,20,10),(5,20,20),(5,20,30),(5,20,40),(0,20,10),(0,20,20),(0,20,30),(0,20,40),(15,20,10),(15,20,20),(15,20,30),(15,20,40),(15,15,10),(15,15,20),(15,15,30),(15,15,40),(20,15,10),(20,15,20),
1682         (20,15,30),(20,15,40),(20,20,10),(20,20,20),(20,20,30),(20,20,40),(20,5,10),(20,5,20),(20,5,30),(20,5,40),(15,5,10),(15,5,20),(15,5,30),(15,5,40),(15,0,10),(15,0,20),(15,0,30),(15,0,40),(20,0,10),
1683         (20,0,20),(20,0,30),(20,0,40),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,-1.60551e-25,30),(5,-1.60551e-25,40),(5,3,10),(5,3,20),(5,3,30),(5,3,40),(3,0,10),(3,0,20),(3,0,30),(3,0,40),(3,3,10),(3,3,20),
1684         (3,3,30),(3,3,40),(0,0,10),(0,0,20),(0,0,30),(0,0,40),(0,3,10),(0,3,20),(0,3,30),(0,3,40),(0,9,0),(3,9,0),(20,9,0),(0,9,10),(0,9,20),(0,9,30),(0,9,40),(3,9,10),(3,9,20),(3,9,30),(3,9,40),(5,9,30),
1685         (5,9,40),(20,9,10),(20,9,20),(20,9,30),(20,9,40),(15,9,30),(15,9,40),(0,15,0),(20,15,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(5,15,30),(5,15,40),(15,15,30),(15,15,40),(20,15,10),(20,15,20),(20,15,30),
1686         (20,15,40)])
1687         m3.setCoords(coo)
1688         c = DataArrayInt([31, 5, 4, 124, 6, -1, 41, 45, 126, 37, -1, 5, 41, 37, 4, -1, 4, 37, 126, 124, -1, 124, 126, 45, 6, -1, 6, 45, 41, 5, 31, 41, 37, 126, 45, -1, 42, 46, 127, 38, -1, 41, 42, 38, 37, -1, 37, 38, 127, 126, -1, 126, 127, 46, 45, -1, 45, 46, 42, 41, 31, 42, 38, 127, 46, -1, 43, 47, 128, 130, -1, 42, 43, 130, 38, -1, 38, 130, 128, 127, -1, 127, 128, 47, 46, -1, 46, 47, 43, 42, 31, 43, 130, 128, 47,
1689         -1, 44, 48, 129, 131, -1, 43, 44, 131, 130, -1, 130, 131, 129, 128, -1, 128, 129, 48, 47, -1, 47, 48, 44, 43, 31, 7, 8, 4, 5, -1, 49, 41, 37, 53, -1, 7, 49, 53, 8, -1, 8, 53, 37, 4, -1, 4, 37, 41, 5, -1, 5, 41, 49, 7, 31, 49, 53, 37, 41, -1, 50, 42, 38, 54, -1, 49, 50, 54, 53, -1, 53, 54, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 50, 49, 31, 50, 54, 38, 42, -1, 51, 43, 130, 132, -1, 50, 51, 132, 54, -1, 54, 132,
1690         130, 38, -1, 38, 130, 43, 42, -1, 42, 43, 51, 50, 31, 51, 132, 130, 43, -1, 52, 44, 131, 133, -1, 51, 52, 133, 132, -1, 132, 133, 131, 130, -1, 130, 131, 44, 43, -1, 43, 44, 52, 51, 31, 125, 8, 7, 10, -1, 134, 61, 49, 53, -1, 125, 134, 53, 8, -1, 8, 53, 49, 7, -1, 7, 49, 61, 10, -1, 10, 61, 134, 125, 31, 134, 53, 49, 61, -1, 135, 62, 50, 54, -1, 134, 135, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1,
1691         61, 62, 135, 134, 31, 135, 54, 50, 62, -1, 136, 63, 51, 132, -1, 135, 136, 132, 54, -1, 54, 132, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 136, 135, 31, 136, 132, 51, 63, -1, 137, 64, 52, 133, -1, 136, 137, 133, 132, -1, 132, 133, 52, 51, -1, 51, 52, 64, 63, -1, 63, 64, 137, 136, 31, 107, 12, 8, 9, -1, 118, 57, 53, 69, -1, 107, 118, 69, 12, -1, 12, 69, 53, 8, -1, 8, 53, 57, 9, -1, 9, 57, 118, 107, 31, 118, 69,
1692         53, 57, -1, 119, 58, 54, 70, -1, 118, 119, 70, 69, -1, 69, 70, 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 119, 118, 31, 119, 70, 54, 58, -1, 120, 59, 55, 122, -1, 119, 120, 122, 70, -1, 70, 122, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 120, 119, 31, 120, 122, 55, 59, -1, 121, 60, 56, 123, -1, 120, 121, 123, 122, -1, 122, 123, 56, 55, -1, 55, 56, 60, 59, -1, 59, 60, 121, 120, 31, 13, 12, 11, 14, -1, 73, 77, 65, 69,
1693         -1, 13, 73, 69, 12, -1, 12, 69, 65, 11, -1, 11, 65, 77, 14, -1, 14, 77, 73, 13, 31, 73, 69, 65, 77, -1, 74, 78, 66, 70, -1, 73, 74, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 78, 77, -1, 77, 78, 74, 73, 31, 74, 70, 66, 78, -1, 75, 79, 67, 71, -1, 74, 75, 71, 70, -1, 70, 71, 67, 66, -1, 66, 67, 79, 78, -1, 78, 79, 75, 74, 31, 75, 71, 67, 79, -1, 76, 80, 68, 72, -1, 75, 76, 72, 71, -1, 71, 72, 68, 67, -1, 67, 68, 80,
1694         79, -1, 79, 80, 76, 75, 31, 17, 18, 16, 15, -1, 89, 81, 85, 93, -1, 17, 89, 93, 18, -1, 18, 93, 85, 16, -1, 16, 85, 81, 15, -1, 15, 81, 89, 17, 31, 89, 93, 85, 81, -1, 90, 82, 86, 94, -1, 89, 90, 94, 93, -1, 93, 94, 86, 85, -1, 85, 86, 82, 81, -1, 81, 82, 90, 89, 31, 90, 94, 86, 82, -1, 91, 83, 87, 95, -1, 90, 91, 95, 94, -1, 94, 95, 87, 86, -1, 86, 87, 83, 82, -1, 82, 83, 91, 90, 31, 91, 95, 87, 83, -1, 92, 84,
1695         88, 96, -1, 91, 92, 96, 95, -1, 95, 96, 88, 87, -1, 87, 88, 84, 83, -1, 83, 84, 92, 91, 31, 19, 20, 18, 17, -1, 97, 89, 93, 101, -1, 19, 97, 101, 20, -1, 20, 101, 93, 18, -1, 18, 93, 89, 17, -1, 17, 89, 97, 19, 31, 97, 101, 93, 89, -1, 98, 90, 94, 102, -1, 97, 98, 102, 101, -1, 101, 102, 94, 93, -1, 93, 94, 90, 89, -1, 89, 90, 98, 97, 31, 98, 102, 94, 90, -1, 99, 91, 95, 103, -1, 98, 99, 103, 102, -1, 102, 103,
1696         95, 94, -1, 94, 95, 91, 90, -1, 90, 91, 99, 98, 31, 99, 103, 95, 91, -1, 100, 92, 96, 104, -1, 99, 100, 104, 103, -1, 103, 104, 96, 95, -1, 95, 96, 92, 91, -1, 91, 92, 100, 99, 31, 1, 2, 18, 20, -1, 25, 101, 93, 29, -1, 1, 25, 29, 2, -1, 2, 29, 93, 18, -1, 18, 93, 101, 20, -1, 20, 101, 25, 1, 31, 25, 29, 93, 101, -1, 26, 102, 94, 30, -1, 25, 26, 30, 29, -1, 29, 30, 94, 93, -1, 93, 94, 102, 101, -1, 101, 102,
1697         26, 25, 31, 26, 30, 94, 102, -1, 27, 103, 95, 31, -1, 26, 27, 31, 30, -1, 30, 31, 95, 94, -1, 94, 95, 103, 102, -1, 102, 103, 27, 26, 31, 27, 31, 95, 103, -1, 28, 104, 96, 32, -1, 27, 28, 32, 31, -1, 31, 32, 96, 95, -1, 95, 96, 104, 103, -1, 103, 104, 28, 27, 31, 3, 4, 8, 12, -1, 33, 69, 53, 37, -1, 3, 33, 37, 4, -1, 4, 37, 53, 8, -1, 8, 53, 69, 12, -1, 12, 69, 33, 3, 31, 33, 37, 53, 69, -1, 34, 70, 54, 38, -1,
1698         33, 34, 38, 37, -1, 37, 38, 54, 53, -1, 53, 54, 70, 69, -1, 69, 70, 34, 33, 31, 34, 38, 54, 70, -1, 116, 122, 55, 39, -1, 34, 116, 39, 38, -1, 38, 39, 55, 54, -1, 54, 55, 122, 70, -1, 70, 122, 116, 34, 31, 116, 39, 55, 122, -1, 117, 123, 56, 40, -1, 116, 117, 40, 39, -1, 39, 40, 56, 55, -1, 55, 56, 123, 122, -1, 122, 123, 117, 116, 31, 16, 18, 2, 3, -1, 85, 33, 29, 93, -1, 16, 85, 93, 18, -1, 18, 93, 29, 2,
1699         -1, 2, 29, 33, 3, -1, 3, 33, 85, 16, 31, 85, 93, 29, 33, -1, 86, 34, 30, 94, -1, 85, 86, 94, 93, -1, 93, 94, 30, 29, -1, 29, 30, 34, 33, -1, 33, 34, 86, 85, 31, 86, 94, 30, 34, -1, 87, 35, 31, 95, -1, 86, 87, 95, 94, -1, 94, 95, 31, 30, -1, 30, 31, 35, 34, -1, 34, 35, 87, 86, 31, 87, 95, 31, 35, -1, 88, 36, 32, 96, -1, 87, 88, 96, 95, -1, 95, 96, 32, 31, -1, 31, 32, 36, 35, -1, 35, 36, 88, 87, 31, 4, 3, 106,
1700         105, 0, -1, 37, 21, 108, 112, 33, -1, 3, 4, 37, 33, -1, 106, 3, 33, 112, -1, 105, 106, 112, 108, -1, 0, 105, 108, 21, -1, 4, 0, 21, 37, 31, 37, 33, 112, 108, 21, -1, 38, 22, 109, 113, 34, -1, 33, 37, 38, 34, -1, 112, 33, 34, 113, -1, 108, 112, 113, 109, -1, 21, 108, 109, 22, -1, 37, 21, 22, 38, 31, 38, 34, 113, 109, 22, -1, 39, 23, 110, 114, 116, -1, 34, 38, 39, 116, -1, 113, 34, 116, 114, -1, 109, 113, 114, 110,
1701         -1, 22, 109, 110, 23, -1, 38, 22, 23, 39, 31, 39, 116, 114, 110, 23, -1, 40, 24, 111, 115, 117, -1, 116, 39, 40, 117, -1, 114, 116, 117, 115, -1, 110, 114, 115, 111, -1, 23, 110, 111, 24, -1, 39, 23, 24, 40, 31, 16, 3, 12, 13, 15, -1, 85, 81, 73, 69, 33, -1, 3, 16, 85, 33, -1, 12, 3, 33, 69, -1, 13, 12, 69, 73, -1, 15, 13, 73, 81, -1, 16, 15, 81, 85, 31, 85, 33, 69, 73, 81, -1, 86, 82, 74, 70, 34, -1, 33, 85,
1702         86, 34, -1, 69, 33, 34, 70, -1, 73, 69, 70, 74, -1, 81, 73, 74, 82, -1, 85, 81, 82, 86, 31, 86, 34, 70, 74, 82, -1, 87, 83, 75, 71, 35, -1, 34, 86, 87, 35, -1, 70, 34, 35, 71, -1, 74, 70, 71, 75, -1, 82, 74, 75, 83, -1, 86, 82, 83, 87, 31, 87, 35, 71, 75, 83, -1, 88, 84, 76, 72, 36, -1, 35, 87, 88, 36, -1, 71, 35, 36, 72, -1, 75, 71, 72, 76, -1, 83, 75, 76, 84, -1, 87, 83, 84, 88])
1703         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080, 1110, 1140, 1170, 1200, 1237, 1274, 1311, 1348, 1385, 1422, 1459, 1496])
1704         m3.setConnectivity(c, cI)
1705         m3.checkConsistency()
1706         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1707         grpIds = DataArrayInt([2,7,12,17,101,106,111,116,160,164,170,173,176,179]); grpIds.setName("group")
1708         mfu = MEDFileUMesh()
1709         mfu.setMeshAtLevel(0, m3)
1710         mfu.setMeshAtLevel(-1, m2)
1711         mfu.setGroupsAtLevel(-1, [grpIds])
1712         nNod = m3.getNumberOfNodes()
1713         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1714         m3_bis = mfu.getMeshAtLevel(0)
1715         m3_bis.checkConsistency()
1716         m2_bis = mfu.getMeshAtLevel(-1)
1717         m2_bis.checkConsistency()
1718         self.assertEqual(nNod+23, mfu.getNumberOfNodes())
1719         self.assertEqual(nNod+23, m3_bis.getNumberOfNodes())
1720         self.assertEqual(nNod+23, m2_bis.getNumberOfNodes())
1721         self.assertEqual([5, 15, 16, 35, 36, 39, 40, 41, 42, 43, 44, 81, 82, 83, 84, 85, 86, 87, 88, 116, 117, 130, 131], nodesDup.getValues())
1722         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1723         self.assertEqual(set([0, 1, 2, 3, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39]), set(cells1.getValues()))
1724         self.assertEqual(set([4, 5, 6, 7, 42, 43, 44, 45, 46, 47]), set(cells2.getValues()))
1725         self.assertEqual([2, 7, 12, 17, 101, 106, 111, 116, 160, 164, 170, 173, 176, 179],mfu.getGroupArr(-1,"group").getValues())
1726         self.assertEqual([212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1727         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1728         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1729         pass
1730
1731     @WriteInTmpDir
1732     def testBasicConstructors(self):
1733         GeneratePyfile18(self)
1734         fname="Pyfile18.med"
1735         TestWriteUMeshesRW1(self)
1736         m=MEDFileMesh.New(fname)
1737         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1738         m=MEDFileMesh.New(fname)
1739         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1740         m=MEDFileUMesh(fname)
1741         m=MEDFileUMesh()
1742         self.internalMEDMesh6()
1743         m=MEDFileCMesh("MEDFileMesh5.med")
1744         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1745         m=MEDFileCMesh()
1746         m=MEDFileMeshMultiTS()
1747         m=MEDFileMeshMultiTS(fname)
1748         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1749         m=MEDFileMeshes()
1750         m=MEDFileMeshes(fname)
1751         m=MEDFileField1TS()
1752         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1753         m=MEDFileFieldMultiTS()
1754         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1755         m=MEDFileFields()
1756         m=MEDFileFields(fname)
1757         m=MEDFileData()
1758         m=MEDFileData(fname)
1759         #
1760         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1761         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1762         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1763         m=MEDCouplingCMesh()
1764         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1765         m=MEDCouplingFieldTemplate(ON_NODES)
1766         m=MEDCouplingMultiFields([])
1767         m=MEDCouplingFieldOverTime([])
1768         pass
1769
1770     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1771     @WriteInTmpDir
1772     def testBugSemiPartialField(self):
1773         fname="Pyfile46.med"
1774         m=MEDLoaderDataForTest.build2DMesh_3()
1775         m=m[:10] ; m.setName("mesh")
1776         f=m.getMeasureField(False)
1777         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1778         f.setTime(5.5,3,4)
1779         f.setName("SemiPartialField")
1780         #
1781         f1=f[:6] ; f1.getMesh().setName(m.getName())
1782         f2=f[6:] ; f2.getMesh().setName(m.getName())
1783         #
1784         mm=MEDFileUMesh.New()
1785         mm.setMeshAtLevel(0,m)
1786         ff=MEDFileField1TS.New()
1787         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1788         mm.write(fname,2)
1789         ff.write(fname,0)
1790         #
1791         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1792         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1793         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1794         #
1795         fread.checkConsistencyLight()
1796         fread2.checkConsistencyLight()
1797         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1798         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1799         pass
1800
1801     @WriteInTmpDir
1802     def testUnPolyze1(self):
1803         fname="Pyfile47.med"
1804         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1805         ref=[13,14,14,12,12,12,12,12,12,12,12,13,12,14,14,13,15,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
1806         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1807         self.assertEqual(mm.unPolyze()[:3],(True,[[3,2,0],[4,3,2],[5,4,5],[14,2,9],[16,3,11],[31,2,14]],[[3,3,0],[4,3,3],[5,3,6],[14,3,9],[16,3,12],[18,1,15]]))
1808         mm.write(fname,2)
1809         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1810         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1811         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1812         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1813         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1814         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1815         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1816         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1817         # to test
1818         mm.setRenumFieldArr(0,None)
1819         mm.setFamilyFieldArr(-1,None)
1820         pass
1821
1822     @WriteInTmpDir
1823     def testUnPolyze2(self):
1824         fname="Pyfile48.med"
1825         mfd=MEDFileData.New()
1826         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1827         meshes=MEDFileMeshes.New()
1828         meshes.pushMesh(mm)
1829         mfd.setMeshes(meshes)
1830         fields=MEDFileFields.New()
1831         mfd.setFields(fields)
1832         ff=MEDFileFieldMultiTS.New()
1833         fields.pushField(ff)
1834         #
1835         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1836         f0_0.setTime(9.5,3,4)
1837         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1838         f0_0.setArray(da)
1839         f0_0.setMesh(mm.getMeshAtLevel(0))
1840         ff.appendFieldNoProfileSBT(f0_0)
1841         ff0=ff.getTimeStepAtPos(0)
1842         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1843         f0_1.setTime(9.5,3,4)
1844         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1845         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1846         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1847         f0_1.setArray(da)
1848         ff0.setFieldProfile(f0_1,mm,0,pfl)
1849         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1850         f0_2.setTime(9.5,3,4)
1851         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1852         da=DataArrayDouble.New([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.],8,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])#provoquer error
1853         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1854         f0_2.setArray(da)
1855         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1856         mfd.getFields().shallowCpyGlobs(ff0)
1857         #
1858         mfd.unPolyzeMeshes()
1859         #
1860         fmts=mfd.getFields()[0]
1861         self.assertEqual(fmts.getNumberOfTS(),1)
1862         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1863         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1864         self.assertEqual(entry,[((3,0),(38,40)),((4,0),(40,43)),((5,0),(43,46)),((14,0),(46,48)),((16,0),(48,49)),((18,0),(49,50)),((40,0),(0,38))])
1865         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1866         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1867         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1868         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1869         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1870         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1871         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1872         self.assertEqual([(3,[(0,(38,40),'NewPfl_0','')]),(4,[(0,(40,43),'','')]),(5,[(0,(43,46),'','')]),(14,[(0,(46,48),'NewPfl_1','')]),(16,[(0,(48,49),'NewPfl_2','')]),(18,[(0,(49,50),'','')]),(40,[(1,(0,38),'','')])],fmts.getFieldSplitedByType(3,4))
1873         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1874         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1875         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1876         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1877         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1878         self.assertEqual(ftest0.getMesh().getNodalConnectivity().getValues(),[14,4,5,6,7,14,26,27,28,29,16,20,21,22,23,24,25,18,30,31,32,33,34,35,36,37])
1879         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1880         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1881         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1882         self.assertEqual(ftest1.getMesh().getNodalConnectivity().getValues(),[3,0,1,2,3,3,4,5,4,6,7,8,9,4,10,11,12,13,4,14,15,16,17,5,18,19,20,21,22,5,23,24,25,26,27,5,31,32,33,34,35,36,37])
1883         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1884         #
1885         mfd.write(fname,2)
1886         pass
1887
1888     @WriteInTmpDir
1889     def testGaussWriteOnPfl1(self):
1890         fname="Pyfile49.med"
1891         fname2="Pyfile50.med"
1892         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1893         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1894         mQ8.allocateCells(1)
1895         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1896         mQ8.finishInsertingCells()
1897         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1898         mQ4.allocateCells(1)
1899         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1900         mQ4.finishInsertingCells()
1901         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1902         mT3.allocateCells(1)
1903         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1904         mT3.finishInsertingCells()
1905
1906         tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]]
1907         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1908         ms[:]=(elt.deepCopy() for elt in ms)
1909         for m,t in zip(ms,tr):
1910             d=m.getCoords() ; d+= t
1911             pass
1912         m=MEDCouplingUMesh.MergeUMeshes(ms)
1913         m.setName("mesh")
1914         m2=m[:13] ; m2.setName(m.getName())
1915         ### Use case 1 : Pfl on all tri3 and on all quad4. If we were on CELLS or GAUSS_NE no pfl were needed. But here 2 discs in tri3.
1916         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1917         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1918         f.setMesh(m2)
1919         f.setTime(4.5,1,2)
1920         da=DataArrayDouble(34) ; da.iota(3.)
1921         f.setArray(da)
1922         f.setName("fieldCellOnPflWithoutPfl")
1923         fInvalid=f.deepCopy()
1924         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1925         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1926         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1927         f.checkConsistencyLight()
1928         fInvalid2=fInvalid.deepCopy()
1929         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1930         #
1931         mm=MEDFileUMesh()
1932         mm.setMeshAtLevel(0,m)
1933         mm.write(fname,2)
1934         #
1935         f1ts=MEDFileField1TS.New()
1936         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1937         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1938         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1939         f1ts.setFieldProfile(f,mm,0,pfl)
1940         f1ts.write(fname,0)
1941         #
1942         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1943         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1944         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1945         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1946         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1947         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1948         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1949         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1950         #
1951         dataRead=MEDFileData.New(fname)
1952         mRead=dataRead.getMeshes()[0]
1953         f1tsRead=dataRead.getFields()[0][0]
1954         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1955         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1956         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1957         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1958         f2_bis.checkConsistencyLight()
1959         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1960         #
1961         WriteField(fname2,f,True)
1962         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1963         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1964         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1965         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1966         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1967         m2=m[pfl] ; m2.setName(m.getName())
1968         f.setMesh(m2)
1969         f.setTime(4.5,1,2)
1970         da=DataArrayDouble(35) ; da.iota(3.)
1971         f.setArray(da)
1972         f.setName("fieldCellOnPflWithoutPfl2")
1973         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1974         f.setGaussLocalizationOnCells([2,4,5],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1975         f.setGaussLocalizationOnCells([6,7,8,9],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1976         f.checkConsistencyLight()
1977         #
1978         mm=MEDFileUMesh()
1979         mm.setMeshAtLevel(0,m)
1980         mm.write(fname,2)
1981         f1ts=MEDFileField1TS.New()
1982         f1ts.setFieldProfile(f,mm,0,pfl)
1983         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1984         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1985         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1986         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1987         f1ts.write(fname,0)
1988         dataRead=MEDFileData.New(fname)
1989         mRead=dataRead.getMeshes()[0]
1990         f1tsRead=dataRead.getFields()[0][0]
1991         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1992         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1993         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1994         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1995         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1996         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1997         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1998         #
1999         WriteField(fname2,f,True)
2000         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2001         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2002         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2003         ## Use case 3 : no pfl but creation of pfls due to gauss pts
2004         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2005         f.setMesh(m)
2006         f.setTime(4.5,1,2)
2007         da=DataArrayDouble(60) ; da.iota(3.)
2008         f.setArray(da)
2009         f.setName("fieldCellWithoutPfl")
2010         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
2011         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
2012         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
2013         f.setGaussLocalizationOnCells([13,14,15,17,18],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8],[0.8,0.1,0.03,0.07])
2014         f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1])
2015         f.checkConsistencyLight()
2016         mm=MEDFileUMesh()
2017         mm.setMeshAtLevel(0,m)
2018         f1ts=MEDFileField1TS.New()
2019         f1ts.setFieldNoProfileSBT(f)
2020         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2021         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2022         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2023         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2024         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2025         mm.write(fname,2)
2026         f1ts.write(fname,0)
2027         #
2028         dataRead=MEDFileData.New(fname)
2029         mRead=dataRead.getMeshes()[0]
2030         f1tsRead=dataRead.getFields()[0][0]
2031         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2032         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2033         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2034         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2035         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2036         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2037         #
2038         WriteField(fname2,f,True)
2039         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2040         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2041         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2042         pass
2043
2044     # Testing profile on nodes when the profile is identity but not on all nodes.
2045     @WriteInTmpDir
2046     def testMEDFieldPflOnNode1(self):
2047         fname="Pyfile51.med"
2048         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
2049         m0=MEDCouplingUMesh("Mesh",2)
2050         m0.allocateCells(5)
2051         m0.insertNextCell(NORM_TRI3,[1,4,2])
2052         m0.insertNextCell(NORM_TRI3,[4,5,2])
2053         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2054         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2055         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2056         m0.finishInsertingCells()
2057         m0.setCoords(coo)
2058         m1=MEDCouplingUMesh(m0.getName(),1)
2059         m1.allocateCells(9)
2060         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2061         for i in range(9):
2062             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2063             pass
2064         m1.finishInsertingCells()
2065         m1.setCoords(coo)
2066         #
2067         m=MEDFileUMesh()
2068         m.setMeshAtLevel(0,m0)
2069         m.setMeshAtLevel(-1,m1)
2070         #
2071         dt=3 ; it=2 ; tim=4.5
2072         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2073         fieldNode0.setName("fieldNode0")
2074         fieldNode0.setTime(tim,dt,it)
2075         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2076         arr=DataArrayDouble([10,11,12,13,14])
2077         fieldNode0.setArray(arr)
2078         f0=MEDFileField1TS()
2079         f0.setFieldProfile(fieldNode0,m,0,pfl0)
2080         m.write(fname,2) ; f0.write(fname,0)
2081         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2082         fieldNode1.setName("fieldNode1")
2083         fieldNode1.setTime(tim,dt,it)
2084         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2085         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2086         fieldNode1.setArray(arr1)
2087         f1=MEDFileField1TS()
2088         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2089         f1.write(fname,0)
2090         del m,f0,m0,m1,f1
2091         ## Reading from file
2092         m=MEDFileMesh.New(fname)
2093         m0=m.getMeshAtLevel(0)
2094         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2095         fieldNode0.setMesh(m00)
2096         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2097         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2098         ff0_1.checkConsistencyLight()
2099         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2100         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2101         ff0_2.checkConsistencyLight()
2102         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2103         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2104         ff0_3.checkConsistencyLight()
2105         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2106         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2107         ff0_4.checkConsistencyLight()
2108         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2109         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2110         m1=m.getMeshAtLevel(-1)
2111         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2112         fieldNode1.setMesh(m10)
2113         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2114         ff1_1.checkConsistencyLight()
2115         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2116         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2117         ff1_2.checkConsistencyLight()
2118         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2119         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2120         ff1_3.checkConsistencyLight()
2121         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2122         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2123         ff1_4.checkConsistencyLight()
2124         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2125         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,m0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2126         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_NODES,0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2127         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,0,m) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2128         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2129         arr_r.setName(fieldNode1.getArray().getName())
2130         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2131         pfl1_r.setName(pfl1.getName())
2132         self.assertTrue(pfl1_r.isEqual(pfl1))
2133         pass
2134
2135         # Testing profile on nodes when the profile is identity but not on all nodes.
2136     @WriteInTmpDir
2137     def testMEDFieldPflOnCell1(self):
2138         fname="Pyfile52.med"
2139         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
2140         m0=MEDCouplingUMesh("Mesh",2)
2141         m0.allocateCells(5)
2142         m0.insertNextCell(NORM_TRI3,[1,4,2])
2143         m0.insertNextCell(NORM_TRI3,[4,5,2])
2144         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2145         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2146         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2147         m0.finishInsertingCells()
2148         m0.setCoords(coo)
2149         m1=MEDCouplingUMesh(m0.getName(),1)
2150         m1.allocateCells(9)
2151         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2152         for i in range(9):
2153             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2154             pass
2155         m1.finishInsertingCells()
2156         m1.setCoords(coo)
2157         #
2158         m=MEDFileUMesh()
2159         m.setMeshAtLevel(0,m0)
2160         m.setMeshAtLevel(-1,m1)
2161         #
2162         dt=3 ; it=2 ; tim=4.5
2163         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2164         fieldCell0.setName("fieldCell0")
2165         fieldCell0.setTime(tim,dt,it)
2166         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2167         arr=DataArrayDouble([10,11,12])
2168         fieldCell0.setArray(arr)
2169         f0=MEDFileField1TS()
2170         f0.setFieldProfile(fieldCell0,m,0,pfl0)
2171         m.write(fname,2) ; f0.write(fname,0)
2172         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2173         fieldCell1.setName("fieldCell1")
2174         fieldCell1.setTime(tim,dt,it)
2175         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2176         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2177         fieldCell1.setArray(arr1)
2178         f1=MEDFileField1TS()
2179         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2180         f1.write(fname,0)
2181         del m,f0,m0,m1,f1
2182         ## Reading from file
2183         m=MEDFileMesh.New(fname)
2184         m0=m.getMeshAtLevel(0)
2185         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2186         fieldCell0.setMesh(m00)
2187         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2188         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2189         ff0_1.checkConsistencyLight()
2190         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2191         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2192         ff0_2.checkConsistencyLight()
2193         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2194         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2195         ff0_3.checkConsistencyLight()
2196         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2197         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2198         ff0_4.checkConsistencyLight()
2199         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2200         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2201         m1=m.getMeshAtLevel(-1)
2202         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2203         fieldCell1.setMesh(m10)
2204         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2205         ff1_1.checkConsistencyLight()
2206         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2207         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2208         ff1_2.checkConsistencyLight()
2209         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2210         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2211         ff1_3.checkConsistencyLight()
2212         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2213         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2214         ff1_4.checkConsistencyLight()
2215         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2216         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,m0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2217         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_CELLS,0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2218         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,0,m) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2219         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2220         arr_r.setName(fieldCell1.getArray().getName())
2221         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2222         pfl1_r.setName(pfl1.getName())
2223         self.assertTrue(pfl1_r.isEqual(pfl1))
2224         pass
2225
2226     @WriteInTmpDir
2227     def testMEDFileUMeshZipCoords1(self):
2228         m=MEDFileUMesh()
2229         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2230         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2231         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2232         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2233         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2234         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2235         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2236         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2237         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2238         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2239         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2240         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2241         o2n=m.zipCoords()
2242         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2243         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2244         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2245         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2246         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2247         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2248         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2249         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2250         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2251         pass
2252
2253     @WriteInTmpDir
2254     def testMEDUMeshAddNodeGroup1(self):
2255         fname="Pyfile53.med"
2256         m=MEDFileUMesh()
2257         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2258         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2259         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2260         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2261         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2262         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2263         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2264         #
2265         mm=m.deepCopy()
2266         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2267         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2268         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2269         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2270         mm.setFamilyId("MyFam",2)
2271         mm.setFamilyId("MyOtherFam",3)
2272         mm.setFamilyId("MyOther-1",-1)
2273         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2274         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2275         #
2276         self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2277         #
2278         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2279         mm.addNodeGroup(daTest)
2280         self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2281         self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2282         #
2283         expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2284         self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2285         #
2286         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2287         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2288         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2289             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2290             pass
2291         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2292         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2293         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2294         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2295         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2296             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2297             pass
2298         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2299         da=DataArrayInt([3,12]) ; da.setName("grp0")
2300         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2301         da.setValues([1])
2302         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2303         mm.write(fname,2)
2304         mm=MEDFileMesh.New(fname)
2305         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2306         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2307         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2308             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2309             pass
2310         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2311         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2312         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2313         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2314         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2315             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2316             pass
2317         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2318         da=DataArrayInt([3,12]) ; da.setName("grp0")
2319         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2320         da.setValues([1])
2321         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2322         pass
2323
2324     @WriteInTmpDir
2325     def testMEDUMeshAddGroup1(self):
2326         fname="Pyfile54.med"
2327         m=MEDFileUMesh()
2328         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2329         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2330         for i in range(7):
2331             m0.insertNextCell(NORM_TRI3,[1,2,1])
2332             pass
2333         for i in range(4):
2334             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2335             pass
2336         for i in range(2):
2337             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2338             pass
2339         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2340         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2341         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2342         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2343         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2344         #
2345         mm=m.deepCopy()
2346         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2347         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2348         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2349         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2350         mm.setFamilyId("MyFam",2)
2351         mm.setFamilyId("MyOtherFam",3)
2352         mm.setFamilyId("MyOther-1",-1)
2353         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2354         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2355         #
2356         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2357         mm.addGroup(0,daTest)
2358         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2359         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2360         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2361             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2362             pass
2363         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2364         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2365         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2366         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2367         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2368             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2369             pass
2370         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2371         da=DataArrayInt([3,12]) ; da.setName("grp0")
2372         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2373         da.setValues([1])
2374         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2375         mm.write(fname,2)
2376         mm=MEDFileMesh.New(fname)
2377         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2378         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2379         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2380             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2381             pass
2382         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2383         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2384         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2385         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2386         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2387             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2388             pass
2389         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2390         da=DataArrayInt([3,12]) ; da.setName("grp0")
2391         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2392         da.setValues([1])
2393         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2394         pass
2395
2396     @WriteInTmpDir
2397     def testHeapMem1(self):
2398         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2399         a.alloc(0,1)
2400         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2401         #
2402         m=MEDCouplingCMesh()
2403         arr=DataArrayDouble(10,1) ; arr.iota(0)
2404         m.setCoords(arr,arr)
2405         m=m.buildUnstructured()
2406         m.setName("mm")
2407         f=m.getMeasureField(False)
2408         cooMem = 100 * 2 * 8
2409         nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2410         indexMem = 82 * MEDCouplingSizeOfIDs()//8
2411         meshMem = cooMem + nodalMem + indexMem
2412         self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2413         delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2414         self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2415         #
2416         mm=MEDFileUMesh()
2417         mm.setMeshAtLevel(0,m)
2418         self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2419         ff=MEDFileField1TS()
2420         ff.setFieldNoProfileSBT(f)
2421         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2422         #
2423         fff=MEDFileFieldMultiTS()
2424         fff.appendFieldNoProfileSBT(f)
2425         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2426         f.setTime(1.,0,-1)
2427         fff.appendFieldNoProfileSBT(f)
2428         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2429         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2430         f2=f[:50]
2431         f2.setTime(2.,1,-1)
2432         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2433         fff.appendFieldProfile(f2,mm,0,pfl)
2434         self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2435         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2436         self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8))  + 30 + 4 * strMulFac))
2437         pass
2438
2439     def internalCurveLinearMesh1(self):
2440         fname="Pyfile55.med"
2441         mesh=MEDCouplingCurveLinearMesh();
2442         mesh.setTime(2.3,4,5);
2443         mesh.setTimeUnit("us");
2444         mesh.setName("Example of Cuve linear mesh");
2445         mesh.setDescription("buildCLMesh");
2446         a1=DataArrayDouble(3*20,1);
2447         a1.iota(7.) ; a1.rearrange(3);
2448         mesh.setCoords(a1);
2449         mesh.setNodeGridStructure([4,5]);
2450         mesh.checkConsistencyLight();
2451         #
2452         m=MEDFileCurveLinearMesh()
2453         m.setMesh(mesh)
2454         d=DataArrayInt(20) ; d.iota(4)
2455         m.setFamilyFieldArr(1,d)
2456         d3=DataArrayInt(20) ; d3.iota(400)
2457         m.setRenumFieldArr(1,d3)
2458         d2=DataArrayInt(12) ; d2.iota(40)
2459         m.setFamilyFieldArr(0,d2)
2460         d4=DataArrayInt(21) ; d4.iota(4000)
2461         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2462         d4.popBackSilent()
2463         m.setRenumFieldArr(1,d4)
2464         m.write(fname,2)
2465         #
2466         m1=MEDFileCurveLinearMesh(fname)
2467         mm=m1.getMesh()
2468         self.assertTrue(mm.isEqual(mesh,1e-12))
2469         self.assertEqual(mm.getSpaceDimension(),3)
2470         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2471         #
2472         m1=MEDFileMesh.New(fname)
2473         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2474         self.assertTrue(isinstance(m1.getUnivName(),str))
2475         self.assertTrue(len(m1.getUnivName())!=0)
2476         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2477         pass
2478
2479     @WriteInTmpDir
2480     def testCurveLinearMesh1(self):
2481         self.internalCurveLinearMesh1()
2482
2483     @WriteInTmpDir
2484     def testParameters1(self):
2485         self.internalParameters1()
2486
2487     def internalParameters1(self):
2488         fname="Pyfile56.med"
2489         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2490         mm=MEDFileCMesh() ; mm.setMesh(m)
2491         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2492         data=MEDFileData()
2493         p=MEDFileParameters()
2494         data.setParams(p) ; data.setMeshes(ms)
2495         pts=MEDFileParameterMultiTS()
2496         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2497         pts.appendValue(1,2,3.4,567.89)
2498         pts.appendValue(2,3,5.6,999.123)
2499         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2500         p.pushParam(pts) ; p.pushParam(pts2)
2501         data.write(fname,2)
2502         p2=MEDFileParameters(fname)
2503         self.assertTrue(p.isEqual(p2,1e-14)[0])
2504         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2505         p3=p.deepCopy()
2506         pts4=pts2.deepCopy()
2507         pts3=pts2.deepCopy()
2508         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2509         pts2.eraseTimeStepIds([0])
2510         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2511         del pts3[[3.4]]
2512         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2513         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2514         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2515         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2516         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2517         p=p3
2518         self.assertTrue(p.isEqual(p2,1e-14)[0])
2519         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2520         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2521         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2522         self.assertEqual(p.getParamsNames(),('A','B'))
2523         ptsr=MEDFileParameterMultiTS(fname,"B")
2524         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2525         ptsr=MEDFileParameterMultiTS(fname)
2526         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2527         p1tsr=MEDFileParameterDouble1TS(fname)
2528         self.assertEqual(p1tsr.getName(),"A")
2529         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2530         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2531         self.assertEqual(p1tsr.getName(),"B")
2532         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2533         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2534         self.assertEqual(p1tsr.getName(),"B")
2535         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2536         data2=MEDFileData(fname)
2537         self.assertEqual(2,data2.getNumberOfParams())
2538         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2539         pass
2540
2541     @WriteInTmpDir
2542     def testNamesOnCellAndNodesInMeshes1(self):
2543         fname="Pyfile58.med"
2544         fname2="Pyfile59.med"
2545         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2546         m1=m.buildDescendingConnectivity()[0]
2547         m1.sortCellsInMEDFileFrmt()
2548         #
2549         mm=MEDFileUMesh()
2550         mm.setMeshAtLevel(0,m)
2551         mm.setMeshAtLevel(-1,m1)
2552         namesCellL0=DataArrayAsciiChar(6,16)
2553         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2554         mm.setNameFieldAtLevel(0,namesCellL0)
2555         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2556         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2557         mm.setNameFieldAtLevel(-1,namesCellL1)
2558         namesNodes=namesCellL1.subArray(4,16)
2559         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2560         mm.setNameFieldAtLevel(1,namesNodes)
2561         mm.write(fname,2)
2562         #
2563         mmr=MEDFileMesh.New(fname)
2564         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2565         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2566         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2567         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2568         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2569         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2570         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2571         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2572         mmCpy=mm.deepCopy()
2573         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2574         # remove names on nodes
2575         mmCpy.setNameFieldAtLevel(1,None)
2576         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2577         mm.setNameFieldAtLevel(1,None)
2578         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2579         mm.setNameFieldAtLevel(-1,None)
2580         mm.write(fname,2)
2581         mmr=MEDFileMesh.New(fname)
2582         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2583         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2584         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2585         #
2586         c=MEDCouplingCMesh()
2587         arr=DataArrayDouble([0.,1.1,2.3])
2588         c.setCoords(arr,arr)
2589         c.setName("cmesh")
2590         cc=MEDFileCMesh()
2591         cc.setMesh(c)
2592         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2593         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2594         cc.write(fname2,2)
2595         ccr=MEDFileMesh.New(fname2)
2596         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2597         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2598         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2599         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2600         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2601         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2602         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2603         ccCpy=cc.deepCopy()
2604         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2605         pass
2606
2607     @WriteInTmpDir
2608     def testToExportInExamples1(self):
2609         m=MEDCouplingCMesh()
2610         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2611         m.setCoords(arr,arr)
2612         m=m.buildUnstructured() ; m.setName("mesh")
2613         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2614         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2615         m2=m.computeSkin()
2616         mm=MEDFileUMesh()
2617         mm.setMeshAtLevel(0,m)
2618         mm.setMeshAtLevel(-1,m2)
2619         mm.setGroupsAtLevel(0,[grp1,grp2])
2620         mm.write("example.med",2)
2621         #
2622         m0=mm.getMeshAtLevel(0)
2623         m1=mm.getMeshAtLevel(-1)
2624         grp1=mm.getGroupArr(0,"grp1")
2625         grp2=mm.getGroupArr(0,"grp2")
2626         grps=[grp1,grp2]
2627         whichGrp=DataArrayInt(m0.getNumberOfCells())
2628         whichGrp.fillWithValue(-1)
2629         for grpId,grp in enumerate(grps):
2630             whichGrp[grp]=grpId
2631             pass
2632         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2633         e,f=a.areCellsIncludedIn(m1,2)
2634         self.assertTrue(e)
2635         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2636         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2637         c2.transformWithIndArr(whichGrp)
2638         splitOfM1=len(grps)*[None]
2639         for grpId,grp in enumerate(grps):
2640             tmp=c2.findIdsEqual(grpId)
2641             splitOfM1[grpId]=tmp
2642             pass
2643         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2644         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2645         pass
2646
2647     @WriteInTmpDir
2648     def testBugCorrection1(self):
2649         fs=MEDFileFields()
2650         fs.resize(3)
2651         self.assertEqual(fs[0],None)
2652         self.assertEqual(3,len(fs))
2653         pass
2654
2655     @WriteInTmpDir
2656     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2657         f1Name="Pyfile60.med"
2658         f2Name="Pyfile61.med"
2659         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2660         d1.write(f1Name,2)
2661         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2662         d2.write(f2Name,2)
2663         # reading and compare
2664         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2665         for mn in d1.getMeshes().getMeshesNames():
2666             m1=d1.getMeshes()[mn]
2667             m2=d2.getMeshes()[mn]
2668             for lev in m1.getNonEmptyLevels():
2669                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2670                 for grpName in grpsNames:
2671                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2672                     pass
2673                 pass
2674             pass
2675         for fieldn in d1.getFields().getFieldsNames():
2676             f1=d1.getFields()[fieldn]
2677             f2=d2.getFields()[fieldn]
2678             for it,order,tim in f1.getTimeSteps():
2679                 f1t=f1[it,order]
2680                 f2t=f2[it,order]
2681                 if len(f1t.getPflsReallyUsed())!=0:
2682                     # profile case
2683                     for lev in f1t.getNonEmptyLevels()[1]:
2684                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2685                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2686                         self.assertTrue(pfl1.isEqual(pfl2))
2687                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2688                         pass
2689                     pass
2690                 else:
2691                     # no profile case
2692                     for lev in f1t.getNonEmptyLevels()[1]:
2693                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2694                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2695                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2696                         pass
2697                     pass
2698                 pass
2699             pass
2700         pass
2701
2702     @WriteInTmpDir
2703     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2704         m=MEDCouplingCMesh()
2705         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2706         m.setCoords(arr,arr,arr)
2707         m=m.buildUnstructured()
2708         m2=m.buildDescendingConnectivity()[0]
2709         m.setName("mesh")
2710         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2711         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2712         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2713         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2714         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2715         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2716         mm=MEDFileUMesh()
2717         mm.setMeshAtLevel(0,m)
2718         mm.setGroupsAtLevel(0,[g1,g2])
2719         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2720         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2721         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2722         mm.normalizeFamIdsMEDFile()
2723         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2724         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2725         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2726         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2727         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2728         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2729         for g in mm.getGroupsOnSpecifiedLev(0):
2730             for f in mm.getFamiliesIdsOnGroup(g):
2731                 self.assertTrue(f<0)
2732                 pass
2733             pass
2734         #
2735         mm=MEDFileUMesh()
2736         mm.setMeshAtLevel(0,m)
2737         mm.setMeshAtLevel(-1,m2)
2738         mm.setGroupsAtLevel(0,[g1,g2])
2739         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2740         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2741         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2742         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2743         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2744         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2745         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2746         mm.normalizeFamIdsMEDFile()
2747         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2748         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2749         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2750         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2751         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2752         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2753         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2754         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2755         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2756         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2757         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2758         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2759         for lev in [0,-1]:
2760             for g in mm.getGroupsOnSpecifiedLev(lev):
2761                 for f in mm.getFamiliesIdsOnGroup(g):
2762                     self.assertTrue(f<0)
2763                     pass
2764                 pass
2765             pass
2766          #
2767         mm=MEDFileUMesh()
2768         mm.setMeshAtLevel(0,m)
2769         mm.setMeshAtLevel(-1,m2)
2770         mm.setGroupsAtLevel(0,[g1,g2])
2771         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2772         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2773         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2774         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2775         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2776         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2777         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2778         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2779         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2780         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2781         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2782         mm.normalizeFamIdsMEDFile()
2783         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2784         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2785         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2786         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2787         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2788         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2789         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2790         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2791         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2792         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2793         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2794         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2795         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2796         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2797         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2798         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2799         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2800         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2801         for lev in [0,-1]:
2802             for g in mm.getGroupsOnSpecifiedLev(lev):
2803                 for f in mm.getFamiliesIdsOnGroup(g):
2804                     self.assertTrue(f<0)
2805                     pass
2806                 pass
2807             pass
2808         for g in mm.getGroupsOnSpecifiedLev(1):
2809             for f in mm.getFamiliesIdsOnGroup(g):
2810                 self.assertTrue(f>0)
2811                 pass
2812             pass
2813         pass
2814
2815     @WriteInTmpDir
2816     def testNonRegressionMantis22212ChangeGrpName(self):
2817         fileName="Pyfile62.med"
2818         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2819         m=MEDFileUMesh.New()
2820         m.setCoords(m2.getCoords())
2821         m.setMeshAtLevel(0,m2)
2822         m.setMeshAtLevel(-1,m1)
2823         m.setMeshAtLevel(-2,m0)
2824         m.setFamilyFieldArr(0,f2)
2825         m.setFamilyFieldArr(-1,f1)
2826         m.setFamilyFieldArr(-2,f0)
2827         m.setFamilyFieldArr(1,p)
2828         nbOfFams=len(fns)
2829         for i in range(nbOfFams):
2830             m.addFamily(fns[i],fids[i])
2831             pass
2832         nbOfGrps=len(grpns)
2833         for i in range(nbOfGrps):
2834             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2835             pass
2836         m.setName(m2.getName())
2837         m.setDescription(m2.getDescription())
2838         m.write(fileName,2)
2839         #
2840         mm0=MEDFileMesh.New(fileName)
2841         mm1=MEDFileMesh.New(fileName)
2842         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2843         for name in groupNamesIni:
2844             mm1.changeGroupName(name,name+'N')
2845             pass
2846         mm1.write(fileName,2)
2847         del mm1
2848         #
2849         mm2=MEDFileMesh.New(fileName)
2850         for name in groupNamesIni:
2851             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2852                 arr0=mm0.getGroupArr(lev,name)
2853                 arr2=mm2.getGroupArr(lev,name+'N')
2854                 arr0.setName(name+'N')
2855                 self.assertTrue(arr0.isEqual(arr2))
2856                 pass
2857             pass
2858         pass
2859
2860     @WriteInTmpDir
2861     def testInt32InMEDFileFieldStar1(self):
2862         self.internalInt32InMEDFileFieldStar1()
2863
2864     def internalInt32InMEDFileFieldStar1(self):
2865         fname="Pyfile63.med"
2866         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2867         f1=f1.convertToIntField()
2868         m1=f1.getMesh()
2869         mm1=MEDFileUMesh.New()
2870         mm1.setCoords(m1.getCoords())
2871         mm1.setMeshAtLevel(0,m1)
2872         mm1.setName(m1.getName())
2873         mm1.write(fname,2)
2874         ff1=MEDFileIntField1TS()
2875         ff1.setFieldNoProfileSBT(f1)
2876         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2877         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2878         self.assertTrue(a.isEqual(f1,1e-12,0))
2879         ff1.write(fname,0)
2880         a,b=ff1.getUndergroundDataArrayExt()
2881         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2882         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2883         ff2=MEDFileAnyTypeField1TS.New(fname)
2884         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2885         self.assertEqual(ff2.getTime(),[0,1,2.0])
2886         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2887         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2888         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2889         self.assertTrue(a.isEqual(f1,1e-12,0))
2890         ff2.setTime(1,2,3.)
2891         c=ff2.getUndergroundDataArray() ; c*=2
2892         ff2.write(fname,0) # 2 time steps in
2893         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2894         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2895         self.assertEqual(len(ffs1),2)
2896         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2897         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2898         self.assertTrue(a.isEqual(f1,1e-12,0))
2899         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2900         self.assertTrue(a.isEqual(f1,1e-12,0))
2901         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2902         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2903         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2904         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2905         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2906         bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2907         for it in ffs1:
2908             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2909             bc+=a.getArray()
2910             pass
2911         self.assertTrue(bc.isEqual(3*f1.getArray()))
2912         nf1=MEDCouplingFieldInt(ON_NODES)
2913         nf1.setTime(9.,10,-1)
2914         nf1.setMesh(f1.getMesh())
2915         narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2916         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2917         nff1=MEDFileIntField1TS.New()
2918         nff1.setFieldNoProfileSBT(nf1)
2919         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2920         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2921         nff1.write(fname,0)
2922         #
2923         nf2=MEDCouplingFieldInt(ON_NODES)
2924         nf2.setTime(19.,20,-11)
2925         nf2.setMesh(f1.getMesh())
2926         narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2927         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2928         nff2=MEDFileIntField1TS.New()
2929         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2930         nff2.setFieldProfile(nf2,mm1,0,npfl)
2931         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2932         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2933         self.assertTrue(b.isEqual(npfl))
2934         self.assertTrue(a.isEqual(narr2))
2935         nff2.write(fname,0)
2936         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2937         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2938         self.assertTrue(b.isEqual(npfl))
2939         self.assertTrue(a.isEqual(narr2))
2940         #
2941         nf3=MEDCouplingFieldDouble(ON_NODES)
2942         nf3.setName("VectorFieldOnNodesDouble")
2943         nf3.setTime(29.,30,-21)
2944         nf3.setMesh(f1.getMesh())
2945         nf3.setArray(f1.getMesh().getCoords())
2946         nff3=MEDFileField1TS.New()
2947         nff3.setFieldNoProfileSBT(nf3)
2948         nff3.write(fname,0)
2949         fs=MEDFileFields(fname)
2950         self.assertEqual(len(fs),4)
2951         ffs=[it for it in fs]
2952         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2953         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2954         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2955         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2956         #
2957         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2958         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2959         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2960         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2961         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2962         #
2963         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2964         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2965         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2966         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2967         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2968         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2969         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2970         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2971         #
2972         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2973         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2974         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2975         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2976         pass
2977
2978     @WriteInTmpDir
2979     def testMEDFileFields1(self):
2980         fname="Pyfile64.med"
2981         f1=MEDCouplingFieldDouble(ON_NODES)
2982         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2983         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2984         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2985         f1.setMesh(m)
2986         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2987         f1.setArray(arr)
2988         f1.setName("Field1")
2989         ff1=MEDFileField1TS.New()
2990         ff1.setFieldNoProfileSBT(f1)
2991         self.assertEqual(ff1.getDtUnit(),"us")
2992         ff1.write(fname,0)
2993         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2994         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2995         #
2996         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2997         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2998         ff1s.setName("Field2")
2999         ff1s.write(fname,0)
3000         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3001         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3002         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3003         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3004         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3005         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3006         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3007         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3008         pass
3009
3010     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3011     @WriteInTmpDir
3012     def testMEDFileFields2(self):
3013         fname="Pyfile65.med"
3014         # to check that all is initialize
3015         MEDFileField1TS().__str__()
3016         MEDFileFieldMultiTS().__str__()
3017         # building a mesh containing 4 tri3 + 5 quad4
3018         tri=MEDCouplingUMesh("tri",2)
3019         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3020         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3021         tris = [tri.deepCopy() for i in range(4)]
3022         for i,elt in enumerate(tris): elt.translate([i,0])
3023         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3024         quad=MEDCouplingUMesh("quad",2)
3025         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3026         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3027         quads = [quad.deepCopy() for i in range(5)]
3028         for i,elt in enumerate(quads): elt.translate([5+i,0])
3029         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3030         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3031         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3032         #
3033         fmts0_0=MEDFileFieldMultiTS()
3034         fmts0_1=MEDFileFieldMultiTS()
3035         # time steps
3036         for i in range(10):
3037             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3038             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3039             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3040             f.setTime(float(i+1)+0.1,i+1,-i-1)
3041             fmts0_0.appendFieldNoProfileSBT(f)
3042             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3043             self.assertEqual(fmts0_1.getName(),name1)
3044             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3045             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3046             if i>1:
3047                 # components names have been modified to generate errors
3048                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3049                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3050                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3051                 f1ts.setInfo(['aa [bb]','eee [dd]'])
3052                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3053                 pass
3054             # add a mismatch of nb of compos
3055             pass
3056         fmts0_2=fmts0_0.deepCopy()
3057         fmts0_3=fmts0_0.deepCopy()
3058         fmts0_4=fmts0_0.deepCopy()
3059         fmts0_5=fmts0_0.shallowCpy()
3060         self.assertTrue(len(fmts0_0)==10 and len(fmts0_1)==10 and len(fmts0_2)==10 and len(fmts0_3)==10 and len(fmts0_4)==10 and len(fmts0_5)==10)
3061         del fmts0_2[::2]
3062         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3063         del fmts0_3[[1.1,(6,-6),9]]
3064         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3065         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3066         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3067         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3068         fmts0_7=fmts0_4[::-3]
3069         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3070         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3071         #
3072         fs0=MEDFileFields()
3073         fs0.pushField(fmts0_0)
3074         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3075         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3076         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3077         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3078         fs0.write(fname,2)
3079         fs0=MEDFileFields(fname)
3080         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3081         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3082         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3083         del fs1[["2ndField",3]]
3084         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3085         fs2=fs0[[0,"4thField"]]
3086         self.assertTrue(isinstance(fs2,MEDFileFields))
3087         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3088         #
3089         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3090         pass
3091
3092     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3093     @WriteInTmpDir
3094     def testMEDFileFields3(self):
3095         fname="Pyfile66.med"
3096         # building a mesh containing 4 tri3 + 5 quad4
3097         tri=MEDCouplingUMesh("tri",2)
3098         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3099         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3100         tris = [tri.deepCopy() for i in range(4)]
3101         for i,elt in enumerate(tris): elt.translate([i,0])
3102         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3103         quad=MEDCouplingUMesh("quad",2)
3104         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3105         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3106         quads = [quad.deepCopy() for i in range(5)]
3107         for i,elt in enumerate(quads): elt.translate([5+i,0])
3108         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3109         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3110         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3111         #
3112         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3113         #
3114         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3115         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3116         fmts0_0=MEDFileFieldMultiTS()
3117         fmts0_1=MEDFileFieldMultiTS()
3118         # time steps
3119         for i in range(10):
3120             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3121             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3122             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3123             f.setTime(float(i+1)+0.1,i+1,-i-1)
3124             fmts0_0.appendFieldProfile(f,mm,0,pfl)
3125             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3126             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3127             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3128             pass
3129         #
3130         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3131         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3132         fmts0_0.zipPflsNames()
3133         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3134         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3135         fmts0_2=fmts0_0.deepCopy()
3136         fmts0_3=fmts0_0.deepCopy()
3137         fmts0_4=fmts0_0.deepCopy()
3138         fs0=MEDFileFields()
3139         fs0.pushField(fmts0_0)
3140         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3141         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3142         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3143         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3144         #
3145         fmts0_5=MEDFileFieldMultiTS()
3146         for i in range(7):
3147             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3148             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3149             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3150             f.setTime(float(i+1)+0.1,i+1,-i-1)
3151             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3152             pass
3153         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3154         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3155         fs0.checkGlobsCoherency()
3156         fs0.write(fname,0)
3157         pass
3158
3159     @WriteInTmpDir
3160     def testSplitComponents1(self):
3161         fname="Pyfile67.med"
3162         # building a mesh containing 4 tri3 + 5 quad4
3163         tri=MEDCouplingUMesh("tri",2)
3164         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3165         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3166         tris = [tri.deepCopy() for i in range(4)]
3167         for i,elt in enumerate(tris): elt.translate([i,0])
3168         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3169         quad=MEDCouplingUMesh("quad",2)
3170         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3171         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3172         quads = [quad.deepCopy() for i in range(5)]
3173         for i,elt in enumerate(quads): elt.translate([5+i,0])
3174         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3175         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3176         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3177         #
3178         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3179         #
3180         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3181         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3182         fs=MEDFileFields()
3183         fmts0_1=MEDFileFieldMultiTS()
3184         # time steps
3185         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3186         for i in range(10):
3187             name1="1stField"
3188             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3189             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3190             f.setTime(float(i+1)+0.1,i+1,-i-1)
3191             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3192             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3193             pass
3194         fs.pushField(fmts0_1)
3195         self.assertEqual(1,len(fs))
3196         l=fmts0_1.splitComponents()
3197         self.assertEqual(3,len(l))
3198         for elt in l: self.assertEqual(10,len(elt))
3199         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3200         for elt in l:
3201             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3202             pass
3203         fs.pushFields(l)
3204         self.assertEqual(4,len(fs))
3205         for elt in fs: self.assertEqual(10,len(elt))
3206         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3207         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3208         #
3209         fs.write(fname,0) ; del fs
3210         #
3211         fs1=MEDFileFields(fname)
3212         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3213         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3214         self.assertEqual(4,len(fs1))
3215         for i in range(10):
3216             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3217                 f1ts=fs1[fieldName][i]
3218                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3219                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3220                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3221                 pass
3222             f1ts=fs1["1stField"][i]
3223             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3224             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3225             self.assertTrue(d.isEqual(f.getArray(),1e-13))
3226             pass
3227         pass
3228
3229     @WriteInTmpDir
3230     def testMEDFileFieldConvertTo1(self):
3231         fname="Pyfile68.med"
3232         # building a mesh containing 4 tri3 + 5 quad4
3233         tri=MEDCouplingUMesh("tri",2)
3234         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3235         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3236         tris = [tri.deepCopy() for i in range(4)]
3237         for i,elt in enumerate(tris): elt.translate([i,0])
3238         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3239         quad=MEDCouplingUMesh("quad",2)
3240         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3241         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3242         quads = [quad.deepCopy() for i in range(5)]
3243         for i,elt in enumerate(quads): elt.translate([5+i,0])
3244         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3245         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3246         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3247         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3248         #
3249         ff0=MEDFileField1TS()
3250         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3251         f0.checkConsistencyLight()
3252         ff0.setFieldNoProfileSBT(f0)
3253         #
3254         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3255         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3256         #
3257         ff0i=ff0.convertToInt()
3258         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3259         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3260         #
3261         ff1=ff0i.convertToDouble()
3262         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3263         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3264         # For int64
3265         ff0i64=ff0.convertToInt64()
3266         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3267         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3268         #
3269         ff2=ff0i64.convertToDouble()
3270         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3271         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3272         # With profiles
3273         del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3274         ff0=MEDFileField1TS()
3275         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
3276         f0.checkConsistencyLight()
3277         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3278         ff0.setFieldProfile(f0,mm,0,pfl)
3279         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3280         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3281         #
3282         ff0i=ff0.convertToInt()
3283         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3284         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3285         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3286         #
3287         ff1=ff0i.convertToDouble()
3288         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3289         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3290         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3291         # For Int64
3292         ff0i64=ff0.convertToInt64()
3293         self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3294         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3295         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3296         #
3297         ff2=ff0i64.convertToDouble()
3298         self.assertTrue(isinstance(ff2,MEDFileField1TS))
3299         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3300         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3301         ## MultiTimeSteps
3302         ff0=MEDFileFieldMultiTS()
3303         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(0.1,0,10)
3304         f0.checkConsistencyLight()
3305         ff0.appendFieldProfile(f0,mm,0,pfl)
3306         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(100) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(1.1,1,11)
3307         f0.checkConsistencyLight()
3308         ff0.appendFieldProfile(f0,mm,0,pfl)
3309         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota(200) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(2.1,2,12)
3310         f0.checkConsistencyLight()
3311         ff0.appendFieldProfile(f0,mm,0,pfl)
3312         ff1=ff0.convertToInt()
3313         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3314         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3315         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3316             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3317             arr=ff1.getUndergroundDataArray(dt,it)
3318             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3319             pass
3320         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3321         #
3322         mm.write(fname,2)
3323         ff1.write(fname,0)
3324         #
3325         ff1=ff1.convertToDouble()
3326         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3327         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3328         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3329             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3330             arr=ff1.getUndergroundDataArray(dt,it)
3331             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3332             pass
3333         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3334         #
3335         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3336         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3337         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3338         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3339             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3340             arr=ff1.getUndergroundDataArray(dt,it)
3341             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3342             pass
3343         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3344         pass
3345
3346     @WriteInTmpDir
3347     def testMEDFileFieldPartialLoading(self):
3348         fname="Pyfile69.med"
3349         #
3350         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3351         a.alloc(0,1)
3352         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3353         # building a mesh containing 30 tri3 + 40 quad4
3354         tri=MEDCouplingUMesh("tri",2)
3355         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3356         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3357         tris = [tri.deepCopy() for i in range(30)]
3358         for i,elt in enumerate(tris): elt.translate([i,0])
3359         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3360         quad=MEDCouplingUMesh("quad",2)
3361         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3362         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3363         quads = [quad.deepCopy() for i in range(40)]
3364         for i,elt in enumerate(quads): elt.translate([40+i,0])
3365         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3366         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3367         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3368         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3369         #
3370         ff0=MEDFileField1TS()
3371         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3372         f0.checkConsistencyLight()
3373         ff0.setFieldNoProfileSBT(f0)
3374         ff0.write(fname,0)
3375         #
3376         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3377         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3378         # With profiles
3379         ff0=MEDFileField1TS()
3380         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:50]) ; arr=DataArrayDouble(50*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl")
3381         f0.checkConsistencyLight()
3382         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3383         ff0.setFieldProfile(f0,mm,0,pfl)
3384         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3385         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3386         ff0.write(fname,0)
3387         #
3388         ff0=MEDFileField1TS(fname,False)
3389         self.assertEqual(ff0.getName(),"FieldCell")
3390         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3391         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3392         heap_memory_ref=ff0.getHeapMemorySize()
3393         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3394         ff0.loadArrays() ##
3395         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3396         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3397         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3398         #
3399         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3400         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3401         heap_memory_ref=ff0.getHeapMemorySize()
3402         self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3403         ff0.loadArrays() ##
3404         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3405         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3406         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3407         ff0.loadArrays() ##
3408         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3409         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3410         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3411         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3412         ff0.loadArrays() ##
3413         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3414         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3415         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3416         ff0.loadArraysIfNecessary() ##
3417         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3418         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3419         heap_memory_ref=ff0.getHeapMemorySize()
3420         self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3421         ff0.unloadArrays()
3422         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3423         self.assertEqual(hmd,-800) # -50*8*2
3424         ff0.loadArrays() ##
3425         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3426         #
3427         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3428         heap_memory_ref=ff0.getHeapMemorySize()
3429         self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3430         ff0.loadArrays() ##
3431         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3432         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3433         #
3434         fieldName="FieldCellMultiTS"
3435         ff0=MEDFileFieldMultiTS()
3436         for t in range(20):
3437             f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota(float(t+1000)) ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName(fieldName)
3438             f0.setTime(float(t)+0.1,t,100+t)
3439             f0.checkConsistencyLight()
3440             ff0.appendFieldNoProfileSBT(f0)
3441             pass
3442         ff0.write(fname,0)
3443         #
3444         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3445         heap_memory_ref=ff0.getHeapMemorySize()
3446         self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3447         ff0.loadArrays()
3448         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3449         del ff0
3450         #
3451         ffs=MEDFileFields(fname,False)
3452         heap_memory_ref=ffs.getHeapMemorySize()
3453         self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3454         ffs.loadArrays()
3455         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3456         pass
3457
3458     @WriteInTmpDir
3459     def testMEDFileMeshReadSelector1(self):
3460         mrs=MEDFileMeshReadSelector()
3461         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3462         mrs.__str__() ; mrs.__repr__()
3463         #
3464         mrs=MEDFileMeshReadSelector(0)
3465         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3466         mrs=MEDFileMeshReadSelector(1)
3467         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3468         mrs=MEDFileMeshReadSelector(2)
3469         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3470         mrs=MEDFileMeshReadSelector(3)
3471         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3472         mrs=MEDFileMeshReadSelector(4)
3473         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3474         mrs=MEDFileMeshReadSelector(5)
3475         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3476         mrs=MEDFileMeshReadSelector(6)
3477         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3478         mrs=MEDFileMeshReadSelector(7)
3479         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3480         mrs=MEDFileMeshReadSelector(8)
3481         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3482         mrs=MEDFileMeshReadSelector(9)
3483         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3484         mrs=MEDFileMeshReadSelector(10)
3485         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3486         mrs=MEDFileMeshReadSelector(11)
3487         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3488         mrs=MEDFileMeshReadSelector(12)
3489         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3490         mrs=MEDFileMeshReadSelector(13)
3491         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3492         mrs=MEDFileMeshReadSelector(14)
3493         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3494         mrs=MEDFileMeshReadSelector(15)
3495         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3496         mrs=MEDFileMeshReadSelector(16)
3497         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3498         mrs=MEDFileMeshReadSelector(17)
3499         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3500         mrs=MEDFileMeshReadSelector(18)
3501         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3502         mrs=MEDFileMeshReadSelector(19)
3503         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3504         mrs=MEDFileMeshReadSelector(20)
3505         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3506         mrs=MEDFileMeshReadSelector(21)
3507         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3508         mrs=MEDFileMeshReadSelector(22)
3509         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3510         mrs=MEDFileMeshReadSelector(23)
3511         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3512         mrs=MEDFileMeshReadSelector(24)
3513         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3514         mrs=MEDFileMeshReadSelector(25)
3515         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3516         mrs=MEDFileMeshReadSelector(26)
3517         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3518         mrs=MEDFileMeshReadSelector(27)
3519         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3520         mrs=MEDFileMeshReadSelector(28)
3521         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3522         mrs=MEDFileMeshReadSelector(29)
3523         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3524         mrs=MEDFileMeshReadSelector(30)
3525         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3526         mrs=MEDFileMeshReadSelector(31)
3527         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3528         mrs=MEDFileMeshReadSelector(32)
3529         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3530         mrs=MEDFileMeshReadSelector(33)
3531         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3532         mrs=MEDFileMeshReadSelector(34)
3533         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3534         mrs=MEDFileMeshReadSelector(35)
3535         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3536         mrs=MEDFileMeshReadSelector(36)
3537         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3538         mrs=MEDFileMeshReadSelector(37)
3539         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3540         mrs=MEDFileMeshReadSelector(38)
3541         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3542         mrs=MEDFileMeshReadSelector(39)
3543         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3544         mrs=MEDFileMeshReadSelector(40)
3545         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3546         mrs=MEDFileMeshReadSelector(41)
3547         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3548         mrs=MEDFileMeshReadSelector(42)
3549         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3550         mrs=MEDFileMeshReadSelector(43)
3551         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3552         mrs=MEDFileMeshReadSelector(44)
3553         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3554         mrs=MEDFileMeshReadSelector(45)
3555         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3556         mrs=MEDFileMeshReadSelector(46)
3557         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3558         mrs=MEDFileMeshReadSelector(47)
3559         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3560         mrs=MEDFileMeshReadSelector(48)
3561         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3562         mrs=MEDFileMeshReadSelector(49)
3563         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3564         mrs=MEDFileMeshReadSelector(50)
3565         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3566         mrs=MEDFileMeshReadSelector(51)
3567         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3568         mrs=MEDFileMeshReadSelector(52)
3569         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3570         mrs=MEDFileMeshReadSelector(53)
3571         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3572         mrs=MEDFileMeshReadSelector(54)
3573         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3574         mrs=MEDFileMeshReadSelector(55)
3575         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3576         mrs=MEDFileMeshReadSelector(56)
3577         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3578         mrs=MEDFileMeshReadSelector(57)
3579         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3580         mrs=MEDFileMeshReadSelector(58)
3581         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3582         mrs=MEDFileMeshReadSelector(59)
3583         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3584         mrs=MEDFileMeshReadSelector(60)
3585         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3586         mrs=MEDFileMeshReadSelector(61)
3587         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3588         mrs=MEDFileMeshReadSelector(62)
3589         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3590         mrs=MEDFileMeshReadSelector(63)
3591         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3592         #
3593         mrs=MEDFileMeshReadSelector(63)
3594         mrs.setCellFamilyFieldReading(False)
3595         self.assertEqual(mrs.getCode(),62)
3596         mrs.setCellFamilyFieldReading(True)
3597         self.assertEqual(mrs.getCode(),63)
3598         mrs.setNodeFamilyFieldReading(False)
3599         self.assertEqual(mrs.getCode(),61)
3600         mrs.setNodeFamilyFieldReading(True)
3601         self.assertEqual(mrs.getCode(),63)
3602         mrs.setCellNameFieldReading(False)
3603         self.assertEqual(mrs.getCode(),59)
3604         mrs.setCellNameFieldReading(True)
3605         self.assertEqual(mrs.getCode(),63)
3606         mrs.setNodeNameFieldReading(False)
3607         self.assertEqual(mrs.getCode(),55)
3608         mrs.setNodeNameFieldReading(True)
3609         self.assertEqual(mrs.getCode(),63)
3610         mrs.setCellNumFieldReading(False)
3611         self.assertEqual(mrs.getCode(),47)
3612         mrs.setCellNumFieldReading(True)
3613         self.assertEqual(mrs.getCode(),63)
3614         mrs.setNodeNumFieldReading(False)
3615         self.assertEqual(mrs.getCode(),31)
3616         mrs.setNodeNumFieldReading(True)
3617         self.assertEqual(mrs.getCode(),63)
3618         pass
3619
3620     @WriteInTmpDir
3621     def testPartialReadOfMeshes(self):
3622         fname="Pyfile70.med"
3623         # building a mesh containing 4 tri3 + 5 quad4
3624         tri=MEDCouplingUMesh("tri",2)
3625         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3626         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3627         tris = [tri.deepCopy() for i in range(4)]
3628         for i,elt in enumerate(tris): elt.translate([i,0])
3629         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3630         quad=MEDCouplingUMesh("quad",2)
3631         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3632         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3633         quads = [quad.deepCopy() for i in range(5)]
3634         for i,elt in enumerate(quads): elt.translate([5+i,0])
3635         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3636         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3637         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3638         m1=m.buildDescendingConnectivity()[0]
3639         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3640         #
3641         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3642         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3643         mm.setGroupsAtLevel(0,[grp0,grp1])
3644         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3645         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3646         mm.setGroupsAtLevel(-1,[grp2,grp3])
3647         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3648         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3649         mm.setGroupsAtLevel(1,[grp4,grp5])
3650         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3651         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3652         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3653         #
3654         mm.write(fname,2)
3655         ##
3656         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3657         b4_ref_heap_mem=mm.getHeapMemorySize()
3658         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3659         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3660         ref_heap_mem=mm.getHeapMemorySize()
3661         # check the gain of memory using 1GTUMesh instead of UMesh
3662         self.assertTrue(ref_heap_mem-b4_ref_heap_mem>=(32+9)*4*2-32)# 32+9=nbCells 4=sizeof(int) 2=the types+index -32=loss linked to vector
3663         #
3664         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3665         self.assertEqual(len(mm.getGroupsNames()),0)
3666         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3667         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3668         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3669         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3670         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3671         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3672         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3673         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3674         delta1=ref_heap_mem-mm.getHeapMemorySize()
3675         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3676         #
3677         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3678         self.assertEqual(len(mm.getGroupsNames()),6)
3679         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3680         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3681         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3682         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3683         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3684         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3685         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3686         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3687         delta2=ref_heap_mem-mm.getHeapMemorySize()
3688         self.assertTrue(delta2<delta1)
3689         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3690         #
3691         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3692         self.assertEqual(len(mm.getGroupsNames()),6)
3693         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3694         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3695         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3696         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3697         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3698         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3699         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3700         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3701         delta3=ref_heap_mem-mm.getHeapMemorySize()
3702         self.assertTrue(delta3<delta2)
3703         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3704         #
3705         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3706         self.assertEqual(len(mm.getGroupsNames()),6)
3707         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3708         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3709         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3710         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3711         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3712         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3713         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3714         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3715         delta4=ref_heap_mem-mm.getHeapMemorySize()
3716         self.assertTrue(delta4<delta3)
3717         self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3718         #
3719         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3720         self.assertEqual(len(mm.getGroupsNames()),6)
3721         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3722         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3723         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3724         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3725         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3726         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3727         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3728         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3729         delta5=ref_heap_mem-mm.getHeapMemorySize()
3730         self.assertTrue(delta5<delta4)
3731         self.assertEqual(delta5,0)
3732         pass
3733
3734     # this test checks that setFieldProfile perform a check of the array length
3735     # compared to the profile length. This test also checks that mesh attribute of field
3736     # is not used by setFieldProfile (because across this test mesh is equal to None)
3737     @WriteInTmpDir
3738     def testCheckCompatibilityPfl1(self):
3739         # building a mesh containing 4 tri3 + 5 quad4
3740         tri=MEDCouplingUMesh("tri",2)
3741         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3742         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3743         tris = [tri.deepCopy() for i in range(4)]
3744         for i,elt in enumerate(tris): elt.translate([i,0])
3745         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3746         quad=MEDCouplingUMesh("quad",2)
3747         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3748         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3749         quads = [quad.deepCopy() for i in range(5)]
3750         for i,elt in enumerate(quads): elt.translate([5+i,0])
3751         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3752         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3753         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3754         m1=m.buildDescendingConnectivity()[0]
3755         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3756         #
3757         f1ts=MEDFileField1TS()
3758         f=MEDCouplingFieldDouble(ON_NODES)
3759         vals=DataArrayDouble(7) ; vals.iota(1000)
3760         f.setArray(vals)
3761         f.setName("anonymous") # f has no mesh it is not a bug
3762         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3763         f1ts.setFieldProfile(f,mm,0,pfl)
3764         #
3765         f1ts=MEDFileField1TS()
3766         f=MEDCouplingFieldDouble(ON_NODES)
3767         vals=DataArrayDouble(8) ; vals.iota(1000)
3768         f.setArray(vals)
3769         f.setName("anonymous") # f has no mesh it is not a bug
3770         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3771         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3772         #
3773         f1ts=MEDFileField1TS()
3774         f=MEDCouplingFieldDouble(ON_CELLS)
3775         vals=DataArrayDouble(7) ; vals.iota(1000)
3776         f.setArray(vals)
3777         f.setName("anonymous") # f has no mesh it is not a bug
3778         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3779         f1ts.setFieldProfile(f,mm,0,pfl)
3780         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3781         #
3782         f1ts=MEDFileField1TS()
3783         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3784         vals=DataArrayDouble(27) ; vals.iota(1000)
3785         f.setArray(vals)
3786         f.setName("anonymous") # f has no mesh it is not a bug
3787         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3788         f.setMesh(m[pfl])
3789         f.setGaussLocalizationOnCells([0,1],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.1,0.1],[0.3,0.6,0.1])
3790         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3791         f.setGaussLocalizationOnCells([3,4,5,6],[0.,0.,1.,0.,1.,1.,0.,1.],[0.1,0.1,0.2,0.2,0.3,0.3,0.4,0.4,0.5,0.5],[0.2,0.3,0.4,0.07,0.03])
3792         f.setMesh(None)
3793         f1ts.setFieldProfile(f,mm,0,pfl)
3794         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3795         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3796         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3797         vals=DataArrayDouble(27) ; vals.iota(1000)
3798         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3799         #
3800         f1ts=MEDFileField1TS()
3801         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3802         vals=DataArrayDouble(25) ; vals.iota(1000)
3803         f.setArray(vals)
3804         f.setName("anonymous") # f has no mesh it is not a bug
3805         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3806         f1ts.setFieldProfile(f,mm,0,pfl)
3807         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3808         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3809         f.setArray(vals2)
3810         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3811         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3812         #
3813         f1ts=MEDFileField1TS()
3814         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3815         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3816         f.setArray(vals)
3817         f1ts.setFieldProfile(f,mm,0,pfl)
3818         pass
3819
3820     @WriteInTmpDir
3821     def testWRMeshWithNoCells(self):
3822         fname="Pyfile71.med"
3823         a=DataArrayDouble(4) ; a.iota()
3824         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3825         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3826         m=MEDFileUMesh()
3827         m.setMeshAtLevel(0,m00)
3828         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3829         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3830         m.write(fname,2)
3831         del m,a,c,m0,m00
3832         #
3833         m=MEDFileMesh.New(fname)
3834         self.assertEqual((),m.getNonEmptyLevels())
3835         self.assertTrue(m.getCoords().isEqual(DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3)]),1e-12))
3836         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3837         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3838         pass
3839
3840     @WriteInTmpDir
3841     def testWRQPolyg1(self):
3842         fname="Pyfile72.med"
3843         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3844         m.insertNextCell([0,2,1,3])
3845         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3846         #
3847         ms = [m.deepCopy() for i in range(4)]
3848         for i,elt in enumerate(ms):
3849             elt.translate([float(i)*1.5,0.])
3850             pass
3851         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3852         m0.convertAllToPoly()
3853         #
3854         ms = [m.deepCopy() for i in range(5)]
3855         for i,elt in enumerate(ms):
3856             elt.translate([float(i)*1.5,1.5])
3857             pass
3858         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3859         m1.convertAllToPoly()
3860         m1.convertLinearCellsToQuadratic()
3861         #
3862         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3863         ##
3864         mm=MEDFileUMesh()
3865         mm.setMeshAtLevel(0,m)
3866         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3867         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3868         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3869         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3870         ##
3871         mm.write(fname,2)
3872         del mm
3873         #
3874         mm_read=MEDFileUMesh(fname)
3875         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3876         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3877         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3878         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3879         ##
3880         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3881         f.setMesh(m)
3882         arr0=DataArrayDouble(9) ; arr0.iota()
3883         arr1=DataArrayDouble(9) ; arr1.iota(100)
3884         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3885         f.setArray(arr) ; f.checkConsistencyLight()
3886         f.setTime(5.6,1,2)
3887         ff=MEDFileField1TS()
3888         ff.setFieldNoProfileSBT(f)
3889         ff.write(fname,0)
3890         ##
3891         ff_read=MEDFileField1TS(fname)
3892         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3893         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3894         pass
3895
3896     @WriteInTmpDir
3897     def testLoadIfNecessaryOnFromScratchFields0(self):
3898         """
3899         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3900         """
3901         fname="Pyfile77.med"
3902         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3903         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3904         m.allocateCells()
3905         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3906         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3907         m.finishInsertingCells()
3908         #
3909         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3910         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3911         fs=MEDFileFields()
3912         arrs=4*[None]
3913         #
3914         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3915         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3916         f0.setTime(1.1,1,1)
3917         f0.setName("myELNOField")
3918         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3919         f0.setArray(arrs[0])
3920         ff0.appendFieldNoProfileSBT(f0)
3921         #
3922         f0.setTime(2.2,2,1)
3923         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3924         f0.setArray(arrs[1])
3925         ff0.appendFieldNoProfileSBT(f0)
3926         #
3927         f0.setTime(3.3,3,1)
3928         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3929         f0.setArray(arrs[2])
3930         ff0.appendFieldNoProfileSBT(f0)
3931         #
3932         f0.setTime(4.4,4,1)
3933         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3934         f0.setArray(arrs[3])
3935         ff0.appendFieldNoProfileSBT(f0)
3936         #
3937         for i,arr in enumerate(arrs):
3938             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3939             fs[0][i].loadArraysIfNecessary()
3940             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3941             pass
3942         fs.loadArraysIfNecessary()
3943         for i,arr in enumerate(arrs):
3944             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3945             pass
3946         fs[0].loadArraysIfNecessary()
3947         for i,arr in enumerate(arrs):
3948             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3949             pass
3950         pass
3951
3952     @WriteInTmpDir
3953     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3954         """ This test is very important, because the same mechanism is used by the MEDReader to generate a field on all the mesh without any processing and memory.
3955         """
3956         fname="Pyfile78.med"
3957         coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
3958         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3959         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3960         m0.allocateCells()
3961         for elt in [[0,1,2,3],[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7],[5,6,7,8]]:#6
3962             m0.insertNextCell(NORM_TETRA4,elt)
3963             pass
3964         for elt in [[0,1,2,3,4],[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]]:#5
3965             m0.insertNextCell(NORM_PYRA5,elt)
3966             pass
3967         for elt in [[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8]]:#4
3968             m0.insertNextCell(NORM_PENTA6,elt)
3969             pass
3970         m0.checkConsistency()
3971         m1=MEDCouplingUMesh(); m1.setName("mesh")
3972         m1.setMeshDimension(2);
3973         m1.allocateCells(5);
3974         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3975         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3976         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3977         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3978         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3979         m1.setCoords(coords);
3980         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3981         m3.allocateCells()
3982         m3.insertNextCell(NORM_POINT1,[2])
3983         m3.insertNextCell(NORM_POINT1,[3])
3984         m3.insertNextCell(NORM_POINT1,[4])
3985         m3.insertNextCell(NORM_POINT1,[5])
3986         #
3987         mm=MEDFileUMesh()
3988         mm.setMeshAtLevel(0,m0)
3989         mm.setMeshAtLevel(-1,m1)
3990         mm.setMeshAtLevel(-3,m3)
3991         mm.write(fname,2)
3992         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3993         mm=MEDFileMesh.New(fname)
3994         fs=MEDFileFields()
3995         fmts=MEDFileFieldMultiTS()
3996         f1ts=MEDFileField1TS()
3997         for lev in mm.getNonEmptyLevels():
3998             for gt in mm.getGeoTypesAtLevel(lev):
3999                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4000                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4001                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4002                 f.setArray(arr) ; f.setName("f0")
4003                 f1ts.setFieldNoProfileSBT(f)
4004                 pass
4005             pass
4006         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4007         for lev in [0,-1,-3]:
4008             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4009             pass
4010         fmts.pushBackTimeStep(f1ts)
4011         fs.pushField(fmts)
4012         fs.write(fname,0)
4013         del fs,fmts,f1ts
4014         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4015         fs=MEDFileFields(fname)
4016         self.assertEqual(len(fs),1)
4017         self.assertEqual(len(fs[0]),1)
4018         f1ts=fs[0][0]
4019         self.assertEqual(f1ts.getFieldSplitedByType(),[(0,[(0,(0,4),'','')]),(3,[(0,(4,6),'','')]),(4,[(0,(6,9),'','')]),(14,[(0,(9,15),'','')]),(15,[(0,(15,20),'','')]),(16,[(0,(20,24),'','')])])
4020         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0,1,2,3,0,1,0,1,2,0,1,2,3,4,5,0,1,2,3,4,0,1,2,3]),1e-12))
4021         pass
4022
4023     @WriteInTmpDir
4024     def testMEDFileUMeshSetName(self):
4025         """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the conversion is performed in memory and a preparation is done then.
4026         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4027         """
4028         fname="Pyfile79.med"
4029         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4030         mm=MEDFileUMesh()
4031         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4032         coords=DataArrayDouble([-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ],9,3)
4033         m0.allocateCells(5);
4034         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4035         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4036         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4037         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4038         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4039         m0.setCoords(coords);
4040         mm.setMeshAtLevel(0,m0)
4041         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4042         m2.allocateCells()
4043         m2.insertNextCell(NORM_POINT1,[2])
4044         m2.insertNextCell(NORM_POINT1,[3])
4045         m2.insertNextCell(NORM_POINT1,[4])
4046         m2.insertNextCell(NORM_POINT1,[5])
4047         mm.setMeshAtLevel(-2,m2)
4048         self.assertEqual(mm.getName(),"")
4049         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4050         mm.forceComputationOfParts()
4051         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4052         mm.setName("abc")
4053         self.assertEqual(mm.getName(),"abc")
4054         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4055         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4056         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4057         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4058         pass
4059
4060     @WriteInTmpDir
4061     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4062         fileName="Pyfile80.med"
4063         m=MEDCouplingCMesh() ; m.setName("cmesh")
4064         arr=DataArrayDouble(6) ; arr.iota()
4065         m.setCoords(arr,arr)
4066         nbCells=m.getNumberOfCells()
4067         self.assertEqual(25,nbCells)
4068         f=MEDCouplingFieldDouble(ON_CELLS)
4069         f.setName("FieldOnCell") ; f.setMesh(m)
4070         arr=DataArrayDouble(nbCells) ; arr.iota()
4071         mm=MEDFileCMesh()
4072         mm.setMesh(m)
4073         #
4074         fmts=MEDFileFieldMultiTS()
4075         #
4076         for i in range(nbCells):
4077             t=(float(i)+0.1,i+1,-i-2)
4078             f.setTime(*t)
4079             arr2=DataArrayDouble(nbCells)
4080             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4081             arr2[perm]=arr
4082             f.setArray(arr2)
4083             f1ts=MEDFileField1TS()
4084             f1ts.setFieldNoProfileSBT(f)
4085             fmts.pushBackTimeStep(f1ts)
4086             pass
4087         fmts.unloadArraysWithoutDataLoss()
4088         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4089         fs=MEDFileFields() ; fs.pushField(fmts)
4090         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4091         fs.unloadArraysWithoutDataLoss()
4092         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4093         f1ts=fs[0][0]
4094         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4095         f1ts.unloadArraysWithoutDataLoss()
4096         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4097         mm.write(fileName,2)
4098         fs.write(fileName,0)
4099         del m,fmts,mm,f,f1ts
4100         ##
4101         mm=MEDFileMesh.New(fileName)
4102         fmts=MEDFileFieldMultiTS(fileName)
4103         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4104         fmts.unloadArraysWithoutDataLoss()
4105         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4106         fmts.loadArraysIfNecessary()
4107         self.assertTrue(fmts[0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4108         del mm,fmts
4109         fs=MEDFileFields(fileName)
4110         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4111         fs.unloadArraysWithoutDataLoss()
4112         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4113         fs.loadArraysIfNecessary()
4114         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4115         del fs
4116         f1ts=MEDFileField1TS(fileName)
4117         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4118         f1ts.unloadArraysWithoutDataLoss()
4119         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4120         f1ts.loadArraysIfNecessary()
4121         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
4122         pass
4123
4124     @WriteInTmpDir
4125     def testMEDFileUMeshLoadPart1(self):
4126         """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specified using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
4127         memory of the returned instance.
4128         """
4129         fileName="Pyfile81.med"
4130         arr=DataArrayDouble(6) ; arr.iota()
4131         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4132         m=m.buildUnstructured()
4133         m.setName("Mesh")
4134         m.changeSpaceDimension(3,0.)
4135         infos=["aa [b]","cc [de]","gg [klm]"]
4136         m.getCoords().setInfoOnComponents(infos)
4137         m.checkConsistency()
4138         mm=MEDFileUMesh()
4139         mm.setMeshAtLevel(0,m)
4140         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4141         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4142         mm.setMeshAtLevel(-1,m1)
4143         renum0=DataArrayInt([3,6,7,10,11,0,2,1,9,8,5,4,12,13,14,24,23,22,21,20,19,18,17,16,15])
4144         famField0=DataArrayInt([-3,-6,-7,-10,-11,0,-2,-1,-9,-8,-5,-4,-12,-13,-14,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15])
4145         namesCellL0=DataArrayAsciiChar(25,16)
4146         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
4147         renumM1=DataArrayInt([3,4,0,2,1])
4148         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4149         mm.setRenumFieldArr(0,renum0)
4150         mm.setFamilyFieldArr(0,famField0)
4151         mm.setNameFieldAtLevel(0,namesCellL0)
4152         mm.setRenumFieldArr(-1,renumM1)
4153         mm.setFamilyFieldArr(-1,famFieldM1)
4154         renum1=DataArrayInt([13,16,17,20,21,10,12,11,19,18,15,14,22,23,24,34,33,32,31,30,29,28,27,26,25,45,44,43,42,41,40,39,38,37,36,35])
4155         famField1=DataArrayInt([-13,-16,-17,-20,-21,-10,-12,-11,-19,-18,-15,-14,-22,-23,-24,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35])
4156         namesNodes=DataArrayAsciiChar(36,16)
4157         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
4158         mm.setRenumFieldArr(1,renum1)
4159         mm.setFamilyFieldArr(1,famField1)
4160         mm.setNameFieldAtLevel(1,namesNodes)
4161         mm.setFamilyId("Fam7",77)
4162         mm.setFamilyId("Fam8",88)
4163         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4164         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4165         mm.write(fileName,2)
4166         #
4167         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4168         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4169         self.assertTrue(mm0.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
4170         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
4171         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4172         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4173         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4174         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4175         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4176         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4177         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4178         #
4179         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4180         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4181         self.assertTrue(mm1.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([1,0,6,7,2,1,7,8,3,2,8,9,4,3,9,10,6,5,11,12,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,12,11,17,18,13,12,18,19,14,13,19,20,15,14,20,21,16,15,21,22])))
4182         coo=DataArrayDouble([(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(5,3,0),(0,4,0),(1,4,0),(2,4,0),(3,4,0),(4,4,0),(5,4,0),(0,5,0),(1,5,0),(2,5,0),(3,5,0),(4,5,0),(5,5,0)]) ; coo.setInfoOnComponents(infos)
4183         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4184         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4185         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4186         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4187         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4188         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4189         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4190         #
4191         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4192         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4193         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4194         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4195         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4196         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4197         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4198         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4199         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().isEqual(DataArrayInt([2,1,7,8,3,2,8,9,4,3,9,10,5,4,10,11,7,6,12,13,8,7,13,14,9,8,14,15,10,9,15,16,11,10,16,17])))
4200         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4201         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(5,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(5,2,0)]) ; coo.setInfoOnComponents(infos)
4202         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4203         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4204         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4205         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4206         pass
4207
4208     @WriteInTmpDir
4209     def testMEDFileFieldsLoadPart1(self):
4210         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4211         """
4212         fileName="Pyfile82.med"
4213         meshName="Mesh"
4214         compos=["aa [kg]","bbb [m/s]"]
4215         arr=DataArrayDouble(6) ; arr.iota()
4216         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4217         m=m.buildUnstructured()
4218         m.setName(meshName)
4219         m.changeSpaceDimension(3,0.)
4220         infos=["aa [b]","cc [de]","gg [klm]"]
4221         m.getCoords().setInfoOnComponents(infos)
4222         m.checkConsistency()
4223         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4224         f.setName("Field")
4225         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4226         arr[:,0]=list(range(25))
4227         arr[:,1]=list(range(100,125))
4228         f.setArray(arr)
4229         WriteField(fileName,f,True)
4230         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4231         f.setName("FieldNode")
4232         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4233         arr[:,0]=list(range(200,236))
4234         arr[:,1]=list(range(300,336))
4235         f.setArray(arr)
4236         f.checkConsistencyLight()
4237         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4238         #
4239         ms=MEDFileMeshes()
4240         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4241         ms.pushMesh(mm)
4242         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4243         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4244         #
4245         ms=MEDFileMeshes()
4246         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4247         ms.pushMesh(mm)
4248         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4249         fs=fs.deepCopy()
4250         fs[0][0].loadArrays()
4251         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4252         arr.setInfoOnComponents(compos)
4253         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4254         fs[1][0].loadArrays()
4255         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4256         arr.setInfoOnComponents(compos)
4257         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4258         pass
4259
4260     @WriteInTmpDir
4261     def testMEDFileWithoutCells1(self):
4262         fileName="Pyfile83.med"
4263         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4264         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4265         mm=MEDFileUMesh()
4266         mm.setCoords(coo)
4267         mm.setName("mesh")
4268         mm.write(fileName,2)
4269         #
4270         mm=MEDFileMesh.New(fileName)
4271         self.assertEqual(mm.getName(),"mesh")
4272         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4273         pass
4274
4275     @WriteInTmpDir
4276     def testZipCoordsWithLoadPart1(self):
4277         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4278         """
4279         fileName="Pyfile84.med"
4280         meshName="Mesh"
4281         compos=["aa [kg]","bbb [m/s]"]
4282         arr=DataArrayDouble(6) ; arr.iota()
4283         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4284         m=m.buildUnstructured()
4285         m.setName(meshName)
4286         m.changeSpaceDimension(3,0.)
4287         infos=["aa [b]","cc [de]","gg [klm]"]
4288         m.getCoords().setInfoOnComponents(infos)
4289         m.checkConsistency()
4290         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4291         f.setName("Field")
4292         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4293         arr[:,0]=list(range(25))
4294         arr[:,1]=list(range(100,125))
4295         f.setArray(arr)
4296         WriteField(fileName,f,True)
4297         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4298         f.setName("FieldNode")
4299         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4300         arr[:,0]=list(range(200,236))
4301         arr[:,1]=list(range(300,336))
4302         f.setArray(arr)
4303         f.checkConsistencyLight()
4304         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4305         #
4306         ms=MEDFileMeshes()
4307         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4308         ms.pushMesh(mm)
4309         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4310         self.assertEqual(spd.getSlice(),slice(4,6,1))
4311         spd=mm.getPartDefAtLevel(1)
4312         self.assertEqual(spd.getSlice(),slice(4,14,1))
4313         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4314         mm.zipCoords() # <- The important line is here !
4315         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4316         self.assertEqual(spd.getSlice(),slice(4,6,1))
4317         spd=mm.getPartDefAtLevel(1)
4318         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4319         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4320         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4321         fs[0][0].loadArrays()
4322         arr=DataArrayDouble([(4,104),(5,105)])
4323         arr.setInfoOnComponents(compos)
4324         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4325         fs[1][0].loadArrays()
4326         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4327         arr.setInfoOnComponents(compos)
4328         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4329         m_ref = mm[0].deepCopy()
4330         # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4331         ms=MEDFileMeshes()
4332         mrs = MEDFileMeshReadSelector()
4333         mrs.setNumberOfCoordsLoadSessions(2)
4334         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4335         ms.pushMesh(mm)
4336         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4337         self.assertEqual(spd.getSlice(),slice(4,6,1))
4338         spd=mm.getPartDefAtLevel(1)
4339         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4340         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4341         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4342         fs[0][0].loadArrays()
4343         arr=DataArrayDouble([(4,104),(5,105)])
4344         arr.setInfoOnComponents(compos)
4345         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4346         fs[1][0].loadArrays()
4347         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4348         arr.setInfoOnComponents(compos)
4349         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4350         self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4351         pass
4352
4353     @WriteInTmpDir
4354     def testMEDFileCMeshSetGroupsAtLevel(self):
4355         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4356         """
4357         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4358         m.setName("Mesh")
4359         mm=MEDFileCMesh() ; mm.setMesh(m)
4360         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4361         mm.setGroupsAtLevel(0,[grp])
4362         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4363         pass
4364
4365     @WriteInTmpDir
4366     def testMEDFileUMeshBuildExtrudedMesh1(self):
4367         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4368         fileName="Pyfile85.med"
4369         meshName2D="Mesh"
4370         meshName1D="Mesh1D"
4371         meshName3DOut="Mesh3D"
4372         #
4373         d1=DataArrayInt([0,4,20,24])
4374         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4375         #
4376         a=DataArrayDouble(6) ; a.iota()
4377         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4378         m=m.buildUnstructured()
4379         d1c=d1.buildComplement(m.getNumberOfCells())
4380         m=m[d1c] ; m.zipCoords()
4381         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4382         m0.simplexize(0)
4383         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4384         m.setName(meshName2D)
4385         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4386         e=d.deltaShiftIndex().findIdsEqual(1)
4387         #
4388         mm=MEDFileUMesh()
4389         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4390         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4391         mm.setGroupsAtLevel(0,[grp0])
4392         grp1=e ; grp1.setName("grp1")
4393         mm.setGroupsAtLevel(-1,[grp1])
4394         mm.write(fileName,2)
4395         #
4396         a=DataArrayDouble(3) ; a.iota()
4397         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4398         tmp.setName(meshName1D)
4399         tmp.changeSpaceDimension(3)
4400         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4401         mm1D=MEDFileUMesh()
4402         mm1D.setMeshAtLevel(0,tmp)
4403         mm1D.write(fileName,0)
4404         # test is here !
4405         mm2D=MEDFileMesh.New(fileName,meshName2D)
4406         mm1D=MEDFileMesh.New(fileName,meshName1D)
4407         m1D=mm1D.getMeshAtLevel(0)
4408         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4409         #
4410         self.assertEqual(mm3D.getName(),mm2D.getName())
4411         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4412         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4413         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4414         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4415         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4416         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4417         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4418         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4419         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4420         d=DataArrayDouble([(1.,0.,0.),(2.,0.,0.),(3.,0.,0.),(4.,0.,0.),(0.,1.,0.),(1.,1.,0.),(2.,1.,0.),(3.,1.,0.),(4.,1.,0.),(5.,1.,0.),(0.,2.,0.),(1.,2.,0.),(2.,2.,0.),(3.,2.,0.),(4.,2.,0.),(5.,2.,0.),(0.,3.,0.),(1.,3.,0.),(2.,3.,0.),(3.,3.,0.),(4.,3.,0.),(5.,3.,0.),(0.,4.,0.),(1.,4.,0.),(2.,4.,0.),(3.,4.,0.),(4.,4.,0.),(5.,4.,0.),(1.,5.,0.),(2.,5.,0.),(3.,5.,0.),(4.,5.,0.),(1.,0.,1.),(2.,0.,1.),(3.,0.,1.),(4.,0.,1.),(0.,1.,1.),(1.,1.,1.),(2.,1.,1.),(3.,1.,1.),(4.,1.,1.),(5.,1.,1.),(0.,2.,1.),(1.,2.,1.),(2.,2.,1.),(3.,2.,1.),(4.,2.,1.),(5.,2.,1.),(0.,3.,1.),(1.,3.,1.),(2.,3.,1.),(3.,3.,1.),(4.,3.,1.),(5.,3.,1.),(0.,4.,1.),(1.,4.,1.),(2.,4.,1.),(3.,4.,1.),(4.,4.,1.),(5.,4.,1.),(1.,5.,1.),(2.,5.,1.),(3.,5.,1.),(4.,5.,1.),(1.,0.,2.),(2.,0.,2.),(3.,0.,2.),(4.,0.,2.),(0.,1.,2.),(1.,1.,2.),(2.,1.,2.),(3.,1.,2.),(4.,1.,2.),(5.,1.,2.),(0.,2.,2.),(1.,2.,2.),(2.,2.,2.),(3.,2.,2.),(4.,2.,2.),(5.,2.,2.),(0.,3.,2.),(1.,3.,2.),(2.,3.,2.),(3.,3.,2.),(4.,3.,2.),(5.,3.,2.),(0.,4.,2.),(1.,4.,2.),(2.,4.,2.),(3.,4.,2.),(4.,4.,2.),(5.,4.,2.),(1.,5.,2.),(2.,5.,2.),(3.,5.,2.),(4.,5.,2.)])
4421         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4422         d=DataArrayInt([16,1,0,5,33,32,37,16,1,5,6,33,37,38,16,2,1,6,34,33,38,16,2,6,7,34,38,39,16,3,2,7,35,34,39,16,3,7,8,35,39,40,16,5,4,10,37,36,42,16,5,10,11,37,42,43,16,9,8,14,41,40,46,16,9,14,15,41,46,47,16,11,10,16,43,42,48,16,11,16,17,43,48,49,16,15,14,20,47,46,52,16,15,20,21,47,52,53,16,17,16,22,49,48,54,16,17,22,23,49,54,55,16,21,20,26,53,52,58,16,21,26,27,53,58,59,16,24,23,28,56,55,60,16,24,28,29,56,60,61,16,25,24,29,57,56,61,16,25,29,30,57,61,62,16,26,25,30,58,57,62,16,26,30,31,58,62,63,16,33,32,37,65,64,69,16,33,37,38,65,69,70,16,34,33,38,66,65,70,16,34,38,39,66,70,71,16,35,34,39,67,66,71,16,35,39,40,67,71,72,16,37,36,42,69,68,74,16,37,42,43,69,74,75,16,41,40,46,73,72,78,16,41,46,47,73,78,79,16,43,42,48,75,74,80,16,43,48,49,75,80,81,16,47,46,52,79,78,84,16,47,52,53,79,84,85,16,49,48,54,81,80,86,16,49,54,55,81,86,87,16,53,52,58,85,84,90,16,53,58,59,85,90,91,16,56,55,60,88,87,92,16,56,60,61,88,92,93,16,57,56,61,89,88,93,16,57,61,62,89,93,94,16,58,57,62,90,89,94,16,58,62,63,90,94,95,18,6,5,11,12,38,37,43,44,18,7,6,12,13,39,38,44,45,18,8,7,13,14,40,39,45,46,18,12,11,17,18,44,43,49,50,18,13,12,18,19,45,44,50,51,18,14,13,19,20,46,45,51,52,18,18,17,23,24,50,49,55,56,18,19,18,24,25,51,50,56,57,18,20,19,25,26,52,51,57,58,18,38,37,43,44,70,69,75,76,18,39,38,44,45,71,70,76,77,18,40,39,45,46,72,71,77,78,18,44,43,49,50,76,75,81,82,18,45,44,50,51,77,76,82,83,18,46,45,51,52,78,77,83,84,18,50,49,55,56,82,81,87,88,18,51,50,56,57,83,82,88,89,18,52,51,57,58,84,83,89,90])
4423         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4424         d=DataArrayInt([0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,345,354,363,372,381,390,399,408,417,426,435,444,453,462,471,480,489,498])
4425         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4426         d=DataArrayInt([3,1,0,5,3,1,5,6,3,2,1,6,3,2,6,7,3,3,2,7,3,3,7,8,3,5,4,10,3,5,10,11,3,9,8,14,3,9,14,15,3,11,10,16,3,11,16,17,3,15,14,20,3,15,20,21,3,17,16,22,3,17,22,23,3,21,20,26,3,21,26,27,3,24,23,28,3,24,28,29,3,25,24,29,3,25,29,30,3,26,25,30,3,26,30,31,3,65,64,69,3,65,69,70,3,66,65,70,3,66,70,71,3,67,66,71,3,67,71,72,3,69,68,74,3,69,74,75,3,73,72,78,3,73,78,79,3,75,74,80,3,75,80,81,3,79,78,84,3,79,84,85,3,81,80,86,3,81,86,87,3,85,84,90,3,85,90,91,3,88,87,92,3,88,92,93,3,89,88,93,3,89,93,94,3,90,89,94,3,90,94,95,4,1,0,32,33,4,0,5,37,32,4,5,1,33,37,4,5,6,38,37,4,6,1,33,38,4,2,1,33,34,4,6,2,34,38,4,6,7,39,38,4,7,2,34,39,4,3,2,34,35,4,7,3,35,39,4,7,8,40,39,4,8,3,35,40,4,5,4,36,37,4,4,10,42,36,4,10,5,37,42,4,10,11,43,42,4,11,5,37,43,4,9,8,40,41,4,8,14,46,40,4,14,9,41,46,4,14,15,47,46,4,15,9,41,47,4,10,16,48,42,4,16,11,43,48,4,16,17,49,48,4,17,11,43,49,4,14,20,52,46,4,20,15,47,52,4,20,21,53,52,4,21,15,47,53,4,16,22,54,48,4,22,17,49,54,4,22,23,55,54,4,23,17,49,55,4,20,26,58,52,4,26,21,53,58,4,26,27,59,58,4,27,21,53,59,4,24,23,55,56,4,23,28,60,55,4,28,24,56,60,4,28,29,61,60,4,29,24,56,61,4,25,24,56,57,4,29,25,57,61,4,29,30,62,61,4,30,25,57,62,4,26,25,57,58,4,30,26,58,62,4,30,31,63,62,4,31,26,58,63,4,11,12,44,43,4,12,6,38,44,4,12,13,45,44,4,13,7,39,45,4,13,14,46,45,4,17,18,50,49,4,18,12,44,50,4,18,19,51,50,4,19,13,45,51,4,19,20,52,51,4,24,18,50,56,4,25,19,51,57,4,33,32,64,65,4,32,37,69,64,4,37,33,65,69,4,37,38,70,69,4,38,33,65,70,4,34,33,65,66,4,38,34,66,70,4,38,39,71,70,4,39,34,66,71,4,35,34,66,67,4,39,35,67,71,4,39,40,72,71,4,40,35,67,72,4,37,36,68,69,4,36,42,74,68,4,42,37,69,74,4,42,43,75,74,4,43,37,69,75,4,41,40,72,73,4,40,46,78,72,4,46,41,73,78,4,46,47,79,78,4,47,41,73,79,4,42,48,80,74,4,48,43,75,80,4,48,49,81,80,4,49,43,75,81,4,46,52,84,78,4,52,47,79,84,4,52,53,85,84,4,53,47,79,85,4,48,54,86,80,4,54,49,81,86,4,54,55,87,86,4,55,49,81,87,4,52,58,90,84,4,58,53,85,90,4,58,59,91,90,4,59,53,85,91,4,56,55,87,88,4,55,60,92,87,4,60,56,88,92,4,60,61,93,92,4,61,56,88,93,4,57,56,88,89,4,61,57,89,93,4,61,62,94,93,4,62,57,89,94,4,58,57,89,90,4,62,58,90,94,4,62,63,95,94,4,63,58,90,95,4,43,44,76,75,4,44,38,70,76,4,44,45,77,76,4,45,39,71,77,4,45,46,78,77,4,49,50,82,81,4,50,44,76,82,4,50,51,83,82,4,51,45,77,83,4,51,52,84,83,4,56,50,82,88,4,57,51,83,89,4,6,5,11,12,4,7,6,12,13,4,8,7,13,14,4,12,11,17,18,4,13,12,18,19,4,14,13,19,20,4,18,17,23,24,4,19,18,24,25,4,20,19,25,26,4,70,69,75,76,4,71,70,76,77,4,72,71,77,78,4,76,75,81,82,4,77,76,82,83,4,78,77,83,84,4,82,81,87,88,4,83,82,88,89,4,84,83,89,90])
4427         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4428         d=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,702,707,712,717,722,727,732,737,742,747,752,757,762,767,772,777,782,787,792,797,802,807,812,817,822,827,832,837,842,847,852,857,862,867,872,877,882,887,892,897,902,907,912,917,922])
4429         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4430         d=DataArrayInt([1,1,0,1,0,5,1,5,1,1,5,6,1,6,1,1,2,1,1,6,2,1,6,7,1,7,2,1,3,2,1,7,3,1,7,8,1,8,3,1,5,4,1,4,10,1,10,5,1,10,11,1,11,5,1,9,8,1,8,14,1,14,9,1,14,15,1,15,9,1,10,16,1,16,11,1,16,17,1,17,11,1,14,20,1,20,15,1,20,21,1,21,15,1,16,22,1,22,17,1,22,23,1,23,17,1,20,26,1,26,21,1,26,27,1,27,21,1,24,23,1,23,28,1,28,24,1,28,29,1,29,24,1,25,24,1,29,25,1,29,30,1,30,25,1,26,25,1,30,26,1,30,31,1,31,26,1,11,12,1,12,6,1,12,13,1,13,7,1,13,14,1,17,18,1,18,12,1,18,19,1,19,13,1,19,20,1,24,18,1,25,19,1,65,64,1,64,69,1,69,65,1,69,70,1,70,65,1,66,65,1,70,66,1,70,71,1,71,66,1,67,66,1,71,67,1,71,72,1,72,67,1,69,68,1,68,74,1,74,69,1,74,75,1,75,69,1,73,72,1,72,78,1,78,73,1,78,79,1,79,73,1,74,80,1,80,75,1,80,81,1,81,75,1,78,84,1,84,79,1,84,85,1,85,79,1,80,86,1,86,81,1,86,87,1,87,81,1,84,90,1,90,85,1,90,91,1,91,85,1,88,87,1,87,92,1,92,88,1,92,93,1,93,88,1,89,88,1,93,89,1,93,94,1,94,89,1,90,89,1,94,90,1,94,95,1,95,90,1,75,76,1,76,70,1,76,77,1,77,71,1,77,78,1,81,82,1,82,76,1,82,83,1,83,77,1,83,84,1,88,82,1,89,83])
4431         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4432         d=DataArrayInt(129) ; d.iota() ; d*=3
4433         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4434         #
4435         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4436         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4437         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4438         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4439         self.assertTrue(mm3D.getGroupArr(-2,"grp1").isEqualWithoutConsideringStr(DataArrayInt([0,1,5,9,12,13,14,18,22,23,30,31,33,37,38,40,42,46,50,51])))
4440         self.assertTrue(mm3D.getGroupArr(-2,"grp1_top").isEqualWithoutConsideringStr(DataArrayInt([64,65,69,73,76,77,78,82,86,87,94,95,97,101,102,104,106,110,114,115])))
4441         self.assertTrue(mm3D.getGroupArr(0,"grp0_extruded").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,24,25,26,27,28,29,48,49,50,57,58,59])))
4442         self.assertTrue(mm3D.getGroupArr(-1,"grp1_extruded").isEqualWithoutConsideringStr(DataArrayInt([48,49,53,57,60,61,62,66,70,71,78,79,81,85,86,88,90,94,98,99,112,113,117,121,124,125,126,130,134,135,142,143,145,149,150,152,154,158,162,163])))
4443         mm3D.setName("MeshExtruded")
4444         mm3D.write(fileName,0)
4445         pass
4446
4447     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4448     @WriteInTmpDir
4449     def testMEDFileUMeshPickeling1(self):
4450         outFileName="Pyfile86.med"
4451         c=DataArrayDouble([-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ],9,2)
4452         c.setInfoOnComponents(["aa","bbb"])
4453         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4454         m=MEDCouplingUMesh();
4455         m.setMeshDimension(2);
4456         m.allocateCells(5);
4457         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4458         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4459         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4460         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4461         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4462         m.finishInsertingCells();
4463         m.setCoords(c)
4464         m.checkConsistencyLight()
4465         m1=MEDCouplingUMesh.New();
4466         m1.setMeshDimension(1);
4467         m1.allocateCells(3);
4468         m1.insertNextCell(NORM_SEG2,2,[1,4])
4469         m1.insertNextCell(NORM_SEG2,2,[3,6])
4470         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4471         m1.finishInsertingCells();
4472         m1.setCoords(c)
4473         m1.checkConsistencyLight()
4474         m2=MEDCouplingUMesh.New();
4475         m2.setMeshDimension(0);
4476         m2.allocateCells(4);
4477         m2.insertNextCell(NORM_POINT1,1,[1])
4478         m2.insertNextCell(NORM_POINT1,1,[3])
4479         m2.insertNextCell(NORM_POINT1,1,[2])
4480         m2.insertNextCell(NORM_POINT1,1,[6])
4481         m2.finishInsertingCells();
4482         m2.setCoords(c)
4483         m2.checkConsistencyLight()
4484         #
4485         mm=MEDFileUMesh.New()
4486         self.assertTrue(mm.getUnivNameWrStatus())
4487         mm.setName("MyFirstMEDCouplingMEDmesh")
4488         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4489         mm.setCoords(c)
4490         mm[-1]=m1;
4491         mm[0]=m;
4492         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4493         mm[-2]=m2;
4494         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4495         # playing with groups
4496         g1_2=DataArrayInt.New()
4497         g1_2.setValues([1,3],2,1)
4498         g1_2.setName("G1")
4499         g2_2=DataArrayInt.New()
4500         g2_2.setValues([1,2,3],3,1)
4501         g2_2.setName("G2")
4502         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4503         g1_1=DataArrayInt.New()
4504         g1_1.setValues([0,1,2],3,1)
4505         g1_1.setName("G1")
4506         g2_1=DataArrayInt.New()
4507         g2_1.setValues([0,2],2,1)
4508         g2_1.setName("G2")
4509         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4510         g1_N=DataArrayInt.New()
4511         g1_N.setValues(list(range(8)),8,1)
4512         g1_N.setName("G1")
4513         g2_N=DataArrayInt.New()
4514         g2_N.setValues(list(range(9)),9,1)
4515         g2_N.setName("G2")
4516         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4517         mm.createGroupOnAll(0,"GrpOnAllCell")
4518         # check content of mm
4519         t=mm.getGroupArr(0,"G1",False)
4520         self.assertTrue(g1_2.isEqual(t));
4521         t=mm.getGroupArr(0,"G2",False)
4522         self.assertTrue(g2_2.isEqual(t));
4523         t=mm.getGroupArr(-1,"G1",False)
4524         self.assertTrue(g1_1.isEqual(t));
4525         t=mm.getGroupArr(-1,"G2",False)
4526         self.assertTrue(g2_1.isEqual(t));
4527         t=mm.getGroupArr(1,"G1",False)
4528         self.assertTrue(g1_N.isEqual(t));
4529         t=mm.getGroupArr(1,"G2",False)
4530         self.assertTrue(g2_N.isEqual(t));
4531         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4532         t=mm.getGroupArr(0,"GrpOnAllCell")
4533         #
4534         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4535         mm2=pickle.loads(st)
4536         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4537         self.assertEqual(mm.getAxisType(),AX_CART)
4538         #
4539         mm.setAxisType(AX_CYL)
4540         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4541         mm2=pickle.loads(st)
4542         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4543         self.assertEqual(mm2.getAxisType(),AX_CYL)
4544         pass
4545
4546     @WriteInTmpDir
4547     def testMEDFileFieldsLoadSpecificEntities1(self):
4548         nbNodes=11
4549         fieldName="myField"
4550         fileName="Pyfile87.med"
4551         nbPdt=10
4552         meshName="Mesh"
4553         #
4554         m=MEDCouplingCMesh()
4555         arr=DataArrayDouble(nbNodes) ; arr.iota()
4556         m.setCoords(arr)
4557         m=m.buildUnstructured()
4558         m.setName(meshName)
4559         #
4560         fmts=MEDFileFieldMultiTS()
4561         for i in range(nbPdt):
4562             f=MEDCouplingFieldDouble(ON_NODES)
4563             f.setMesh(m)
4564             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4565             f.setArray(arr)
4566             f.setName(fieldName)
4567             f.setTime(float(i),i,0)
4568             fmts.appendFieldNoProfileSBT(f)
4569             pass
4570         #
4571         mm=MEDFileUMesh() ; mm[0]=m
4572         fmts.write(fileName,2)
4573         mm.write(fileName,0)
4574         #
4575         fs=MEDFileFields(fileName,False)
4576         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4577         fs.loadArraysIfNecessary()
4578         fs2.loadArraysIfNecessary()
4579         for i in range(nbPdt):
4580             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4581             pass
4582         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4583         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4584         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4585         fmts=MEDFileFieldMultiTS()
4586         for i in range(nbPdt):
4587             f=MEDCouplingFieldDouble(ON_CELLS)
4588             f.setMesh(m3)
4589             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4590             f.setArray(arr)
4591             f.setName(fieldName)
4592             f.setTime(float(i),i,0)
4593             fmts.appendFieldNoProfileSBT(f)
4594             pass
4595         mm=MEDFileUMesh() ; mm[0]=m3
4596         del mm[0]
4597         self.assertEqual(mm.getNonEmptyLevels(),())
4598         mm[0]=m3
4599         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4600         fmts.write(fileName,2)
4601         fs=MEDFileFields(fileName,False)
4602         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4603         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4604         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4605         fs.loadArraysIfNecessary()
4606         fs2.loadArraysIfNecessary()
4607         fs3.loadArraysIfNecessary()
4608         fs4.loadArraysIfNecessary()
4609         for i in range(nbPdt):
4610             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4611             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4612             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4613             pass
4614         pass
4615
4616     @WriteInTmpDir
4617     def testMEDFileLotsOfTSRW1(self):
4618         nbNodes=11
4619         fieldName="myField"
4620         fileName="Pyfile88.med"
4621         nbPdt=300 # <- perftest = 30000
4622         meshName="Mesh"
4623         #
4624         maxPdt=100 # <- optimum = 500
4625         m=MEDCouplingCMesh()
4626         arr=DataArrayDouble(nbNodes) ; arr.iota()
4627         m.setCoords(arr)
4628         m=m.buildUnstructured()
4629         m.setName(meshName)
4630         #
4631         nbOfField=nbPdt//maxPdt
4632         fs=MEDFileFields()
4633         for j in range(nbOfField):
4634             fmts=MEDFileFieldMultiTS()
4635             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4636             for i in range(s.start, s.stop, s.step):
4637                 f=MEDCouplingFieldDouble(ON_NODES)
4638                 f.setMesh(m)
4639                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4640                 f.setArray(arr)
4641                 f.setName("%s_%d"%(fieldName,j))
4642                 f.setTime(float(i),i,0)
4643                 fmts.appendFieldNoProfileSBT(f)
4644                 pass
4645             fs.pushField(fmts)
4646             pass
4647         #
4648         mm=MEDFileUMesh() ; mm[0]=m
4649         fs.write(fileName,2)
4650         mm.write(fileName,0)
4651         ############
4652         def appendInDict(d,key,val):
4653             if key in d:
4654                 d[key].append(val)
4655             else:
4656                 d[key]=[val]
4657             pass
4658         import re
4659         allFields=GetAllFieldNames(fileName)
4660         allFieldsDict={}
4661         pat=re.compile("([\d]+)([\s\S]+)$")
4662         for st in allFields:
4663             stRev=st[::-1]
4664             m=pat.match(stRev)
4665             if m:
4666                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4667                 pass
4668             else:
4669                 appendInDict(allFieldsDict,st,'')
4670                 pass
4671             pass
4672         fs2=MEDFileFields()
4673         for k in allFieldsDict:
4674             if allFieldsDict[k]!=['']:
4675                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4676                 pass
4677             fmts2=[]
4678             for it in allFieldsDict[k]:
4679                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4680                 pass
4681             fmts2.reverse()
4682             zeResu=fmts2.pop()
4683             nbIter=len(fmts2)
4684             for ii in range(nbIter):
4685                 zeResu.pushBackTimeSteps(fmts2.pop())
4686                 pass
4687             zeResu.setName(k)
4688             fs2.pushField(zeResu)
4689             pass
4690         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4691         pass
4692
4693     @WriteInTmpDir
4694     def testMEDFileMeshRearrangeFamIds1(self):
4695         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4696         fileName="Pyfile89.med"
4697         meshName='Maillage_2'
4698         mm=MEDFileUMesh()
4699         coords=DataArrayDouble([(0.,0.,0.),(0.,0.,200.),(0.,200.,200.),(0.,200.,0.),(200.,0.,0.),(200.,0.,200.),(200.,200.,200.),(200.,200.,0.),(0.,0.,100.),(0.,100.,200.),(0.,200.,100.),(0.,100.,0.),(200.,0.,100.),(200.,100.,200.),(200.,200.,100.),(200.,100.,0.),(100.,0.,0.),(100.,0.,200.),(100.,200.,0.),(100.,200.,200.),(0.,116.87743909766768,83.12256090233232),(200.,116.87743909766768,83.12256090233232),(116.87743909766769,0.,116.87743909766769),(116.87743909766769,200.,116.87743909766769),(116.87743909766769,116.87743909766769,0.),(116.87743909766769,116.87743909766769,200.),(63.3851584383713,56.1391811199829,119.728314479261),(138.008709441123,116.039297556044,119.903790959468)])
4700         #
4701         c0=DataArrayInt([14,1,26,9,8,14,17,26,1,8,14,27,26,17,22,14,26,16,20,8,14,8,0,16,11,14,16,20,11,24,14,25,20,26,27,14,22,26,24,27,14,26,16,22,24,14,8,26,22,17,14,20,9,25,26,14,19,20,25,23,14,23,6,27,25,14,19,23,10,20,14,27,22,21,24,14,27,21,14,18,14,26,9,25,17,14,13,27,25,17,14,27,18,24,21,14,22,21,15,12,14,27,20,24,18,14,23,25,27,20,14,13,27,6,25,14,23,27,6,14,14,15,16,22,12,14,27,17,13,22,14,22,27,21,13,14,24,16,22,15,14,24,18,7,21,14,12,4,15,16,14,22,12,5,13,14,8,26,16,22,14,13,27,21,14,14,20,18,10,3,14,14,27,18,23,14,14,27,6,13,14,21,22,13,12,14,25,26,17,27,14,19,9,25,20,14,26,24,20,16,14,22,24,15,21,14,9,26,1,17,14,23,27,18,20,14,20,11,18,3,14,14,18,21,7,14,19,2,9,10,14,19,23,25,6,14,18,23,20,10,14,20,26,8,9,14,22,13,5,17,14,24,11,18,20,14,21,15,7,24,14,19,20,10,9,14,20,26,27,24,14,16,8,11,20])
4702         c0i=DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275])
4703         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4704         m0.setConnectivity(c0,c0i)
4705         mm[0]=m0
4706         #
4707         c1=DataArrayInt([3,8,20,11,3,8,9,20,3,9,2,10,3,20,9,10,3,0,8,11,3,9,8,1,3,20,10,3,3,11,20,3,3,15,21,12,3,5,12,13,3,21,13,12,3,15,12,4,3,14,6,13,3,14,13,21,3,7,14,21,3,7,21,15,3,5,22,12,3,4,12,16,3,17,1,8,3,16,8,0,3,5,17,22,3,12,22,16,3,22,17,8,3,16,22,8,3,10,2,19,3,7,18,14,3,14,23,6,3,3,10,18,3,23,19,6,3,18,23,14,3,10,19,23,3,10,23,18,3,3,18,11,3,7,24,18,3,15,4,16,3,11,16,0,3,7,15,24,3,18,24,11,3,24,15,16,3,11,24,16,3,9,19,2,3,19,25,6,3,17,5,13,3,1,17,9,3,25,13,6,3,9,25,19,3,17,13,25,3,17,25,9])
4708         c1i=DataArrayInt([0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192])
4709         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4710         m1.setConnectivity(c1,c1i)
4711         mm[-1]=m1
4712         #
4713         c2=DataArrayInt([0,8,8,1,1,9,9,2,3,10,10,2,0,11,11,3,4,12,12,5,5,13,13,6,7,14,14,6,4,15,15,7,0,16,16,4,1,17,17,5,3,18,18,7,2,19,19,6])
4714         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4715         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4716         mm[-2]=m2.buildUnstructured()
4717         #
4718         ref0=DataArrayInt(55) ; ref0[:]=0
4719         mm.setFamilyFieldArr(0,ref0)
4720         mm.setFamilyFieldArr(1,DataArrayInt([0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
4721         ref1=DataArrayInt([0,0,0,0,0,0,0,0,-6,-6,-6,-6,-6,-6,-6,-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4722         mm.setFamilyFieldArr(-1,ref1)
4723         ref2=DataArrayInt([0,0,-7,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
4724         mm.setFamilyFieldArr(-2,ref2)
4725         #
4726         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4727             mm.setFamilyId(f,fid)
4728         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4729             mm.setFamiliesOnGroup(grp,fams)
4730         mm.write(fileName,2)
4731         #
4732         mm=MEDFileMesh.New(fileName)
4733         grp=mm.getGroup(-1,"Groupe_1")
4734         dai=grp.computeFetchedNodeIds()
4735         dai.setName("TOTO")
4736         mm.addGroup(1,dai)
4737         mm.rearrangeFamilies() # <- the aim of the test
4738         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4739         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4740         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4741         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4742         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([0,0,2,0,9,9,9,9,0,0,0,0,9,9,9,9,0,0,0,0,0,9,0,0,0,0,0,0])))
4743         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4744         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4745         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4746         for elt,fams in allGrps:
4747             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4748         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4749         for elt,eltId in allFams:
4750             self.assertEqual(mm.getFamilyId(elt),eltId)
4751         pass
4752
4753     @WriteInTmpDir
4754     def testNonRegrCMeshSetFieldPfl1(self):
4755         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4756         ff=MEDFileField1TS()
4757         meshName="mesh"
4758         mm=MEDFileCMesh()
4759         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4760         m.setCoords(arr)
4761         m.setName(meshName)
4762         mm.setMesh(m)
4763         field=MEDCouplingFieldDouble(ON_CELLS)
4764         field.setMesh(m)
4765         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4766         field.setName("Field")
4767         field.checkConsistencyLight()
4768         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4769         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4770         self.assertEqual(ff.getPfls(),())
4771         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4772         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4773         del ff,mm,field,field2,pfl
4774         # same with unstructured mesh
4775         ff=MEDFileField1TS()
4776         meshName="mesh"
4777         mm=MEDFileUMesh()
4778         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4779         m.setCoords(arr)
4780         m.setName(meshName)
4781         m=m.buildUnstructured()
4782         mm[0]=m
4783         field=MEDCouplingFieldDouble(ON_CELLS)
4784         field.setMesh(m)
4785         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4786         field.setName("Field")
4787         field.checkConsistencyLight()
4788         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4789         ff.setFieldProfile(field,mm,0,pfl)
4790         self.assertEqual(ff.getPfls(),())
4791         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4792         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4793         pass
4794
4795     @WriteInTmpDir
4796     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4797         meshName="mesh"
4798         fileName="Pyfile90.med"
4799         fileName2="Pyfile91.med"
4800         arr=DataArrayDouble(5) ; arr.iota()
4801         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4802         m=m.buildUnstructured()
4803         d=DataArrayInt([3,7,11,15])
4804         m1=m[d]
4805         m1.simplexize(0)
4806         m2=m[d.buildComplement(m.getNumberOfCells())]
4807         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4808         m.changeSpaceDimension(3,0.)
4809         arr=DataArrayDouble(3) ; arr.iota()
4810         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4811         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4812         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4813         m3D=m.buildExtrudedMesh(m1D,0)
4814         m3D.sortCellsInMEDFileFrmt()
4815         m3D.setName(meshName)
4816         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4817         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4818         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4819         #
4820         mm=MEDFileUMesh()
4821         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4822         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4823         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4824         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4825         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4826         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4827         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4828         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4829         mm.setGroupsAtLevel(0,[vol1,vol2])
4830         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4831         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4832         #
4833         mmOut1=mm.linearToQuadratic(0,0.)
4834         mmOut1.write(fileName2,2)
4835         mmOut2=mmOut1.quadraticToLinear(0.)
4836         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4837         pass
4838
4839     @WriteInTmpDir
4840     def testMEDFileMeshAddGroup1(self):
4841         m=MEDCouplingCMesh()
4842         arrX=DataArrayDouble(9) ; arrX.iota()
4843         arrY=DataArrayDouble(4) ; arrY.iota()
4844         m.setCoords(arrX,arrY)
4845         m.setName("mesh")
4846         mm=MEDFileCMesh()
4847         mm.setMesh(m)
4848         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4849         mm.addGroup(0,grp0)
4850         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4851         mm.addGroup(0,grp1)
4852         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4853         mm.addGroup(0,grp2)
4854         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4855         mm.addGroup(0,grp3)
4856         for grp in [grp0,grp1,grp2,grp3]:
4857             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4858         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4859         delta=12
4860         for grp in [grp0,grp1,grp2,grp3]:
4861             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4862             mm.addGroup(1,grpNode)
4863         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4864         for grp in [grp0,grp1,grp2,grp3]:
4865             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4866         for grp in [grp0,grp1,grp2,grp3]:
4867             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4868             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4869         mm.normalizeFamIdsMEDFile()
4870         for grp in [grp0,grp1,grp2,grp3]:
4871             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4872         for grp in [grp0,grp1,grp2,grp3]:
4873             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4874             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4875         pass
4876
4877     @WriteInTmpDir
4878     def testMEDFileJoint1(self):
4879         fileName="Pyfile92.med"
4880         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4881         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4882         mm=MEDFileUMesh()
4883         mm.setCoords(coo)
4884         mm.setName("maa1")
4885         mm.setDescription("un maillage")
4886         mm.write(fileName,2)
4887         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4888         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4889         one_step_joint=MEDFileJointOneStep()
4890         one_step_joint.pushCorrespondence(cell_correspond)
4891         one_step_joint.pushCorrespondence(node_correspond)
4892         one_joint=MEDFileJoint()
4893         one_joint.pushStep(one_step_joint)
4894         one_joint.setLocalMeshName("maa1")
4895         one_joint.setRemoteMeshName("maa1")
4896         one_joint.setDescription("joint_description")
4897         one_joint.setJointName("joint_1")
4898         one_joint.setDomainNumber(1)
4899         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4900         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4901         self.assertEqual( one_joint.getDescription(), "joint_description")
4902         self.assertEqual( one_joint.getJointName(), "joint_1")
4903         self.assertEqual( one_joint.getDomainNumber(), 1)
4904         joints=MEDFileJoints()
4905         joints.pushJoint(one_joint);
4906         joints.write(fileName,0)
4907         # read back
4908         jointsR=MEDFileJoints(fileName,mm.getName())
4909         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4910         jR = jointsR.getJointAtPos(0)
4911         self.assertTrue( jR.isEqual( one_joint ))
4912         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4913         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4914         jointsR.destroyJointAtPos(0)
4915         pass
4916
4917     @WriteInTmpDir
4918     def testMEDFileJoint2(self):
4919         fileNameWr="Pyfile93.med"
4920         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4921         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4922         mm=MEDFileUMesh()
4923         mm.setCoords(coo)
4924         mm.setName("maa1")
4925         mm.setDescription("un maillage")
4926         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4927         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4928         one_step_joint=MEDFileJointOneStep()
4929         two_step_joint=MEDFileJointOneStep()
4930         one_joint=MEDFileJoint()
4931         two_joint=MEDFileJoint()
4932         one_step_joint.pushCorrespondence(node_correspond)
4933         one_joint.pushStep(one_step_joint)
4934         two_step_joint.pushCorrespondence(cell_correspond)
4935         two_step_joint.pushCorrespondence(node_correspond)
4936         two_joint.pushStep(two_step_joint)
4937         one_joint.setLocalMeshName("maa1")
4938         one_joint.setRemoteMeshName("maa1")
4939         one_joint.setDescription("joint_description_1")
4940         one_joint.setJointName("joint_1")
4941         one_joint.setDomainNumber(1)
4942         two_joint.setLocalMeshName("maa1")
4943         two_joint.setRemoteMeshName("maa1")
4944         two_joint.setDescription("joint_description_2")
4945         two_joint.setJointName("joint_2")
4946         two_joint.setDomainNumber(2)
4947         joints=MEDFileJoints()
4948         joints.pushJoint(one_joint)
4949         joints.pushJoint(two_joint)
4950         mm.setJoints( joints )
4951         mm.write(fileNameWr,2)
4952         #
4953         mm=MEDFileMesh.New(fileNameWr)
4954         self.assertEqual( mm.getNumberOfJoints(), 2)
4955         jointsR = mm.getJoints();
4956         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4957         self.assertEqual( len( jointsR ), 2 )
4958         jointR1 = jointsR[0]
4959         jointR2 = jointsR[1]
4960         self.assertFalse( jointR1 is None )
4961         self.assertFalse( jointR2 is None )
4962         self.assertTrue( jointR1.isEqual( one_joint ))
4963         self.assertTrue( jointR2.isEqual( two_joint ))
4964         pass
4965
4966     @WriteInTmpDir
4967     def testMEDFileJoint1(self):
4968         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4969         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4970         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4971         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4972         joint1st_1=MEDFileJointOneStep()
4973         joint1st_1.pushCorrespondence(cell_correspond)
4974         joint1st_1.pushCorrespondence(node_correspond)
4975         joint1st_2=MEDFileJointOneStep()
4976         joint1st_2.pushCorrespondence(cell_correspond)
4977         joint1st_2.pushCorrespondence(node_correspond)
4978         joint1st_3=MEDFileJointOneStep()
4979         joint1st_3.pushCorrespondence(node_correspond)
4980         joint1st_3.pushCorrespondence(cell_correspond)
4981         joint1st_4=MEDFileJointOneStep()
4982         joint1st_4.pushCorrespondence(cell_correspond)
4983         joint1st_5=MEDFileJointOneStep()
4984         joint1st_5.pushCorrespondence(cell_correspon2)
4985         joint1st_6=MEDFileJointOneStep()
4986         joint1st_6.pushCorrespondence(cell_correspon3)
4987         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4988         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4989         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4990         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4991         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4992         self.assertEqual(1,joint1st_6.getNumberOfCorrespondences())
4993         joint1st_6.clearCorrespondences()
4994         self.assertEqual(0,joint1st_6.getNumberOfCorrespondences())
4995         one_joint=MEDFileJoint()
4996         one_joint.pushStep(joint1st_1)
4997         one_joint.setLocalMeshName("maa1")
4998         one_joint.setRemoteMeshName("maa2")
4999         one_joint.setDescription("joint_description")
5000         one_joint.setJointName("joint_1")
5001         one_joint.setDomainNumber(1)
5002         self.assertEqual( "maa1", one_joint.getLocalMeshName())
5003         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5004         self.assertEqual( "joint_description", one_joint.getDescription())
5005         self.assertEqual( 1, one_joint.getDomainNumber())
5006         self.assertEqual( "joint_1", one_joint.getJointName())
5007         pass
5008
5009     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5010     @WriteInTmpDir
5011     def testMEDFileSafeCall0(self):
5012         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5013         fname="Pyfile94.med"
5014         errfname="Pyfile94.err"
5015
5016         import os
5017         # first clean file if needed
5018         if os.path.exists(fname):
5019             os.remove(fname)
5020             pass
5021         # second : build a file from scratch
5022         m=MEDCouplingCMesh()
5023         arr=DataArrayDouble(11) ; arr.iota()
5024         m.setCoords(arr,arr)
5025         mm=MEDFileCMesh()
5026         mm.setMesh(m)
5027         mm.setName("mesh")
5028         mm.write(fname,2)
5029         # third : change permissions to remove write access on created file
5030         os.chmod(fname, 0o444)
5031         # four : try to append data on file -> check that it raises Exception
5032         f=MEDCouplingFieldDouble(ON_CELLS)
5033         f.setName("field")
5034         f.setMesh(m)
5035         f.setArray(DataArrayDouble(100))
5036         f.getArray()[:]=100.
5037         f.checkConsistencyLight()
5038         f1ts=MEDFileField1TS()
5039         f1ts.setFieldNoProfileSBT(f)
5040         # redirect stderr
5041         tmp=StdOutRedirect(errfname)
5042         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5043         del tmp
5044         #
5045         if os.path.exists(errfname):
5046             os.remove(errfname)
5047         #
5048         pass
5049
5050     @WriteInTmpDir
5051     def testUnivStatus1(self):
5052         """ Non regression test to check the effectiveness of univ write status."""
5053         fname="Pyfile95.med"
5054         arr=DataArrayDouble(10) ; arr.iota()
5055         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5056         mm=MEDFileCMesh() ; mm.setMesh(m)
5057         mm.setUnivNameWrStatus(False) # test is here
5058         mm.write(fname,2)
5059         mm=MEDFileCMesh(fname)
5060         self.assertEqual(mm.getUnivName(),"")
5061         mm.setUnivNameWrStatus(True)
5062         mm.write(fname,2)
5063         mm=MEDFileCMesh(fname)
5064         self.assertTrue(mm.getUnivName()!="")
5065         pass
5066
5067     @WriteInTmpDir
5068     def testEmptyMesh(self):
5069       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5070       with 0 tuples """
5071       fname = "Pyfile96.med"
5072       m = MEDCouplingUMesh('toto', 2)
5073       m.setCoords(DataArrayDouble([], 0, 2))
5074       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5075       mfu = MEDFileUMesh()
5076       mfu.setMeshAtLevel(0, m)
5077       mfu.write(fname, 2)
5078       mfu2 = MEDFileUMesh(fname)
5079       self.assertEqual('toto', mfu2.getName())
5080       lvl = mfu2.getNonEmptyLevels()
5081       self.assertEqual((), lvl)
5082
5083     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5084     def testMEDFileUMeshPickeling2(self):
5085       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5086       name="Mesh_1"
5087       grpName1="HAUT"
5088       grpName2="BASE"
5089       hauteur=1.
5090       nbOfNodesPerAxis=3
5091       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5092       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5093       mesh=MEDFileUMesh() ; mesh[0]=m
5094       m1=m.computeSkin() ; mesh[-1]=m1
5095       #
5096       bary1=m1.computeCellCenterOfMass()[:,2]
5097       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5098       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5099       mesh.setGroupsAtLevel(-1,[grp1,grp2])
5100
5101       st=pickle.dumps(mesh,2)
5102       mm=pickle.loads(st)
5103       st2=pickle.dumps(mm,2)
5104       mm2=pickle.loads(st2)
5105       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5106       pass
5107
5108     @WriteInTmpDir
5109     def testMEDFileEquivalence1(self):
5110       """ First check of equivalence implementation in MEDFileMesh"""
5111       fileName="Pyfile97.med"
5112       meshName="M_01"
5113       mm=MEDFileUMesh()
5114       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)])
5115       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5116       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])
5117       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5118       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])
5119       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5120       mm.getFamilyFieldAtLevel(-1)[:]=-2
5121       mm.getFamilyFieldAtLevel(0)[:]=0
5122       mm.addFamily("HOMARD________-1",-1)
5123       mm.addFamily("HOMARD________-2",-2)
5124       mm.addFamily("HOMARD________-3",-3)
5125       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5126
5127       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5128       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."
5129       mm.initializeEquivalences()
5130       eqs=mm.getEquivalences()
5131       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5132       eq0.setDescription(descEq)
5133       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)])
5134       eq0.setArray(-1,corr)
5135       self.assertEqual(eq0.getCell().size(),1)
5136       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5137       eq0.getCell().clear()
5138       self.assertEqual(eq0.getCell().size(),0)
5139       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5140       self.assertEqual(eq0.getCell().size(),1)
5141       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5142       mm.killEquivalences()
5143       mm.initializeEquivalences()
5144       eqs=mm.getEquivalences()
5145       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5146       eq0.setDescription(descEq)
5147       c=eq0.initCell()
5148       c.setArrayForType(NORM_QUAD4,corr)
5149       self.assertEqual(eq0.getCell().size(),1)
5150       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5151       mm2=mm.deepCopy()
5152       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5153       self.assertEqual(mm2.getEquivalences().size(),1)
5154       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5155       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5156       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5157       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5158       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5159       mm.write(fileName,2)
5160       #
5161       mm3=MEDFileMesh.New(fileName)
5162       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5163       pass
5164
5165     @WriteInTmpDir
5166     def testMEDFileForFamiliesPlayer1(self):
5167       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5168       fileName="Pyfile98.med"
5169       meshName="mesh"
5170       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5171       arr=DataArrayDouble(4) ; arr.iota()
5172       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5173       m=m.buildUnstructured()
5174       mm=MEDFileUMesh()
5175       mm[0]=m
5176       mm.setName(meshName)
5177       mm.setFamilyId("FAMILLE_ZERO",0)
5178       mm.getFamilyFieldAtLevel(0)[-3:]=-4
5179       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5180       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5181       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5182       mm.setFamilyFieldArr(1,d)
5183       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5184       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5185       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5186       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5187       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5188       mm.write(fileName,2)
5189       # now read such funny file !
5190       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5191       self.assertTrue(mm.isEqual(mm2,1e-16))
5192       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5193       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5194       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5195       pass
5196
5197     @WriteInTmpDir
5198     def testCartesianizer1(self):
5199       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5200       # UMesh non cart
5201       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5202       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5203       d0=DataArrayInt(16) ; d0[:]=0
5204       d1=DataArrayInt(9)  ; d1[:]=0
5205       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5206       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5207       ref0=mm.getCoords().getHiddenCppPointer()
5208       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5209       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5210       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5211       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5212       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5213       mm.setAxisType(AX_CYL) #<- important
5214       mm2=mm.cartesianize() # the trigger
5215       self.assertEqual(mm2.getAxisType(),AX_CART)
5216       mm.setAxisType(AX_CART) # this is here only to avoid complaints
5217       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5218       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5219       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5220       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5221       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5222       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5223       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5224       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5225       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5226       self.assertEqual(mm2.getName(),mm.getName())
5227       self.assertEqual(mm2.getDescription(),mm.getDescription())
5228       self.assertEqual(mm2.getTime(),mm.getTime())
5229       self.assertEqual(mm2.getTime(),mm.getTime())
5230       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5231       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5232       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5233       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5234       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5235       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5236       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5237       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5238       # UMesh cart
5239       mm.setAxisType(AX_CART)
5240       mm2=mm.cartesianize() # the trigger
5241       self.assertEqual(mm2.getAxisType(),AX_CART)
5242       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5243       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5244       # CurveLinearMesh non cart
5245       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5246       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5247       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5248       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5249       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5250       mm2=mm.cartesianize() # the trigger
5251       self.assertEqual(mm2.getAxisType(),AX_CART)
5252       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5253       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5254       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5255       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5256       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5257       self.assertEqual(mm2.getName(),mm.getName())
5258       self.assertEqual(mm2.getDescription(),mm.getDescription())
5259       self.assertEqual(mm2.getTime(),mm.getTime())
5260       self.assertEqual(mm2.getTime(),mm.getTime())
5261       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5262       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5263       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5264       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5265       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5266       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5267       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5268       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5269       # CurveLinearMesh cart
5270       mm.setAxisType(AX_CART)
5271       mm2=mm.cartesianize() # the trigger
5272       self.assertEqual(mm2.getAxisType(),AX_CART)
5273       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5274       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5275       # CMesh non cart
5276       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5277       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5278       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5279       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5280       mm2=mm.cartesianize() # the trigger
5281       self.assertEqual(mm2.getAxisType(),AX_CART)
5282       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5283       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5284       self.assertEqual(mm2.getName(),mm.getName())
5285       self.assertEqual(mm2.getDescription(),mm.getDescription())
5286       self.assertEqual(mm2.getTime(),mm.getTime())
5287       self.assertEqual(mm2.getTime(),mm.getTime())
5288       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5289       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5290       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5291       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5292       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5293       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5294       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5295       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5296       # CMesh cart
5297       mm.setAxisType(AX_CART)
5298       mm2=mm.cartesianize() # the trigger
5299       self.assertEqual(mm2.getAxisType(),AX_CART)
5300       self.assertTrue(isinstance(mm2,MEDFileCMesh))
5301       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5302       pass
5303
5304     @WriteInTmpDir
5305     def testCheckCoherency(self):
5306       m2 = MEDCouplingUMesh("2d", 2)
5307       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5308       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5309       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5310       mum = MEDFileUMesh()
5311       mum.setMeshAtLevel(0, m2)
5312       mum.setMeshAtLevel(-1, m1)
5313       mum.checkConsistency()
5314       mum2 = mum.deepCopy()
5315
5316       # Nodes
5317       arr = DataArrayInt([2]*4)
5318       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5319       self.assertRaises(InterpKernelException, mum.checkConsistency)
5320       mum=mum2; mum2=mum.deepCopy();
5321       arr = DataArrayInt([2]*4)
5322       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5323       self.assertRaises(InterpKernelException, mum.checkConsistency)
5324       mum=mum2; mum2=mum.deepCopy();
5325       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5326       self.assertRaises(InterpKernelException, mum.checkConsistency)
5327       mum=mum2; mum2=mum.deepCopy();
5328       arr = DataArrayAsciiChar(['tutu           x']*4)
5329       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5330       self.assertRaises(InterpKernelException, mum.checkConsistency)
5331
5332       # 2D
5333       mum=mum2; mum2=mum.deepCopy();
5334       arr = DataArrayInt([2]*2)
5335       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5336       self.assertRaises(InterpKernelException, mum.checkConsistency)
5337       mum=mum2; mum2=mum.deepCopy();
5338       arr = DataArrayInt([2]*2)
5339       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5340       self.assertRaises(InterpKernelException, mum.checkConsistency)
5341       mum=mum2; mum2=mum.deepCopy();
5342       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5343       self.assertRaises(InterpKernelException, mum.checkConsistency)
5344       mum=mum2; mum2=mum.deepCopy();
5345       arr = DataArrayAsciiChar(['tutu           x']*2)
5346       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5347       self.assertRaises(InterpKernelException, mum.checkConsistency)
5348
5349       # 1D
5350       mum=mum2; mum2=mum.deepCopy();
5351       arr = DataArrayInt([2]*5)
5352       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5353       self.assertRaises(InterpKernelException, mum.checkConsistency)
5354       mum=mum2; mum2=mum.deepCopy();
5355       arr = DataArrayInt([2]*5)
5356       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5357       self.assertRaises(InterpKernelException, mum.checkConsistency)
5358       mum=mum2; mum2=mum.deepCopy();
5359       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5360       self.assertRaises(InterpKernelException, mum.checkConsistency)
5361       mum=mum2; mum2=mum.deepCopy();
5362       arr = DataArrayAsciiChar(['tutu           x']*5)
5363       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5364       self.assertRaises(InterpKernelException, mum.checkConsistency)
5365
5366     @WriteInTmpDir
5367     def testCheckSMESHConsistency(self):
5368       m2 = MEDCouplingUMesh("2d", 2)
5369       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5370       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5371       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5372       mum = MEDFileUMesh()
5373       mum.setMeshAtLevel(0, m2)
5374       mum.setMeshAtLevel(-1, m1)
5375       mum.checkConsistency()
5376       mum.checkSMESHConsistency()
5377       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5378       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5379       mum.setRenumFieldArr(0, n2)
5380       mum.setRenumFieldArr(-1, n1)
5381       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5382       mum.setRenumFieldArr(-1, n1+100)
5383       mum.checkSMESHConsistency()
5384       pass
5385
5386     @WriteInTmpDir
5387     def testClearNodeAndCellNumbers(self):
5388       m2 = MEDCouplingUMesh("2d", 2)
5389       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5390       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5391       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5392       mum = MEDFileUMesh()
5393       mum.setMeshAtLevel(0, m2)
5394       mum.setMeshAtLevel(-1, m1)
5395       mum.checkConsistency()
5396       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5397       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5398       mum.setRenumFieldArr(0, n2)
5399       mum.setRenumFieldArr(-1, n1)
5400       mum.clearNodeAndCellNumbers()
5401       mum.checkSMESHConsistency()
5402       pass
5403
5404     @WriteInTmpDir
5405     def testCMeshSetFamilyFieldArrNull(self):
5406       meshName="mesh"
5407       fname="Pyfile99.med"
5408       arrX=DataArrayDouble([0,1,2,3])
5409       arrY=DataArrayDouble([0,1,2])
5410       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5411       mm=MEDFileCMesh() ; mm.setMesh(m)
5412       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5413       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5414       mm.setFamilyFieldArr(0,famCellIds)
5415       mm.setFamilyFieldArr(1,famNodeIds)
5416       mm.write(fname,2)
5417       mm=MEDFileMesh.New(fname)
5418       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5419       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5420       mm.setFamilyFieldArr(0,None)#<- bug was here
5421       mm.setFamilyFieldArr(1,None)#<- bug was here
5422       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5423       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5424       mm3=mm.deepCopy()
5425       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5426       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5427       mm.write(fname,2)
5428       mm2=MEDFileMesh.New(fname)
5429       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5430       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5431       pass
5432
5433     @WriteInTmpDir
5434     def testAppendFieldProfileOnIntField(self):
5435       fname="Pyfile100.med"
5436       arrX=DataArrayDouble([0,1,2,3])
5437       arrY=DataArrayDouble([0,1,2])
5438       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5439       mm=MEDFileCMesh()
5440       mm.setMesh(mesh)
5441       #
5442       fmts=MEDFileIntFieldMultiTS()
5443       pflName="PFL"
5444       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5445       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5446       fieldName="FieldOnCell"
5447       f.setTime(1.2,1,1) ; f.setName(fieldName)
5448       arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5449       fmts.appendFieldProfile(f,mm,0,pfl)
5450       #
5451       mm.write(fname,2)
5452       fmts.write(fname,0)
5453       #
5454       mm=MEDFileMesh.New(fname)
5455       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5456       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5457       self.assertEqual(fmts.getName(),fieldName)
5458       self.assertEqual(len(fmts),1)
5459       f1ts=fmts[0]
5460       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5461       self.assertEqual(pfltest.getName(),pflName)
5462       self.assertEqual(ftest.getName(),fieldName)
5463       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5464       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5465       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5466       self.assertEqual(ftest2.getTime(),f.getTime())
5467       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5468       pass
5469
5470     @WriteInTmpDir
5471     def testMEDFileFieldEasyField1(self):
5472       """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."""
5473       ## Basic test on cells on top level
5474       fname="Pyfile101.med"
5475       fieldName="field1"
5476       mm=MEDFileUMesh()
5477       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5478       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5479       m.allocateCells()
5480       m.insertNextCell(NORM_TRI3,[0,1,2])
5481       m.insertNextCell(NORM_TRI3,[3,4,5])
5482       m.insertNextCell(NORM_TRI3,[6,7,8])
5483       m.insertNextCell(NORM_TRI3,[9,10,11])
5484       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5485       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5486       mm[0]=m
5487       mm.write(fname,2)
5488       arr0=DataArrayDouble([10,11,12,13,100,101])
5489       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5490       f.setName(fieldName) ; f.setTime(2.,6,7)
5491       f0=f.deepCopy()
5492       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5493       ff.write(fname,0)
5494       arr2=arr0+1000 ; f.setArray(arr2)
5495       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5496       ff.write(fname,0)
5497       f1=f.deepCopy()
5498       ##
5499       mm=MEDFileMesh.New(fname)
5500       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5501       ftst0=f1ts.field(mm)
5502       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5503       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5504       ftst1=f1ts.field(mm)
5505       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5506       fmts=MEDFileFieldMultiTS(fname,fieldName)
5507       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5508       ## Basic test on nodes on top level
5509       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5510       f2.setName(fieldName)
5511       mm.write(fname,2)
5512       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5513       #
5514       mm=MEDFileMesh.New(fname)
5515       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5516       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5517       fmts=MEDFileFieldMultiTS(fname,fieldName)
5518       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5519       ## Node on elements
5520       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)
5521       f3.setName(fieldName) ; f3.checkConsistencyLight()
5522       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5523       #
5524       mm=MEDFileMesh.New(fname)
5525       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5526       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5527       ## Gauss
5528       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5529       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])
5530       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)
5531       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)
5532       f4.checkConsistencyLight()
5533       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5534       #
5535       mm=MEDFileMesh.New(fname)
5536       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5537       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5538       pass
5539
5540     @WriteInTmpDir
5541     def testMEDFileFieldEasyField2(self):
5542         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5543         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."""
5544         ## Basic test on cells on top level
5545         fname="Pyfile102.med"
5546         fieldName="field1"
5547         mm=MEDFileUMesh()
5548         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5549         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5550         m.allocateCells()
5551         m.insertNextCell(NORM_TRI3,[0,1,2])
5552         m.insertNextCell(NORM_TRI3,[3,4,5])
5553         m.insertNextCell(NORM_TRI3,[6,7,8])
5554         m.insertNextCell(NORM_TRI3,[9,10,11])
5555         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5556         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5557         mm[0]=m
5558         mm.write(fname,2)
5559         arr0=DataArrayInt32([10,11,12,13,100,101])
5560         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5561         f.setName(fieldName) ; f.setTime(2.,6,7)
5562         f0=f.deepCopy()
5563         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5564         ff.write(fname,0)
5565         arr2=arr0+1000 ; f.setArray(arr2)
5566         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5567         ff.write(fname,0)
5568         f1=f.deepCopy()
5569         ##
5570         mm=MEDFileMesh.New(fname)
5571         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5572         ftst0=f1ts.field(mm)
5573         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5574         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5575         ftst1=f1ts.field(mm)
5576         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5577         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5578         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5579         ## Basic test on nodes on top level
5580         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5581         f2.setName(fieldName)
5582         mm.write(fname,2)
5583         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5584         #
5585         mm=MEDFileMesh.New(fname)
5586         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5587         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5588         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5589         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5590         ## Node on elements
5591         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)
5592         f3.setName(fieldName) ; f3.checkConsistencyLight()
5593         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5594         #
5595         mm=MEDFileMesh.New(fname)
5596         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5597         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5598         ## Gauss
5599         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5600         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])
5601         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)
5602         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)
5603         f4.checkConsistencyLight()
5604         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5605         #
5606         mm=MEDFileMesh.New(fname)
5607         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5608         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5609         pass
5610
5611     @WriteInTmpDir
5612     def testMEDFileFieldEasyField3(self):
5613         """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."""
5614         fname="Pyfile103.med"
5615         fieldName="field1"
5616         mm=MEDFileUMesh()
5617         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5618         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5619         m.allocateCells()
5620         m.insertNextCell(NORM_TRI3,[0,1,2])
5621         m.insertNextCell(NORM_TRI3,[3,4,5])
5622         m.insertNextCell(NORM_TRI3,[6,7,8])
5623         m.insertNextCell(NORM_TRI3,[9,10,11])
5624         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5625         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5626         mm[-1]=m
5627         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5628         m0.allocateCells()
5629         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5630         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5631         mm[0]=m0
5632         mm.write(fname,2)
5633         # start slowly
5634         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5635         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5636         #
5637         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5638         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5639         # here f1 lying on level -1 not 0 check if "field" method detect it !
5640         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5641         f1.setMesh(mm[-1]) # -1 is very important
5642         f1.setTime(16.,3,4)
5643         f1.checkConsistencyLight()
5644         mm.write(fname,2)
5645         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5646         #
5647         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5648         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5649         # nodes on elements
5650         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5651         f3.setMesh(mm[-1]) # this line is important
5652         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)
5653         f3.setName(fieldName) ; f3.checkConsistencyLight()
5654         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5655         #
5656         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5657         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5658         # gauss
5659         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5660         f4.setMesh(mm[-1]) # this line is important
5661         f4.setName(fieldName)
5662         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])
5663         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)
5664         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)
5665         f4.checkConsistencyLight()
5666         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5667         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5668         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5669         pass
5670
5671     @WriteInTmpDir
5672     def testMEDFileFieldEasyField4(self):
5673         """ Same than testMEDFileFieldEasyField3 but with integers"""
5674         fname="Pyfile104.med"
5675         fieldName="field1"
5676         mm=MEDFileUMesh()
5677         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5678         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5679         m.allocateCells()
5680         m.insertNextCell(NORM_TRI3,[0,1,2])
5681         m.insertNextCell(NORM_TRI3,[3,4,5])
5682         m.insertNextCell(NORM_TRI3,[6,7,8])
5683         m.insertNextCell(NORM_TRI3,[9,10,11])
5684         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5685         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5686         mm[-1]=m
5687         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5688         m0.allocateCells()
5689         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5690         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5691         mm[0]=m0
5692         mm.write(fname,2)
5693         # start slowly
5694         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5695         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5696         #
5697         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5698         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5699         # here f1 lying on level -1 not 0 check if "field" method detect it !
5700         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5701         f1.setMesh(mm[-1]) # -1 is very important
5702         f1.setTime(16.,3,4)
5703         f1.checkConsistencyLight()
5704         mm.write(fname,2)
5705         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5706         #
5707         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5708         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5709         # nodes on elements
5710         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5711         f3.setMesh(mm[-1]) # this line is important
5712         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)
5713         f3.setName(fieldName) ; f3.checkConsistencyLight()
5714         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5715         #
5716         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5717         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5718         # gauss
5719         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5720         f4.setMesh(mm[-1]) # this line is important
5721         f4.setName(fieldName)
5722         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])
5723         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)
5724         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)
5725         f4.checkConsistencyLight()
5726         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5727         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5728         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5729         pass
5730
5731     @WriteInTmpDir
5732     def testMEDFileFieldEasyField5(self):
5733         """More and more difficult now look at how profiles are managed by "field" method."""
5734         fname="Pyfile105.med"
5735         fieldName="field1"
5736         mm=MEDFileUMesh()
5737         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5738         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5739         m.allocateCells()
5740         m.insertNextCell(NORM_TRI3,[0,1,2])
5741         m.insertNextCell(NORM_TRI3,[3,4,5])
5742         m.insertNextCell(NORM_TRI3,[6,7,8])
5743         m.insertNextCell(NORM_TRI3,[9,10,11])
5744         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5745         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5746         mm[0]=m
5747         mm.write(fname,2)
5748         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5749         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5750         #
5751         arr0=DataArrayDouble([10,11,12,13])
5752         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5753         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5754         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5755         ff.write(fname,0)
5756         #
5757         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5758         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5759         # more complicated -> multi level
5760         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5761         m0.allocateCells()
5762         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5763         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5764         mm2=MEDFileUMesh()
5765         mm2[0]=m0 ; mm2[-1]=m
5766         #
5767         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5768         #
5769         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5770         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5771         pass
5772
5773     @WriteInTmpDir
5774     def testExtractPart1(self):
5775         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)])
5776         meshName="mesh"
5777         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5778         m0.insertNextCell(NORM_TRI3,[8,4,3])
5779         m0.insertNextCell(NORM_TRI3,[8,9,4])
5780         m0.insertNextCell(NORM_TRI3,[7,13,8])
5781         m0.insertNextCell(NORM_TRI3,[7,12,13])
5782         m0.insertNextCell(NORM_TRI3,[0,6,1])
5783         m0.insertNextCell(NORM_TRI3,[0,5,6])
5784         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5785         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5786         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5787         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5788         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5789         #
5790         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5791         m1.insertNextCell(NORM_SEG2,[10,5])
5792         m1.insertNextCell(NORM_SEG2,[5,0])
5793         m1.insertNextCell(NORM_SEG2,[0,1])
5794         m1.insertNextCell(NORM_SEG2,[1,2])
5795         m1.insertNextCell(NORM_SEG2,[2,3])
5796         m1.insertNextCell(NORM_SEG2,[3,4])
5797         m1.insertNextCell(NORM_SEG2,[4,9])
5798         m1.insertNextCell(NORM_SEG2,[9,14])
5799         m1.insertNextCell(NORM_SEG2,[14,13])
5800         m1.insertNextCell(NORM_SEG2,[13,12])
5801         m1.insertNextCell(NORM_SEG2,[12,11])
5802         m1.insertNextCell(NORM_SEG2,[11,10])
5803         mm=MEDFileUMesh()
5804         mm[0]=m0 ; mm[-1]=m1
5805         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5806         tab={} #
5807         tab[0]=DataArrayInt([0,2,3,4,6,7])
5808         tab[-1]=DataArrayInt([2,3,4,5,9])
5809         fs=MEDFileFields()
5810         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5811         tab[1]=arr0
5812         #
5813         fname0="Field0"
5814         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5815         t0=(16.5,3,4)
5816         ic=["toto [m]"]
5817         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5818         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5819         f0.setMesh(m0) ; f0.setName(fname0)
5820         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5821         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5822         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]))
5823         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5824         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5825         fmts.pushBackTimeStep(f1ts)
5826         #
5827         mmOut=mm.extractPart(tab)
5828         #
5829         fsPart0=fs.extractPart(tab,mm)
5830         self.assertEqual(len(fsPart0),1)
5831         fmtsP=fsPart0[0]
5832         self.assertEqual(len(fmtsP),1)
5833         f1ts=fmtsP[0]
5834         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5835         #
5836         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5837         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5838         #
5839         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5840         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5841         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5842         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5843         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5844         #
5845         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5846         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5847         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5848         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5849         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5850         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5851         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5852         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5853         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5854         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5855         #
5856         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5857         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5858         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5859         # multisteps
5860         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5861         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5862         for i,tt in enumerate(tss):
5863             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5864             myarr=arr0_0+i*1000.
5865             f0.setArray(myarr)
5866             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5867             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5868             pass
5869         fsPart1=fs.extractPart(tab,mm)
5870         self.assertEqual(len(fsPart1),1)
5871         fmtsP=fsPart1[0]
5872         self.assertEqual(len(fmtsP),len(tss))
5873         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5874             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5875             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5876             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5877             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5878             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5879             self.assertEqual(fPart.getTime(),list(tt))
5880             pass
5881         pass
5882
5883     @WriteInTmpDir
5884     def testSymmetryPlusAggregationMFD1(self):
5885         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5886         fname1="Pyfile106_1.med"
5887         fname2="Pyfile106_2.med"
5888         fname3="Pyfile106_3.med"
5889         meshName="mesh"
5890         mm1=MEDFileUMesh()
5891         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5892         mm1.setCoords(da1)
5893         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5894         mm1_0.setCoords(da1)
5895         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5896         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5897         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5898         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5899         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5900         mm1[0]=mm1_0
5901         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5902         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5903         #
5904         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5905         mm1_1.setCoords(da1)
5906         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5907         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5908         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5909         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5910         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5911         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5912         mm1[-1]=mm1_1
5913         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5914         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5915         for i in range(1,10):
5916             mm1.setFamilyId("F%d"%i,i)
5917         mm1.setFamilyId("FAMILLE_ZERO",0)
5918         mm1.setFamilyId("H1",100)
5919         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5920         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5921         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5922         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5923         ##############
5924         mm2=MEDFileUMesh()
5925         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]"])
5926         mm2.setCoords(da1)
5927         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5928         mm2_0.setCoords(da1)
5929         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5930         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5931         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5932         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5933         mm2[0]=mm2_0
5934         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5935         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5936         #
5937         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5938         mm2_1.setCoords(da1)
5939         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5940         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5941         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5942         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5943         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5944         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5945         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5946         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5947         mm2[-1]=mm2_1
5948         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5949         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5950         for i in range(1,12):
5951             mm2.setFamilyId("G%d"%i,i+30)
5952         mm2.setFamilyId("H1",100)
5953         mm2.setFamilyId("FAMILLE_ZERO",0)
5954         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5955         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5956         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5957         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5958         #
5959         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5960         #######
5961         def CheckMesh(tester,mm):
5962             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]"])
5963             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5964             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])))
5965             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5966             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])))
5967             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5968             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5969             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5970             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5971             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5972             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)]
5973             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5974             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5975             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5976             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5977             pass
5978         CheckMesh(self,mm)
5979         ##
5980         fieldName="zeField"
5981         t1=(2.3,3,5)
5982         t2=(5.6,7,12)
5983         infoc=["dd [W]","eee [kA]"]
5984         ##
5985         fmts1=MEDFileFieldMultiTS()
5986         f1ts1=MEDFileField1TS()
5987         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5988         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5989         arr1.setInfoOnComponents(infoc)
5990         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5991         f1_1.checkConsistencyLight()
5992         f1ts1.setFieldNoProfileSBT(f1_1)
5993         #
5994         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5995         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5996         arr2.setInfoOnComponents(infoc)
5997         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5998         f1_2.checkConsistencyLight()
5999         f1ts1.setFieldNoProfileSBT(f1_2)
6000         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6001         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6002         arr3.setInfoOnComponents(infoc)
6003         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6004         f1_3.checkConsistencyLight()
6005         f1ts1.setFieldNoProfileSBT(f1_3)
6006         fmts1.pushBackTimeStep(f1ts1)
6007         #
6008         f1ts2=f1ts1.deepCopy()
6009         f1ts2.setTime(t2[1],t2[2],t2[0])
6010         f1ts2.getUndergroundDataArray()[:]+=2000
6011         fmts1.pushBackTimeStep(f1ts2)
6012         ### fmts2
6013         fmts2=MEDFileFieldMultiTS()
6014         f1ts3=MEDFileField1TS()
6015         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6016         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6017         arr4.setInfoOnComponents(infoc)
6018         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6019         f2_1.checkConsistencyLight()
6020         f1ts3.setFieldNoProfileSBT(f2_1)
6021         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6022         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6023         arr5.setInfoOnComponents(infoc)
6024         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6025         f2_2.checkConsistencyLight()
6026         f1ts3.setFieldNoProfileSBT(f2_2)
6027         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6028         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6029         arr6.setInfoOnComponents(infoc)
6030         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6031         f2_3.checkConsistencyLight()
6032         f1ts3.setFieldNoProfileSBT(f2_3)
6033         fmts2.pushBackTimeStep(f1ts3)
6034         #
6035         f1ts4=f1ts3.deepCopy()
6036         f1ts4.setTime(t2[1],t2[2],t2[0])
6037         f1ts4.getUndergroundDataArray()[:]+=2000
6038         fmts2.pushBackTimeStep(f1ts4)
6039         #
6040         mfd1=MEDFileData()
6041         mfd1.setMeshes(MEDFileMeshes())
6042         mfd1.getMeshes().pushMesh(mm1)
6043         mfd1.setFields(MEDFileFields())
6044         mfd1.getFields().pushField(fmts1)
6045         #
6046         mfd2=MEDFileData()
6047         mfd2.setMeshes(MEDFileMeshes())
6048         mfd2.getMeshes().pushMesh(mm2)
6049         mfd2.setFields(MEDFileFields())
6050         mfd2.getFields().pushField(fmts2)
6051         # ze Call !
6052         mfd=MEDFileData.Aggregate([mfd1,mfd2])
6053         def CheckMFD(tester,mfd):
6054             tester.assertEqual(len(mfd.getMeshes()),1)
6055             tester.assertEqual(len(mfd.getFields()),1)
6056             CheckMesh(self,mfd.getMeshes()[0])
6057             tester.assertEqual(len(mfd.getFields()[0]),2)
6058             zeF1=mfd.getFields()[0][0]
6059             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6060             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6061             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6062             ref.renumberCells(o2n)
6063             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6064             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6065             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6066             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6067             ref.renumberCells(o2n)
6068             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6069             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6070             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6071             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6072             ref.renumberCells(o2n)
6073             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6074             #
6075             zeF2=mfd.getFields()[0][1]
6076             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6077             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6078             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6079             ref.renumberCells(o2n)
6080             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6081             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6082             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6083             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6084             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6085             ref.renumberCells(o2n)
6086             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6087             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6088             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6089             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6090             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6091             ref.renumberCells(o2n)
6092             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6093             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6094         CheckMFD(self,mfd)
6095         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6096         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6097         CheckMFD(self,mfd)
6098         pass
6099
6100     @WriteInTmpDir
6101     def testAggregateWithGroups(self):
6102         """ Testing MEDFileUMesh::Aggretate when groups are present. """
6103         def generate(grp_name, offset):
6104             coo = DataArrayDouble([0., 1., 2.])
6105             coo += offset
6106             m = MEDCouplingCMesh("toto")
6107             m.setCoords(coo, coo)
6108             m = m.buildUnstructured()
6109             mu = MEDFileUMesh.New()
6110             mu.setMeshAtLevel(0, m)
6111             g = DataArrayInt([0])
6112             g.setName(grp_name)
6113             g2 = DataArrayInt([1])
6114             g2.setName("common")  # make a common group for all meshes being merged
6115             mu.setGroupsAtLevel(0, [g, g2])
6116             return mu
6117
6118         m1 = generate("A", 0.)
6119         m2 = generate("B", 2.)
6120         mm = MEDFileUMesh.Aggregate([m1,m2])
6121
6122         self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6123         self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6124         refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6125         self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6126         self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6127         self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6128         self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6129         self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6130         self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6131
6132         pass
6133
6134     @WriteInTmpDir
6135     def testExtrudedMesh1(self):
6136         fname="Pyfile107.med"
6137         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6138         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6139         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6140         mm=MEDFileUMesh(ex)
6141         mm.write(fname,2)
6142         ex2=mm.convertToExtrudedMesh()
6143         mm2=MEDFileMesh.New(fname)
6144         ex3=mm2.convertToExtrudedMesh()
6145         self.assertTrue(ex.isEqual(ex2,1e-12))
6146         self.assertTrue(ex.isEqual(ex3,1e-12))
6147         pass
6148
6149     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6150     @WriteInTmpDir
6151     def testWriteInto30(self):
6152         fname="Pyfile108.med"
6153         fname2="Pyfile109.med"
6154         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6155         mm=MEDFileUMesh() ; mm[0]=m
6156         mm.setFamilyId("FAMILLE_ZERO",0)
6157         #
6158         mm.write33(fname,2)
6159         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6160         mm2=MEDFileUMesh(fname)
6161         self.assertTrue(mm.isEqual(mm2,1e-12))
6162         #
6163         mm.write(fname2,2)
6164         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
6165         pass
6166
6167     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6168     @WriteInTmpDir
6169     def testPickelizationOfMEDFileObjects1(self):
6170         fname="Pyfile110.med"
6171         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)
6172         m0=MEDCouplingUMesh("Mesh",2)
6173         m0.allocateCells(5)
6174         m0.insertNextCell(NORM_TRI3,[1,4,2])
6175         m0.insertNextCell(NORM_TRI3,[4,5,2])
6176         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6177         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6178         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6179         m0.finishInsertingCells()
6180         m0.setCoords(coo)
6181         m1=MEDCouplingUMesh(m0.getName(),1)
6182         m1.allocateCells(9)
6183         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6184         for i in range(9):
6185             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6186             pass
6187         m1.finishInsertingCells()
6188         m1.setCoords(coo)
6189         #
6190         m=MEDFileUMesh()
6191         m.setMeshAtLevel(0,m0)
6192         m.setMeshAtLevel(-1,m1)
6193         #
6194         dt=3 ; it=2 ; tim=4.5
6195         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6196         fieldNode0.setName("fieldNode0")
6197         fieldNode0.setTime(tim,dt,it)
6198         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6199         arr=DataArrayDouble([10,11,12,13,14])
6200         fieldNode0.setArray(arr)
6201         f0=MEDFileField1TS()
6202         f0.setFieldProfile(fieldNode0,m,0,pfl0)
6203         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6204         fieldNode1.setName("fieldNode1")
6205         fieldNode1.setTime(tim,dt,it)
6206         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6207         arr1=DataArrayDouble([20,21,22,23,24,25,26])
6208         fieldNode1.setArray(arr1)
6209         f1=MEDFileField1TS()
6210         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6211         mfd=MEDFileData()
6212         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6213         mfd.getMeshes().pushMesh(m)
6214         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6215         mfd.getFields().pushField(fmts)
6216         # first start gently
6217         d=mfd.serialize()
6218         mfd2=MEDFileData(d)
6219         self.assertEqual(len(mfd2.getMeshes()),1)
6220         self.assertEqual(len(mfd2.getFields()),1)
6221         self.assertEqual(len(mfd2.getFields()[0]),1)
6222         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6223         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6224         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6225         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6226         # OK now end of joke -> serialization of MEDFileData
6227         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6228         mfd3=pickle.loads(st)
6229         # check of object
6230         self.assertEqual(len(mfd3.getMeshes()),1)
6231         self.assertEqual(len(mfd3.getFields()),1)
6232         self.assertEqual(len(mfd3.getFields()[0]),1)
6233         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6234         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6235         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6236         # serialization of MEDFileFields
6237         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6238         fs4=pickle.loads(st)
6239         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6240         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6241         # serialization of MEDFileFieldMulitTS
6242         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6243         fmts5=pickle.loads(st)
6244         ff5=fmts5[0].field(mfd3.getMeshes()[0])
6245         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6246         # serialization of MEDFileField1TS
6247         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6248         f1ts6=pickle.loads(st)
6249         ff6=f1ts6.field(mfd3.getMeshes()[0])
6250         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6251         # serialization of MEDFileMeshes
6252         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6253         ms7=pickle.loads(st)
6254         self.assertEqual(len(ms7),1)
6255         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6256         pass
6257
6258     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6259     @WriteInTmpDir
6260     def testPickelizationOfMEDFileObjects2(self):
6261         # CMesh
6262         self.internalMEDMesh6() # generates MEDFileMesh5.med file
6263         mm=MEDFileMesh.New("MEDFileMesh5.med")
6264         self.assertTrue(isinstance(mm,MEDFileCMesh))
6265         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6266         mm2=pickle.loads(st)
6267         self.assertTrue(isinstance(mm2,MEDFileCMesh))
6268         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6269         # CurveLinear
6270         self.internalCurveLinearMesh1() # generates Pyfile55.med
6271         mm=MEDFileMesh.New("Pyfile55.med")
6272         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6273         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6274         mm3=pickle.loads(st)
6275         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6276         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6277         self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6278         # MEDFileIntFieldMultiTS
6279         fs4=MEDFileFields("Pyfile63.med")
6280         ms4=MEDFileMeshes("Pyfile63.med")
6281         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6282         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6283         fmts5=pickle.loads(st)
6284         self.assertEqual(len(fs4[0]),len(fmts5))
6285         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6286         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6287         # MEDFileIntField1TS
6288         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6289         f1ts6=pickle.loads(st)
6290         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6291         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6292         # MEDFileParameters
6293         self.internalParameters1()# generates Pyfile56.med
6294         params=MEDFileParameters("Pyfile56.med")
6295         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6296         params7=pickle.loads(st)
6297         self.assertEqual(len(params),len(params7))
6298         for i in range(len(params)):
6299             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6300             pass
6301         pass
6302
6303     @WriteInTmpDir
6304     def testGlobalNumOnNodes1(self):
6305         """Test global number on nodes here. Used by partitionners."""
6306         fname="Pyfile112.med"
6307         arr=DataArrayDouble(5) ; arr.iota()
6308         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6309         m.setName("mesh")
6310         mm=MEDFileUMesh()
6311         mm[0]=m
6312         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6313         d=DataArrayInt([7,8,9,2,0])
6314         dRef=d.deepCopy()
6315         mm.setGlobalNumFieldAtLevel(1,d)
6316         mm.checkConsistency()
6317         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6318         mm.checkConsistency()
6319         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6320         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6321         mm.write(fname,2)
6322         mm2=MEDFileMesh.New(fname)
6323         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6324         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6325         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6326         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6327         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6328         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6329         pass
6330
6331     @WriteInTmpDir
6332     def testPartialReadOfEntities1(self):
6333         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6334         fname="Pyfile113.med"
6335         arr=DataArrayDouble(5) ; arr.iota()
6336         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6337         m.setName("mesh")
6338         mm=MEDFileUMesh()
6339         mm[0]=m
6340         #
6341         fieldName="Field"
6342         ts1=(5.,1,2)
6343         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6344         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6345         f1.setTime(*ts1)
6346         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6347         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6348         f2.setTime(*ts1)
6349         f1ts=MEDFileField1TS()
6350         f1ts.setFieldNoProfileSBT(f1)
6351         f1ts.setFieldNoProfileSBT(f2)
6352         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6353         f1ts_2=f1ts.deepCopy()
6354         f1ts_2.getUndergroundDataArray()[:]+=2
6355         f1ts_2.setTime(3,4,6.)
6356         fmts=MEDFileFieldMultiTS()
6357         fmts.pushBackTimeStep(f1ts)
6358         fmts.pushBackTimeStep(f1ts_2)
6359         #
6360         mm.write(fname,2)
6361         fmts.write(fname,0)
6362         #
6363         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6364         mm=MEDFileMesh.New(fname)
6365         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)
6366         fs.loadArrays()
6367         self.assertEqual(len(fs),1)
6368         fmts=fs[0]
6369         self.assertEqual(len(fmts),2)
6370         ff0=fmts[0] ; ff1=fmts[1]
6371         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6372         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6373         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6374         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6375         pass
6376
6377     @WriteInTmpDir
6378     def testFloat32InMEDFileFieldStar1(self):
6379         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6380         fname="Pyfile114.med"
6381         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6382         f1=f1.convertToFloatField()
6383         m1=f1.getMesh()
6384         mm1=MEDFileUMesh.New()
6385         mm1.setCoords(m1.getCoords())
6386         mm1.setMeshAtLevel(0,m1)
6387         mm1.setName(m1.getName())
6388         mm1.write(fname,2)
6389         ff1=MEDFileFloatField1TS()
6390         ff1.setFieldNoProfileSBT(f1)
6391         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6392         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6393         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6394         ff1.write(fname,0)
6395         a,b=ff1.getUndergroundDataArrayExt()
6396         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6397         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6398         ff2=MEDFileAnyTypeField1TS.New(fname)
6399         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6400         self.assertEqual(ff2.getTime(),[0,1,2.0])
6401         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6402         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6403         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6404         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6405         ff2.setTime(1,2,3.)
6406         c=ff2.getUndergroundDataArray() ; c*=2
6407         ff2.write(fname,0) # 2 time steps in
6408         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6409         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6410         self.assertEqual(len(ffs1),2)
6411         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6412         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6413         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6414         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6415         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6416         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6417         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6418         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6419         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6420         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6421         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6422         for it in ffs1:
6423             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6424             bc+=a.getArray()
6425             pass
6426         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6427         nf1=MEDCouplingFieldFloat(ON_NODES)
6428         nf1.setTime(9.,10,-1)
6429         nf1.setMesh(f1.getMesh())
6430         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6431         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6432         nff1=MEDFileFloatField1TS.New()
6433         nff1.setFieldNoProfileSBT(nf1)
6434         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6435         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6436         nff1.write(fname,0)
6437         #
6438         nf2=MEDCouplingFieldFloat(ON_NODES)
6439         nf2.setTime(19.,20,-11)
6440         nf2.setMesh(f1.getMesh())
6441         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6442         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6443         nff2=MEDFileFloatField1TS.New()
6444         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6445         nff2.setFieldProfile(nf2,mm1,0,npfl)
6446         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6447         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6448         self.assertTrue(b.isEqual(npfl))
6449         self.assertTrue(a.isEqual(narr2,1e-7))
6450         nff2.write(fname,0)
6451         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6452         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6453         self.assertTrue(b.isEqual(npfl))
6454         self.assertTrue(a.isEqual(narr2,1e-7))
6455         #
6456         nf3=MEDCouplingFieldDouble(ON_NODES)
6457         nf3.setName("VectorFieldOnNodesDouble")
6458         nf3.setTime(29.,30,-21)
6459         nf3.setMesh(f1.getMesh())
6460         nf3.setArray(f1.getMesh().getCoords())
6461         nff3=MEDFileField1TS.New()
6462         nff3.setFieldNoProfileSBT(nf3)
6463         nff3.write(fname,0)
6464         fs=MEDFileFields(fname)
6465         self.assertEqual(len(fs),4)
6466         ffs=[it for it in fs]
6467         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6468         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6469         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6470         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6471         #
6472         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6473         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6474         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6475         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6476         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6477         #
6478         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6479         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6480         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6481         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6482         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6483         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6484         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6485         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6486         #
6487         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6488         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6489         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6490         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6491         pass
6492
6493     @WriteInTmpDir
6494     def testPenta18_1(self):
6495         """EDF8478 : Test of read/write of penta18"""
6496         fname="Pyfile115.med"
6497         arr=DataArrayDouble([
6498             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6499             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6500             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6501             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6502             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6503             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6504         m=MEDCouplingUMesh("mesh",3)
6505         m.setCoords(arr)
6506         m.allocateCells(1)
6507         m.insertNextCell(NORM_PENTA18,list(range(18)))
6508         m.checkConsistencyLight()
6509         #
6510         f=MEDCouplingFieldDouble(ON_NODES)
6511         f.setMesh(m)
6512         f.setName("FieldOnPenta18")
6513         f.setArray(DataArrayDouble(list(range(18))))
6514         f.checkConsistencyLight()
6515         #
6516         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6517         #
6518         f2=MEDCouplingFieldDouble(ON_NODES)
6519         f2.setMesh(m)
6520         f2.setName("FieldOnPenta18Sub")
6521         f2.setArray(DataArrayDouble(list(range(18))))
6522         f2.checkConsistencyLight()
6523         WriteField(fname,f2,True)
6524         f3=ReadField(fname)
6525         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6526         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6527         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6528         pass
6529
6530     @WriteInTmpDir
6531     def testFieldsLinearToQuadratic(self):
6532         fname="Pyfile117.med"
6533         arr=DataArrayDouble([0,1])
6534         m=MEDCouplingCMesh();
6535         m.setCoords(arr,arr,arr)
6536         m=m.buildUnstructured()
6537         m2=m.deepCopy()
6538         m2.translate([2,0,0])
6539         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6540         m3.setName("mesh")
6541         mm=MEDFileUMesh()
6542         mm[0]=m3
6543         mmq=mm.linearToQuadratic(0)
6544         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6545         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6546         #
6547         f=MEDCouplingFieldDouble(ON_NODES)
6548         f.setName("field")
6549         f.setMesh(m3)
6550         f.setTime(3.,1,2)
6551         arr=DataArrayDouble(m3.getNumberOfNodes())
6552         arr.iota()
6553         f.setArray(arr)
6554         f1ts=MEDFileField1TS()
6555         f1ts.setFieldNoProfileSBT(f)
6556         fmts=MEDFileFieldMultiTS()
6557         fmts.pushBackTimeStep(f1ts)
6558         f1ts_2=f1ts.deepCopy()
6559         f1ts_2.setTime(3,4,5.)
6560         f1ts_2.getUndergroundDataArray()[:]*=2.
6561         fmts.pushBackTimeStep(f1ts_2)
6562         fs=MEDFileFields()
6563         fs.pushField(fmts)
6564         fs2=fs.linearToQuadratic(mms,mmsq)
6565         self.myTester1(fs2,mmsq[0])
6566         # A small Write/Read and test again
6567         mms.write(fname,2) ; fs.write(fname,0)
6568         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6569         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6570         fs2=fs.linearToQuadratic(mms,mmqs)
6571         self.myTester1(fs2,mmqs[0])
6572         pass
6573
6574     def myTester1(self,fs2,mmq):
6575         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)
6576         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])
6577         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])
6578         fToTest=fs2[0][0].field(mmq)
6579         self.assertEqual(fToTest.getTime(),[3.,1,2])
6580         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6581         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6582         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6583         self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6584         # testing 2nd timestep
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(dataExp1))
6589         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6590         self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6591         pass
6592
6593     @WriteInTmpDir
6594     def testFieldsLinearToQuadratic2(self):
6595         """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6596         GeneratePyfile18(self)
6597         fname="Pyfile118.med"
6598         arr=DataArrayDouble([0,1])
6599         m=MEDCouplingCMesh();
6600         m.setCoords(arr,arr,arr)
6601         m=m.buildUnstructured()
6602         m2=m.deepCopy()
6603         m2.translate([2,0,0])
6604         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6605         m3.setName("mesh")
6606         # add a point for fun
6607         m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6608         #
6609         mm=MEDFileUMesh()
6610         mm[0]=m3
6611         mmq=mm.linearToQuadratic(0)
6612         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6613         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6614         #
6615         f=MEDCouplingFieldDouble(ON_NODES)
6616         f.setName("field")
6617         f.setMesh(m3)
6618         f.setTime(3.,1,2)
6619         arr=DataArrayDouble(8) ; arr.iota()
6620         arr.iota()
6621         f.setArray(arr)
6622         f1ts=MEDFileField1TS()
6623         pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6624         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6625         f1ts_2=f1ts.deepCopy()
6626         f1ts_2.setTime(3,4,5.)
6627         f1ts_2.getUndergroundDataArray()[:]*=4.
6628         fmts=MEDFileFieldMultiTS()
6629         fmts.pushBackTimeStep(f1ts)
6630         fmts.pushBackTimeStep(f1ts_2)
6631         fs=MEDFileFields()
6632         fs.pushField(fmts)
6633         fs2=fs.linearToQuadratic(mms,mmsq)
6634         mms.write(fname,2) ; fs.write(fname,0)
6635         #
6636         self.myTester2(fs2,mmq)
6637         # Read/write
6638         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6639         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6640         fs2=fs.linearToQuadratic(mms,mmqs)
6641         self.myTester2(fs2,mmq)
6642         ## More vicious add single node 16
6643         mm=MEDFileUMesh()
6644         mm[0]=m3
6645         mmq=mm.linearToQuadratic(0)
6646         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6647         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6648         #
6649         f=MEDCouplingFieldDouble(ON_NODES)
6650         f.setName("field")
6651         f.setMesh(m3)
6652         f.setTime(3.,1,2)
6653         arr=DataArrayDouble(9) ; arr.iota()
6654         arr.iota()
6655         f.setArray(arr)
6656         f1ts=MEDFileField1TS()
6657         pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6658         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6659         fmts=MEDFileFieldMultiTS()
6660         fmts.pushBackTimeStep(f1ts)
6661         fs=MEDFileFields()
6662         fs.pushField(fmts)
6663         fs2=fs.linearToQuadratic(mms,mmsq)
6664         #
6665         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")
6666         f1tsToTest=fs2[0][0]
6667         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])
6668         assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6669         assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6670         assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6671         pass
6672
6673     def myTester2(self,fs2,mmq):
6674         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")
6675         f1tsToTest=fs2[0][0]
6676         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])
6677         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6678         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6679         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6680         fToTest=fs2[0][0].field(mmq)
6681         self.assertEqual(fToTest.getTime(),[3.,1,2])
6682         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6683         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])))
6684         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))
6685         self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6686         # 2nd Time step
6687         f1tsToTest=fs2[0][1]
6688         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6689         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6690         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6691         fToTest=fs2[0][1].field(mmq)
6692         self.assertEqual(fToTest.getTime(),[5.,3,4])
6693         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6694         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])))
6695         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))
6696         self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6697
6698         pass
6699
6700     @WriteInTmpDir
6701     def testSetFieldProfileFlatly1(self):
6702         """ 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
6703         a profile."""
6704         arr=DataArrayDouble(10) ; arr.iota()
6705         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6706         m=m.buildUnstructured()
6707         m2=m.deepCopy()
6708         m2.simplexize(0)
6709         m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6710         m.setName("mesh")
6711         mm=MEDFileUMesh()
6712         mm[0]=m
6713         f=MEDCouplingFieldDouble(ON_CELLS)
6714         f.setMesh(m)
6715         arr=DataArrayDouble(m.getNumberOfCells())
6716         arr.iota()
6717         f.setArray(arr)
6718         f.setName("field")
6719         pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6720         #
6721         refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6722         refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6723         #
6724         f1ts=MEDFileField1TS()
6725         f1ts.setFieldProfile(f,mm,0,pfl)
6726         self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6727         self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6728         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6729         #
6730         f1ts=MEDFileField1TS()
6731         f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6732         self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6733         self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6734         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6735         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6736         self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6737         pass
6738
6739     @WriteInTmpDir
6740     def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6741         """ Here multi level groups are created"""
6742         arr=DataArrayDouble(11) ; arr.iota()
6743         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6744         m=m.buildUnstructured()
6745         m.setName("mesh")
6746         m1=m.buildDescendingConnectivity()[0]
6747         mm=MEDFileUMesh()
6748         mm[0]=m ; mm[-1]=m1
6749         ################
6750         grpName="grp0"
6751         grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6752         grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6753         grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6754         grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6755         ################ ajouter un groupe sur plusieurs niveau
6756         mm.addGroup(0,grp1)
6757         mm.addGroup(-1,grp2)
6758         mm.addGroup(0,grp0_0)
6759         mm.addGroup(-1,grp0_1)
6760         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6761         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6762         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6763         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6764         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6765         self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6766         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6767         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6768         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6769         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6770         mm.removeGroupAtLevel(0,grpName)
6771         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6772         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6773         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6774         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6775         mm.removeGroupAtLevel(-1,grpName)
6776         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6777         self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6778         mm.addGroup(-1,grp0_1)
6779         mm.addGroup(0,grp0_0)
6780         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6781         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6782         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6783         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6784         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6785         pass
6786
6787     @WriteInTmpDir
6788     def testYutaka(self):
6789         """ 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...
6790         Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6791         mn="mesh"
6792         m=MEDCouplingCMesh()
6793         arr=DataArrayDouble(4) ; arr.iota()
6794         m.setCoords(arr,arr,arr)
6795         m=m.buildUnstructured()
6796         m.setName(mn)
6797         #
6798         m=m.buildUnstructured()
6799         m1=m.buildDescendingConnectivity()[0]
6800         #
6801         mm=MEDFileUMesh()
6802         mm[0]=m
6803         mm[-1]=m1
6804         #
6805         grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6806         mm.addGroup(0,grp0)
6807         grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6808         mm.addGroup(0,grp1)
6809         grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6810         mm.addGroup(0,grp2)
6811         grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6812         mm.addGroup(-1,grp3)
6813         self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6814         grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6815         mm.addNodeGroup(grp4)
6816         mm.rearrangeFamilies()
6817         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6818         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6819         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6820         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6821         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6822
6823         for grp in [grp0,grp1,grp2,grp3,grp4]:
6824             self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6825             pass
6826         pass
6827
6828     @WriteInTmpDir
6829     def testContxtMger1TS(self):
6830         fname="Pyfile119.med"
6831         coo=DataArrayDouble(1000) ; coo.iota()
6832         m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6833         m.setName("mesh")
6834         WriteMesh(fname,m,True)
6835         f=MEDCouplingFieldDouble(ON_CELLS)
6836         f.setMesh(m)
6837         f.setName("Field")
6838         arr=DataArrayDouble(m.getNumberOfCells())
6839         f.setArray(arr)
6840         f.checkConsistencyLight()
6841         for i in range(10):
6842             arr[:]=float(i+1)
6843             f.setTime(float(i),i,0)
6844             WriteFieldUsingAlreadyWrittenMesh(fname,f)
6845             pass
6846         #
6847         mm=MEDFileMesh.New(fname)
6848         fmts=MEDFileFieldMultiTS(fname,False)
6849         refSize=fmts.getHeapMemorySize()
6850         for f1ts in fmts:
6851             with f1ts:
6852                 f=f1ts.field(mm)
6853                 pass
6854             pass
6855         self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6856         pass
6857
6858     def testZipFamilies1(self):
6859         """
6860         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6861         """
6862         mname="mesh"
6863         arr=DataArrayDouble(10) ; arr.iota()
6864         m=MEDCouplingCMesh()
6865         m.setCoords(arr,arr)
6866         m=m.buildUnstructured()
6867         m.setName(mname)
6868         #
6869         mm=MEDFileUMesh()
6870         mm[0]=m
6871         for i in range(m.getNumberOfCells()):
6872             d = DataArrayInt([i])
6873             d.setName("grp%d"%i)
6874             mm.addGroup(0,d)
6875             pass
6876
6877         grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6878         grp_all.setName("grp_all")
6879         mm.addGroup(0,grp_all)
6880         for i in range(m.getNumberOfCells()):
6881             mm.removeGroup("grp{}".format(i))
6882             pass
6883         #
6884         mm.zipFamilies() # the method to test
6885         #
6886         self.assertEqual(mm.getGroupsNames(),("grp_all",))
6887         self.assertEqual(len(mm.getFamiliesNames()),1)
6888         self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6889         pass
6890
6891     def testZipFamilies2(self):
6892         """
6893         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6894         """
6895         mname="mesh"
6896         arr=DataArrayDouble(21) ; arr.iota()
6897         m=MEDCouplingCMesh()
6898         m.setCoords(arr)
6899         m=m.buildUnstructured()
6900         m.setName(mname)
6901         #
6902         mm=MEDFileUMesh()
6903         mm[0]=m
6904         # 1 and 3 to be merged
6905         # 2 and 5 to be merged
6906         mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6907         for i in range(1,9):
6908             mm.setFamilyId("Fam_{}".format(i),-i)
6909         mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6910         mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6911         mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6912         #
6913         grp0=DataArrayInt([0,1,3,8,10,19])
6914         grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6915         grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6916         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6917         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6918         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6919         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6920         mm.zipFamilies()
6921         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6922         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6923         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6924         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6925         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6926         pass
6927
6928     def testMeshConvertFromMEDFileGeoType(self):
6929         self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6930
6931     @WriteInTmpDir
6932     def testFieldInt64_0(self):
6933         """
6934         Small basic test with I/O of field in int64.
6935         """
6936         fname="Pyfile120.med"
6937         arr = DataArrayDouble([0,1])
6938         m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6939         f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6940         v = 1234567890123456
6941         f.setArray(DataArrayInt64([v]))
6942         f.setMesh(m)
6943         mm = MEDFileUMesh()
6944         mm[0] = m
6945         f1ts = MEDFileInt64Field1TS()
6946         f1ts.setFieldNoProfileSBT(f)
6947         fmts = MEDFileInt64FieldMultiTS()
6948         fmts.pushBackTimeStep(f1ts)
6949         fs = MEDFileFields()
6950         fs.pushField(fmts)
6951         mm.write(fname,2)
6952         fs.write(fname,0)
6953         #
6954         mm = MEDFileMesh.New(fname)
6955         fs = MEDFileFields(fname)
6956         f = fs[0][0].field(mm)
6957         self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6958         self.assertEqual( f.getArray().getIJ(0,0) , v )
6959
6960     @WriteInTmpDir
6961     def testNonRegUMeshSubParts(self):
6962         """
6963         Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6964         """
6965         fname = "Pyfile121.med"
6966         m0 = MEDCouplingUMesh("mesh",1)
6967         coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6968         m0.setCoords(coords)
6969         m0.allocateCells()
6970         m0.insertNextCell(NORM_SEG2,[1,2])
6971         mm = MEDFileUMesh()
6972         mm[0] = m0
6973         m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6974         m1.setCoords(m0.getCoords())
6975         m1.setNodalConnectivity(DataArrayInt([1,2]))
6976         m1.setName(m0.getName())
6977         mm[-1] = m1
6978         fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6979         mm.zipCoords() # <- This call changes the coords and connectivity
6980         mm.write(fname,2)
6981         #
6982         mm = MEDFileMesh.New(fname)
6983         mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6984         self.assertTrue( m0.isEqual(mm[0],1e-12) )
6985         pass
6986
6987     pass
6988
6989 if __name__ == "__main__":
6990     unittest.main()