Salome HOME
a9b2dff97851e6e5488df9f3fcb5bab4431957fd
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2022  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Author : Anthony Geay (EDF R&D)
21
22 from MEDLoader import *
23 import unittest
24 import platform
25 from math import pi,e,sqrt
26 from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
27 from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
28 from distutils.version import LooseVersion
29
30 import sys
31 if sys.version_info.major < 3:
32     import cPickle as pickle
33 else:
34     import pickle
35
36 class StdOutRedirect(object):
37     def __init__(self,fileName):
38         import os,sys
39         sys.stderr.flush()
40         self.stdoutOld=os.dup(2)
41         self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
42         fd2=os.dup2(self.fdOfSinkFile,2)
43         self.origPyVal=sys.stderr
44         class FlushFile(object):
45             def __init__(self,f):
46                 self.f=f
47             def write(self,st):
48                 self.f.write(st)
49                 self.f.flush()
50             def flush(self):
51                 return self.f.flush()
52             def isatty(self):
53                 return self.f.isatty()
54             def close(self):
55                 os.fsync(self.f)
56                 self.f.close();
57         sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
58     def __del__(self):
59         import os,sys
60         sys.stderr.close()
61         sys.stderr=self.origPyVal
62         os.fsync(2)
63         os.dup2(self.stdoutOld,2)
64         os.close(self.stdoutOld)
65
66 class MEDLoaderTest3(unittest.TestCase):
67     @WriteInTmpDir
68     def testMEDMesh1(self):
69         GeneratePyfile18(self)
70         fileName="Pyfile18.med"
71         mname="ExampleOfMultiDimW"
72         medmesh=MEDFileMesh.New(fileName,mname)
73         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
74         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
75         m1_0=medmesh.getLevel0Mesh(True)
76         m1_1=ReadUMeshFromFile(fileName,mname,0)
77         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
78         m2_0=medmesh.getLevelM1Mesh(True)
79         m2_1=ReadUMeshFromFile(fileName,mname,-1)
80         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
81         pass
82
83     @WriteInTmpDir
84     def testMEDMesh2(self):
85         GeneratePyfile10(self)
86         fileName="Pyfile10.med"
87         mname="3DToto"
88         outFileName="MEDFileMesh1.med"
89         medmesh=MEDFileUMesh.New(fileName,mname)
90         self.assertEqual((0,),medmesh.getNonEmptyLevels())
91         m1_0=medmesh.getLevel0Mesh(True)
92         m1_1=ReadUMeshFromFile(fileName,mname,0)
93         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
94         g1_0=medmesh.getGroup(0,"mesh2",True)
95         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
96         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
97         g1_0=medmesh.getGroup(0,"mesh3",True)
98         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
99         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
100         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
101         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
102         g1_1.setName(g1_0.getName())
103         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
104         g1_0=medmesh.getFamily(0,"Family_-3",True)
105         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
106         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
108         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
109         g1_1.setName(g1_0.getName())
110         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
111         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
112         medmesh.write(outFileName,2);
113         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
114         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
115         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
116         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
117         famn=medmesh.getFamilyNameGivenId(0)
118         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
119         #without renum
120         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
121         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
122         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
123         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
124         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
125         pass
126
127     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
128     @WriteInTmpDir
129     def testMEDMesh3(self):
130         outFileName="MEDFileMesh3.med"
131         c=DataArrayDouble.New()
132         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
133         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
134         c.setValues(coords,9,2)
135         m=MEDCouplingUMesh.New();
136         m.setMeshDimension(2);
137         m.allocateCells(5);
138         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
139         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
140         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
141         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
142         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
143         m.finishInsertingCells();
144         m.setCoords(c)
145         m.checkConsistencyLight()
146         m1=MEDCouplingUMesh.New();
147         m1.setMeshDimension(1);
148         m1.allocateCells(3);
149         m1.insertNextCell(NORM_SEG2,2,[1,4])
150         m1.insertNextCell(NORM_SEG2,2,[3,6])
151         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
152         m1.finishInsertingCells();
153         m1.setCoords(c)
154         m1.checkConsistencyLight()
155         m2=MEDCouplingUMesh.New();
156         m2.setMeshDimension(0);
157         m2.allocateCells(4);
158         m2.insertNextCell(NORM_POINT1,1,[1])
159         m2.insertNextCell(NORM_POINT1,1,[3])
160         m2.insertNextCell(NORM_POINT1,1,[2])
161         m2.insertNextCell(NORM_POINT1,1,[6])
162         m2.finishInsertingCells();
163         m2.setCoords(c)
164         m2.checkConsistencyLight()
165         #
166         mm=MEDFileUMesh.New()
167         self.assertTrue(mm.getUnivNameWrStatus())
168         mm.setName("MyFirstMEDCouplingMEDmesh")
169         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
170         mm.setCoords(c)
171         mm.setMeshAtLevel(-1,m1);
172         mm.setMeshAtLevel(0,m);
173         mm.setMeshAtLevel(-2,m2);
174         # playing with groups
175         g1_2=DataArrayInt.New()
176         g1_2.setValues([1,3],2,1)
177         g1_2.setName("G1")
178         g2_2=DataArrayInt.New()
179         g2_2.setValues([1,2,3],3,1)
180         g2_2.setName("G2")
181         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
182         g1_1=DataArrayInt.New()
183         g1_1.setValues([0,1,2],3,1)
184         g1_1.setName("G1")
185         g2_1=DataArrayInt.New()
186         g2_1.setValues([0,2],2,1)
187         g2_1.setName("G2")
188         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
189         g1_N=DataArrayInt.New()
190         g1_N.setValues(list(range(8)),8,1)
191         g1_N.setName("G1")
192         g2_N=DataArrayInt.New()
193         g2_N.setValues(list(range(9)),9,1)
194         g2_N.setName("G2")
195         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
196         mm.createGroupOnAll(0,"GrpOnAllCell")
197         # check content of mm
198         t=mm.getGroupArr(0,"G1",False)
199         self.assertTrue(g1_2.isEqual(t));
200         t=mm.getGroupArr(0,"G2",False)
201         self.assertTrue(g2_2.isEqual(t));
202         t=mm.getGroupArr(-1,"G1",False)
203         self.assertTrue(g1_1.isEqual(t));
204         t=mm.getGroupArr(-1,"G2",False)
205         self.assertTrue(g2_1.isEqual(t));
206         t=mm.getGroupArr(1,"G1",False)
207         self.assertTrue(g1_N.isEqual(t));
208         t=mm.getGroupArr(1,"G2",False)
209         self.assertTrue(g2_N.isEqual(t));
210         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
211         t=mm.getGroupArr(0,"GrpOnAllCell")
212         self.assertTrue(t.getValues()==list(range(5)))
213         #
214         mmCpy=mm.deepCopy()
215         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
216         mmCpy.write(outFileName,2);
217         #
218         mm=MEDFileMesh.New(outFileName)
219         #
220         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
221         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
222         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
223         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
224         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
225         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
226         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
227         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
228         self.assertEqual(3,len(lmm))
229         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
230         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
231         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
232         #
233         self.assertTrue(mm.getUnivNameWrStatus())
234         self.assertTrue(isinstance(mm.getUnivName(),str))
235         self.assertTrue(len(mm.getUnivName())!=0)
236         mbis=mm.getMeshAtLevel(0)
237         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
238         self.assertTrue(m.isEqual(mbis,1e-12));
239         #
240         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
241         pass
242
243     # this test is the testMEDMesh3 except that permutation is dealed here
244     @WriteInTmpDir
245     def testMEDMesh4(self):
246         outFileName="MEDFileMesh4.med"
247         c=DataArrayDouble.New()
248         coords=[-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ];
249         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
250         c.setValues(coords,9,2)
251         c.setInfoOnComponent(0,"abcdef [km]")
252         c.setInfoOnComponent(1,"ghij [MW]")
253         m=MEDCouplingUMesh.New();
254         m.setMeshDimension(2);
255         m.allocateCells(5);
256         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
257         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
258         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
259         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
260         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
261         m.finishInsertingCells();
262         m.setCoords(c)
263         m.checkConsistencyLight()
264         m1=MEDCouplingUMesh.New();
265         m1.setMeshDimension(1);
266         m1.allocateCells(3);
267         m1.insertNextCell(NORM_SEG2,2,[1,4])
268         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
269         m1.insertNextCell(NORM_SEG2,2,[3,6])
270         m1.finishInsertingCells();
271         m1.setCoords(c)
272         m1.checkConsistencyLight()
273         m2=MEDCouplingUMesh.New();
274         m2.setMeshDimension(0);
275         m2.allocateCells(4);
276         m2.insertNextCell(NORM_POINT1,1,[1])
277         m2.insertNextCell(NORM_POINT1,1,[3])
278         m2.insertNextCell(NORM_POINT1,1,[2])
279         m2.insertNextCell(NORM_POINT1,1,[6])
280         m2.finishInsertingCells();
281         m2.setCoords(c)
282         m2.checkConsistencyLight()
283         #
284         mm=MEDFileUMesh.New()
285         mm.setName("My2ndMEDCouplingMEDmesh")
286         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
287         mm.setCoords(c)
288         renumNode=DataArrayInt.New()
289         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
290         mm.setRenumFieldArr(1,renumNode)
291         mm.computeRevNum()
292         mm.setMeshAtLevel(-1,m1,True);
293         mm.setMeshAtLevel(0,m,True);
294         mm.setMeshAtLevel(-2,m2,True);
295         mm.removeMeshAtLevel(-2)
296         mm.setMeshAtLevel(-2,m2,True);
297         # playing with groups
298         g1_2=DataArrayInt.New()
299         g1_2.setValues([2,3],2,1)
300         g1_2.setName("G1")
301         g2_2=DataArrayInt.New()
302         g2_2.setValues([2,0,3],3,1)
303         g2_2.setName("G2")
304         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
305         g1_1=DataArrayInt.New()
306         g1_1.setValues([0,2,1],3,1)
307         g1_1.setName("G1")
308         g2_1=DataArrayInt.New()
309         g2_1.setValues([0,2],2,1)
310         g2_1.setName("G2")
311         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
312         g1_N=DataArrayInt.New()
313         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
314         g1_N.setName("G1")
315         g2_N=DataArrayInt.New()
316         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
317         g2_N.setName("G2")
318         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
319         # check content of mm
320         t=mm.getGroupArr(0,"G1",True)
321         self.assertTrue(g1_2.isEqual(t));
322         t=mm.getGroupArr(0,"G2",True)
323         self.assertTrue(g2_2.isEqual(t));
324         t=mm.getGroupArr(-1,"G1",True)
325         self.assertTrue(g1_1.isEqual(t));
326         t=mm.getGroupArr(-1,"G2",True)
327         self.assertTrue(g2_1.isEqual(t));
328         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
329         #
330         mm.write(outFileName,2);
331         mm2=MEDFileMesh.New(outFileName)
332         res=mm.isEqual(mm2,1e-12)
333         self.assertTrue(res[0])
334         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
335         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
336         mm2.keepFamIdsOnlyOnLevs([3],[-1])
337         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
338             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
339             pass
340         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
341         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
342         #
343         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
344         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
345         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
346         self.assertTrue(not mm2.existsFamily("Family_-8"))
347         mm2.createGroupOnAll(-1,"GrpOnAllFace")
348         self.assertTrue(mm2.existsFamily("Family_-8"))
349         self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
350         pass
351
352     #testing persistence of retrieved arrays
353     @WriteInTmpDir
354     def testMEDMesh5(self):
355         GeneratePyfile18(self)
356         fileName="Pyfile18.med"
357         mname="ExampleOfMultiDimW"
358         medmesh=MEDFileUMesh.New(fileName,mname)
359         m1_0=medmesh.getLevel0Mesh(True)
360         da1=medmesh.getFamilyFieldAtLevel(0)
361         del medmesh
362         self.assertEqual(20,m1_0.getNumberOfCells())
363         self.assertEqual(20,da1.getNumberOfTuples())
364         pass
365
366     def internalMEDMesh6(self):
367         outFileName="MEDFileMesh5.med"
368         m=MEDFileCMesh.New()
369         m.setTime(-1,-1,2.3)
370         m1=MEDCouplingCMesh.New();
371         da=DataArrayDouble.New()
372         da.setValues([0.,1.,2.],3,1)
373         da.setInfoOnComponent(0,"XX [mm]")
374         m1.setCoordsAt(0,da)
375         da=DataArrayDouble.New()
376         da.setValues([0.,1.2],2,1)
377         da.setInfoOnComponent(0,"YY [km]")
378         m1.setCoordsAt(1,da)
379         da=DataArrayDouble.New()
380         da.setValues([0.,1.3],2,1)
381         da.setInfoOnComponent(0,"ZZ [um]")
382         m1.setCoordsAt(2,da)
383         m.setMesh(m1)
384         self.assertTrue(m[0].isEqual(m1,1e-12))
385         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
386         m.setName("myFirstCartMesh")
387         m.setDescription("mmmmpppppppp")
388         m.setTimeValue(2.3)
389         m.setTimeUnit("ms")
390         da=DataArrayInt.New()
391         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
392         m.setFamilyFieldArr(1,da)
393         m.setFamilyId("family1",1)
394         da=m.getFamilyArr(1,"family1")
395         expected1=[2,4,9]
396         self.assertEqual(expected1,da.getValues())
397         self.assertTrue(m.getUnivNameWrStatus())
398         m.write(outFileName,2);
399         mm=MEDFileMesh.New(outFileName)
400         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
401         self.assertTrue(isinstance(mm,MEDFileCMesh))
402         self.assertTrue(isinstance(mm.getUnivName(),str))
403         self.assertTrue(len(mm.getUnivName())!=0)
404         self.assertTrue(m.isEqual(mm,1e-12)[0])
405         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
406         m2=mm.getMesh()
407         tt=m.getTime()
408         m1.setTime(tt[2],tt[0],tt[1])
409         m1.setName(m.getName())
410         m1.setTimeUnit(m.getTimeUnit())
411         m1.setDescription(m.getDescription())
412         self.assertTrue(m2.isEqual(m1,1e-12));
413
414     @WriteInTmpDir
415     def testMEDMesh6(self):
416         self.internalMEDMesh6()
417         pass
418
419     @WriteInTmpDir
420     def testMEDMesh7(self):
421         fileName="Pyfile24.med"
422         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
423         m=MEDFileUMesh.New()
424         m.setCoords(m2.getCoords())
425         m.setMeshAtLevel(0,m2)
426         m.setMeshAtLevel(-1,m1)
427         m.setMeshAtLevel(-2,m0)
428         m.setFamilyFieldArr(0,f2)
429         m.setFamilyFieldArr(-1,f1)
430         m.setFamilyFieldArr(-2,f0)
431         m.setFamilyFieldArr(1,p)
432         m.setRenumFieldArr(0,n2)
433         m.setRenumFieldArr(-1,n1)
434         m.setRenumFieldArr(-2,n0)
435         nbOfFams=len(fns)
436         for i in range(nbOfFams):
437             m.addFamily(fns[i],fids[i])
438             pass
439         nbOfGrps=len(grpns)
440         for i in range(nbOfGrps):
441             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
442             pass
443         m.setName(m2.getName())
444         m.setDescription(m2.getDescription())
445         #
446         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
447         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
448         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
449         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
450         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
451         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
452         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
453         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
454         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
455         #
456         m.write(fileName,2)
457         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
458         pass
459
460     def funcToTestDelItem(self,ff):
461         del ff[[0.02,(3,4)]]
462         pass
463
464     #emulation of pointe.med file.
465     @WriteInTmpDir
466     def testMEDField1(self):
467         TestMultiFieldShuffleRW1(self)
468         mm=MEDFileMesh.New("Pyfile17.med")
469         mm.write("Pyfile17_bis.med",2)
470         ff=MEDFileFieldMultiTS("Pyfile17.med")
471         tsExpected=[[1,2],[3,4],[5,6]]
472         self.assertEqual(3,len(ff))
473         for pos,f1ts in enumerate(ff):
474             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
475             self.assertEqual(type(f1ts),MEDFileField1TS)
476             pass
477         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
478         self.assertEqual([3,4],ff[1].getTime()[:-1])
479         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
480         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
481         ff.write("Pyfile17_bis.med",0)
482         #
483         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
484         self.assertEqual([(1,2),(3,4),(5,6)],ts)
485         self.funcToTestDelItem(ff)
486         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
487         self.assertEqual([(1,2)],ts)
488         pass
489
490     #profiles
491     @WriteInTmpDir
492     def testMEDField2(self):
493         GeneratePyfile19(self)
494         mm=MEDFileMesh.New("Pyfile19.med")
495         mm.write("Pyfile19_bis.med",2)
496         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
497         ff.write("Pyfile19_bis.med",0)
498         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
499         pass
500
501     #gauss points
502     @WriteInTmpDir
503     def testMEDField3(self):
504         GeneratePyfile13(self)
505         mm=MEDFileMesh.New("Pyfile13.med")
506         mm.write("Pyfile13_bis.med",2)
507         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
508         ff.write("Pyfile13_bis.med",0)
509         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
510         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
511         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
512         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
513         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
514         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
515         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
516         ff4=MEDFileField1TS.New("Pyfile13.med")
517         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
518         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
519         pass
520
521     #gauss NE
522     @WriteInTmpDir
523     def testMEDField4(self):
524         GeneratePyfile14(self)
525         mm=MEDFileMesh.New("Pyfile14.med")
526         mm.write("Pyfile14_bis.med",2)
527         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
528         ff.write("Pyfile14_bis.med",0)
529         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
530         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
531         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
532         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
533         pass
534
535     # MEDField get/set on pointe.med
536     @WriteInTmpDir
537     def testMEDField5(self):
538         TestMultiFieldShuffleRW1(self)
539         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
540         f=ff.getFieldAtLevel(ON_CELLS,0)
541         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
542         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
543         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
544         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
545         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546         # no with renumbering
547         f=ff.getFieldAtLevel(ON_CELLS,0,1)
548         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
549         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
550         f=ff.getFieldAtLevel(ON_CELLS,0,3)
551         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
552         f=ff.getFieldAtLevel(ON_CELLS,0,2)
553         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
554         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
555         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
556         pass
557
558     # MEDField get/set on profiles nodes
559     @WriteInTmpDir
560     def testMEDField6(self):
561         GeneratePyfile7(self)
562         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
563         its=ff.getIterations()
564         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
565         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
566         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
567         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
568         GeneratePyfile19(self)
569         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
570         its=ff.getIterations()
571         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
572         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
573         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
574         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
575         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
576         pass
577
578     # MEDField get/set on profiles cells
579     @WriteInTmpDir
580     def testMEDField7(self):
581         GeneratePyfile12(self)
582         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
583         its=ff.getIterations()
584         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
585         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
586         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
587         pass
588
589     #first test of assignation. No profile and types sorted by type.
590     @WriteInTmpDir
591     def testMEDField8(self):
592         fname="Pyfile25.med"
593         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
594         m1=f1.getMesh()
595         mm1=MEDFileUMesh.New()
596         mm1.setCoords(m1.getCoords())
597         mm1.setMeshAtLevel(0,m1)
598         mm1.setName(m1.getName())
599         mm1.write(fname,2)
600         ff1=MEDFileField1TS.New()
601         ff1.setFieldNoProfileSBT(f1)
602         ff1.write(fname,0)
603         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
604         itt,orr,ti=ff1.getTime()
605         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
606         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
607         ff1.setTime(3,4,2.3)
608         itt,orr,ti=ff1.getTime()
609         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
610         f1.setTime(5.5,7,8)
611         ff1.copyTimeInfoFrom(f1)
612         itt,orr,ti=ff1.getTime()
613         self.assertEqual(7,itt); self.assertEqual(8,orr); self.assertAlmostEqual(5.5,ti,14);
614         da,infos=ff1.getUndergroundDataArrayExt()
615         f2.getArray().setName(da.getName())#da has the same name than f2
616         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
617         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
618         #
619         fname="Pyfile26.med"
620         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
621         m1=f1.getMesh()
622         mm1=MEDFileUMesh.New()
623         mm1.setCoords(m1.getCoords())
624         mm1.setMeshAtLevel(0,m1)
625         mm1.setName(m1.getName())
626         mm1.write(fname,2)
627         ff1=MEDFileField1TS.New()
628         ff1.setFieldNoProfileSBT(f1)
629         nv=1456.
630         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
631         ff1.write(fname,0)
632         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
633         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
634         f1.getArray().setIJ(0,0,nv)
635         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
636         #
637         fname="Pyfile27.med"
638         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
639         m1=f1.getMesh()
640         mm1=MEDFileUMesh.New()
641         mm1.setCoords(m1.getCoords())
642         mm1.setMeshAtLevel(0,m1)
643         mm1.setName(m1.getName())
644         mm1.write(fname,2)
645         ff1=MEDFileField1TS.New()
646         ff1.setFieldNoProfileSBT(f1)
647         ff1.write(fname,0)
648         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
649         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
650         da,infos=ff1.getUndergroundDataArrayExt()
651         f2.getArray().setName(da.getName())#da has the same name than f2
652         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
653         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
654         #
655         fname="Pyfile28.med"
656         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
657         f1InvalidCpy=f1.deepCopy()
658         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
659         f1InvalidCpy2=f1.deepCopy()
660         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
661         m1=f1.getMesh()
662         mm1=MEDFileUMesh.New()
663         mm1.setCoords(m1.getCoords())
664         mm1.setMeshAtLevel(0,m1)
665         mm1.setName(m1.getName())
666         mm1.write(fname,2)
667         ff1=MEDFileField1TS.New()
668         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
669         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
670         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
671         ff1.setFieldNoProfileSBT(f1)
672         ff1.write(fname,0)
673         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
674         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
675         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
676         sbt=ff2.getFieldSplitedByType2()
677         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
678         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
679         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
680         self.assertEqual(6,loc1.getNumberOfPointsInCells())
681         self.assertEqual(3,loc1.getNumberOfGaussPoints())
682         self.assertEqual(2,loc1.getDimension())
683         da,infos=ff2.getUndergroundDataArrayExt()
684         f2.getArray().setName(da.getName())#da has the same name than f2
685         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
686         self.assertEqual(53,da.getNumberOfTuples())
687         self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos)
688         #
689         pass
690
691     @WriteInTmpDir
692     def testMEDFileData1(self):
693         fname="Pyfile29.med"
694         d=MEDFileData.New()
695         #
696         m1=MEDLoaderDataForTest.build1DMesh_1()
697         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
698         mmm1=MEDFileMeshMultiTS.New() ;
699         mmm1.setOneTimeStep(mm1)
700         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
701         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
702         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
703         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
704         d.setMeshes(ms)
705         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
706             self.assertEqual(name,mmm.getName())
707             self.assertEqual(type(mmm),MEDFileUMesh)
708             pass
709         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
710         #
711         ff1=MEDFileFieldMultiTS.New()
712         ff21=MEDFileFieldMultiTS.New()
713         ff22=MEDFileFieldMultiTS.New()
714         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
715         f1.getArray().setInfoOnComponent(0,"power [kW]")
716         ff1.appendFieldNoProfileSBT(f1)
717         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
718         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
719         ff21.appendFieldNoProfileSBT(f21)
720         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
721         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
722         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
723         ff22.appendFieldNoProfileSBT(f22)
724         fs=MEDFileFields.New()
725         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
726         for name,fmts in zip(["f1","f21","f22"],fs):
727             self.assertEqual(name,fmts.getName())
728             pass
729         d.setFields(fs)
730         #
731         fname2="Pyfile29_2.med"
732         d.write(fname2,2)
733         #
734         d2=MEDFileData.New(fname2)
735         self.assertEqual(2,d2.getNumberOfMeshes())
736         self.assertEqual(3,d2.getNumberOfFields())
737         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
738         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
739         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
740         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
741         self.assertTrue(m1.isEqual(m1bis,1e-12))
742         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
743         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
744         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
745         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
746         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
747         pass
748
749     @WriteInTmpDir
750     def testMEDField9(self):
751         # first test field profile WR. Full type but with some type missing
752         fname="Pyfile30.med"
753         m1=MEDLoaderDataForTest.build2DMesh_3()
754         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
755         mm1.write(fname,2)
756         ff1=MEDFileField1TS.New()
757         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
758         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
759         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
760         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
761         #
762         ff1.setFieldProfile(f1,mm1,0,da)
763         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
764         ff1=ff1.deepCopy()
765         ff1.write(fname,0)
766         #
767         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
768         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
769         self.assertTrue(vals.isEqual(d,1e-14))
770         #
771         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
772         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
773         ff2.deepCpyGlobs(ff3)
774         sbt=ff2.getFieldSplitedByType2()
775         self.assertEqual(3,sbt[0][0])#TRI3
776         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
777         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
778         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
779         self.assertEqual(4,sbt[1][0])#QUAD4
780         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
781         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
782         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
783         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
784         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
785         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
786         self.assertTrue(vals.isEqual(d,1e-14))
787         pass
788
789     @WriteInTmpDir
790     def testMEDField10(self):
791         fname="Pyfile31.med"
792         m1=MEDLoaderDataForTest.build2DMesh_1()
793         m1.renumberCells([0,1,4,2,3,5],False)
794         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
795         mm1.write(fname,2)
796         ff1=MEDFileFieldMultiTS.New()
797         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
798         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
799         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
800         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
801         #
802         ff1.appendFieldProfile(f1,mm1,0,da)
803         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
804         ff1.appendFieldProfile(f1,mm1,0,da)
805         ff1=ff1.deepCopy()
806         ff1.write(fname,0)
807         #
808         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
809         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
810         self.assertTrue(vals.isEqual(e,1e-14))
811         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
812         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
813         self.assertTrue(vals.isEqual(d,1e-14))
814         #
815         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
816         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
817         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
818         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
819         self.assertTrue(vals.isEqual(e,1e-14))
820         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
821         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
822         self.assertTrue(vals.isEqual(d,1e-14))
823         pass
824
825     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
826     @WriteInTmpDir
827     def testMEDField11(self):
828         fname="Pyfile32.med"
829         m1=MEDLoaderDataForTest.build2DMesh_1()
830         m1.renumberCells([0,1,4,2,3,5],False)
831         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
832         mm1.write(fname,2)
833         ff1=MEDFileField1TS.New()
834         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
835         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
836         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
837         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
838         #
839         ff1.setFieldProfile(f1,mm1,0,da)
840         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
841         ff1.write(fname,0)
842         #
843         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
844         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
845         self.assertTrue(vals.isEqual(d,1e-14))
846         ## #
847         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
848         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
849         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
850         self.assertTrue(vals.isEqual(d,1e-14))
851         pass
852
853     @WriteInTmpDir
854     def testMEDField12(self):
855         fname="Pyfile33.med"
856         m1=MEDLoaderDataForTest.build2DMesh_1()
857         m1.renumberCells([0,1,4,2,3,5],False)
858         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
859         mm1.write(fname,2)
860         ff1=MEDFileFieldMultiTS.New()
861         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
862         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
863         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
864         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
865         #
866         ff1.appendFieldProfile(f1,mm1,0,da)
867         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
868         ff1.appendFieldProfile(f1,mm1,0,da)
869         ff1.write(fname,0)
870         #
871         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
872         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
873         self.assertTrue(vals.isEqual(e,1e-14))
874         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
875         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
876         self.assertTrue(vals.isEqual(d,1e-14))
877         #
878         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
879         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
880         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
881         self.assertTrue(vals.isEqual(e,1e-14))
882         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
883         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
884         self.assertTrue(vals.isEqual(d,1e-14))
885         pass
886
887     @WriteInTmpDir
888     def testMEDField13(self):
889         fname="Pyfile34.med"
890         m1=MEDLoaderDataForTest.build2DMesh_1()
891         m1.renumberCells([0,1,4,2,3,5],False)
892         tmp=m1.getName();
893         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
894         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
895         mm1.write(fname,2)
896         ff1=MEDFileField1TS.New()
897         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
898         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
899         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
900         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
901         #
902         ff1.setFieldProfile(f1,mm1,0,da)
903         ff1.write(fname,0)
904         #
905         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
906         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907         self.assertTrue(vals.isEqual(d,1e-14))
908         #
909         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
910         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
911         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
912         self.assertTrue(vals.isEqual(d,1e-14))
913         pass
914
915     @WriteInTmpDir
916     def testMEDField14(self):
917         fname="Pyfile35.med"
918         m1=MEDLoaderDataForTest.build2DMesh_1()
919         m1.renumberCells([0,1,4,2,3,5],False)
920         tmp=m1.getName();
921         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
922         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
923         mm1.write(fname,2)
924         ff1=MEDFileFieldMultiTS.New()
925         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
926         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
927         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
928         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
929         #
930         ff1.appendFieldProfile(f1,mm1,0,da)
931         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
932         ff1.appendFieldProfile(f1,mm1,0,da)
933         ff1.write(fname,0)
934         #
935         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
936         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
937         self.assertTrue(vals.isEqual(d,1e-14))
938         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
939         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
940         self.assertTrue(vals.isEqual(e,1e-14))
941         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
942         #
943         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
944         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
945         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
946         self.assertTrue(vals.isEqual(d,1e-14))
947         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
948         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
949         self.assertTrue(vals.isEqual(e,1e-14))
950         pass
951     # Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
952     # By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
953     # for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
954     @WriteInTmpDir
955     def testMEDField15(self):
956         fname="Pyfile36.med"
957         m0=MEDLoaderDataForTest.build2DMesh_1()
958         m0.renumberCells([0,1,4,2,3,5],False)
959         tmp=m0.getName();
960         m1=m0.buildPartOfMySelf([0,1,1,2,3,3,4,4],True) ; m1.setName(tmp) # suppression of last cell that is a polygon and creation of one more cell per type
961         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
962         ff1=MEDFileField1TS.New()
963         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
964         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
965         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
966         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
967         #
968         ff1.setFieldProfile(f1,mm1,0,da)
969         m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
970         mm1.write(fname,2)
971         ff1.write(fname,0)
972         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
973         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
974         self.assertTrue(p1.isIota(5))
975         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
976         pass
977     # Test for getFieldAtTopLevel method
978     @WriteInTmpDir
979     def testMEDField16(self):
980         fname="Pyfile37.med"
981         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
982         m1=f1.getMesh()
983         mm1=MEDFileUMesh.New()
984         mm1.setCoords(m1.getCoords())
985         mm1.setMeshAtLevel(0,m1)
986         mm1.setName(m1.getName())
987         ff1=MEDFileField1TS.New()
988         ff1.setFieldNoProfileSBT(f1)
989         m2=m1.buildDescendingConnectivity()[0]
990         m2.sortCellsInMEDFileFrmt()
991         m2.setName(m1.getName())
992         mm1.setMeshAtLevel(-1,m2)
993         mm1.write(fname,2)
994         f2=m2.getMeasureField(True)
995         dd=DataArrayDouble.New()
996         dd.alloc(f2.getArray().getNumberOfTuples(),3)
997         dd[:,0]=f2.getArray()
998         dd[:,1]=2*f2.getArray()
999         dd[:,2]=3*f2.getArray()
1000         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
1001         f2.setArray(dd)
1002         f2.copyTinyStringsFrom(f1)
1003         f2.copyTinyAttrFrom(f1)
1004         ff1.setFieldNoProfileSBT(f2)
1005         ff1.write(fname,0)
1006         # Reading Pyfile37.med
1007         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1008         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
1009         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1010         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
1011         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1012         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1013         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
1014         # More complex
1015         fname="Pyfile38.med"
1016         mm1.write(fname,2)
1017         ff1=MEDFileField1TS.New()
1018         ff1.setFieldNoProfileSBT(f2)
1019         ff1.write(fname,0)
1020         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
1021         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
1022         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
1023         pass
1024
1025     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1026     @WriteInTmpDir
1027     def testMEDField17(self):
1028         fname="Pyfile39.med"
1029         m1=MEDLoaderDataForTest.build2DMesh_1()
1030         m1.renumberCells([0,1,4,2,3,5],False)
1031         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1032         mm1.write(fname,2)
1033         ffs=MEDFileFields.New()
1034         ff1=MEDFileFieldMultiTS.New()
1035         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1036         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1037         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1038         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1039         #
1040         ff1.appendFieldProfile(f1,mm1,0,da)
1041         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1042         ff1.appendFieldProfile(f1,mm1,0,da)
1043         ffs.resize(1)
1044         ffs.setFieldAtPos(0,ff1)
1045         ffs=ffs.deepCopy()
1046         ffs.write(fname,0)
1047         #
1048         ffsr=MEDFileFields.New(fname)
1049         ff3=ffsr.getFieldAtPos(0)
1050         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1051         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1052         pass
1053
1054     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1055     @WriteInTmpDir
1056     def testMEDField18(self):
1057         fname="Pyfile40.med"
1058         m1=MEDLoaderDataForTest.build2DMesh_1()
1059         m1.renumberCells([0,1,4,2,3,5],False)
1060         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1061         mm1.write(fname,2)
1062         ffs=MEDFileFields.New()
1063         ff1=MEDFileFieldMultiTS.New()
1064         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1065         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1066         f1.setArray(d) # note that f1 is NOT defined fully (no mesh !). It is not a bug of test it is too test that MEDFileField1TS.appendFieldProfile is NOT sensible of that.
1067         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1068         #
1069         ff1.appendFieldProfile(f1,mm1,0,da)
1070         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1071         ff1.appendFieldProfile(f1,mm1,0,da)
1072         ffs.pushField(ff1)
1073         ffs.write(fname,0)
1074         #
1075         ffsr=MEDFileFields.New(fname)
1076         ff3=ffsr.getFieldAtPos(0)
1077         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1078         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1079         pass
1080
1081     @WriteInTmpDir
1082     def testMEDFieldBug1(self):
1083         GeneratePyfile13(self)
1084         fname="Pyfile13.med"
1085         d=MEDFileData.New(fname)
1086         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1087         pass
1088
1089     @WriteInTmpDir
1090     def testMEDMesh8(self):
1091         m=MEDLoaderDataForTest.build1DMesh_1()
1092         m.convertQuadraticCellsToLinear()
1093         mm=MEDFileUMesh.New()
1094         mm.setMeshAtLevel(0,m)
1095         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1096         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1097         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1098         mm.setGroupsAtLevel(0,[g1,g2],False)
1099         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1100         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1101         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1102         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1103         mm.assignFamilyNameWithGroupName()
1104         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1105         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1106         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1107         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1108         #
1109         mm=MEDFileUMesh.New()
1110         mm.setMeshAtLevel(0,m)
1111         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1112         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1113         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1114         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1115         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1116         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1117         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1118         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1119         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1120         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1121         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1122         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1123         mm.changeFamilyId(5,6)
1124         g=mm.getGroupArr(0,"g3")
1125         self.assertTrue(g.isEqual(g3));
1126         g=mm.getGroupArr(0,"g2")
1127         self.assertTrue(g.isEqual(g2));
1128         g=mm.getGroupArr(0,"g1")
1129         self.assertTrue(g.isEqual(g1));
1130         pass
1131
1132     # bug detected by gauthier
1133     @WriteInTmpDir
1134     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1135         fname="Pyfile41.med"
1136         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1137         m1=f1.getMesh()
1138         mm1=MEDFileUMesh.New()
1139         mm1.setCoords(m1.getCoords())
1140         mm1.setMeshAtLevel(0,m1)
1141         mm1.write(fname,2)
1142         ff1=MEDFileField1TS.New()
1143         ff1.setFieldNoProfileSBT(f1)
1144         ff1.write(fname,0)
1145         # writing mesh1 and field1, now creation of mesh2 and field2
1146         f2=f1.deepCopy()
1147         m2=f2.getMesh()
1148         m2.translate([0.5,0.6,0.7])
1149         m2.setName("3DSurfMesh_2")
1150         f2.getArray()[:]*=2.
1151         f2.setName("VectorFieldOnCells2")
1152         mm2=MEDFileUMesh.New()
1153         mm2.setCoords(m2.getCoords())
1154         mm2.setMeshAtLevel(0,m2)
1155         mm2.write(fname,0)
1156         ff2=MEDFileField1TS.New()
1157         ff2.setFieldNoProfileSBT(f2)
1158         ff2.write(fname,0)
1159         #
1160         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1161         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1162         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1163         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1164         pass
1165
1166     @WriteInTmpDir
1167     def testMEDLoaderMultiLevelCellField1(self):
1168         fname="Pyfile42.med"
1169         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1170         m=MEDFileUMesh.New()
1171         m.setCoords(m2.getCoords())
1172         m.setMeshAtLevel(0,m2)
1173         m.setMeshAtLevel(-1,m1)
1174         m.setMeshAtLevel(-2,m0)
1175         m.write(fname,2)
1176         #
1177         FieldName1="Field1"
1178         compNames1=["comp1","comp2","comp3"]
1179         ff1=MEDFileField1TS.New()
1180         da2=DataArrayDouble.New()
1181         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1182         da2.iota(7.)
1183         da2.rearrange(len(compNames1))
1184         da2.setInfoOnComponents(compNames1)
1185         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1186         ff1.setFieldNoProfileSBT(f2)
1187         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1188         da0=DataArrayDouble.New()
1189         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1190         da0.iota(190.)
1191         da0.rearrange(len(compNames1))
1192         da0.setInfoOnComponents(compNames1)
1193         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1194         ff1.setFieldNoProfileSBT(f0)
1195         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1196         da1=DataArrayDouble.New()
1197         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1198         da1.iota(90.)
1199         da1.rearrange(len(compNames1))
1200         da1.setInfoOnComponents(compNames1)
1201         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1202         ff1.setFieldNoProfileSBT(f1)
1203         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1204         #
1205         ff1.write(fname,0)
1206         #
1207         FieldName2="Field2"
1208         compNames2=["comp11","comp22"]
1209         ff2=MEDFileField1TS.New()
1210         da0=DataArrayDouble.New()
1211         da0.alloc(m0.getNumberOfCells()*2,1)
1212         da0.iota(-190.)
1213         da0.rearrange(2)
1214         da0.setInfoOnComponents(compNames2)
1215         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1216         ff2.setFieldNoProfileSBT(f0)
1217         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1218         da1=DataArrayDouble.New()
1219         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1220         da1.iota(-90.)
1221         da1.rearrange(len(compNames2))
1222         da1.setInfoOnComponents(compNames2)
1223         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1224         ff2.setFieldNoProfileSBT(f1)
1225         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1226         #
1227         ff2.write(fname,0)
1228         #
1229         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1230         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1231         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1232         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1233         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1234         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1235         pass
1236
1237     @WriteInTmpDir
1238     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1239         fname="Pyfile43.med"
1240         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1241         m=MEDFileUMesh.New()
1242         m.setMeshAtLevel(0,m2)
1243         m.setMeshAtLevel(-1,m1)
1244         m.setMeshAtLevel(-2,m0)
1245         f=MEDFileField1TS.New()
1246         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1247         ff.setName("NodeFieldPfl")
1248         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1249         ff.setArray(arr)
1250         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1251         f.setFieldProfile(ff,m,-2,pfl)
1252         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1253         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1254         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1255         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1256         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1257         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1258         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1259         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1260         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1261         expected1=[1.,10.,100.,2.,20.,200.]
1262         nodeCoordsWithValue1=[10.,2.5,0.]
1263         nodeCoordsWithValue2=[10.,3.75,0.]
1264         for i in range(3):
1265             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1266             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1267             pass
1268         for i in range(6):
1269             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1270             pass
1271         del tes0
1272         #
1273         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1274         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1275         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1276         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1277         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1278         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1279         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1280         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1281         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1282         for i in range(6):
1283             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1284             pass
1285         m.write(fname,2)
1286         f.write(fname,0)
1287         #
1288         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1289         f=MEDFileField1TS.New()
1290         f.setFieldProfile(ff,m,-2,pfl)
1291         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1292         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1293         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1294         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1295         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1296         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1297         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1298         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1299         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1300         expected2=[2.,20.,200.,1.,10.,100.]
1301         for i in range(3):
1302             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1303             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1304             pass
1305         for i in range(6):
1306             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1307             pass
1308         #
1309         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1310         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
1311         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1312         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1313         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1314         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1315         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1316         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1317         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1318         for i in range(6):
1319             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1320             pass
1321         pass
1322
1323     @WriteInTmpDir
1324     def testBuildInnerBoundaryAlongM1Group1(self):
1325         fname="Pyfile44.med"
1326         m=MEDCouplingCMesh.New()
1327         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1328         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1329         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1330         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1331         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1332         m2.setName(m.getName())
1333         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1334         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1335         mm=MEDFileUMesh.New()
1336         mm.setMeshAtLevel(0,m)
1337         mm.setMeshAtLevel(-1,m2)
1338         mm.setGroupsAtLevel(-1,[grp,grp2])
1339         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1340         mm.setGroupsAtLevel(1,[grpNode])
1341         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1342         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1343         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1344         #
1345         self.assertEqual(30,mm.getNumberOfNodes())
1346         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1347         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1348         #
1349         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1350         self.assertEqual([15,16,17],nodes.getValues());
1351         self.assertEqual([7,8,9],cells.getValues());
1352         self.assertEqual([12,13,14],cells2.getValues());
1353         self.assertEqual(33,mm.getNumberOfNodes())
1354         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1355         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1356         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1357         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1358         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1359         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1360         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1361         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1362         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1363         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1364         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1365         #
1366         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1367         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1368         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1369         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1370         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1371         mm.write(fname,2)
1372         pass
1373
1374     @WriteInTmpDir
1375     def testBuildInnerBoundaryAlongM1Group2(self):
1376         fname="Pyfile45.med"
1377         m=MEDCouplingCMesh.New()
1378         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1379         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1380         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1381         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1382         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1383         m2.setName(m.getName())
1384         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1385         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1386         mm=MEDFileUMesh.New()
1387         mm.setMeshAtLevel(0,m)
1388         mm.setMeshAtLevel(-1,m2)
1389         mm.setGroupsAtLevel(-1,[grp,grp2])
1390         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1391         mm.setGroupsAtLevel(1,[grpNode])
1392         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1393         ref1=[4,9,8,14,15,4,10,9,15,16]
1394         ref2=[4,9,8,14,30,4,10,9,30,16]
1395         #
1396         self.assertEqual(30,mm.getNumberOfNodes())
1397         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1398         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1399         #
1400         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1401         self.assertEqual([15],nodes.getValues());
1402         self.assertEqual([7,8],cells.getValues());
1403         self.assertEqual([12,13],cells2.getValues());
1404         self.assertEqual(31,mm.getNumberOfNodes())
1405         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1406         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1407         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1408         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1409         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())#cells 7,8,9 and 12,13,14 are lying on "Grp" but only 7,8 and 9 are renumbered
1410         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1411         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1412         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1413         refValues=DataArrayDouble.New([1.21,1.32,1.43,1.54,1.65,1.32,1.44,1.56,1.68,1.8,1.43,1.56,1.69,1.82,1.95,1.54,1.68,1.82,1.96,2.1])
1414         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1415         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1416         #
1417         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1418         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1419         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1420         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1421         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1422         mm.write(fname,2)
1423         pass
1424
1425     @WriteInTmpDir
1426     def testBuildInnerBoundaryAlongM1Group3(self):
1427         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1428         fname = "Pyfile73.med"
1429         m = MEDCouplingCMesh.New()
1430         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1431         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1432         m = m.buildUnstructured(); m.setName("simple")
1433         m2 = m.buildDescendingConnectivity()[0]
1434         m2.setName(m.getName())
1435
1436         # A crack in two non connected parts of the mesh:
1437         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp")
1438
1439         mm = MEDFileUMesh.New()
1440         mm.setMeshAtLevel(0,m)
1441         mm.setMeshAtLevel(-1,m2)
1442         mm.setGroupsAtLevel(-1,[grpSeg])
1443         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1444         self.assertEqual([1,13],nodes.getValues());
1445         self.assertEqual([0,6],cellsMod.getValues());
1446         self.assertEqual([1,7],cellsNotMod.getValues());
1447         self.assertEqual(17,mm.getNumberOfNodes())
1448         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1449         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1450         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1451         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1452         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1453         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1454         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),2,1e-12);# Grp_dup and Grp are not equal considering connectivity only
1455         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1456
1457         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1458         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1459         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1460         #
1461         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1462         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1463         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1464         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1465         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1466         mm.write(fname,2)
1467
1468     @WriteInTmpDir
1469     def testBuildInnerBoundaryAlongM1Group4(self):
1470         """ Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
1471         """
1472         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1473                                0.,1., 1.,1., 2.,1., 3.,1.,
1474                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1475         conn = [3,0,4,1,  3,1,4,5,
1476                 3,5,9,10, 3,5,10,6,
1477                 3,2,6,7,  3,2,7,3,
1478                 3,4,8,9,  3,4,9,5,
1479                 3,1,5,6,  3,1,6,2,
1480                 3,6,10,11,3,6,11,7]
1481         # Only TRI3:
1482         connI = DataArrayInt()
1483         connI.alloc(13, 1); connI.iota(); connI *= 4
1484         m2 = MEDCouplingUMesh("2D", 2)
1485         m2.setCoords(coo)
1486         m2.setConnectivity(DataArrayInt(conn), connI)
1487         m2.checkConsistency()
1488         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1489         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1490         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1491         mfu = MEDFileUMesh()
1492         mfu.setMeshAtLevel(0, m2)
1493         mfu.setMeshAtLevel(-1, m1)
1494         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1495         nNod = m2.getNumberOfNodes()
1496         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1497         m2_bis = mfu.getMeshAtLevel(0)
1498         m2_bis.checkConsistency()
1499         m1_bis = mfu.getMeshAtLevel(-1)
1500         m1_bis.checkConsistency()
1501         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1502         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1503         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1504         self.assertEqual([6,7], nodesDup.getValues())
1505         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1506         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1507         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1508         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1509         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1510         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1511         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1512         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1513         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1514         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1515         self.assertRaises(InterpKernelException,mfu.getGroup(-1,"group_dup").checkGeoEquivalWith,mfu.getGroup(-1,"group"),2,1e-12) # Grp_dup and Grp are not equal considering connectivity only
1516         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1517         m_bis0 = mfu.getMeshAtLevel(-1)
1518         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1519         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1520
1521     @WriteInTmpDir
1522     def testBuildInnerBoundary5(self):
1523         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1524         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1525         coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0,
1526         200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342,
1527          200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546,
1528          200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538,
1529          0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483,
1530          200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082,
1531          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1532          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015,
1533          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784,
1534          97.16750463405486, 97.18018457127863], 46, 3)
1535         c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27,
1536          39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14,
1537          21,26, 23, 44, 14, 38, 44, 14, 24, 14, 39, 37, 41, 22, 14, 21, 33, 45, 42, 14, 27, 22, 39, 41, 14, 23, 26, 21, 3, 14, 27, 18, 22, 41, 14, 39, 36, 44, 17, 14, 21, 26, 44, 40,
1538          14, 39, 37, 22, 23, 14, 37, 38, 41, 19, 14, 25, 12, 13, 41, 14, 30, 26, 43, 45, 14, 38, 36, 13, 14, 14, 12, 36, 13, 41, 14, 20, 44, 21, 37, 14, 16, 36, 12, 41, 14, 39, 36,
1539          17, 16, 14, 44, 20, 24, 38, 14, 27, 16, 12, 41, 14, 26, 15, 17, 44, 14, 19, 18, 41, 37, 14, 40, 45, 26, 15, 14, 37, 38, 19, 20, 14, 17, 15, 26, 2, 14, 39, 36, 16, 41, 14,
1540          24, 21, 44, 40, 14, 16, 7, 27, 12, 14, 22, 18, 37, 41, 14, 21, 31, 45, 24, 14, 44, 40, 15, 24, 14, 24, 45, 15, 28, 14, 44, 40, 26, 15, 14, 24, 20, 21, 0, 14, 38, 36, 14,
1541          44, 14, 39, 37, 23, 44, 14, 45, 31, 42, 32, 14, 25, 18, 19, 4, 14, 36, 44, 17, 15, 14, 25, 19, 18, 41, 14, 24, 15, 14, 1, 14, 45, 24, 34, 28, 14, 35, 45, 30, 43, 14, 17,
1542          44, 39, 26, 14, 44, 23, 21, 37, 14, 30, 45, 29, 15, 14, 45, 35, 33, 43, 14, 30, 15, 26, 45, 14, 31, 21, 0, 24, 14, 33, 35, 32, 10, 14, 29, 45, 34, 28, 14, 32, 45, 34,
1543          29, 14, 45, 31, 32, 34, 14, 33, 26, 45, 43, 14, 45, 31, 34, 24, 14, 33, 26, 21, 45, 14, 11, 30, 35, 29, 14, 33, 35, 45, 32, 14, 33, 45, 42, 32, 14, 32, 8, 34, 31, 14,
1544          21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15,
1545          30, 2]
1546         cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185,
1547          190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355,
1548          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1549         m3 = MEDCouplingUMesh("3D", 3)
1550         m3.setCoords(coo)
1551         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1552         m3.checkConsistency()
1553         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1554         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1555         mfu = MEDFileUMesh()
1556         mfu.setMeshAtLevel(0, m3)
1557         mfu.setMeshAtLevel(-1, m2)
1558         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1559         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1560         mfu.setGroupsAtLevel(-1, [grpIds])
1561         nNod = m3.getNumberOfNodes()
1562         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1563         m3_bis = mfu.getMeshAtLevel(0)
1564         m3_bis.checkConsistency()
1565         m2_bis = mfu.getMeshAtLevel(-1)
1566         m2_bis.checkConsistency()
1567         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1568         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1569         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1570         self.assertEqual([3], nodesDup.getValues())
1571         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1572         self.assertEqual(set([22]), set(cells1.getValues()))
1573         self.assertEqual(set([77]), set(cells2.getValues()))
1574         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1575         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1576         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1577         m_bis0 = mfu.getMeshAtLevel(-1)
1578         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1579         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1580         pass
1581
1582     @WriteInTmpDir
1583     def testBuildInnerBoundary6(self):
1584         """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1585         The singular point was wrongly duplicated.
1586         """
1587         coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0),
1588                                 (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25),
1589                                 (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875),
1590                                 (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375),
1591                                 (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375),
1592                                 (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375),
1593                                 (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)])
1594         c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15,
1595               18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27,
1596               28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18]
1597         cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108]
1598         m3 = MEDCouplingUMesh("3D", 3)
1599         m3.setCoords(coo)
1600         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1601         m3.checkConsistency()
1602         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1603         grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group")
1604         mfu = MEDFileUMesh()
1605         mfu.setMeshAtLevel(0, m3)
1606         mfu.setMeshAtLevel(-1, m2)
1607         mfu.setGroupsAtLevel(-1, [grpIds])
1608         nNod = m3.getNumberOfNodes()
1609         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1610         m3_bis = mfu.getMeshAtLevel(0)
1611         m3_bis.checkConsistency()
1612         m2_bis = mfu.getMeshAtLevel(-1)
1613         m2_bis.checkConsistency()
1614         self.assertEqual(nNod+8, mfu.getNumberOfNodes())
1615         self.assertEqual(nNod+8, m3_bis.getNumberOfNodes())
1616         self.assertEqual(nNod+8, m2_bis.getNumberOfNodes())
1617         self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues())
1618         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1619         self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues()))
1620         self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues()))
1621         self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues())
1622         self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1623         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1624         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1625         pass
1626
1627     @WriteInTmpDir
1628     def testBuildInnerBoundary7(self):
1629         """ 3D test where the crack has another funny shape with another singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment)
1630         Once the crack is inserted, the cells on either side of the crack do not necessarily form a connex spread zone. This was not properly handled either. 
1631         """
1632         m3 = MEDCouplingUMesh('box', 3)
1633         coo = DataArrayDouble([(5,17,0),(0,17,0),(0,12,0),(5,12,0),(15,17,0),(15,12,0),(20,12,0),(20,17,0),(20,2,0),(15,2,0),(15,-3,0),(20,-3,0),(5,-3,0),(5,2,0),(0,-3,0),(0,2,0),(5,17,10),(5,17,20),(5,17,30),(5,17,40),(0,17,10),(0,17,20),(0,17,30),(0,17,40),(0,12,10),(0,12,20),(0,12,30),(0,12,40),(5,12,10),(5,12,20),(5,12,30),(5,12,40),(15,17,10),(15,17,20),(15,17,30),(15,17,40),(15,12,10),(15,12,20),(15,12,30),(15,12,40),(20,12,10),(20,12,20),(20,12,30),(20,12,40),(20,17,10),(20,17,20),(20,17,30),(20,17,40),(20,2,10),(20,2,20),(20,2,30),(20,2,40),(15,2,10),(15,2,20),(15,2,30),(15,2,40),(15,-3,10),(15,-3,20),(15,-3,30),(15,-3,40),(20,-3,10),(20,-3,20),(20,-3,30),(20,-3,40),
1634                                (5,-3,10),(5,-3,20),(5,-3,30),(5,-3,40),(5,2,10),(5,2,20),(5,2,30),(5,2,40),(0,-3,10),(0,-3,20),(0,-3,30),(0,-3,40),(0,2,10),(0,2,20),(0,2,30),(0,2,40),(20,8,0),(0,8,0),(20,8,10),(20,8,20),(20,8,30),(20,8,40),(15,8,30),(15,8,40),(5,8,30),(5,8,40),(0,8,10),(0,8,20),(0,8,30),(0,8,40)])
1635         m3.setCoords(coo)
1636         c = DataArrayInt([31, 0, 3, 2, 1, -1, 16, 20, 24, 28, -1, 0, 16, 28, 3, -1, 3, 28, 24, 2, -1, 2, 24, 20, 1, -1, 1, 20, 16, 0, 31, 16, 28, 24, 20, -1, 17, 21, 25, 29, -1, 16, 17, 29, 28, -1, 28, 29, 25, 24, -1, 24, 25, 21, 20, -1, 20, 21, 17, 16, 31, 17, 29, 25, 21, -1, 18, 22, 26, 30, -1, 17, 18, 30, 29, -1, 29, 30, 26, 25, -1, 25, 26, 22, 21, -1, 21, 22, 18, 17, 31, 18, 30, 26, 22, -1, 19, 23, 27, 31, -1, 18, 19, 31, 30, -1, 30, 31, 27, 26, -1, 26, 27, 23, 22, -1, 22, 23, 19, 18, 31, 4, 5, 3, 0, -1, 32, 16, 28, 36, -1, 4, 32, 36, 5, -1, 5, 36, 28, 3, -1, 3, 28, 16, 0, -1, 0, 16, 32, 4, 31, 32, 36, 28, 16, -1, 33, 17, 29, 37, -1, 32, 33, 37,
1637                           36, -1, 36, 37, 29, 28, -1, 28, 29, 17, 16, -1, 16, 17, 33, 32, 31, 33, 37, 29, 17, -1, 34, 18, 30, 38, -1, 33, 34, 38, 37, -1, 37, 38, 30, 29, -1, 29, 30, 18, 17, -1, 17, 18, 34, 33, 31, 34, 38, 30, 18, -1, 35, 19, 31, 39, -1, 34, 35, 39, 38, -1, 38, 39, 31, 30, -1, 30, 31, 19, 18, -1, 18, 19, 35, 34, 31, 6, 5, 4, 7, -1, 40, 44, 32, 36, -1, 6, 40, 36, 5, -1, 5, 36, 32, 4, -1, 4, 32, 44, 7, -1, 7, 44, 40, 6, 31, 40, 36, 32, 44, -1, 41, 45, 33, 37, -1, 40, 41, 37, 36, -1, 36, 37, 33, 32, -1, 32, 33, 45, 44, -1, 44, 45, 41, 40, 31, 41, 37, 33, 45, -1, 42, 46, 34, 38, -1, 41, 42, 38, 37, -1, 37, 38, 34, 33, -1, 33, 34, 46, 45, -1, 45, 46, 42, 41, 31,
1638                           42, 38, 34, 46, -1, 43, 47, 35, 39, -1, 42, 43, 39, 38, -1, 38, 39, 35, 34, -1, 34, 35, 47, 46, -1, 46, 47, 43, 42, 31, 80, 9, 5, 6, -1, 82, 40, 36, 52, -1, 80, 82, 52, 9, -1, 9, 52, 36, 5, -1, 5, 36, 40, 6, -1, 6, 40, 82, 80, 31, 82, 52, 36, 40, -1, 83, 41, 37, 53, -1, 82, 83, 53, 52, -1, 52, 53, 37, 36, -1, 36, 37, 41, 40, -1, 40, 41, 83, 82, 31, 83, 53, 37, 41, -1, 84, 42, 38, 86, -1, 83, 84, 86, 53, -1, 53, 86, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 84, 83, 31, 84, 86, 38, 42, -1, 85, 43, 39, 87, -1, 84, 85, 87, 86, -1, 86, 87, 39, 38, -1, 38, 39, 43, 42, -1, 42, 43, 85, 84, 31, 10, 9, 8, 11, -1, 56, 60, 48, 52, -1, 10, 56, 52, 9, -1, 9, 52,
1639                           48, 8, -1, 8, 48, 60, 11, -1, 11, 60, 56, 10, 31, 56, 52,
1640                           48, 60, -1, 57, 61, 49, 53, -1, 56, 57, 53, 52, -1, 52, 53, 49, 48, -1, 48, 49, 61, 60, -1, 60, 61, 57, 56, 31, 57, 53, 49, 61, -1, 58, 62, 50, 54, -1, 57, 58, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, 61, 62, 58, 57, 31, 58, 54, 50, 62, -1, 59, 63, 51, 55, -1, 58, 59, 55, 54, -1, 54, 55, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 59, 58, 31, 12, 13, 9, 10, -1, 64, 56, 52, 68, -1, 12, 64, 68, 13, -1, 13, 68, 52, 9, -1, 9, 52, 56, 10, -1, 10, 56, 64, 12, 31, 64, 68, 52, 56, -1, 65, 57, 53, 69, -1, 64, 65, 69, 68, -1, 68, 69, 53, 52, -1, 52, 53, 57, 56, -1, 56, 57, 65, 64, 31, 65, 69, 53, 57, -1, 66, 58, 54, 70, -1, 65, 66, 70, 69, -1, 69, 70,
1641                           54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 66, 65, 31, 66, 70, 54, 58, -1, 67, 59, 55, 71, -1, 66, 67, 71, 70, -1, 70, 71, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 67, 66, 31, 14, 15, 13, 12, -1, 72, 64, 68, 76, -1, 14, 72, 76, 15, -1, 15, 76, 68, 13, -1, 13, 68, 64, 12, -1, 12, 64, 72, 14, 31, 72, 76, 68, 64, -1, 73, 65, 69, 77, -1, 72, 73, 77, 76, -1, 76, 77, 69, 68, -1, 68, 69, 65, 64, -1, 64, 65, 73, 72, 31, 73, 77, 69, 65, -1, 74, 66, 70, 78, -1, 73, 74, 78, 77, -1, 77, 78, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 74, 73, 31, 74, 78, 70, 66, -1, 75, 67, 71, 79, -1, 74, 75, 79, 78, -1, 78, 79, 71, 70, -1, 70, 71, 67, 66, -1,
1642                           66, 67, 75, 74, 31, 2, 3, 13, 81, -1, 24, 90, 68, 28, -1, 2, 24, 28, 3, -1, 3, 28, 68, 13, -1, 13, 68, 90, 81, -1, 81, 90, 24, 2, 31, 24, 28, 68, 90, -1, 25, 91, 69, 29, -1, 24, 25, 29, 28, -1, 28, 29, 69, 68, -1, 68, 69, 91, 90, -1, 90, 91, 25, 24, 31, 25, 29, 69, 91, -1, 26, 92, 88, 30, -1, 25, 26, 30, 29, -1, 29, 30, 88, 69, -1, 69, 88, 92, 91, -1, 91, 92, 26, 25, 31, 26, 30, 88, 92, -1, 27, 93, 89, 31, -1, 26, 27, 31, 30, -1, 30, 31, 89, 88, -1, 88, 89, 93, 92, -1, 92, 93, 27, 26, 31, 13, 3, 5, 9, -1, 68, 52, 36, 28, -1, 13, 68, 28, 3, -1, 3, 28, 36, 5, -1, 5, 36, 52, 9, -1, 9, 52, 68, 13, 31, 68, 28, 36, 52, -1, 69, 53, 37, 29, -1, 68, 69, 29,
1643                           28, -1, 28, 29, 37, 36, -1, 36, 37, 53, 52, -1, 52, 53, 69, 68, 31, 69, 29, 37, 53, -1, 88, 86, 38, 30, -1, 69, 88, 30, 29, -1, 29, 30, 38, 37, -1, 37, 38, 86, 53, -1, 53, 86, 88, 69, 31, 88, 30, 38, 86, -1, 89, 87, 39, 31, -1, 88, 89, 31, 30, -1, 30, 31, 39, 38, -1, 38, 39, 87, 86, -1, 86, 87, 89, 88])
1644         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080])
1645         m3.setConnectivity(c, cI)
1646         m3.checkConsistency()
1647         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1648         grpIds = DataArrayInt([2,7,12,17,95,99,103,107,129,133,137,141]); grpIds.setName("group")
1649         mfu = MEDFileUMesh()
1650         mfu.setMeshAtLevel(0, m3)
1651         mfu.setMeshAtLevel(-1, m2)
1652         mfu.setGroupsAtLevel(-1, [grpIds])
1653         nNod = m3.getNumberOfNodes()
1654         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1655         m3_bis = mfu.getMeshAtLevel(0)
1656         m3_bis.checkConsistency()
1657         m2_bis = mfu.getMeshAtLevel(-1)
1658         m2_bis.checkConsistency()
1659         self.assertEqual(nNod+22, mfu.getNumberOfNodes())
1660         self.assertEqual(nNod+22, m3_bis.getNumberOfNodes())
1661         self.assertEqual(nNod+22, m2_bis.getNumberOfNodes())
1662         self.assertEqual([0, 3, 12, 13, 16, 17, 18, 19, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89], nodesDup.getValues())
1663         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1664         self.assertEqual(set([0, 1, 2, 3, 24, 25, 26, 27, 28, 29, 30, 31]), set(cells1.getValues()))
1665         self.assertEqual(set([4, 5, 6, 7, 20, 21, 22, 23, 32, 33, 34, 35]), set(cells2.getValues()))
1666         self.assertEqual([2, 7, 12, 17, 95, 99, 103, 107, 129, 133, 137, 141],mfu.getGroupArr(-1,"group").getValues())
1667         self.assertEqual([151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1668         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1669         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1670         pass
1671
1672     def testBuildInnerBoundary8(self):
1673         """ 3D test where the crack leaves 'naked' cells. If we call a 'close-to-crack cell' a cell which shares a face with the M1 group,
1674          a 'naked cell' is a cell that has some node duplicated, but which do not share any face with a 'close-to-crack cell'. In this case
1675          it is tricky to decide whether this cell should be renumbered or not ...
1676          Warning: on the mesh below some points have already been doubled by a previous cut. 
1677         """
1678         m3 = MEDCouplingUMesh('box', 3)
1679         coo = DataArrayDouble([(0,15,0),(0,5,0),(3,5,0),(5,5,0),(5,15,0),(5,20,0),(0,20,0),(15,20,0),(15,15,0),(20,15,0),(20,20,0),(20,5,0),(15,5,0),(15,0,0),(20,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),
1680         (3,3,0),(0,0,0),(0,3,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(0,5,10),(0,5,20),(0,5,30),(0,5,40),(3,5,10),(3,5,20),(3,5,30),(3,5,40),(5,5,10),(5,5,20),(5,5,30),(5,5,40),(5,15,10),(5,15,20),(5,15,30),
1681         (5,15,40),(5,20,10),(5,20,20),(5,20,30),(5,20,40),(0,20,10),(0,20,20),(0,20,30),(0,20,40),(15,20,10),(15,20,20),(15,20,30),(15,20,40),(15,15,10),(15,15,20),(15,15,30),(15,15,40),(20,15,10),(20,15,20),
1682         (20,15,30),(20,15,40),(20,20,10),(20,20,20),(20,20,30),(20,20,40),(20,5,10),(20,5,20),(20,5,30),(20,5,40),(15,5,10),(15,5,20),(15,5,30),(15,5,40),(15,0,10),(15,0,20),(15,0,30),(15,0,40),(20,0,10),
1683         (20,0,20),(20,0,30),(20,0,40),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,-1.60551e-25,30),(5,-1.60551e-25,40),(5,3,10),(5,3,20),(5,3,30),(5,3,40),(3,0,10),(3,0,20),(3,0,30),(3,0,40),(3,3,10),(3,3,20),
1684         (3,3,30),(3,3,40),(0,0,10),(0,0,20),(0,0,30),(0,0,40),(0,3,10),(0,3,20),(0,3,30),(0,3,40),(0,9,0),(3,9,0),(20,9,0),(0,9,10),(0,9,20),(0,9,30),(0,9,40),(3,9,10),(3,9,20),(3,9,30),(3,9,40),(5,9,30),
1685         (5,9,40),(20,9,10),(20,9,20),(20,9,30),(20,9,40),(15,9,30),(15,9,40),(0,15,0),(20,15,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(5,15,30),(5,15,40),(15,15,30),(15,15,40),(20,15,10),(20,15,20),(20,15,30),
1686         (20,15,40)])
1687         m3.setCoords(coo)
1688         c = DataArrayInt([31, 5, 4, 124, 6, -1, 41, 45, 126, 37, -1, 5, 41, 37, 4, -1, 4, 37, 126, 124, -1, 124, 126, 45, 6, -1, 6, 45, 41, 5, 31, 41, 37, 126, 45, -1, 42, 46, 127, 38, -1, 41, 42, 38, 37, -1, 37, 38, 127, 126, -1, 126, 127, 46, 45, -1, 45, 46, 42, 41, 31, 42, 38, 127, 46, -1, 43, 47, 128, 130, -1, 42, 43, 130, 38, -1, 38, 130, 128, 127, -1, 127, 128, 47, 46, -1, 46, 47, 43, 42, 31, 43, 130, 128, 47,
1689         -1, 44, 48, 129, 131, -1, 43, 44, 131, 130, -1, 130, 131, 129, 128, -1, 128, 129, 48, 47, -1, 47, 48, 44, 43, 31, 7, 8, 4, 5, -1, 49, 41, 37, 53, -1, 7, 49, 53, 8, -1, 8, 53, 37, 4, -1, 4, 37, 41, 5, -1, 5, 41, 49, 7, 31, 49, 53, 37, 41, -1, 50, 42, 38, 54, -1, 49, 50, 54, 53, -1, 53, 54, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 50, 49, 31, 50, 54, 38, 42, -1, 51, 43, 130, 132, -1, 50, 51, 132, 54, -1, 54, 132,
1690         130, 38, -1, 38, 130, 43, 42, -1, 42, 43, 51, 50, 31, 51, 132, 130, 43, -1, 52, 44, 131, 133, -1, 51, 52, 133, 132, -1, 132, 133, 131, 130, -1, 130, 131, 44, 43, -1, 43, 44, 52, 51, 31, 125, 8, 7, 10, -1, 134, 61, 49, 53, -1, 125, 134, 53, 8, -1, 8, 53, 49, 7, -1, 7, 49, 61, 10, -1, 10, 61, 134, 125, 31, 134, 53, 49, 61, -1, 135, 62, 50, 54, -1, 134, 135, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1,
1691         61, 62, 135, 134, 31, 135, 54, 50, 62, -1, 136, 63, 51, 132, -1, 135, 136, 132, 54, -1, 54, 132, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 136, 135, 31, 136, 132, 51, 63, -1, 137, 64, 52, 133, -1, 136, 137, 133, 132, -1, 132, 133, 52, 51, -1, 51, 52, 64, 63, -1, 63, 64, 137, 136, 31, 107, 12, 8, 9, -1, 118, 57, 53, 69, -1, 107, 118, 69, 12, -1, 12, 69, 53, 8, -1, 8, 53, 57, 9, -1, 9, 57, 118, 107, 31, 118, 69,
1692         53, 57, -1, 119, 58, 54, 70, -1, 118, 119, 70, 69, -1, 69, 70, 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 119, 118, 31, 119, 70, 54, 58, -1, 120, 59, 55, 122, -1, 119, 120, 122, 70, -1, 70, 122, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 120, 119, 31, 120, 122, 55, 59, -1, 121, 60, 56, 123, -1, 120, 121, 123, 122, -1, 122, 123, 56, 55, -1, 55, 56, 60, 59, -1, 59, 60, 121, 120, 31, 13, 12, 11, 14, -1, 73, 77, 65, 69,
1693         -1, 13, 73, 69, 12, -1, 12, 69, 65, 11, -1, 11, 65, 77, 14, -1, 14, 77, 73, 13, 31, 73, 69, 65, 77, -1, 74, 78, 66, 70, -1, 73, 74, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 78, 77, -1, 77, 78, 74, 73, 31, 74, 70, 66, 78, -1, 75, 79, 67, 71, -1, 74, 75, 71, 70, -1, 70, 71, 67, 66, -1, 66, 67, 79, 78, -1, 78, 79, 75, 74, 31, 75, 71, 67, 79, -1, 76, 80, 68, 72, -1, 75, 76, 72, 71, -1, 71, 72, 68, 67, -1, 67, 68, 80,
1694         79, -1, 79, 80, 76, 75, 31, 17, 18, 16, 15, -1, 89, 81, 85, 93, -1, 17, 89, 93, 18, -1, 18, 93, 85, 16, -1, 16, 85, 81, 15, -1, 15, 81, 89, 17, 31, 89, 93, 85, 81, -1, 90, 82, 86, 94, -1, 89, 90, 94, 93, -1, 93, 94, 86, 85, -1, 85, 86, 82, 81, -1, 81, 82, 90, 89, 31, 90, 94, 86, 82, -1, 91, 83, 87, 95, -1, 90, 91, 95, 94, -1, 94, 95, 87, 86, -1, 86, 87, 83, 82, -1, 82, 83, 91, 90, 31, 91, 95, 87, 83, -1, 92, 84,
1695         88, 96, -1, 91, 92, 96, 95, -1, 95, 96, 88, 87, -1, 87, 88, 84, 83, -1, 83, 84, 92, 91, 31, 19, 20, 18, 17, -1, 97, 89, 93, 101, -1, 19, 97, 101, 20, -1, 20, 101, 93, 18, -1, 18, 93, 89, 17, -1, 17, 89, 97, 19, 31, 97, 101, 93, 89, -1, 98, 90, 94, 102, -1, 97, 98, 102, 101, -1, 101, 102, 94, 93, -1, 93, 94, 90, 89, -1, 89, 90, 98, 97, 31, 98, 102, 94, 90, -1, 99, 91, 95, 103, -1, 98, 99, 103, 102, -1, 102, 103,
1696         95, 94, -1, 94, 95, 91, 90, -1, 90, 91, 99, 98, 31, 99, 103, 95, 91, -1, 100, 92, 96, 104, -1, 99, 100, 104, 103, -1, 103, 104, 96, 95, -1, 95, 96, 92, 91, -1, 91, 92, 100, 99, 31, 1, 2, 18, 20, -1, 25, 101, 93, 29, -1, 1, 25, 29, 2, -1, 2, 29, 93, 18, -1, 18, 93, 101, 20, -1, 20, 101, 25, 1, 31, 25, 29, 93, 101, -1, 26, 102, 94, 30, -1, 25, 26, 30, 29, -1, 29, 30, 94, 93, -1, 93, 94, 102, 101, -1, 101, 102,
1697         26, 25, 31, 26, 30, 94, 102, -1, 27, 103, 95, 31, -1, 26, 27, 31, 30, -1, 30, 31, 95, 94, -1, 94, 95, 103, 102, -1, 102, 103, 27, 26, 31, 27, 31, 95, 103, -1, 28, 104, 96, 32, -1, 27, 28, 32, 31, -1, 31, 32, 96, 95, -1, 95, 96, 104, 103, -1, 103, 104, 28, 27, 31, 3, 4, 8, 12, -1, 33, 69, 53, 37, -1, 3, 33, 37, 4, -1, 4, 37, 53, 8, -1, 8, 53, 69, 12, -1, 12, 69, 33, 3, 31, 33, 37, 53, 69, -1, 34, 70, 54, 38, -1,
1698         33, 34, 38, 37, -1, 37, 38, 54, 53, -1, 53, 54, 70, 69, -1, 69, 70, 34, 33, 31, 34, 38, 54, 70, -1, 116, 122, 55, 39, -1, 34, 116, 39, 38, -1, 38, 39, 55, 54, -1, 54, 55, 122, 70, -1, 70, 122, 116, 34, 31, 116, 39, 55, 122, -1, 117, 123, 56, 40, -1, 116, 117, 40, 39, -1, 39, 40, 56, 55, -1, 55, 56, 123, 122, -1, 122, 123, 117, 116, 31, 16, 18, 2, 3, -1, 85, 33, 29, 93, -1, 16, 85, 93, 18, -1, 18, 93, 29, 2,
1699         -1, 2, 29, 33, 3, -1, 3, 33, 85, 16, 31, 85, 93, 29, 33, -1, 86, 34, 30, 94, -1, 85, 86, 94, 93, -1, 93, 94, 30, 29, -1, 29, 30, 34, 33, -1, 33, 34, 86, 85, 31, 86, 94, 30, 34, -1, 87, 35, 31, 95, -1, 86, 87, 95, 94, -1, 94, 95, 31, 30, -1, 30, 31, 35, 34, -1, 34, 35, 87, 86, 31, 87, 95, 31, 35, -1, 88, 36, 32, 96, -1, 87, 88, 96, 95, -1, 95, 96, 32, 31, -1, 31, 32, 36, 35, -1, 35, 36, 88, 87, 31, 4, 3, 106,
1700         105, 0, -1, 37, 21, 108, 112, 33, -1, 3, 4, 37, 33, -1, 106, 3, 33, 112, -1, 105, 106, 112, 108, -1, 0, 105, 108, 21, -1, 4, 0, 21, 37, 31, 37, 33, 112, 108, 21, -1, 38, 22, 109, 113, 34, -1, 33, 37, 38, 34, -1, 112, 33, 34, 113, -1, 108, 112, 113, 109, -1, 21, 108, 109, 22, -1, 37, 21, 22, 38, 31, 38, 34, 113, 109, 22, -1, 39, 23, 110, 114, 116, -1, 34, 38, 39, 116, -1, 113, 34, 116, 114, -1, 109, 113, 114, 110,
1701         -1, 22, 109, 110, 23, -1, 38, 22, 23, 39, 31, 39, 116, 114, 110, 23, -1, 40, 24, 111, 115, 117, -1, 116, 39, 40, 117, -1, 114, 116, 117, 115, -1, 110, 114, 115, 111, -1, 23, 110, 111, 24, -1, 39, 23, 24, 40, 31, 16, 3, 12, 13, 15, -1, 85, 81, 73, 69, 33, -1, 3, 16, 85, 33, -1, 12, 3, 33, 69, -1, 13, 12, 69, 73, -1, 15, 13, 73, 81, -1, 16, 15, 81, 85, 31, 85, 33, 69, 73, 81, -1, 86, 82, 74, 70, 34, -1, 33, 85,
1702         86, 34, -1, 69, 33, 34, 70, -1, 73, 69, 70, 74, -1, 81, 73, 74, 82, -1, 85, 81, 82, 86, 31, 86, 34, 70, 74, 82, -1, 87, 83, 75, 71, 35, -1, 34, 86, 87, 35, -1, 70, 34, 35, 71, -1, 74, 70, 71, 75, -1, 82, 74, 75, 83, -1, 86, 82, 83, 87, 31, 87, 35, 71, 75, 83, -1, 88, 84, 76, 72, 36, -1, 35, 87, 88, 36, -1, 71, 35, 36, 72, -1, 75, 71, 72, 76, -1, 83, 75, 76, 84, -1, 87, 83, 84, 88])
1703         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080, 1110, 1140, 1170, 1200, 1237, 1274, 1311, 1348, 1385, 1422, 1459, 1496])
1704         m3.setConnectivity(c, cI)
1705         m3.checkConsistency()
1706         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1707         grpIds = DataArrayInt([2,7,12,17,101,106,111,116,160,164,170,173,176,179]); grpIds.setName("group")
1708         mfu = MEDFileUMesh()
1709         mfu.setMeshAtLevel(0, m3)
1710         mfu.setMeshAtLevel(-1, m2)
1711         mfu.setGroupsAtLevel(-1, [grpIds])
1712         nNod = m3.getNumberOfNodes()
1713         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1714         m3_bis = mfu.getMeshAtLevel(0)
1715         m3_bis.checkConsistency()
1716         m2_bis = mfu.getMeshAtLevel(-1)
1717         m2_bis.checkConsistency()
1718         self.assertEqual(nNod+23, mfu.getNumberOfNodes())
1719         self.assertEqual(nNod+23, m3_bis.getNumberOfNodes())
1720         self.assertEqual(nNod+23, m2_bis.getNumberOfNodes())
1721         self.assertEqual([5, 15, 16, 35, 36, 39, 40, 41, 42, 43, 44, 81, 82, 83, 84, 85, 86, 87, 88, 116, 117, 130, 131], nodesDup.getValues())
1722         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1723         self.assertEqual(set([0, 1, 2, 3, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39]), set(cells1.getValues()))
1724         self.assertEqual(set([4, 5, 6, 7, 42, 43, 44, 45, 46, 47]), set(cells2.getValues()))
1725         self.assertEqual([2, 7, 12, 17, 101, 106, 111, 116, 160, 164, 170, 173, 176, 179],mfu.getGroupArr(-1,"group").getValues())
1726         self.assertEqual([212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1727         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1728         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1729         pass
1730
1731     def testBuildInnerBoundary9(self):
1732         """ 3D test where the crack is performed so that two non-connex parts are found facing one single connex part on the other side
1733         of the crack. 
1734         """
1735         m3 = MEDCouplingUMesh('box', 3)
1736         coo = DataArrayDouble([(0,4.6,0),(3,4.6,0),(5,4.6,0),(15,4.6,0),(15,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0),(3,3.8,0),(0,0,0),(0,3.8,0),(0,4.6,10),(0,4.6,20),(3,4.6,10),(3,4.6,20),(5,4.6,10),(5,4.6,20),(15,4.6,10),(15,4.6,20),(15,0,10),(15,0,20),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,3,10),(5,3,20),(3,0,10),(3,0,20),(3,3.8,10),(3,3.8,20),(0,0,10),(0,0,20),(0,3.8,10),(0,3.8,20),(3,3,0),(0,3,0),(3,3,10),(3,3,20),(0,3,10),(0,3,20)])
1737         m3.setCoords(coo)
1738         c = DataArrayInt([31, 7, 33, 6, 5, -1, 25, 21, 23, 35, -1, 7, 25, 35, 33, -1, 33, 35, 23, 6, -1, 6, 23, 21, 5, -1, 5, 21, 25, 7, 31, 25, 35, 23, 21, -1, 26, 22, 24, 36, -1, 25, 26, 36, 35, -1, 35, 36, 24, 23, -1, 23, 24, 22, 21, -1, 21, 22, 26, 25, 31, 9, 34, 33, 7, -1, 29, 25, 35, 37, -1, 9, 29, 37, 34, -1, 34, 37, 35, 33, -1, 33, 35, 25, 7, -1, 7, 25, 29, 9, 31, 29, 37, 35, 25, -1, 30, 26, 36, 38, -1, 29, 30, 38, 37, -1, 37, 38, 36, 35, -1, 35, 36, 26, 25, -1, 25, 26, 30, 29, 31, 0, 1, 8, 10, -1, 11, 31, 27, 13, -1, 0, 11, 13, 1, -1, 1, 13, 27, 8, -1, 8, 27, 31, 10, -1, 10, 31, 11, 0, 31, 11, 13, 27, 31, -1, 12, 32, 28, 14, -1, 11, 12, 14, 13, -1, 13, 14, 28, 27, -1, 27, 28, 32, 31, -1, 31, 32, 12, 11, 31, 6, 8, 1, 2, -1, 23, 15, 13, 27, -1, 6, 23, 27, 8, -1, 8, 27, 13, 1, -1, 1, 13, 15, 2, -1, 2, 15, 23, 6, 31, 23, 27, 13, 15, -1, 24, 16, 14, 28, -1, 23, 24, 28, 27, -1, 27, 28, 14, 13, -1, 13, 14, 16, 15, -1, 15, 16, 24, 23, 31, 6, 2, 3, 4, 5, -1, 23, 21, 19, 17, 15, -1, 2, 6, 23, 15, -1, 3, 2, 15, 17, -1, 4, 3, 17, 19, -1, 5, 4, 19, 21, -1, 6, 5, 21, 23, 31, 23, 15, 17, 19, 21, -1, 24, 22, 20, 18, 16, -1, 15, 23, 24, 16, -1, 17, 15, 16, 18, -1, 19, 17, 18, 20, -1, 21, 19, 20, 22, -1, 23, 21, 22, 24])
1739         cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 277, 314])
1740         m3.setConnectivity(c, cI)
1741         m3.checkConsistency()
1742         m2, _, _,_,_ = m3.buildDescendingConnectivity()
1743         grpIds = DataArrayInt([4,9,35,39]); grpIds.setName("group")
1744         mfu = MEDFileUMesh()
1745         mfu.setMeshAtLevel(0, m3)
1746         mfu.setMeshAtLevel(-1, m2)
1747         mfu.setGroupsAtLevel(-1, [grpIds])
1748         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1749         grpIds = DataArrayInt([4,9,35,39]); grpIds.setName("group")
1750         mfu = MEDFileUMesh()
1751         mfu.setMeshAtLevel(0, m3)
1752         mfu.setMeshAtLevel(-1, m2)
1753         mfu.setGroupsAtLevel(-1, [grpIds])
1754         nNod = m3.getNumberOfNodes()
1755         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1756         m3_bis = mfu.getMeshAtLevel(0)
1757         m3_bis.checkConsistency()
1758         m2_bis = mfu.getMeshAtLevel(-1)
1759         m2_bis.checkConsistency()
1760         self.assertEqual(nNod+9, mfu.getNumberOfNodes())
1761         self.assertEqual(nNod+9, m3_bis.getNumberOfNodes())
1762         self.assertEqual(nNod+9, m2_bis.getNumberOfNodes())
1763         self.assertEqual([2, 5, 6, 15, 16, 21, 22, 23, 24], nodesDup.getValues())
1764         self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues())
1765         self.assertEqual(set([0,1,6,7]), set(cells1.getValues()))
1766         self.assertEqual(set([8,9]), set(cells2.getValues()))
1767         self.assertEqual([4,9,35,39],mfu.getGroupArr(-1,"group").getValues())
1768         self.assertEqual([49, 50, 51, 52],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1769         m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity()
1770         m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999)
1771         pass
1772
1773     def testBuildInnerBoundary10(self):
1774         """ 2D tests where some cells are touching the M1 group with just a node, and are **not** neighbor
1775         with any cells touching the M1 group by a face.
1776         """
1777         m2 = MEDCouplingUMesh("mesh", 2)
1778         coo = DataArrayDouble([0.0, 0.0, 1.0, 0.0, 2.0, 0.0, 3.0, 0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 1.0, 3.0, 1.0, 0.0, 2.0, 1.0, 2.0, 2.0, 2.0, 3.0, 2.0, 2.5, 0.0, 3.0, 0.5], 14, 2)
1779         m2.setCoords(coo)
1780         c = DataArrayInt([ 3,12,2,6,  3,3,12,6,  3,13,3,6,  3,7,13,6,   4, 1, 0, 4, 5,   4, 2, 1, 5, 6,   4, 5, 4, 8, 9,   4, 6, 5, 9, 10,   4, 7, 6, 10, 11])
1781         cI = DataArrayInt([0,4,8,12,16,21,26,31,36,41])
1782         m2.setConnectivity(c, cI)
1783         m2.checkConsistency()
1784         m1, _, _,  _, _ = m2.buildDescendingConnectivity()
1785         grpIds = DataArrayInt([8,14]); grpIds.setName("group")
1786         mfu = MEDFileUMesh()
1787         mfu.setMeshAtLevel(0, m2)
1788         mfu.setMeshAtLevel(-1, m1)
1789         mfu.setGroupsAtLevel(-1, [grpIds])
1790         nNod = m2.getNumberOfNodes()
1791         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1792         m2_bis = mfu.getMeshAtLevel(0)
1793         m2_bis.checkConsistency()
1794         m1_bis = mfu.getMeshAtLevel(-1)
1795         m1_bis.checkConsistency()
1796         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1797         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1798         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1799         self.assertEqual([6, 7], nodesDup.getValues())
1800         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1801         self.assertEqual(set([0,1,2,3,5]), set(cells1.getValues()))
1802         self.assertEqual(set([7,8]), set(cells2.getValues()))
1803         self.assertEqual([8,14],mfu.getGroupArr(-1,"group").getValues())
1804         self.assertEqual([22,23],mfu.getGroupArr(-1,"group_dup").getValues())
1805         pass
1806
1807     @WriteInTmpDir
1808     def testBasicConstructors(self):
1809         GeneratePyfile18(self)
1810         fname="Pyfile18.med"
1811         TestWriteUMeshesRW1(self)
1812         m=MEDFileMesh.New(fname)
1813         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1814         m=MEDFileMesh.New(fname)
1815         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1816         m=MEDFileUMesh(fname)
1817         m=MEDFileUMesh()
1818         self.internalMEDMesh6()
1819         m=MEDFileCMesh("MEDFileMesh5.med")
1820         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1821         m=MEDFileCMesh()
1822         m=MEDFileMeshMultiTS()
1823         m=MEDFileMeshMultiTS(fname)
1824         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1825         m=MEDFileMeshes()
1826         m=MEDFileMeshes(fname)
1827         m=MEDFileField1TS()
1828         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1829         m=MEDFileFieldMultiTS()
1830         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1831         m=MEDFileFields()
1832         m=MEDFileFields(fname)
1833         m=MEDFileData()
1834         m=MEDFileData(fname)
1835         #
1836         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1837         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1838         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1839         m=MEDCouplingCMesh()
1840         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1841         m=MEDCouplingFieldTemplate(ON_NODES)
1842         m=MEDCouplingMultiFields([])
1843         m=MEDCouplingFieldOverTime([])
1844         pass
1845
1846     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1847     @WriteInTmpDir
1848     def testBugSemiPartialField(self):
1849         fname="Pyfile46.med"
1850         m=MEDLoaderDataForTest.build2DMesh_3()
1851         m=m[:10] ; m.setName("mesh")
1852         f=m.getMeasureField(False)
1853         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1854         f.setTime(5.5,3,4)
1855         f.setName("SemiPartialField")
1856         #
1857         f1=f[:6] ; f1.getMesh().setName(m.getName())
1858         f2=f[6:] ; f2.getMesh().setName(m.getName())
1859         #
1860         mm=MEDFileUMesh.New()
1861         mm.setMeshAtLevel(0,m)
1862         ff=MEDFileField1TS.New()
1863         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1864         mm.write(fname,2)
1865         ff.write(fname,0)
1866         #
1867         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1868         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1869         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1870         #
1871         fread.checkConsistencyLight()
1872         fread2.checkConsistencyLight()
1873         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1874         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1875         pass
1876
1877     @WriteInTmpDir
1878     def testUnPolyze1(self):
1879         fname="Pyfile47.med"
1880         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1881         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]
1882         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1883         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]]))
1884         mm.write(fname,2)
1885         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1886         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1887         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1888         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1889         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1890         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1891         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1892         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1893         # to test
1894         mm.setRenumFieldArr(0,None)
1895         mm.setFamilyFieldArr(-1,None)
1896         pass
1897
1898     @WriteInTmpDir
1899     def testUnPolyze2(self):
1900         fname="Pyfile48.med"
1901         mfd=MEDFileData.New()
1902         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1903         meshes=MEDFileMeshes.New()
1904         meshes.pushMesh(mm)
1905         mfd.setMeshes(meshes)
1906         fields=MEDFileFields.New()
1907         mfd.setFields(fields)
1908         ff=MEDFileFieldMultiTS.New()
1909         fields.pushField(ff)
1910         #
1911         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1912         f0_0.setTime(9.5,3,4)
1913         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1914         f0_0.setArray(da)
1915         f0_0.setMesh(mm.getMeshAtLevel(0))
1916         ff.appendFieldNoProfileSBT(f0_0)
1917         ff0=ff.getTimeStepAtPos(0)
1918         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1919         f0_1.setTime(9.5,3,4)
1920         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1921         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1922         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1923         f0_1.setArray(da)
1924         ff0.setFieldProfile(f0_1,mm,0,pfl)
1925         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1926         f0_2.setTime(9.5,3,4)
1927         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1928         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
1929         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1930         f0_2.setArray(da)
1931         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1932         mfd.getFields().shallowCpyGlobs(ff0)
1933         #
1934         mfd.unPolyzeMeshes()
1935         #
1936         fmts=mfd.getFields()[0]
1937         self.assertEqual(fmts.getNumberOfTS(),1)
1938         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1939         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1940         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))])
1941         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1942         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1943         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1944         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1945         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1946         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1947         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1948         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))
1949         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1950         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1951         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1952         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1953         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1954         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])
1955         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1956         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1957         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1958         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])
1959         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1960         #
1961         mfd.write(fname,2)
1962         pass
1963
1964     @WriteInTmpDir
1965     def testGaussWriteOnPfl1(self):
1966         fname="Pyfile49.med"
1967         fname2="Pyfile50.med"
1968         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1969         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1970         mQ8.allocateCells(1)
1971         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1972         mQ8.finishInsertingCells()
1973         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1974         mQ4.allocateCells(1)
1975         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1976         mQ4.finishInsertingCells()
1977         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1978         mT3.allocateCells(1)
1979         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1980         mT3.finishInsertingCells()
1981
1982         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.]]
1983         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1984         ms[:]=(elt.deepCopy() for elt in ms)
1985         for m,t in zip(ms,tr):
1986             d=m.getCoords() ; d+= t
1987             pass
1988         m=MEDCouplingUMesh.MergeUMeshes(ms)
1989         m.setName("mesh")
1990         m2=m[:13] ; m2.setName(m.getName())
1991         ### 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.
1992         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1993         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1994         f.setMesh(m2)
1995         f.setTime(4.5,1,2)
1996         da=DataArrayDouble(34) ; da.iota(3.)
1997         f.setArray(da)
1998         f.setName("fieldCellOnPflWithoutPfl")
1999         fInvalid=f.deepCopy()
2000         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])
2001         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])
2002         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])
2003         f.checkConsistencyLight()
2004         fInvalid2=fInvalid.deepCopy()
2005         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
2006         #
2007         mm=MEDFileUMesh()
2008         mm.setMeshAtLevel(0,m)
2009         mm.write(fname,2)
2010         #
2011         f1ts=MEDFileField1TS.New()
2012         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
2013         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
2014         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
2015         f1ts.setFieldProfile(f,mm,0,pfl)
2016         f1ts.write(fname,0)
2017         #
2018         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
2019         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
2020         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
2021         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
2022         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
2023         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
2024         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
2025         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
2026         #
2027         dataRead=MEDFileData.New(fname)
2028         mRead=dataRead.getMeshes()[0]
2029         f1tsRead=dataRead.getFields()[0][0]
2030         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2031         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2032         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
2033         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2034         f2_bis.checkConsistencyLight()
2035         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
2036         #
2037         WriteField(fname2,f,True)
2038         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2039         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
2040         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
2041         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2042         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
2043         m2=m[pfl] ; m2.setName(m.getName())
2044         f.setMesh(m2)
2045         f.setTime(4.5,1,2)
2046         da=DataArrayDouble(35) ; da.iota(3.)
2047         f.setArray(da)
2048         f.setName("fieldCellOnPflWithoutPfl2")
2049         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
2050         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])
2051         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])
2052         f.checkConsistencyLight()
2053         #
2054         mm=MEDFileUMesh()
2055         mm.setMeshAtLevel(0,m)
2056         mm.write(fname,2)
2057         f1ts=MEDFileField1TS.New()
2058         f1ts.setFieldProfile(f,mm,0,pfl)
2059         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
2060         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
2061         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
2062         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
2063         f1ts.write(fname,0)
2064         dataRead=MEDFileData.New(fname)
2065         mRead=dataRead.getMeshes()[0]
2066         f1tsRead=dataRead.getFields()[0][0]
2067         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2068         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2069         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
2070         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2071         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2072         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
2073         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2074         #
2075         WriteField(fname2,f,True)
2076         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2077         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
2078         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2079         ## Use case 3 : no pfl but creation of pfls due to gauss pts
2080         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
2081         f.setMesh(m)
2082         f.setTime(4.5,1,2)
2083         da=DataArrayDouble(60) ; da.iota(3.)
2084         f.setArray(da)
2085         f.setName("fieldCellWithoutPfl")
2086         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])
2087         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])
2088         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])
2089         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])
2090         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])
2091         f.checkConsistencyLight()
2092         mm=MEDFileUMesh()
2093         mm.setMeshAtLevel(0,m)
2094         f1ts=MEDFileField1TS.New()
2095         f1ts.setFieldNoProfileSBT(f)
2096         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
2097         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
2098         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
2099         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
2100         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
2101         mm.write(fname,2)
2102         f1ts.write(fname,0)
2103         #
2104         dataRead=MEDFileData.New(fname)
2105         mRead=dataRead.getMeshes()[0]
2106         f1tsRead=dataRead.getFields()[0][0]
2107         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
2108         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2109         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
2110         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2111         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2112         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
2113         #
2114         WriteField(fname2,f,True)
2115         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
2116         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
2117         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
2118         pass
2119
2120     # Testing profile on nodes when the profile is identity but not on all nodes.
2121     @WriteInTmpDir
2122     def testMEDFieldPflOnNode1(self):
2123         fname="Pyfile51.med"
2124         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)
2125         m0=MEDCouplingUMesh("Mesh",2)
2126         m0.allocateCells(5)
2127         m0.insertNextCell(NORM_TRI3,[1,4,2])
2128         m0.insertNextCell(NORM_TRI3,[4,5,2])
2129         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2130         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2131         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2132         m0.finishInsertingCells()
2133         m0.setCoords(coo)
2134         m1=MEDCouplingUMesh(m0.getName(),1)
2135         m1.allocateCells(9)
2136         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2137         for i in range(9):
2138             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2139             pass
2140         m1.finishInsertingCells()
2141         m1.setCoords(coo)
2142         #
2143         m=MEDFileUMesh()
2144         m.setMeshAtLevel(0,m0)
2145         m.setMeshAtLevel(-1,m1)
2146         #
2147         dt=3 ; it=2 ; tim=4.5
2148         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2149         fieldNode0.setName("fieldNode0")
2150         fieldNode0.setTime(tim,dt,it)
2151         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
2152         arr=DataArrayDouble([10,11,12,13,14])
2153         fieldNode0.setArray(arr)
2154         f0=MEDFileField1TS()
2155         f0.setFieldProfile(fieldNode0,m,0,pfl0)
2156         m.write(fname,2) ; f0.write(fname,0)
2157         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
2158         fieldNode1.setName("fieldNode1")
2159         fieldNode1.setTime(tim,dt,it)
2160         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2161         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2162         fieldNode1.setArray(arr1)
2163         f1=MEDFileField1TS()
2164         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
2165         f1.write(fname,0)
2166         del m,f0,m0,m1,f1
2167         ## Reading from file
2168         m=MEDFileMesh.New(fname)
2169         m0=m.getMeshAtLevel(0)
2170         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
2171         fieldNode0.setMesh(m00)
2172         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
2173         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
2174         ff0_1.checkConsistencyLight()
2175         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
2176         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
2177         ff0_2.checkConsistencyLight()
2178         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
2179         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
2180         ff0_3.checkConsistencyLight()
2181         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
2182         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
2183         ff0_4.checkConsistencyLight()
2184         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
2185         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
2186         m1=m.getMeshAtLevel(-1)
2187         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
2188         fieldNode1.setMesh(m10)
2189         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
2190         ff1_1.checkConsistencyLight()
2191         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
2192         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
2193         ff1_2.checkConsistencyLight()
2194         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
2195         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
2196         ff1_3.checkConsistencyLight()
2197         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
2198         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
2199         ff1_4.checkConsistencyLight()
2200         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2201         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]
2202         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]
2203         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]
2204         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
2205         arr_r.setName(fieldNode1.getArray().getName())
2206         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
2207         pfl1_r.setName(pfl1.getName())
2208         self.assertTrue(pfl1_r.isEqual(pfl1))
2209         pass
2210
2211         # Testing profile on nodes when the profile is identity but not on all nodes.
2212     @WriteInTmpDir
2213     def testMEDFieldPflOnCell1(self):
2214         fname="Pyfile52.med"
2215         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)
2216         m0=MEDCouplingUMesh("Mesh",2)
2217         m0.allocateCells(5)
2218         m0.insertNextCell(NORM_TRI3,[1,4,2])
2219         m0.insertNextCell(NORM_TRI3,[4,5,2])
2220         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
2221         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
2222         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
2223         m0.finishInsertingCells()
2224         m0.setCoords(coo)
2225         m1=MEDCouplingUMesh(m0.getName(),1)
2226         m1.allocateCells(9)
2227         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
2228         for i in range(9):
2229             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
2230             pass
2231         m1.finishInsertingCells()
2232         m1.setCoords(coo)
2233         #
2234         m=MEDFileUMesh()
2235         m.setMeshAtLevel(0,m0)
2236         m.setMeshAtLevel(-1,m1)
2237         #
2238         dt=3 ; it=2 ; tim=4.5
2239         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2240         fieldCell0.setName("fieldCell0")
2241         fieldCell0.setTime(tim,dt,it)
2242         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
2243         arr=DataArrayDouble([10,11,12])
2244         fieldCell0.setArray(arr)
2245         f0=MEDFileField1TS()
2246         f0.setFieldProfile(fieldCell0,m,0,pfl0)
2247         m.write(fname,2) ; f0.write(fname,0)
2248         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
2249         fieldCell1.setName("fieldCell1")
2250         fieldCell1.setTime(tim,dt,it)
2251         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
2252         arr1=DataArrayDouble([20,21,22,23,24,25,26])
2253         fieldCell1.setArray(arr1)
2254         f1=MEDFileField1TS()
2255         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
2256         f1.write(fname,0)
2257         del m,f0,m0,m1,f1
2258         ## Reading from file
2259         m=MEDFileMesh.New(fname)
2260         m0=m.getMeshAtLevel(0)
2261         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
2262         fieldCell0.setMesh(m00)
2263         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
2264         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
2265         ff0_1.checkConsistencyLight()
2266         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
2267         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
2268         ff0_2.checkConsistencyLight()
2269         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
2270         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
2271         ff0_3.checkConsistencyLight()
2272         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
2273         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
2274         ff0_4.checkConsistencyLight()
2275         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
2276         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
2277         m1=m.getMeshAtLevel(-1)
2278         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
2279         fieldCell1.setMesh(m10)
2280         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
2281         ff1_1.checkConsistencyLight()
2282         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
2283         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
2284         ff1_2.checkConsistencyLight()
2285         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
2286         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
2287         ff1_3.checkConsistencyLight()
2288         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
2289         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2290         ff1_4.checkConsistencyLight()
2291         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2292         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]
2293         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]
2294         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]
2295         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2296         arr_r.setName(fieldCell1.getArray().getName())
2297         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2298         pfl1_r.setName(pfl1.getName())
2299         self.assertTrue(pfl1_r.isEqual(pfl1))
2300         pass
2301
2302     @WriteInTmpDir
2303     def testMEDFileUMeshZipCoords1(self):
2304         m=MEDFileUMesh()
2305         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2306         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])
2307         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2308         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2309         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2310         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2311         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2312         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2313         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2314         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2315         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2316         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2317         o2n=m.zipCoords()
2318         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2319         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2320         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2321         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2322         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2323         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2324         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2325         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2326         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2327         pass
2328
2329     @WriteInTmpDir
2330     def testMEDUMeshAddNodeGroup1(self):
2331         fname="Pyfile53.med"
2332         m=MEDFileUMesh()
2333         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2334         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])
2335         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2336         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2337         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2338         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2339         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2340         #
2341         mm=m.deepCopy()
2342         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2343         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2344         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2345         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2346         mm.setFamilyId("MyFam",2)
2347         mm.setFamilyId("MyOtherFam",3)
2348         mm.setFamilyId("MyOther-1",-1)
2349         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2350         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2351         #
2352         self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2353         #
2354         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2355         mm.addNodeGroup(daTest)
2356         self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2357         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
2358         #
2359         expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2360         self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2361         #
2362         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2363         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2364         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2365             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2366             pass
2367         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2368         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2369         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2370         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2371         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2372             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2373             pass
2374         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2375         da=DataArrayInt([3,12]) ; da.setName("grp0")
2376         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2377         da.setValues([1])
2378         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2379         mm.write(fname,2)
2380         mm=MEDFileMesh.New(fname)
2381         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2382         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2383         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2384             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2385             pass
2386         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2387         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2388         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2389         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2390         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2391             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2392             pass
2393         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2394         da=DataArrayInt([3,12]) ; da.setName("grp0")
2395         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2396         da.setValues([1])
2397         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2398         pass
2399
2400     @WriteInTmpDir
2401     def testMEDUMeshAddGroup1(self):
2402         fname="Pyfile54.med"
2403         m=MEDFileUMesh()
2404         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2405         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2406         for i in range(7):
2407             m0.insertNextCell(NORM_TRI3,[1,2,1])
2408             pass
2409         for i in range(4):
2410             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2411             pass
2412         for i in range(2):
2413             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2414             pass
2415         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2416         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2417         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2418         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2419         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2420         #
2421         mm=m.deepCopy()
2422         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2423         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2424         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2425         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2426         mm.setFamilyId("MyFam",2)
2427         mm.setFamilyId("MyOtherFam",3)
2428         mm.setFamilyId("MyOther-1",-1)
2429         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2430         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2431         #
2432         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2433         mm.addGroup(0,daTest)
2434         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2435         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2436         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2437             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2438             pass
2439         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2440         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2441         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2442         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2443         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2444             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2445             pass
2446         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2447         da=DataArrayInt([3,12]) ; da.setName("grp0")
2448         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2449         da.setValues([1])
2450         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2451         mm.write(fname,2)
2452         mm=MEDFileMesh.New(fname)
2453         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2454         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2455         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2456             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2457             pass
2458         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2459         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2460         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2461         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2462         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2463             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2464             pass
2465         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2466         da=DataArrayInt([3,12]) ; da.setName("grp0")
2467         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2468         da.setValues([1])
2469         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2470         pass
2471
2472     @WriteInTmpDir
2473     def testHeapMem1(self):
2474         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2475         a.alloc(0,1)
2476         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2477         #
2478         m=MEDCouplingCMesh()
2479         arr=DataArrayDouble(10,1) ; arr.iota(0)
2480         m.setCoords(arr,arr)
2481         m=m.buildUnstructured()
2482         m.setName("mm")
2483         f=m.getMeasureField(False)
2484         cooMem = 100 * 2 * 8
2485         nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8
2486         indexMem = 82 * MEDCouplingSizeOfIDs()//8
2487         meshMem = cooMem + nodalMem + indexMem
2488         self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac)))
2489         delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently
2490         self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac)))
2491         #
2492         mm=MEDFileUMesh()
2493         mm.setMeshAtLevel(0,m)
2494         self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac)))
2495         ff=MEDFileField1TS()
2496         ff.setFieldNoProfileSBT(f)
2497         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2498         #
2499         fff=MEDFileFieldMultiTS()
2500         fff.appendFieldNoProfileSBT(f)
2501         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2502         f.setTime(1.,0,-1)
2503         fff.appendFieldNoProfileSBT(f)
2504         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2505         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2506         f2=f[:50]
2507         f2.setTime(2.,1,-1)
2508         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2509         fff.appendFieldProfile(f2,mm,0,pfl)
2510         self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac))
2511         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac)))
2512         self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8))  + 30 + 4 * strMulFac))
2513         pass
2514
2515     def internalCurveLinearMesh1(self):
2516         fname="Pyfile55.med"
2517         mesh=MEDCouplingCurveLinearMesh();
2518         mesh.setTime(2.3,4,5);
2519         mesh.setTimeUnit("us");
2520         mesh.setName("Example of Cuve linear mesh");
2521         mesh.setDescription("buildCLMesh");
2522         a1=DataArrayDouble(3*20,1);
2523         a1.iota(7.) ; a1.rearrange(3);
2524         mesh.setCoords(a1);
2525         mesh.setNodeGridStructure([4,5]);
2526         mesh.checkConsistencyLight();
2527         #
2528         m=MEDFileCurveLinearMesh()
2529         m.setMesh(mesh)
2530         d=DataArrayInt(20) ; d.iota(4)
2531         m.setFamilyFieldArr(1,d)
2532         d3=DataArrayInt(20) ; d3.iota(400)
2533         m.setRenumFieldArr(1,d3)
2534         d2=DataArrayInt(12) ; d2.iota(40)
2535         m.setFamilyFieldArr(0,d2)
2536         d4=DataArrayInt(21) ; d4.iota(4000)
2537         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2538         d4.popBackSilent()
2539         m.setRenumFieldArr(1,d4)
2540         m.write(fname,2)
2541         #
2542         m1=MEDFileCurveLinearMesh(fname)
2543         mm=m1.getMesh()
2544         self.assertTrue(mm.isEqual(mesh,1e-12))
2545         self.assertEqual(mm.getSpaceDimension(),3)
2546         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2547         #
2548         m1=MEDFileMesh.New(fname)
2549         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2550         self.assertTrue(isinstance(m1.getUnivName(),str))
2551         self.assertTrue(len(m1.getUnivName())!=0)
2552         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2553         pass
2554
2555     @WriteInTmpDir
2556     def testCurveLinearMesh1(self):
2557         self.internalCurveLinearMesh1()
2558
2559     @WriteInTmpDir
2560     def testParameters1(self):
2561         self.internalParameters1()
2562
2563     def internalParameters1(self):
2564         fname="Pyfile56.med"
2565         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2566         mm=MEDFileCMesh() ; mm.setMesh(m)
2567         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2568         data=MEDFileData()
2569         p=MEDFileParameters()
2570         data.setParams(p) ; data.setMeshes(ms)
2571         pts=MEDFileParameterMultiTS()
2572         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2573         pts.appendValue(1,2,3.4,567.89)
2574         pts.appendValue(2,3,5.6,999.123)
2575         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2576         p.pushParam(pts) ; p.pushParam(pts2)
2577         data.write(fname,2)
2578         p2=MEDFileParameters(fname)
2579         self.assertTrue(p.isEqual(p2,1e-14)[0])
2580         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2581         p3=p.deepCopy()
2582         pts4=pts2.deepCopy()
2583         pts3=pts2.deepCopy()
2584         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2585         pts2.eraseTimeStepIds([0])
2586         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2587         del pts3[[3.4]]
2588         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2589         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2590         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2591         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2592         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2593         p=p3
2594         self.assertTrue(p.isEqual(p2,1e-14)[0])
2595         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2596         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2597         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2598         self.assertEqual(p.getParamsNames(),('A','B'))
2599         ptsr=MEDFileParameterMultiTS(fname,"B")
2600         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2601         ptsr=MEDFileParameterMultiTS(fname)
2602         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2603         p1tsr=MEDFileParameterDouble1TS(fname)
2604         self.assertEqual(p1tsr.getName(),"A")
2605         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2606         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2607         self.assertEqual(p1tsr.getName(),"B")
2608         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2609         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2610         self.assertEqual(p1tsr.getName(),"B")
2611         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2612         data2=MEDFileData(fname)
2613         self.assertEqual(2,data2.getNumberOfParams())
2614         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2615         pass
2616
2617     @WriteInTmpDir
2618     def testNamesOnCellAndNodesInMeshes1(self):
2619         fname="Pyfile58.med"
2620         fname2="Pyfile59.med"
2621         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2622         m1=m.buildDescendingConnectivity()[0]
2623         m1.sortCellsInMEDFileFrmt()
2624         #
2625         mm=MEDFileUMesh()
2626         mm.setMeshAtLevel(0,m)
2627         mm.setMeshAtLevel(-1,m1)
2628         namesCellL0=DataArrayAsciiChar(6,16)
2629         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2630         mm.setNameFieldAtLevel(0,namesCellL0)
2631         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2632         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2633         mm.setNameFieldAtLevel(-1,namesCellL1)
2634         namesNodes=namesCellL1.subArray(4,16)
2635         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2636         mm.setNameFieldAtLevel(1,namesNodes)
2637         mm.write(fname,2)
2638         #
2639         mmr=MEDFileMesh.New(fname)
2640         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2641         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2642         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2643         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2644         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2645         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2646         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2647         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2648         mmCpy=mm.deepCopy()
2649         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2650         # remove names on nodes
2651         mmCpy.setNameFieldAtLevel(1,None)
2652         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2653         mm.setNameFieldAtLevel(1,None)
2654         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2655         mm.setNameFieldAtLevel(-1,None)
2656         mm.write(fname,2)
2657         mmr=MEDFileMesh.New(fname)
2658         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2659         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2660         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2661         #
2662         c=MEDCouplingCMesh()
2663         arr=DataArrayDouble([0.,1.1,2.3])
2664         c.setCoords(arr,arr)
2665         c.setName("cmesh")
2666         cc=MEDFileCMesh()
2667         cc.setMesh(c)
2668         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2669         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2670         cc.write(fname2,2)
2671         ccr=MEDFileMesh.New(fname2)
2672         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2673         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2674         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2675         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2676         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2677         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2678         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2679         ccCpy=cc.deepCopy()
2680         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2681         pass
2682
2683     @WriteInTmpDir
2684     def testToExportInExamples1(self):
2685         m=MEDCouplingCMesh()
2686         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2687         m.setCoords(arr,arr)
2688         m=m.buildUnstructured() ; m.setName("mesh")
2689         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2690         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2691         m2=m.computeSkin()
2692         mm=MEDFileUMesh()
2693         mm.setMeshAtLevel(0,m)
2694         mm.setMeshAtLevel(-1,m2)
2695         mm.setGroupsAtLevel(0,[grp1,grp2])
2696         mm.write("example.med",2)
2697         #
2698         m0=mm.getMeshAtLevel(0)
2699         m1=mm.getMeshAtLevel(-1)
2700         grp1=mm.getGroupArr(0,"grp1")
2701         grp2=mm.getGroupArr(0,"grp2")
2702         grps=[grp1,grp2]
2703         whichGrp=DataArrayInt(m0.getNumberOfCells())
2704         whichGrp.fillWithValue(-1)
2705         for grpId,grp in enumerate(grps):
2706             whichGrp[grp]=grpId
2707             pass
2708         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2709         e,f=a.areCellsIncludedIn(m1,2)
2710         self.assertTrue(e)
2711         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2712         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2713         c2.transformWithIndArr(whichGrp)
2714         splitOfM1=len(grps)*[None]
2715         for grpId,grp in enumerate(grps):
2716             tmp=c2.findIdsEqual(grpId)
2717             splitOfM1[grpId]=tmp
2718             pass
2719         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2720         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2721         pass
2722
2723     @WriteInTmpDir
2724     def testBugCorrection1(self):
2725         fs=MEDFileFields()
2726         fs.resize(3)
2727         self.assertEqual(fs[0],None)
2728         self.assertEqual(3,len(fs))
2729         pass
2730
2731     @WriteInTmpDir
2732     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2733         f1Name="Pyfile60.med"
2734         f2Name="Pyfile61.med"
2735         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2736         d1.write(f1Name,2)
2737         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2738         d2.write(f2Name,2)
2739         # reading and compare
2740         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2741         for mn in d1.getMeshes().getMeshesNames():
2742             m1=d1.getMeshes()[mn]
2743             m2=d2.getMeshes()[mn]
2744             for lev in m1.getNonEmptyLevels():
2745                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2746                 for grpName in grpsNames:
2747                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2748                     pass
2749                 pass
2750             pass
2751         for fieldn in d1.getFields().getFieldsNames():
2752             f1=d1.getFields()[fieldn]
2753             f2=d2.getFields()[fieldn]
2754             for it,order,tim in f1.getTimeSteps():
2755                 f1t=f1[it,order]
2756                 f2t=f2[it,order]
2757                 if len(f1t.getPflsReallyUsed())!=0:
2758                     # profile case
2759                     for lev in f1t.getNonEmptyLevels()[1]:
2760                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2761                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2762                         self.assertTrue(pfl1.isEqual(pfl2))
2763                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2764                         pass
2765                     pass
2766                 else:
2767                     # no profile case
2768                     for lev in f1t.getNonEmptyLevels()[1]:
2769                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2770                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2771                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2772                         pass
2773                     pass
2774                 pass
2775             pass
2776         pass
2777
2778     @WriteInTmpDir
2779     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2780         m=MEDCouplingCMesh()
2781         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2782         m.setCoords(arr,arr,arr)
2783         m=m.buildUnstructured()
2784         m2=m.buildDescendingConnectivity()[0]
2785         m.setName("mesh")
2786         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2787         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2788         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2789         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2790         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2791         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2792         mm=MEDFileUMesh()
2793         mm.setMeshAtLevel(0,m)
2794         mm.setGroupsAtLevel(0,[g1,g2])
2795         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2796         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2797         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2798         mm.normalizeFamIdsMEDFile()
2799         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2800         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2801         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2802         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2803         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2804         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2805         for g in mm.getGroupsOnSpecifiedLev(0):
2806             for f in mm.getFamiliesIdsOnGroup(g):
2807                 self.assertTrue(f<0)
2808                 pass
2809             pass
2810         #
2811         mm=MEDFileUMesh()
2812         mm.setMeshAtLevel(0,m)
2813         mm.setMeshAtLevel(-1,m2)
2814         mm.setGroupsAtLevel(0,[g1,g2])
2815         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2816         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2817         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2818         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2819         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2820         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2821         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2822         mm.normalizeFamIdsMEDFile()
2823         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2824         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2825         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2826         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2827         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2828         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2829         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2830         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2831         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2832         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2833         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2834         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2835         for lev in [0,-1]:
2836             for g in mm.getGroupsOnSpecifiedLev(lev):
2837                 for f in mm.getFamiliesIdsOnGroup(g):
2838                     self.assertTrue(f<0)
2839                     pass
2840                 pass
2841             pass
2842          #
2843         mm=MEDFileUMesh()
2844         mm.setMeshAtLevel(0,m)
2845         mm.setMeshAtLevel(-1,m2)
2846         mm.setGroupsAtLevel(0,[g1,g2])
2847         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2848         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2849         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2850         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2851         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2852         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2853         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2854         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2855         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2856         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2857         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2858         mm.normalizeFamIdsMEDFile()
2859         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2860         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2861         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2862         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2863         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2864         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2865         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2866         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2867         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2868         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2869         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2870         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2871         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2872         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2873         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2874         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2875         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2876         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2877         for lev in [0,-1]:
2878             for g in mm.getGroupsOnSpecifiedLev(lev):
2879                 for f in mm.getFamiliesIdsOnGroup(g):
2880                     self.assertTrue(f<0)
2881                     pass
2882                 pass
2883             pass
2884         for g in mm.getGroupsOnSpecifiedLev(1):
2885             for f in mm.getFamiliesIdsOnGroup(g):
2886                 self.assertTrue(f>0)
2887                 pass
2888             pass
2889         pass
2890
2891     @WriteInTmpDir
2892     def testNonRegressionMantis22212ChangeGrpName(self):
2893         fileName="Pyfile62.med"
2894         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2895         m=MEDFileUMesh.New()
2896         m.setCoords(m2.getCoords())
2897         m.setMeshAtLevel(0,m2)
2898         m.setMeshAtLevel(-1,m1)
2899         m.setMeshAtLevel(-2,m0)
2900         m.setFamilyFieldArr(0,f2)
2901         m.setFamilyFieldArr(-1,f1)
2902         m.setFamilyFieldArr(-2,f0)
2903         m.setFamilyFieldArr(1,p)
2904         nbOfFams=len(fns)
2905         for i in range(nbOfFams):
2906             m.addFamily(fns[i],fids[i])
2907             pass
2908         nbOfGrps=len(grpns)
2909         for i in range(nbOfGrps):
2910             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2911             pass
2912         m.setName(m2.getName())
2913         m.setDescription(m2.getDescription())
2914         m.write(fileName,2)
2915         #
2916         mm0=MEDFileMesh.New(fileName)
2917         mm1=MEDFileMesh.New(fileName)
2918         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2919         for name in groupNamesIni:
2920             mm1.changeGroupName(name,name+'N')
2921             pass
2922         mm1.write(fileName,2)
2923         del mm1
2924         #
2925         mm2=MEDFileMesh.New(fileName)
2926         for name in groupNamesIni:
2927             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2928                 arr0=mm0.getGroupArr(lev,name)
2929                 arr2=mm2.getGroupArr(lev,name+'N')
2930                 arr0.setName(name+'N')
2931                 self.assertTrue(arr0.isEqual(arr2))
2932                 pass
2933             pass
2934         pass
2935
2936     @WriteInTmpDir
2937     def testInt32InMEDFileFieldStar1(self):
2938         self.internalInt32InMEDFileFieldStar1()
2939
2940     def internalInt32InMEDFileFieldStar1(self):
2941         fname="Pyfile63.med"
2942         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2943         f1=f1.convertToIntField()
2944         m1=f1.getMesh()
2945         mm1=MEDFileUMesh.New()
2946         mm1.setCoords(m1.getCoords())
2947         mm1.setMeshAtLevel(0,m1)
2948         mm1.setName(m1.getName())
2949         mm1.write(fname,2)
2950         ff1=MEDFileIntField1TS()
2951         ff1.setFieldNoProfileSBT(f1)
2952         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2953         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2954         self.assertTrue(a.isEqual(f1,1e-12,0))
2955         ff1.write(fname,0)
2956         a,b=ff1.getUndergroundDataArrayExt()
2957         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2958         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2959         ff2=MEDFileAnyTypeField1TS.New(fname)
2960         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2961         self.assertEqual(ff2.getTime(),[0,1,2.0])
2962         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2963         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2964         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2965         self.assertTrue(a.isEqual(f1,1e-12,0))
2966         ff2.setTime(1,2,3.)
2967         c=ff2.getUndergroundDataArray() ; c*=2
2968         ff2.write(fname,0) # 2 time steps in
2969         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2970         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2971         self.assertEqual(len(ffs1),2)
2972         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2973         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2974         self.assertTrue(a.isEqual(f1,1e-12,0))
2975         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2976         self.assertTrue(a.isEqual(f1,1e-12,0))
2977         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2978         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2979         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2980         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2981         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2982         bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2983         for it in ffs1:
2984             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2985             bc+=a.getArray()
2986             pass
2987         self.assertTrue(bc.isEqual(3*f1.getArray()))
2988         nf1=MEDCouplingFieldInt(ON_NODES)
2989         nf1.setTime(9.,10,-1)
2990         nf1.setMesh(f1.getMesh())
2991         narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2992         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2993         nff1=MEDFileIntField1TS.New()
2994         nff1.setFieldNoProfileSBT(nf1)
2995         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2996         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2997         nff1.write(fname,0)
2998         #
2999         nf2=MEDCouplingFieldInt(ON_NODES)
3000         nf2.setTime(19.,20,-11)
3001         nf2.setMesh(f1.getMesh())
3002         narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
3003         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
3004         nff2=MEDFileIntField1TS.New()
3005         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
3006         nff2.setFieldProfile(nf2,mm1,0,npfl)
3007         nff2.getFieldWithProfile(ON_NODES,0,mm1)
3008         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
3009         self.assertTrue(b.isEqual(npfl))
3010         self.assertTrue(a.isEqual(narr2))
3011         nff2.write(fname,0)
3012         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
3013         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
3014         self.assertTrue(b.isEqual(npfl))
3015         self.assertTrue(a.isEqual(narr2))
3016         #
3017         nf3=MEDCouplingFieldDouble(ON_NODES)
3018         nf3.setName("VectorFieldOnNodesDouble")
3019         nf3.setTime(29.,30,-21)
3020         nf3.setMesh(f1.getMesh())
3021         nf3.setArray(f1.getMesh().getCoords())
3022         nff3=MEDFileField1TS.New()
3023         nff3.setFieldNoProfileSBT(nf3)
3024         nff3.write(fname,0)
3025         fs=MEDFileFields(fname)
3026         self.assertEqual(len(fs),4)
3027         ffs=[it for it in fs]
3028         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
3029         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
3030         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
3031         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
3032         #
3033         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
3034         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
3035         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
3036         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
3037         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
3038         #
3039         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
3040         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
3041         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
3042         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
3043         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
3044         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
3045         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
3046         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
3047         #
3048         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
3049         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
3050         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
3051         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
3052         pass
3053
3054     @WriteInTmpDir
3055     def testMEDFileFields1(self):
3056         fname="Pyfile64.med"
3057         f1=MEDCouplingFieldDouble(ON_NODES)
3058         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
3059         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
3060         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
3061         f1.setMesh(m)
3062         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
3063         f1.setArray(arr)
3064         f1.setName("Field1")
3065         ff1=MEDFileField1TS.New()
3066         ff1.setFieldNoProfileSBT(f1)
3067         self.assertEqual(ff1.getDtUnit(),"us")
3068         ff1.write(fname,0)
3069         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3070         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3071         #
3072         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3073         ff1s=MEDFileFieldMultiTS(fname,"Field1")
3074         ff1s.setName("Field2")
3075         ff1s.write(fname,0)
3076         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
3077         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3078         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
3079         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
3080         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
3081         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
3082         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
3083         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
3084         pass
3085
3086     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
3087     @WriteInTmpDir
3088     def testMEDFileFields2(self):
3089         fname="Pyfile65.med"
3090         # to check that all is initialize
3091         MEDFileField1TS().__str__()
3092         MEDFileFieldMultiTS().__str__()
3093         # building a mesh containing 4 tri3 + 5 quad4
3094         tri=MEDCouplingUMesh("tri",2)
3095         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3096         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3097         tris = [tri.deepCopy() for i in range(4)]
3098         for i,elt in enumerate(tris): elt.translate([i,0])
3099         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3100         quad=MEDCouplingUMesh("quad",2)
3101         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3102         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3103         quads = [quad.deepCopy() for i in range(5)]
3104         for i,elt in enumerate(quads): elt.translate([5+i,0])
3105         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3106         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3107         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3108         #
3109         fmts0_0=MEDFileFieldMultiTS()
3110         fmts0_1=MEDFileFieldMultiTS()
3111         # time steps
3112         for i in range(10):
3113             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3114             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3115             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3116             f.setTime(float(i+1)+0.1,i+1,-i-1)
3117             fmts0_0.appendFieldNoProfileSBT(f)
3118             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
3119             self.assertEqual(fmts0_1.getName(),name1)
3120             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3121             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3122             if i>1:
3123                 # components names have been modified to generate errors
3124                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
3125                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
3126                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
3127                 f1ts.setInfo(['aa [bb]','eee [dd]'])
3128                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
3129                 pass
3130             # add a mismatch of nb of compos
3131             pass
3132         fmts0_2=fmts0_0.deepCopy()
3133         fmts0_3=fmts0_0.deepCopy()
3134         fmts0_4=fmts0_0.deepCopy()
3135         fmts0_5=fmts0_0.shallowCpy()
3136         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)
3137         del fmts0_2[::2]
3138         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
3139         del fmts0_3[[1.1,(6,-6),9]]
3140         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
3141         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
3142         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
3143         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
3144         fmts0_7=fmts0_4[::-3]
3145         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
3146         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
3147         #
3148         fs0=MEDFileFields()
3149         fs0.pushField(fmts0_0)
3150         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3151         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3152         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3153         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
3154         fs0.write(fname,2)
3155         fs0=MEDFileFields(fname)
3156         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
3157         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
3158         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3159         del fs1[["2ndField",3]]
3160         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
3161         fs2=fs0[[0,"4thField"]]
3162         self.assertTrue(isinstance(fs2,MEDFileFields))
3163         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
3164         #
3165         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
3166         pass
3167
3168     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
3169     @WriteInTmpDir
3170     def testMEDFileFields3(self):
3171         fname="Pyfile66.med"
3172         # building a mesh containing 4 tri3 + 5 quad4
3173         tri=MEDCouplingUMesh("tri",2)
3174         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3175         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3176         tris = [tri.deepCopy() for i in range(4)]
3177         for i,elt in enumerate(tris): elt.translate([i,0])
3178         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3179         quad=MEDCouplingUMesh("quad",2)
3180         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3181         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3182         quads = [quad.deepCopy() for i in range(5)]
3183         for i,elt in enumerate(quads): elt.translate([5+i,0])
3184         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3185         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3186         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3187         #
3188         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3189         #
3190         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3191         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3192         fmts0_0=MEDFileFieldMultiTS()
3193         fmts0_1=MEDFileFieldMultiTS()
3194         # time steps
3195         for i in range(10):
3196             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3197             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3198             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3199             f.setTime(float(i+1)+0.1,i+1,-i-1)
3200             fmts0_0.appendFieldProfile(f,mm,0,pfl)
3201             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3202             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
3203             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
3204             pass
3205         #
3206         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
3207         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
3208         fmts0_0.zipPflsNames()
3209         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
3210         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
3211         fmts0_2=fmts0_0.deepCopy()
3212         fmts0_3=fmts0_0.deepCopy()
3213         fmts0_4=fmts0_0.deepCopy()
3214         fs0=MEDFileFields()
3215         fs0.pushField(fmts0_0)
3216         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
3217         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
3218         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
3219         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
3220         #
3221         fmts0_5=MEDFileFieldMultiTS()
3222         for i in range(7):
3223             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
3224             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
3225             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3226             f.setTime(float(i+1)+0.1,i+1,-i-1)
3227             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
3228             pass
3229         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
3230         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
3231         fs0.checkGlobsCoherency()
3232         fs0.write(fname,0)
3233         pass
3234
3235     @WriteInTmpDir
3236     def testSplitComponents1(self):
3237         fname="Pyfile67.med"
3238         # building a mesh containing 4 tri3 + 5 quad4
3239         tri=MEDCouplingUMesh("tri",2)
3240         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3241         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3242         tris = [tri.deepCopy() for i in range(4)]
3243         for i,elt in enumerate(tris): elt.translate([i,0])
3244         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3245         quad=MEDCouplingUMesh("quad",2)
3246         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3247         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3248         quads = [quad.deepCopy() for i in range(5)]
3249         for i,elt in enumerate(quads): elt.translate([5+i,0])
3250         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3251         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3252         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3253         #
3254         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3255         #
3256         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3257         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
3258         fs=MEDFileFields()
3259         fmts0_1=MEDFileFieldMultiTS()
3260         # time steps
3261         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
3262         for i in range(10):
3263             name1="1stField"
3264             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3265             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
3266             f.setTime(float(i+1)+0.1,i+1,-i-1)
3267             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
3268             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
3269             pass
3270         fs.pushField(fmts0_1)
3271         self.assertEqual(1,len(fs))
3272         l=fmts0_1.splitComponents()
3273         self.assertEqual(3,len(l))
3274         for elt in l: self.assertEqual(10,len(elt))
3275         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
3276         for elt in l:
3277             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
3278             pass
3279         fs.pushFields(l)
3280         self.assertEqual(4,len(fs))
3281         for elt in fs: self.assertEqual(10,len(elt))
3282         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
3283         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3284         #
3285         fs.write(fname,0) ; del fs
3286         #
3287         fs1=MEDFileFields(fname)
3288         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
3289         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
3290         self.assertEqual(4,len(fs1))
3291         for i in range(10):
3292             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
3293                 f1ts=fs1[fieldName][i]
3294                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3295                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
3296                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
3297                 pass
3298             f1ts=fs1["1stField"][i]
3299             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
3300             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
3301             self.assertTrue(d.isEqual(f.getArray(),1e-13))
3302             pass
3303         pass
3304
3305     @WriteInTmpDir
3306     def testMEDFileFieldConvertTo1(self):
3307         fname="Pyfile68.med"
3308         # building a mesh containing 4 tri3 + 5 quad4
3309         tri=MEDCouplingUMesh("tri",2)
3310         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3311         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3312         tris = [tri.deepCopy() for i in range(4)]
3313         for i,elt in enumerate(tris): elt.translate([i,0])
3314         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3315         quad=MEDCouplingUMesh("quad",2)
3316         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3317         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3318         quads = [quad.deepCopy() for i in range(5)]
3319         for i,elt in enumerate(quads): elt.translate([5+i,0])
3320         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3321         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3322         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3323         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3324         #
3325         ff0=MEDFileField1TS()
3326         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")
3327         f0.checkConsistencyLight()
3328         ff0.setFieldNoProfileSBT(f0)
3329         #
3330         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3331         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3332         #
3333         ff0i=ff0.convertToInt()
3334         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3335         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3336         #
3337         ff1=ff0i.convertToDouble()
3338         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3339         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3340         # For int64
3341         ff0i64=ff0.convertToInt64()
3342         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3343         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3344         #
3345         ff2=ff0i64.convertToDouble()
3346         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3347         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3348         # With profiles
3349         del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp
3350         ff0=MEDFileField1TS()
3351         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")
3352         f0.checkConsistencyLight()
3353         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3354         ff0.setFieldProfile(f0,mm,0,pfl)
3355         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3356         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3357         #
3358         ff0i=ff0.convertToInt()
3359         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3360         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3361         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3362         #
3363         ff1=ff0i.convertToDouble()
3364         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3365         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3366         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3367         # For Int64
3368         ff0i64=ff0.convertToInt64()
3369         self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS))
3370         self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp)
3371         self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray()))
3372         #
3373         ff2=ff0i64.convertToDouble()
3374         self.assertTrue(isinstance(ff2,MEDFileField1TS))
3375         self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3376         self.assertEqual(ff2.getFieldSplitedByType(),fspExp)
3377         ## MultiTimeSteps
3378         ff0=MEDFileFieldMultiTS()
3379         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)
3380         f0.checkConsistencyLight()
3381         ff0.appendFieldProfile(f0,mm,0,pfl)
3382         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)
3383         f0.checkConsistencyLight()
3384         ff0.appendFieldProfile(f0,mm,0,pfl)
3385         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)
3386         f0.checkConsistencyLight()
3387         ff0.appendFieldProfile(f0,mm,0,pfl)
3388         ff1=ff0.convertToInt()
3389         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3390         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3391         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3392             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3393             arr=ff1.getUndergroundDataArray(dt,it)
3394             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3395             pass
3396         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3397         #
3398         mm.write(fname,2)
3399         ff1.write(fname,0)
3400         #
3401         ff1=ff1.convertToDouble()
3402         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3403         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3404         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3405             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3406             arr=ff1.getUndergroundDataArray(dt,it)
3407             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3408             pass
3409         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3410         #
3411         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3412         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3413         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3414         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3415             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3416             arr=ff1.getUndergroundDataArray(dt,it)
3417             arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1))
3418             pass
3419         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3420         pass
3421
3422     @WriteInTmpDir
3423     def testMEDFileFieldPartialLoading(self):
3424         fname="Pyfile69.med"
3425         #
3426         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3427         a.alloc(0,1)
3428         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3429         # building a mesh containing 30 tri3 + 40 quad4
3430         tri=MEDCouplingUMesh("tri",2)
3431         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3432         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3433         tris = [tri.deepCopy() for i in range(30)]
3434         for i,elt in enumerate(tris): elt.translate([i,0])
3435         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3436         quad=MEDCouplingUMesh("quad",2)
3437         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3438         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3439         quads = [quad.deepCopy() for i in range(40)]
3440         for i,elt in enumerate(quads): elt.translate([40+i,0])
3441         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3442         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3443         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3444         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3445         #
3446         ff0=MEDFileField1TS()
3447         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")
3448         f0.checkConsistencyLight()
3449         ff0.setFieldNoProfileSBT(f0)
3450         ff0.write(fname,0)
3451         #
3452         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3453         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3454         # With profiles
3455         ff0=MEDFileField1TS()
3456         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")
3457         f0.checkConsistencyLight()
3458         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3459         ff0.setFieldProfile(f0,mm,0,pfl)
3460         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3461         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3462         ff0.write(fname,0)
3463         #
3464         ff0=MEDFileField1TS(fname,False)
3465         self.assertEqual(ff0.getName(),"FieldCell")
3466         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3467         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3468         heap_memory_ref=ff0.getHeapMemorySize()
3469         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3470         ff0.loadArrays() ##
3471         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3472         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3473         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3474         #
3475         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3476         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3477         heap_memory_ref=ff0.getHeapMemorySize()
3478         self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac)))
3479         ff0.loadArrays() ##
3480         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3481         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3482         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3483         ff0.loadArrays() ##
3484         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3485         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3486         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3487         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3488         ff0.loadArrays() ##
3489         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3490         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3491         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3492         ff0.loadArraysIfNecessary() ##
3493         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3494         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3495         heap_memory_ref=ff0.getHeapMemorySize()
3496         self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac)))
3497         ff0.unloadArrays()
3498         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3499         self.assertEqual(hmd,-800) # -50*8*2
3500         ff0.loadArrays() ##
3501         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3502         #
3503         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3504         heap_memory_ref=ff0.getHeapMemorySize()
3505         self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac)))
3506         ff0.loadArrays() ##
3507         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3508         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3509         #
3510         fieldName="FieldCellMultiTS"
3511         ff0=MEDFileFieldMultiTS()
3512         for t in range(20):
3513             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)
3514             f0.setTime(float(t)+0.1,t,100+t)
3515             f0.checkConsistencyLight()
3516             ff0.appendFieldNoProfileSBT(f0)
3517             pass
3518         ff0.write(fname,0)
3519         #
3520         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3521         heap_memory_ref=ff0.getHeapMemorySize()
3522         self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac))
3523         ff0.loadArrays()
3524         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3525         del ff0
3526         #
3527         ffs=MEDFileFields(fname,False)
3528         heap_memory_ref=ffs.getHeapMemorySize()
3529         self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac))
3530         ffs.loadArrays()
3531         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3532         pass
3533
3534     @WriteInTmpDir
3535     def testMEDFileMeshReadSelector1(self):
3536         mrs=MEDFileMeshReadSelector()
3537         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3538         mrs.__str__() ; mrs.__repr__()
3539         #
3540         mrs=MEDFileMeshReadSelector(0)
3541         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())
3542         mrs=MEDFileMeshReadSelector(1)
3543         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3544         mrs=MEDFileMeshReadSelector(2)
3545         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3546         mrs=MEDFileMeshReadSelector(3)
3547         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3548         mrs=MEDFileMeshReadSelector(4)
3549         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3550         mrs=MEDFileMeshReadSelector(5)
3551         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3552         mrs=MEDFileMeshReadSelector(6)
3553         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3554         mrs=MEDFileMeshReadSelector(7)
3555         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3556         mrs=MEDFileMeshReadSelector(8)
3557         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3558         mrs=MEDFileMeshReadSelector(9)
3559         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3560         mrs=MEDFileMeshReadSelector(10)
3561         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3562         mrs=MEDFileMeshReadSelector(11)
3563         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3564         mrs=MEDFileMeshReadSelector(12)
3565         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3566         mrs=MEDFileMeshReadSelector(13)
3567         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3568         mrs=MEDFileMeshReadSelector(14)
3569         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3570         mrs=MEDFileMeshReadSelector(15)
3571         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3572         mrs=MEDFileMeshReadSelector(16)
3573         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3574         mrs=MEDFileMeshReadSelector(17)
3575         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3576         mrs=MEDFileMeshReadSelector(18)
3577         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3578         mrs=MEDFileMeshReadSelector(19)
3579         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3580         mrs=MEDFileMeshReadSelector(20)
3581         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3582         mrs=MEDFileMeshReadSelector(21)
3583         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3584         mrs=MEDFileMeshReadSelector(22)
3585         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3586         mrs=MEDFileMeshReadSelector(23)
3587         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3588         mrs=MEDFileMeshReadSelector(24)
3589         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3590         mrs=MEDFileMeshReadSelector(25)
3591         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3592         mrs=MEDFileMeshReadSelector(26)
3593         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3594         mrs=MEDFileMeshReadSelector(27)
3595         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3596         mrs=MEDFileMeshReadSelector(28)
3597         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3598         mrs=MEDFileMeshReadSelector(29)
3599         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3600         mrs=MEDFileMeshReadSelector(30)
3601         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3602         mrs=MEDFileMeshReadSelector(31)
3603         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3604         mrs=MEDFileMeshReadSelector(32)
3605         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3606         mrs=MEDFileMeshReadSelector(33)
3607         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3608         mrs=MEDFileMeshReadSelector(34)
3609         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3610         mrs=MEDFileMeshReadSelector(35)
3611         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3612         mrs=MEDFileMeshReadSelector(36)
3613         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3614         mrs=MEDFileMeshReadSelector(37)
3615         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3616         mrs=MEDFileMeshReadSelector(38)
3617         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3618         mrs=MEDFileMeshReadSelector(39)
3619         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3620         mrs=MEDFileMeshReadSelector(40)
3621         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3622         mrs=MEDFileMeshReadSelector(41)
3623         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3624         mrs=MEDFileMeshReadSelector(42)
3625         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3626         mrs=MEDFileMeshReadSelector(43)
3627         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3628         mrs=MEDFileMeshReadSelector(44)
3629         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3630         mrs=MEDFileMeshReadSelector(45)
3631         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3632         mrs=MEDFileMeshReadSelector(46)
3633         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3634         mrs=MEDFileMeshReadSelector(47)
3635         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3636         mrs=MEDFileMeshReadSelector(48)
3637         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3638         mrs=MEDFileMeshReadSelector(49)
3639         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3640         mrs=MEDFileMeshReadSelector(50)
3641         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3642         mrs=MEDFileMeshReadSelector(51)
3643         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3644         mrs=MEDFileMeshReadSelector(52)
3645         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3646         mrs=MEDFileMeshReadSelector(53)
3647         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3648         mrs=MEDFileMeshReadSelector(54)
3649         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3650         mrs=MEDFileMeshReadSelector(55)
3651         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3652         mrs=MEDFileMeshReadSelector(56)
3653         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3654         mrs=MEDFileMeshReadSelector(57)
3655         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3656         mrs=MEDFileMeshReadSelector(58)
3657         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3658         mrs=MEDFileMeshReadSelector(59)
3659         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3660         mrs=MEDFileMeshReadSelector(60)
3661         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3662         mrs=MEDFileMeshReadSelector(61)
3663         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3664         mrs=MEDFileMeshReadSelector(62)
3665         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3666         mrs=MEDFileMeshReadSelector(63)
3667         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3668         #
3669         mrs=MEDFileMeshReadSelector(63)
3670         mrs.setCellFamilyFieldReading(False)
3671         self.assertEqual(mrs.getCode(),62)
3672         mrs.setCellFamilyFieldReading(True)
3673         self.assertEqual(mrs.getCode(),63)
3674         mrs.setNodeFamilyFieldReading(False)
3675         self.assertEqual(mrs.getCode(),61)
3676         mrs.setNodeFamilyFieldReading(True)
3677         self.assertEqual(mrs.getCode(),63)
3678         mrs.setCellNameFieldReading(False)
3679         self.assertEqual(mrs.getCode(),59)
3680         mrs.setCellNameFieldReading(True)
3681         self.assertEqual(mrs.getCode(),63)
3682         mrs.setNodeNameFieldReading(False)
3683         self.assertEqual(mrs.getCode(),55)
3684         mrs.setNodeNameFieldReading(True)
3685         self.assertEqual(mrs.getCode(),63)
3686         mrs.setCellNumFieldReading(False)
3687         self.assertEqual(mrs.getCode(),47)
3688         mrs.setCellNumFieldReading(True)
3689         self.assertEqual(mrs.getCode(),63)
3690         mrs.setNodeNumFieldReading(False)
3691         self.assertEqual(mrs.getCode(),31)
3692         mrs.setNodeNumFieldReading(True)
3693         self.assertEqual(mrs.getCode(),63)
3694         pass
3695
3696     @WriteInTmpDir
3697     def testPartialReadOfMeshes(self):
3698         fname="Pyfile70.med"
3699         # building a mesh containing 4 tri3 + 5 quad4
3700         tri=MEDCouplingUMesh("tri",2)
3701         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3702         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3703         tris = [tri.deepCopy() for i in range(4)]
3704         for i,elt in enumerate(tris): elt.translate([i,0])
3705         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3706         quad=MEDCouplingUMesh("quad",2)
3707         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3708         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3709         quads = [quad.deepCopy() for i in range(5)]
3710         for i,elt in enumerate(quads): elt.translate([5+i,0])
3711         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3712         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3713         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3714         m1=m.buildDescendingConnectivity()[0]
3715         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3716         #
3717         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3718         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3719         mm.setGroupsAtLevel(0,[grp0,grp1])
3720         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3721         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3722         mm.setGroupsAtLevel(-1,[grp2,grp3])
3723         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3724         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3725         mm.setGroupsAtLevel(1,[grp4,grp5])
3726         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3727         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3728         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3729         #
3730         mm.write(fname,2)
3731         ##
3732         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3733         b4_ref_heap_mem=mm.getHeapMemorySize()
3734         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3735         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3736         ref_heap_mem=mm.getHeapMemorySize()
3737         # check the gain of memory using 1GTUMesh instead of UMesh
3738         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
3739         #
3740         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3741         self.assertEqual(len(mm.getGroupsNames()),0)
3742         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3743         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3744         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3745         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3746         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3747         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3748         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3749         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3750         delta1=ref_heap_mem-mm.getHeapMemorySize()
3751         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3752         #
3753         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3754         self.assertEqual(len(mm.getGroupsNames()),6)
3755         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3756         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3757         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3758         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3759         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3760         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3761         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3762         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3763         delta2=ref_heap_mem-mm.getHeapMemorySize()
3764         self.assertTrue(delta2<delta1)
3765         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3766         #
3767         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3768         self.assertEqual(len(mm.getGroupsNames()),6)
3769         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3770         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3771         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3772         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3773         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3774         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3775         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3776         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3777         delta3=ref_heap_mem-mm.getHeapMemorySize()
3778         self.assertTrue(delta3<delta2)
3779         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3780         #
3781         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3782         self.assertEqual(len(mm.getGroupsNames()),6)
3783         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3784         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3785         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3786         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3787         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3788         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3789         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3790         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3791         delta4=ref_heap_mem-mm.getHeapMemorySize()
3792         self.assertTrue(delta4<delta3)
3793         self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
3794         #
3795         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3796         self.assertEqual(len(mm.getGroupsNames()),6)
3797         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3798         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3799         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3800         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3801         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3802         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3803         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3804         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3805         delta5=ref_heap_mem-mm.getHeapMemorySize()
3806         self.assertTrue(delta5<delta4)
3807         self.assertEqual(delta5,0)
3808         pass
3809
3810     # this test checks that setFieldProfile perform a check of the array length
3811     # compared to the profile length. This test also checks that mesh attribute of field
3812     # is not used by setFieldProfile (because across this test mesh is equal to None)
3813     @WriteInTmpDir
3814     def testCheckCompatibilityPfl1(self):
3815         # building a mesh containing 4 tri3 + 5 quad4
3816         tri=MEDCouplingUMesh("tri",2)
3817         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3818         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3819         tris = [tri.deepCopy() for i in range(4)]
3820         for i,elt in enumerate(tris): elt.translate([i,0])
3821         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3822         quad=MEDCouplingUMesh("quad",2)
3823         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3824         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3825         quads = [quad.deepCopy() for i in range(5)]
3826         for i,elt in enumerate(quads): elt.translate([5+i,0])
3827         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3828         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3829         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3830         m1=m.buildDescendingConnectivity()[0]
3831         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3832         #
3833         f1ts=MEDFileField1TS()
3834         f=MEDCouplingFieldDouble(ON_NODES)
3835         vals=DataArrayDouble(7) ; vals.iota(1000)
3836         f.setArray(vals)
3837         f.setName("anonymous") # f has no mesh it is not a bug
3838         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3839         f1ts.setFieldProfile(f,mm,0,pfl)
3840         #
3841         f1ts=MEDFileField1TS()
3842         f=MEDCouplingFieldDouble(ON_NODES)
3843         vals=DataArrayDouble(8) ; vals.iota(1000)
3844         f.setArray(vals)
3845         f.setName("anonymous") # f has no mesh it is not a bug
3846         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3847         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3848         #
3849         f1ts=MEDFileField1TS()
3850         f=MEDCouplingFieldDouble(ON_CELLS)
3851         vals=DataArrayDouble(7) ; vals.iota(1000)
3852         f.setArray(vals)
3853         f.setName("anonymous") # f has no mesh it is not a bug
3854         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3855         f1ts.setFieldProfile(f,mm,0,pfl)
3856         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3857         #
3858         f1ts=MEDFileField1TS()
3859         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3860         vals=DataArrayDouble(27) ; vals.iota(1000)
3861         f.setArray(vals)
3862         f.setName("anonymous") # f has no mesh it is not a bug
3863         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3864         f.setMesh(m[pfl])
3865         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])
3866         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3867         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])
3868         f.setMesh(None)
3869         f1ts.setFieldProfile(f,mm,0,pfl)
3870         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3871         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3872         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3873         vals=DataArrayDouble(27) ; vals.iota(1000)
3874         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3875         #
3876         f1ts=MEDFileField1TS()
3877         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3878         vals=DataArrayDouble(25) ; vals.iota(1000)
3879         f.setArray(vals)
3880         f.setName("anonymous") # f has no mesh it is not a bug
3881         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3882         f1ts.setFieldProfile(f,mm,0,pfl)
3883         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3884         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3885         f.setArray(vals2)
3886         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3887         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3888         #
3889         f1ts=MEDFileField1TS()
3890         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3891         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3892         f.setArray(vals)
3893         f1ts.setFieldProfile(f,mm,0,pfl)
3894         pass
3895
3896     @WriteInTmpDir
3897     def testWRMeshWithNoCells(self):
3898         fname="Pyfile71.med"
3899         a=DataArrayDouble(4) ; a.iota()
3900         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3901         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3902         m=MEDFileUMesh()
3903         m.setMeshAtLevel(0,m00)
3904         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3905         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3906         m.write(fname,2)
3907         del m,a,c,m0,m00
3908         #
3909         m=MEDFileMesh.New(fname)
3910         self.assertEqual((),m.getNonEmptyLevels())
3911         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))
3912         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3913         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3914         pass
3915
3916     @WriteInTmpDir
3917     def testWRQPolyg1(self):
3918         fname="Pyfile72.med"
3919         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3920         m.insertNextCell([0,2,1,3])
3921         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3922         #
3923         ms = [m.deepCopy() for i in range(4)]
3924         for i,elt in enumerate(ms):
3925             elt.translate([float(i)*1.5,0.])
3926             pass
3927         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3928         m0.convertAllToPoly()
3929         #
3930         ms = [m.deepCopy() for i in range(5)]
3931         for i,elt in enumerate(ms):
3932             elt.translate([float(i)*1.5,1.5])
3933             pass
3934         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3935         m1.convertAllToPoly()
3936         m1.convertLinearCellsToQuadratic()
3937         #
3938         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3939         ##
3940         mm=MEDFileUMesh()
3941         mm.setMeshAtLevel(0,m)
3942         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3943         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3944         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3945         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3946         ##
3947         mm.write(fname,2)
3948         del mm
3949         #
3950         mm_read=MEDFileUMesh(fname)
3951         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3952         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3953         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3954         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3955         ##
3956         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3957         f.setMesh(m)
3958         arr0=DataArrayDouble(9) ; arr0.iota()
3959         arr1=DataArrayDouble(9) ; arr1.iota(100)
3960         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3961         f.setArray(arr) ; f.checkConsistencyLight()
3962         f.setTime(5.6,1,2)
3963         ff=MEDFileField1TS()
3964         ff.setFieldNoProfileSBT(f)
3965         ff.write(fname,0)
3966         ##
3967         ff_read=MEDFileField1TS(fname)
3968         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3969         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3970         pass
3971
3972     @WriteInTmpDir
3973     def testLoadIfNecessaryOnFromScratchFields0(self):
3974         """
3975         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3976         """
3977         fname="Pyfile77.med"
3978         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3979         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3980         m.allocateCells()
3981         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3982         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3983         m.finishInsertingCells()
3984         #
3985         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3986         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3987         fs=MEDFileFields()
3988         arrs=4*[None]
3989         #
3990         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3991         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3992         f0.setTime(1.1,1,1)
3993         f0.setName("myELNOField")
3994         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3995         f0.setArray(arrs[0])
3996         ff0.appendFieldNoProfileSBT(f0)
3997         #
3998         f0.setTime(2.2,2,1)
3999         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
4000         f0.setArray(arrs[1])
4001         ff0.appendFieldNoProfileSBT(f0)
4002         #
4003         f0.setTime(3.3,3,1)
4004         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
4005         f0.setArray(arrs[2])
4006         ff0.appendFieldNoProfileSBT(f0)
4007         #
4008         f0.setTime(4.4,4,1)
4009         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
4010         f0.setArray(arrs[3])
4011         ff0.appendFieldNoProfileSBT(f0)
4012         #
4013         for i,arr in enumerate(arrs):
4014             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4015             fs[0][i].loadArraysIfNecessary()
4016             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4017             pass
4018         fs.loadArraysIfNecessary()
4019         for i,arr in enumerate(arrs):
4020             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4021             pass
4022         fs[0].loadArraysIfNecessary()
4023         for i,arr in enumerate(arrs):
4024             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
4025             pass
4026         pass
4027
4028     @WriteInTmpDir
4029     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
4030         """ 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.
4031         """
4032         fname="Pyfile78.med"
4033         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)
4034         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4035         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
4036         m0.allocateCells()
4037         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
4038             m0.insertNextCell(NORM_TETRA4,elt)
4039             pass
4040         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
4041             m0.insertNextCell(NORM_PYRA5,elt)
4042             pass
4043         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
4044             m0.insertNextCell(NORM_PENTA6,elt)
4045             pass
4046         m0.checkConsistency()
4047         m1=MEDCouplingUMesh(); m1.setName("mesh")
4048         m1.setMeshDimension(2);
4049         m1.allocateCells(5);
4050         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4051         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4052         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4053         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4054         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4055         m1.setCoords(coords);
4056         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
4057         m3.allocateCells()
4058         m3.insertNextCell(NORM_POINT1,[2])
4059         m3.insertNextCell(NORM_POINT1,[3])
4060         m3.insertNextCell(NORM_POINT1,[4])
4061         m3.insertNextCell(NORM_POINT1,[5])
4062         #
4063         mm=MEDFileUMesh()
4064         mm.setMeshAtLevel(0,m0)
4065         mm.setMeshAtLevel(-1,m1)
4066         mm.setMeshAtLevel(-3,m3)
4067         mm.write(fname,2)
4068         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
4069         mm=MEDFileMesh.New(fname)
4070         fs=MEDFileFields()
4071         fmts=MEDFileFieldMultiTS()
4072         f1ts=MEDFileField1TS()
4073         for lev in mm.getNonEmptyLevels():
4074             for gt in mm.getGeoTypesAtLevel(lev):
4075                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
4076                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
4077                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
4078                 f.setArray(arr) ; f.setName("f0")
4079                 f1ts.setFieldNoProfileSBT(f)
4080                 pass
4081             pass
4082         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
4083         for lev in [0,-1,-3]:
4084             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
4085             pass
4086         fmts.pushBackTimeStep(f1ts)
4087         fs.pushField(fmts)
4088         fs.write(fname,0)
4089         del fs,fmts,f1ts
4090         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
4091         fs=MEDFileFields(fname)
4092         self.assertEqual(len(fs),1)
4093         self.assertEqual(len(fs[0]),1)
4094         f1ts=fs[0][0]
4095         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),'','')])])
4096         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))
4097         pass
4098
4099     @WriteInTmpDir
4100     def testMEDFileUMeshSetName(self):
4101         """ 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.
4102         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
4103         """
4104         fname="Pyfile79.med"
4105         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
4106         mm=MEDFileUMesh()
4107         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
4108         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)
4109         m0.allocateCells(5);
4110         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
4111         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
4112         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
4113         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
4114         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
4115         m0.setCoords(coords);
4116         mm.setMeshAtLevel(0,m0)
4117         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
4118         m2.allocateCells()
4119         m2.insertNextCell(NORM_POINT1,[2])
4120         m2.insertNextCell(NORM_POINT1,[3])
4121         m2.insertNextCell(NORM_POINT1,[4])
4122         m2.insertNextCell(NORM_POINT1,[5])
4123         mm.setMeshAtLevel(-2,m2)
4124         self.assertEqual(mm.getName(),"")
4125         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
4126         mm.forceComputationOfParts()
4127         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
4128         mm.setName("abc")
4129         self.assertEqual(mm.getName(),"abc")
4130         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
4131         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
4132         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
4133         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
4134         pass
4135
4136     @WriteInTmpDir
4137     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
4138         fileName="Pyfile80.med"
4139         m=MEDCouplingCMesh() ; m.setName("cmesh")
4140         arr=DataArrayDouble(6) ; arr.iota()
4141         m.setCoords(arr,arr)
4142         nbCells=m.getNumberOfCells()
4143         self.assertEqual(25,nbCells)
4144         f=MEDCouplingFieldDouble(ON_CELLS)
4145         f.setName("FieldOnCell") ; f.setMesh(m)
4146         arr=DataArrayDouble(nbCells) ; arr.iota()
4147         mm=MEDFileCMesh()
4148         mm.setMesh(m)
4149         #
4150         fmts=MEDFileFieldMultiTS()
4151         #
4152         for i in range(nbCells):
4153             t=(float(i)+0.1,i+1,-i-2)
4154             f.setTime(*t)
4155             arr2=DataArrayDouble(nbCells)
4156             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
4157             arr2[perm]=arr
4158             f.setArray(arr2)
4159             f1ts=MEDFileField1TS()
4160             f1ts.setFieldNoProfileSBT(f)
4161             fmts.pushBackTimeStep(f1ts)
4162             pass
4163         fmts.unloadArraysWithoutDataLoss()
4164         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))
4165         fs=MEDFileFields() ; fs.pushField(fmts)
4166         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))
4167         fs.unloadArraysWithoutDataLoss()
4168         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))
4169         f1ts=fs[0][0]
4170         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))
4171         f1ts.unloadArraysWithoutDataLoss()
4172         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))
4173         mm.write(fileName,2)
4174         fs.write(fileName,0)
4175         del m,fmts,mm,f,f1ts
4176         ##
4177         mm=MEDFileMesh.New(fileName)
4178         fmts=MEDFileFieldMultiTS(fileName)
4179         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))
4180         fmts.unloadArraysWithoutDataLoss()
4181         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
4182         fmts.loadArraysIfNecessary()
4183         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))
4184         del mm,fmts
4185         fs=MEDFileFields(fileName)
4186         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))
4187         fs.unloadArraysWithoutDataLoss()
4188         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
4189         fs.loadArraysIfNecessary()
4190         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))
4191         del fs
4192         f1ts=MEDFileField1TS(fileName)
4193         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))
4194         f1ts.unloadArraysWithoutDataLoss()
4195         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
4196         f1ts.loadArraysIfNecessary()
4197         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))
4198         pass
4199
4200     @WriteInTmpDir
4201     def testMEDFileUMeshLoadPart1(self):
4202         """ 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
4203         memory of the returned instance.
4204         """
4205         fileName="Pyfile81.med"
4206         arr=DataArrayDouble(6) ; arr.iota()
4207         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4208         m=m.buildUnstructured()
4209         m.setName("Mesh")
4210         m.changeSpaceDimension(3,0.)
4211         infos=["aa [b]","cc [de]","gg [klm]"]
4212         m.getCoords().setInfoOnComponents(infos)
4213         m.checkConsistency()
4214         mm=MEDFileUMesh()
4215         mm.setMeshAtLevel(0,m)
4216         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh")
4217         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
4218         mm.setMeshAtLevel(-1,m1)
4219         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])
4220         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])
4221         namesCellL0=DataArrayAsciiChar(25,16)
4222         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
4223         renumM1=DataArrayInt([3,4,0,2,1])
4224         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
4225         mm.setRenumFieldArr(0,renum0)
4226         mm.setFamilyFieldArr(0,famField0)
4227         mm.setNameFieldAtLevel(0,namesCellL0)
4228         mm.setRenumFieldArr(-1,renumM1)
4229         mm.setFamilyFieldArr(-1,famFieldM1)
4230         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])
4231         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])
4232         namesNodes=DataArrayAsciiChar(36,16)
4233         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
4234         mm.setRenumFieldArr(1,renum1)
4235         mm.setFamilyFieldArr(1,famField1)
4236         mm.setNameFieldAtLevel(1,namesNodes)
4237         mm.setFamilyId("Fam7",77)
4238         mm.setFamilyId("Fam8",88)
4239         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
4240         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
4241         mm.write(fileName,2)
4242         #
4243         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
4244         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
4245         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])))
4246         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)
4247         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
4248         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
4249         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
4250         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
4251         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4252         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4253         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4254         #
4255         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
4256         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
4257         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])))
4258         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)
4259         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
4260         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
4261         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
4262         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
4263         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
4264         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
4265         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
4266         #
4267         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
4268         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
4269         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
4270         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
4271         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
4272         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
4273         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
4274         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
4275         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])))
4276         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
4277         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)
4278         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
4279         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
4280         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
4281         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
4282         pass
4283
4284     @WriteInTmpDir
4285     def testMEDFileFieldsLoadPart1(self):
4286         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
4287         """
4288         fileName="Pyfile82.med"
4289         meshName="Mesh"
4290         compos=["aa [kg]","bbb [m/s]"]
4291         arr=DataArrayDouble(6) ; arr.iota()
4292         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4293         m=m.buildUnstructured()
4294         m.setName(meshName)
4295         m.changeSpaceDimension(3,0.)
4296         infos=["aa [b]","cc [de]","gg [klm]"]
4297         m.getCoords().setInfoOnComponents(infos)
4298         m.checkConsistency()
4299         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4300         f.setName("Field")
4301         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4302         arr[:,0]=list(range(25))
4303         arr[:,1]=list(range(100,125))
4304         f.setArray(arr)
4305         WriteField(fileName,f,True)
4306         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4307         f.setName("FieldNode")
4308         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4309         arr[:,0]=list(range(200,236))
4310         arr[:,1]=list(range(300,336))
4311         f.setArray(arr)
4312         f.checkConsistencyLight()
4313         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4314         #
4315         ms=MEDFileMeshes()
4316         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
4317         ms.pushMesh(mm)
4318         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4319         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
4320         #
4321         ms=MEDFileMeshes()
4322         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
4323         ms.pushMesh(mm)
4324         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4325         fs=fs.deepCopy()
4326         fs[0][0].loadArrays()
4327         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
4328         arr.setInfoOnComponents(compos)
4329         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4330         fs[1][0].loadArrays()
4331         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
4332         arr.setInfoOnComponents(compos)
4333         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4334         pass
4335
4336     @WriteInTmpDir
4337     def testMEDFileWithoutCells1(self):
4338         fileName="Pyfile83.med"
4339         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4340         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
4341         mm=MEDFileUMesh()
4342         mm.setCoords(coo)
4343         mm.setName("mesh")
4344         mm.write(fileName,2)
4345         #
4346         mm=MEDFileMesh.New(fileName)
4347         self.assertEqual(mm.getName(),"mesh")
4348         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
4349         pass
4350
4351     @WriteInTmpDir
4352     def testZipCoordsWithLoadPart1(self):
4353         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4354         """
4355         fileName="Pyfile84.med"
4356         meshName="Mesh"
4357         compos=["aa [kg]","bbb [m/s]"]
4358         arr=DataArrayDouble(6) ; arr.iota()
4359         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4360         m=m.buildUnstructured()
4361         m.setName(meshName)
4362         m.changeSpaceDimension(3,0.)
4363         infos=["aa [b]","cc [de]","gg [klm]"]
4364         m.getCoords().setInfoOnComponents(infos)
4365         m.checkConsistency()
4366         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4367         f.setName("Field")
4368         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4369         arr[:,0]=list(range(25))
4370         arr[:,1]=list(range(100,125))
4371         f.setArray(arr)
4372         WriteField(fileName,f,True)
4373         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4374         f.setName("FieldNode")
4375         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4376         arr[:,0]=list(range(200,236))
4377         arr[:,1]=list(range(300,336))
4378         f.setArray(arr)
4379         f.checkConsistencyLight()
4380         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4381         #
4382         ms=MEDFileMeshes()
4383         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4384         ms.pushMesh(mm)
4385         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4386         self.assertEqual(spd.getSlice(),slice(4,6,1))
4387         spd=mm.getPartDefAtLevel(1)
4388         self.assertEqual(spd.getSlice(),slice(4,14,1))
4389         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4390         mm.zipCoords() # <- The important line is here !
4391         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4392         self.assertEqual(spd.getSlice(),slice(4,6,1))
4393         spd=mm.getPartDefAtLevel(1)
4394         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4395         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4396         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4397         fs[0][0].loadArrays()
4398         arr=DataArrayDouble([(4,104),(5,105)])
4399         arr.setInfoOnComponents(compos)
4400         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4401         fs[1][0].loadArrays()
4402         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4403         arr.setInfoOnComponents(compos)
4404         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4405         m_ref = mm[0].deepCopy()
4406         # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
4407         ms=MEDFileMeshes()
4408         mrs = MEDFileMeshReadSelector()
4409         mrs.setNumberOfCoordsLoadSessions(2)
4410         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
4411         ms.pushMesh(mm)
4412         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4413         self.assertEqual(spd.getSlice(),slice(4,6,1))
4414         spd=mm.getPartDefAtLevel(1)
4415         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4416         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4417         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4418         fs[0][0].loadArrays()
4419         arr=DataArrayDouble([(4,104),(5,105)])
4420         arr.setInfoOnComponents(compos)
4421         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4422         fs[1][0].loadArrays()
4423         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4424         arr.setInfoOnComponents(compos)
4425         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4426         self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
4427         pass
4428
4429     @WriteInTmpDir
4430     def testMEDFileCMeshSetGroupsAtLevel(self):
4431         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4432         """
4433         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4434         m.setName("Mesh")
4435         mm=MEDFileCMesh() ; mm.setMesh(m)
4436         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4437         mm.setGroupsAtLevel(0,[grp])
4438         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4439         pass
4440
4441     @WriteInTmpDir
4442     def testMEDFileUMeshBuildExtrudedMesh1(self):
4443         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4444         fileName="Pyfile85.med"
4445         meshName2D="Mesh"
4446         meshName1D="Mesh1D"
4447         meshName3DOut="Mesh3D"
4448         #
4449         d1=DataArrayInt([0,4,20,24])
4450         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4451         #
4452         a=DataArrayDouble(6) ; a.iota()
4453         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4454         m=m.buildUnstructured()
4455         d1c=d1.buildComplement(m.getNumberOfCells())
4456         m=m[d1c] ; m.zipCoords()
4457         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4458         m0.simplexize(0)
4459         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4460         m.setName(meshName2D)
4461         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4462         e=d.deltaShiftIndex().findIdsEqual(1)
4463         #
4464         mm=MEDFileUMesh()
4465         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4466         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4467         mm.setGroupsAtLevel(0,[grp0])
4468         grp1=e ; grp1.setName("grp1")
4469         mm.setGroupsAtLevel(-1,[grp1])
4470         mm.write(fileName,2)
4471         #
4472         a=DataArrayDouble(3) ; a.iota()
4473         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4474         tmp.setName(meshName1D)
4475         tmp.changeSpaceDimension(3)
4476         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4477         mm1D=MEDFileUMesh()
4478         mm1D.setMeshAtLevel(0,tmp)
4479         mm1D.write(fileName,0)
4480         # test is here !
4481         mm2D=MEDFileMesh.New(fileName,meshName2D)
4482         mm1D=MEDFileMesh.New(fileName,meshName1D)
4483         m1D=mm1D.getMeshAtLevel(0)
4484         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4485         #
4486         self.assertEqual(mm3D.getName(),mm2D.getName())
4487         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4488         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4489         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4490         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4491         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4492         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4493         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4494         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4495         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4496         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.)])
4497         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4498         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])
4499         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4500         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])
4501         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4502         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])
4503         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4504         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])
4505         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4506         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])
4507         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4508         d=DataArrayInt(129) ; d.iota() ; d*=3
4509         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4510         #
4511         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4512         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4513         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4514         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4515         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])))
4516         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])))
4517         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])))
4518         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])))
4519         mm3D.setName("MeshExtruded")
4520         mm3D.write(fileName,0)
4521         pass
4522
4523     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4524     @WriteInTmpDir
4525     def testMEDFileUMeshPickeling1(self):
4526         outFileName="Pyfile86.med"
4527         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)
4528         c.setInfoOnComponents(["aa","bbb"])
4529         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4530         m=MEDCouplingUMesh();
4531         m.setMeshDimension(2);
4532         m.allocateCells(5);
4533         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4534         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4535         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4536         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4537         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4538         m.finishInsertingCells();
4539         m.setCoords(c)
4540         m.checkConsistencyLight()
4541         m1=MEDCouplingUMesh.New();
4542         m1.setMeshDimension(1);
4543         m1.allocateCells(3);
4544         m1.insertNextCell(NORM_SEG2,2,[1,4])
4545         m1.insertNextCell(NORM_SEG2,2,[3,6])
4546         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4547         m1.finishInsertingCells();
4548         m1.setCoords(c)
4549         m1.checkConsistencyLight()
4550         m2=MEDCouplingUMesh.New();
4551         m2.setMeshDimension(0);
4552         m2.allocateCells(4);
4553         m2.insertNextCell(NORM_POINT1,1,[1])
4554         m2.insertNextCell(NORM_POINT1,1,[3])
4555         m2.insertNextCell(NORM_POINT1,1,[2])
4556         m2.insertNextCell(NORM_POINT1,1,[6])
4557         m2.finishInsertingCells();
4558         m2.setCoords(c)
4559         m2.checkConsistencyLight()
4560         #
4561         mm=MEDFileUMesh.New()
4562         self.assertTrue(mm.getUnivNameWrStatus())
4563         mm.setName("MyFirstMEDCouplingMEDmesh")
4564         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4565         mm.setCoords(c)
4566         mm[-1]=m1;
4567         mm[0]=m;
4568         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4569         mm[-2]=m2;
4570         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4571         # playing with groups
4572         g1_2=DataArrayInt.New()
4573         g1_2.setValues([1,3],2,1)
4574         g1_2.setName("G1")
4575         g2_2=DataArrayInt.New()
4576         g2_2.setValues([1,2,3],3,1)
4577         g2_2.setName("G2")
4578         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4579         g1_1=DataArrayInt.New()
4580         g1_1.setValues([0,1,2],3,1)
4581         g1_1.setName("G1")
4582         g2_1=DataArrayInt.New()
4583         g2_1.setValues([0,2],2,1)
4584         g2_1.setName("G2")
4585         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4586         g1_N=DataArrayInt.New()
4587         g1_N.setValues(list(range(8)),8,1)
4588         g1_N.setName("G1")
4589         g2_N=DataArrayInt.New()
4590         g2_N.setValues(list(range(9)),9,1)
4591         g2_N.setName("G2")
4592         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4593         mm.createGroupOnAll(0,"GrpOnAllCell")
4594         # check content of mm
4595         t=mm.getGroupArr(0,"G1",False)
4596         self.assertTrue(g1_2.isEqual(t));
4597         t=mm.getGroupArr(0,"G2",False)
4598         self.assertTrue(g2_2.isEqual(t));
4599         t=mm.getGroupArr(-1,"G1",False)
4600         self.assertTrue(g1_1.isEqual(t));
4601         t=mm.getGroupArr(-1,"G2",False)
4602         self.assertTrue(g2_1.isEqual(t));
4603         t=mm.getGroupArr(1,"G1",False)
4604         self.assertTrue(g1_N.isEqual(t));
4605         t=mm.getGroupArr(1,"G2",False)
4606         self.assertTrue(g2_N.isEqual(t));
4607         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4608         t=mm.getGroupArr(0,"GrpOnAllCell")
4609         #
4610         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4611         mm2=pickle.loads(st)
4612         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4613         self.assertEqual(mm.getAxisType(),AX_CART)
4614         #
4615         mm.setAxisType(AX_CYL)
4616         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4617         mm2=pickle.loads(st)
4618         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4619         self.assertEqual(mm2.getAxisType(),AX_CYL)
4620         pass
4621
4622     @WriteInTmpDir
4623     def testMEDFileFieldsLoadSpecificEntities1(self):
4624         nbNodes=11
4625         fieldName="myField"
4626         fileName="Pyfile87.med"
4627         nbPdt=10
4628         meshName="Mesh"
4629         #
4630         m=MEDCouplingCMesh()
4631         arr=DataArrayDouble(nbNodes) ; arr.iota()
4632         m.setCoords(arr)
4633         m=m.buildUnstructured()
4634         m.setName(meshName)
4635         #
4636         fmts=MEDFileFieldMultiTS()
4637         for i in range(nbPdt):
4638             f=MEDCouplingFieldDouble(ON_NODES)
4639             f.setMesh(m)
4640             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4641             f.setArray(arr)
4642             f.setName(fieldName)
4643             f.setTime(float(i),i,0)
4644             fmts.appendFieldNoProfileSBT(f)
4645             pass
4646         #
4647         mm=MEDFileUMesh() ; mm[0]=m
4648         fmts.write(fileName,2)
4649         mm.write(fileName,0)
4650         #
4651         fs=MEDFileFields(fileName,False)
4652         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4653         fs.loadArraysIfNecessary()
4654         fs2.loadArraysIfNecessary()
4655         for i in range(nbPdt):
4656             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4657             pass
4658         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4659         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4660         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4661         fmts=MEDFileFieldMultiTS()
4662         for i in range(nbPdt):
4663             f=MEDCouplingFieldDouble(ON_CELLS)
4664             f.setMesh(m3)
4665             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4666             f.setArray(arr)
4667             f.setName(fieldName)
4668             f.setTime(float(i),i,0)
4669             fmts.appendFieldNoProfileSBT(f)
4670             pass
4671         mm=MEDFileUMesh() ; mm[0]=m3
4672         del mm[0]
4673         self.assertEqual(mm.getNonEmptyLevels(),())
4674         mm[0]=m3
4675         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4676         fmts.write(fileName,2)
4677         fs=MEDFileFields(fileName,False)
4678         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4679         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4680         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4681         fs.loadArraysIfNecessary()
4682         fs2.loadArraysIfNecessary()
4683         fs3.loadArraysIfNecessary()
4684         fs4.loadArraysIfNecessary()
4685         for i in range(nbPdt):
4686             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4687             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4688             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4689             pass
4690         pass
4691
4692     @WriteInTmpDir
4693     def testMEDFileLotsOfTSRW1(self):
4694         nbNodes=11
4695         fieldName="myField"
4696         fileName="Pyfile88.med"
4697         nbPdt=300 # <- perftest = 30000
4698         meshName="Mesh"
4699         #
4700         maxPdt=100 # <- optimum = 500
4701         m=MEDCouplingCMesh()
4702         arr=DataArrayDouble(nbNodes) ; arr.iota()
4703         m.setCoords(arr)
4704         m=m.buildUnstructured()
4705         m.setName(meshName)
4706         #
4707         nbOfField=nbPdt//maxPdt
4708         fs=MEDFileFields()
4709         for j in range(nbOfField):
4710             fmts=MEDFileFieldMultiTS()
4711             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4712             for i in range(s.start, s.stop, s.step):
4713                 f=MEDCouplingFieldDouble(ON_NODES)
4714                 f.setMesh(m)
4715                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4716                 f.setArray(arr)
4717                 f.setName("%s_%d"%(fieldName,j))
4718                 f.setTime(float(i),i,0)
4719                 fmts.appendFieldNoProfileSBT(f)
4720                 pass
4721             fs.pushField(fmts)
4722             pass
4723         #
4724         mm=MEDFileUMesh() ; mm[0]=m
4725         fs.write(fileName,2)
4726         mm.write(fileName,0)
4727         ############
4728         def appendInDict(d,key,val):
4729             if key in d:
4730                 d[key].append(val)
4731             else:
4732                 d[key]=[val]
4733             pass
4734         import re
4735         allFields=GetAllFieldNames(fileName)
4736         allFieldsDict={}
4737         pat=re.compile("([\d]+)([\s\S]+)$")
4738         for st in allFields:
4739             stRev=st[::-1]
4740             m=pat.match(stRev)
4741             if m:
4742                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4743                 pass
4744             else:
4745                 appendInDict(allFieldsDict,st,'')
4746                 pass
4747             pass
4748         fs2=MEDFileFields()
4749         for k in allFieldsDict:
4750             if allFieldsDict[k]!=['']:
4751                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4752                 pass
4753             fmts2=[]
4754             for it in allFieldsDict[k]:
4755                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4756                 pass
4757             fmts2.reverse()
4758             zeResu=fmts2.pop()
4759             nbIter=len(fmts2)
4760             for ii in range(nbIter):
4761                 zeResu.pushBackTimeSteps(fmts2.pop())
4762                 pass
4763             zeResu.setName(k)
4764             fs2.pushField(zeResu)
4765             pass
4766         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4767         pass
4768
4769     @WriteInTmpDir
4770     def testMEDFileMeshRearrangeFamIds1(self):
4771         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4772         fileName="Pyfile89.med"
4773         meshName='Maillage_2'
4774         mm=MEDFileUMesh()
4775         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)])
4776         #
4777         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])
4778         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])
4779         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4780         m0.setConnectivity(c0,c0i)
4781         mm[0]=m0
4782         #
4783         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])
4784         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])
4785         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4786         m1.setConnectivity(c1,c1i)
4787         mm[-1]=m1
4788         #
4789         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])
4790         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4791         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4792         mm[-2]=m2.buildUnstructured()
4793         #
4794         ref0=DataArrayInt(55) ; ref0[:]=0
4795         mm.setFamilyFieldArr(0,ref0)
4796         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]))
4797         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])
4798         mm.setFamilyFieldArr(-1,ref1)
4799         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])
4800         mm.setFamilyFieldArr(-2,ref2)
4801         #
4802         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4803             mm.setFamilyId(f,fid)
4804         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4805             mm.setFamiliesOnGroup(grp,fams)
4806         mm.write(fileName,2)
4807         #
4808         mm=MEDFileMesh.New(fileName)
4809         grp=mm.getGroup(-1,"Groupe_1")
4810         dai=grp.computeFetchedNodeIds()
4811         dai.setName("TOTO")
4812         mm.addGroup(1,dai)
4813         mm.rearrangeFamilies() # <- the aim of the test
4814         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4815         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4816         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4817         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4818         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])))
4819         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4820         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4821         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4822         for elt,fams in allGrps:
4823             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4824         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4825         for elt,eltId in allFams:
4826             self.assertEqual(mm.getFamilyId(elt),eltId)
4827         pass
4828
4829     @WriteInTmpDir
4830     def testNonRegrCMeshSetFieldPfl1(self):
4831         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4832         ff=MEDFileField1TS()
4833         meshName="mesh"
4834         mm=MEDFileCMesh()
4835         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4836         m.setCoords(arr)
4837         m.setName(meshName)
4838         mm.setMesh(m)
4839         field=MEDCouplingFieldDouble(ON_CELLS)
4840         field.setMesh(m)
4841         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4842         field.setName("Field")
4843         field.checkConsistencyLight()
4844         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4845         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4846         self.assertEqual(ff.getPfls(),())
4847         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4848         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4849         del ff,mm,field,field2,pfl
4850         # same with unstructured mesh
4851         ff=MEDFileField1TS()
4852         meshName="mesh"
4853         mm=MEDFileUMesh()
4854         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4855         m.setCoords(arr)
4856         m.setName(meshName)
4857         m=m.buildUnstructured()
4858         mm[0]=m
4859         field=MEDCouplingFieldDouble(ON_CELLS)
4860         field.setMesh(m)
4861         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4862         field.setName("Field")
4863         field.checkConsistencyLight()
4864         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4865         ff.setFieldProfile(field,mm,0,pfl)
4866         self.assertEqual(ff.getPfls(),())
4867         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4868         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4869         pass
4870
4871     @WriteInTmpDir
4872     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4873         meshName="mesh"
4874         fileName="Pyfile90.med"
4875         fileName2="Pyfile91.med"
4876         arr=DataArrayDouble(5) ; arr.iota()
4877         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4878         m=m.buildUnstructured()
4879         d=DataArrayInt([3,7,11,15])
4880         m1=m[d]
4881         m1.simplexize(0)
4882         m2=m[d.buildComplement(m.getNumberOfCells())]
4883         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4884         m.changeSpaceDimension(3,0.)
4885         arr=DataArrayDouble(3) ; arr.iota()
4886         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4887         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4888         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4889         m3D=m.buildExtrudedMesh(m1D,0)
4890         m3D.sortCellsInMEDFileFrmt()
4891         m3D.setName(meshName)
4892         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4893         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4894         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4895         #
4896         mm=MEDFileUMesh()
4897         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4898         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4899         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4900         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4901         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4902         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4903         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4904         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4905         mm.setGroupsAtLevel(0,[vol1,vol2])
4906         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4907         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4908         #
4909         mmOut1=mm.linearToQuadratic(0,0.)
4910         mmOut1.write(fileName2,2)
4911         mmOut2=mmOut1.quadraticToLinear(0.)
4912         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4913         pass
4914
4915     @WriteInTmpDir
4916     def testMEDFileMeshAddGroup1(self):
4917         m=MEDCouplingCMesh()
4918         arrX=DataArrayDouble(9) ; arrX.iota()
4919         arrY=DataArrayDouble(4) ; arrY.iota()
4920         m.setCoords(arrX,arrY)
4921         m.setName("mesh")
4922         mm=MEDFileCMesh()
4923         mm.setMesh(m)
4924         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4925         mm.addGroup(0,grp0)
4926         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4927         mm.addGroup(0,grp1)
4928         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4929         mm.addGroup(0,grp2)
4930         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4931         mm.addGroup(0,grp3)
4932         for grp in [grp0,grp1,grp2,grp3]:
4933             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4934         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4935         delta=12
4936         for grp in [grp0,grp1,grp2,grp3]:
4937             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4938             mm.addGroup(1,grpNode)
4939         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4940         for grp in [grp0,grp1,grp2,grp3]:
4941             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4942         for grp in [grp0,grp1,grp2,grp3]:
4943             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4944             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4945         mm.normalizeFamIdsMEDFile()
4946         for grp in [grp0,grp1,grp2,grp3]:
4947             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4948         for grp in [grp0,grp1,grp2,grp3]:
4949             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4950             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4951         pass
4952
4953     @WriteInTmpDir
4954     def testMEDFileJoint1(self):
4955         fileName="Pyfile92.med"
4956         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4957         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4958         mm=MEDFileUMesh()
4959         mm.setCoords(coo)
4960         mm.setName("maa1")
4961         mm.setDescription("un maillage")
4962         mm.write(fileName,2)
4963         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4964         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4965         one_step_joint=MEDFileJointOneStep()
4966         one_step_joint.pushCorrespondence(cell_correspond)
4967         one_step_joint.pushCorrespondence(node_correspond)
4968         one_joint=MEDFileJoint()
4969         one_joint.pushStep(one_step_joint)
4970         one_joint.setLocalMeshName("maa1")
4971         one_joint.setRemoteMeshName("maa1")
4972         one_joint.setDescription("joint_description")
4973         one_joint.setJointName("joint_1")
4974         one_joint.setDomainNumber(1)
4975         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4976         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4977         self.assertEqual( one_joint.getDescription(), "joint_description")
4978         self.assertEqual( one_joint.getJointName(), "joint_1")
4979         self.assertEqual( one_joint.getDomainNumber(), 1)
4980         joints=MEDFileJoints()
4981         joints.pushJoint(one_joint);
4982         joints.write(fileName,0)
4983         # read back
4984         jointsR=MEDFileJoints(fileName,mm.getName())
4985         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4986         jR = jointsR.getJointAtPos(0)
4987         self.assertTrue( jR.isEqual( one_joint ))
4988         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4989         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4990         jointsR.destroyJointAtPos(0)
4991         pass
4992
4993     @WriteInTmpDir
4994     def testMEDFileJoint2(self):
4995         fileNameWr="Pyfile93.med"
4996         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4997         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4998         mm=MEDFileUMesh()
4999         mm.setCoords(coo)
5000         mm.setName("maa1")
5001         mm.setDescription("un maillage")
5002         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
5003         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
5004         one_step_joint=MEDFileJointOneStep()
5005         two_step_joint=MEDFileJointOneStep()
5006         one_joint=MEDFileJoint()
5007         two_joint=MEDFileJoint()
5008         one_step_joint.pushCorrespondence(node_correspond)
5009         one_joint.pushStep(one_step_joint)
5010         two_step_joint.pushCorrespondence(cell_correspond)
5011         two_step_joint.pushCorrespondence(node_correspond)
5012         two_joint.pushStep(two_step_joint)
5013         one_joint.setLocalMeshName("maa1")
5014         one_joint.setRemoteMeshName("maa1")
5015         one_joint.setDescription("joint_description_1")
5016         one_joint.setJointName("joint_1")
5017         one_joint.setDomainNumber(1)
5018         two_joint.setLocalMeshName("maa1")
5019         two_joint.setRemoteMeshName("maa1")
5020         two_joint.setDescription("joint_description_2")
5021         two_joint.setJointName("joint_2")
5022         two_joint.setDomainNumber(2)
5023         joints=MEDFileJoints()
5024         joints.pushJoint(one_joint)
5025         joints.pushJoint(two_joint)
5026         mm.setJoints( joints )
5027         mm.write(fileNameWr,2)
5028         #
5029         mm=MEDFileMesh.New(fileNameWr)
5030         self.assertEqual( mm.getNumberOfJoints(), 2)
5031         jointsR = mm.getJoints();
5032         self.assertEqual( jointsR.getMeshName(), mm.getName() )
5033         self.assertEqual( len( jointsR ), 2 )
5034         jointR1 = jointsR[0]
5035         jointR2 = jointsR[1]
5036         self.assertFalse( jointR1 is None )
5037         self.assertFalse( jointR2 is None )
5038         self.assertTrue( jointR1.isEqual( one_joint ))
5039         self.assertTrue( jointR2.isEqual( two_joint ))
5040         pass
5041
5042     @WriteInTmpDir
5043     def testMEDFileJoint1(self):
5044         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
5045         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
5046         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
5047         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
5048         joint1st_1=MEDFileJointOneStep()
5049         joint1st_1.pushCorrespondence(cell_correspond)
5050         joint1st_1.pushCorrespondence(node_correspond)
5051         joint1st_2=MEDFileJointOneStep()
5052         joint1st_2.pushCorrespondence(cell_correspond)
5053         joint1st_2.pushCorrespondence(node_correspond)
5054         joint1st_3=MEDFileJointOneStep()
5055         joint1st_3.pushCorrespondence(node_correspond)
5056         joint1st_3.pushCorrespondence(cell_correspond)
5057         joint1st_4=MEDFileJointOneStep()
5058         joint1st_4.pushCorrespondence(cell_correspond)
5059         joint1st_5=MEDFileJointOneStep()
5060         joint1st_5.pushCorrespondence(cell_correspon2)
5061         joint1st_6=MEDFileJointOneStep()
5062         joint1st_6.pushCorrespondence(cell_correspon3)
5063         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
5064         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
5065         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
5066         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
5067         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
5068         self.assertEqual(1,joint1st_6.getNumberOfCorrespondences())
5069         joint1st_6.clearCorrespondences()
5070         self.assertEqual(0,joint1st_6.getNumberOfCorrespondences())
5071         one_joint=MEDFileJoint()
5072         one_joint.pushStep(joint1st_1)
5073         one_joint.setLocalMeshName("maa1")
5074         one_joint.setRemoteMeshName("maa2")
5075         one_joint.setDescription("joint_description")
5076         one_joint.setJointName("joint_1")
5077         one_joint.setDomainNumber(1)
5078         self.assertEqual( "maa1", one_joint.getLocalMeshName())
5079         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
5080         self.assertEqual( "joint_description", one_joint.getDescription())
5081         self.assertEqual( 1, one_joint.getDomainNumber())
5082         self.assertEqual( "joint_1", one_joint.getJointName())
5083         one_joint_copy = one_joint.deepCopy()
5084         self.assertEqual( "maa1", one_joint_copy.getLocalMeshName())
5085         self.assertEqual( "maa2", one_joint_copy.getRemoteMeshName())
5086         self.assertEqual( "joint_description", one_joint_copy.getDescription())
5087         self.assertEqual( 1, one_joint_copy.getDomainNumber())
5088         self.assertEqual( "joint_1", one_joint_copy.getJointName())
5089         pass
5090
5091     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
5092     @WriteInTmpDir
5093     def testMEDFileSafeCall0(self):
5094         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
5095         fname="Pyfile94.med"
5096         errfname="Pyfile94.err"
5097
5098         import os
5099         # first clean file if needed
5100         if os.path.exists(fname):
5101             os.remove(fname)
5102             pass
5103         # second : build a file from scratch
5104         m=MEDCouplingCMesh()
5105         arr=DataArrayDouble(11) ; arr.iota()
5106         m.setCoords(arr,arr)
5107         mm=MEDFileCMesh()
5108         mm.setMesh(m)
5109         mm.setName("mesh")
5110         mm.write(fname,2)
5111         # third : change permissions to remove write access on created file
5112         os.chmod(fname, 0o444)
5113         # four : try to append data on file -> check that it raises Exception
5114         f=MEDCouplingFieldDouble(ON_CELLS)
5115         f.setName("field")
5116         f.setMesh(m)
5117         f.setArray(DataArrayDouble(100))
5118         f.getArray()[:]=100.
5119         f.checkConsistencyLight()
5120         f1ts=MEDFileField1TS()
5121         f1ts.setFieldNoProfileSBT(f)
5122         # redirect stderr
5123         tmp=StdOutRedirect(errfname)
5124         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
5125         del tmp
5126         #
5127         if os.path.exists(errfname):
5128             os.remove(errfname)
5129         #
5130         pass
5131
5132     @WriteInTmpDir
5133     def testUnivStatus1(self):
5134         """ Non regression test to check the effectiveness of univ write status."""
5135         fname="Pyfile95.med"
5136         arr=DataArrayDouble(10) ; arr.iota()
5137         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
5138         mm=MEDFileCMesh() ; mm.setMesh(m)
5139         mm.setUnivNameWrStatus(False) # test is here
5140         mm.write(fname,2)
5141         mm=MEDFileCMesh(fname)
5142         self.assertEqual(mm.getUnivName(),"")
5143         mm.setUnivNameWrStatus(True)
5144         mm.write(fname,2)
5145         mm=MEDFileCMesh(fname)
5146         self.assertTrue(mm.getUnivName()!="")
5147         pass
5148
5149     @WriteInTmpDir
5150     def testEmptyMesh(self):
5151       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
5152       with 0 tuples """
5153       fname = "Pyfile96.med"
5154       m = MEDCouplingUMesh('toto', 2)
5155       m.setCoords(DataArrayDouble([], 0, 2))
5156       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
5157       mfu = MEDFileUMesh()
5158       mfu.setMeshAtLevel(0, m)
5159       mfu.write(fname, 2)
5160       mfu2 = MEDFileUMesh(fname)
5161       self.assertEqual('toto', mfu2.getName())
5162       lvl = mfu2.getNonEmptyLevels()
5163       self.assertEqual((), lvl)
5164
5165     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5166     def testMEDFileUMeshPickeling2(self):
5167       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
5168       name="Mesh_1"
5169       grpName1="HAUT"
5170       grpName2="BASE"
5171       hauteur=1.
5172       nbOfNodesPerAxis=3
5173       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
5174       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
5175       mesh=MEDFileUMesh() ; mesh[0]=m
5176       m1=m.computeSkin() ; mesh[-1]=m1
5177       #
5178       bary1=m1.computeCellCenterOfMass()[:,2]
5179       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
5180       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
5181       mesh.setGroupsAtLevel(-1,[grp1,grp2])
5182
5183       st=pickle.dumps(mesh,2)
5184       mm=pickle.loads(st)
5185       st2=pickle.dumps(mm,2)
5186       mm2=pickle.loads(st2)
5187       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
5188       pass
5189
5190     @WriteInTmpDir
5191     def testMEDFileEquivalence1(self):
5192       """ First check of equivalence implementation in MEDFileMesh"""
5193       fileName="Pyfile97.med"
5194       meshName="M_01"
5195       mm=MEDFileUMesh()
5196       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)])
5197       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
5198       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])
5199       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
5200       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])
5201       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
5202       mm.getFamilyFieldAtLevel(-1)[:]=-2
5203       mm.getFamilyFieldAtLevel(0)[:]=0
5204       mm.addFamily("HOMARD________-1",-1)
5205       mm.addFamily("HOMARD________-2",-2)
5206       mm.addFamily("HOMARD________-3",-3)
5207       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
5208
5209       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
5210       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."
5211       mm.initializeEquivalences()
5212       eqs=mm.getEquivalences()
5213       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5214       eq0.setDescription(descEq)
5215       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)])
5216       eq0.setArray(-1,corr)
5217       self.assertEqual(eq0.getCell().size(),1)
5218       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5219       eq0.getCell().clear()
5220       self.assertEqual(eq0.getCell().size(),0)
5221       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
5222       self.assertEqual(eq0.getCell().size(),1)
5223       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5224       mm.killEquivalences()
5225       mm.initializeEquivalences()
5226       eqs=mm.getEquivalences()
5227       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
5228       eq0.setDescription(descEq)
5229       c=eq0.initCell()
5230       c.setArrayForType(NORM_QUAD4,corr)
5231       self.assertEqual(eq0.getCell().size(),1)
5232       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
5233       mm2=mm.deepCopy()
5234       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5235       self.assertEqual(mm2.getEquivalences().size(),1)
5236       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
5237       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
5238       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5239       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
5240       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5241       mm.write(fileName,2)
5242       #
5243       mm3=MEDFileMesh.New(fileName)
5244       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
5245       pass
5246
5247     @WriteInTmpDir
5248     def testMEDFileForFamiliesPlayer1(self):
5249       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
5250       fileName="Pyfile98.med"
5251       meshName="mesh"
5252       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
5253       arr=DataArrayDouble(4) ; arr.iota()
5254       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5255       m=m.buildUnstructured()
5256       mm=MEDFileUMesh()
5257       mm[0]=m
5258       mm.setName(meshName)
5259       mm.setFamilyId("FAMILLE_ZERO",0)
5260       mm.getFamilyFieldAtLevel(0)[-3:]=-4
5261       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
5262       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
5263       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
5264       mm.setFamilyFieldArr(1,d)
5265       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
5266       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
5267       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5268       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
5269       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
5270       mm.write(fileName,2)
5271       # now read such funny file !
5272       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
5273       self.assertTrue(mm.isEqual(mm2,1e-16))
5274       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
5275       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
5276       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
5277       pass
5278
5279     @WriteInTmpDir
5280     def testCartesianizer1(self):
5281       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
5282       # UMesh non cart
5283       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
5284       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
5285       d0=DataArrayInt(16) ; d0[:]=0
5286       d1=DataArrayInt(9)  ; d1[:]=0
5287       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5288       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5289       ref0=mm.getCoords().getHiddenCppPointer()
5290       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
5291       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
5292       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
5293       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
5294       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5295       mm.setAxisType(AX_CYL) #<- important
5296       mm2=mm.cartesianize() # the trigger
5297       self.assertEqual(mm2.getAxisType(),AX_CART)
5298       mm.setAxisType(AX_CART) # this is here only to avoid complaints
5299       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5300       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5301       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
5302       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
5303       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
5304       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
5305       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
5306       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
5307       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
5308       self.assertEqual(mm2.getName(),mm.getName())
5309       self.assertEqual(mm2.getDescription(),mm.getDescription())
5310       self.assertEqual(mm2.getTime(),mm.getTime())
5311       self.assertEqual(mm2.getTime(),mm.getTime())
5312       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5313       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5314       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5315       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5316       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5317       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5318       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5319       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5320       # UMesh cart
5321       mm.setAxisType(AX_CART)
5322       mm2=mm.cartesianize() # the trigger
5323       self.assertEqual(mm2.getAxisType(),AX_CART)
5324       self.assertTrue(isinstance(mm2,MEDFileUMesh))
5325       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5326       # CurveLinearMesh non cart
5327       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
5328       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5329       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5330       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5331       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
5332       mm2=mm.cartesianize() # the trigger
5333       self.assertEqual(mm2.getAxisType(),AX_CART)
5334       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5335       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
5336       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5337       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
5338       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5339       self.assertEqual(mm2.getName(),mm.getName())
5340       self.assertEqual(mm2.getDescription(),mm.getDescription())
5341       self.assertEqual(mm2.getTime(),mm.getTime())
5342       self.assertEqual(mm2.getTime(),mm.getTime())
5343       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5344       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5345       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5346       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5347       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5348       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5349       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5350       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5351       # CurveLinearMesh cart
5352       mm.setAxisType(AX_CART)
5353       mm2=mm.cartesianize() # the trigger
5354       self.assertEqual(mm2.getAxisType(),AX_CART)
5355       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5356       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5357       # CMesh non cart
5358       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
5359       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
5360       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
5361       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
5362       mm2=mm.cartesianize() # the trigger
5363       self.assertEqual(mm2.getAxisType(),AX_CART)
5364       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
5365       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
5366       self.assertEqual(mm2.getName(),mm.getName())
5367       self.assertEqual(mm2.getDescription(),mm.getDescription())
5368       self.assertEqual(mm2.getTime(),mm.getTime())
5369       self.assertEqual(mm2.getTime(),mm.getTime())
5370       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
5371       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
5372       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
5373       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
5374       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
5375       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
5376       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
5377       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
5378       # CMesh cart
5379       mm.setAxisType(AX_CART)
5380       mm2=mm.cartesianize() # the trigger
5381       self.assertEqual(mm2.getAxisType(),AX_CART)
5382       self.assertTrue(isinstance(mm2,MEDFileCMesh))
5383       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
5384       pass
5385
5386     @WriteInTmpDir
5387     def testCheckCoherency(self):
5388       m2 = MEDCouplingUMesh("2d", 2)
5389       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5390       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5391       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5392       mum = MEDFileUMesh()
5393       mum.setMeshAtLevel(0, m2)
5394       mum.setMeshAtLevel(-1, m1)
5395       mum.checkConsistency()
5396       mum2 = mum.deepCopy()
5397
5398       # Nodes
5399       arr = DataArrayInt([2]*4)
5400       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
5401       self.assertRaises(InterpKernelException, mum.checkConsistency)
5402       mum=mum2; mum2=mum.deepCopy();
5403       arr = DataArrayInt([2]*4)
5404       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5405       self.assertRaises(InterpKernelException, mum.checkConsistency)
5406       mum=mum2; mum2=mum.deepCopy();
5407       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5408       self.assertRaises(InterpKernelException, mum.checkConsistency)
5409       mum=mum2; mum2=mum.deepCopy();
5410       arr = DataArrayAsciiChar(['tutu           x']*4)
5411       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5412       self.assertRaises(InterpKernelException, mum.checkConsistency)
5413
5414       # 2D
5415       mum=mum2; mum2=mum.deepCopy();
5416       arr = DataArrayInt([2]*2)
5417       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5418       self.assertRaises(InterpKernelException, mum.checkConsistency)
5419       mum=mum2; mum2=mum.deepCopy();
5420       arr = DataArrayInt([2]*2)
5421       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5422       self.assertRaises(InterpKernelException, mum.checkConsistency)
5423       mum=mum2; mum2=mum.deepCopy();
5424       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5425       self.assertRaises(InterpKernelException, mum.checkConsistency)
5426       mum=mum2; mum2=mum.deepCopy();
5427       arr = DataArrayAsciiChar(['tutu           x']*2)
5428       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5429       self.assertRaises(InterpKernelException, mum.checkConsistency)
5430
5431       # 1D
5432       mum=mum2; mum2=mum.deepCopy();
5433       arr = DataArrayInt([2]*5)
5434       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5435       self.assertRaises(InterpKernelException, mum.checkConsistency)
5436       mum=mum2; mum2=mum.deepCopy();
5437       arr = DataArrayInt([2]*5)
5438       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5439       self.assertRaises(InterpKernelException, mum.checkConsistency)
5440       mum=mum2; mum2=mum.deepCopy();
5441       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5442       self.assertRaises(InterpKernelException, mum.checkConsistency)
5443       mum=mum2; mum2=mum.deepCopy();
5444       arr = DataArrayAsciiChar(['tutu           x']*5)
5445       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5446       self.assertRaises(InterpKernelException, mum.checkConsistency)
5447
5448     @WriteInTmpDir
5449     def testCheckSMESHConsistency(self):
5450       m2 = MEDCouplingUMesh("2d", 2)
5451       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5452       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5453       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5454       mum = MEDFileUMesh()
5455       mum.setMeshAtLevel(0, m2)
5456       mum.setMeshAtLevel(-1, m1)
5457       mum.checkConsistency()
5458       mum.checkSMESHConsistency()
5459       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5460       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5461       mum.setRenumFieldArr(0, n2)
5462       mum.setRenumFieldArr(-1, n1)
5463       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5464       mum.setRenumFieldArr(-1, n1+100)
5465       mum.checkSMESHConsistency()
5466       pass
5467
5468     @WriteInTmpDir
5469     def testClearNodeAndCellNumbers(self):
5470       m2 = MEDCouplingUMesh("2d", 2)
5471       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5472       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5473       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5474       mum = MEDFileUMesh()
5475       mum.setMeshAtLevel(0, m2)
5476       mum.setMeshAtLevel(-1, m1)
5477       mum.checkConsistency()
5478       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5479       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5480       mum.setRenumFieldArr(0, n2)
5481       mum.setRenumFieldArr(-1, n1)
5482       mum.clearNodeAndCellNumbers()
5483       mum.checkSMESHConsistency()
5484       pass
5485
5486     @WriteInTmpDir
5487     def testCMeshSetFamilyFieldArrNull(self):
5488       meshName="mesh"
5489       fname="Pyfile99.med"
5490       arrX=DataArrayDouble([0,1,2,3])
5491       arrY=DataArrayDouble([0,1,2])
5492       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5493       mm=MEDFileCMesh() ; mm.setMesh(m)
5494       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5495       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5496       mm.setFamilyFieldArr(0,famCellIds)
5497       mm.setFamilyFieldArr(1,famNodeIds)
5498       mm.write(fname,2)
5499       mm=MEDFileMesh.New(fname)
5500       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5501       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5502       mm.setFamilyFieldArr(0,None)#<- bug was here
5503       mm.setFamilyFieldArr(1,None)#<- bug was here
5504       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5505       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5506       mm3=mm.deepCopy()
5507       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5508       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5509       mm.write(fname,2)
5510       mm2=MEDFileMesh.New(fname)
5511       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5512       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5513       pass
5514
5515     @WriteInTmpDir
5516     def testAppendFieldProfileOnIntField(self):
5517       fname="Pyfile100.med"
5518       arrX=DataArrayDouble([0,1,2,3])
5519       arrY=DataArrayDouble([0,1,2])
5520       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5521       mm=MEDFileCMesh()
5522       mm.setMesh(mesh)
5523       #
5524       fmts=MEDFileIntFieldMultiTS()
5525       pflName="PFL"
5526       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5527       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5528       fieldName="FieldOnCell"
5529       f.setTime(1.2,1,1) ; f.setName(fieldName)
5530       arr=DataArrayInt32([101,102,103]) ; f.setArray(arr)
5531       fmts.appendFieldProfile(f,mm,0,pfl)
5532       #
5533       mm.write(fname,2)
5534       fmts.write(fname,0)
5535       #
5536       mm=MEDFileMesh.New(fname)
5537       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5538       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5539       self.assertEqual(fmts.getName(),fieldName)
5540       self.assertEqual(len(fmts),1)
5541       f1ts=fmts[0]
5542       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5543       self.assertEqual(pfltest.getName(),pflName)
5544       self.assertEqual(ftest.getName(),fieldName)
5545       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5546       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5547       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5548       self.assertEqual(ftest2.getTime(),f.getTime())
5549       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5550       pass
5551
5552     @WriteInTmpDir
5553     def testMEDFileFieldEasyField1(self):
5554       """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."""
5555       ## Basic test on cells on top level
5556       fname="Pyfile101.med"
5557       fieldName="field1"
5558       mm=MEDFileUMesh()
5559       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5560       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5561       m.allocateCells()
5562       m.insertNextCell(NORM_TRI3,[0,1,2])
5563       m.insertNextCell(NORM_TRI3,[3,4,5])
5564       m.insertNextCell(NORM_TRI3,[6,7,8])
5565       m.insertNextCell(NORM_TRI3,[9,10,11])
5566       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5567       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5568       mm[0]=m
5569       mm.write(fname,2)
5570       arr0=DataArrayDouble([10,11,12,13,100,101])
5571       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5572       f.setName(fieldName) ; f.setTime(2.,6,7)
5573       f0=f.deepCopy()
5574       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5575       ff.write(fname,0)
5576       arr2=arr0+1000 ; f.setArray(arr2)
5577       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5578       ff.write(fname,0)
5579       f1=f.deepCopy()
5580       ##
5581       mm=MEDFileMesh.New(fname)
5582       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5583       ftst0=f1ts.field(mm)
5584       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5585       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5586       ftst1=f1ts.field(mm)
5587       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5588       fmts=MEDFileFieldMultiTS(fname,fieldName)
5589       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5590       ## Basic test on nodes on top level
5591       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5592       f2.setName(fieldName)
5593       mm.write(fname,2)
5594       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5595       #
5596       mm=MEDFileMesh.New(fname)
5597       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5598       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5599       fmts=MEDFileFieldMultiTS(fname,fieldName)
5600       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5601       ## Node on elements
5602       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)
5603       f3.setName(fieldName) ; f3.checkConsistencyLight()
5604       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5605       #
5606       mm=MEDFileMesh.New(fname)
5607       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5608       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5609       ## Gauss
5610       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5611       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])
5612       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)
5613       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)
5614       f4.checkConsistencyLight()
5615       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5616       #
5617       mm=MEDFileMesh.New(fname)
5618       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5619       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5620       pass
5621
5622     @WriteInTmpDir
5623     def testMEDFileFieldEasyField2(self):
5624         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5625         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."""
5626         ## Basic test on cells on top level
5627         fname="Pyfile102.med"
5628         fieldName="field1"
5629         mm=MEDFileUMesh()
5630         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5631         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5632         m.allocateCells()
5633         m.insertNextCell(NORM_TRI3,[0,1,2])
5634         m.insertNextCell(NORM_TRI3,[3,4,5])
5635         m.insertNextCell(NORM_TRI3,[6,7,8])
5636         m.insertNextCell(NORM_TRI3,[9,10,11])
5637         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5638         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5639         mm[0]=m
5640         mm.write(fname,2)
5641         arr0=DataArrayInt32([10,11,12,13,100,101])
5642         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5643         f.setName(fieldName) ; f.setTime(2.,6,7)
5644         f0=f.deepCopy()
5645         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5646         ff.write(fname,0)
5647         arr2=arr0+1000 ; f.setArray(arr2)
5648         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5649         ff.write(fname,0)
5650         f1=f.deepCopy()
5651         ##
5652         mm=MEDFileMesh.New(fname)
5653         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5654         ftst0=f1ts.field(mm)
5655         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5656         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5657         ftst1=f1ts.field(mm)
5658         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5659         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5660         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5661         ## Basic test on nodes on top level
5662         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5663         f2.setName(fieldName)
5664         mm.write(fname,2)
5665         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5666         #
5667         mm=MEDFileMesh.New(fname)
5668         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5669         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5670         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5671         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5672         ## Node on elements
5673         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)
5674         f3.setName(fieldName) ; f3.checkConsistencyLight()
5675         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5676         #
5677         mm=MEDFileMesh.New(fname)
5678         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5679         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5680         ## Gauss
5681         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5682         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])
5683         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)
5684         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)
5685         f4.checkConsistencyLight()
5686         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5687         #
5688         mm=MEDFileMesh.New(fname)
5689         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5690         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5691         pass
5692
5693     @WriteInTmpDir
5694     def testMEDFileFieldEasyField3(self):
5695         """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."""
5696         fname="Pyfile103.med"
5697         fieldName="field1"
5698         mm=MEDFileUMesh()
5699         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5700         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5701         m.allocateCells()
5702         m.insertNextCell(NORM_TRI3,[0,1,2])
5703         m.insertNextCell(NORM_TRI3,[3,4,5])
5704         m.insertNextCell(NORM_TRI3,[6,7,8])
5705         m.insertNextCell(NORM_TRI3,[9,10,11])
5706         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5707         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5708         mm[-1]=m
5709         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5710         m0.allocateCells()
5711         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5712         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5713         mm[0]=m0
5714         mm.write(fname,2)
5715         # start slowly
5716         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5717         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5718         #
5719         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5720         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5721         # here f1 lying on level -1 not 0 check if "field" method detect it !
5722         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5723         f1.setMesh(mm[-1]) # -1 is very important
5724         f1.setTime(16.,3,4)
5725         f1.checkConsistencyLight()
5726         mm.write(fname,2)
5727         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5728         #
5729         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5730         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5731         # nodes on elements
5732         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5733         f3.setMesh(mm[-1]) # this line is important
5734         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)
5735         f3.setName(fieldName) ; f3.checkConsistencyLight()
5736         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5737         #
5738         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5739         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5740         # gauss
5741         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5742         f4.setMesh(mm[-1]) # this line is important
5743         f4.setName(fieldName)
5744         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])
5745         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)
5746         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)
5747         f4.checkConsistencyLight()
5748         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5749         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5750         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5751         pass
5752
5753     @WriteInTmpDir
5754     def testMEDFileFieldEasyField4(self):
5755         """ Same than testMEDFileFieldEasyField3 but with integers"""
5756         fname="Pyfile104.med"
5757         fieldName="field1"
5758         mm=MEDFileUMesh()
5759         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5760         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5761         m.allocateCells()
5762         m.insertNextCell(NORM_TRI3,[0,1,2])
5763         m.insertNextCell(NORM_TRI3,[3,4,5])
5764         m.insertNextCell(NORM_TRI3,[6,7,8])
5765         m.insertNextCell(NORM_TRI3,[9,10,11])
5766         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5767         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5768         mm[-1]=m
5769         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5770         m0.allocateCells()
5771         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5772         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5773         mm[0]=m0
5774         mm.write(fname,2)
5775         # start slowly
5776         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5777         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5778         #
5779         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5780         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5781         # here f1 lying on level -1 not 0 check if "field" method detect it !
5782         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5783         f1.setMesh(mm[-1]) # -1 is very important
5784         f1.setTime(16.,3,4)
5785         f1.checkConsistencyLight()
5786         mm.write(fname,2)
5787         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5788         #
5789         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5790         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5791         # nodes on elements
5792         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5793         f3.setMesh(mm[-1]) # this line is important
5794         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)
5795         f3.setName(fieldName) ; f3.checkConsistencyLight()
5796         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5797         #
5798         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5799         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5800         # gauss
5801         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5802         f4.setMesh(mm[-1]) # this line is important
5803         f4.setName(fieldName)
5804         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])
5805         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)
5806         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)
5807         f4.checkConsistencyLight()
5808         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5809         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5810         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5811         pass
5812
5813     @WriteInTmpDir
5814     def testMEDFileFieldEasyField5(self):
5815         """More and more difficult now look at how profiles are managed by "field" method."""
5816         fname="Pyfile105.med"
5817         fieldName="field1"
5818         mm=MEDFileUMesh()
5819         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5820         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5821         m.allocateCells()
5822         m.insertNextCell(NORM_TRI3,[0,1,2])
5823         m.insertNextCell(NORM_TRI3,[3,4,5])
5824         m.insertNextCell(NORM_TRI3,[6,7,8])
5825         m.insertNextCell(NORM_TRI3,[9,10,11])
5826         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5827         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5828         mm[0]=m
5829         mm.write(fname,2)
5830         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5831         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5832         #
5833         arr0=DataArrayDouble([10,11,12,13])
5834         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5835         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5836         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5837         ff.write(fname,0)
5838         #
5839         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5840         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5841         # more complicated -> multi level
5842         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5843         m0.allocateCells()
5844         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5845         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5846         mm2=MEDFileUMesh()
5847         mm2[0]=m0 ; mm2[-1]=m
5848         #
5849         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5850         #
5851         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5852         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5853         pass
5854
5855     @WriteInTmpDir
5856     def testExtractPart1(self):
5857         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)])
5858         meshName="mesh"
5859         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5860         m0.insertNextCell(NORM_TRI3,[8,4,3])
5861         m0.insertNextCell(NORM_TRI3,[8,9,4])
5862         m0.insertNextCell(NORM_TRI3,[7,13,8])
5863         m0.insertNextCell(NORM_TRI3,[7,12,13])
5864         m0.insertNextCell(NORM_TRI3,[0,6,1])
5865         m0.insertNextCell(NORM_TRI3,[0,5,6])
5866         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5867         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5868         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5869         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5870         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5871         #
5872         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5873         m1.insertNextCell(NORM_SEG2,[10,5])
5874         m1.insertNextCell(NORM_SEG2,[5,0])
5875         m1.insertNextCell(NORM_SEG2,[0,1])
5876         m1.insertNextCell(NORM_SEG2,[1,2])
5877         m1.insertNextCell(NORM_SEG2,[2,3])
5878         m1.insertNextCell(NORM_SEG2,[3,4])
5879         m1.insertNextCell(NORM_SEG2,[4,9])
5880         m1.insertNextCell(NORM_SEG2,[9,14])
5881         m1.insertNextCell(NORM_SEG2,[14,13])
5882         m1.insertNextCell(NORM_SEG2,[13,12])
5883         m1.insertNextCell(NORM_SEG2,[12,11])
5884         m1.insertNextCell(NORM_SEG2,[11,10])
5885         mm=MEDFileUMesh()
5886         mm[0]=m0 ; mm[-1]=m1
5887         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5888         tab={} #
5889         tab[0]=DataArrayInt([0,2,3,4,6,7])
5890         tab[-1]=DataArrayInt([2,3,4,5,9])
5891         fs=MEDFileFields()
5892         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5893         tab[1]=arr0
5894         #
5895         fname0="Field0"
5896         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5897         t0=(16.5,3,4)
5898         ic=["toto [m]"]
5899         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5900         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5901         f0.setMesh(m0) ; f0.setName(fname0)
5902         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5903         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5904         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]))
5905         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5906         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5907         fmts.pushBackTimeStep(f1ts)
5908         #
5909         mmOut=mm.extractPart(tab)
5910         #
5911         fsPart0=fs.extractPart(tab,mm)
5912         self.assertEqual(len(fsPart0),1)
5913         fmtsP=fsPart0[0]
5914         self.assertEqual(len(fmtsP),1)
5915         f1ts=fmtsP[0]
5916         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5917         #
5918         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5919         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5920         #
5921         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5922         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5923         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5924         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5925         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5926         #
5927         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5928         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5929         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5930         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5931         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5932         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5933         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5934         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5935         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5936         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5937         #
5938         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5939         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5940         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5941         # multisteps
5942         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5943         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5944         for i,tt in enumerate(tss):
5945             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5946             myarr=arr0_0+i*1000.
5947             f0.setArray(myarr)
5948             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5949             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5950             pass
5951         fsPart1=fs.extractPart(tab,mm)
5952         self.assertEqual(len(fsPart1),1)
5953         fmtsP=fsPart1[0]
5954         self.assertEqual(len(fmtsP),len(tss))
5955         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5956             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5957             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5958             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5959             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5960             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5961             self.assertEqual(fPart.getTime(),list(tt))
5962             pass
5963         pass
5964
5965     @WriteInTmpDir
5966     def testSymmetryPlusAggregationMFD1(self):
5967         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5968         fname1="Pyfile106_1.med"
5969         fname2="Pyfile106_2.med"
5970         fname3="Pyfile106_3.med"
5971         meshName="mesh"
5972         mm1=MEDFileUMesh()
5973         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5974         mm1.setCoords(da1)
5975         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5976         mm1_0.setCoords(da1)
5977         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5978         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5979         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5980         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5981         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5982         mm1[0]=mm1_0
5983         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5984         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5985         #
5986         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5987         mm1_1.setCoords(da1)
5988         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5989         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5990         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5991         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5992         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5993         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5994         mm1[-1]=mm1_1
5995         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5996         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5997         for i in range(1,10):
5998             mm1.setFamilyId("F%d"%i,i)
5999         mm1.setFamilyId("FAMILLE_ZERO",0)
6000         mm1.setFamilyId("H1",100)
6001         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
6002         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
6003         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
6004         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
6005         ##############
6006         mm2=MEDFileUMesh()
6007         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]"])
6008         mm2.setCoords(da1)
6009         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
6010         mm2_0.setCoords(da1)
6011         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
6012         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
6013         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
6014         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
6015         mm2[0]=mm2_0
6016         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
6017         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
6018         #
6019         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
6020         mm2_1.setCoords(da1)
6021         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
6022         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
6023         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
6024         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
6025         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
6026         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
6027         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
6028         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
6029         mm2[-1]=mm2_1
6030         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
6031         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
6032         for i in range(1,12):
6033             mm2.setFamilyId("G%d"%i,i+30)
6034         mm2.setFamilyId("H1",100)
6035         mm2.setFamilyId("FAMILLE_ZERO",0)
6036         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
6037         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
6038         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
6039         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
6040         #
6041         mm=MEDFileUMesh.Aggregate([mm1,mm2])
6042         #######
6043         def CheckMesh(tester,mm):
6044             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]"])
6045             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
6046             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])))
6047             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
6048             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])))
6049             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
6050             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
6051             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
6052             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
6053             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
6054             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)]
6055             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6056             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6057             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
6058             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
6059             pass
6060         CheckMesh(self,mm)
6061         ##
6062         fieldName="zeField"
6063         t1=(2.3,3,5)
6064         t2=(5.6,7,12)
6065         infoc=["dd [W]","eee [kA]"]
6066         ##
6067         fmts1=MEDFileFieldMultiTS()
6068         f1ts1=MEDFileField1TS()
6069         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
6070         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
6071         arr1.setInfoOnComponents(infoc)
6072         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
6073         f1_1.checkConsistencyLight()
6074         f1ts1.setFieldNoProfileSBT(f1_1)
6075         #
6076         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
6077         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
6078         arr2.setInfoOnComponents(infoc)
6079         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
6080         f1_2.checkConsistencyLight()
6081         f1ts1.setFieldNoProfileSBT(f1_2)
6082         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
6083         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
6084         arr3.setInfoOnComponents(infoc)
6085         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
6086         f1_3.checkConsistencyLight()
6087         f1ts1.setFieldNoProfileSBT(f1_3)
6088         fmts1.pushBackTimeStep(f1ts1)
6089         #
6090         f1ts2=f1ts1.deepCopy()
6091         f1ts2.setTime(t2[1],t2[2],t2[0])
6092         f1ts2.getUndergroundDataArray()[:]+=2000
6093         fmts1.pushBackTimeStep(f1ts2)
6094         ### fmts2
6095         fmts2=MEDFileFieldMultiTS()
6096         f1ts3=MEDFileField1TS()
6097         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
6098         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
6099         arr4.setInfoOnComponents(infoc)
6100         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
6101         f2_1.checkConsistencyLight()
6102         f1ts3.setFieldNoProfileSBT(f2_1)
6103         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
6104         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
6105         arr5.setInfoOnComponents(infoc)
6106         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
6107         f2_2.checkConsistencyLight()
6108         f1ts3.setFieldNoProfileSBT(f2_2)
6109         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
6110         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
6111         arr6.setInfoOnComponents(infoc)
6112         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
6113         f2_3.checkConsistencyLight()
6114         f1ts3.setFieldNoProfileSBT(f2_3)
6115         fmts2.pushBackTimeStep(f1ts3)
6116         #
6117         f1ts4=f1ts3.deepCopy()
6118         f1ts4.setTime(t2[1],t2[2],t2[0])
6119         f1ts4.getUndergroundDataArray()[:]+=2000
6120         fmts2.pushBackTimeStep(f1ts4)
6121         #
6122         mfd1=MEDFileData()
6123         mfd1.setMeshes(MEDFileMeshes())
6124         mfd1.getMeshes().pushMesh(mm1)
6125         mfd1.setFields(MEDFileFields())
6126         mfd1.getFields().pushField(fmts1)
6127         #
6128         mfd2=MEDFileData()
6129         mfd2.setMeshes(MEDFileMeshes())
6130         mfd2.getMeshes().pushMesh(mm2)
6131         mfd2.setFields(MEDFileFields())
6132         mfd2.getFields().pushField(fmts2)
6133         # ze Call !
6134         mfd=MEDFileData.Aggregate([mfd1,mfd2])
6135         def CheckMFD(tester,mfd):
6136             tester.assertEqual(len(mfd.getMeshes()),1)
6137             tester.assertEqual(len(mfd.getFields()),1)
6138             CheckMesh(self,mfd.getMeshes()[0])
6139             tester.assertEqual(len(mfd.getFields()[0]),2)
6140             zeF1=mfd.getFields()[0][0]
6141             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6142             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6143             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6144             ref.renumberCells(o2n)
6145             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
6146             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6147             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6148             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6149             ref.renumberCells(o2n)
6150             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
6151             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6152             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6153             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6154             ref.renumberCells(o2n)
6155             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
6156             #
6157             zeF2=mfd.getFields()[0][1]
6158             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
6159             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
6160             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6161             ref.renumberCells(o2n)
6162             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6163             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
6164             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
6165             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
6166             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6167             ref.renumberCells(o2n)
6168             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6169             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
6170             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
6171             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
6172             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
6173             ref.renumberCells(o2n)
6174             ref.setTime(*t2) ; ref.getArray()[:]+=2000
6175             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
6176         CheckMFD(self,mfd)
6177         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
6178         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
6179         CheckMFD(self,mfd)
6180         pass
6181
6182     @WriteInTmpDir
6183     def testAggregateWithGroups(self):
6184         """ Testing MEDFileUMesh::Aggretate when groups are present. """
6185         def generate(grp_name, offset):
6186             coo = DataArrayDouble([0., 1., 2.])
6187             coo += offset
6188             m = MEDCouplingCMesh("toto")
6189             m.setCoords(coo, coo)
6190             m = m.buildUnstructured()
6191             mu = MEDFileUMesh.New()
6192             mu.setMeshAtLevel(0, m)
6193             g = DataArrayInt([0])
6194             g.setName(grp_name)
6195             g2 = DataArrayInt([1])
6196             g2.setName("common")  # make a common group for all meshes being merged
6197             mu.setGroupsAtLevel(0, [g, g2])
6198             return mu
6199
6200         m1 = generate("A", 0.)
6201         m2 = generate("B", 2.)
6202         mm = MEDFileUMesh.Aggregate([m1,m2])
6203
6204         self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1])
6205         self.assertEqual(mm.getNumberFieldAtLevel(0), None)
6206         refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)]
6207         self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
6208         self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
6209         self.assertEqual(mm.getGroupsNames(),('A','B', 'common'))
6210         self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0])
6211         self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4])
6212         self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5])
6213
6214         pass
6215
6216     @WriteInTmpDir
6217     def testExtrudedMesh1(self):
6218         fname="Pyfile107.med"
6219         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
6220         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
6221         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
6222         mm=MEDFileUMesh(ex)
6223         mm.write(fname,2)
6224         ex2=mm.convertToExtrudedMesh()
6225         mm2=MEDFileMesh.New(fname)
6226         ex3=mm2.convertToExtrudedMesh()
6227         self.assertTrue(ex.isEqual(ex2,1e-12))
6228         self.assertTrue(ex.isEqual(ex3,1e-12))
6229         pass
6230
6231     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
6232     @WriteInTmpDir
6233     def testWriteInto30(self):
6234         fname="Pyfile108.med"
6235         fname2="Pyfile109.med"
6236         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
6237         mm=MEDFileUMesh() ; mm[0]=m
6238         mm.setFamilyId("FAMILLE_ZERO",0)
6239         #
6240         mm.write33(fname,2)
6241         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
6242         mm2=MEDFileUMesh(fname)
6243         self.assertTrue(mm.isEqual(mm2,1e-12))
6244         #
6245         mm.write(fname2,2)
6246         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
6247         pass
6248
6249     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6250     @WriteInTmpDir
6251     def testPickelizationOfMEDFileObjects1(self):
6252         fname="Pyfile110.med"
6253         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)
6254         m0=MEDCouplingUMesh("Mesh",2)
6255         m0.allocateCells(5)
6256         m0.insertNextCell(NORM_TRI3,[1,4,2])
6257         m0.insertNextCell(NORM_TRI3,[4,5,2])
6258         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
6259         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
6260         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
6261         m0.finishInsertingCells()
6262         m0.setCoords(coo)
6263         m1=MEDCouplingUMesh(m0.getName(),1)
6264         m1.allocateCells(9)
6265         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
6266         for i in range(9):
6267             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
6268             pass
6269         m1.finishInsertingCells()
6270         m1.setCoords(coo)
6271         #
6272         m=MEDFileUMesh()
6273         m.setMeshAtLevel(0,m0)
6274         m.setMeshAtLevel(-1,m1)
6275         #
6276         dt=3 ; it=2 ; tim=4.5
6277         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6278         fieldNode0.setName("fieldNode0")
6279         fieldNode0.setTime(tim,dt,it)
6280         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
6281         arr=DataArrayDouble([10,11,12,13,14])
6282         fieldNode0.setArray(arr)
6283         f0=MEDFileField1TS()
6284         f0.setFieldProfile(fieldNode0,m,0,pfl0)
6285         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
6286         fieldNode1.setName("fieldNode1")
6287         fieldNode1.setTime(tim,dt,it)
6288         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
6289         arr1=DataArrayDouble([20,21,22,23,24,25,26])
6290         fieldNode1.setArray(arr1)
6291         f1=MEDFileField1TS()
6292         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
6293         mfd=MEDFileData()
6294         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
6295         mfd.getMeshes().pushMesh(m)
6296         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
6297         mfd.getFields().pushField(fmts)
6298         # first start gently
6299         d=mfd.serialize()
6300         mfd2=MEDFileData(d)
6301         self.assertEqual(len(mfd2.getMeshes()),1)
6302         self.assertEqual(len(mfd2.getFields()),1)
6303         self.assertEqual(len(mfd2.getFields()[0]),1)
6304         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6305         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
6306         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
6307         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
6308         # OK now end of joke -> serialization of MEDFileData
6309         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
6310         mfd3=pickle.loads(st)
6311         # check of object
6312         self.assertEqual(len(mfd3.getMeshes()),1)
6313         self.assertEqual(len(mfd3.getFields()),1)
6314         self.assertEqual(len(mfd3.getFields()[0]),1)
6315         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
6316         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
6317         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
6318         # serialization of MEDFileFields
6319         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
6320         fs4=pickle.loads(st)
6321         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
6322         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
6323         # serialization of MEDFileFieldMulitTS
6324         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
6325         fmts5=pickle.loads(st)
6326         ff5=fmts5[0].field(mfd3.getMeshes()[0])
6327         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
6328         # serialization of MEDFileField1TS
6329         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
6330         f1ts6=pickle.loads(st)
6331         ff6=f1ts6.field(mfd3.getMeshes()[0])
6332         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
6333         # serialization of MEDFileMeshes
6334         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
6335         ms7=pickle.loads(st)
6336         self.assertEqual(len(ms7),1)
6337         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
6338         pass
6339
6340     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
6341     @WriteInTmpDir
6342     def testPickelizationOfMEDFileObjects2(self):
6343         # CMesh
6344         self.internalMEDMesh6() # generates MEDFileMesh5.med file
6345         mm=MEDFileMesh.New("MEDFileMesh5.med")
6346         self.assertTrue(isinstance(mm,MEDFileCMesh))
6347         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6348         mm2=pickle.loads(st)
6349         self.assertTrue(isinstance(mm2,MEDFileCMesh))
6350         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
6351         # CurveLinear
6352         self.internalCurveLinearMesh1() # generates Pyfile55.med
6353         mm=MEDFileMesh.New("Pyfile55.med")
6354         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
6355         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
6356         mm3=pickle.loads(st)
6357         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
6358         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
6359         self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
6360         # MEDFileIntFieldMultiTS
6361         fs4=MEDFileFields("Pyfile63.med")
6362         ms4=MEDFileMeshes("Pyfile63.med")
6363         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
6364         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
6365         fmts5=pickle.loads(st)
6366         self.assertEqual(len(fs4[0]),len(fmts5))
6367         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
6368         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6369         # MEDFileIntField1TS
6370         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
6371         f1ts6=pickle.loads(st)
6372         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
6373         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
6374         # MEDFileParameters
6375         self.internalParameters1()# generates Pyfile56.med
6376         params=MEDFileParameters("Pyfile56.med")
6377         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
6378         params7=pickle.loads(st)
6379         self.assertEqual(len(params),len(params7))
6380         for i in range(len(params)):
6381             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
6382             pass
6383         pass
6384
6385     @WriteInTmpDir
6386     def testGlobalNumOnNodes1(self):
6387         """Test global number on nodes here. Used by partitionners."""
6388         fname="Pyfile112.med"
6389         arr=DataArrayDouble(5) ; arr.iota()
6390         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6391         m.setName("mesh")
6392         mm=MEDFileUMesh()
6393         mm[0]=m
6394         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
6395         d=DataArrayInt([7,8,9,2,0])
6396         dRef=d.deepCopy()
6397         mm.setGlobalNumFieldAtLevel(1,d)
6398         mm.checkConsistency()
6399         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
6400         mm.checkConsistency()
6401         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
6402         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6403         mm.write(fname,2)
6404         mm2=MEDFileMesh.New(fname)
6405         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6406         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
6407         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
6408         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
6409         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
6410         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
6411         pass
6412
6413     @WriteInTmpDir
6414     def testPartialReadOfEntities1(self):
6415         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
6416         fname="Pyfile113.med"
6417         arr=DataArrayDouble(5) ; arr.iota()
6418         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
6419         m.setName("mesh")
6420         mm=MEDFileUMesh()
6421         mm[0]=m
6422         #
6423         fieldName="Field"
6424         ts1=(5.,1,2)
6425         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
6426         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
6427         f1.setTime(*ts1)
6428         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
6429         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
6430         f2.setTime(*ts1)
6431         f1ts=MEDFileField1TS()
6432         f1ts.setFieldNoProfileSBT(f1)
6433         f1ts.setFieldNoProfileSBT(f2)
6434         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
6435         f1ts_2=f1ts.deepCopy()
6436         f1ts_2.getUndergroundDataArray()[:]+=2
6437         f1ts_2.setTime(3,4,6.)
6438         fmts=MEDFileFieldMultiTS()
6439         fmts.pushBackTimeStep(f1ts)
6440         fmts.pushBackTimeStep(f1ts_2)
6441         #
6442         mm.write(fname,2)
6443         fmts.write(fname,0)
6444         #
6445         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
6446         mm=MEDFileMesh.New(fname)
6447         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)
6448         fs.loadArrays()
6449         self.assertEqual(len(fs),1)
6450         fmts=fs[0]
6451         self.assertEqual(len(fmts),2)
6452         ff0=fmts[0] ; ff1=fmts[1]
6453         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6454         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6455         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6456         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6457         pass
6458
6459     @WriteInTmpDir
6460     def testFloat32InMEDFileFieldStar1(self):
6461         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6462         fname="Pyfile114.med"
6463         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6464         f1=f1.convertToFloatField()
6465         m1=f1.getMesh()
6466         mm1=MEDFileUMesh.New()
6467         mm1.setCoords(m1.getCoords())
6468         mm1.setMeshAtLevel(0,m1)
6469         mm1.setName(m1.getName())
6470         mm1.write(fname,2)
6471         ff1=MEDFileFloatField1TS()
6472         ff1.setFieldNoProfileSBT(f1)
6473         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6474         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6475         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6476         ff1.write(fname,0)
6477         a,b=ff1.getUndergroundDataArrayExt()
6478         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6479         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6480         ff2=MEDFileAnyTypeField1TS.New(fname)
6481         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6482         self.assertEqual(ff2.getTime(),[0,1,2.0])
6483         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6484         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6485         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6486         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6487         ff2.setTime(1,2,3.)
6488         c=ff2.getUndergroundDataArray() ; c*=2
6489         ff2.write(fname,0) # 2 time steps in
6490         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6491         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6492         self.assertEqual(len(ffs1),2)
6493         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6494         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6495         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6496         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6497         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6498         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6499         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6500         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6501         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6502         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6503         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6504         for it in ffs1:
6505             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6506             bc+=a.getArray()
6507             pass
6508         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6509         nf1=MEDCouplingFieldFloat(ON_NODES)
6510         nf1.setTime(9.,10,-1)
6511         nf1.setMesh(f1.getMesh())
6512         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6513         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6514         nff1=MEDFileFloatField1TS.New()
6515         nff1.setFieldNoProfileSBT(nf1)
6516         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6517         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6518         nff1.write(fname,0)
6519         #
6520         nf2=MEDCouplingFieldFloat(ON_NODES)
6521         nf2.setTime(19.,20,-11)
6522         nf2.setMesh(f1.getMesh())
6523         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6524         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6525         nff2=MEDFileFloatField1TS.New()
6526         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6527         nff2.setFieldProfile(nf2,mm1,0,npfl)
6528         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6529         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6530         self.assertTrue(b.isEqual(npfl))
6531         self.assertTrue(a.isEqual(narr2,1e-7))
6532         nff2.write(fname,0)
6533         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6534         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6535         self.assertTrue(b.isEqual(npfl))
6536         self.assertTrue(a.isEqual(narr2,1e-7))
6537         #
6538         nf3=MEDCouplingFieldDouble(ON_NODES)
6539         nf3.setName("VectorFieldOnNodesDouble")
6540         nf3.setTime(29.,30,-21)
6541         nf3.setMesh(f1.getMesh())
6542         nf3.setArray(f1.getMesh().getCoords())
6543         nff3=MEDFileField1TS.New()
6544         nff3.setFieldNoProfileSBT(nf3)
6545         nff3.write(fname,0)
6546         fs=MEDFileFields(fname)
6547         self.assertEqual(len(fs),4)
6548         ffs=[it for it in fs]
6549         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6550         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6551         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6552         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6553         #
6554         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6555         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6556         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6557         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6558         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6559         #
6560         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6561         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6562         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6563         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6564         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6565         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6566         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6567         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6568         #
6569         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6570         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6571         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6572         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6573         pass
6574
6575     @WriteInTmpDir
6576     def testPenta18_1(self):
6577         """EDF8478 : Test of read/write of penta18"""
6578         fname="Pyfile115.med"
6579         arr=DataArrayDouble([
6580             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6581             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6582             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6583             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6584             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6585             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6586         m=MEDCouplingUMesh("mesh",3)
6587         m.setCoords(arr)
6588         m.allocateCells(1)
6589         m.insertNextCell(NORM_PENTA18,list(range(18)))
6590         m.checkConsistencyLight()
6591         #
6592         f=MEDCouplingFieldDouble(ON_NODES)
6593         f.setMesh(m)
6594         f.setName("FieldOnPenta18")
6595         f.setArray(DataArrayDouble(list(range(18))))
6596         f.checkConsistencyLight()
6597         #
6598         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6599         #
6600         f2=MEDCouplingFieldDouble(ON_NODES)
6601         f2.setMesh(m)
6602         f2.setName("FieldOnPenta18Sub")
6603         f2.setArray(DataArrayDouble(list(range(18))))
6604         f2.checkConsistencyLight()
6605         WriteField(fname,f2,True)
6606         f3=ReadField(fname)
6607         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6608         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6609         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6610         pass
6611
6612     @WriteInTmpDir
6613     def testFieldsLinearToQuadratic(self):
6614         fname="Pyfile117.med"
6615         arr=DataArrayDouble([0,1])
6616         m=MEDCouplingCMesh();
6617         m.setCoords(arr,arr,arr)
6618         m=m.buildUnstructured()
6619         m2=m.deepCopy()
6620         m2.translate([2,0,0])
6621         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6622         m3.setName("mesh")
6623         mm=MEDFileUMesh()
6624         mm[0]=m3
6625         mmq=mm.linearToQuadratic(0)
6626         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6627         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6628         #
6629         f=MEDCouplingFieldDouble(ON_NODES)
6630         f.setName("field")
6631         f.setMesh(m3)
6632         f.setTime(3.,1,2)
6633         arr=DataArrayDouble(m3.getNumberOfNodes())
6634         arr.iota()
6635         f.setArray(arr)
6636         f1ts=MEDFileField1TS()
6637         f1ts.setFieldNoProfileSBT(f)
6638         fmts=MEDFileFieldMultiTS()
6639         fmts.pushBackTimeStep(f1ts)
6640         f1ts_2=f1ts.deepCopy()
6641         f1ts_2.setTime(3,4,5.)
6642         f1ts_2.getUndergroundDataArray()[:]*=2.
6643         fmts.pushBackTimeStep(f1ts_2)
6644         fs=MEDFileFields()
6645         fs.pushField(fmts)
6646         fs2=fs.linearToQuadratic(mms,mmsq)
6647         self.myTester1(fs2,mmsq[0])
6648         # A small Write/Read and test again
6649         mms.write(fname,2) ; fs.write(fname,0)
6650         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6651         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6652         fs2=fs.linearToQuadratic(mms,mmqs)
6653         self.myTester1(fs2,mmqs[0])
6654         pass
6655
6656     def myTester1(self,fs2,mmq):
6657         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)
6658         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])
6659         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])
6660         fToTest=fs2[0][0].field(mmq)
6661         self.assertEqual(fToTest.getTime(),[3.,1,2])
6662         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6663         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6664         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6665         self.assertTrue(fToTest.getArray().isEqual(dataExp2,1e-12))
6666         # testing 2nd timestep
6667         fToTest=fs2[0][1].field(mmq)
6668         self.assertEqual(fToTest.getTime(),[5.,3,4])
6669         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6670         self.assertTrue(mTest.getNodalConnectivity().isEqual(dataExp1))
6671         self.assertTrue(mTest.getCoords().isEqual(dataExp,1e-12))
6672         self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
6673         pass
6674
6675     @WriteInTmpDir
6676     def testFieldsLinearToQuadratic2(self):
6677         """Same than testFieldsLinearToQuadratic but with profile on NODES"""
6678         GeneratePyfile18(self)
6679         fname="Pyfile118.med"
6680         arr=DataArrayDouble([0,1])
6681         m=MEDCouplingCMesh();
6682         m.setCoords(arr,arr,arr)
6683         m=m.buildUnstructured()
6684         m2=m.deepCopy()
6685         m2.translate([2,0,0])
6686         m3=MEDCouplingUMesh.MergeUMeshes([m,m2])
6687         m3.setName("mesh")
6688         # add a point for fun
6689         m3.setCoords(DataArrayDouble.Aggregate(m3.getCoords(),DataArrayDouble([1.5,1.5,1.5],1,3)))
6690         #
6691         mm=MEDFileUMesh()
6692         mm[0]=m3
6693         mmq=mm.linearToQuadratic(0)
6694         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6695         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6696         #
6697         f=MEDCouplingFieldDouble(ON_NODES)
6698         f.setName("field")
6699         f.setMesh(m3)
6700         f.setTime(3.,1,2)
6701         arr=DataArrayDouble(8) ; arr.iota()
6702         arr.iota()
6703         f.setArray(arr)
6704         f1ts=MEDFileField1TS()
6705         pfl=DataArrayInt([8,9,10,11,12,13,14,15]) ; pfl.setName("pfl")
6706         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 8 nodes of cell #1
6707         f1ts_2=f1ts.deepCopy()
6708         f1ts_2.setTime(3,4,5.)
6709         f1ts_2.getUndergroundDataArray()[:]*=4.
6710         fmts=MEDFileFieldMultiTS()
6711         fmts.pushBackTimeStep(f1ts)
6712         fmts.pushBackTimeStep(f1ts_2)
6713         fs=MEDFileFields()
6714         fs.pushField(fmts)
6715         fs2=fs.linearToQuadratic(mms,mmsq)
6716         mms.write(fname,2) ; fs.write(fname,0)
6717         #
6718         self.myTester2(fs2,mmq)
6719         # Read/write
6720         mms=MEDFileMeshes(fname) ; fs=MEDFileFields(fname)
6721         mmq=mms[0].linearToQuadratic(0) ; mmqs=MEDFileMeshes() ; mmqs.pushMesh(mmq)
6722         fs2=fs.linearToQuadratic(mms,mmqs)
6723         self.myTester2(fs2,mmq)
6724         ## More vicious add single node 16
6725         mm=MEDFileUMesh()
6726         mm[0]=m3
6727         mmq=mm.linearToQuadratic(0)
6728         mms=MEDFileMeshes() ; mms.pushMesh(mm)
6729         mmsq=MEDFileMeshes() ; mmsq.pushMesh(mmq)
6730         #
6731         f=MEDCouplingFieldDouble(ON_NODES)
6732         f.setName("field")
6733         f.setMesh(m3)
6734         f.setTime(3.,1,2)
6735         arr=DataArrayDouble(9) ; arr.iota()
6736         arr.iota()
6737         f.setArray(arr)
6738         f1ts=MEDFileField1TS()
6739         pfl=DataArrayInt([8,9,10,11,12,13,14,15,16]) ; pfl.setName("pfl")
6740         f1ts.setFieldProfile(f,mm,0,pfl) # f lying on 9 nodes of cell #1 + orphan node
6741         fmts=MEDFileFieldMultiTS()
6742         fmts.pushBackTimeStep(f1ts)
6743         fs=MEDFileFields()
6744         fs.pushField(fmts)
6745         fs2=fs.linearToQuadratic(mms,mmsq)
6746         #
6747         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")
6748         f1tsToTest=fs2[0][0]
6749         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])
6750         assert(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6751         assert(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6752         assert(f1tsToTest.getFieldSplitedByType()==[(40,[(1,(0,21),'pfl_NODE','')])])
6753         pass
6754
6755     def myTester2(self,fs2,mmq):
6756         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")
6757         f1tsToTest=fs2[0][0]
6758         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])
6759         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6760         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(exp1,1e-12))
6761         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6762         fToTest=fs2[0][0].field(mmq)
6763         self.assertEqual(fToTest.getTime(),[3.,1,2])
6764         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6765         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])))
6766         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))
6767         self.assertTrue(fToTest.getArray().isEqual(exp1,1e-12))
6768         # 2nd Time step
6769         f1tsToTest=fs2[0][1]
6770         self.assertTrue(f1tsToTest.getProfile("pfl_NODE").isEqual(pflExpected))
6771         self.assertTrue(f1tsToTest.getUndergroundDataArray().isEqual(4*exp1,1e-12))
6772         self.assertEqual(f1tsToTest.getFieldSplitedByType(),[(NORM_ERROR,[(1,(0,20),'pfl_NODE','')])])
6773         fToTest=fs2[0][1].field(mmq)
6774         self.assertEqual(fToTest.getTime(),[5.,3,4])
6775         mTest=MEDCoupling1SGTUMesh(fToTest.getMesh())
6776         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])))
6777         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))
6778         self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12))
6779
6780         pass
6781
6782     @WriteInTmpDir
6783     def testSetFieldProfileFlatly1(self):
6784         """ 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
6785         a profile."""
6786         arr=DataArrayDouble(10) ; arr.iota()
6787         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6788         m=m.buildUnstructured()
6789         m2=m.deepCopy()
6790         m2.simplexize(0)
6791         m=MEDCouplingUMesh.MergeUMeshes(m2,m)
6792         m.setName("mesh")
6793         mm=MEDFileUMesh()
6794         mm[0]=m
6795         f=MEDCouplingFieldDouble(ON_CELLS)
6796         f.setMesh(m)
6797         arr=DataArrayDouble(m.getNumberOfCells())
6798         arr.iota()
6799         f.setArray(arr)
6800         f.setName("field")
6801         pfl=DataArrayInt(m.getNumberOfCells()) ; pfl.iota() ; pfl.setName("pfl")
6802         #
6803         refSp=[(3,[(0,(0,162),'','')]),(4,[(0,(162,243),'','')])]
6804         refSp1=[(3,[(0,(0,162),'pfl_NORM_TRI3','')]),(4,[(0,(162,243),'pfl_NORM_QUAD4','')])]
6805         #
6806         f1ts=MEDFileField1TS()
6807         f1ts.setFieldProfile(f,mm,0,pfl)
6808         self.assertEqual(f1ts.getPfls(),()) # here setFieldProfile has detected useless pfl -> no pfl
6809         self.assertEqual(f1ts.getFieldSplitedByType(),refSp)
6810         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6811         #
6812         f1ts=MEDFileField1TS()
6813         f1ts.setFieldProfileFlatly(f,mm,0,pfl) # no optimization attempt. Create pfl unconditionally
6814         self.assertEqual(f1ts.getPfls(),("%s_NORM_TRI3"%pfl.getName(),"%s_NORM_QUAD4"%pfl.getName()))
6815         self.assertEqual(f1ts.getFieldSplitedByType(),refSp1)
6816         self.assertTrue(f1ts.field(mm).isEqual(f,1e-12,1e-12)) # the essential
6817         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3").isIota(162))
6818         self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
6819         pass
6820
6821     @WriteInTmpDir
6822     def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
6823         """ Here multi level groups are created"""
6824         arr=DataArrayDouble(11) ; arr.iota()
6825         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
6826         m=m.buildUnstructured()
6827         m.setName("mesh")
6828         m1=m.buildDescendingConnectivity()[0]
6829         mm=MEDFileUMesh()
6830         mm[0]=m ; mm[-1]=m1
6831         ################
6832         grpName="grp0"
6833         grp0_0=DataArrayInt([0,1,2,6]) ; grp0_0.setName(grpName)
6834         grp0_1=DataArrayInt([0,1,2,7]) ; grp0_1.setName(grpName)
6835         grp1=DataArrayInt([1,2,3,5,6]) ; grp1.setName("grp1")
6836         grp2=DataArrayInt([2,3,5,8]) ; grp2.setName("grp2")
6837         ################ ajouter un groupe sur plusieurs niveau
6838         mm.addGroup(0,grp1)
6839         mm.addGroup(-1,grp2)
6840         mm.addGroup(0,grp0_0)
6841         mm.addGroup(-1,grp0_1)
6842         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6843         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6844         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6845         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6846         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6847         self.assertRaises(InterpKernelException,mm.addGroup,-1,grp0_1) # raise
6848         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6849         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6850         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6851         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6852         mm.removeGroupAtLevel(0,grpName)
6853         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(-1,))
6854         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6855         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6856         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6857         mm.removeGroupAtLevel(-1,grpName)
6858         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),())
6859         self.assertRaises(InterpKernelException,mm.removeGroupAtLevel,-2,grpName)
6860         mm.addGroup(-1,grp0_1)
6861         mm.addGroup(0,grp0_0)
6862         self.assertEqual(mm.getGrpNonEmptyLevels(grpName),(0,-1))
6863         self.assertTrue(mm.getGroupArr(0,grpName).isEqual(grp0_0))
6864         self.assertTrue(mm.getGroupArr(-1,grpName).isEqual(grp0_1))
6865         self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
6866         self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
6867         pass
6868
6869     @WriteInTmpDir
6870     def testYutaka(self):
6871         """ 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...
6872         Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
6873         mn="mesh"
6874         m=MEDCouplingCMesh()
6875         arr=DataArrayDouble(4) ; arr.iota()
6876         m.setCoords(arr,arr,arr)
6877         m=m.buildUnstructured()
6878         m.setName(mn)
6879         #
6880         m=m.buildUnstructured()
6881         m1=m.buildDescendingConnectivity()[0]
6882         #
6883         mm=MEDFileUMesh()
6884         mm[0]=m
6885         mm[-1]=m1
6886         #
6887         grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
6888         mm.addGroup(0,grp0)
6889         grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
6890         mm.addGroup(0,grp1)
6891         grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
6892         mm.addGroup(0,grp2)
6893         grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
6894         mm.addGroup(-1,grp3)
6895         self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
6896         grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
6897         mm.addNodeGroup(grp4)
6898         mm.rearrangeFamilies()
6899         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
6900         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
6901         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
6902         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
6903         self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
6904
6905         for grp in [grp0,grp1,grp2,grp3,grp4]:
6906             self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
6907             pass
6908         pass
6909
6910     @WriteInTmpDir
6911     def testContxtMger1TS(self):
6912         fname="Pyfile119.med"
6913         coo=DataArrayDouble(1000) ; coo.iota()
6914         m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
6915         m.setName("mesh")
6916         WriteMesh(fname,m,True)
6917         f=MEDCouplingFieldDouble(ON_CELLS)
6918         f.setMesh(m)
6919         f.setName("Field")
6920         arr=DataArrayDouble(m.getNumberOfCells())
6921         f.setArray(arr)
6922         f.checkConsistencyLight()
6923         for i in range(10):
6924             arr[:]=float(i+1)
6925             f.setTime(float(i),i,0)
6926             WriteFieldUsingAlreadyWrittenMesh(fname,f)
6927             pass
6928         #
6929         mm=MEDFileMesh.New(fname)
6930         fmts=MEDFileFieldMultiTS(fname,False)
6931         refSize=fmts.getHeapMemorySize()
6932         for f1ts in fmts:
6933             with f1ts:
6934                 f=f1ts.field(mm)
6935                 pass
6936             pass
6937         self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10))
6938         pass
6939
6940     def testZipFamilies1(self):
6941         """
6942         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6943         """
6944         mname="mesh"
6945         arr=DataArrayDouble(10) ; arr.iota()
6946         m=MEDCouplingCMesh()
6947         m.setCoords(arr,arr)
6948         m=m.buildUnstructured()
6949         m.setName(mname)
6950         #
6951         mm=MEDFileUMesh()
6952         mm[0]=m
6953         for i in range(m.getNumberOfCells()):
6954             d = DataArrayInt([i])
6955             d.setName("grp%d"%i)
6956             mm.addGroup(0,d)
6957             pass
6958
6959         grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1)
6960         grp_all.setName("grp_all")
6961         mm.addGroup(0,grp_all)
6962         for i in range(m.getNumberOfCells()):
6963             mm.removeGroup("grp{}".format(i))
6964             pass
6965         #
6966         mm.zipFamilies() # the method to test
6967         #
6968         self.assertEqual(mm.getGroupsNames(),("grp_all",))
6969         self.assertEqual(len(mm.getFamiliesNames()),1)
6970         self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1)))
6971         pass
6972
6973     def testZipFamilies2(self):
6974         """
6975         MEDFileMesh.zipFamilies tries to reduce family partitions under groups.
6976         """
6977         mname="mesh"
6978         arr=DataArrayDouble(21) ; arr.iota()
6979         m=MEDCouplingCMesh()
6980         m.setCoords(arr)
6981         m=m.buildUnstructured()
6982         m.setName(mname)
6983         #
6984         mm=MEDFileUMesh()
6985         mm[0]=m
6986         # 1 and 3 to be merged
6987         # 2 and 5 to be merged
6988         mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3]))
6989         for i in range(1,9):
6990             mm.setFamilyId("Fam_{}".format(i),-i)
6991         mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"])
6992         mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"])
6993         mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"])
6994         #
6995         grp0=DataArrayInt([0,1,3,8,10,19])
6996         grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19])
6997         grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17])
6998         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
6999         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
7000         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
7001         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
7002         mm.zipFamilies()
7003         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2'))
7004         self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0))
7005         self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1))
7006         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
7007         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
7008         pass
7009
7010     def testMeshConvertFromMEDFileGeoType(self):
7011         self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
7012         self.assertEqual(MEDFileMesh.ConvertToMEDFileGeoType(NORM_HEXA20),320)
7013
7014     @WriteInTmpDir
7015     def testFieldInt64_0(self):
7016         """
7017         Small basic test with I/O of field in int64.
7018         """
7019         fname="Pyfile120.med"
7020         arr = DataArrayDouble([0,1])
7021         m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
7022         f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
7023         v = 1234567890123456
7024         f.setArray(DataArrayInt64([v]))
7025         f.setMesh(m)
7026         mm = MEDFileUMesh()
7027         mm[0] = m
7028         f1ts = MEDFileInt64Field1TS()
7029         f1ts.setFieldNoProfileSBT(f)
7030         fmts = MEDFileInt64FieldMultiTS()
7031         fmts.pushBackTimeStep(f1ts)
7032         fs = MEDFileFields()
7033         fs.pushField(fmts)
7034         mm.write(fname,2)
7035         fs.write(fname,0)
7036         #
7037         mm = MEDFileMesh.New(fname)
7038         fs = MEDFileFields(fname)
7039         f = fs[0][0].field(mm)
7040         self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
7041         self.assertEqual( f.getArray().getIJ(0,0) , v )
7042
7043     @WriteInTmpDir
7044     def testNonRegUMeshSubParts(self):
7045         """
7046         Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
7047         """
7048         fname = "Pyfile121.med"
7049         m0 = MEDCouplingUMesh("mesh",1)
7050         coords = DataArrayDouble([(0,0),(1,0),(2,0)])
7051         m0.setCoords(coords)
7052         m0.allocateCells()
7053         m0.insertNextCell(NORM_SEG2,[1,2])
7054         mm = MEDFileUMesh()
7055         mm[0] = m0
7056         m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
7057         m1.setCoords(m0.getCoords())
7058         m1.setNodalConnectivity(DataArrayInt([1,2]))
7059         m1.setName(m0.getName())
7060         mm[-1] = m1
7061         fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
7062         mm.zipCoords() # <- This call changes the coords and connectivity
7063         mm.write(fname,2)
7064         #
7065         mm = MEDFileMesh.New(fname)
7066         mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
7067         self.assertTrue( m0.isEqual(mm[0],1e-12) )
7068         pass
7069
7070     pass
7071
7072 if __name__ == "__main__":
7073     unittest.main()