Salome HOME
Copyright update 2021
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (EDF R&D)
21
22 from MEDLoader import *
23 import unittest
24 import platform
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
29
30 import sys
31 if sys.version_info.major < 3:
32     import cPickle as pickle
33 else:
34     import pickle
35
36 class StdOutRedirect(object):
37     def __init__(self,fileName):
38         import os,sys
39         sys.stderr.flush()
40         self.stdoutOld=os.dup(2)
41         self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42         fd2=os.dup2(self.fdOfSinkFile,2)
43         self.origPyVal=sys.stderr
44         class FlushFile(object):
45             def __init__(self,f):
46                 self.f=f
47             def write(self,st):
48                 self.f.write(st)
49                 self.f.flush()
50             def flush(self):
51                 return self.f.flush()
52             def isatty(self):
53                 return self.f.isatty()
54             def close(self):
55                 os.fsync(self.f)
56                 self.f.close();
57         sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
58     def __del__(self):
59         import os,sys
60         sys.stderr.close()
61         sys.stderr=self.origPyVal
62         os.fsync(2)
63         os.dup2(self.stdoutOld,2)
64         os.close(self.stdoutOld)
65
66 class MEDLoaderTest3(unittest.TestCase):
67     @WriteInTmpDir
68     def testMEDMesh1(self):
69         GeneratePyfile18(self)
70         fileName="Pyfile18.med"
71         mname="ExampleOfMultiDimW"
72         medmesh=MEDFileMesh.New(fileName,mname)
73         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75         m1_0=medmesh.getLevel0Mesh(True)
76         m1_1=ReadUMeshFromFile(fileName,mname,0)
77         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78         m2_0=medmesh.getLevelM1Mesh(True)
79         m2_1=ReadUMeshFromFile(fileName,mname,-1)
80         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
81         pass
82
83     @WriteInTmpDir
84     def testMEDMesh2(self):
85         GeneratePyfile10(self)
86         fileName="Pyfile10.med"
87         mname="3DToto"
88         outFileName="MEDFileMesh1.med"
89         medmesh=MEDFileUMesh.New(fileName,mname)
90         self.assertEqual((0,),medmesh.getNonEmptyLevels())
91         m1_0=medmesh.getLevel0Mesh(True)
92         m1_1=ReadUMeshFromFile(fileName,mname,0)
93         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94         g1_0=medmesh.getGroup(0,"mesh2",True)
95         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97         g1_0=medmesh.getGroup(0,"mesh3",True)
98         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102         g1_1.setName(g1_0.getName())
103         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104         g1_0=medmesh.getFamily(0,"Family_-3",True)
105         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109         g1_1.setName(g1_0.getName())
110         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112         medmesh.write(outFileName,2);
113         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117         famn=medmesh.getFamilyNameGivenId(0)
118         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
119         #without renum
120         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
125         pass
126
127     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
128     @WriteInTmpDir
129     def testMEDMesh3(self):
130         outFileName="MEDFileMesh3.med"
131         c=DataArrayDouble.New()
132         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134         c.setValues(coords,9,2)
135         m=MEDCouplingUMesh.New();
136         m.setMeshDimension(2);
137         m.allocateCells(5);
138         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143         m.finishInsertingCells();
144         m.setCoords(c)
145         m.checkConsistencyLight()
146         m1=MEDCouplingUMesh.New();
147         m1.setMeshDimension(1);
148         m1.allocateCells(3);
149         m1.insertNextCell(NORM_SEG2,2,[1,4])
150         m1.insertNextCell(NORM_SEG2,2,[3,6])
151         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152         m1.finishInsertingCells();
153         m1.setCoords(c)
154         m1.checkConsistencyLight()
155         m2=MEDCouplingUMesh.New();
156         m2.setMeshDimension(0);
157         m2.allocateCells(4);
158         m2.insertNextCell(NORM_POINT1,1,[1])
159         m2.insertNextCell(NORM_POINT1,1,[3])
160         m2.insertNextCell(NORM_POINT1,1,[2])
161         m2.insertNextCell(NORM_POINT1,1,[6])
162         m2.finishInsertingCells();
163         m2.setCoords(c)
164         m2.checkConsistencyLight()
165         #
166         mm=MEDFileUMesh.New()
167         self.assertTrue(mm.getUnivNameWrStatus())
168         mm.setName("MyFirstMEDCouplingMEDmesh")
169         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
170         mm.setCoords(c)
171         mm.setMeshAtLevel(-1,m1);
172         mm.setMeshAtLevel(0,m);
173         mm.setMeshAtLevel(-2,m2);
174         # playing with groups
175         g1_2=DataArrayInt.New()
176         g1_2.setValues([1,3],2,1)
177         g1_2.setName("G1")
178         g2_2=DataArrayInt.New()
179         g2_2.setValues([1,2,3],3,1)
180         g2_2.setName("G2")
181         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182         g1_1=DataArrayInt.New()
183         g1_1.setValues([0,1,2],3,1)
184         g1_1.setName("G1")
185         g2_1=DataArrayInt.New()
186         g2_1.setValues([0,2],2,1)
187         g2_1.setName("G2")
188         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189         g1_N=DataArrayInt.New()
190         g1_N.setValues(list(range(8)),8,1)
191         g1_N.setName("G1")
192         g2_N=DataArrayInt.New()
193         g2_N.setValues(list(range(9)),9,1)
194         g2_N.setName("G2")
195         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196         mm.createGroupOnAll(0,"GrpOnAllCell")
197         # check content of mm
198         t=mm.getGroupArr(0,"G1",False)
199         self.assertTrue(g1_2.isEqual(t));
200         t=mm.getGroupArr(0,"G2",False)
201         self.assertTrue(g2_2.isEqual(t));
202         t=mm.getGroupArr(-1,"G1",False)
203         self.assertTrue(g1_1.isEqual(t));
204         t=mm.getGroupArr(-1,"G2",False)
205         self.assertTrue(g2_1.isEqual(t));
206         t=mm.getGroupArr(1,"G1",False)
207         self.assertTrue(g1_N.isEqual(t));
208         t=mm.getGroupArr(1,"G2",False)
209         self.assertTrue(g2_N.isEqual(t));
210         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211         t=mm.getGroupArr(0,"GrpOnAllCell")
212         self.assertTrue(t.getValues()==list(range(5)))
213         #
214         mmCpy=mm.deepCopy()
215         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216         mmCpy.write(outFileName,2);
217         #
218         mm=MEDFileMesh.New(outFileName)
219         #
220         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228         self.assertEqual(3,len(lmm))
229         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
232         #
233         self.assertTrue(mm.getUnivNameWrStatus())
234         self.assertTrue(isinstance(mm.getUnivName(),str))
235         self.assertTrue(len(mm.getUnivName())!=0)
236         mbis=mm.getMeshAtLevel(0)
237         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238         self.assertTrue(m.isEqual(mbis,1e-12));
239         #
240         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
241         pass
242
243     # this test is the testMEDMesh3 except that permutation is dealed here
244     @WriteInTmpDir
245     def testMEDMesh4(self):
246         outFileName="MEDFileMesh4.med"
247         c=DataArrayDouble.New()
248         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250         c.setValues(coords,9,2)
251         c.setInfoOnComponent(0,"abcdef [km]")
252         c.setInfoOnComponent(1,"ghij [MW]")
253         m=MEDCouplingUMesh.New();
254         m.setMeshDimension(2);
255         m.allocateCells(5);
256         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261         m.finishInsertingCells();
262         m.setCoords(c)
263         m.checkConsistencyLight()
264         m1=MEDCouplingUMesh.New();
265         m1.setMeshDimension(1);
266         m1.allocateCells(3);
267         m1.insertNextCell(NORM_SEG2,2,[1,4])
268         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269         m1.insertNextCell(NORM_SEG2,2,[3,6])
270         m1.finishInsertingCells();
271         m1.setCoords(c)
272         m1.checkConsistencyLight()
273         m2=MEDCouplingUMesh.New();
274         m2.setMeshDimension(0);
275         m2.allocateCells(4);
276         m2.insertNextCell(NORM_POINT1,1,[1])
277         m2.insertNextCell(NORM_POINT1,1,[3])
278         m2.insertNextCell(NORM_POINT1,1,[2])
279         m2.insertNextCell(NORM_POINT1,1,[6])
280         m2.finishInsertingCells();
281         m2.setCoords(c)
282         m2.checkConsistencyLight()
283         #
284         mm=MEDFileUMesh.New()
285         mm.setName("My2ndMEDCouplingMEDmesh")
286         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
287         mm.setCoords(c)
288         renumNode=DataArrayInt.New()
289         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290         mm.setRenumFieldArr(1,renumNode)
291         mm.computeRevNum()
292         mm.setMeshAtLevel(-1,m1,True);
293         mm.setMeshAtLevel(0,m,True);
294         mm.setMeshAtLevel(-2,m2,True);
295         mm.removeMeshAtLevel(-2)
296         mm.setMeshAtLevel(-2,m2,True);
297         # playing with groups
298         g1_2=DataArrayInt.New()
299         g1_2.setValues([2,3],2,1)
300         g1_2.setName("G1")
301         g2_2=DataArrayInt.New()
302         g2_2.setValues([2,0,3],3,1)
303         g2_2.setName("G2")
304         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305         g1_1=DataArrayInt.New()
306         g1_1.setValues([0,2,1],3,1)
307         g1_1.setName("G1")
308         g2_1=DataArrayInt.New()
309         g2_1.setValues([0,2],2,1)
310         g2_1.setName("G2")
311         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312         g1_N=DataArrayInt.New()
313         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
314         g1_N.setName("G1")
315         g2_N=DataArrayInt.New()
316         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
317         g2_N.setName("G2")
318         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319         # check content of mm
320         t=mm.getGroupArr(0,"G1",True)
321         self.assertTrue(g1_2.isEqual(t));
322         t=mm.getGroupArr(0,"G2",True)
323         self.assertTrue(g2_2.isEqual(t));
324         t=mm.getGroupArr(-1,"G1",True)
325         self.assertTrue(g1_1.isEqual(t));
326         t=mm.getGroupArr(-1,"G2",True)
327         self.assertTrue(g2_1.isEqual(t));
328         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
329         #
330         mm.write(outFileName,2);
331         mm2=MEDFileMesh.New(outFileName)
332         res=mm.isEqual(mm2,1e-12)
333         self.assertTrue(res[0])
334         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336         mm2.keepFamIdsOnlyOnLevs([3],[-1])
337         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
339             pass
340         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
342         #
343         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346         self.assertTrue(not mm2.existsFamily("Family_-8"))
347         mm2.createGroupOnAll(-1,"GrpOnAllFace")
348         self.assertTrue(mm2.existsFamily("Family_-8"))
349         self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
350         pass
351
352     #testing persistence of retrieved arrays
353     @WriteInTmpDir
354     def testMEDMesh5(self):
355         GeneratePyfile18(self)
356         fileName="Pyfile18.med"
357         mname="ExampleOfMultiDimW"
358         medmesh=MEDFileUMesh.New(fileName,mname)
359         m1_0=medmesh.getLevel0Mesh(True)
360         da1=medmesh.getFamilyFieldAtLevel(0)
361         del medmesh
362         self.assertEqual(20,m1_0.getNumberOfCells())
363         self.assertEqual(20,da1.getNumberOfTuples())
364         pass
365
366     def internalMEDMesh6(self):
367         outFileName="MEDFileMesh5.med"
368         m=MEDFileCMesh.New()
369         m.setTime(-1,-1,2.3)
370         m1=MEDCouplingCMesh.New();
371         da=DataArrayDouble.New()
372         da.setValues([0.,1.,2.],3,1)
373         da.setInfoOnComponent(0,"XX [mm]")
374         m1.setCoordsAt(0,da)
375         da=DataArrayDouble.New()
376         da.setValues([0.,1.2],2,1)
377         da.setInfoOnComponent(0,"YY [km]")
378         m1.setCoordsAt(1,da)
379         da=DataArrayDouble.New()
380         da.setValues([0.,1.3],2,1)
381         da.setInfoOnComponent(0,"ZZ [um]")
382         m1.setCoordsAt(2,da)
383         m.setMesh(m1)
384         self.assertTrue(m[0].isEqual(m1,1e-12))
385         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386         m.setName("myFirstCartMesh")
387         m.setDescription("mmmmpppppppp")
388         m.setTimeValue(2.3)
389         m.setTimeUnit("ms")
390         da=DataArrayInt.New()
391         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392         m.setFamilyFieldArr(1,da)
393         m.setFamilyId("family1",1)
394         da=m.getFamilyArr(1,"family1")
395         expected1=[2,4,9]
396         self.assertEqual(expected1,da.getValues())
397         self.assertTrue(m.getUnivNameWrStatus())
398         m.write(outFileName,2);
399         mm=MEDFileMesh.New(outFileName)
400         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401         self.assertTrue(isinstance(mm,MEDFileCMesh))
402         self.assertTrue(isinstance(mm.getUnivName(),str))
403         self.assertTrue(len(mm.getUnivName())!=0)
404         self.assertTrue(m.isEqual(mm,1e-12)[0])
405         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
406         m2=mm.getMesh()
407         tt=m.getTime()
408         m1.setTime(tt[2],tt[0],tt[1])
409         m1.setName(m.getName())
410         m1.setTimeUnit(m.getTimeUnit())
411         m1.setDescription(m.getDescription())
412         self.assertTrue(m2.isEqual(m1,1e-12));
413
414     @WriteInTmpDir
415     def testMEDMesh6(self):
416         self.internalMEDMesh6()
417         pass
418
419     @WriteInTmpDir
420     def testMEDMesh7(self):
421         fileName="Pyfile24.med"
422         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
423         m=MEDFileUMesh.New()
424         m.setCoords(m2.getCoords())
425         m.setMeshAtLevel(0,m2)
426         m.setMeshAtLevel(-1,m1)
427         m.setMeshAtLevel(-2,m0)
428         m.setFamilyFieldArr(0,f2)
429         m.setFamilyFieldArr(-1,f1)
430         m.setFamilyFieldArr(-2,f0)
431         m.setFamilyFieldArr(1,p)
432         m.setRenumFieldArr(0,n2)
433         m.setRenumFieldArr(-1,n1)
434         m.setRenumFieldArr(-2,n0)
435         nbOfFams=len(fns)
436         for i in range(nbOfFams):
437             m.addFamily(fns[i],fids[i])
438             pass
439         nbOfGrps=len(grpns)
440         for i in range(nbOfGrps):
441             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
442             pass
443         m.setName(m2.getName())
444         m.setDescription(m2.getDescription())
445         #
446         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
455         #
456         m.write(fileName,2)
457         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
458         pass
459
460     def funcToTestDelItem(self,ff):
461         del ff[[0.02,(3,4)]]
462         pass
463
464     #emulation of pointe.med file.
465     @WriteInTmpDir
466     def testMEDField1(self):
467         TestMultiFieldShuffleRW1(self)
468         mm=MEDFileMesh.New("Pyfile17.med")
469         mm.write("Pyfile17_bis.med",2)
470         ff=MEDFileFieldMultiTS("Pyfile17.med")
471         tsExpected=[[1,2],[3,4],[5,6]]
472         self.assertEqual(3,len(ff))
473         for pos,f1ts in enumerate(ff):
474             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475             self.assertEqual(type(f1ts),MEDFileField1TS)
476             pass
477         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478         self.assertEqual([3,4],ff[1].getTime()[:-1])
479         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481         ff.write("Pyfile17_bis.med",0)
482         #
483         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484         self.assertEqual([(1,2),(3,4),(5,6)],ts)
485         self.funcToTestDelItem(ff)
486         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487         self.assertEqual([(1,2)],ts)
488         pass
489
490     #profiles
491     @WriteInTmpDir
492     def testMEDField2(self):
493         GeneratePyfile19(self)
494         mm=MEDFileMesh.New("Pyfile19.med")
495         mm.write("Pyfile19_bis.med",2)
496         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497         ff.write("Pyfile19_bis.med",0)
498         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
499         pass
500
501     #gauss points
502     @WriteInTmpDir
503     def testMEDField3(self):
504         GeneratePyfile13(self)
505         mm=MEDFileMesh.New("Pyfile13.med")
506         mm.write("Pyfile13_bis.med",2)
507         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508         ff.write("Pyfile13_bis.med",0)
509         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516         ff4=MEDFileField1TS.New("Pyfile13.med")
517         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
519         pass
520
521     #gauss NE
522     @WriteInTmpDir
523     def testMEDField4(self):
524         GeneratePyfile14(self)
525         mm=MEDFileMesh.New("Pyfile14.med")
526         mm.write("Pyfile14_bis.med",2)
527         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528         ff.write("Pyfile14_bis.med",0)
529         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
533         pass
534
535     # MEDField get/set on pointe.med
536     @WriteInTmpDir
537     def testMEDField5(self):
538         TestMultiFieldShuffleRW1(self)
539         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540         f=ff.getFieldAtLevel(ON_CELLS,0)
541         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546         # no with renumbering
547         f=ff.getFieldAtLevel(ON_CELLS,0,1)
548         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550         f=ff.getFieldAtLevel(ON_CELLS,0,3)
551         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552         f=ff.getFieldAtLevel(ON_CELLS,0,2)
553         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
556         pass
557
558     # MEDField get/set on profiles nodes
559     @WriteInTmpDir
560     def testMEDField6(self):
561         GeneratePyfile7(self)
562         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563         its=ff.getIterations()
564         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568         GeneratePyfile19(self)
569         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570         its=ff.getIterations()
571         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
576         pass
577
578     # MEDField get/set on profiles cells
579     @WriteInTmpDir
580     def testMEDField7(self):
581         GeneratePyfile12(self)
582         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583         its=ff.getIterations()
584         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
587         pass
588
589     #first test of assignation. No profile and types sorted by type.
590     @WriteInTmpDir
591     def testMEDField8(self):
592         fname="Pyfile25.med"
593         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
594         m1=f1.getMesh()
595         mm1=MEDFileUMesh.New()
596         mm1.setCoords(m1.getCoords())
597         mm1.setMeshAtLevel(0,m1)
598         mm1.setName(m1.getName())
599         mm1.write(fname,2)
600         ff1=MEDFileField1TS.New()
601         ff1.setFieldNoProfileSBT(f1)
602         ff1.write(fname,0)
603         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604         itt,orr,ti=ff1.getTime()
605         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
607         ff1.setTime(3,4,2.3)
608         itt,orr,ti=ff1.getTime()
609         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
610         f1.setTime(5.5,7,8)
611         ff1.copyTimeInfoFrom(f1)
612         itt,orr,ti=ff1.getTime()
613         self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614         da,infos=ff1.getUndergroundDataArrayExt()
615         f2.getArray().setName(da.getName())#da has the same name than f2
616         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
618         #
619         fname="Pyfile26.med"
620         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
621         m1=f1.getMesh()
622         mm1=MEDFileUMesh.New()
623         mm1.setCoords(m1.getCoords())
624         mm1.setMeshAtLevel(0,m1)
625         mm1.setName(m1.getName())
626         mm1.write(fname,2)
627         ff1=MEDFileField1TS.New()
628         ff1.setFieldNoProfileSBT(f1)
629         nv=1456.
630         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
631         ff1.write(fname,0)
632         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634         f1.getArray().setIJ(0,0,nv)
635         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
636         #
637         fname="Pyfile27.med"
638         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
639         m1=f1.getMesh()
640         mm1=MEDFileUMesh.New()
641         mm1.setCoords(m1.getCoords())
642         mm1.setMeshAtLevel(0,m1)
643         mm1.setName(m1.getName())
644         mm1.write(fname,2)
645         ff1=MEDFileField1TS.New()
646         ff1.setFieldNoProfileSBT(f1)
647         ff1.write(fname,0)
648         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650         da,infos=ff1.getUndergroundDataArrayExt()
651         f2.getArray().setName(da.getName())#da has the same name than f2
652         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
654         #
655         fname="Pyfile28.med"
656         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657         f1InvalidCpy=f1.deepCopy()
658         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659         f1InvalidCpy2=f1.deepCopy()
660         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
661         m1=f1.getMesh()
662         mm1=MEDFileUMesh.New()
663         mm1.setCoords(m1.getCoords())
664         mm1.setMeshAtLevel(0,m1)
665         mm1.setName(m1.getName())
666         mm1.write(fname,2)
667         ff1=MEDFileField1TS.New()
668         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671         ff1.setFieldNoProfileSBT(f1)
672         ff1.write(fname,0)
673         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676         sbt=ff2.getFieldSplitedByType2()
677         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680         self.assertEqual(6,loc1.getNumberOfPointsInCells())
681         self.assertEqual(3,loc1.getNumberOfGaussPoints())
682         self.assertEqual(2,loc1.getDimension())
683         da,infos=ff2.getUndergroundDataArrayExt()
684         f2.getArray().setName(da.getName())#da has the same name than f2
685         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686         self.assertEqual(53,da.getNumberOfTuples())
687         self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
688         #
689         pass
690
691     @WriteInTmpDir
692     def testMEDFileData1(self):
693         fname="Pyfile29.med"
694         d=MEDFileData.New()
695         #
696         m1=MEDLoaderDataForTest.build1DMesh_1()
697         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698         mmm1=MEDFileMeshMultiTS.New() ;
699         mmm1.setOneTimeStep(mm1)
700         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
704         d.setMeshes(ms)
705         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706             self.assertEqual(name,mmm.getName())
707             self.assertEqual(type(mmm),MEDFileUMesh)
708             pass
709         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
710         #
711         ff1=MEDFileFieldMultiTS.New()
712         ff21=MEDFileFieldMultiTS.New()
713         ff22=MEDFileFieldMultiTS.New()
714         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715         f1.getArray().setInfoOnComponent(0,"power [kW]")
716         ff1.appendFieldNoProfileSBT(f1)
717         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719         ff21.appendFieldNoProfileSBT(f21)
720         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723         ff22.appendFieldNoProfileSBT(f22)
724         fs=MEDFileFields.New()
725         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726         for name,fmts in zip(["f1","f21","f22"],fs):
727             self.assertEqual(name,fmts.getName())
728             pass
729         d.setFields(fs)
730         #
731         fname2="Pyfile29_2.med"
732         d.write(fname2,2)
733         #
734         d2=MEDFileData.New(fname2)
735         self.assertEqual(2,d2.getNumberOfMeshes())
736         self.assertEqual(3,d2.getNumberOfFields())
737         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741         self.assertTrue(m1.isEqual(m1bis,1e-12))
742         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
747         pass
748
749     @WriteInTmpDir
750     def testMEDField9(self):
751         # first test field profile WR. Full type but with some type missing
752         fname="Pyfile30.med"
753         m1=MEDLoaderDataForTest.build2DMesh_3()
754         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
755         mm1.write(fname,2)
756         ff1=MEDFileField1TS.New()
757         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
761         #
762         ff1.setFieldProfile(f1,mm1,0,da)
763         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
764         ff1=ff1.deepCopy()
765         ff1.write(fname,0)
766         #
767         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769         self.assertTrue(vals.isEqual(d,1e-14))
770         #
771         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773         ff2.deepCpyGlobs(ff3)
774         sbt=ff2.getFieldSplitedByType2()
775         self.assertEqual(3,sbt[0][0])#TRI3
776         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779         self.assertEqual(4,sbt[1][0])#QUAD4
780         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786         self.assertTrue(vals.isEqual(d,1e-14))
787         pass
788
789     @WriteInTmpDir
790     def testMEDField10(self):
791         fname="Pyfile31.med"
792         m1=MEDLoaderDataForTest.build2DMesh_1()
793         m1.renumberCells([0,1,4,2,3,5],False)
794         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
795         mm1.write(fname,2)
796         ff1=MEDFileFieldMultiTS.New()
797         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
801         #
802         ff1.appendFieldProfile(f1,mm1,0,da)
803         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804         ff1.appendFieldProfile(f1,mm1,0,da)
805         ff1=ff1.deepCopy()
806         ff1.write(fname,0)
807         #
808         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810         self.assertTrue(vals.isEqual(e,1e-14))
811         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813         self.assertTrue(vals.isEqual(d,1e-14))
814         #
815         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819         self.assertTrue(vals.isEqual(e,1e-14))
820         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822         self.assertTrue(vals.isEqual(d,1e-14))
823         pass
824
825     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
826     @WriteInTmpDir
827     def testMEDField11(self):
828         fname="Pyfile32.med"
829         m1=MEDLoaderDataForTest.build2DMesh_1()
830         m1.renumberCells([0,1,4,2,3,5],False)
831         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832         mm1.write(fname,2)
833         ff1=MEDFileField1TS.New()
834         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
838         #
839         ff1.setFieldProfile(f1,mm1,0,da)
840         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
841         ff1.write(fname,0)
842         #
843         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845         self.assertTrue(vals.isEqual(d,1e-14))
846         ## #
847         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850         self.assertTrue(vals.isEqual(d,1e-14))
851         pass
852
853     @WriteInTmpDir
854     def testMEDField12(self):
855         fname="Pyfile33.med"
856         m1=MEDLoaderDataForTest.build2DMesh_1()
857         m1.renumberCells([0,1,4,2,3,5],False)
858         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
859         mm1.write(fname,2)
860         ff1=MEDFileFieldMultiTS.New()
861         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
865         #
866         ff1.appendFieldProfile(f1,mm1,0,da)
867         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868         ff1.appendFieldProfile(f1,mm1,0,da)
869         ff1.write(fname,0)
870         #
871         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873         self.assertTrue(vals.isEqual(e,1e-14))
874         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876         self.assertTrue(vals.isEqual(d,1e-14))
877         #
878         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881         self.assertTrue(vals.isEqual(e,1e-14))
882         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884         self.assertTrue(vals.isEqual(d,1e-14))
885         pass
886
887     @WriteInTmpDir
888     def testMEDField13(self):
889         fname="Pyfile34.med"
890         m1=MEDLoaderDataForTest.build2DMesh_1()
891         m1.renumberCells([0,1,4,2,3,5],False)
892         tmp=m1.getName();
893         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
895         mm1.write(fname,2)
896         ff1=MEDFileField1TS.New()
897         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
901         #
902         ff1.setFieldProfile(f1,mm1,0,da)
903         ff1.write(fname,0)
904         #
905         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907         self.assertTrue(vals.isEqual(d,1e-14))
908         #
909         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912         self.assertTrue(vals.isEqual(d,1e-14))
913         pass
914
915     @WriteInTmpDir
916     def testMEDField14(self):
917         fname="Pyfile35.med"
918         m1=MEDLoaderDataForTest.build2DMesh_1()
919         m1.renumberCells([0,1,4,2,3,5],False)
920         tmp=m1.getName();
921         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
923         mm1.write(fname,2)
924         ff1=MEDFileFieldMultiTS.New()
925         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
929         #
930         ff1.appendFieldProfile(f1,mm1,0,da)
931         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932         ff1.appendFieldProfile(f1,mm1,0,da)
933         ff1.write(fname,0)
934         #
935         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937         self.assertTrue(vals.isEqual(d,1e-14))
938         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940         self.assertTrue(vals.isEqual(e,1e-14))
941         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
942         #
943         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946         self.assertTrue(vals.isEqual(d,1e-14))
947         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949         self.assertTrue(vals.isEqual(e,1e-14))
950         pass
951     # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952     # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953     # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
954     @WriteInTmpDir
955     def testMEDField15(self):
956         fname="Pyfile36.med"
957         m0=MEDLoaderDataForTest.build2DMesh_1()
958         m0.renumberCells([0,1,4,2,3,5],False)
959         tmp=m0.getName();
960         m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962         ff1=MEDFileField1TS.New()
963         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
967         #
968         ff1.setFieldProfile(f1,mm1,0,da)
969         m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
970         mm1.write(fname,2)
971         ff1.write(fname,0)
972         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974         self.assertTrue(p1.isIota(5))
975         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
976         pass
977     # Test for getFieldAtTopLevel method
978     @WriteInTmpDir
979     def testMEDField16(self):
980         fname="Pyfile37.med"
981         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
982         m1=f1.getMesh()
983         mm1=MEDFileUMesh.New()
984         mm1.setCoords(m1.getCoords())
985         mm1.setMeshAtLevel(0,m1)
986         mm1.setName(m1.getName())
987         ff1=MEDFileField1TS.New()
988         ff1.setFieldNoProfileSBT(f1)
989         m2=m1.buildDescendingConnectivity()[0]
990         m2.sortCellsInMEDFileFrmt()
991         m2.setName(m1.getName())
992         mm1.setMeshAtLevel(-1,m2)
993         mm1.write(fname,2)
994         f2=m2.getMeasureField(True)
995         dd=DataArrayDouble.New()
996         dd.alloc(f2.getArray().getNumberOfTuples(),3)
997         dd[:,0]=f2.getArray()
998         dd[:,1]=2*f2.getArray()
999         dd[:,2]=3*f2.getArray()
1000         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1001         f2.setArray(dd)
1002         f2.copyTinyStringsFrom(f1)
1003         f2.copyTinyAttrFrom(f1)
1004         ff1.setFieldNoProfileSBT(f2)
1005         ff1.write(fname,0)
1006         # Reading Pyfile37.med
1007         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1014         # More complex
1015         fname="Pyfile38.med"
1016         mm1.write(fname,2)
1017         ff1=MEDFileField1TS.New()
1018         ff1.setFieldNoProfileSBT(f2)
1019         ff1.write(fname,0)
1020         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1023         pass
1024
1025     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1026     @WriteInTmpDir
1027     def testMEDField17(self):
1028         fname="Pyfile39.med"
1029         m1=MEDLoaderDataForTest.build2DMesh_1()
1030         m1.renumberCells([0,1,4,2,3,5],False)
1031         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1032         mm1.write(fname,2)
1033         ffs=MEDFileFields.New()
1034         ff1=MEDFileFieldMultiTS.New()
1035         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1039         #
1040         ff1.appendFieldProfile(f1,mm1,0,da)
1041         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042         ff1.appendFieldProfile(f1,mm1,0,da)
1043         ffs.resize(1)
1044         ffs.setFieldAtPos(0,ff1)
1045         ffs=ffs.deepCopy()
1046         ffs.write(fname,0)
1047         #
1048         ffsr=MEDFileFields.New(fname)
1049         ff3=ffsr.getFieldAtPos(0)
1050         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1052         pass
1053
1054     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1055     @WriteInTmpDir
1056     def testMEDField18(self):
1057         fname="Pyfile40.med"
1058         m1=MEDLoaderDataForTest.build2DMesh_1()
1059         m1.renumberCells([0,1,4,2,3,5],False)
1060         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1061         mm1.write(fname,2)
1062         ffs=MEDFileFields.New()
1063         ff1=MEDFileFieldMultiTS.New()
1064         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1068         #
1069         ff1.appendFieldProfile(f1,mm1,0,da)
1070         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071         ff1.appendFieldProfile(f1,mm1,0,da)
1072         ffs.pushField(ff1)
1073         ffs.write(fname,0)
1074         #
1075         ffsr=MEDFileFields.New(fname)
1076         ff3=ffsr.getFieldAtPos(0)
1077         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1079         pass
1080
1081     @WriteInTmpDir
1082     def testMEDFieldBug1(self):
1083         GeneratePyfile13(self)
1084         fname="Pyfile13.med"
1085         d=MEDFileData.New(fname)
1086         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1087         pass
1088
1089     @WriteInTmpDir
1090     def testMEDMesh8(self):
1091         m=MEDLoaderDataForTest.build1DMesh_1()
1092         m.convertQuadraticCellsToLinear()
1093         mm=MEDFileUMesh.New()
1094         mm.setMeshAtLevel(0,m)
1095         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098         mm.setGroupsAtLevel(0,[g1,g2],False)
1099         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103         mm.assignFamilyNameWithGroupName()
1104         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1108         #
1109         mm=MEDFileUMesh.New()
1110         mm.setMeshAtLevel(0,m)
1111         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123         mm.changeFamilyId(5,6)
1124         g=mm.getGroupArr(0,"g3")
1125         self.assertTrue(g.isEqual(g3));
1126         g=mm.getGroupArr(0,"g2")
1127         self.assertTrue(g.isEqual(g2));
1128         g=mm.getGroupArr(0,"g1")
1129         self.assertTrue(g.isEqual(g1));
1130         pass
1131
1132     # bug detected by gauthier
1133     @WriteInTmpDir
1134     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135         fname="Pyfile41.med"
1136         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1137         m1=f1.getMesh()
1138         mm1=MEDFileUMesh.New()
1139         mm1.setCoords(m1.getCoords())
1140         mm1.setMeshAtLevel(0,m1)
1141         mm1.write(fname,2)
1142         ff1=MEDFileField1TS.New()
1143         ff1.setFieldNoProfileSBT(f1)
1144         ff1.write(fname,0)
1145         # writing mesh1 and field1, now creation of mesh2 and field2
1146         f2=f1.deepCopy()
1147         m2=f2.getMesh()
1148         m2.translate([0.5,0.6,0.7])
1149         m2.setName("3DSurfMesh_2")
1150         f2.getArray()[:]*=2.
1151         f2.setName("VectorFieldOnCells2")
1152         mm2=MEDFileUMesh.New()
1153         mm2.setCoords(m2.getCoords())
1154         mm2.setMeshAtLevel(0,m2)
1155         mm2.write(fname,0)
1156         ff2=MEDFileField1TS.New()
1157         ff2.setFieldNoProfileSBT(f2)
1158         ff2.write(fname,0)
1159         #
1160         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1164         pass
1165
1166     @WriteInTmpDir
1167     def testMEDLoaderMultiLevelCellField1(self):
1168         fname="Pyfile42.med"
1169         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170         m=MEDFileUMesh.New()
1171         m.setCoords(m2.getCoords())
1172         m.setMeshAtLevel(0,m2)
1173         m.setMeshAtLevel(-1,m1)
1174         m.setMeshAtLevel(-2,m0)
1175         m.write(fname,2)
1176         #
1177         FieldName1="Field1"
1178         compNames1=["comp1","comp2","comp3"]
1179         ff1=MEDFileField1TS.New()
1180         da2=DataArrayDouble.New()
1181         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1182         da2.iota(7.)
1183         da2.rearrange(len(compNames1))
1184         da2.setInfoOnComponents(compNames1)
1185         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186         ff1.setFieldNoProfileSBT(f2)
1187         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188         da0=DataArrayDouble.New()
1189         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1190         da0.iota(190.)
1191         da0.rearrange(len(compNames1))
1192         da0.setInfoOnComponents(compNames1)
1193         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194         ff1.setFieldNoProfileSBT(f0)
1195         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196         da1=DataArrayDouble.New()
1197         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1198         da1.iota(90.)
1199         da1.rearrange(len(compNames1))
1200         da1.setInfoOnComponents(compNames1)
1201         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202         ff1.setFieldNoProfileSBT(f1)
1203         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1204         #
1205         ff1.write(fname,0)
1206         #
1207         FieldName2="Field2"
1208         compNames2=["comp11","comp22"]
1209         ff2=MEDFileField1TS.New()
1210         da0=DataArrayDouble.New()
1211         da0.alloc(m0.getNumberOfCells()*2,1)
1212         da0.iota(-190.)
1213         da0.rearrange(2)
1214         da0.setInfoOnComponents(compNames2)
1215         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216         ff2.setFieldNoProfileSBT(f0)
1217         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218         da1=DataArrayDouble.New()
1219         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1220         da1.iota(-90.)
1221         da1.rearrange(len(compNames2))
1222         da1.setInfoOnComponents(compNames2)
1223         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224         ff2.setFieldNoProfileSBT(f1)
1225         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1226         #
1227         ff2.write(fname,0)
1228         #
1229         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1235         pass
1236
1237     @WriteInTmpDir
1238     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239         fname="Pyfile43.med"
1240         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241         m=MEDFileUMesh.New()
1242         m.setMeshAtLevel(0,m2)
1243         m.setMeshAtLevel(-1,m1)
1244         m.setMeshAtLevel(-2,m0)
1245         f=MEDFileField1TS.New()
1246         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247         ff.setName("NodeFieldPfl")
1248         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1249         ff.setArray(arr)
1250         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251         f.setFieldProfile(ff,m,-2,pfl)
1252         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261         expected1=[1.,10.,100.,2.,20.,200.]
1262         nodeCoordsWithValue1=[10.,2.5,0.]
1263         nodeCoordsWithValue2=[10.,3.75,0.]
1264         for i in range(3):
1265             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1267             pass
1268         for i in range(6):
1269             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1270             pass
1271         del tes0
1272         #
1273         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1282         for i in range(6):
1283             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1284             pass
1285         m.write(fname,2)
1286         f.write(fname,0)
1287         #
1288         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289         f=MEDFileField1TS.New()
1290         f.setFieldProfile(ff,m,-2,pfl)
1291         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300         expected2=[2.,20.,200.,1.,10.,100.]
1301         for i in range(3):
1302             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1304             pass
1305         for i in range(6):
1306             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1307             pass
1308         #
1309         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1318         for i in range(6):
1319             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1320             pass
1321         pass
1322
1323     @WriteInTmpDir
1324     def testBuildInnerBoundaryAlongM1Group1(self):
1325         fname="Pyfile44.med"
1326         m=MEDCouplingCMesh.New()
1327         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332         m2.setName(m.getName())
1333         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335         mm=MEDFileUMesh.New()
1336         mm.setMeshAtLevel(0,m)
1337         mm.setMeshAtLevel(-1,m2)
1338         mm.setGroupsAtLevel(-1,[grp,grp2])
1339         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340         mm.setGroupsAtLevel(1,[grpNode])
1341         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1344         #
1345         self.assertEqual(30,mm.getNumberOfNodes())
1346         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1348         #
1349         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350         self.assertEqual([15,16,17],nodes.getValues());
1351         self.assertEqual([7,8,9],cells.getValues());
1352         self.assertEqual([12,13,14],cells2.getValues());
1353         self.assertEqual(33,mm.getNumberOfNodes())
1354         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1365         #
1366         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1371         mm.write(fname,2)
1372         pass
1373
1374     @WriteInTmpDir
1375     def testBuildInnerBoundaryAlongM1Group2(self):
1376         fname="Pyfile45.med"
1377         m=MEDCouplingCMesh.New()
1378         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383         m2.setName(m.getName())
1384         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386         mm=MEDFileUMesh.New()
1387         mm.setMeshAtLevel(0,m)
1388         mm.setMeshAtLevel(-1,m2)
1389         mm.setGroupsAtLevel(-1,[grp,grp2])
1390         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391         mm.setGroupsAtLevel(1,[grpNode])
1392         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393         ref1=[4,9,8,14,15,4,10,9,15,16]
1394         ref2=[4,9,8,14,30,4,10,9,30,16]
1395         #
1396         self.assertEqual(30,mm.getNumberOfNodes())
1397         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1399         #
1400         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401         self.assertEqual([15],nodes.getValues());
1402         self.assertEqual([7,8],cells.getValues());
1403         self.assertEqual([12,13],cells2.getValues());
1404         self.assertEqual(31,mm.getNumberOfNodes())
1405         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1416         #
1417         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1422         mm.write(fname,2)
1423         pass
1424
1425     @WriteInTmpDir
1426     def testBuildInnerBoundaryAlongM1Group3(self):
1427         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428         fname = "Pyfile73.med"
1429         m = MEDCouplingCMesh.New()
1430         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432         m = m.buildUnstructured(); m.setName("simple")
1433         m2 = m.buildDescendingConnectivity()[0]
1434         m2.setName(m.getName())
1435
1436         # A crack in two non connected parts of the mesh:
1437         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1438
1439         mm = MEDFileUMesh.New()
1440         mm.setMeshAtLevel(0,m)
1441         mm.setMeshAtLevel(-1,m2)
1442         mm.setGroupsAtLevel(-1,[grpSeg])
1443         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444         self.assertEqual([1,13],nodes.getValues());
1445         self.assertEqual([0,6],cellsMod.getValues());
1446         self.assertEqual([1,7],cellsNotMod.getValues());
1447         self.assertEqual(17,mm.getNumberOfNodes())
1448         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1456
1457         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1460         #
1461         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1465         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1466         mm.write(fname,2)
1467
1468     @WriteInTmpDir
1469     def testBuildInnerBoundaryAlongM1Group4(self):
1470         """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1471         """
1472         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473                                0.,1., 1.,1., 2.,1., 3.,1.,
1474                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475         conn = [3,0,4,1,  3,1,4,5,
1476                 3,5,9,10, 3,5,10,6,
1477                 3,2,6,7,  3,2,7,3,
1478                 3,4,8,9,  3,4,9,5,
1479                 3,1,5,6,  3,1,6,2,
1480                 3,6,10,11,3,6,11,7]
1481         # Only TRI3:
1482         connI = DataArrayInt()
1483         connI.alloc(13, 1); connI.iota(); connI *= 4
1484         m2 = MEDCouplingUMesh("2D", 2)
1485         m2.setCoords(coo)
1486         m2.setConnectivity(DataArrayInt(conn), connI)
1487         m2.checkConsistency()
1488         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491         mfu = MEDFileUMesh()
1492         mfu.setMeshAtLevel(0, m2)
1493         mfu.setMeshAtLevel(-1, m1)
1494         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495         nNod = m2.getNumberOfNodes()
1496         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497         m2_bis = mfu.getMeshAtLevel(0)
1498         m2_bis.checkConsistency()
1499         m1_bis = mfu.getMeshAtLevel(-1)
1500         m1_bis.checkConsistency()
1501         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504         self.assertEqual([6,7], nodesDup.getValues())
1505         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511 #         mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1512         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1513         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1514         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1515         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1516         self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1517         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1518         m_bis0 = mfu.getMeshAtLevel(-1)
1519         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1520         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1521
1522     @WriteInTmpDir
1523     def testBuildInnerBoundary5(self):
1524         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1525         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1526         coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1527         200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1528          200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1529          200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1530          0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1531          200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1532          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1533          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1534          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1535          97.16750463405486, 97.18018457127863], 46, 3)
1536         c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1537          39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1538          21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1539          14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1540          17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1541          24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1542          44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1543          44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1544          29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1545          21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1546          30, 2]
1547         cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1548          190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1549          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1550         m3 = MEDCouplingUMesh("3D", 3)
1551         m3.setCoords(coo)
1552         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1553         m3.checkConsistency()
1554         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1555         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1556         mfu = MEDFileUMesh()
1557         mfu.setMeshAtLevel(0, m3)
1558         mfu.setMeshAtLevel(-1, m2)
1559         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1560         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1561         mfu.setGroupsAtLevel(-1, [grpIds])
1562         nNod = m3.getNumberOfNodes()
1563         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1564         m3_bis = mfu.getMeshAtLevel(0)
1565         m3_bis.checkConsistency()
1566         m2_bis = mfu.getMeshAtLevel(-1)
1567         m2_bis.checkConsistency()
1568         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1569         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1570         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1571         self.assertEqual([3], nodesDup.getValues())
1572         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1573         self.assertEqual(set([22]), set(cells1.getValues()))
1574         self.assertEqual(set([77]), set(cells2.getValues()))
1575         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1576         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1577         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1578         m_bis0 = mfu.getMeshAtLevel(-1)
1579         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1580         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1581         pass
1582
1583     @WriteInTmpDir
1584     def testBuildInnerBoundary6(self):
1585         """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1586         The singular point was wrongly duplicated.
1587         """
1588         coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1589                                 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1590                                 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1591                                 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1592                                 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1593                                 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1594                                 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1595         c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1596               18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1597               28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1598         cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1599         m3 = MEDCouplingUMesh("3D", 3)
1600         m3.setCoords(coo)
1601         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1602         m3.checkConsistency()
1603         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1604         grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1605         mfu = MEDFileUMesh()
1606         mfu.setMeshAtLevel(0, m3)
1607         mfu.setMeshAtLevel(-1, m2)
1608         mfu.setGroupsAtLevel(-1, [grpIds])
1609         nNod = m3.getNumberOfNodes()
1610         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1611         m3_bis = mfu.getMeshAtLevel(0)
1612         m3_bis.checkConsistency()
1613         m2_bis = mfu.getMeshAtLevel(-1)
1614         m2_bis.checkConsistency()
1615         self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1616         self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1617         self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1618         self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1619         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1620         self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1621         self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1622         self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1623         self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1624         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1625         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1626         pass
1627
1628     @WriteInTmpDir
1629     def testBasicConstructors(self):
1630         GeneratePyfile18(self)
1631         fname="Pyfile18.med"
1632         TestWriteUMeshesRW1(self)
1633         m=MEDFileMesh.New(fname)
1634         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1635         m=MEDFileMesh.New(fname)
1636         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1637         m=MEDFileUMesh(fname)
1638         m=MEDFileUMesh()
1639         self.internalMEDMesh6()
1640         m=MEDFileCMesh("MEDFileMesh5.med")
1641         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1642         m=MEDFileCMesh()
1643         m=MEDFileMeshMultiTS()
1644         m=MEDFileMeshMultiTS(fname)
1645         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1646         m=MEDFileMeshes()
1647         m=MEDFileMeshes(fname)
1648         m=MEDFileField1TS()
1649         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1650         m=MEDFileFieldMultiTS()
1651         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1652         m=MEDFileFields()
1653         m=MEDFileFields(fname)
1654         m=MEDFileData()
1655         m=MEDFileData(fname)
1656         #
1657         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1658         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1659         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1660         m=MEDCouplingCMesh()
1661         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1662         m=MEDCouplingFieldTemplate(ON_NODES)
1663         m=MEDCouplingMultiFields([])
1664         m=MEDCouplingFieldOverTime([])
1665         pass
1666
1667     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1668     @WriteInTmpDir
1669     def testBugSemiPartialField(self):
1670         fname="Pyfile46.med"
1671         m=MEDLoaderDataForTest.build2DMesh_3()
1672         m=m[:10] ; m.setName("mesh")
1673         f=m.getMeasureField(False)
1674         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1675         f.setTime(5.5,3,4)
1676         f.setName("SemiPartialField")
1677         #
1678         f1=f[:6] ; f1.getMesh().setName(m.getName())
1679         f2=f[6:] ; f2.getMesh().setName(m.getName())
1680         #
1681         mm=MEDFileUMesh.New()
1682         mm.setMeshAtLevel(0,m)
1683         ff=MEDFileField1TS.New()
1684         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1685         mm.write(fname,2)
1686         ff.write(fname,0)
1687         #
1688         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1689         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1690         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1691         #
1692         fread.checkConsistencyLight()
1693         fread2.checkConsistencyLight()
1694         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1695         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1696         pass
1697
1698     @WriteInTmpDir
1699     def testUnPolyze1(self):
1700         fname="Pyfile47.med"
1701         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1702         ref=[13,14,14,12,12,12,12,12,12,12,12,13,12,14,14,13,15,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12]
1703         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1704         self.assertEqual(mm.unPolyze()[:3],(True,[[3,2,0],[4,3,2],[5,4,5],[14,2,9],[16,3,11],[31,2,14]],[[3,3,0],[4,3,3],[5,3,6],[14,3,9],[16,3,12],[18,1,15]]))
1705         mm.write(fname,2)
1706         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1707         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1708         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1709         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1710         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1711         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1712         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1713         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1714         # to test
1715         mm.setRenumFieldArr(0,None)
1716         mm.setFamilyFieldArr(-1,None)
1717         pass
1718
1719     @WriteInTmpDir
1720     def testUnPolyze2(self):
1721         fname="Pyfile48.med"
1722         mfd=MEDFileData.New()
1723         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1724         meshes=MEDFileMeshes.New()
1725         meshes.pushMesh(mm)
1726         mfd.setMeshes(meshes)
1727         fields=MEDFileFields.New()
1728         mfd.setFields(fields)
1729         ff=MEDFileFieldMultiTS.New()
1730         fields.pushField(ff)
1731         #
1732         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1733         f0_0.setTime(9.5,3,4)
1734         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1735         f0_0.setArray(da)
1736         f0_0.setMesh(mm.getMeshAtLevel(0))
1737         ff.appendFieldNoProfileSBT(f0_0)
1738         ff0=ff.getTimeStepAtPos(0)
1739         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1740         f0_1.setTime(9.5,3,4)
1741         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1742         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1743         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1744         f0_1.setArray(da)
1745         ff0.setFieldProfile(f0_1,mm,0,pfl)
1746         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1747         f0_2.setTime(9.5,3,4)
1748         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1749         da=DataArrayDouble.New([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.],8,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])#provoquer error
1750         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1751         f0_2.setArray(da)
1752         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1753         mfd.getFields().shallowCpyGlobs(ff0)
1754         #
1755         mfd.unPolyzeMeshes()
1756         #
1757         fmts=mfd.getFields()[0]
1758         self.assertEqual(fmts.getNumberOfTS(),1)
1759         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1760         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1761         self.assertEqual(entry,[((3,0),(38,40)),((4,0),(40,43)),((5,0),(43,46)),((14,0),(46,48)),((16,0),(48,49)),((18,0),(49,50)),((40,0),(0,38))])
1762         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1763         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1764         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1765         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1766         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1767         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1768         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1769         self.assertEqual([(3,[(0,(38,40),'NewPfl_0','')]),(4,[(0,(40,43),'','')]),(5,[(0,(43,46),'','')]),(14,[(0,(46,48),'NewPfl_1','')]),(16,[(0,(48,49),'NewPfl_2','')]),(18,[(0,(49,50),'','')]),(40,[(1,(0,38),'','')])],fmts.getFieldSplitedByType(3,4))
1770         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1771         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1772         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1773         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1774         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1775         self.assertEqual(ftest0.getMesh().getNodalConnectivity().getValues(),[14,4,5,6,7,14,26,27,28,29,16,20,21,22,23,24,25,18,30,31,32,33,34,35,36,37])
1776         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1777         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1778         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1779         self.assertEqual(ftest1.getMesh().getNodalConnectivity().getValues(),[3,0,1,2,3,3,4,5,4,6,7,8,9,4,10,11,12,13,4,14,15,16,17,5,18,19,20,21,22,5,23,24,25,26,27,5,31,32,33,34,35,36,37])
1780         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1781         #
1782         mfd.write(fname,2)
1783         pass
1784
1785     @WriteInTmpDir
1786     def testGaussWriteOnPfl1(self):
1787         fname="Pyfile49.med"
1788         fname2="Pyfile50.med"
1789         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1790         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1791         mQ8.allocateCells(1)
1792         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1793         mQ8.finishInsertingCells()
1794         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1795         mQ4.allocateCells(1)
1796         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1797         mQ4.finishInsertingCells()
1798         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1799         mT3.allocateCells(1)
1800         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1801         mT3.finishInsertingCells()
1802
1803         tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]]
1804         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1805         ms[:]=(elt.deepCopy() for elt in ms)
1806         for m,t in zip(ms,tr):
1807             d=m.getCoords() ; d+= t
1808             pass
1809         m=MEDCouplingUMesh.MergeUMeshes(ms)
1810         m.setName("mesh")
1811         m2=m[:13] ; m2.setName(m.getName())
1812         ### Use case 1 : Pfl on all tri3 and on all quad4. If we were on CELLS or GAUSS_NE no pfl were needed. But here 2 discs in tri3.
1813         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1814         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1815         f.setMesh(m2)
1816         f.setTime(4.5,1,2)
1817         da=DataArrayDouble(34) ; da.iota(3.)
1818         f.setArray(da)
1819         f.setName("fieldCellOnPflWithoutPfl")
1820         fInvalid=f.deepCopy()
1821         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1822         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1823         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1824         f.checkConsistencyLight()
1825         fInvalid2=fInvalid.deepCopy()
1826         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1827         #
1828         mm=MEDFileUMesh()
1829         mm.setMeshAtLevel(0,m)
1830         mm.write(fname,2)
1831         #
1832         f1ts=MEDFileField1TS.New()
1833         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1834         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1835         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1836         f1ts.setFieldProfile(f,mm,0,pfl)
1837         f1ts.write(fname,0)
1838         #
1839         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1840         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1841         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1842         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1843         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1844         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1845         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1846         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1847         #
1848         dataRead=MEDFileData.New(fname)
1849         mRead=dataRead.getMeshes()[0]
1850         f1tsRead=dataRead.getFields()[0][0]
1851         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1852         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1853         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1854         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1855         f2_bis.checkConsistencyLight()
1856         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1857         #
1858         WriteField(fname2,f,True)
1859         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1860         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1861         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1862         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1863         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1864         m2=m[pfl] ; m2.setName(m.getName())
1865         f.setMesh(m2)
1866         f.setTime(4.5,1,2)
1867         da=DataArrayDouble(35) ; da.iota(3.)
1868         f.setArray(da)
1869         f.setName("fieldCellOnPflWithoutPfl2")
1870         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1871         f.setGaussLocalizationOnCells([2,4,5],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1872         f.setGaussLocalizationOnCells([6,7,8,9],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1873         f.checkConsistencyLight()
1874         #
1875         mm=MEDFileUMesh()
1876         mm.setMeshAtLevel(0,m)
1877         mm.write(fname,2)
1878         f1ts=MEDFileField1TS.New()
1879         f1ts.setFieldProfile(f,mm,0,pfl)
1880         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1881         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1882         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1883         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1884         f1ts.write(fname,0)
1885         dataRead=MEDFileData.New(fname)
1886         mRead=dataRead.getMeshes()[0]
1887         f1tsRead=dataRead.getFields()[0][0]
1888         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1889         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1890         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1891         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1892         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1893         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1894         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1895         #
1896         WriteField(fname2,f,True)
1897         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1898         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1899         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1900         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1901         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1902         f.setMesh(m)
1903         f.setTime(4.5,1,2)
1904         da=DataArrayDouble(60) ; da.iota(3.)
1905         f.setArray(da)
1906         f.setName("fieldCellWithoutPfl")
1907         f.setGaussLocalizationOnCells([0,1,2,3,4,5,6,7,8],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1908         f.setGaussLocalizationOnCells([9,10],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.07,0.13])
1909         f.setGaussLocalizationOnCells([11,12],[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8,0.8,0.8],[0.8,0.07,0.1,0.01,0.02])
1910         f.setGaussLocalizationOnCells([13,14,15,17,18],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8,0.8,0.8],[0.8,0.1,0.03,0.07])
1911         f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1])
1912         f.checkConsistencyLight()
1913         mm=MEDFileUMesh()
1914         mm.setMeshAtLevel(0,m)
1915         f1ts=MEDFileField1TS.New()
1916         f1ts.setFieldNoProfileSBT(f)
1917         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1918         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1919         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1920         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1921         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1922         mm.write(fname,2)
1923         f1ts.write(fname,0)
1924         #
1925         dataRead=MEDFileData.New(fname)
1926         mRead=dataRead.getMeshes()[0]
1927         f1tsRead=dataRead.getFields()[0][0]
1928         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1929         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1930         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1931         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1932         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1933         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1934         #
1935         WriteField(fname2,f,True)
1936         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1937         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1938         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1939         pass
1940
1941     # Testing profile on nodes when the profile is identity but not on all nodes.
1942     @WriteInTmpDir
1943     def testMEDFieldPflOnNode1(self):
1944         fname="Pyfile51.med"
1945         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
1946         m0=MEDCouplingUMesh("Mesh",2)
1947         m0.allocateCells(5)
1948         m0.insertNextCell(NORM_TRI3,[1,4,2])
1949         m0.insertNextCell(NORM_TRI3,[4,5,2])
1950         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1951         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1952         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1953         m0.finishInsertingCells()
1954         m0.setCoords(coo)
1955         m1=MEDCouplingUMesh(m0.getName(),1)
1956         m1.allocateCells(9)
1957         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1958         for i in range(9):
1959             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1960             pass
1961         m1.finishInsertingCells()
1962         m1.setCoords(coo)
1963         #
1964         m=MEDFileUMesh()
1965         m.setMeshAtLevel(0,m0)
1966         m.setMeshAtLevel(-1,m1)
1967         #
1968         dt=3 ; it=2 ; tim=4.5
1969         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1970         fieldNode0.setName("fieldNode0")
1971         fieldNode0.setTime(tim,dt,it)
1972         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1973         arr=DataArrayDouble([10,11,12,13,14])
1974         fieldNode0.setArray(arr)
1975         f0=MEDFileField1TS()
1976         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1977         m.write(fname,2) ; f0.write(fname,0)
1978         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1979         fieldNode1.setName("fieldNode1")
1980         fieldNode1.setTime(tim,dt,it)
1981         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1982         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1983         fieldNode1.setArray(arr1)
1984         f1=MEDFileField1TS()
1985         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1986         f1.write(fname,0)
1987         del m,f0,m0,m1,f1
1988         ## Reading from file
1989         m=MEDFileMesh.New(fname)
1990         m0=m.getMeshAtLevel(0)
1991         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1992         fieldNode0.setMesh(m00)
1993         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1994         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1995         ff0_1.checkConsistencyLight()
1996         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1997         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1998         ff0_2.checkConsistencyLight()
1999         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2000         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2001         ff0_3.checkConsistencyLight()
2002         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2003         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2004         ff0_4.checkConsistencyLight()
2005         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2006         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2007         m1=m.getMeshAtLevel(-1)
2008         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2009         fieldNode1.setMesh(m10)
2010         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2011         ff1_1.checkConsistencyLight()
2012         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2013         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2014         ff1_2.checkConsistencyLight()
2015         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2016         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2017         ff1_3.checkConsistencyLight()
2018         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2019         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2020         ff1_4.checkConsistencyLight()
2021         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2022         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,m0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2023         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_NODES,0) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2024         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_NODES,0,m) # error because impossible to build a sub mesh at level 0 lying on nodes [0,1,2,3,4,5,6]
2025         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2026         arr_r.setName(fieldNode1.getArray().getName())
2027         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2028         pfl1_r.setName(pfl1.getName())
2029         self.assertTrue(pfl1_r.isEqual(pfl1))
2030         pass
2031
2032         # Testing profile on nodes when the profile is identity but not on all nodes.
2033     @WriteInTmpDir
2034     def testMEDFieldPflOnCell1(self):
2035         fname="Pyfile52.med"
2036         coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
2037         m0=MEDCouplingUMesh("Mesh",2)
2038         m0.allocateCells(5)
2039         m0.insertNextCell(NORM_TRI3,[1,4,2])
2040         m0.insertNextCell(NORM_TRI3,[4,5,2])
2041         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2042         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2043         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2044         m0.finishInsertingCells()
2045         m0.setCoords(coo)
2046         m1=MEDCouplingUMesh(m0.getName(),1)
2047         m1.allocateCells(9)
2048         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2049         for i in range(9):
2050             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2051             pass
2052         m1.finishInsertingCells()
2053         m1.setCoords(coo)
2054         #
2055         m=MEDFileUMesh()
2056         m.setMeshAtLevel(0,m0)
2057         m.setMeshAtLevel(-1,m1)
2058         #
2059         dt=3 ; it=2 ; tim=4.5
2060         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2061         fieldCell0.setName("fieldCell0")
2062         fieldCell0.setTime(tim,dt,it)
2063         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2064         arr=DataArrayDouble([10,11,12])
2065         fieldCell0.setArray(arr)
2066         f0=MEDFileField1TS()
2067         f0.setFieldProfile(fieldCell0,m,0,pfl0)
2068         m.write(fname,2) ; f0.write(fname,0)
2069         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2070         fieldCell1.setName("fieldCell1")
2071         fieldCell1.setTime(tim,dt,it)
2072         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2073         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2074         fieldCell1.setArray(arr1)
2075         f1=MEDFileField1TS()
2076         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2077         f1.write(fname,0)
2078         del m,f0,m0,m1,f1
2079         ## Reading from file
2080         m=MEDFileMesh.New(fname)
2081         m0=m.getMeshAtLevel(0)
2082         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2083         fieldCell0.setMesh(m00)
2084         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2085         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2086         ff0_1.checkConsistencyLight()
2087         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2088         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2089         ff0_2.checkConsistencyLight()
2090         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2091         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2092         ff0_3.checkConsistencyLight()
2093         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2094         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2095         ff0_4.checkConsistencyLight()
2096         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2097         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2098         m1=m.getMeshAtLevel(-1)
2099         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2100         fieldCell1.setMesh(m10)
2101         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2102         ff1_1.checkConsistencyLight()
2103         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2104         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2105         ff1_2.checkConsistencyLight()
2106         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2107         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2108         ff1_3.checkConsistencyLight()
2109         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2110         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2111         ff1_4.checkConsistencyLight()
2112         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2113         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,m0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2114         self.assertRaises(InterpKernelException,f1.getFieldAtLevel,ON_CELLS,0) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2115         self.assertRaises(InterpKernelException,f1.getFieldOnMeshAtLevel,ON_CELLS,0,m) # error because impossible to build a sub mesh at level 0 lying on cells [0,1,2,3,4,5,6]
2116         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2117         arr_r.setName(fieldCell1.getArray().getName())
2118         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2119         pfl1_r.setName(pfl1.getName())
2120         self.assertTrue(pfl1_r.isEqual(pfl1))
2121         pass
2122
2123     @WriteInTmpDir
2124     def testMEDFileUMeshZipCoords1(self):
2125         m=MEDFileUMesh()
2126         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2127         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2128         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2129         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2130         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2131         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2132         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2133         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2134         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2135         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2136         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2137         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2138         o2n=m.zipCoords()
2139         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2140         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2141         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2142         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2143         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2144         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2145         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2146         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2147         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2148         pass
2149
2150     @WriteInTmpDir
2151     def testMEDUMeshAddNodeGroup1(self):
2152         fname="Pyfile53.med"
2153         m=MEDFileUMesh()
2154         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2155         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0) ; m0.insertNextCell(NORM_TRI3,[1,2,3]) ; m0.insertNextCell(NORM_QUAD4,[2,4,3,4]) ; m0.insertNextCell(NORM_POLYGON,[1,6,6,6,2])
2156         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2157         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2158         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2159         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2160         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2161         #
2162         mm=m.deepCopy()
2163         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2164         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2165         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2166         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2167         mm.setFamilyId("MyFam",2)
2168         mm.setFamilyId("MyOtherFam",3)
2169         mm.setFamilyId("MyOther-1",-1)
2170         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2171         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2172         #
2173         self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2174         #
2175         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2176         mm.addNodeGroup(daTest)
2177         self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2178         self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2179         #
2180         expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2181         self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2182         #
2183         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2184         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2185         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2186             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2187             pass
2188         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2189         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2190         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2191         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2192         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2193             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2194             pass
2195         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2196         da=DataArrayInt([3,12]) ; da.setName("grp0")
2197         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2198         da.setValues([1])
2199         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2200         mm.write(fname,2)
2201         mm=MEDFileMesh.New(fname)
2202         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2203         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2204         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2205             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2206             pass
2207         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2208         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2209         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2210         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2211         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2212             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2213             pass
2214         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2215         da=DataArrayInt([3,12]) ; da.setName("grp0")
2216         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2217         da.setValues([1])
2218         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2219         pass
2220
2221     @WriteInTmpDir
2222     def testMEDUMeshAddGroup1(self):
2223         fname="Pyfile54.med"
2224         m=MEDFileUMesh()
2225         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2226         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2227         for i in range(7):
2228             m0.insertNextCell(NORM_TRI3,[1,2,1])
2229             pass
2230         for i in range(4):
2231             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2232             pass
2233         for i in range(2):
2234             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2235             pass
2236         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2237         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2238         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2239         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2240         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2241         #
2242         mm=m.deepCopy()
2243         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2244         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2245         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2246         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2247         mm.setFamilyId("MyFam",2)
2248         mm.setFamilyId("MyOtherFam",3)
2249         mm.setFamilyId("MyOther-1",-1)
2250         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2251         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2252         #
2253         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2254         mm.addGroup(0,daTest)
2255         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2256         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2257         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2258             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2259             pass
2260         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2261         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2262         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2263         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2264         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2265             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2266             pass
2267         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2268         da=DataArrayInt([3,12]) ; da.setName("grp0")
2269         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2270         da.setValues([1])
2271         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2272         mm.write(fname,2)
2273         mm=MEDFileMesh.New(fname)
2274         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2275         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2276         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2277             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2278             pass
2279         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2280         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2281         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2282         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2283         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2284             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2285             pass
2286         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2287         da=DataArrayInt([3,12]) ; da.setName("grp0")
2288         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2289         da.setValues([1])
2290         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2291         pass
2292
2293     @WriteInTmpDir
2294     def testHeapMem1(self):
2295         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2296         a.alloc(0,1)
2297         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2298         #
2299         m=MEDCouplingCMesh()
2300         arr=DataArrayDouble(10,1) ; arr.iota(0)
2301         m.setCoords(arr,arr)
2302         m=m.buildUnstructured()
2303         m.setName("mm")
2304         f=m.getMeasureField(False)
2305         cooMem = 100 * 2 * 8
2306         nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2307         indexMem = 82 * MEDCouplingSizeOfIDs()//8
2308         meshMem = cooMem + nodalMem + indexMem
2309         self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2310         delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2311         self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2312         #
2313         mm=MEDFileUMesh()
2314         mm.setMeshAtLevel(0,m)
2315         self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2316         ff=MEDFileField1TS()
2317         ff.setFieldNoProfileSBT(f)
2318         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2319         #
2320         fff=MEDFileFieldMultiTS()
2321         fff.appendFieldNoProfileSBT(f)
2322         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2323         f.setTime(1.,0,-1)
2324         fff.appendFieldNoProfileSBT(f)
2325         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2326         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2327         f2=f[:50]
2328         f2.setTime(2.,1,-1)
2329         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2330         fff.appendFieldProfile(f2,mm,0,pfl)
2331         self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2332         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2333         self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8))  + 30 + 4 * strMulFac))
2334         pass
2335
2336     def internalCurveLinearMesh1(self):
2337         fname="Pyfile55.med"
2338         mesh=MEDCouplingCurveLinearMesh();
2339         mesh.setTime(2.3,4,5);
2340         mesh.setTimeUnit("us");
2341         mesh.setName("Example of Cuve linear mesh");
2342         mesh.setDescription("buildCLMesh");
2343         a1=DataArrayDouble(3*20,1);
2344         a1.iota(7.) ; a1.rearrange(3);
2345         mesh.setCoords(a1);
2346         mesh.setNodeGridStructure([4,5]);
2347         mesh.checkConsistencyLight();
2348         #
2349         m=MEDFileCurveLinearMesh()
2350         m.setMesh(mesh)
2351         d=DataArrayInt(20) ; d.iota(4)
2352         m.setFamilyFieldArr(1,d)
2353         d3=DataArrayInt(20) ; d3.iota(400)
2354         m.setRenumFieldArr(1,d3)
2355         d2=DataArrayInt(12) ; d2.iota(40)
2356         m.setFamilyFieldArr(0,d2)
2357         d4=DataArrayInt(21) ; d4.iota(4000)
2358         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2359         d4.popBackSilent()
2360         m.setRenumFieldArr(1,d4)
2361         m.write(fname,2)
2362         #
2363         m1=MEDFileCurveLinearMesh(fname)
2364         mm=m1.getMesh()
2365         self.assertTrue(mm.isEqual(mesh,1e-12))
2366         self.assertEqual(mm.getSpaceDimension(),3)
2367         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2368         #
2369         m1=MEDFileMesh.New(fname)
2370         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2371         self.assertTrue(isinstance(m1.getUnivName(),str))
2372         self.assertTrue(len(m1.getUnivName())!=0)
2373         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2374         pass
2375
2376     @WriteInTmpDir
2377     def testCurveLinearMesh1(self):
2378         self.internalCurveLinearMesh1()
2379
2380     @WriteInTmpDir
2381     def testParameters1(self):
2382         self.internalParameters1()
2383
2384     def internalParameters1(self):
2385         fname="Pyfile56.med"
2386         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2387         mm=MEDFileCMesh() ; mm.setMesh(m)
2388         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2389         data=MEDFileData()
2390         p=MEDFileParameters()
2391         data.setParams(p) ; data.setMeshes(ms)
2392         pts=MEDFileParameterMultiTS()
2393         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2394         pts.appendValue(1,2,3.4,567.89)
2395         pts.appendValue(2,3,5.6,999.123)
2396         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2397         p.pushParam(pts) ; p.pushParam(pts2)
2398         data.write(fname,2)
2399         p2=MEDFileParameters(fname)
2400         self.assertTrue(p.isEqual(p2,1e-14)[0])
2401         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2402         p3=p.deepCopy()
2403         pts4=pts2.deepCopy()
2404         pts3=pts2.deepCopy()
2405         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2406         pts2.eraseTimeStepIds([0])
2407         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2408         del pts3[[3.4]]
2409         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2410         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2411         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2412         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2413         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2414         p=p3
2415         self.assertTrue(p.isEqual(p2,1e-14)[0])
2416         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2417         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2418         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2419         self.assertEqual(p.getParamsNames(),('A','B'))
2420         ptsr=MEDFileParameterMultiTS(fname,"B")
2421         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2422         ptsr=MEDFileParameterMultiTS(fname)
2423         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2424         p1tsr=MEDFileParameterDouble1TS(fname)
2425         self.assertEqual(p1tsr.getName(),"A")
2426         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2427         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2428         self.assertEqual(p1tsr.getName(),"B")
2429         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2430         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2431         self.assertEqual(p1tsr.getName(),"B")
2432         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2433         data2=MEDFileData(fname)
2434         self.assertEqual(2,data2.getNumberOfParams())
2435         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2436         pass
2437
2438     @WriteInTmpDir
2439     def testNamesOnCellAndNodesInMeshes1(self):
2440         fname="Pyfile58.med"
2441         fname2="Pyfile59.med"
2442         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2443         m1=m.buildDescendingConnectivity()[0]
2444         m1.sortCellsInMEDFileFrmt()
2445         #
2446         mm=MEDFileUMesh()
2447         mm.setMeshAtLevel(0,m)
2448         mm.setMeshAtLevel(-1,m1)
2449         namesCellL0=DataArrayAsciiChar(6,16)
2450         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2451         mm.setNameFieldAtLevel(0,namesCellL0)
2452         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2453         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2454         mm.setNameFieldAtLevel(-1,namesCellL1)
2455         namesNodes=namesCellL1.subArray(4,16)
2456         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2457         mm.setNameFieldAtLevel(1,namesNodes)
2458         mm.write(fname,2)
2459         #
2460         mmr=MEDFileMesh.New(fname)
2461         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2462         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2463         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2464         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2465         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2466         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2467         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2468         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2469         mmCpy=mm.deepCopy()
2470         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2471         # remove names on nodes
2472         mmCpy.setNameFieldAtLevel(1,None)
2473         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2474         mm.setNameFieldAtLevel(1,None)
2475         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2476         mm.setNameFieldAtLevel(-1,None)
2477         mm.write(fname,2)
2478         mmr=MEDFileMesh.New(fname)
2479         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2480         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2481         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2482         #
2483         c=MEDCouplingCMesh()
2484         arr=DataArrayDouble([0.,1.1,2.3])
2485         c.setCoords(arr,arr)
2486         c.setName("cmesh")
2487         cc=MEDFileCMesh()
2488         cc.setMesh(c)
2489         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2490         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2491         cc.write(fname2,2)
2492         ccr=MEDFileMesh.New(fname2)
2493         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2494         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2495         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2496         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2497         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2498         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2499         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2500         ccCpy=cc.deepCopy()
2501         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2502         pass
2503
2504     @WriteInTmpDir
2505     def testToExportInExamples1(self):
2506         m=MEDCouplingCMesh()
2507         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2508         m.setCoords(arr,arr)
2509         m=m.buildUnstructured() ; m.setName("mesh")
2510         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2511         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2512         m2=m.computeSkin()
2513         mm=MEDFileUMesh()
2514         mm.setMeshAtLevel(0,m)
2515         mm.setMeshAtLevel(-1,m2)
2516         mm.setGroupsAtLevel(0,[grp1,grp2])
2517         mm.write("example.med",2)
2518         #
2519         m0=mm.getMeshAtLevel(0)
2520         m1=mm.getMeshAtLevel(-1)
2521         grp1=mm.getGroupArr(0,"grp1")
2522         grp2=mm.getGroupArr(0,"grp2")
2523         grps=[grp1,grp2]
2524         whichGrp=DataArrayInt(m0.getNumberOfCells())
2525         whichGrp.fillWithValue(-1)
2526         for grpId,grp in enumerate(grps):
2527             whichGrp[grp]=grpId
2528             pass
2529         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2530         e,f=a.areCellsIncludedIn(m1,2)
2531         self.assertTrue(e)
2532         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2533         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2534         c2.transformWithIndArr(whichGrp)
2535         splitOfM1=len(grps)*[None]
2536         for grpId,grp in enumerate(grps):
2537             tmp=c2.findIdsEqual(grpId)
2538             splitOfM1[grpId]=tmp
2539             pass
2540         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2541         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2542         pass
2543
2544     @WriteInTmpDir
2545     def testBugCorrection1(self):
2546         fs=MEDFileFields()
2547         fs.resize(3)
2548         self.assertEqual(fs[0],None)
2549         self.assertEqual(3,len(fs))
2550         pass
2551
2552     @WriteInTmpDir
2553     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2554         f1Name="Pyfile60.med"
2555         f2Name="Pyfile61.med"
2556         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2557         d1.write(f1Name,2)
2558         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2559         d2.write(f2Name,2)
2560         # reading and compare
2561         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2562         for mn in d1.getMeshes().getMeshesNames():
2563             m1=d1.getMeshes()[mn]
2564             m2=d2.getMeshes()[mn]
2565             for lev in m1.getNonEmptyLevels():
2566                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2567                 for grpName in grpsNames:
2568                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2569                     pass
2570                 pass
2571             pass
2572         for fieldn in d1.getFields().getFieldsNames():
2573             f1=d1.getFields()[fieldn]
2574             f2=d2.getFields()[fieldn]
2575             for it,order,tim in f1.getTimeSteps():
2576                 f1t=f1[it,order]
2577                 f2t=f2[it,order]
2578                 if len(f1t.getPflsReallyUsed())!=0:
2579                     # profile case
2580                     for lev in f1t.getNonEmptyLevels()[1]:
2581                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2582                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2583                         self.assertTrue(pfl1.isEqual(pfl2))
2584                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2585                         pass
2586                     pass
2587                 else:
2588                     # no profile case
2589                     for lev in f1t.getNonEmptyLevels()[1]:
2590                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2591                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2592                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2593                         pass
2594                     pass
2595                 pass
2596             pass
2597         pass
2598
2599     @WriteInTmpDir
2600     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2601         m=MEDCouplingCMesh()
2602         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2603         m.setCoords(arr,arr,arr)
2604         m=m.buildUnstructured()
2605         m2=m.buildDescendingConnectivity()[0]
2606         m.setName("mesh")
2607         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2608         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2609         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2610         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2611         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2612         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2613         mm=MEDFileUMesh()
2614         mm.setMeshAtLevel(0,m)
2615         mm.setGroupsAtLevel(0,[g1,g2])
2616         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2617         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2618         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2619         mm.normalizeFamIdsMEDFile()
2620         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2621         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2622         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2623         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2624         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2625         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2626         for g in mm.getGroupsOnSpecifiedLev(0):
2627             for f in mm.getFamiliesIdsOnGroup(g):
2628                 self.assertTrue(f<0)
2629                 pass
2630             pass
2631         #
2632         mm=MEDFileUMesh()
2633         mm.setMeshAtLevel(0,m)
2634         mm.setMeshAtLevel(-1,m2)
2635         mm.setGroupsAtLevel(0,[g1,g2])
2636         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2637         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2638         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2639         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2640         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2641         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2642         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2643         mm.normalizeFamIdsMEDFile()
2644         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2645         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2646         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2647         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2648         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2649         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2650         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2651         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2652         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2653         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2654         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2655         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2656         for lev in [0,-1]:
2657             for g in mm.getGroupsOnSpecifiedLev(lev):
2658                 for f in mm.getFamiliesIdsOnGroup(g):
2659                     self.assertTrue(f<0)
2660                     pass
2661                 pass
2662             pass
2663          #
2664         mm=MEDFileUMesh()
2665         mm.setMeshAtLevel(0,m)
2666         mm.setMeshAtLevel(-1,m2)
2667         mm.setGroupsAtLevel(0,[g1,g2])
2668         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2669         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2670         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2671         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2672         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2673         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2674         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2675         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2676         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2677         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2678         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2679         mm.normalizeFamIdsMEDFile()
2680         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2681         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2682         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2683         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2684         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2685         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2686         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2687         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2688         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2689         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2690         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2691         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2692         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2693         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2694         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2695         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2696         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2697         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2698         for lev in [0,-1]:
2699             for g in mm.getGroupsOnSpecifiedLev(lev):
2700                 for f in mm.getFamiliesIdsOnGroup(g):
2701                     self.assertTrue(f<0)
2702                     pass
2703                 pass
2704             pass
2705         for g in mm.getGroupsOnSpecifiedLev(1):
2706             for f in mm.getFamiliesIdsOnGroup(g):
2707                 self.assertTrue(f>0)
2708                 pass
2709             pass
2710         pass
2711
2712     @WriteInTmpDir
2713     def testNonRegressionMantis22212ChangeGrpName(self):
2714         fileName="Pyfile62.med"
2715         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2716         m=MEDFileUMesh.New()
2717         m.setCoords(m2.getCoords())
2718         m.setMeshAtLevel(0,m2)
2719         m.setMeshAtLevel(-1,m1)
2720         m.setMeshAtLevel(-2,m0)
2721         m.setFamilyFieldArr(0,f2)
2722         m.setFamilyFieldArr(-1,f1)
2723         m.setFamilyFieldArr(-2,f0)
2724         m.setFamilyFieldArr(1,p)
2725         nbOfFams=len(fns)
2726         for i in range(nbOfFams):
2727             m.addFamily(fns[i],fids[i])
2728             pass
2729         nbOfGrps=len(grpns)
2730         for i in range(nbOfGrps):
2731             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2732             pass
2733         m.setName(m2.getName())
2734         m.setDescription(m2.getDescription())
2735         m.write(fileName,2)
2736         #
2737         mm0=MEDFileMesh.New(fileName)
2738         mm1=MEDFileMesh.New(fileName)
2739         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2740         for name in groupNamesIni:
2741             mm1.changeGroupName(name,name+'N')
2742             pass
2743         mm1.write(fileName,2)
2744         del mm1
2745         #
2746         mm2=MEDFileMesh.New(fileName)
2747         for name in groupNamesIni:
2748             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2749                 arr0=mm0.getGroupArr(lev,name)
2750                 arr2=mm2.getGroupArr(lev,name+'N')
2751                 arr0.setName(name+'N')
2752                 self.assertTrue(arr0.isEqual(arr2))
2753                 pass
2754             pass
2755         pass
2756
2757     @WriteInTmpDir
2758     def testInt32InMEDFileFieldStar1(self):
2759         self.internalInt32InMEDFileFieldStar1()
2760
2761     def internalInt32InMEDFileFieldStar1(self):
2762         fname="Pyfile63.med"
2763         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2764         f1=f1.convertToIntField()
2765         m1=f1.getMesh()
2766         mm1=MEDFileUMesh.New()
2767         mm1.setCoords(m1.getCoords())
2768         mm1.setMeshAtLevel(0,m1)
2769         mm1.setName(m1.getName())
2770         mm1.write(fname,2)
2771         ff1=MEDFileIntField1TS()
2772         ff1.setFieldNoProfileSBT(f1)
2773         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2774         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2775         self.assertTrue(a.isEqual(f1,1e-12,0))
2776         ff1.write(fname,0)
2777         a,b=ff1.getUndergroundDataArrayExt()
2778         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2779         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2780         ff2=MEDFileAnyTypeField1TS.New(fname)
2781         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2782         self.assertEqual(ff2.getTime(),[0,1,2.0])
2783         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2784         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2785         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2786         self.assertTrue(a.isEqual(f1,1e-12,0))
2787         ff2.setTime(1,2,3.)
2788         c=ff2.getUndergroundDataArray() ; c*=2
2789         ff2.write(fname,0) # 2 time steps in
2790         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2791         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2792         self.assertEqual(len(ffs1),2)
2793         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2794         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2795         self.assertTrue(a.isEqual(f1,1e-12,0))
2796         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2797         self.assertTrue(a.isEqual(f1,1e-12,0))
2798         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2799         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2800         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2801         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2802         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2803         bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2804         for it in ffs1:
2805             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2806             bc+=a.getArray()
2807             pass
2808         self.assertTrue(bc.isEqual(3*f1.getArray()))
2809         nf1=MEDCouplingFieldInt(ON_NODES)
2810         nf1.setTime(9.,10,-1)
2811         nf1.setMesh(f1.getMesh())
2812         narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2813         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2814         nff1=MEDFileIntField1TS.New()
2815         nff1.setFieldNoProfileSBT(nf1)
2816         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2817         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2818         nff1.write(fname,0)
2819         #
2820         nf2=MEDCouplingFieldInt(ON_NODES)
2821         nf2.setTime(19.,20,-11)
2822         nf2.setMesh(f1.getMesh())
2823         narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2824         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2825         nff2=MEDFileIntField1TS.New()
2826         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2827         nff2.setFieldProfile(nf2,mm1,0,npfl)
2828         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2829         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2830         self.assertTrue(b.isEqual(npfl))
2831         self.assertTrue(a.isEqual(narr2))
2832         nff2.write(fname,0)
2833         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2834         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2835         self.assertTrue(b.isEqual(npfl))
2836         self.assertTrue(a.isEqual(narr2))
2837         #
2838         nf3=MEDCouplingFieldDouble(ON_NODES)
2839         nf3.setName("VectorFieldOnNodesDouble")
2840         nf3.setTime(29.,30,-21)
2841         nf3.setMesh(f1.getMesh())
2842         nf3.setArray(f1.getMesh().getCoords())
2843         nff3=MEDFileField1TS.New()
2844         nff3.setFieldNoProfileSBT(nf3)
2845         nff3.write(fname,0)
2846         fs=MEDFileFields(fname)
2847         self.assertEqual(len(fs),4)
2848         ffs=[it for it in fs]
2849         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2850         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2851         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2852         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2853         #
2854         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2855         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2856         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2857         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2858         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2859         #
2860         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2861         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2862         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2863         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2864         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2865         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2866         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2867         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2868         #
2869         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2870         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2871         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2872         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2873         pass
2874
2875     @WriteInTmpDir
2876     def testMEDFileFields1(self):
2877         fname="Pyfile64.med"
2878         f1=MEDCouplingFieldDouble(ON_NODES)
2879         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2880         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2881         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2882         f1.setMesh(m)
2883         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2884         f1.setArray(arr)
2885         f1.setName("Field1")
2886         ff1=MEDFileField1TS.New()
2887         ff1.setFieldNoProfileSBT(f1)
2888         self.assertEqual(ff1.getDtUnit(),"us")
2889         ff1.write(fname,0)
2890         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2891         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2892         #
2893         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2894         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2895         ff1s.setName("Field2")
2896         ff1s.write(fname,0)
2897         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2898         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2899         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2900         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2901         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2902         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2903         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2904         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2905         pass
2906
2907     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2908     @WriteInTmpDir
2909     def testMEDFileFields2(self):
2910         fname="Pyfile65.med"
2911         # to check that all is initialize
2912         MEDFileField1TS().__str__()
2913         MEDFileFieldMultiTS().__str__()
2914         # building a mesh containing 4 tri3 + 5 quad4
2915         tri=MEDCouplingUMesh("tri",2)
2916         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2917         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2918         tris = [tri.deepCopy() for i in range(4)]
2919         for i,elt in enumerate(tris): elt.translate([i,0])
2920         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2921         quad=MEDCouplingUMesh("quad",2)
2922         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2923         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2924         quads = [quad.deepCopy() for i in range(5)]
2925         for i,elt in enumerate(quads): elt.translate([5+i,0])
2926         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2927         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2928         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2929         #
2930         fmts0_0=MEDFileFieldMultiTS()
2931         fmts0_1=MEDFileFieldMultiTS()
2932         # time steps
2933         for i in range(10):
2934             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2935             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2936             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2937             f.setTime(float(i+1)+0.1,i+1,-i-1)
2938             fmts0_0.appendFieldNoProfileSBT(f)
2939             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2940             self.assertEqual(fmts0_1.getName(),name1)
2941             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2942             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2943             if i>1:
2944                 # components names have been modified to generate errors
2945                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2946                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2947                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2948                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2949                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2950                 pass
2951             # add a mismatch of nb of compos
2952             pass
2953         fmts0_2=fmts0_0.deepCopy()
2954         fmts0_3=fmts0_0.deepCopy()
2955         fmts0_4=fmts0_0.deepCopy()
2956         fmts0_5=fmts0_0.shallowCpy()
2957         self.assertTrue(len(fmts0_0)==10 and len(fmts0_1)==10 and len(fmts0_2)==10 and len(fmts0_3)==10 and len(fmts0_4)==10 and len(fmts0_5)==10)
2958         del fmts0_2[::2]
2959         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2960         del fmts0_3[[1.1,(6,-6),9]]
2961         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2962         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2963         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2964         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2965         fmts0_7=fmts0_4[::-3]
2966         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2967         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2968         #
2969         fs0=MEDFileFields()
2970         fs0.pushField(fmts0_0)
2971         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2972         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2973         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2974         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2975         fs0.write(fname,2)
2976         fs0=MEDFileFields(fname)
2977         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2978         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2979         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2980         del fs1[["2ndField",3]]
2981         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2982         fs2=fs0[[0,"4thField"]]
2983         self.assertTrue(isinstance(fs2,MEDFileFields))
2984         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2985         #
2986         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2987         pass
2988
2989     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2990     @WriteInTmpDir
2991     def testMEDFileFields3(self):
2992         fname="Pyfile66.med"
2993         # building a mesh containing 4 tri3 + 5 quad4
2994         tri=MEDCouplingUMesh("tri",2)
2995         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2996         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2997         tris = [tri.deepCopy() for i in range(4)]
2998         for i,elt in enumerate(tris): elt.translate([i,0])
2999         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3000         quad=MEDCouplingUMesh("quad",2)
3001         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3002         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3003         quads = [quad.deepCopy() for i in range(5)]
3004         for i,elt in enumerate(quads): elt.translate([5+i,0])
3005         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3006         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3007         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3008         #
3009         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3010         #
3011         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3012         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3013         fmts0_0=MEDFileFieldMultiTS()
3014         fmts0_1=MEDFileFieldMultiTS()
3015         # time steps
3016         for i in range(10):
3017             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3018             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3019             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3020             f.setTime(float(i+1)+0.1,i+1,-i-1)
3021             fmts0_0.appendFieldProfile(f,mm,0,pfl)
3022             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3023             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3024             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3025             pass
3026         #
3027         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3028         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3029         fmts0_0.zipPflsNames()
3030         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3031         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3032         fmts0_2=fmts0_0.deepCopy()
3033         fmts0_3=fmts0_0.deepCopy()
3034         fmts0_4=fmts0_0.deepCopy()
3035         fs0=MEDFileFields()
3036         fs0.pushField(fmts0_0)
3037         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3038         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3039         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3040         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3041         #
3042         fmts0_5=MEDFileFieldMultiTS()
3043         for i in range(7):
3044             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3045             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3046             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3047             f.setTime(float(i+1)+0.1,i+1,-i-1)
3048             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3049             pass
3050         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3051         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3052         fs0.checkGlobsCoherency()
3053         fs0.write(fname,0)
3054         pass
3055
3056     @WriteInTmpDir
3057     def testSplitComponents1(self):
3058         fname="Pyfile67.med"
3059         # building a mesh containing 4 tri3 + 5 quad4
3060         tri=MEDCouplingUMesh("tri",2)
3061         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3062         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3063         tris = [tri.deepCopy() for i in range(4)]
3064         for i,elt in enumerate(tris): elt.translate([i,0])
3065         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3066         quad=MEDCouplingUMesh("quad",2)
3067         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3068         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3069         quads = [quad.deepCopy() for i in range(5)]
3070         for i,elt in enumerate(quads): elt.translate([5+i,0])
3071         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3072         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3073         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3074         #
3075         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3076         #
3077         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3078         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3079         fs=MEDFileFields()
3080         fmts0_1=MEDFileFieldMultiTS()
3081         # time steps
3082         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3083         for i in range(10):
3084             name1="1stField"
3085             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3086             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3087             f.setTime(float(i+1)+0.1,i+1,-i-1)
3088             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3089             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3090             pass
3091         fs.pushField(fmts0_1)
3092         self.assertEqual(1,len(fs))
3093         l=fmts0_1.splitComponents()
3094         self.assertEqual(3,len(l))
3095         for elt in l: self.assertEqual(10,len(elt))
3096         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3097         for elt in l:
3098             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3099             pass
3100         fs.pushFields(l)
3101         self.assertEqual(4,len(fs))
3102         for elt in fs: self.assertEqual(10,len(elt))
3103         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3104         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3105         #
3106         fs.write(fname,0) ; del fs
3107         #
3108         fs1=MEDFileFields(fname)
3109         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3110         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3111         self.assertEqual(4,len(fs1))
3112         for i in range(10):
3113             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3114                 f1ts=fs1[fieldName][i]
3115                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3116                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3117                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3118                 pass
3119             f1ts=fs1["1stField"][i]
3120             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3121             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3122             self.assertTrue(d.isEqual(f.getArray(),1e-13))
3123             pass
3124         pass
3125
3126     @WriteInTmpDir
3127     def testMEDFileFieldConvertTo1(self):
3128         fname="Pyfile68.med"
3129         # building a mesh containing 4 tri3 + 5 quad4
3130         tri=MEDCouplingUMesh("tri",2)
3131         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3132         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3133         tris = [tri.deepCopy() for i in range(4)]
3134         for i,elt in enumerate(tris): elt.translate([i,0])
3135         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3136         quad=MEDCouplingUMesh("quad",2)
3137         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3138         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3139         quads = [quad.deepCopy() for i in range(5)]
3140         for i,elt in enumerate(quads): elt.translate([5+i,0])
3141         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3142         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3143         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3144         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3145         #
3146         ff0=MEDFileField1TS()
3147         f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m) ; arr=DataArrayDouble(m.getNumberOfCells()*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCell")
3148         f0.checkConsistencyLight()
3149         ff0.setFieldNoProfileSBT(f0)
3150         #
3151         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3152         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3153         #
3154         ff0i=ff0.convertToInt()
3155         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3156         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3157         #
3158         ff1=ff0i.convertToDouble()
3159         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3160         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3161         # With profiles
3162         del arr,f0,ff0,ff1,ff0i,fspExp
3163         ff0=MEDFileField1TS()
3164         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")
3165         f0.checkConsistencyLight()
3166         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3167         ff0.setFieldProfile(f0,mm,0,pfl)
3168         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3169         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3170         #
3171         ff0i=ff0.convertToInt()
3172         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3173         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3174         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3175         #
3176         ff1=ff0i.convertToDouble()
3177         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3178         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3179         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3180         ## MultiTimeSteps
3181         ff0=MEDFileFieldMultiTS()
3182         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)
3183         f0.checkConsistencyLight()
3184         ff0.appendFieldProfile(f0,mm,0,pfl)
3185         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)
3186         f0.checkConsistencyLight()
3187         ff0.appendFieldProfile(f0,mm,0,pfl)
3188         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)
3189         f0.checkConsistencyLight()
3190         ff0.appendFieldProfile(f0,mm,0,pfl)
3191         ff1=ff0.convertToInt()
3192         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3193         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3194         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3195             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3196             arr=ff1.getUndergroundDataArray(dt,it)
3197             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3198             pass
3199         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3200         #
3201         mm.write(fname,2)
3202         ff1.write(fname,0)
3203         #
3204         ff1=ff1.convertToDouble()
3205         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3206         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3207         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3208             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3209             arr=ff1.getUndergroundDataArray(dt,it)
3210             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3211             pass
3212         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3213         #
3214         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3215         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3216         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3217         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3218             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3219             arr=ff1.getUndergroundDataArray(dt,it)
3220             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3221             pass
3222         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3223         pass
3224
3225     @WriteInTmpDir
3226     def testMEDFileFieldPartialLoading(self):
3227         fname="Pyfile69.med"
3228         #
3229         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3230         a.alloc(0,1)
3231         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3232         # building a mesh containing 30 tri3 + 40 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(30)]
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(40)]
3243         for i,elt in enumerate(quads): elt.translate([40+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) ; mm.write(fname,2)
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         ff0.write(fname,0)
3254         #
3255         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3256         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3257         # With profiles
3258         ff0=MEDFileField1TS()
3259         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")
3260         f0.checkConsistencyLight()
3261         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3262         ff0.setFieldProfile(f0,mm,0,pfl)
3263         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3264         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3265         ff0.write(fname,0)
3266         #
3267         ff0=MEDFileField1TS(fname,False)
3268         self.assertEqual(ff0.getName(),"FieldCell")
3269         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3270         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3271         heap_memory_ref=ff0.getHeapMemorySize()
3272         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3273         ff0.loadArrays() ##
3274         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3275         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3276         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3277         #
3278         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3279         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3280         heap_memory_ref=ff0.getHeapMemorySize()
3281         self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3282         ff0.loadArrays() ##
3283         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3284         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3285         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3286         ff0.loadArrays() ##
3287         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3288         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3289         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3290         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3291         ff0.loadArrays() ##
3292         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3293         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3294         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3295         ff0.loadArraysIfNecessary() ##
3296         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3297         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3298         heap_memory_ref=ff0.getHeapMemorySize()
3299         self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3300         ff0.unloadArrays()
3301         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3302         self.assertEqual(hmd,-800) # -50*8*2
3303         ff0.loadArrays() ##
3304         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3305         #
3306         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3307         heap_memory_ref=ff0.getHeapMemorySize()
3308         self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3309         ff0.loadArrays() ##
3310         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3311         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3312         #
3313         fieldName="FieldCellMultiTS"
3314         ff0=MEDFileFieldMultiTS()
3315         for t in range(20):
3316             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)
3317             f0.setTime(float(t)+0.1,t,100+t)
3318             f0.checkConsistencyLight()
3319             ff0.appendFieldNoProfileSBT(f0)
3320             pass
3321         ff0.write(fname,0)
3322         #
3323         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3324         heap_memory_ref=ff0.getHeapMemorySize()
3325         self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3326         ff0.loadArrays()
3327         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3328         del ff0
3329         #
3330         ffs=MEDFileFields(fname,False)
3331         heap_memory_ref=ffs.getHeapMemorySize()
3332         self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3333         ffs.loadArrays()
3334         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3335         pass
3336
3337     @WriteInTmpDir
3338     def testMEDFileMeshReadSelector1(self):
3339         mrs=MEDFileMeshReadSelector()
3340         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3341         mrs.__str__() ; mrs.__repr__()
3342         #
3343         mrs=MEDFileMeshReadSelector(0)
3344         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())
3345         mrs=MEDFileMeshReadSelector(1)
3346         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3347         mrs=MEDFileMeshReadSelector(2)
3348         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3349         mrs=MEDFileMeshReadSelector(3)
3350         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3351         mrs=MEDFileMeshReadSelector(4)
3352         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3353         mrs=MEDFileMeshReadSelector(5)
3354         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3355         mrs=MEDFileMeshReadSelector(6)
3356         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3357         mrs=MEDFileMeshReadSelector(7)
3358         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3359         mrs=MEDFileMeshReadSelector(8)
3360         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3361         mrs=MEDFileMeshReadSelector(9)
3362         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3363         mrs=MEDFileMeshReadSelector(10)
3364         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3365         mrs=MEDFileMeshReadSelector(11)
3366         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3367         mrs=MEDFileMeshReadSelector(12)
3368         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3369         mrs=MEDFileMeshReadSelector(13)
3370         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3371         mrs=MEDFileMeshReadSelector(14)
3372         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3373         mrs=MEDFileMeshReadSelector(15)
3374         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3375         mrs=MEDFileMeshReadSelector(16)
3376         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3377         mrs=MEDFileMeshReadSelector(17)
3378         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3379         mrs=MEDFileMeshReadSelector(18)
3380         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3381         mrs=MEDFileMeshReadSelector(19)
3382         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3383         mrs=MEDFileMeshReadSelector(20)
3384         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3385         mrs=MEDFileMeshReadSelector(21)
3386         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3387         mrs=MEDFileMeshReadSelector(22)
3388         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3389         mrs=MEDFileMeshReadSelector(23)
3390         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3391         mrs=MEDFileMeshReadSelector(24)
3392         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3393         mrs=MEDFileMeshReadSelector(25)
3394         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3395         mrs=MEDFileMeshReadSelector(26)
3396         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3397         mrs=MEDFileMeshReadSelector(27)
3398         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3399         mrs=MEDFileMeshReadSelector(28)
3400         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3401         mrs=MEDFileMeshReadSelector(29)
3402         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3403         mrs=MEDFileMeshReadSelector(30)
3404         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3405         mrs=MEDFileMeshReadSelector(31)
3406         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3407         mrs=MEDFileMeshReadSelector(32)
3408         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3409         mrs=MEDFileMeshReadSelector(33)
3410         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3411         mrs=MEDFileMeshReadSelector(34)
3412         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3413         mrs=MEDFileMeshReadSelector(35)
3414         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3415         mrs=MEDFileMeshReadSelector(36)
3416         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3417         mrs=MEDFileMeshReadSelector(37)
3418         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3419         mrs=MEDFileMeshReadSelector(38)
3420         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3421         mrs=MEDFileMeshReadSelector(39)
3422         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3423         mrs=MEDFileMeshReadSelector(40)
3424         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3425         mrs=MEDFileMeshReadSelector(41)
3426         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3427         mrs=MEDFileMeshReadSelector(42)
3428         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3429         mrs=MEDFileMeshReadSelector(43)
3430         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3431         mrs=MEDFileMeshReadSelector(44)
3432         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3433         mrs=MEDFileMeshReadSelector(45)
3434         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3435         mrs=MEDFileMeshReadSelector(46)
3436         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3437         mrs=MEDFileMeshReadSelector(47)
3438         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3439         mrs=MEDFileMeshReadSelector(48)
3440         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3441         mrs=MEDFileMeshReadSelector(49)
3442         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3443         mrs=MEDFileMeshReadSelector(50)
3444         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3445         mrs=MEDFileMeshReadSelector(51)
3446         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3447         mrs=MEDFileMeshReadSelector(52)
3448         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3449         mrs=MEDFileMeshReadSelector(53)
3450         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3451         mrs=MEDFileMeshReadSelector(54)
3452         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3453         mrs=MEDFileMeshReadSelector(55)
3454         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3455         mrs=MEDFileMeshReadSelector(56)
3456         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3457         mrs=MEDFileMeshReadSelector(57)
3458         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3459         mrs=MEDFileMeshReadSelector(58)
3460         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3461         mrs=MEDFileMeshReadSelector(59)
3462         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3463         mrs=MEDFileMeshReadSelector(60)
3464         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3465         mrs=MEDFileMeshReadSelector(61)
3466         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3467         mrs=MEDFileMeshReadSelector(62)
3468         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3469         mrs=MEDFileMeshReadSelector(63)
3470         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3471         #
3472         mrs=MEDFileMeshReadSelector(63)
3473         mrs.setCellFamilyFieldReading(False)
3474         self.assertEqual(mrs.getCode(),62)
3475         mrs.setCellFamilyFieldReading(True)
3476         self.assertEqual(mrs.getCode(),63)
3477         mrs.setNodeFamilyFieldReading(False)
3478         self.assertEqual(mrs.getCode(),61)
3479         mrs.setNodeFamilyFieldReading(True)
3480         self.assertEqual(mrs.getCode(),63)
3481         mrs.setCellNameFieldReading(False)
3482         self.assertEqual(mrs.getCode(),59)
3483         mrs.setCellNameFieldReading(True)
3484         self.assertEqual(mrs.getCode(),63)
3485         mrs.setNodeNameFieldReading(False)
3486         self.assertEqual(mrs.getCode(),55)
3487         mrs.setNodeNameFieldReading(True)
3488         self.assertEqual(mrs.getCode(),63)
3489         mrs.setCellNumFieldReading(False)
3490         self.assertEqual(mrs.getCode(),47)
3491         mrs.setCellNumFieldReading(True)
3492         self.assertEqual(mrs.getCode(),63)
3493         mrs.setNodeNumFieldReading(False)
3494         self.assertEqual(mrs.getCode(),31)
3495         mrs.setNodeNumFieldReading(True)
3496         self.assertEqual(mrs.getCode(),63)
3497         pass
3498
3499     @WriteInTmpDir
3500     def testPartialReadOfMeshes(self):
3501         fname="Pyfile70.med"
3502         # building a mesh containing 4 tri3 + 5 quad4
3503         tri=MEDCouplingUMesh("tri",2)
3504         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3505         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3506         tris = [tri.deepCopy() for i in range(4)]
3507         for i,elt in enumerate(tris): elt.translate([i,0])
3508         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3509         quad=MEDCouplingUMesh("quad",2)
3510         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3511         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3512         quads = [quad.deepCopy() for i in range(5)]
3513         for i,elt in enumerate(quads): elt.translate([5+i,0])
3514         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3515         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3516         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3517         m1=m.buildDescendingConnectivity()[0]
3518         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3519         #
3520         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3521         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3522         mm.setGroupsAtLevel(0,[grp0,grp1])
3523         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3524         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3525         mm.setGroupsAtLevel(-1,[grp2,grp3])
3526         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3527         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3528         mm.setGroupsAtLevel(1,[grp4,grp5])
3529         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3530         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3531         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3532         #
3533         mm.write(fname,2)
3534         ##
3535         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3536         b4_ref_heap_mem=mm.getHeapMemorySize()
3537         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3538         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3539         ref_heap_mem=mm.getHeapMemorySize()
3540         # check the gain of memory using 1GTUMesh instead of UMesh
3541         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
3542         #
3543         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3544         self.assertEqual(len(mm.getGroupsNames()),0)
3545         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3546         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3547         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3548         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3549         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3550         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3551         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3552         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3553         delta1=ref_heap_mem-mm.getHeapMemorySize()
3554         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3555         #
3556         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3557         self.assertEqual(len(mm.getGroupsNames()),6)
3558         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3559         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3560         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3561         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3562         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3563         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3564         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3565         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3566         delta2=ref_heap_mem-mm.getHeapMemorySize()
3567         self.assertTrue(delta2<delta1)
3568         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3569         #
3570         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3571         self.assertEqual(len(mm.getGroupsNames()),6)
3572         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3573         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3574         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3575         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3576         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3577         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3578         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3579         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3580         delta3=ref_heap_mem-mm.getHeapMemorySize()
3581         self.assertTrue(delta3<delta2)
3582         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3583         #
3584         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3585         self.assertEqual(len(mm.getGroupsNames()),6)
3586         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3587         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3588         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3589         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3590         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3591         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3592         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3593         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3594         delta4=ref_heap_mem-mm.getHeapMemorySize()
3595         self.assertTrue(delta4<delta3)
3596         self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3597         #
3598         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3599         self.assertEqual(len(mm.getGroupsNames()),6)
3600         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3601         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3602         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3603         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3604         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3605         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3606         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3607         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3608         delta5=ref_heap_mem-mm.getHeapMemorySize()
3609         self.assertTrue(delta5<delta4)
3610         self.assertEqual(delta5,0)
3611         pass
3612
3613     # this test checks that setFieldProfile perform a check of the array length
3614     # compared to the profile length. This test also checks that mesh attribute of field
3615     # is not used by setFieldProfile (because across this test mesh is equal to None)
3616     @WriteInTmpDir
3617     def testCheckCompatibilityPfl1(self):
3618         # building a mesh containing 4 tri3 + 5 quad4
3619         tri=MEDCouplingUMesh("tri",2)
3620         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3621         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3622         tris = [tri.deepCopy() for i in range(4)]
3623         for i,elt in enumerate(tris): elt.translate([i,0])
3624         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3625         quad=MEDCouplingUMesh("quad",2)
3626         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3627         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3628         quads = [quad.deepCopy() for i in range(5)]
3629         for i,elt in enumerate(quads): elt.translate([5+i,0])
3630         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3631         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3632         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3633         m1=m.buildDescendingConnectivity()[0]
3634         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3635         #
3636         f1ts=MEDFileField1TS()
3637         f=MEDCouplingFieldDouble(ON_NODES)
3638         vals=DataArrayDouble(7) ; vals.iota(1000)
3639         f.setArray(vals)
3640         f.setName("anonymous") # f has no mesh it is not a bug
3641         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3642         f1ts.setFieldProfile(f,mm,0,pfl)
3643         #
3644         f1ts=MEDFileField1TS()
3645         f=MEDCouplingFieldDouble(ON_NODES)
3646         vals=DataArrayDouble(8) ; vals.iota(1000)
3647         f.setArray(vals)
3648         f.setName("anonymous") # f has no mesh it is not a bug
3649         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3650         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3651         #
3652         f1ts=MEDFileField1TS()
3653         f=MEDCouplingFieldDouble(ON_CELLS)
3654         vals=DataArrayDouble(7) ; vals.iota(1000)
3655         f.setArray(vals)
3656         f.setName("anonymous") # f has no mesh it is not a bug
3657         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3658         f1ts.setFieldProfile(f,mm,0,pfl)
3659         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3660         #
3661         f1ts=MEDFileField1TS()
3662         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3663         vals=DataArrayDouble(27) ; vals.iota(1000)
3664         f.setArray(vals)
3665         f.setName("anonymous") # f has no mesh it is not a bug
3666         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3667         f.setMesh(m[pfl])
3668         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])
3669         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3670         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])
3671         f.setMesh(None)
3672         f1ts.setFieldProfile(f,mm,0,pfl)
3673         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3674         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3675         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3676         vals=DataArrayDouble(27) ; vals.iota(1000)
3677         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3678         #
3679         f1ts=MEDFileField1TS()
3680         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3681         vals=DataArrayDouble(25) ; vals.iota(1000)
3682         f.setArray(vals)
3683         f.setName("anonymous") # f has no mesh it is not a bug
3684         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3685         f1ts.setFieldProfile(f,mm,0,pfl)
3686         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3687         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3688         f.setArray(vals2)
3689         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3690         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3691         #
3692         f1ts=MEDFileField1TS()
3693         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3694         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3695         f.setArray(vals)
3696         f1ts.setFieldProfile(f,mm,0,pfl)
3697         pass
3698
3699     @WriteInTmpDir
3700     def testWRMeshWithNoCells(self):
3701         fname="Pyfile71.med"
3702         a=DataArrayDouble(4) ; a.iota()
3703         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3704         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3705         m=MEDFileUMesh()
3706         m.setMeshAtLevel(0,m00)
3707         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3708         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3709         m.write(fname,2)
3710         del m,a,c,m0,m00
3711         #
3712         m=MEDFileMesh.New(fname)
3713         self.assertEqual((),m.getNonEmptyLevels())
3714         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))
3715         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3716         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3717         pass
3718
3719     @WriteInTmpDir
3720     def testWRQPolyg1(self):
3721         fname="Pyfile72.med"
3722         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3723         m.insertNextCell([0,2,1,3])
3724         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3725         #
3726         ms = [m.deepCopy() for i in range(4)]
3727         for i,elt in enumerate(ms):
3728             elt.translate([float(i)*1.5,0.])
3729             pass
3730         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3731         m0.convertAllToPoly()
3732         #
3733         ms = [m.deepCopy() for i in range(5)]
3734         for i,elt in enumerate(ms):
3735             elt.translate([float(i)*1.5,1.5])
3736             pass
3737         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3738         m1.convertAllToPoly()
3739         m1.convertLinearCellsToQuadratic()
3740         #
3741         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3742         ##
3743         mm=MEDFileUMesh()
3744         mm.setMeshAtLevel(0,m)
3745         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3746         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3747         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3748         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3749         ##
3750         mm.write(fname,2)
3751         del mm
3752         #
3753         mm_read=MEDFileUMesh(fname)
3754         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3755         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3756         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3757         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3758         ##
3759         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3760         f.setMesh(m)
3761         arr0=DataArrayDouble(9) ; arr0.iota()
3762         arr1=DataArrayDouble(9) ; arr1.iota(100)
3763         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3764         f.setArray(arr) ; f.checkConsistencyLight()
3765         f.setTime(5.6,1,2)
3766         ff=MEDFileField1TS()
3767         ff.setFieldNoProfileSBT(f)
3768         ff.write(fname,0)
3769         ##
3770         ff_read=MEDFileField1TS(fname)
3771         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3772         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3773         pass
3774
3775     @WriteInTmpDir
3776     def testLoadIfNecessaryOnFromScratchFields0(self):
3777         """
3778         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3779         """
3780         fname="Pyfile77.med"
3781         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3782         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3783         m.allocateCells()
3784         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3785         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3786         m.finishInsertingCells()
3787         #
3788         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3789         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3790         fs=MEDFileFields()
3791         arrs=4*[None]
3792         #
3793         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3794         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3795         f0.setTime(1.1,1,1)
3796         f0.setName("myELNOField")
3797         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3798         f0.setArray(arrs[0])
3799         ff0.appendFieldNoProfileSBT(f0)
3800         #
3801         f0.setTime(2.2,2,1)
3802         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3803         f0.setArray(arrs[1])
3804         ff0.appendFieldNoProfileSBT(f0)
3805         #
3806         f0.setTime(3.3,3,1)
3807         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3808         f0.setArray(arrs[2])
3809         ff0.appendFieldNoProfileSBT(f0)
3810         #
3811         f0.setTime(4.4,4,1)
3812         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3813         f0.setArray(arrs[3])
3814         ff0.appendFieldNoProfileSBT(f0)
3815         #
3816         for i,arr in enumerate(arrs):
3817             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3818             fs[0][i].loadArraysIfNecessary()
3819             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3820             pass
3821         fs.loadArraysIfNecessary()
3822         for i,arr in enumerate(arrs):
3823             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3824             pass
3825         fs[0].loadArraysIfNecessary()
3826         for i,arr in enumerate(arrs):
3827             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3828             pass
3829         pass
3830
3831     @WriteInTmpDir
3832     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3833         """ 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.
3834         """
3835         fname="Pyfile78.med"
3836         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)
3837         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3838         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3839         m0.allocateCells()
3840         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
3841             m0.insertNextCell(NORM_TETRA4,elt)
3842             pass
3843         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
3844             m0.insertNextCell(NORM_PYRA5,elt)
3845             pass
3846         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
3847             m0.insertNextCell(NORM_PENTA6,elt)
3848             pass
3849         m0.checkConsistency()
3850         m1=MEDCouplingUMesh(); m1.setName("mesh")
3851         m1.setMeshDimension(2);
3852         m1.allocateCells(5);
3853         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3854         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3855         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3856         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3857         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3858         m1.setCoords(coords);
3859         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3860         m3.allocateCells()
3861         m3.insertNextCell(NORM_POINT1,[2])
3862         m3.insertNextCell(NORM_POINT1,[3])
3863         m3.insertNextCell(NORM_POINT1,[4])
3864         m3.insertNextCell(NORM_POINT1,[5])
3865         #
3866         mm=MEDFileUMesh()
3867         mm.setMeshAtLevel(0,m0)
3868         mm.setMeshAtLevel(-1,m1)
3869         mm.setMeshAtLevel(-3,m3)
3870         mm.write(fname,2)
3871         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3872         mm=MEDFileMesh.New(fname)
3873         fs=MEDFileFields()
3874         fmts=MEDFileFieldMultiTS()
3875         f1ts=MEDFileField1TS()
3876         for lev in mm.getNonEmptyLevels():
3877             for gt in mm.getGeoTypesAtLevel(lev):
3878                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3879                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3880                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3881                 f.setArray(arr) ; f.setName("f0")
3882                 f1ts.setFieldNoProfileSBT(f)
3883                 pass
3884             pass
3885         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3886         for lev in [0,-1,-3]:
3887             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3888             pass
3889         fmts.pushBackTimeStep(f1ts)
3890         fs.pushField(fmts)
3891         fs.write(fname,0)
3892         del fs,fmts,f1ts
3893         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3894         fs=MEDFileFields(fname)
3895         self.assertEqual(len(fs),1)
3896         self.assertEqual(len(fs[0]),1)
3897         f1ts=fs[0][0]
3898         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),'','')])])
3899         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))
3900         pass
3901
3902     @WriteInTmpDir
3903     def testMEDFileUMeshSetName(self):
3904         """ 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.
3905         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3906         """
3907         fname="Pyfile79.med"
3908         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3909         mm=MEDFileUMesh()
3910         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3911         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)
3912         m0.allocateCells(5);
3913         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3914         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3915         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3916         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3917         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3918         m0.setCoords(coords);
3919         mm.setMeshAtLevel(0,m0)
3920         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3921         m2.allocateCells()
3922         m2.insertNextCell(NORM_POINT1,[2])
3923         m2.insertNextCell(NORM_POINT1,[3])
3924         m2.insertNextCell(NORM_POINT1,[4])
3925         m2.insertNextCell(NORM_POINT1,[5])
3926         mm.setMeshAtLevel(-2,m2)
3927         self.assertEqual(mm.getName(),"")
3928         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3929         mm.forceComputationOfParts()
3930         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3931         mm.setName("abc")
3932         self.assertEqual(mm.getName(),"abc")
3933         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3934         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3935         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3936         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3937         pass
3938
3939     @WriteInTmpDir
3940     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3941         fileName="Pyfile80.med"
3942         m=MEDCouplingCMesh() ; m.setName("cmesh")
3943         arr=DataArrayDouble(6) ; arr.iota()
3944         m.setCoords(arr,arr)
3945         nbCells=m.getNumberOfCells()
3946         self.assertEqual(25,nbCells)
3947         f=MEDCouplingFieldDouble(ON_CELLS)
3948         f.setName("FieldOnCell") ; f.setMesh(m)
3949         arr=DataArrayDouble(nbCells) ; arr.iota()
3950         mm=MEDFileCMesh()
3951         mm.setMesh(m)
3952         #
3953         fmts=MEDFileFieldMultiTS()
3954         #
3955         for i in range(nbCells):
3956             t=(float(i)+0.1,i+1,-i-2)
3957             f.setTime(*t)
3958             arr2=DataArrayDouble(nbCells)
3959             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3960             arr2[perm]=arr
3961             f.setArray(arr2)
3962             f1ts=MEDFileField1TS()
3963             f1ts.setFieldNoProfileSBT(f)
3964             fmts.pushBackTimeStep(f1ts)
3965             pass
3966         fmts.unloadArraysWithoutDataLoss()
3967         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))
3968         fs=MEDFileFields() ; fs.pushField(fmts)
3969         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))
3970         fs.unloadArraysWithoutDataLoss()
3971         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))
3972         f1ts=fs[0][0]
3973         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))
3974         f1ts.unloadArraysWithoutDataLoss()
3975         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))
3976         mm.write(fileName,2)
3977         fs.write(fileName,0)
3978         del m,fmts,mm,f,f1ts
3979         ##
3980         mm=MEDFileMesh.New(fileName)
3981         fmts=MEDFileFieldMultiTS(fileName)
3982         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))
3983         fmts.unloadArraysWithoutDataLoss()
3984         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3985         fmts.loadArraysIfNecessary()
3986         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))
3987         del mm,fmts
3988         fs=MEDFileFields(fileName)
3989         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
3990         fs.unloadArraysWithoutDataLoss()
3991         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3992         fs.loadArraysIfNecessary()
3993         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))
3994         del fs
3995         f1ts=MEDFileField1TS(fileName)
3996         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))
3997         f1ts.unloadArraysWithoutDataLoss()
3998         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3999         f1ts.loadArraysIfNecessary()
4000         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))
4001         pass
4002
4003     @WriteInTmpDir
4004     def testMEDFileUMeshLoadPart1(self):
4005         """ 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
4006         memory of the returned instance.
4007         """
4008         fileName="Pyfile81.med"
4009         arr=DataArrayDouble(6) ; arr.iota()
4010         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4011         m=m.buildUnstructured()
4012         m.setName("Mesh")
4013         m.changeSpaceDimension(3,0.)
4014         infos=["aa [b]","cc [de]","gg [klm]"]
4015         m.getCoords().setInfoOnComponents(infos)
4016         m.checkConsistency()
4017         mm=MEDFileUMesh()
4018         mm.setMeshAtLevel(0,m)
4019         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4020         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4021         mm.setMeshAtLevel(-1,m1)
4022         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])
4023         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])
4024         namesCellL0=DataArrayAsciiChar(25,16)
4025         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
4026         renumM1=DataArrayInt([3,4,0,2,1])
4027         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4028         mm.setRenumFieldArr(0,renum0)
4029         mm.setFamilyFieldArr(0,famField0)
4030         mm.setNameFieldAtLevel(0,namesCellL0)
4031         mm.setRenumFieldArr(-1,renumM1)
4032         mm.setFamilyFieldArr(-1,famFieldM1)
4033         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])
4034         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])
4035         namesNodes=DataArrayAsciiChar(36,16)
4036         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
4037         mm.setRenumFieldArr(1,renum1)
4038         mm.setFamilyFieldArr(1,famField1)
4039         mm.setNameFieldAtLevel(1,namesNodes)
4040         mm.setFamilyId("Fam7",77)
4041         mm.setFamilyId("Fam8",88)
4042         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4043         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4044         mm.write(fileName,2)
4045         #
4046         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4047         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4048         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])))
4049         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)
4050         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4051         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4052         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4053         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4054         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4055         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4056         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4057         #
4058         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4059         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4060         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])))
4061         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)
4062         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4063         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4064         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4065         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4066         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4067         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4068         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4069         #
4070         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4071         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4072         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4073         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4074         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4075         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4076         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4077         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4078         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])))
4079         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4080         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)
4081         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4082         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4083         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4084         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4085         pass
4086
4087     @WriteInTmpDir
4088     def testMEDFileFieldsLoadPart1(self):
4089         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4090         """
4091         fileName="Pyfile82.med"
4092         meshName="Mesh"
4093         compos=["aa [kg]","bbb [m/s]"]
4094         arr=DataArrayDouble(6) ; arr.iota()
4095         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4096         m=m.buildUnstructured()
4097         m.setName(meshName)
4098         m.changeSpaceDimension(3,0.)
4099         infos=["aa [b]","cc [de]","gg [klm]"]
4100         m.getCoords().setInfoOnComponents(infos)
4101         m.checkConsistency()
4102         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4103         f.setName("Field")
4104         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4105         arr[:,0]=list(range(25))
4106         arr[:,1]=list(range(100,125))
4107         f.setArray(arr)
4108         WriteField(fileName,f,True)
4109         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4110         f.setName("FieldNode")
4111         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4112         arr[:,0]=list(range(200,236))
4113         arr[:,1]=list(range(300,336))
4114         f.setArray(arr)
4115         f.checkConsistencyLight()
4116         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4117         #
4118         ms=MEDFileMeshes()
4119         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4120         ms.pushMesh(mm)
4121         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4122         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4123         #
4124         ms=MEDFileMeshes()
4125         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4126         ms.pushMesh(mm)
4127         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4128         fs=fs.deepCopy()
4129         fs[0][0].loadArrays()
4130         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4131         arr.setInfoOnComponents(compos)
4132         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4133         fs[1][0].loadArrays()
4134         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4135         arr.setInfoOnComponents(compos)
4136         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4137         pass
4138
4139     @WriteInTmpDir
4140     def testMEDFileWithoutCells1(self):
4141         fileName="Pyfile83.med"
4142         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4143         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4144         mm=MEDFileUMesh()
4145         mm.setCoords(coo)
4146         mm.setName("mesh")
4147         mm.write(fileName,2)
4148         #
4149         mm=MEDFileMesh.New(fileName)
4150         self.assertEqual(mm.getName(),"mesh")
4151         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4152         pass
4153
4154     @WriteInTmpDir
4155     def testZipCoordsWithLoadPart1(self):
4156         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4157         """
4158         fileName="Pyfile84.med"
4159         meshName="Mesh"
4160         compos=["aa [kg]","bbb [m/s]"]
4161         arr=DataArrayDouble(6) ; arr.iota()
4162         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4163         m=m.buildUnstructured()
4164         m.setName(meshName)
4165         m.changeSpaceDimension(3,0.)
4166         infos=["aa [b]","cc [de]","gg [klm]"]
4167         m.getCoords().setInfoOnComponents(infos)
4168         m.checkConsistency()
4169         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4170         f.setName("Field")
4171         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4172         arr[:,0]=list(range(25))
4173         arr[:,1]=list(range(100,125))
4174         f.setArray(arr)
4175         WriteField(fileName,f,True)
4176         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4177         f.setName("FieldNode")
4178         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4179         arr[:,0]=list(range(200,236))
4180         arr[:,1]=list(range(300,336))
4181         f.setArray(arr)
4182         f.checkConsistencyLight()
4183         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4184         #
4185         ms=MEDFileMeshes()
4186         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4187         ms.pushMesh(mm)
4188         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4189         self.assertEqual(spd.getSlice(),slice(4,6,1))
4190         spd=mm.getPartDefAtLevel(1)
4191         self.assertEqual(spd.getSlice(),slice(4,14,1))
4192         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4193         mm.zipCoords() # <- The important line is here !
4194         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4195         self.assertEqual(spd.getSlice(),slice(4,6,1))
4196         spd=mm.getPartDefAtLevel(1)
4197         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4198         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4199         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4200         fs[0][0].loadArrays()
4201         arr=DataArrayDouble([(4,104),(5,105)])
4202         arr.setInfoOnComponents(compos)
4203         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4204         fs[1][0].loadArrays()
4205         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4206         arr.setInfoOnComponents(compos)
4207         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4208         m_ref = mm[0].deepCopy()
4209         # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4210         ms=MEDFileMeshes()
4211         mrs = MEDFileMeshReadSelector()
4212         mrs.setNumberOfCoordsLoadSessions(2)
4213         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4214         ms.pushMesh(mm)
4215         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4216         self.assertEqual(spd.getSlice(),slice(4,6,1))
4217         spd=mm.getPartDefAtLevel(1)
4218         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4219         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4220         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4221         fs[0][0].loadArrays()
4222         arr=DataArrayDouble([(4,104),(5,105)])
4223         arr.setInfoOnComponents(compos)
4224         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4225         fs[1][0].loadArrays()
4226         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4227         arr.setInfoOnComponents(compos)
4228         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4229         self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4230         pass
4231
4232     @WriteInTmpDir
4233     def testMEDFileCMeshSetGroupsAtLevel(self):
4234         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4235         """
4236         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4237         m.setName("Mesh")
4238         mm=MEDFileCMesh() ; mm.setMesh(m)
4239         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4240         mm.setGroupsAtLevel(0,[grp])
4241         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4242         pass
4243
4244     @WriteInTmpDir
4245     def testMEDFileUMeshBuildExtrudedMesh1(self):
4246         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4247         fileName="Pyfile85.med"
4248         meshName2D="Mesh"
4249         meshName1D="Mesh1D"
4250         meshName3DOut="Mesh3D"
4251         #
4252         d1=DataArrayInt([0,4,20,24])
4253         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4254         #
4255         a=DataArrayDouble(6) ; a.iota()
4256         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4257         m=m.buildUnstructured()
4258         d1c=d1.buildComplement(m.getNumberOfCells())
4259         m=m[d1c] ; m.zipCoords()
4260         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4261         m0.simplexize(0)
4262         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4263         m.setName(meshName2D)
4264         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4265         e=d.deltaShiftIndex().findIdsEqual(1)
4266         #
4267         mm=MEDFileUMesh()
4268         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4269         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4270         mm.setGroupsAtLevel(0,[grp0])
4271         grp1=e ; grp1.setName("grp1")
4272         mm.setGroupsAtLevel(-1,[grp1])
4273         mm.write(fileName,2)
4274         #
4275         a=DataArrayDouble(3) ; a.iota()
4276         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4277         tmp.setName(meshName1D)
4278         tmp.changeSpaceDimension(3)
4279         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4280         mm1D=MEDFileUMesh()
4281         mm1D.setMeshAtLevel(0,tmp)
4282         mm1D.write(fileName,0)
4283         # test is here !
4284         mm2D=MEDFileMesh.New(fileName,meshName2D)
4285         mm1D=MEDFileMesh.New(fileName,meshName1D)
4286         m1D=mm1D.getMeshAtLevel(0)
4287         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4288         #
4289         self.assertEqual(mm3D.getName(),mm2D.getName())
4290         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4291         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4292         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4293         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4294         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4295         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4296         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4297         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4298         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4299         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.)])
4300         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4301         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])
4302         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4303         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])
4304         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4305         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])
4306         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4307         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])
4308         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4309         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])
4310         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4311         d=DataArrayInt(129) ; d.iota() ; d*=3
4312         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4313         #
4314         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4315         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4316         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4317         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4318         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])))
4319         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])))
4320         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])))
4321         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])))
4322         mm3D.setName("MeshExtruded")
4323         mm3D.write(fileName,0)
4324         pass
4325
4326     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4327     @WriteInTmpDir
4328     def testMEDFileUMeshPickeling1(self):
4329         outFileName="Pyfile86.med"
4330         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)
4331         c.setInfoOnComponents(["aa","bbb"])
4332         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4333         m=MEDCouplingUMesh();
4334         m.setMeshDimension(2);
4335         m.allocateCells(5);
4336         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4337         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4338         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4339         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4340         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4341         m.finishInsertingCells();
4342         m.setCoords(c)
4343         m.checkConsistencyLight()
4344         m1=MEDCouplingUMesh.New();
4345         m1.setMeshDimension(1);
4346         m1.allocateCells(3);
4347         m1.insertNextCell(NORM_SEG2,2,[1,4])
4348         m1.insertNextCell(NORM_SEG2,2,[3,6])
4349         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4350         m1.finishInsertingCells();
4351         m1.setCoords(c)
4352         m1.checkConsistencyLight()
4353         m2=MEDCouplingUMesh.New();
4354         m2.setMeshDimension(0);
4355         m2.allocateCells(4);
4356         m2.insertNextCell(NORM_POINT1,1,[1])
4357         m2.insertNextCell(NORM_POINT1,1,[3])
4358         m2.insertNextCell(NORM_POINT1,1,[2])
4359         m2.insertNextCell(NORM_POINT1,1,[6])
4360         m2.finishInsertingCells();
4361         m2.setCoords(c)
4362         m2.checkConsistencyLight()
4363         #
4364         mm=MEDFileUMesh.New()
4365         self.assertTrue(mm.getUnivNameWrStatus())
4366         mm.setName("MyFirstMEDCouplingMEDmesh")
4367         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4368         mm.setCoords(c)
4369         mm[-1]=m1;
4370         mm[0]=m;
4371         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4372         mm[-2]=m2;
4373         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4374         # playing with groups
4375         g1_2=DataArrayInt.New()
4376         g1_2.setValues([1,3],2,1)
4377         g1_2.setName("G1")
4378         g2_2=DataArrayInt.New()
4379         g2_2.setValues([1,2,3],3,1)
4380         g2_2.setName("G2")
4381         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4382         g1_1=DataArrayInt.New()
4383         g1_1.setValues([0,1,2],3,1)
4384         g1_1.setName("G1")
4385         g2_1=DataArrayInt.New()
4386         g2_1.setValues([0,2],2,1)
4387         g2_1.setName("G2")
4388         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4389         g1_N=DataArrayInt.New()
4390         g1_N.setValues(list(range(8)),8,1)
4391         g1_N.setName("G1")
4392         g2_N=DataArrayInt.New()
4393         g2_N.setValues(list(range(9)),9,1)
4394         g2_N.setName("G2")
4395         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4396         mm.createGroupOnAll(0,"GrpOnAllCell")
4397         # check content of mm
4398         t=mm.getGroupArr(0,"G1",False)
4399         self.assertTrue(g1_2.isEqual(t));
4400         t=mm.getGroupArr(0,"G2",False)
4401         self.assertTrue(g2_2.isEqual(t));
4402         t=mm.getGroupArr(-1,"G1",False)
4403         self.assertTrue(g1_1.isEqual(t));
4404         t=mm.getGroupArr(-1,"G2",False)
4405         self.assertTrue(g2_1.isEqual(t));
4406         t=mm.getGroupArr(1,"G1",False)
4407         self.assertTrue(g1_N.isEqual(t));
4408         t=mm.getGroupArr(1,"G2",False)
4409         self.assertTrue(g2_N.isEqual(t));
4410         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4411         t=mm.getGroupArr(0,"GrpOnAllCell")
4412         #
4413         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4414         mm2=pickle.loads(st)
4415         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4416         self.assertEqual(mm.getAxisType(),AX_CART)
4417         #
4418         mm.setAxisType(AX_CYL)
4419         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4420         mm2=pickle.loads(st)
4421         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4422         self.assertEqual(mm2.getAxisType(),AX_CYL)
4423         pass
4424
4425     @WriteInTmpDir
4426     def testMEDFileFieldsLoadSpecificEntities1(self):
4427         nbNodes=11
4428         fieldName="myField"
4429         fileName="Pyfile87.med"
4430         nbPdt=10
4431         meshName="Mesh"
4432         #
4433         m=MEDCouplingCMesh()
4434         arr=DataArrayDouble(nbNodes) ; arr.iota()
4435         m.setCoords(arr)
4436         m=m.buildUnstructured()
4437         m.setName(meshName)
4438         #
4439         fmts=MEDFileFieldMultiTS()
4440         for i in range(nbPdt):
4441             f=MEDCouplingFieldDouble(ON_NODES)
4442             f.setMesh(m)
4443             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4444             f.setArray(arr)
4445             f.setName(fieldName)
4446             f.setTime(float(i),i,0)
4447             fmts.appendFieldNoProfileSBT(f)
4448             pass
4449         #
4450         mm=MEDFileUMesh() ; mm[0]=m
4451         fmts.write(fileName,2)
4452         mm.write(fileName,0)
4453         #
4454         fs=MEDFileFields(fileName,False)
4455         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4456         fs.loadArraysIfNecessary()
4457         fs2.loadArraysIfNecessary()
4458         for i in range(nbPdt):
4459             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4460             pass
4461         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4462         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4463         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4464         fmts=MEDFileFieldMultiTS()
4465         for i in range(nbPdt):
4466             f=MEDCouplingFieldDouble(ON_CELLS)
4467             f.setMesh(m3)
4468             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4469             f.setArray(arr)
4470             f.setName(fieldName)
4471             f.setTime(float(i),i,0)
4472             fmts.appendFieldNoProfileSBT(f)
4473             pass
4474         mm=MEDFileUMesh() ; mm[0]=m3
4475         del mm[0]
4476         self.assertEqual(mm.getNonEmptyLevels(),())
4477         mm[0]=m3
4478         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4479         fmts.write(fileName,2)
4480         fs=MEDFileFields(fileName,False)
4481         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4482         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4483         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4484         fs.loadArraysIfNecessary()
4485         fs2.loadArraysIfNecessary()
4486         fs3.loadArraysIfNecessary()
4487         fs4.loadArraysIfNecessary()
4488         for i in range(nbPdt):
4489             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4490             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4491             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4492             pass
4493         pass
4494
4495     @WriteInTmpDir
4496     def testMEDFileLotsOfTSRW1(self):
4497         nbNodes=11
4498         fieldName="myField"
4499         fileName="Pyfile88.med"
4500         nbPdt=300 # <- perftest = 30000
4501         meshName="Mesh"
4502         #
4503         maxPdt=100 # <- optimum = 500
4504         m=MEDCouplingCMesh()
4505         arr=DataArrayDouble(nbNodes) ; arr.iota()
4506         m.setCoords(arr)
4507         m=m.buildUnstructured()
4508         m.setName(meshName)
4509         #
4510         nbOfField=nbPdt//maxPdt
4511         fs=MEDFileFields()
4512         for j in range(nbOfField):
4513             fmts=MEDFileFieldMultiTS()
4514             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4515             for i in range(s.start, s.stop, s.step):
4516                 f=MEDCouplingFieldDouble(ON_NODES)
4517                 f.setMesh(m)
4518                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4519                 f.setArray(arr)
4520                 f.setName("%s_%d"%(fieldName,j))
4521                 f.setTime(float(i),i,0)
4522                 fmts.appendFieldNoProfileSBT(f)
4523                 pass
4524             fs.pushField(fmts)
4525             pass
4526         #
4527         mm=MEDFileUMesh() ; mm[0]=m
4528         fs.write(fileName,2)
4529         mm.write(fileName,0)
4530         ############
4531         def appendInDict(d,key,val):
4532             if key in d:
4533                 d[key].append(val)
4534             else:
4535                 d[key]=[val]
4536             pass
4537         import re
4538         allFields=GetAllFieldNames(fileName)
4539         allFieldsDict={}
4540         pat=re.compile("([\d]+)([\s\S]+)$")
4541         for st in allFields:
4542             stRev=st[::-1]
4543             m=pat.match(stRev)
4544             if m:
4545                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4546                 pass
4547             else:
4548                 appendInDict(allFieldsDict,st,'')
4549                 pass
4550             pass
4551         fs2=MEDFileFields()
4552         for k in allFieldsDict:
4553             if allFieldsDict[k]!=['']:
4554                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4555                 pass
4556             fmts2=[]
4557             for it in allFieldsDict[k]:
4558                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4559                 pass
4560             fmts2.reverse()
4561             zeResu=fmts2.pop()
4562             nbIter=len(fmts2)
4563             for ii in range(nbIter):
4564                 zeResu.pushBackTimeSteps(fmts2.pop())
4565                 pass
4566             zeResu.setName(k)
4567             fs2.pushField(zeResu)
4568             pass
4569         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4570         pass
4571
4572     @WriteInTmpDir
4573     def testMEDFileMeshRearrangeFamIds1(self):
4574         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4575         fileName="Pyfile89.med"
4576         meshName='Maillage_2'
4577         mm=MEDFileUMesh()
4578         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)])
4579         #
4580         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])
4581         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])
4582         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4583         m0.setConnectivity(c0,c0i)
4584         mm[0]=m0
4585         #
4586         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])
4587         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])
4588         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4589         m1.setConnectivity(c1,c1i)
4590         mm[-1]=m1
4591         #
4592         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])
4593         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4594         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4595         mm[-2]=m2.buildUnstructured()
4596         #
4597         ref0=DataArrayInt(55) ; ref0[:]=0
4598         mm.setFamilyFieldArr(0,ref0)
4599         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]))
4600         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])
4601         mm.setFamilyFieldArr(-1,ref1)
4602         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])
4603         mm.setFamilyFieldArr(-2,ref2)
4604         #
4605         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4606             mm.setFamilyId(f,fid)
4607         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4608             mm.setFamiliesOnGroup(grp,fams)
4609         mm.write(fileName,2)
4610         #
4611         mm=MEDFileMesh.New(fileName)
4612         grp=mm.getGroup(-1,"Groupe_1")
4613         dai=grp.computeFetchedNodeIds()
4614         dai.setName("TOTO")
4615         mm.addGroup(1,dai)
4616         mm.rearrangeFamilies() # <- the aim of the test
4617         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4618         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4619         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4620         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4621         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])))
4622         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4623         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4624         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4625         for elt,fams in allGrps:
4626             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4627         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4628         for elt,eltId in allFams:
4629             self.assertEqual(mm.getFamilyId(elt),eltId)
4630         pass
4631
4632     @WriteInTmpDir
4633     def testNonRegrCMeshSetFieldPfl1(self):
4634         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4635         ff=MEDFileField1TS()
4636         meshName="mesh"
4637         mm=MEDFileCMesh()
4638         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4639         m.setCoords(arr)
4640         m.setName(meshName)
4641         mm.setMesh(m)
4642         field=MEDCouplingFieldDouble(ON_CELLS)
4643         field.setMesh(m)
4644         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4645         field.setName("Field")
4646         field.checkConsistencyLight()
4647         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4648         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4649         self.assertEqual(ff.getPfls(),())
4650         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4651         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4652         del ff,mm,field,field2,pfl
4653         # same with unstructured mesh
4654         ff=MEDFileField1TS()
4655         meshName="mesh"
4656         mm=MEDFileUMesh()
4657         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4658         m.setCoords(arr)
4659         m.setName(meshName)
4660         m=m.buildUnstructured()
4661         mm[0]=m
4662         field=MEDCouplingFieldDouble(ON_CELLS)
4663         field.setMesh(m)
4664         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4665         field.setName("Field")
4666         field.checkConsistencyLight()
4667         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4668         ff.setFieldProfile(field,mm,0,pfl)
4669         self.assertEqual(ff.getPfls(),())
4670         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4671         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4672         pass
4673
4674     @WriteInTmpDir
4675     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4676         meshName="mesh"
4677         fileName="Pyfile90.med"
4678         fileName2="Pyfile91.med"
4679         arr=DataArrayDouble(5) ; arr.iota()
4680         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4681         m=m.buildUnstructured()
4682         d=DataArrayInt([3,7,11,15])
4683         m1=m[d]
4684         m1.simplexize(0)
4685         m2=m[d.buildComplement(m.getNumberOfCells())]
4686         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4687         m.changeSpaceDimension(3,0.)
4688         arr=DataArrayDouble(3) ; arr.iota()
4689         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4690         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4691         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4692         m3D=m.buildExtrudedMesh(m1D,0)
4693         m3D.sortCellsInMEDFileFrmt()
4694         m3D.setName(meshName)
4695         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4696         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4697         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4698         #
4699         mm=MEDFileUMesh()
4700         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4701         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4702         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4703         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4704         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4705         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4706         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4707         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4708         mm.setGroupsAtLevel(0,[vol1,vol2])
4709         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4710         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4711         #
4712         mmOut1=mm.linearToQuadratic(0,0.)
4713         mmOut1.write(fileName2,2)
4714         mmOut2=mmOut1.quadraticToLinear(0.)
4715         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4716         pass
4717
4718     @WriteInTmpDir
4719     def testMEDFileMeshAddGroup1(self):
4720         m=MEDCouplingCMesh()
4721         arrX=DataArrayDouble(9) ; arrX.iota()
4722         arrY=DataArrayDouble(4) ; arrY.iota()
4723         m.setCoords(arrX,arrY)
4724         m.setName("mesh")
4725         mm=MEDFileCMesh()
4726         mm.setMesh(m)
4727         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4728         mm.addGroup(0,grp0)
4729         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4730         mm.addGroup(0,grp1)
4731         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4732         mm.addGroup(0,grp2)
4733         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4734         mm.addGroup(0,grp3)
4735         for grp in [grp0,grp1,grp2,grp3]:
4736             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4737         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4738         delta=12
4739         for grp in [grp0,grp1,grp2,grp3]:
4740             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4741             mm.addGroup(1,grpNode)
4742         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4743         for grp in [grp0,grp1,grp2,grp3]:
4744             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4745         for grp in [grp0,grp1,grp2,grp3]:
4746             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4747             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4748         mm.normalizeFamIdsMEDFile()
4749         for grp in [grp0,grp1,grp2,grp3]:
4750             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4751         for grp in [grp0,grp1,grp2,grp3]:
4752             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4753             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4754         pass
4755
4756     @WriteInTmpDir
4757     def testMEDFileJoint1(self):
4758         fileName="Pyfile92.med"
4759         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4760         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4761         mm=MEDFileUMesh()
4762         mm.setCoords(coo)
4763         mm.setName("maa1")
4764         mm.setDescription("un maillage")
4765         mm.write(fileName,2)
4766         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4767         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4768         one_step_joint=MEDFileJointOneStep()
4769         one_step_joint.pushCorrespondence(cell_correspond)
4770         one_step_joint.pushCorrespondence(node_correspond)
4771         one_joint=MEDFileJoint()
4772         one_joint.pushStep(one_step_joint)
4773         one_joint.setLocalMeshName("maa1")
4774         one_joint.setRemoteMeshName("maa1")
4775         one_joint.setDescription("joint_description")
4776         one_joint.setJointName("joint_1")
4777         one_joint.setDomainNumber(1)
4778         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4779         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4780         self.assertEqual( one_joint.getDescription(), "joint_description")
4781         self.assertEqual( one_joint.getJointName(), "joint_1")
4782         self.assertEqual( one_joint.getDomainNumber(), 1)
4783         joints=MEDFileJoints()
4784         joints.pushJoint(one_joint);
4785         joints.write(fileName,0)
4786         # read back
4787         jointsR=MEDFileJoints(fileName,mm.getName())
4788         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4789         jR = jointsR.getJointAtPos(0)
4790         self.assertTrue( jR.isEqual( one_joint ))
4791         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4792         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4793         jointsR.destroyJointAtPos(0)
4794         pass
4795
4796     @WriteInTmpDir
4797     def testMEDFileJoint2(self):
4798         fileNameWr="Pyfile93.med"
4799         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4800         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4801         mm=MEDFileUMesh()
4802         mm.setCoords(coo)
4803         mm.setName("maa1")
4804         mm.setDescription("un maillage")
4805         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4806         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4807         one_step_joint=MEDFileJointOneStep()
4808         two_step_joint=MEDFileJointOneStep()
4809         one_joint=MEDFileJoint()
4810         two_joint=MEDFileJoint()
4811         one_step_joint.pushCorrespondence(node_correspond)
4812         one_joint.pushStep(one_step_joint)
4813         two_step_joint.pushCorrespondence(cell_correspond)
4814         two_step_joint.pushCorrespondence(node_correspond)
4815         two_joint.pushStep(two_step_joint)
4816         one_joint.setLocalMeshName("maa1")
4817         one_joint.setRemoteMeshName("maa1")
4818         one_joint.setDescription("joint_description_1")
4819         one_joint.setJointName("joint_1")
4820         one_joint.setDomainNumber(1)
4821         two_joint.setLocalMeshName("maa1")
4822         two_joint.setRemoteMeshName("maa1")
4823         two_joint.setDescription("joint_description_2")
4824         two_joint.setJointName("joint_2")
4825         two_joint.setDomainNumber(2)
4826         joints=MEDFileJoints()
4827         joints.pushJoint(one_joint)
4828         joints.pushJoint(two_joint)
4829         mm.setJoints( joints )
4830         mm.write(fileNameWr,2)
4831         #
4832         mm=MEDFileMesh.New(fileNameWr)
4833         self.assertEqual( mm.getNumberOfJoints(), 2)
4834         jointsR = mm.getJoints();
4835         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4836         self.assertEqual( len( jointsR ), 2 )
4837         jointR1 = jointsR[0]
4838         jointR2 = jointsR[1]
4839         self.assertFalse( jointR1 is None )
4840         self.assertFalse( jointR2 is None )
4841         self.assertTrue( jointR1.isEqual( one_joint ))
4842         self.assertTrue( jointR2.isEqual( two_joint ))
4843         pass
4844
4845     @WriteInTmpDir
4846     def testMEDFileJoint1(self):
4847         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4848         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4849         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4850         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4851         joint1st_1=MEDFileJointOneStep()
4852         joint1st_1.pushCorrespondence(cell_correspond)
4853         joint1st_1.pushCorrespondence(node_correspond)
4854         joint1st_2=MEDFileJointOneStep()
4855         joint1st_2.pushCorrespondence(cell_correspond)
4856         joint1st_2.pushCorrespondence(node_correspond)
4857         joint1st_3=MEDFileJointOneStep()
4858         joint1st_3.pushCorrespondence(node_correspond)
4859         joint1st_3.pushCorrespondence(cell_correspond)
4860         joint1st_4=MEDFileJointOneStep()
4861         joint1st_4.pushCorrespondence(cell_correspond)
4862         joint1st_5=MEDFileJointOneStep()
4863         joint1st_5.pushCorrespondence(cell_correspon2)
4864         joint1st_6=MEDFileJointOneStep()
4865         joint1st_6.pushCorrespondence(cell_correspon3)
4866         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4867         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4868         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4869         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4870         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4871         one_joint=MEDFileJoint()
4872         one_joint.pushStep(joint1st_1)
4873         one_joint.setLocalMeshName("maa1")
4874         one_joint.setRemoteMeshName("maa2")
4875         one_joint.setDescription("joint_description")
4876         one_joint.setJointName("joint_1")
4877         one_joint.setDomainNumber(1)
4878         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4879         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4880         self.assertEqual( "joint_description", one_joint.getDescription())
4881         self.assertEqual( 1, one_joint.getDomainNumber())
4882         self.assertEqual( "joint_1", one_joint.getJointName())
4883         pass
4884
4885     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4886     @WriteInTmpDir
4887     def testMEDFileSafeCall0(self):
4888         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4889         fname="Pyfile94.med"
4890         errfname="Pyfile94.err"
4891
4892         import os
4893         # first clean file if needed
4894         if os.path.exists(fname):
4895             os.remove(fname)
4896             pass
4897         # second : build a file from scratch
4898         m=MEDCouplingCMesh()
4899         arr=DataArrayDouble(11) ; arr.iota()
4900         m.setCoords(arr,arr)
4901         mm=MEDFileCMesh()
4902         mm.setMesh(m)
4903         mm.setName("mesh")
4904         mm.write(fname,2)
4905         # third : change permissions to remove write access on created file
4906         os.chmod(fname, 0o444)
4907         # four : try to append data on file -> check that it raises Exception
4908         f=MEDCouplingFieldDouble(ON_CELLS)
4909         f.setName("field")
4910         f.setMesh(m)
4911         f.setArray(DataArrayDouble(100))
4912         f.getArray()[:]=100.
4913         f.checkConsistencyLight()
4914         f1ts=MEDFileField1TS()
4915         f1ts.setFieldNoProfileSBT(f)
4916         # redirect stderr
4917         tmp=StdOutRedirect(errfname)
4918         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4919         del tmp
4920         #
4921         if os.path.exists(errfname):
4922             os.remove(errfname)
4923         #
4924         pass
4925
4926     @WriteInTmpDir
4927     def testUnivStatus1(self):
4928         """ Non regression test to check the effectiveness of univ write status."""
4929         fname="Pyfile95.med"
4930         arr=DataArrayDouble(10) ; arr.iota()
4931         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4932         mm=MEDFileCMesh() ; mm.setMesh(m)
4933         mm.setUnivNameWrStatus(False) # test is here
4934         mm.write(fname,2)
4935         mm=MEDFileCMesh(fname)
4936         self.assertEqual(mm.getUnivName(),"")
4937         mm.setUnivNameWrStatus(True)
4938         mm.write(fname,2)
4939         mm=MEDFileCMesh(fname)
4940         self.assertTrue(mm.getUnivName()!="")
4941         pass
4942
4943     @WriteInTmpDir
4944     def testEmptyMesh(self):
4945       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4946       with 0 tuples """
4947       fname = "Pyfile96.med"
4948       m = MEDCouplingUMesh('toto', 2)
4949       m.setCoords(DataArrayDouble([], 0, 2))
4950       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4951       mfu = MEDFileUMesh()
4952       mfu.setMeshAtLevel(0, m)
4953       mfu.write(fname, 2)
4954       mfu2 = MEDFileUMesh(fname)
4955       self.assertEqual('toto', mfu2.getName())
4956       lvl = mfu2.getNonEmptyLevels()
4957       self.assertEqual((), lvl)
4958
4959     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4960     def testMEDFileUMeshPickeling2(self):
4961       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4962       name="Mesh_1"
4963       grpName1="HAUT"
4964       grpName2="BASE"
4965       hauteur=1.
4966       nbOfNodesPerAxis=3
4967       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4968       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4969       mesh=MEDFileUMesh() ; mesh[0]=m
4970       m1=m.computeSkin() ; mesh[-1]=m1
4971       #
4972       bary1=m1.computeCellCenterOfMass()[:,2]
4973       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4974       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4975       mesh.setGroupsAtLevel(-1,[grp1,grp2])
4976
4977       st=pickle.dumps(mesh,2)
4978       mm=pickle.loads(st)
4979       st2=pickle.dumps(mm,2)
4980       mm2=pickle.loads(st2)
4981       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4982       pass
4983
4984     @WriteInTmpDir
4985     def testMEDFileEquivalence1(self):
4986       """ First check of equivalence implementation in MEDFileMesh"""
4987       fileName="Pyfile97.med"
4988       meshName="M_01"
4989       mm=MEDFileUMesh()
4990       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)])
4991       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4992       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])
4993       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4994       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])
4995       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4996       mm.getFamilyFieldAtLevel(-1)[:]=-2
4997       mm.getFamilyFieldAtLevel(0)[:]=0
4998       mm.addFamily("HOMARD________-1",-1)
4999       mm.addFamily("HOMARD________-2",-2)
5000       mm.addFamily("HOMARD________-3",-3)
5001       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5002
5003       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5004       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."
5005       mm.initializeEquivalences()
5006       eqs=mm.getEquivalences()
5007       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5008       eq0.setDescription(descEq)
5009       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)])
5010       eq0.setArray(-1,corr)
5011       self.assertEqual(eq0.getCell().size(),1)
5012       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5013       eq0.getCell().clear()
5014       self.assertEqual(eq0.getCell().size(),0)
5015       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5016       self.assertEqual(eq0.getCell().size(),1)
5017       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5018       mm.killEquivalences()
5019       mm.initializeEquivalences()
5020       eqs=mm.getEquivalences()
5021       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5022       eq0.setDescription(descEq)
5023       c=eq0.initCell()
5024       c.setArrayForType(NORM_QUAD4,corr)
5025       self.assertEqual(eq0.getCell().size(),1)
5026       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5027       mm2=mm.deepCopy()
5028       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5029       self.assertEqual(mm2.getEquivalences().size(),1)
5030       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5031       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5032       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5033       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5034       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5035       mm.write(fileName,2)
5036       #
5037       mm3=MEDFileMesh.New(fileName)
5038       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5039       pass
5040
5041     @WriteInTmpDir
5042     def testMEDFileForFamiliesPlayer1(self):
5043       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5044       fileName="Pyfile98.med"
5045       meshName="mesh"
5046       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5047       arr=DataArrayDouble(4) ; arr.iota()
5048       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5049       m=m.buildUnstructured()
5050       mm=MEDFileUMesh()
5051       mm[0]=m
5052       mm.setName(meshName)
5053       mm.setFamilyId("FAMILLE_ZERO",0)
5054       mm.getFamilyFieldAtLevel(0)[-3:]=-4
5055       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5056       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5057       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5058       mm.setFamilyFieldArr(1,d)
5059       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5060       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5061       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5062       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5063       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5064       mm.write(fileName,2)
5065       # now read such funny file !
5066       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5067       self.assertTrue(mm.isEqual(mm2,1e-16))
5068       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5069       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5070       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5071       pass
5072
5073     @WriteInTmpDir
5074     def testCartesianizer1(self):
5075       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5076       # UMesh non cart
5077       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5078       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5079       d0=DataArrayInt(16) ; d0[:]=0
5080       d1=DataArrayInt(9)  ; d1[:]=0
5081       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5082       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5083       ref0=mm.getCoords().getHiddenCppPointer()
5084       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5085       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5086       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5087       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5088       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5089       mm.setAxisType(AX_CYL) #<- important
5090       mm2=mm.cartesianize() # the trigger
5091       self.assertEqual(mm2.getAxisType(),AX_CART)
5092       mm.setAxisType(AX_CART) # this is here only to avoid complaints
5093       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5094       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5095       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5096       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5097       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5098       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5099       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5100       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5101       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5102       self.assertEqual(mm2.getName(),mm.getName())
5103       self.assertEqual(mm2.getDescription(),mm.getDescription())
5104       self.assertEqual(mm2.getTime(),mm.getTime())
5105       self.assertEqual(mm2.getTime(),mm.getTime())
5106       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5107       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5108       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5109       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5110       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5111       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5112       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5113       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5114       # UMesh cart
5115       mm.setAxisType(AX_CART)
5116       mm2=mm.cartesianize() # the trigger
5117       self.assertEqual(mm2.getAxisType(),AX_CART)
5118       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5119       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5120       # CurveLinearMesh non cart
5121       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5122       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5123       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5124       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5125       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5126       mm2=mm.cartesianize() # the trigger
5127       self.assertEqual(mm2.getAxisType(),AX_CART)
5128       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5129       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5130       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5131       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5132       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5133       self.assertEqual(mm2.getName(),mm.getName())
5134       self.assertEqual(mm2.getDescription(),mm.getDescription())
5135       self.assertEqual(mm2.getTime(),mm.getTime())
5136       self.assertEqual(mm2.getTime(),mm.getTime())
5137       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5138       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5139       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5140       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5141       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5142       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5143       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5144       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5145       # CurveLinearMesh cart
5146       mm.setAxisType(AX_CART)
5147       mm2=mm.cartesianize() # the trigger
5148       self.assertEqual(mm2.getAxisType(),AX_CART)
5149       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5150       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5151       # CMesh non cart
5152       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5153       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5154       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5155       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5156       mm2=mm.cartesianize() # the trigger
5157       self.assertEqual(mm2.getAxisType(),AX_CART)
5158       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5159       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5160       self.assertEqual(mm2.getName(),mm.getName())
5161       self.assertEqual(mm2.getDescription(),mm.getDescription())
5162       self.assertEqual(mm2.getTime(),mm.getTime())
5163       self.assertEqual(mm2.getTime(),mm.getTime())
5164       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5165       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5166       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5167       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5168       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5169       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5170       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5171       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5172       # CMesh cart
5173       mm.setAxisType(AX_CART)
5174       mm2=mm.cartesianize() # the trigger
5175       self.assertEqual(mm2.getAxisType(),AX_CART)
5176       self.assertTrue(isinstance(mm2,MEDFileCMesh))
5177       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5178       pass
5179
5180     @WriteInTmpDir
5181     def testCheckCoherency(self):
5182       m2 = MEDCouplingUMesh("2d", 2)
5183       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5184       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5185       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5186       mum = MEDFileUMesh()
5187       mum.setMeshAtLevel(0, m2)
5188       mum.setMeshAtLevel(-1, m1)
5189       mum.checkConsistency()
5190       mum2 = mum.deepCopy()
5191
5192       # Nodes
5193       arr = DataArrayInt([2]*4)
5194       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5195       self.assertRaises(InterpKernelException, mum.checkConsistency)
5196       mum=mum2; mum2=mum.deepCopy();
5197       arr = DataArrayInt([2]*4)
5198       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5199       self.assertRaises(InterpKernelException, mum.checkConsistency)
5200       mum=mum2; mum2=mum.deepCopy();
5201       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5202       self.assertRaises(InterpKernelException, mum.checkConsistency)
5203       mum=mum2; mum2=mum.deepCopy();
5204       arr = DataArrayAsciiChar(['tutu           x']*4)
5205       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5206       self.assertRaises(InterpKernelException, mum.checkConsistency)
5207
5208       # 2D
5209       mum=mum2; mum2=mum.deepCopy();
5210       arr = DataArrayInt([2]*2)
5211       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5212       self.assertRaises(InterpKernelException, mum.checkConsistency)
5213       mum=mum2; mum2=mum.deepCopy();
5214       arr = DataArrayInt([2]*2)
5215       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5216       self.assertRaises(InterpKernelException, mum.checkConsistency)
5217       mum=mum2; mum2=mum.deepCopy();
5218       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5219       self.assertRaises(InterpKernelException, mum.checkConsistency)
5220       mum=mum2; mum2=mum.deepCopy();
5221       arr = DataArrayAsciiChar(['tutu           x']*2)
5222       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5223       self.assertRaises(InterpKernelException, mum.checkConsistency)
5224
5225       # 1D
5226       mum=mum2; mum2=mum.deepCopy();
5227       arr = DataArrayInt([2]*5)
5228       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5229       self.assertRaises(InterpKernelException, mum.checkConsistency)
5230       mum=mum2; mum2=mum.deepCopy();
5231       arr = DataArrayInt([2]*5)
5232       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5233       self.assertRaises(InterpKernelException, mum.checkConsistency)
5234       mum=mum2; mum2=mum.deepCopy();
5235       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5236       self.assertRaises(InterpKernelException, mum.checkConsistency)
5237       mum=mum2; mum2=mum.deepCopy();
5238       arr = DataArrayAsciiChar(['tutu           x']*5)
5239       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5240       self.assertRaises(InterpKernelException, mum.checkConsistency)
5241
5242     @WriteInTmpDir
5243     def testCheckSMESHConsistency(self):
5244       m2 = MEDCouplingUMesh("2d", 2)
5245       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5246       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5247       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5248       mum = MEDFileUMesh()
5249       mum.setMeshAtLevel(0, m2)
5250       mum.setMeshAtLevel(-1, m1)
5251       mum.checkConsistency()
5252       mum.checkSMESHConsistency()
5253       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5254       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5255       mum.setRenumFieldArr(0, n2)
5256       mum.setRenumFieldArr(-1, n1)
5257       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5258       mum.setRenumFieldArr(-1, n1+100)
5259       mum.checkSMESHConsistency()
5260       pass
5261
5262     @WriteInTmpDir
5263     def testClearNodeAndCellNumbers(self):
5264       m2 = MEDCouplingUMesh("2d", 2)
5265       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5266       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5267       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5268       mum = MEDFileUMesh()
5269       mum.setMeshAtLevel(0, m2)
5270       mum.setMeshAtLevel(-1, m1)
5271       mum.checkConsistency()
5272       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5273       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5274       mum.setRenumFieldArr(0, n2)
5275       mum.setRenumFieldArr(-1, n1)
5276       mum.clearNodeAndCellNumbers()
5277       mum.checkSMESHConsistency()
5278       pass
5279
5280     @WriteInTmpDir
5281     def testCMeshSetFamilyFieldArrNull(self):
5282       meshName="mesh"
5283       fname="Pyfile99.med"
5284       arrX=DataArrayDouble([0,1,2,3])
5285       arrY=DataArrayDouble([0,1,2])
5286       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5287       mm=MEDFileCMesh() ; mm.setMesh(m)
5288       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5289       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5290       mm.setFamilyFieldArr(0,famCellIds)
5291       mm.setFamilyFieldArr(1,famNodeIds)
5292       mm.write(fname,2)
5293       mm=MEDFileMesh.New(fname)
5294       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5295       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5296       mm.setFamilyFieldArr(0,None)#<- bug was here
5297       mm.setFamilyFieldArr(1,None)#<- bug was here
5298       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5299       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5300       mm3=mm.deepCopy()
5301       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5302       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5303       mm.write(fname,2)
5304       mm2=MEDFileMesh.New(fname)
5305       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5306       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5307       pass
5308
5309     @WriteInTmpDir
5310     def testAppendFieldProfileOnIntField(self):
5311       fname="Pyfile100.med"
5312       arrX=DataArrayDouble([0,1,2,3])
5313       arrY=DataArrayDouble([0,1,2])
5314       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5315       mm=MEDFileCMesh()
5316       mm.setMesh(mesh)
5317       #
5318       fmts=MEDFileIntFieldMultiTS()
5319       pflName="PFL"
5320       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5321       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5322       fieldName="FieldOnCell"
5323       f.setTime(1.2,1,1) ; f.setName(fieldName)
5324       arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5325       fmts.appendFieldProfile(f,mm,0,pfl)
5326       #
5327       mm.write(fname,2)
5328       fmts.write(fname,0)
5329       #
5330       mm=MEDFileMesh.New(fname)
5331       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5332       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5333       self.assertEqual(fmts.getName(),fieldName)
5334       self.assertEqual(len(fmts),1)
5335       f1ts=fmts[0]
5336       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5337       self.assertEqual(pfltest.getName(),pflName)
5338       self.assertEqual(ftest.getName(),fieldName)
5339       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5340       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5341       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5342       self.assertEqual(ftest2.getTime(),f.getTime())
5343       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5344       pass
5345
5346     @WriteInTmpDir
5347     def testMEDFileFieldEasyField1(self):
5348       """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."""
5349       ## Basic test on cells on top level
5350       fname="Pyfile101.med"
5351       fieldName="field1"
5352       mm=MEDFileUMesh()
5353       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5354       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5355       m.allocateCells()
5356       m.insertNextCell(NORM_TRI3,[0,1,2])
5357       m.insertNextCell(NORM_TRI3,[3,4,5])
5358       m.insertNextCell(NORM_TRI3,[6,7,8])
5359       m.insertNextCell(NORM_TRI3,[9,10,11])
5360       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5361       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5362       mm[0]=m
5363       mm.write(fname,2)
5364       arr0=DataArrayDouble([10,11,12,13,100,101])
5365       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5366       f.setName(fieldName) ; f.setTime(2.,6,7)
5367       f0=f.deepCopy()
5368       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5369       ff.write(fname,0)
5370       arr2=arr0+1000 ; f.setArray(arr2)
5371       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5372       ff.write(fname,0)
5373       f1=f.deepCopy()
5374       ##
5375       mm=MEDFileMesh.New(fname)
5376       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5377       ftst0=f1ts.field(mm)
5378       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5379       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5380       ftst1=f1ts.field(mm)
5381       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5382       fmts=MEDFileFieldMultiTS(fname,fieldName)
5383       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5384       ## Basic test on nodes on top level
5385       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5386       f2.setName(fieldName)
5387       mm.write(fname,2)
5388       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5389       #
5390       mm=MEDFileMesh.New(fname)
5391       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5392       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5393       fmts=MEDFileFieldMultiTS(fname,fieldName)
5394       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5395       ## Node on elements
5396       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)
5397       f3.setName(fieldName) ; f3.checkConsistencyLight()
5398       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5399       #
5400       mm=MEDFileMesh.New(fname)
5401       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5402       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5403       ## Gauss
5404       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5405       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])
5406       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)
5407       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)
5408       f4.checkConsistencyLight()
5409       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5410       #
5411       mm=MEDFileMesh.New(fname)
5412       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5413       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5414       pass
5415
5416     @WriteInTmpDir
5417     def testMEDFileFieldEasyField2(self):
5418         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5419         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."""
5420         ## Basic test on cells on top level
5421         fname="Pyfile102.med"
5422         fieldName="field1"
5423         mm=MEDFileUMesh()
5424         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5425         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5426         m.allocateCells()
5427         m.insertNextCell(NORM_TRI3,[0,1,2])
5428         m.insertNextCell(NORM_TRI3,[3,4,5])
5429         m.insertNextCell(NORM_TRI3,[6,7,8])
5430         m.insertNextCell(NORM_TRI3,[9,10,11])
5431         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5432         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5433         mm[0]=m
5434         mm.write(fname,2)
5435         arr0=DataArrayInt32([10,11,12,13,100,101])
5436         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5437         f.setName(fieldName) ; f.setTime(2.,6,7)
5438         f0=f.deepCopy()
5439         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5440         ff.write(fname,0)
5441         arr2=arr0+1000 ; f.setArray(arr2)
5442         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5443         ff.write(fname,0)
5444         f1=f.deepCopy()
5445         ##
5446         mm=MEDFileMesh.New(fname)
5447         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5448         ftst0=f1ts.field(mm)
5449         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5450         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5451         ftst1=f1ts.field(mm)
5452         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5453         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5454         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5455         ## Basic test on nodes on top level
5456         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5457         f2.setName(fieldName)
5458         mm.write(fname,2)
5459         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5460         #
5461         mm=MEDFileMesh.New(fname)
5462         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5463         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5464         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5465         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5466         ## Node on elements
5467         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)
5468         f3.setName(fieldName) ; f3.checkConsistencyLight()
5469         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5470         #
5471         mm=MEDFileMesh.New(fname)
5472         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5473         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5474         ## Gauss
5475         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5476         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])
5477         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)
5478         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)
5479         f4.checkConsistencyLight()
5480         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5481         #
5482         mm=MEDFileMesh.New(fname)
5483         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5484         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5485         pass
5486
5487     @WriteInTmpDir
5488     def testMEDFileFieldEasyField3(self):
5489         """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."""
5490         fname="Pyfile103.med"
5491         fieldName="field1"
5492         mm=MEDFileUMesh()
5493         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5494         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5495         m.allocateCells()
5496         m.insertNextCell(NORM_TRI3,[0,1,2])
5497         m.insertNextCell(NORM_TRI3,[3,4,5])
5498         m.insertNextCell(NORM_TRI3,[6,7,8])
5499         m.insertNextCell(NORM_TRI3,[9,10,11])
5500         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5501         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5502         mm[-1]=m
5503         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5504         m0.allocateCells()
5505         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5506         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5507         mm[0]=m0
5508         mm.write(fname,2)
5509         # start slowly
5510         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5511         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5512         #
5513         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5514         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5515         # here f1 lying on level -1 not 0 check if "field" method detect it !
5516         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5517         f1.setMesh(mm[-1]) # -1 is very important
5518         f1.setTime(16.,3,4)
5519         f1.checkConsistencyLight()
5520         mm.write(fname,2)
5521         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5522         #
5523         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5524         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5525         # nodes on elements
5526         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5527         f3.setMesh(mm[-1]) # this line is important
5528         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)
5529         f3.setName(fieldName) ; f3.checkConsistencyLight()
5530         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5531         #
5532         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5533         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5534         # gauss
5535         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5536         f4.setMesh(mm[-1]) # this line is important
5537         f4.setName(fieldName)
5538         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])
5539         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)
5540         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)
5541         f4.checkConsistencyLight()
5542         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5543         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5544         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5545         pass
5546
5547     @WriteInTmpDir
5548     def testMEDFileFieldEasyField4(self):
5549         """ Same than testMEDFileFieldEasyField3 but with integers"""
5550         fname="Pyfile104.med"
5551         fieldName="field1"
5552         mm=MEDFileUMesh()
5553         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5554         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5555         m.allocateCells()
5556         m.insertNextCell(NORM_TRI3,[0,1,2])
5557         m.insertNextCell(NORM_TRI3,[3,4,5])
5558         m.insertNextCell(NORM_TRI3,[6,7,8])
5559         m.insertNextCell(NORM_TRI3,[9,10,11])
5560         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5561         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5562         mm[-1]=m
5563         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5564         m0.allocateCells()
5565         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5566         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5567         mm[0]=m0
5568         mm.write(fname,2)
5569         # start slowly
5570         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5571         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5572         #
5573         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5574         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5575         # here f1 lying on level -1 not 0 check if "field" method detect it !
5576         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5577         f1.setMesh(mm[-1]) # -1 is very important
5578         f1.setTime(16.,3,4)
5579         f1.checkConsistencyLight()
5580         mm.write(fname,2)
5581         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5582         #
5583         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5584         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5585         # nodes on elements
5586         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5587         f3.setMesh(mm[-1]) # this line is important
5588         arr3=DataArrayInt32([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3)
5589         f3.setName(fieldName) ; f3.checkConsistencyLight()
5590         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5591         #
5592         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5593         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5594         # gauss
5595         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5596         f4.setMesh(mm[-1]) # this line is important
5597         f4.setName(fieldName)
5598         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])
5599         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)
5600         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)
5601         f4.checkConsistencyLight()
5602         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5603         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5604         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5605         pass
5606
5607     @WriteInTmpDir
5608     def testMEDFileFieldEasyField5(self):
5609         """More and more difficult now look at how profiles are managed by "field" method."""
5610         fname="Pyfile105.med"
5611         fieldName="field1"
5612         mm=MEDFileUMesh()
5613         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5614         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5615         m.allocateCells()
5616         m.insertNextCell(NORM_TRI3,[0,1,2])
5617         m.insertNextCell(NORM_TRI3,[3,4,5])
5618         m.insertNextCell(NORM_TRI3,[6,7,8])
5619         m.insertNextCell(NORM_TRI3,[9,10,11])
5620         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5621         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5622         mm[0]=m
5623         mm.write(fname,2)
5624         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5625         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5626         #
5627         arr0=DataArrayDouble([10,11,12,13])
5628         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5629         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5630         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5631         ff.write(fname,0)
5632         #
5633         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5634         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5635         # more complicated -> multi level
5636         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5637         m0.allocateCells()
5638         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5639         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5640         mm2=MEDFileUMesh()
5641         mm2[0]=m0 ; mm2[-1]=m
5642         #
5643         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5644         #
5645         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5646         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5647         pass
5648
5649     @WriteInTmpDir
5650     def testExtractPart1(self):
5651         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)])
5652         meshName="mesh"
5653         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5654         m0.insertNextCell(NORM_TRI3,[8,4,3])
5655         m0.insertNextCell(NORM_TRI3,[8,9,4])
5656         m0.insertNextCell(NORM_TRI3,[7,13,8])
5657         m0.insertNextCell(NORM_TRI3,[7,12,13])
5658         m0.insertNextCell(NORM_TRI3,[0,6,1])
5659         m0.insertNextCell(NORM_TRI3,[0,5,6])
5660         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5661         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5662         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5663         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5664         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5665         #
5666         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5667         m1.insertNextCell(NORM_SEG2,[10,5])
5668         m1.insertNextCell(NORM_SEG2,[5,0])
5669         m1.insertNextCell(NORM_SEG2,[0,1])
5670         m1.insertNextCell(NORM_SEG2,[1,2])
5671         m1.insertNextCell(NORM_SEG2,[2,3])
5672         m1.insertNextCell(NORM_SEG2,[3,4])
5673         m1.insertNextCell(NORM_SEG2,[4,9])
5674         m1.insertNextCell(NORM_SEG2,[9,14])
5675         m1.insertNextCell(NORM_SEG2,[14,13])
5676         m1.insertNextCell(NORM_SEG2,[13,12])
5677         m1.insertNextCell(NORM_SEG2,[12,11])
5678         m1.insertNextCell(NORM_SEG2,[11,10])
5679         mm=MEDFileUMesh()
5680         mm[0]=m0 ; mm[-1]=m1
5681         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5682         tab={} #
5683         tab[0]=DataArrayInt([0,2,3,4,6,7])
5684         tab[-1]=DataArrayInt([2,3,4,5,9])
5685         fs=MEDFileFields()
5686         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5687         tab[1]=arr0
5688         #
5689         fname0="Field0"
5690         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5691         t0=(16.5,3,4)
5692         ic=["toto [m]"]
5693         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5694         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5695         f0.setMesh(m0) ; f0.setName(fname0)
5696         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5697         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5698         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]))
5699         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5700         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5701         fmts.pushBackTimeStep(f1ts)
5702         #
5703         mmOut=mm.extractPart(tab)
5704         #
5705         fsPart0=fs.extractPart(tab,mm)
5706         self.assertEqual(len(fsPart0),1)
5707         fmtsP=fsPart0[0]
5708         self.assertEqual(len(fmtsP),1)
5709         f1ts=fmtsP[0]
5710         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5711         #
5712         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5713         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5714         #
5715         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5716         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5717         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5718         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5719         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5720         #
5721         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5722         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5723         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5724         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5725         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5726         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5727         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5728         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5729         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5730         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5731         #
5732         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5733         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5734         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5735         # multisteps
5736         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5737         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5738         for i,tt in enumerate(tss):
5739             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5740             myarr=arr0_0+i*1000.
5741             f0.setArray(myarr)
5742             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5743             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5744             pass
5745         fsPart1=fs.extractPart(tab,mm)
5746         self.assertEqual(len(fsPart1),1)
5747         fmtsP=fsPart1[0]
5748         self.assertEqual(len(fmtsP),len(tss))
5749         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5750             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5751             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5752             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5753             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5754             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5755             self.assertEqual(fPart.getTime(),list(tt))
5756             pass
5757         pass
5758
5759     @WriteInTmpDir
5760     def testSymmetryPlusAggregationMFD1(self):
5761         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5762         fname1="Pyfile106_1.med"
5763         fname2="Pyfile106_2.med"
5764         fname3="Pyfile106_3.med"
5765         meshName="mesh"
5766         mm1=MEDFileUMesh()
5767         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5768         mm1.setCoords(da1)
5769         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5770         mm1_0.setCoords(da1)
5771         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5772         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5773         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5774         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5775         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5776         mm1[0]=mm1_0
5777         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5778         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5779         #
5780         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5781         mm1_1.setCoords(da1)
5782         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5783         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5784         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5785         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5786         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5787         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5788         mm1[-1]=mm1_1
5789         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5790         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5791         for i in range(1,10):
5792             mm1.setFamilyId("F%d"%i,i)
5793         mm1.setFamilyId("FAMILLE_ZERO",0)
5794         mm1.setFamilyId("H1",100)
5795         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5796         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5797         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5798         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5799         ##############
5800         mm2=MEDFileUMesh()
5801         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]"])
5802         mm2.setCoords(da1)
5803         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5804         mm2_0.setCoords(da1)
5805         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5806         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5807         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5808         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5809         mm2[0]=mm2_0
5810         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5811         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5812         #
5813         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5814         mm2_1.setCoords(da1)
5815         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5816         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5817         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5818         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5819         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5820         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5821         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5822         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5823         mm2[-1]=mm2_1
5824         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5825         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5826         for i in range(1,12):
5827             mm2.setFamilyId("G%d"%i,i+30)
5828         mm2.setFamilyId("H1",100)
5829         mm2.setFamilyId("FAMILLE_ZERO",0)
5830         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5831         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5832         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5833         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5834         #
5835         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5836         #######
5837         def CheckMesh(tester,mm):
5838             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]"])
5839             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5840             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])))
5841             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5842             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])))
5843             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5844             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5845             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5846             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5847             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5848             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)]
5849             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5850             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5851             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5852             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5853             pass
5854         CheckMesh(self,mm)
5855         ##
5856         fieldName="zeField"
5857         t1=(2.3,3,5)
5858         t2=(5.6,7,12)
5859         infoc=["dd [W]","eee [kA]"]
5860         ##
5861         fmts1=MEDFileFieldMultiTS()
5862         f1ts1=MEDFileField1TS()
5863         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5864         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5865         arr1.setInfoOnComponents(infoc)
5866         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5867         f1_1.checkConsistencyLight()
5868         f1ts1.setFieldNoProfileSBT(f1_1)
5869         #
5870         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5871         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5872         arr2.setInfoOnComponents(infoc)
5873         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5874         f1_2.checkConsistencyLight()
5875         f1ts1.setFieldNoProfileSBT(f1_2)
5876         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5877         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5878         arr3.setInfoOnComponents(infoc)
5879         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5880         f1_3.checkConsistencyLight()
5881         f1ts1.setFieldNoProfileSBT(f1_3)
5882         fmts1.pushBackTimeStep(f1ts1)
5883         #
5884         f1ts2=f1ts1.deepCopy()
5885         f1ts2.setTime(t2[1],t2[2],t2[0])
5886         f1ts2.getUndergroundDataArray()[:]+=2000
5887         fmts1.pushBackTimeStep(f1ts2)
5888         ### fmts2
5889         fmts2=MEDFileFieldMultiTS()
5890         f1ts3=MEDFileField1TS()
5891         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5892         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5893         arr4.setInfoOnComponents(infoc)
5894         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5895         f2_1.checkConsistencyLight()
5896         f1ts3.setFieldNoProfileSBT(f2_1)
5897         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5898         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5899         arr5.setInfoOnComponents(infoc)
5900         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5901         f2_2.checkConsistencyLight()
5902         f1ts3.setFieldNoProfileSBT(f2_2)
5903         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5904         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5905         arr6.setInfoOnComponents(infoc)
5906         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5907         f2_3.checkConsistencyLight()
5908         f1ts3.setFieldNoProfileSBT(f2_3)
5909         fmts2.pushBackTimeStep(f1ts3)
5910         #
5911         f1ts4=f1ts3.deepCopy()
5912         f1ts4.setTime(t2[1],t2[2],t2[0])
5913         f1ts4.getUndergroundDataArray()[:]+=2000
5914         fmts2.pushBackTimeStep(f1ts4)
5915         #
5916         mfd1=MEDFileData()
5917         mfd1.setMeshes(MEDFileMeshes())
5918         mfd1.getMeshes().pushMesh(mm1)
5919         mfd1.setFields(MEDFileFields())
5920         mfd1.getFields().pushField(fmts1)
5921         #
5922         mfd2=MEDFileData()
5923         mfd2.setMeshes(MEDFileMeshes())
5924         mfd2.getMeshes().pushMesh(mm2)
5925         mfd2.setFields(MEDFileFields())
5926         mfd2.getFields().pushField(fmts2)
5927         # ze Call !
5928         mfd=MEDFileData.Aggregate([mfd1,mfd2])
5929         def CheckMFD(tester,mfd):
5930             tester.assertEqual(len(mfd.getMeshes()),1)
5931             tester.assertEqual(len(mfd.getFields()),1)
5932             CheckMesh(self,mfd.getMeshes()[0])
5933             tester.assertEqual(len(mfd.getFields()[0]),2)
5934             zeF1=mfd.getFields()[0][0]
5935             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5936             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5937             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5938             ref.renumberCells(o2n)
5939             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5940             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5941             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5942             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5943             ref.renumberCells(o2n)
5944             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5945             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5946             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5947             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5948             ref.renumberCells(o2n)
5949             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5950             #
5951             zeF2=mfd.getFields()[0][1]
5952             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5953             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5954             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5955             ref.renumberCells(o2n)
5956             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5957             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5958             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5959             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5960             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5961             ref.renumberCells(o2n)
5962             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5963             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5964             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5965             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5966             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5967             ref.renumberCells(o2n)
5968             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5969             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5970         CheckMFD(self,mfd)
5971         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5972         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5973         CheckMFD(self,mfd)
5974         pass
5975
5976     @WriteInTmpDir
5977     def testAggregateWithGroups(self):
5978         """ Testing MEDFileUMesh::Aggretate when groups are present. """
5979         def generate(grp_name, offset):
5980             coo = DataArrayDouble([0., 1., 2.])
5981             coo += offset
5982             m = MEDCouplingCMesh("toto")
5983             m.setCoords(coo, coo)
5984             m = m.buildUnstructured()
5985             mu = MEDFileUMesh.New()
5986             mu.setMeshAtLevel(0, m)
5987             g = DataArrayInt([0])
5988             g.setName(grp_name)
5989             g2 = DataArrayInt([1])
5990             g2.setName("common")  # make a common group for all meshes being merged
5991             mu.setGroupsAtLevel(0, [g, g2])
5992             return mu
5993
5994         m1 = generate("A", 0.)
5995         m2 = generate("B", 2.)
5996         mm = MEDFileUMesh.Aggregate([m1,m2])
5997
5998         self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
5999         self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6000         refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6001         self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6002         self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6003         self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6004         self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6005         self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6006         self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6007
6008         pass
6009
6010     @WriteInTmpDir
6011     def testExtrudedMesh1(self):
6012         fname="Pyfile107.med"
6013         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6014         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6015         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6016         mm=MEDFileUMesh(ex)
6017         mm.write(fname,2)
6018         ex2=mm.convertToExtrudedMesh()
6019         mm2=MEDFileMesh.New(fname)
6020         ex3=mm2.convertToExtrudedMesh()
6021         self.assertTrue(ex.isEqual(ex2,1e-12))
6022         self.assertTrue(ex.isEqual(ex3,1e-12))
6023         pass
6024
6025     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6026     @WriteInTmpDir
6027     def testWriteInto30(self):
6028         fname="Pyfile108.med"
6029         fname2="Pyfile109.med"
6030         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6031         mm=MEDFileUMesh() ; mm[0]=m
6032         mm.setFamilyId("FAMILLE_ZERO",0)
6033         #
6034         mm.write33(fname,2)
6035         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6036         mm2=MEDFileUMesh(fname)
6037         self.assertTrue(mm.isEqual(mm2,1e-12))
6038         #
6039         mm.write(fname2,2)
6040         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
6041         pass
6042
6043     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6044     @WriteInTmpDir
6045     def testPickelizationOfMEDFileObjects1(self):
6046         fname="Pyfile110.med"
6047         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)
6048         m0=MEDCouplingUMesh("Mesh",2)
6049         m0.allocateCells(5)
6050         m0.insertNextCell(NORM_TRI3,[1,4,2])
6051         m0.insertNextCell(NORM_TRI3,[4,5,2])
6052         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6053         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6054         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6055         m0.finishInsertingCells()
6056         m0.setCoords(coo)
6057         m1=MEDCouplingUMesh(m0.getName(),1)
6058         m1.allocateCells(9)
6059         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6060         for i in range(9):
6061             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6062             pass
6063         m1.finishInsertingCells()
6064         m1.setCoords(coo)
6065         #
6066         m=MEDFileUMesh()
6067         m.setMeshAtLevel(0,m0)
6068         m.setMeshAtLevel(-1,m1)
6069         #
6070         dt=3 ; it=2 ; tim=4.5
6071         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6072         fieldNode0.setName("fieldNode0")
6073         fieldNode0.setTime(tim,dt,it)
6074         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6075         arr=DataArrayDouble([10,11,12,13,14])
6076         fieldNode0.setArray(arr)
6077         f0=MEDFileField1TS()
6078         f0.setFieldProfile(fieldNode0,m,0,pfl0)
6079         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6080         fieldNode1.setName("fieldNode1")
6081         fieldNode1.setTime(tim,dt,it)
6082         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6083         arr1=DataArrayDouble([20,21,22,23,24,25,26])
6084         fieldNode1.setArray(arr1)
6085         f1=MEDFileField1TS()
6086         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6087         mfd=MEDFileData()
6088         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6089         mfd.getMeshes().pushMesh(m)
6090         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6091         mfd.getFields().pushField(fmts)
6092         # first start gently
6093         d=mfd.serialize()
6094         mfd2=MEDFileData(d)
6095         self.assertEqual(len(mfd2.getMeshes()),1)
6096         self.assertEqual(len(mfd2.getFields()),1)
6097         self.assertEqual(len(mfd2.getFields()[0]),1)
6098         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6099         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6100         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6101         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6102         # OK now end of joke -> serialization of MEDFileData
6103         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6104         mfd3=pickle.loads(st)
6105         # check of object
6106         self.assertEqual(len(mfd3.getMeshes()),1)
6107         self.assertEqual(len(mfd3.getFields()),1)
6108         self.assertEqual(len(mfd3.getFields()[0]),1)
6109         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6110         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6111         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6112         # serialization of MEDFileFields
6113         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6114         fs4=pickle.loads(st)
6115         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6116         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6117         # serialization of MEDFileFieldMulitTS
6118         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6119         fmts5=pickle.loads(st)
6120         ff5=fmts5[0].field(mfd3.getMeshes()[0])
6121         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6122         # serialization of MEDFileField1TS
6123         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6124         f1ts6=pickle.loads(st)
6125         ff6=f1ts6.field(mfd3.getMeshes()[0])
6126         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6127         # serialization of MEDFileMeshes
6128         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6129         ms7=pickle.loads(st)
6130         self.assertEqual(len(ms7),1)
6131         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6132         pass
6133
6134     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6135     @WriteInTmpDir
6136     def testPickelizationOfMEDFileObjects2(self):
6137         # CMesh
6138         self.internalMEDMesh6() # generates MEDFileMesh5.med file
6139         mm=MEDFileMesh.New("MEDFileMesh5.med")
6140         self.assertTrue(isinstance(mm,MEDFileCMesh))
6141         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6142         mm2=pickle.loads(st)
6143         self.assertTrue(isinstance(mm2,MEDFileCMesh))
6144         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6145         # CurveLinear
6146         self.internalCurveLinearMesh1() # generates Pyfile55.med
6147         mm=MEDFileMesh.New("Pyfile55.med")
6148         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6149         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6150         mm3=pickle.loads(st)
6151         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6152         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6153         self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6154         # MEDFileIntFieldMultiTS
6155         fs4=MEDFileFields("Pyfile63.med")
6156         ms4=MEDFileMeshes("Pyfile63.med")
6157         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6158         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6159         fmts5=pickle.loads(st)
6160         self.assertEqual(len(fs4[0]),len(fmts5))
6161         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6162         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6163         # MEDFileIntField1TS
6164         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6165         f1ts6=pickle.loads(st)
6166         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6167         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6168         # MEDFileParameters
6169         self.internalParameters1()# generates Pyfile56.med
6170         params=MEDFileParameters("Pyfile56.med")
6171         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6172         params7=pickle.loads(st)
6173         self.assertEqual(len(params),len(params7))
6174         for i in range(len(params)):
6175             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6176             pass
6177         pass
6178
6179     @WriteInTmpDir
6180     def testGlobalNumOnNodes1(self):
6181         """Test global number on nodes here. Used by partitionners."""
6182         fname="Pyfile112.med"
6183         arr=DataArrayDouble(5) ; arr.iota()
6184         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6185         m.setName("mesh")
6186         mm=MEDFileUMesh()
6187         mm[0]=m
6188         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6189         d=DataArrayInt([7,8,9,2,0])
6190         dRef=d.deepCopy()
6191         mm.setGlobalNumFieldAtLevel(1,d)
6192         mm.checkConsistency()
6193         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6194         mm.checkConsistency()
6195         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6196         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6197         mm.write(fname,2)
6198         mm2=MEDFileMesh.New(fname)
6199         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6200         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6201         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6202         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6203         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6204         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6205         pass
6206
6207     @WriteInTmpDir
6208     def testPartialReadOfEntities1(self):
6209         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6210         fname="Pyfile113.med"
6211         arr=DataArrayDouble(5) ; arr.iota()
6212         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6213         m.setName("mesh")
6214         mm=MEDFileUMesh()
6215         mm[0]=m
6216         #
6217         fieldName="Field"
6218         ts1=(5.,1,2)
6219         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6220         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6221         f1.setTime(*ts1)
6222         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6223         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6224         f2.setTime(*ts1)
6225         f1ts=MEDFileField1TS()
6226         f1ts.setFieldNoProfileSBT(f1)
6227         f1ts.setFieldNoProfileSBT(f2)
6228         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6229         f1ts_2=f1ts.deepCopy()
6230         f1ts_2.getUndergroundDataArray()[:]+=2
6231         f1ts_2.setTime(3,4,6.)
6232         fmts=MEDFileFieldMultiTS()
6233         fmts.pushBackTimeStep(f1ts)
6234         fmts.pushBackTimeStep(f1ts_2)
6235         #
6236         mm.write(fname,2)
6237         fmts.write(fname,0)
6238         #
6239         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6240         mm=MEDFileMesh.New(fname)
6241         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)
6242         fs.loadArrays()
6243         self.assertEqual(len(fs),1)
6244         fmts=fs[0]
6245         self.assertEqual(len(fmts),2)
6246         ff0=fmts[0] ; ff1=fmts[1]
6247         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6248         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6249         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6250         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6251         pass
6252
6253     @WriteInTmpDir
6254     def testFloat32InMEDFileFieldStar1(self):
6255         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6256         fname="Pyfile114.med"
6257         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6258         f1=f1.convertToFloatField()
6259         m1=f1.getMesh()
6260         mm1=MEDFileUMesh.New()
6261         mm1.setCoords(m1.getCoords())
6262         mm1.setMeshAtLevel(0,m1)
6263         mm1.setName(m1.getName())
6264         mm1.write(fname,2)
6265         ff1=MEDFileFloatField1TS()
6266         ff1.setFieldNoProfileSBT(f1)
6267         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6268         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6269         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6270         ff1.write(fname,0)
6271         a,b=ff1.getUndergroundDataArrayExt()
6272         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6273         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6274         ff2=MEDFileAnyTypeField1TS.New(fname)
6275         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6276         self.assertEqual(ff2.getTime(),[0,1,2.0])
6277         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6278         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6279         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6280         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6281         ff2.setTime(1,2,3.)
6282         c=ff2.getUndergroundDataArray() ; c*=2
6283         ff2.write(fname,0) # 2 time steps in
6284         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6285         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6286         self.assertEqual(len(ffs1),2)
6287         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6288         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6289         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6290         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6291         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6292         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6293         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6294         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6295         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6296         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6297         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6298         for it in ffs1:
6299             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6300             bc+=a.getArray()
6301             pass
6302         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6303         nf1=MEDCouplingFieldFloat(ON_NODES)
6304         nf1.setTime(9.,10,-1)
6305         nf1.setMesh(f1.getMesh())
6306         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6307         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6308         nff1=MEDFileFloatField1TS.New()
6309         nff1.setFieldNoProfileSBT(nf1)
6310         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6311         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6312         nff1.write(fname,0)
6313         #
6314         nf2=MEDCouplingFieldFloat(ON_NODES)
6315         nf2.setTime(19.,20,-11)
6316         nf2.setMesh(f1.getMesh())
6317         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6318         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6319         nff2=MEDFileFloatField1TS.New()
6320         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6321         nff2.setFieldProfile(nf2,mm1,0,npfl)
6322         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6323         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6324         self.assertTrue(b.isEqual(npfl))
6325         self.assertTrue(a.isEqual(narr2,1e-7))
6326         nff2.write(fname,0)
6327         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6328         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6329         self.assertTrue(b.isEqual(npfl))
6330         self.assertTrue(a.isEqual(narr2,1e-7))
6331         #
6332         nf3=MEDCouplingFieldDouble(ON_NODES)
6333         nf3.setName("VectorFieldOnNodesDouble")
6334         nf3.setTime(29.,30,-21)
6335         nf3.setMesh(f1.getMesh())
6336         nf3.setArray(f1.getMesh().getCoords())
6337         nff3=MEDFileField1TS.New()
6338         nff3.setFieldNoProfileSBT(nf3)
6339         nff3.write(fname,0)
6340         fs=MEDFileFields(fname)
6341         self.assertEqual(len(fs),4)
6342         ffs=[it for it in fs]
6343         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6344         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6345         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6346         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6347         #
6348         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6349         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6350         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6351         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6352         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6353         #
6354         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6355         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6356         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6357         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6358         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6359         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6360         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6361         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6362         #
6363         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6364         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6365         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6366         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6367         pass
6368
6369     @WriteInTmpDir
6370     def testPenta18_1(self):
6371         """EDF8478 : Test of read/write of penta18"""
6372         fname="Pyfile115.med"
6373         arr=DataArrayDouble([
6374             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6375             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6376             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6377             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6378             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6379             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6380         m=MEDCouplingUMesh("mesh",3)
6381         m.setCoords(arr)
6382         m.allocateCells(1)
6383         m.insertNextCell(NORM_PENTA18,list(range(18)))
6384         m.checkConsistencyLight()
6385         #
6386         f=MEDCouplingFieldDouble(ON_NODES)
6387         f.setMesh(m)
6388         f.setName("FieldOnPenta18")
6389         f.setArray(DataArrayDouble(list(range(18))))
6390         f.checkConsistencyLight()
6391         #
6392         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6393         #
6394         f2=MEDCouplingFieldDouble(ON_NODES)
6395         f2.setMesh(m)
6396         f2.setName("FieldOnPenta18Sub")
6397         f2.setArray(DataArrayDouble(list(range(18))))
6398         f2.checkConsistencyLight()
6399         WriteField(fname,f2,True)
6400         f3=ReadField(fname)
6401         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6402         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6403         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6404         pass
6405
6406     @WriteInTmpDir
6407     def testFieldsLinearToQuadratic(self):
6408         fname="Pyfile117.med"
6409         arr=DataArrayDouble([0,1])
6410         m=MEDCouplingCMesh();
6411         m.setCoords(arr,arr,arr)
6412         m=m.buildUnstructured()
6413         m2=m.deepCopy()
6414         m2.translate([2,0,0])
6415         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6416         m3.setName("mesh")
6417         mm=MEDFileUMesh()
6418         mm[0]=m3
6419         mmq=mm.linearToQuadratic(0)
6420         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6421         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6422         #
6423         f=MEDCouplingFieldDouble(ON_NODES)
6424         f.setName("field")
6425         f.setMesh(m3)
6426         f.setTime(3.,1,2)
6427         arr=DataArrayDouble(m3.getNumberOfNodes())
6428         arr.iota()
6429         f.setArray(arr)
6430         f1ts=MEDFileField1TS()
6431         f1ts.setFieldNoProfileSBT(f)
6432         fmts=MEDFileFieldMultiTS()
6433         fmts.pushBackTimeStep(f1ts)
6434         f1ts_2=f1ts.deepCopy()
6435         f1ts_2.setTime(3,4,5.)
6436         f1ts_2.getUndergroundDataArray()[:]*=2.
6437         fmts.pushBackTimeStep(f1ts_2)
6438         fs=MEDFileFields()
6439         fs.pushField(fmts)
6440         fs2=fs.linearToQuadratic(mms,mmsq)
6441         self.myTester1(fs2,mmsq[0])
6442         # A small Write/Read and test again
6443         mms.write(fname,2) ; fs.write(fname,0)
6444         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6445         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6446         fs2=fs.linearToQuadratic(mms,mmqs)
6447         self.myTester1(fs2,mmqs[0])
6448         pass
6449
6450     def myTester1(self,fs2,mmq):
6451         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)
6452         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])
6453         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])
6454         fToTest=fs2[0][0].field(mmq)
6455         self.assertEqual(fToTest.getTime(),[3.,1,2])
6456         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6457         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6458         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6459         self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6460         # testing 2nd timestep
6461         fToTest=fs2[0][1].field(mmq)
6462         self.assertEqual(fToTest.getTime(),[5.,3,4])
6463         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6464         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6465         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6466         self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6467         pass
6468
6469     @WriteInTmpDir
6470     def testFieldsLinearToQuadratic2(self):
6471         """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6472         GeneratePyfile18(self)
6473         fname="Pyfile118.med"
6474         arr=DataArrayDouble([0,1])
6475         m=MEDCouplingCMesh();
6476         m.setCoords(arr,arr,arr)
6477         m=m.buildUnstructured()
6478         m2=m.deepCopy()
6479         m2.translate([2,0,0])
6480         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6481         m3.setName("mesh")
6482         # add a point for fun
6483         m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6484         #
6485         mm=MEDFileUMesh()
6486         mm[0]=m3
6487         mmq=mm.linearToQuadratic(0)
6488         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6489         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6490         #
6491         f=MEDCouplingFieldDouble(ON_NODES)
6492         f.setName("field")
6493         f.setMesh(m3)
6494         f.setTime(3.,1,2)
6495         arr=DataArrayDouble(8) ; arr.iota()
6496         arr.iota()
6497         f.setArray(arr)
6498         f1ts=MEDFileField1TS()
6499         pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6500         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6501         f1ts_2=f1ts.deepCopy()
6502         f1ts_2.setTime(3,4,5.)
6503         f1ts_2.getUndergroundDataArray()[:]*=4.
6504         fmts=MEDFileFieldMultiTS()
6505         fmts.pushBackTimeStep(f1ts)
6506         fmts.pushBackTimeStep(f1ts_2)
6507         fs=MEDFileFields()
6508         fs.pushField(fmts)
6509         fs2=fs.linearToQuadratic(mms,mmsq)
6510         mms.write(fname,2) ; fs.write(fname,0)
6511         #
6512         self.myTester2(fs2,mmq)
6513         # Read/write
6514         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6515         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6516         fs2=fs.linearToQuadratic(mms,mmqs)
6517         self.myTester2(fs2,mmq)
6518         ## More vicious add single node 16
6519         mm=MEDFileUMesh()
6520         mm[0]=m3
6521         mmq=mm.linearToQuadratic(0)
6522         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6523         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6524         #
6525         f=MEDCouplingFieldDouble(ON_NODES)
6526         f.setName("field")
6527         f.setMesh(m3)
6528         f.setTime(3.,1,2)
6529         arr=DataArrayDouble(9) ; arr.iota()
6530         arr.iota()
6531         f.setArray(arr)
6532         f1ts=MEDFileField1TS()
6533         pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6534         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6535         fmts=MEDFileFieldMultiTS()
6536         fmts.pushBackTimeStep(f1ts)
6537         fs=MEDFileFields()
6538         fs.pushField(fmts)
6539         fs2=fs.linearToQuadratic(mms,mmsq)
6540         #
6541         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")
6542         f1tsToTest=fs2[0][0]
6543         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])
6544         assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6545         assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6546         assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6547         pass
6548
6549     def myTester2(self,fs2,mmq):
6550         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")
6551         f1tsToTest=fs2[0][0]
6552         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])
6553         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6554         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6555         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6556         fToTest=fs2[0][0].field(mmq)
6557         self.assertEqual(fToTest.getTime(),[3.,1,2])
6558         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6559         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])))
6560         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))
6561         self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6562         # 2nd Time step
6563         f1tsToTest=fs2[0][1]
6564         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6565         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6566         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6567         fToTest=fs2[0][1].field(mmq)
6568         self.assertEqual(fToTest.getTime(),[5.,3,4])
6569         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6570         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])))
6571         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))
6572         self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6573
6574         pass
6575
6576     @WriteInTmpDir
6577     def testSetFieldProfileFlatly1(self):
6578         """ 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
6579         a profile."""
6580         arr=DataArrayDouble(10) ; arr.iota()
6581         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6582         m=m.buildUnstructured()
6583         m2=m.deepCopy()
6584         m2.simplexize(0)
6585         m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6586         m.setName("mesh")
6587         mm=MEDFileUMesh()
6588         mm[0]=m
6589         f=MEDCouplingFieldDouble(ON_CELLS)
6590         f.setMesh(m)
6591         arr=DataArrayDouble(m.getNumberOfCells())
6592         arr.iota()
6593         f.setArray(arr)
6594         f.setName("field")
6595         pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6596         #
6597         refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6598         refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6599         #
6600         f1ts=MEDFileField1TS()
6601         f1ts.setFieldProfile(f,mm,0,pfl)
6602         self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6603         self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6604         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6605         #
6606         f1ts=MEDFileField1TS()
6607         f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6608         self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6609         self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6610         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6611         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6612         self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6613         pass
6614
6615     @WriteInTmpDir
6616     def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6617         """ Here multi level groups are created"""
6618         arr=DataArrayDouble(11) ; arr.iota()
6619         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6620         m=m.buildUnstructured()
6621         m.setName("mesh")
6622         m1=m.buildDescendingConnectivity()[0]
6623         mm=MEDFileUMesh()
6624         mm[0]=m ; mm[-1]=m1
6625         ################
6626         grpName="grp0"
6627         grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6628         grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6629         grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6630         grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6631         ################ ajouter un groupe sur plusieurs niveau
6632         mm.addGroup(0,grp1)
6633         mm.addGroup(-1,grp2)
6634         mm.addGroup(0,grp0_0)
6635         mm.addGroup(-1,grp0_1)
6636         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6637         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6638         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6639         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6640         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6641         self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6642         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6643         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6644         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6645         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6646         mm.removeGroupAtLevel(0,grpName)
6647         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6648         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6649         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6650         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6651         mm.removeGroupAtLevel(-1,grpName)
6652         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6653         self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6654         mm.addGroup(-1,grp0_1)
6655         mm.addGroup(0,grp0_0)
6656         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6657         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6658         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6659         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6660         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6661         pass
6662
6663     @WriteInTmpDir
6664     def testYutaka(self):
6665         """ 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...
6666         Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6667         mn="mesh"
6668         m=MEDCouplingCMesh()
6669         arr=DataArrayDouble(4) ; arr.iota()
6670         m.setCoords(arr,arr,arr)
6671         m=m.buildUnstructured()
6672         m.setName(mn)
6673         #
6674         m=m.buildUnstructured()
6675         m1=m.buildDescendingConnectivity()[0]
6676         #
6677         mm=MEDFileUMesh()
6678         mm[0]=m
6679         mm[-1]=m1
6680         #
6681         grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6682         mm.addGroup(0,grp0)
6683         grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6684         mm.addGroup(0,grp1)
6685         grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6686         mm.addGroup(0,grp2)
6687         grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6688         mm.addGroup(-1,grp3)
6689         self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6690         grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6691         mm.addNodeGroup(grp4)
6692         mm.rearrangeFamilies()
6693         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6694         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6695         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6696         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6697         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6698
6699         for grp in [grp0,grp1,grp2,grp3,grp4]:
6700             self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6701             pass
6702         pass
6703
6704     @WriteInTmpDir
6705     def testContxtMger1TS(self):
6706         fname="Pyfile119.med"
6707         coo=DataArrayDouble(1000) ; coo.iota()
6708         m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6709         m.setName("mesh")
6710         WriteMesh(fname,m,True)
6711         f=MEDCouplingFieldDouble(ON_CELLS)
6712         f.setMesh(m)
6713         f.setName("Field")
6714         arr=DataArrayDouble(m.getNumberOfCells())
6715         f.setArray(arr)
6716         f.checkConsistencyLight()
6717         for i in range(10):
6718             arr[:]=float(i+1)
6719             f.setTime(float(i),i,0)
6720             WriteFieldUsingAlreadyWrittenMesh(fname,f)
6721             pass
6722         #
6723         mm=MEDFileMesh.New(fname)
6724         fmts=MEDFileFieldMultiTS(fname,False)
6725         refSize=fmts.getHeapMemorySize()
6726         for f1ts in fmts:
6727             with f1ts:
6728                 f=f1ts.field(mm)
6729                 pass
6730             pass
6731         self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6732         pass
6733
6734     def testZipFamilies1(self):
6735         """
6736         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6737         """
6738         mname="mesh"
6739         arr=DataArrayDouble(10) ; arr.iota()
6740         m=MEDCouplingCMesh()
6741         m.setCoords(arr,arr)
6742         m=m.buildUnstructured()
6743         m.setName(mname)
6744         #
6745         mm=MEDFileUMesh()
6746         mm[0]=m
6747         for i in range(m.getNumberOfCells()):
6748             d = DataArrayInt([i])
6749             d.setName("grp%d"%i)
6750             mm.addGroup(0,d)
6751             pass
6752
6753         grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6754         grp_all.setName("grp_all")
6755         mm.addGroup(0,grp_all)
6756         for i in range(m.getNumberOfCells()):
6757             mm.removeGroup("grp{}".format(i))
6758             pass
6759         #
6760         mm.zipFamilies() # the method to test
6761         #
6762         self.assertEqual(mm.getGroupsNames(),("grp_all",))
6763         self.assertEqual(len(mm.getFamiliesNames()),1)
6764         self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6765         pass
6766
6767     def testZipFamilies2(self):
6768         """
6769         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6770         """
6771         mname="mesh"
6772         arr=DataArrayDouble(21) ; arr.iota()
6773         m=MEDCouplingCMesh()
6774         m.setCoords(arr)
6775         m=m.buildUnstructured()
6776         m.setName(mname)
6777         #
6778         mm=MEDFileUMesh()
6779         mm[0]=m
6780         # 1 and 3 to be merged
6781         # 2 and 5 to be merged
6782         mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6783         for i in range(1,9):
6784             mm.setFamilyId("Fam_{}".format(i),-i)
6785         mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6786         mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6787         mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6788         #
6789         grp0=DataArrayInt([0,1,3,8,10,19])
6790         grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6791         grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6792         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6793         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6794         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6795         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6796         mm.zipFamilies()
6797         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
6798         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6799         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
6800         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
6801         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
6802         pass
6803
6804     def testMeshConvertFromMEDFileGeoType(self):
6805         self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
6806
6807     @WriteInTmpDir
6808     def testFieldInt64_0(self):
6809         """
6810         Small basic test with I/O of field in int64.
6811         """
6812         fname="Pyfile120.med"
6813         arr = DataArrayDouble([0,1])
6814         m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
6815         f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
6816         v = 1234567890123456
6817         f.setArray(DataArrayInt64([v]))
6818         f.setMesh(m)
6819         mm = MEDFileUMesh()
6820         mm[0] = m
6821         f1ts = MEDFileInt64Field1TS()
6822         f1ts.setFieldNoProfileSBT(f)
6823         fmts = MEDFileInt64FieldMultiTS()
6824         fmts.pushBackTimeStep(f1ts)
6825         fs = MEDFileFields()
6826         fs.pushField(fmts)
6827         mm.write(fname,2)
6828         fs.write(fname,0)
6829         #
6830         mm = MEDFileMesh.New(fname)
6831         fs = MEDFileFields(fname)
6832         f = fs[0][0].field(mm)
6833         self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
6834         self.assertEqual( f.getArray().getIJ(0,0) , v )
6835
6836     @WriteInTmpDir
6837     def testNonRegUMeshSubParts(self):
6838         """
6839         Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
6840         """
6841         fname = "Pyfile121.med"
6842         m0 = MEDCouplingUMesh("mesh",1)
6843         coords = DataArrayDouble([(0,0),(1,0),(2,0)])
6844         m0.setCoords(coords)
6845         m0.allocateCells()
6846         m0.insertNextCell(NORM_SEG2,[1,2])
6847         mm = MEDFileUMesh()
6848         mm[0] = m0
6849         m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
6850         m1.setCoords(m0.getCoords())
6851         m1.setNodalConnectivity(DataArrayInt([1,2]))
6852         m1.setName(m0.getName())
6853         mm[-1] = m1
6854         fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
6855         mm.zipCoords() # <- This call changes the coords and connectivity
6856         mm.write(fname,2)
6857         #
6858         mm = MEDFileMesh.New(fname)
6859         mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
6860         self.assertTrue( m0.isEqual(mm[0],1e-12) )
6861         pass
6862
6863     pass
6864
6865 if __name__ == "__main__":
6866     unittest.main()