]> SALOME platform Git repositories - tools/medcoupling.git/blob - src/MEDLoader/Swig/MEDLoaderTest3.py
Salome HOME
Checked 330rc2
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016  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
27 from distutils.version import LooseVersion
28
29 import sys
30 if sys.version_info.major < 3:
31     import cPickle as pickle
32 else:
33     import pickle
34
35 class StdOutRedirect(object):
36     def __init__(self,fileName):
37         import os,sys
38         sys.stderr.flush()
39         self.stdoutOld=os.dup(2)
40         self.fdOfSinkFile=os.open(fileName,os.O_CREAT | os.O_RDWR)
41         fd2=os.dup2(self.fdOfSinkFile,2)
42         self.origPyVal=sys.stderr
43         class FlushFile(object):
44             def __init__(self,f):
45                 self.f=f
46             def write(self,st):
47                 self.f.write(st)
48                 self.f.flush()
49             def flush(self):
50                 return self.f.flush()
51             def isatty(self):
52                 return self.f.isatty()
53         sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
54     def __del__(self):
55         import os,sys
56         sys.stderr=self.origPyVal
57         if sys.version_info.major >= 3:
58             self.fdOfSinkFile.close()
59             pass
60         #os.fsync(self.fdOfSinkFile)
61         os.fsync(2)
62         os.dup2(self.stdoutOld,2)
63         os.close(self.stdoutOld)
64
65 class MEDLoaderTest3(unittest.TestCase):
66     def testMEDMesh1(self):
67         fileName="Pyfile18.med"
68         mname="ExampleOfMultiDimW"
69         medmesh=MEDFileMesh.New(fileName,mname)
70         self.assertRaises(InterpKernelException,MEDFileMesh.New,fileName,"")
71         self.assertEqual((0,-1),medmesh.getNonEmptyLevels())
72         m1_0=medmesh.getLevel0Mesh(True)
73         m1_1=ReadUMeshFromFile(fileName,mname,0)
74         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
75         m2_0=medmesh.getLevelM1Mesh(True)
76         m2_1=ReadUMeshFromFile(fileName,mname,-1)
77         self.assertTrue(m2_0.isEqual(m2_1,1e-12));
78         pass
79
80     def testMEDMesh2(self):
81         fileName="Pyfile10.med"
82         mname="3DToto"
83         outFileName="MEDFileMesh1.med"
84         medmesh=MEDFileUMesh.New(fileName,mname)
85         self.assertEqual((0,),medmesh.getNonEmptyLevels())
86         m1_0=medmesh.getLevel0Mesh(True)
87         m1_1=ReadUMeshFromFile(fileName,mname,0)
88         self.assertTrue(m1_0.isEqual(m1_1,1e-12));
89         g1_0=medmesh.getGroup(0,"mesh2",True)
90         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh2"]);
91         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
92         g1_0=medmesh.getGroup(0,"mesh3",True)
93         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3"]);
94         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
95         g1_0=medmesh.getGroups(0,["mesh3","mesh2"])
96         g1_1=ReadUMeshFromGroups(fileName,mname,0,["mesh3","mesh2"]);
97         g1_1.setName(g1_0.getName())
98         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
99         g1_0=medmesh.getFamily(0,"Family_-3",True)
100         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3"]);
101         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
102         g1_0=medmesh.getFamilies(0,["Family_-3","Family_-5"],True)
103         g1_1=ReadUMeshFromFamilies(fileName,mname,0,["Family_-3","Family_-5"]);
104         g1_1.setName(g1_0.getName())
105         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
106         self.assertTrue(g1_0.isEqual(g1_1,1e-12));
107         medmesh.write(outFileName,2);
108         self.assertEqual([1,2,4,13,15],medmesh.getGroupArr(0,"mesh2",True).getValues());
109         self.assertEqual([1,2,15],medmesh.getFamilyArr(0,"Family_-3",True).getValues());
110         self.assertEqual([1,2,4,13,15],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"],True).getValues());
111         self.assertEqual([18,1,2,3,4,13,14,15],medmesh.getGroupsArr(0,["mesh2","mesh4","mesh3"],True).getValues());
112         famn=medmesh.getFamilyNameGivenId(0)
113         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,True);
114         #without renum
115         self.assertEqual([2,3,5,14,16],medmesh.getGroupArr(0,"mesh2").getValues());
116         self.assertEqual([2,3,16],medmesh.getFamilyArr(0,"Family_-3").getValues());
117         self.assertEqual([2,3,5,14,16],medmesh.getFamiliesArr(0,["Family_-5","Family_-3"]).getValues());
118         self.assertEqual([0,2,3,4,5,14,15,16],medmesh.getGroupsArr(0,["mesh2","mesh3","mesh4"],False).getValues());
119         self.assertRaises(InterpKernelException,medmesh.getNodeFamilyArr,famn,False);
120         pass
121
122     # this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
123     def testMEDMesh3(self):
124         outFileName="MEDFileMesh3.med"
125         c=DataArrayDouble.New()
126         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 ];
127         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
128         c.setValues(coords,9,2)
129         m=MEDCouplingUMesh.New();
130         m.setMeshDimension(2);
131         m.allocateCells(5);
132         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
133         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
134         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
135         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
136         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
137         m.finishInsertingCells();
138         m.setCoords(c)
139         m.checkConsistencyLight()
140         m1=MEDCouplingUMesh.New();
141         m1.setMeshDimension(1);
142         m1.allocateCells(3);
143         m1.insertNextCell(NORM_SEG2,2,[1,4])
144         m1.insertNextCell(NORM_SEG2,2,[3,6])
145         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
146         m1.finishInsertingCells();
147         m1.setCoords(c)
148         m1.checkConsistencyLight()
149         m2=MEDCouplingUMesh.New();
150         m2.setMeshDimension(0);
151         m2.allocateCells(4);
152         m2.insertNextCell(NORM_POINT1,1,[1])
153         m2.insertNextCell(NORM_POINT1,1,[3])
154         m2.insertNextCell(NORM_POINT1,1,[2])
155         m2.insertNextCell(NORM_POINT1,1,[6])
156         m2.finishInsertingCells();
157         m2.setCoords(c)
158         m2.checkConsistencyLight()
159         #
160         mm=MEDFileUMesh.New()
161         self.assertTrue(mm.getUnivNameWrStatus())
162         mm.setName("MyFirstMEDCouplingMEDmesh")
163         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
164         mm.setCoords(c)
165         mm.setMeshAtLevel(-1,m1);
166         mm.setMeshAtLevel(0,m);
167         mm.setMeshAtLevel(-2,m2);
168         # playing with groups
169         g1_2=DataArrayInt.New()
170         g1_2.setValues([1,3],2,1)
171         g1_2.setName("G1")
172         g2_2=DataArrayInt.New()
173         g2_2.setValues([1,2,3],3,1)
174         g2_2.setName("G2")
175         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
176         g1_1=DataArrayInt.New()
177         g1_1.setValues([0,1,2],3,1)
178         g1_1.setName("G1")
179         g2_1=DataArrayInt.New()
180         g2_1.setValues([0,2],2,1)
181         g2_1.setName("G2")
182         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
183         g1_N=DataArrayInt.New()
184         g1_N.setValues(list(range(8)),8,1)
185         g1_N.setName("G1")
186         g2_N=DataArrayInt.New()
187         g2_N.setValues(list(range(9)),9,1)
188         g2_N.setName("G2")
189         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
190         mm.createGroupOnAll(0,"GrpOnAllCell")
191         # check content of mm
192         t=mm.getGroupArr(0,"G1",False)
193         self.assertTrue(g1_2.isEqual(t));
194         t=mm.getGroupArr(0,"G2",False)
195         self.assertTrue(g2_2.isEqual(t));
196         t=mm.getGroupArr(-1,"G1",False)
197         self.assertTrue(g1_1.isEqual(t));
198         t=mm.getGroupArr(-1,"G2",False)
199         self.assertTrue(g2_1.isEqual(t));
200         t=mm.getGroupArr(1,"G1",False)
201         self.assertTrue(g1_N.isEqual(t));
202         t=mm.getGroupArr(1,"G2",False)
203         self.assertTrue(g2_N.isEqual(t));
204         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
205         t=mm.getGroupArr(0,"GrpOnAllCell")
206         self.assertTrue(t.getValues()==list(range(5)))
207         #
208         mmCpy=mm.deepCopy()
209         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0]) ; del mm
210         mmCpy.write(outFileName,2);
211         #
212         mm=MEDFileMesh.New(outFileName)
213         #
214         self.assertEqual([NORM_TRI3,NORM_QUAD4,NORM_POLYGON],mm.getGeoTypesAtLevel(0))
215         self.assertEqual([NORM_SEG2,NORM_SEG3],mm.getGeoTypesAtLevel(-1))
216         self.assertEqual([NORM_POINT1],mm.getGeoTypesAtLevel(-2))
217         mm0=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POLYGON)
218         self.assertTrue(isinstance(mm0,MEDCoupling1DGTUMesh))
219         self.assertTrue(mm0.getNodalConnectivity().isEqual(DataArrayInt([6,7,4,3,7,8,5,4])))
220         self.assertTrue(mm0.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8])))
221         lmm=mm.getDirectUndergroundSingleGeoTypeMeshes(0)
222         self.assertEqual(3,len(lmm))
223         self.assertTrue(isinstance(lmm[0],MEDCoupling1SGTUMesh))
224         self.assertTrue(isinstance(lmm[1],MEDCoupling1SGTUMesh))
225         self.assertTrue(isinstance(lmm[2],MEDCoupling1DGTUMesh))
226         #
227         self.assertTrue(mm.getUnivNameWrStatus())
228         self.assertTrue(isinstance(mm.getUnivName(),str))
229         self.assertTrue(len(mm.getUnivName())!=0)
230         mbis=mm.getMeshAtLevel(0)
231         m.setName(mm.getName()) ; m.setDescription(mm.getDescription())
232         self.assertTrue(m.isEqual(mbis,1e-12));
233         #
234         self.assertEqual(([[(3, 2), (4, 1), (5, 8)], [(1, 2), (2, 1)], [(0, 4)]], 2, 2, 9),GetUMeshGlobalInfo(outFileName,"MyFirstMEDCouplingMEDmesh"))
235         pass
236
237     # this test is the testMEDMesh3 except that permutation is dealed here
238     def testMEDMesh4(self):
239         outFileName="MEDFileMesh4.med"
240         c=DataArrayDouble.New()
241         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 ];
242         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
243         c.setValues(coords,9,2)
244         c.setInfoOnComponent(0,"abcdef [km]")
245         c.setInfoOnComponent(1,"ghij [MW]")
246         m=MEDCouplingUMesh.New();
247         m.setMeshDimension(2);
248         m.allocateCells(5);
249         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
250         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
251         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
252         m.insertNextCell(NORM_QUAD4,4,targetConn[10:14])
253         m.insertNextCell(NORM_QUAD4,4,targetConn[14:18])
254         m.finishInsertingCells();
255         m.setCoords(c)
256         m.checkConsistencyLight()
257         m1=MEDCouplingUMesh.New();
258         m1.setMeshDimension(1);
259         m1.allocateCells(3);
260         m1.insertNextCell(NORM_SEG2,2,[1,4])
261         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
262         m1.insertNextCell(NORM_SEG2,2,[3,6])
263         m1.finishInsertingCells();
264         m1.setCoords(c)
265         m1.checkConsistencyLight()
266         m2=MEDCouplingUMesh.New();
267         m2.setMeshDimension(0);
268         m2.allocateCells(4);
269         m2.insertNextCell(NORM_POINT1,1,[1])
270         m2.insertNextCell(NORM_POINT1,1,[3])
271         m2.insertNextCell(NORM_POINT1,1,[2])
272         m2.insertNextCell(NORM_POINT1,1,[6])
273         m2.finishInsertingCells();
274         m2.setCoords(c)
275         m2.checkConsistencyLight()
276         #
277         mm=MEDFileUMesh.New()
278         mm.setName("My2ndMEDCouplingMEDmesh")
279         mm.setDescription("ThisIsImpossibleToDoWithMEDMEM")
280         mm.setCoords(c)
281         renumNode=DataArrayInt.New()
282         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
283         mm.setRenumFieldArr(1,renumNode)
284         mm.setMeshAtLevel(-1,m1,True);
285         mm.setMeshAtLevel(0,m,True);
286         mm.setMeshAtLevel(-2,m2,True);
287         mm.removeMeshAtLevel(-2)
288         mm.setMeshAtLevel(-2,m2,True);
289         # playing with groups
290         g1_2=DataArrayInt.New()
291         g1_2.setValues([2,3],2,1)
292         g1_2.setName("G1")
293         g2_2=DataArrayInt.New()
294         g2_2.setValues([2,0,3],3,1)
295         g2_2.setName("G2")
296         mm.setGroupsAtLevel(0,[g1_2,g2_2],True)
297         g1_1=DataArrayInt.New()
298         g1_1.setValues([0,2,1],3,1)
299         g1_1.setName("G1")
300         g2_1=DataArrayInt.New()
301         g2_1.setValues([0,2],2,1)
302         g2_1.setName("G2")
303         mm.setGroupsAtLevel(-1,[g1_1,g2_1],True)
304         g1_N=DataArrayInt.New()
305         g1_N.setValues([10,11,12,13,14,15,16,17],8,1)
306         g1_N.setName("G1")
307         g2_N=DataArrayInt.New()
308         g2_N.setValues([10,11,12,13,14,15,16,17,18],9,1)
309         g2_N.setName("G2")
310         mm.setGroupsAtLevel(1,[g1_N,g2_N],True)
311         # check content of mm
312         t=mm.getGroupArr(0,"G1",True)
313         self.assertTrue(g1_2.isEqual(t));
314         t=mm.getGroupArr(0,"G2",True)
315         self.assertTrue(g2_2.isEqual(t));
316         t=mm.getGroupArr(-1,"G1",True)
317         self.assertTrue(g1_1.isEqual(t));
318         t=mm.getGroupArr(-1,"G2",True)
319         self.assertTrue(g2_1.isEqual(t));
320         self.assertTrue(not mm.existsGroup("GrpOnAllCell"));
321         #
322         mm.write(outFileName,2);
323         mm2=MEDFileMesh.New(outFileName)
324         res=mm.isEqual(mm2,1e-12)
325         self.assertTrue(res[0])
326         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
327         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
328         mm2.keepFamIdsOnlyOnLevs([3],[-1])
329         for lev in mm.getGrpNonEmptyLevelsExt("G2"):
330             self.assertEqual(mm.getGroupArr(lev,"G2").getValues(),mm2.getGroupArr(lev,"G2").getValues())
331             pass
332         l=list(mm2.getFamiliesOnGroup("G2")) ; l.sort()
333         self.assertEqual(['Family_-3','Family_-4','Family_-7','Family_10','Family_11'],l)
334         #
335         self.assertEqual([-7,-7,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
336         mm2.getFamilyFieldAtLevel(-1).setIJ(1,0,-8)
337         self.assertEqual([-7,-8,-6],mm2.getFamilyFieldAtLevel(-1).getValues())
338         self.assertTrue(not mm2.existsFamily("Family_-8"))
339         mm2.createGroupOnAll(-1,"GrpOnAllFace")
340         self.assertTrue(mm2.existsFamily("Family_-8"))
341         self.assertEqual(list(range(3)),mm2.getGroupArr(-1,"GrpOnAllFace").getValues())
342         pass
343
344     #testing persistence of retrieved arrays
345     def testMEDMesh5(self):
346         fileName="Pyfile18.med"
347         mname="ExampleOfMultiDimW"
348         medmesh=MEDFileUMesh.New(fileName,mname)
349         m1_0=medmesh.getLevel0Mesh(True)
350         da1=medmesh.getFamilyFieldAtLevel(0)
351         del medmesh
352         self.assertEqual(20,m1_0.getNumberOfCells())
353         self.assertEqual(20,da1.getNumberOfTuples())
354         pass
355
356     def testMEDMesh6(self):
357         outFileName="MEDFileMesh5.med"
358         m=MEDFileCMesh.New()
359         m.setTime(-1,-1,2.3)
360         m1=MEDCouplingCMesh.New();
361         da=DataArrayDouble.New()
362         da.setValues([0.,1.,2.],3,1)
363         da.setInfoOnComponent(0,"XX [mm]")
364         m1.setCoordsAt(0,da)
365         da=DataArrayDouble.New()
366         da.setValues([0.,1.2],2,1)
367         da.setInfoOnComponent(0,"YY [km]")
368         m1.setCoordsAt(1,da)
369         da=DataArrayDouble.New()
370         da.setValues([0.,1.3],2,1)
371         da.setInfoOnComponent(0,"ZZ [um]")
372         m1.setCoordsAt(2,da)
373         m.setMesh(m1)
374         self.assertTrue(m[0].isEqual(m1,1e-12))
375         self.assertTrue(isinstance(m[0],MEDCouplingCMesh))
376         m.setName("myFirstCartMesh")
377         m.setDescription("mmmmpppppppp")
378         m.setTimeValue(2.3)
379         m.setTimeUnit("ms")
380         da=DataArrayInt.New()
381         da.setValues([0,0,1,0,1,2,4,3,0,1,2,2],12,1)
382         m.setFamilyFieldArr(1,da)
383         m.setFamilyId("family1",1)
384         da=m.getFamilyArr(1,"family1")
385         expected1=[2,4,9]
386         self.assertEqual(expected1,da.getValues())
387         self.assertTrue(m.getUnivNameWrStatus())
388         m.write(outFileName,2);
389         mm=MEDFileMesh.New(outFileName)
390         self.assertEqual([NORM_HEXA8],mm.getGeoTypesAtLevel(0))
391         self.assertTrue(isinstance(mm,MEDFileCMesh))
392         self.assertTrue(isinstance(mm.getUnivName(),str))
393         self.assertTrue(len(mm.getUnivName())!=0)
394         self.assertTrue(m.isEqual(mm,1e-12)[0])
395         self.assertEqual(expected1,mm.getFamilyArr(1,"family1").getValues())
396         m2=mm.getMesh()
397         tt=m.getTime()
398         m1.setTime(tt[2],tt[0],tt[1])
399         m1.setName(m.getName())
400         m1.setTimeUnit(m.getTimeUnit())
401         m1.setDescription(m.getDescription())
402         self.assertTrue(m2.isEqual(m1,1e-12));
403         pass
404
405     def testMEDMesh7(self):
406         fileName="Pyfile24.med"
407         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
408         m=MEDFileUMesh.New()
409         m.setCoords(m2.getCoords())
410         m.setMeshAtLevel(0,m2)
411         m.setMeshAtLevel(-1,m1)
412         m.setMeshAtLevel(-2,m0)
413         m.setFamilyFieldArr(0,f2)
414         m.setFamilyFieldArr(-1,f1)
415         m.setFamilyFieldArr(-2,f0)
416         m.setFamilyFieldArr(1,p)
417         m.setRenumFieldArr(0,n2)
418         m.setRenumFieldArr(-1,n1)
419         m.setRenumFieldArr(-2,n0)
420         nbOfFams=len(fns)
421         for i in range(nbOfFams):
422             m.addFamily(fns[i],fids[i])
423             pass
424         nbOfGrps=len(grpns)
425         for i in range(nbOfGrps):
426             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
427             pass
428         m.setName(m2.getName())
429         m.setDescription(m2.getDescription())
430         #
431         self.assertEqual((-1,),m.getGrpNonEmptyLevels("A2A4"))
432         self.assertEqual((),m.getGrpNonEmptyLevels("A1"))
433         self.assertEqual((-2,),m.getGrpNonEmptyLevels("AP2"))
434         self.assertEqual((-1,-2),m.getGrpsNonEmptyLevels(["A2A4","AP2"]))
435         self.assertEqual((-1,),m.getFamNonEmptyLevels('A4A3____________________________'))
436         self.assertEqual((0,),m.getFamNonEmptyLevels('MESH____DALT3___DALLE___________'))
437         self.assertEqual((0,-1,),m.getFamsNonEmptyLevels(['MESH____DALT3___DALLE___________','A4A3____________________________']))
438         self.assertEqual(('A1A2','A2A4','A3A1','A3C5','A4A3','B1C1','B2B4','B3B1','B4C3','C1C4','C2B2','C3C2','C4B3','C5A4'),m.getGroupsOnSpecifiedLev(-1))
439         self.assertEqual(('DALLE','DALQ1','DALQ2','DALT3','MESH'),m.getGroupsOnSpecifiedLev(0))
440         #
441         m.write(fileName,2)
442         self.assertRaises(InterpKernelException,MEDFileField1TS,fileName)#throw because no field in file fileName
443         pass
444
445     def funcToTestDelItem(self,ff):
446         del ff[[0.02,(3,4)]]
447         pass
448
449     #emulation of pointe.med file.
450     def testMEDField1(self):
451         mm=MEDFileMesh.New("Pyfile17.med")
452         mm.write("Pyfile17_bis.med",2)
453         ff=MEDFileFieldMultiTS("Pyfile17.med")
454         tsExpected=[[1,2],[3,4],[5,6]]
455         self.assertEqual(3,len(ff))
456         for pos,f1ts in enumerate(ff):
457             self.assertEqual(tsExpected[pos],f1ts.getTime()[:2])
458             self.assertEqual(type(f1ts),MEDFileField1TS)
459             pass
460         self.assertEqual("MeasureOfMesh_Extruded",ff.getName())
461         self.assertEqual([3,4],ff[1].getTime()[:-1])
462         self.assertEqual([3,4],ff[3,4].getTime()[:-1])
463         self.assertEqual([3,4],ff[0.01].getTime()[:-1])
464         ff.write("Pyfile17_bis.med",0)
465         #
466         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
467         self.assertEqual([(1,2),(3,4),(5,6)],ts)
468         self.funcToTestDelItem(ff)
469         ts=ff.getTimeSteps() ; ts=[elt[:-1] for elt in ts]
470         self.assertEqual([(1,2)],ts)
471         pass
472
473     #profiles
474     def testMEDField2(self):
475         mm=MEDFileMesh.New("Pyfile19.med")
476         mm.write("Pyfile19_bis.med",2)
477         ff=MEDFileFieldMultiTS.New("Pyfile19.med")
478         ff.write("Pyfile19_bis.med",0)
479         self.assertEqual([('tyty','mm'),('uiop','MW')],GetComponentsNamesOfField("Pyfile19_bis.med","VFieldOnNodes"))
480         pass
481
482     #gauss points
483     def testMEDField3(self):
484         mm=MEDFileMesh.New("Pyfile13.med")
485         mm.write("Pyfile13_bis.med",2)
486         ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
487         ff.write("Pyfile13_bis.med",0)
488         ff=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint",1,5)
489         f=ff.getFieldAtLevel(ON_GAUSS_PT,0)
490         f2=ReadFieldGauss("Pyfile13.med",'2DMesh_2',0,'MyFirstFieldOnGaussPoint',1,5)
491         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
492         ff3=MEDFileField1TS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
493         f3=ff3.getFieldAtLevel(ON_GAUSS_PT,0)
494         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
495         ff4=MEDFileField1TS.New("Pyfile13.med")
496         f4=ff4.getFieldAtLevel(ON_GAUSS_PT,0)
497         self.assertTrue(f.isEqual(f4,1e-12,1e-12))
498         pass
499
500     #gauss NE
501     def testMEDField4(self):
502         mm=MEDFileMesh.New("Pyfile14.med")
503         mm.write("Pyfile14_bis.med",2)
504         ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
505         ff.write("Pyfile14_bis.med",0)
506         ff=MEDFileField1TS.New("Pyfile14.med","MyFieldOnGaussNE",1,5)
507         f=ff.getFieldAtLevel(ON_GAUSS_NE,0)
508         f2=ReadFieldGaussNE("Pyfile14.med",'2DMesh_2',0,"MyFieldOnGaussNE",1,5)
509         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
510         pass
511
512     # MEDField get/set on pointe.med
513     def testMEDField5(self):
514         ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
515         f=ff.getFieldAtLevel(ON_CELLS,0)
516         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
517         self.assertTrue(f.getMesh().getCoords().isEqual(f2.getMesh().getCoords(),1e-12))
518         f.getMesh().tryToShareSameCoords(f2.getMesh(),1e-12)
519         f.changeUnderlyingMesh(f2.getMesh(),22,1e-12)
520         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
521         # no with renumbering
522         f=ff.getFieldAtLevel(ON_CELLS,0,1)
523         f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
524         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
525         f=ff.getFieldAtLevel(ON_CELLS,0,3)
526         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
527         f=ff.getFieldAtLevel(ON_CELLS,0,2)
528         self.assertTrue(not f.isEqual(f2,1e-12,1e-12))
529         f.changeUnderlyingMesh(f2.getMesh(),12,1e-12)
530         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
531         pass
532
533     # MEDField get/set on profiles nodes
534     def testMEDField6(self):
535         ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
536         its=ff.getIterations()
537         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
538         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
539         f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
540         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
541         ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
542         its=ff.getIterations()
543         f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
544         f2=ReadFieldNode("Pyfile19.med",'2DMesh_1',0,"VFieldOnNodes",its[0][0],its[0][1])
545         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
546         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
547         self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_NODES,its[0][0],its[0][1],0,1)#request renumber following mesh : it is on profile !
548         pass
549
550     # MEDField get/set on profiles cells
551     def testMEDField7(self):
552         ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
553         its=ff.getIterations()
554         f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
555         f2=ReadFieldCell("Pyfile12.med",'3DMesh_1',0,"VectorFieldOnCells",its[0][0],its[0][1])
556         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
557         pass
558
559     #first test of assignation. No profile and types sorted by type.
560     def testMEDField8(self):
561         fname="Pyfile25.med"
562         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
563         m1=f1.getMesh()
564         mm1=MEDFileUMesh.New()
565         mm1.setCoords(m1.getCoords())
566         mm1.setMeshAtLevel(0,m1)
567         mm1.setName(m1.getName())
568         mm1.write(fname,2)
569         ff1=MEDFileField1TS.New()
570         ff1.setFieldNoProfileSBT(f1)
571         ff1.write(fname,0)
572         f2=ReadFieldCell(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2]);
573         itt,orr,ti=ff1.getTime()
574         self.assertEqual(0,itt); self.assertEqual(1,orr); self.assertAlmostEqual(2.,ti,14);
575         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
576         ff1.setTime(3,4,2.3)
577         itt,orr,ti=ff1.getTime()
578         self.assertEqual(3,itt); self.assertEqual(4,orr); self.assertAlmostEqual(2.3,ti,14);
579         da,infos=ff1.getUndergroundDataArrayExt()
580         f2.getArray().setName(da.getName())#da has the same name than f2
581         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
582         self.assertEqual([((3, 0), (0, 2)), ((4, 0), (2, 4)), ((6, 0), (4, 5)), ((5, 0), (5, 6))],infos)
583         #
584         fname="Pyfile26.med"
585         f1=MEDLoaderDataForTest.buildVecFieldOnNodes_1();
586         m1=f1.getMesh()
587         mm1=MEDFileUMesh.New()
588         mm1.setCoords(m1.getCoords())
589         mm1.setMeshAtLevel(0,m1)
590         mm1.setName(m1.getName())
591         mm1.write(fname,2)
592         ff1=MEDFileField1TS.New()
593         ff1.setFieldNoProfileSBT(f1)
594         nv=1456.
595         da=ff1.getUndergroundDataArray().setIJ(0,0,nv)
596         ff1.write(fname,0)
597         f2=ReadFieldNode(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
598         self.assertTrue(not f1.isEqual(f2,1e-12,1e-12))
599         f1.getArray().setIJ(0,0,nv)
600         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
601         #
602         fname="Pyfile27.med"
603         f1=MEDLoaderDataForTest.buildVecFieldOnGaussNE_1();
604         m1=f1.getMesh()
605         mm1=MEDFileUMesh.New()
606         mm1.setCoords(m1.getCoords())
607         mm1.setMeshAtLevel(0,m1)
608         mm1.setName(m1.getName())
609         mm1.write(fname,2)
610         ff1=MEDFileField1TS.New()
611         ff1.setFieldNoProfileSBT(f1)
612         ff1.write(fname,0)
613         f2=ReadFieldGaussNE(fname,f1.getMesh().getName(),0,f1.getName(),f1.getTime()[1],f1.getTime()[2])
614         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
615         da,infos=ff1.getUndergroundDataArrayExt()
616         f2.getArray().setName(da.getName())#da has the same name than f2
617         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
618         self.assertEqual([((3, 0), (0, 6)), ((4, 0), (6, 14)), ((6, 0), (14, 20))],infos)
619         #
620         fname="Pyfile28.med"
621         f1=MEDLoaderDataForTest.buildVecFieldOnGauss_2_Simpler();
622         f1InvalidCpy=f1.deepCopy()
623         f1InvalidCpy.setDiscretization(MEDCouplingFieldDiscretizationGauss())
624         f1InvalidCpy2=f1.deepCopy()
625         f1InvalidCpy2.setDiscretization(MEDCouplingFieldDiscretizationGauss())
626         m1=f1.getMesh()
627         mm1=MEDFileUMesh.New()
628         mm1.setCoords(m1.getCoords())
629         mm1.setMeshAtLevel(0,m1)
630         mm1.setName(m1.getName())
631         mm1.write(fname,2)
632         ff1=MEDFileField1TS.New()
633         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy) # fails because no Gauss localization per cell set !*
634         f1InvalidCpy2.getDiscretization().setArrayOfDiscIds(f1.getDiscretization().getArrayOfDiscIds()) # fails because no Gauss localization set whereas gauss locid per cell given !
635         self.assertRaises(InterpKernelException,ff1.setFieldNoProfileSBT,f1InvalidCpy2)
636         ff1.setFieldNoProfileSBT(f1)
637         ff1.write(fname,0)
638         ff2=MEDFileField1TS.New(fname,f1.getName(),f1.getTime()[1],f1.getTime()[2])
639         f2=ff2.getFieldAtLevel(ON_GAUSS_PT,0)
640         self.assertTrue(f1.isEqual(f2,1e-12,1e-12))
641         sbt=ff2.getFieldSplitedByType2()
642         loc1=ff2.getLocalization("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5")
643         self.assertEqual("Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_5",loc1.getName())
644         self.assertEqual((-1, 1,-1,-1,1,-1,-1,0,0,-1,0,0),loc1.getRefCoords())
645         self.assertEqual(6,loc1.getNumberOfPointsInCells())
646         self.assertEqual(3,loc1.getNumberOfGaussPoints())
647         self.assertEqual(2,loc1.getDimension())
648         da,infos=ff2.getUndergroundDataArrayExt()
649         f2.getArray().setName(da.getName())#da has the same name than f2
650         self.assertTrue(da.isEqual(f2.getArray(),1e-12))
651         self.assertEqual(53,da.getNumberOfTuples())
652         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)
653         #
654         pass
655     
656     def testMEDFileData1(self):
657         fname="Pyfile29.med"
658         d=MEDFileData.New()
659         #
660         m1=MEDLoaderDataForTest.build1DMesh_1()
661         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
662         mmm1=MEDFileMeshMultiTS.New() ;
663         mmm1.setOneTimeStep(mm1)
664         m2=MEDLoaderDataForTest.build2DCurveMesh_1()
665         mm2=MEDFileUMesh.New() ; mm2.setCoords(m2.getCoords()) ; mm2.setMeshAtLevel(0,m2) ; mm2.setName(m2.getName())
666         mmm2=MEDFileMeshMultiTS.New() ; mmm2.setOneTimeStep(mm2)
667         ms=MEDFileMeshes.New(); ms.setMeshAtPos(0,mm1) ; ms.setMeshAtPos(1,mm2)
668         d.setMeshes(ms)
669         for name,mmm in zip(["1DMesh_1","2DCurveMesh_1"],ms):
670             self.assertEqual(name,mmm.getName())
671             self.assertEqual(type(mmm),MEDFileUMesh)
672             pass
673         self.assertEqual(('1DMesh_1', '2DCurveMesh_1'),d.getMeshes().getMeshesNames())
674         #
675         ff1=MEDFileFieldMultiTS.New()
676         ff21=MEDFileFieldMultiTS.New()
677         ff22=MEDFileFieldMultiTS.New()
678         f1=m1.getMeasureField(True) ; f1.setName("f1") ; f1=f1.buildNewTimeReprFromThis(ONE_TIME,False)
679         f1.getArray().setInfoOnComponent(0,"power [kW]")
680         ff1.appendFieldNoProfileSBT(f1)
681         f21=m2.getMeasureField(True) ; f21.setName("f21") ; f21=f21.buildNewTimeReprFromThis(ONE_TIME,False)
682         f21.getArray().setInfoOnComponent(0,"sta [mm]") ;
683         ff21.appendFieldNoProfileSBT(f21)
684         f22=f21.deepCopy() ; f22.setName("f22") ; f22=f22.buildNewTimeReprFromThis(ONE_TIME,False) ;
685         f22.applyFunc(2,"3*x*IVec+2*x*JVec")
686         f22.getArray().setInfoOnComponent(0,"distance [km]") ; f22.getArray().setInfoOnComponent(1,"displacement [cm]")
687         ff22.appendFieldNoProfileSBT(f22)
688         fs=MEDFileFields.New()
689         fs.pushField(ff1) ; fs.pushField(ff21) ; fs.pushField(ff22)
690         for name,fmts in zip(["f1","f21","f22"],fs):
691             self.assertEqual(name,fmts.getName())
692             pass
693         d.setFields(fs)
694         #
695         fname2="Pyfile29_2.med"
696         d.write(fname2,2)
697         #
698         d2=MEDFileData.New(fname2)
699         self.assertEqual(2,d2.getNumberOfMeshes())
700         self.assertEqual(3,d2.getNumberOfFields())
701         self.assertTrue(isinstance(d2.getMeshes().getMeshAtPos(0),MEDFileUMesh))
702         self.assertTrue(isinstance(d2.getMeshes()[0],MEDFileUMesh))
703         self.assertTrue(isinstance(d2.getMeshes()['2DCurveMesh_1'],MEDFileUMesh))
704         m1bis=d2.getMeshes().getMeshAtPos(0).getMeshAtLevel(0)
705         self.assertTrue(m1.isEqual(m1bis,1e-12))
706         self.assertEqual(('f1', 'f21', 'f22'),d2.getFields().getFieldsNames())
707         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldAtPos(2).getTimeSteps())
708         self.assertEqual([(-1,-1,0.0)],d2.getFields()[2].getTimeSteps())
709         self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps())
710         self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps())
711         pass
712     
713     def testMEDField9(self):
714         # first test field profile WR. Full type but with some type missing
715         fname="Pyfile30.med"
716         m1=MEDLoaderDataForTest.build2DMesh_3()
717         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
718         mm1.write(fname,2)
719         ff1=MEDFileField1TS.New()
720         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F1")
721         d=DataArrayDouble.New() ; d.alloc(2*9,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
722         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.
723         da=DataArrayInt.New(); da.alloc(9,1) ; da.iota(0) ; da.setName("sup1")
724         #
725         ff1.setFieldProfile(f1,mm1,0,da)
726         ff1.changePflsNames([(["sup1_NORM_QUAD4"],"ForV650")])
727         ff1=ff1.deepCopy()
728         ff1.write(fname,0)
729         #
730         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
731         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))# profiles names cannot be contracted in pfl array name
732         self.assertTrue(vals.isEqual(d,1e-14))
733         #
734         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
735         ff3=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
736         ff2.deepCpyGlobs(ff3)
737         sbt=ff2.getFieldSplitedByType2()
738         self.assertEqual(3,sbt[0][0])#TRI3
739         self.assertEqual(0,sbt[0][1][0][0])#CELL For TRI3
740         self.assertEqual("",sbt[0][1][0][2])#no profile For TRI3
741         self.assertEqual([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],sbt[0][1][0][1].getValues())# values for TRI3
742         self.assertEqual(4,sbt[1][0])#QUAD4
743         self.assertEqual(0,sbt[1][1][0][0])#CELL For QUAD4
744         self.assertEqual("ForV650",sbt[1][1][0][2])# profile For QUAD4
745         self.assertEqual([19, 20, 21, 22, 23, 24],sbt[1][1][0][1].getValues())# values for QUAD4
746         self.assertEqual([0],ff2.getTypesOfFieldAvailable())
747         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,0,mm1) ; vals.setName("")
748         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
749         self.assertTrue(vals.isEqual(d,1e-14))
750         pass
751     
752     def testMEDField10(self):
753         fname="Pyfile31.med"
754         m1=MEDLoaderDataForTest.build2DMesh_1()
755         m1.renumberCells([0,1,4,2,3,5],False)
756         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
757         mm1.write(fname,2)
758         ff1=MEDFileFieldMultiTS.New()
759         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
760         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
761         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.
762         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
763         #
764         ff1.appendFieldProfile(f1,mm1,0,da)
765         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
766         ff1.appendFieldProfile(f1,mm1,0,da)
767         ff1=ff1.deepCopy()
768         ff1.write(fname,0)
769         #
770         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
771         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
772         self.assertTrue(vals.isEqual(e,1e-14))
773         vals,pfl=ff1.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
774         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
775         self.assertTrue(vals.isEqual(d,1e-14))
776         #
777         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
778         self.assertEqual([(-1,-1,0.0), (1,2,1.2)],ff2.getTimeSteps())
779         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,1,2,0,mm1) ; vals.setName("")
780         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
781         self.assertTrue(vals.isEqual(e,1e-14))
782         vals,pfl=ff2.getFieldWithProfile(ON_CELLS,-1,-1,0,mm1) ; vals.setName("")
783         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
784         self.assertTrue(vals.isEqual(d,1e-14))
785         pass
786     
787     # idem testMEDField9 method except that here testing profile on nodes and not on cells.
788     def testMEDField11(self):
789         fname="Pyfile32.med"
790         m1=MEDLoaderDataForTest.build2DMesh_1()
791         m1.renumberCells([0,1,4,2,3,5],False)
792         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
793         mm1.write(fname,2)
794         ff1=MEDFileField1TS.New()
795         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
796         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
797         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.
798         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
799         #
800         ff1.setFieldProfile(f1,mm1,0,da)
801         self.assertEqual(ff1.getNonEmptyLevels(),(-1, []))
802         ff1.write(fname,0)
803         #
804         vals,pfl=ff1.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
805         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
806         self.assertTrue(vals.isEqual(d,1e-14))
807         ## #
808         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
809         vals,pfl=ff2.getFieldWithProfile(ON_NODES,0,mm1) ; vals.setName("")
810         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
811         self.assertTrue(vals.isEqual(d,1e-14))
812         pass
813
814     def testMEDField12(self):
815         fname="Pyfile33.med"
816         m1=MEDLoaderDataForTest.build2DMesh_1()
817         m1.renumberCells([0,1,4,2,3,5],False)
818         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
819         mm1.write(fname,2)
820         ff1=MEDFileFieldMultiTS.New()
821         f1=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f1.setName("F1Node")
822         d=DataArrayDouble.New() ; d.alloc(2*6,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
823         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.
824         da=DataArrayInt.New(); da.setValues([1,2,4,5,7,8],6,1) ; da.setName("sup1Node")
825         #
826         ff1.appendFieldProfile(f1,mm1,0,da)
827         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
828         ff1.appendFieldProfile(f1,mm1,0,da)
829         ff1.write(fname,0)
830         #
831         vals,pfl=ff1.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
832         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
833         self.assertTrue(vals.isEqual(e,1e-14))
834         vals,pfl=ff1.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
835         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
836         self.assertTrue(vals.isEqual(d,1e-14))
837         #
838         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
839         vals,pfl=ff2.getFieldWithProfile(ON_NODES,1,2,0,mm1) ; vals.setName("")
840         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
841         self.assertTrue(vals.isEqual(e,1e-14))
842         vals,pfl=ff2.getFieldWithProfile(ON_NODES,-1,-1,0,mm1) ; vals.setName("")
843         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
844         self.assertTrue(vals.isEqual(d,1e-14))
845         pass
846
847     def testMEDField13(self):
848         fname="Pyfile34.med"
849         m1=MEDLoaderDataForTest.build2DMesh_1()
850         m1.renumberCells([0,1,4,2,3,5],False)
851         tmp=m1.getName();
852         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
853         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
854         mm1.write(fname,2)
855         ff1=MEDFileField1TS.New()
856         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F3Node")
857         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
858         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.
859         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
860         #
861         ff1.setFieldProfile(f1,mm1,0,da)
862         ff1.write(fname,0)
863         #
864         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
865         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
866         self.assertTrue(vals.isEqual(d,1e-14))
867         #
868         ff2=MEDFileField1TS.New(fname,f1.getName(),-1,-1)
869         vals,pfl=ff2.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; vals.setName("")
870         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
871         self.assertTrue(vals.isEqual(d,1e-14))
872         pass
873
874     def testMEDField14(self):
875         fname="Pyfile35.med"
876         m1=MEDLoaderDataForTest.build2DMesh_1()
877         m1.renumberCells([0,1,4,2,3,5],False)
878         tmp=m1.getName();
879         m1=m1.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) # suppression of last cell that is a polygon
880         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
881         mm1.write(fname,2)
882         ff1=MEDFileFieldMultiTS.New()
883         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
884         d=DataArrayDouble.New() ; d.alloc(2*11,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
885         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.
886         da=DataArrayInt.New(); da.setValues([0,2,3],3,1) ; da.setName("sup1NodeElt")
887         #
888         ff1.appendFieldProfile(f1,mm1,0,da)
889         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
890         ff1.appendFieldProfile(f1,mm1,0,da)
891         ff1.write(fname,0)
892         #
893         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
894         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
895         self.assertTrue(vals.isEqual(d,1e-14))
896         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
897         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
898         self.assertTrue(vals.isEqual(e,1e-14))
899         self.assertEqual([[3],[3]],ff1.getTypesOfFieldAvailable())
900         #
901         ff2=MEDFileFieldMultiTS.New(fname,f1.getName())
902         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,-1,-1,0,mm1) ; vals.setName("")
903         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
904         self.assertTrue(vals.isEqual(d,1e-14))
905         vals,pfl=ff1.getFieldWithProfile(ON_GAUSS_NE,1,2,0,mm1) ; vals.setName("")
906         self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
907         self.assertTrue(vals.isEqual(e,1e-14))
908         pass
909     # 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.
910     # 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
911     # for the necessity of the test ! The idea is too create artificially a mesh having one more fictious cell per type and to roll back right after !
912     def testMEDField15(self):
913         fname="Pyfile36.med"
914         m0=MEDLoaderDataForTest.build2DMesh_1()
915         m0.renumberCells([0,1,4,2,3,5],False)
916         tmp=m0.getName();
917         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
918         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ;
919         ff1=MEDFileField1TS.New()
920         f1=MEDCouplingFieldDouble.New(ON_GAUSS_NE,ONE_TIME) ; f1.setName("F4Node")
921         d=DataArrayDouble.New() ; d.alloc(2*20,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
922         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.
923         da=DataArrayInt.New(); da.setValues([0,1,3,4,6],5,1) ; da.setName("sup1NodeElt")
924         #
925         ff1.setFieldProfile(f1,mm1,0,da)
926         m1=m0.buildPartOfMySelf(list(range(5)),True) ; m1.setName(tmp) ; mm1.setMeshAtLevel(0,m1) ;
927         mm1.write(fname,2)
928         ff1.write(fname,0)
929         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
930         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
931         self.assertTrue(p1.isIota(5))
932         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
933         pass
934     # Test for getFieldAtTopLevel method
935     def testMEDField16(self):
936         fname="Pyfile37.med"
937         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
938         m1=f1.getMesh()
939         mm1=MEDFileUMesh.New()
940         mm1.setCoords(m1.getCoords())
941         mm1.setMeshAtLevel(0,m1)
942         mm1.setName(m1.getName())
943         ff1=MEDFileField1TS.New()
944         ff1.setFieldNoProfileSBT(f1)
945         m2=m1.buildDescendingConnectivity()[0]
946         m2.sortCellsInMEDFileFrmt()
947         m2.setName(m1.getName())
948         mm1.setMeshAtLevel(-1,m2)
949         mm1.write(fname,2)
950         f2=m2.getMeasureField(True)
951         dd=DataArrayDouble.New()
952         dd.alloc(f2.getArray().getNumberOfTuples(),3)
953         dd[:,0]=f2.getArray()
954         dd[:,1]=2*f2.getArray()
955         dd[:,2]=3*f2.getArray()
956         f2=f2.buildNewTimeReprFromThis(ONE_TIME,False)
957         f2.setArray(dd)
958         f2.copyTinyStringsFrom(f1)
959         f2.copyTinyAttrFrom(f1)
960         ff1.setFieldNoProfileSBT(f2)
961         ff1.write(fname,0)
962         # Reading Pyfile37.med
963         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
964         f1bis=ff2.getFieldAtLevel(ON_CELLS,0)
965         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
966         f1bis=ff2.getFieldAtLevel(ON_CELLS,-1)
967         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
968         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
969         self.assertTrue(f1.isEqual(f1bis,1e-12,1e-12))
970         # More complex
971         fname="Pyfile38.med"
972         mm1.write(fname,2)
973         ff1=MEDFileField1TS.New()
974         ff1.setFieldNoProfileSBT(f2)
975         ff1.write(fname,0)
976         ff2=MEDFileField1TS.New(fname,f2.getName(),0,1)
977         f1bis=ff2.getFieldAtTopLevel(ON_CELLS)
978         self.assertTrue(f2.isEqual(f1bis,1e-12,1e-12))
979         pass
980
981     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
982     def testMEDField17(self):
983         fname="Pyfile39.med"
984         m1=MEDLoaderDataForTest.build2DMesh_1()
985         m1.renumberCells([0,1,4,2,3,5],False)
986         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
987         mm1.write(fname,2)
988         ffs=MEDFileFields.New()
989         ff1=MEDFileFieldMultiTS.New()
990         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
991         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
992         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.
993         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
994         #
995         ff1.appendFieldProfile(f1,mm1,0,da)
996         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
997         ff1.appendFieldProfile(f1,mm1,0,da)
998         ffs.resize(1)
999         ffs.setFieldAtPos(0,ff1)
1000         ffs=ffs.deepCopy()
1001         ffs.write(fname,0)
1002         #
1003         ffsr=MEDFileFields.New(fname)
1004         ff3=ffsr.getFieldAtPos(0)
1005         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1006         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1007         pass
1008
1009     # Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
1010     def testMEDField18(self):
1011         fname="Pyfile40.med"
1012         m1=MEDLoaderDataForTest.build2DMesh_1()
1013         m1.renumberCells([0,1,4,2,3,5],False)
1014         mm1=MEDFileUMesh.New() ; mm1.setCoords(m1.getCoords()) ; mm1.setMeshAtLevel(0,m1) ; mm1.setName(m1.getName())
1015         mm1.write(fname,2)
1016         ffs=MEDFileFields.New()
1017         ff1=MEDFileFieldMultiTS.New()
1018         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName("F2")
1019         d=DataArrayDouble.New() ; d.alloc(2*4,1) ; d.iota(7.); d.rearrange(2); d.setInfoOnComponent(0,"sigX [MPa]") ; d.setInfoOnComponent(1,"sigY [GPa]")
1020         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.
1021         da=DataArrayInt.New(); da.setValues([0,1,2,4],4,1) ; da.setName("sup2")
1022         #
1023         ff1.appendFieldProfile(f1,mm1,0,da)
1024         f1.setTime(1.2,1,2) ; e=d.applyFunc("2*x") ; e.copyStringInfoFrom(d) ; f1.setArray(e) ;
1025         ff1.appendFieldProfile(f1,mm1,0,da)
1026         ffs.pushField(ff1)
1027         ffs.write(fname,0)
1028         #
1029         ffsr=MEDFileFields.New(fname)
1030         ff3=ffsr.getFieldAtPos(0)
1031         f4=ff3.getFieldAtTopLevel(ON_CELLS,1,2)
1032         self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
1033         pass
1034
1035     def testMEDFieldBug1(self):
1036         fname="Pyfile13.med"
1037         d=MEDFileData.New(fname)
1038         self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
1039         pass
1040
1041     def testMEDMesh8(self):
1042         m=MEDLoaderDataForTest.build1DMesh_1()
1043         m.convertQuadraticCellsToLinear()
1044         mm=MEDFileUMesh.New()
1045         mm.setMeshAtLevel(0,m)
1046         g1=DataArrayInt.New() ; g1.setValues([0,2],2,1) ; g1.setName("g1")
1047         g2=DataArrayInt.New() ; g2.setValues([1,3],2,1) ; g2.setName("g2")
1048         g3=DataArrayInt.New() ; g3.setValues([1,2,3],3,1) ; g3.setName("g3")
1049         mm.setGroupsAtLevel(0,[g1,g2],False)
1050         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1051         self.assertEqual(('Family_-2','Family_-3'),mm.getFamiliesNames())
1052         self.assertEqual(('Family_-2',),mm.getFamiliesOnGroup('g1'))
1053         self.assertEqual(('Family_-3',),mm.getFamiliesOnGroup('g2'))
1054         mm.assignFamilyNameWithGroupName()
1055         self.assertEqual(('g1','g2'),mm.getGroupsNames())
1056         self.assertEqual(('g1','g2'),mm.getFamiliesNames())
1057         self.assertEqual(('g1',),mm.getFamiliesOnGroup('g1'))
1058         self.assertEqual(('g2',),mm.getFamiliesOnGroup('g2'))
1059         #
1060         mm=MEDFileUMesh.New()
1061         mm.setMeshAtLevel(0,m)
1062         mm.setGroupsAtLevel(0,[g1,g2,g3],False)
1063         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1064         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1065         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1066         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1067         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1068         mm.assignFamilyNameWithGroupName() # here it does nothing because no such group-family bijection found
1069         self.assertEqual(('g1','g2','g3'),mm.getGroupsNames())
1070         self.assertEqual(('Family_-2', 'Family_-4', 'Family_-5'),mm.getFamiliesNames())
1071         self.assertEqual(('Family_-2', 'Family_-4'),mm.getFamiliesOnGroup('g1'))
1072         self.assertEqual(('Family_-5',),mm.getFamiliesOnGroup('g2'))
1073         self.assertEqual(('Family_-4','Family_-5',),mm.getFamiliesOnGroup('g3'))
1074         mm.changeFamilyId(5,6)
1075         g=mm.getGroupArr(0,"g3")
1076         self.assertTrue(g.isEqual(g3));
1077         g=mm.getGroupArr(0,"g2")
1078         self.assertTrue(g.isEqual(g2));
1079         g=mm.getGroupArr(0,"g1")
1080         self.assertTrue(g.isEqual(g1));
1081         pass
1082     
1083     # bug detected by gauthier
1084     def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
1085         fname="Pyfile41.med"
1086         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
1087         m1=f1.getMesh()
1088         mm1=MEDFileUMesh.New()
1089         mm1.setCoords(m1.getCoords())
1090         mm1.setMeshAtLevel(0,m1)
1091         mm1.write(fname,2)
1092         ff1=MEDFileField1TS.New()
1093         ff1.setFieldNoProfileSBT(f1)
1094         ff1.write(fname,0)
1095         # writing mesh1 and field1, now creation of mesh2 and field2
1096         f2=f1.deepCopy()
1097         m2=f2.getMesh()
1098         m2.translate([0.5,0.6,0.7])
1099         m2.setName("3DSurfMesh_2")
1100         f2.getArray()[:]*=2.
1101         f2.setName("VectorFieldOnCells2")
1102         mm2=MEDFileUMesh.New()
1103         mm2.setCoords(m2.getCoords())
1104         mm2.setMeshAtLevel(0,m2)
1105         mm2.write(fname,0)
1106         ff2=MEDFileField1TS.New()
1107         ff2.setFieldNoProfileSBT(f2)
1108         ff2.write(fname,0)
1109         #
1110         f3=ReadFieldCell(fname,"3DSurfMesh_1",0,"VectorFieldOnCells",0,1)
1111         self.assertTrue(f3.isEqual(f1,1e-12,1e-12))
1112         f4=ReadFieldCell(fname,"3DSurfMesh_2",0,"VectorFieldOnCells2",0,1)
1113         self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
1114         pass
1115
1116     def testMEDLoaderMultiLevelCellField1(self):
1117         fname="Pyfile42.med"
1118         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1119         m=MEDFileUMesh.New()
1120         m.setCoords(m2.getCoords())
1121         m.setMeshAtLevel(0,m2)
1122         m.setMeshAtLevel(-1,m1)
1123         m.setMeshAtLevel(-2,m0)
1124         m.write(fname,2)
1125         #
1126         FieldName1="Field1"
1127         compNames1=["comp1","comp2","comp3"]
1128         ff1=MEDFileField1TS.New()
1129         da2=DataArrayDouble.New()
1130         da2.alloc(m2.getNumberOfCells()*len(compNames1),1)
1131         da2.iota(7.)
1132         da2.rearrange(len(compNames1))
1133         da2.setInfoOnComponents(compNames1)
1134         f2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f2.setName(FieldName1) ; f2.setArray(da2) ; f2.setMesh(m2) ; f2.checkConsistencyLight()
1135         ff1.setFieldNoProfileSBT(f2)
1136         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0]))
1137         da0=DataArrayDouble.New()
1138         da0.alloc(m0.getNumberOfCells()*len(compNames1),1)
1139         da0.iota(190.)
1140         da0.rearrange(len(compNames1))
1141         da0.setInfoOnComponents(compNames1)
1142         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName1) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1143         ff1.setFieldNoProfileSBT(f0)
1144         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-2]))
1145         da1=DataArrayDouble.New()
1146         da1.alloc(m1.getNumberOfCells()*len(compNames1),1)
1147         da1.iota(90.)
1148         da1.rearrange(len(compNames1))
1149         da1.setInfoOnComponents(compNames1)
1150         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName1) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1151         ff1.setFieldNoProfileSBT(f1)
1152         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1153         #
1154         ff1.write(fname,0)
1155         #
1156         FieldName2="Field2"
1157         compNames2=["comp11","comp22"]
1158         ff2=MEDFileField1TS.New()
1159         da0=DataArrayDouble.New()
1160         da0.alloc(m0.getNumberOfCells()*2,1)
1161         da0.iota(-190.)
1162         da0.rearrange(2)
1163         da0.setInfoOnComponents(compNames2)
1164         f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0.setName(FieldName2) ; f0.setArray(da0) ; f0.setMesh(m0) ; f0.checkConsistencyLight()
1165         ff2.setFieldNoProfileSBT(f0)
1166         self.assertEqual(ff2.getNonEmptyLevels(),(0, [0]))
1167         da1=DataArrayDouble.New()
1168         da1.alloc(m1.getNumberOfCells()*len(compNames2),1)
1169         da1.iota(-90.)
1170         da1.rearrange(len(compNames2))
1171         da1.setInfoOnComponents(compNames2)
1172         f1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f1.setName(FieldName2) ; f1.setArray(da1) ; f1.setMesh(m1) ; f1.checkConsistencyLight()
1173         ff2.setFieldNoProfileSBT(f1)
1174         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1175         #
1176         ff2.write(fname,0)
1177         #
1178         ff1=MEDFileField1TS.New(fname,FieldName1,-1,-1)
1179         self.assertEqual(ff1.getNonEmptyLevels(),(2, [0,-1,-2]))
1180         self.assertEqual(ff1.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')]), (3, [(0, (84, 148), '', '')]), (4, [(0, (148, 212), '', '')])])
1181         ff2=MEDFileField1TS.New(fname,FieldName2,-1,-1)
1182         self.assertEqual(ff2.getNonEmptyLevels(),(1, [0,-1]))
1183         self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
1184         pass
1185
1186     def testFieldOnPflRetrieveOnMdimRelMax1(self):
1187         fname="Pyfile43.med"
1188         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
1189         m=MEDFileUMesh.New()
1190         m.setMeshAtLevel(0,m2)
1191         m.setMeshAtLevel(-1,m1)
1192         m.setMeshAtLevel(-2,m0)
1193         f=MEDFileField1TS.New()
1194         ff=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME)
1195         ff.setName("NodeFieldPfl")
1196         arr=DataArrayDouble.New() ; arr.setValues([1.,10.,100.,2.,20.,200.],2,3)
1197         ff.setArray(arr)
1198         pfl=DataArrayInt.New() ; pfl.setValues([2,3],2,1) ; pfl.setName("PflNode")
1199         f.setFieldProfile(ff,m,-2,pfl)
1200         tes0=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1201         self.assertEqual(ON_NODES,tes0.getTypeOfField())
1202         self.assertEqual(1,tes0.getMesh().getMeshDimension())
1203         self.assertEqual(1,tes0.getMesh().getNumberOfCells())
1204         self.assertEqual(2,tes0.getMesh().getNumberOfNodes())
1205         self.assertEqual([1,0,1],tes0.getMesh().getNodalConnectivity().getValues())
1206         self.assertEqual([0,3],tes0.getMesh().getNodalConnectivityIndex().getValues())
1207         self.assertEqual(2,tes0.getArray().getNumberOfTuples())
1208         self.assertEqual(3,tes0.getArray().getNumberOfComponents())
1209         expected1=[1.,10.,100.,2.,20.,200.]
1210         nodeCoordsWithValue1=[10.,2.5,0.]
1211         nodeCoordsWithValue2=[10.,3.75,0.]
1212         for i in range(3):
1213             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes0.getMesh().getCoordinatesOfNode(0)[i],13);
1214             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes0.getMesh().getCoordinatesOfNode(1)[i],13);
1215             pass
1216         for i in range(6):
1217             self.assertAlmostEqual(expected1[i],tes0.getArray().getIJ(0,i),13);
1218             pass
1219         del tes0
1220         #
1221         tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1222         self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1223         self.assertEqual(0,tes1.getMesh().getMeshDimension())
1224         self.assertEqual(2,tes1.getMesh().getNumberOfCells())
1225         self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
1226         self.assertEqual([0,2,0,3],tes1.getMesh().getNodalConnectivity().getValues())
1227         self.assertEqual([0,2,4],tes1.getMesh().getNodalConnectivityIndex().getValues())
1228         self.assertEqual(2,tes1.getArray().getNumberOfTuples())
1229         self.assertEqual(3,tes1.getArray().getNumberOfComponents())
1230         for i in range(6):
1231             self.assertAlmostEqual(expected1[i],tes1.getArray().getIJ(0,i),13);
1232             pass
1233         m.write(fname,2)
1234         f.write(fname,0)
1235         #
1236         pfl=DataArrayInt.New() ; pfl.setValues([3,2],2,1) ; pfl.setName("PflNode")
1237         f=MEDFileField1TS.New()
1238         f.setFieldProfile(ff,m,-2,pfl)
1239         tes2=f.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1240         self.assertEqual(ON_NODES,tes2.getTypeOfField())
1241         self.assertEqual(1,tes2.getMesh().getMeshDimension())
1242         self.assertEqual(1,tes2.getMesh().getNumberOfCells())
1243         self.assertEqual(2,tes2.getMesh().getNumberOfNodes())
1244         self.assertEqual([1,0,1],tes2.getMesh().getNodalConnectivity().getValues())
1245         self.assertEqual([0,3],tes2.getMesh().getNodalConnectivityIndex().getValues())
1246         self.assertEqual(2,tes2.getArray().getNumberOfTuples())
1247         self.assertEqual(3,tes2.getArray().getNumberOfComponents())
1248         expected2=[2.,20.,200.,1.,10.,100.]
1249         for i in range(3):
1250             self.assertAlmostEqual(nodeCoordsWithValue1[i],tes2.getMesh().getCoordinatesOfNode(0)[i],13);
1251             self.assertAlmostEqual(nodeCoordsWithValue2[i],tes2.getMesh().getCoordinatesOfNode(1)[i],13);
1252             pass
1253         for i in range(6):
1254             self.assertAlmostEqual(expected2[i],tes2.getArray().getIJ(0,i),13);#compare tes2 and tes3
1255             pass
1256         #
1257         tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
1258         self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
1259         self.assertEqual(0,tes3.getMesh().getMeshDimension())
1260         self.assertEqual(2,tes3.getMesh().getNumberOfCells())
1261         self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
1262         self.assertEqual([0,3,0,2],tes3.getMesh().getNodalConnectivity().getValues())
1263         self.assertEqual([0,2,4],tes3.getMesh().getNodalConnectivityIndex().getValues())
1264         self.assertEqual(2,tes3.getArray().getNumberOfTuples())
1265         self.assertEqual(3,tes3.getArray().getNumberOfComponents())
1266         for i in range(6):
1267             self.assertAlmostEqual(expected1[i],tes3.getArray().getIJ(0,i),13);
1268             pass
1269         pass
1270
1271     def testBuildInnerBoundaryAlongM1Group1(self):
1272         fname="Pyfile44.med"
1273         m=MEDCouplingCMesh.New()
1274         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1275         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1276         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1277         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1278         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1279         m2.setName(m.getName())
1280         grp=DataArrayInt.New([4,6,8]) ; grp.setName("Grp")
1281         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1282         mm=MEDFileUMesh.New()
1283         mm.setMeshAtLevel(0,m)
1284         mm.setMeshAtLevel(-1,m2)
1285         mm.setGroupsAtLevel(-1,[grp,grp2])
1286         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1287         mm.setGroupsAtLevel(1,[grpNode])
1288         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1289         ref1=[4,9,8,14,15,4,10,9,15,16,4,11,10,16,17]
1290         ref2=[4,9,8,14,30,4,10,9,30,31,4,11,10,31,32]
1291         #
1292         self.assertEqual(30,mm.getNumberOfNodes())
1293         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1294         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())
1295         #
1296         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1297         self.assertEqual([15,16,17],nodes.getValues());
1298         self.assertEqual([7,8,9],cells.getValues());
1299         self.assertEqual([12,13,14],cells2.getValues());
1300         self.assertEqual(33,mm.getNumberOfNodes())
1301         self.assertEqual([4,6,8],mm.getGroupArr(-1,"Grp").getValues())
1302         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1303         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1304         self.assertEqual([17,18,19],mm.getGroupArr(-1,"Grp_dup").getValues())
1305         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
1306         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8,9]].getNodalConnectivity().getValues())#
1307         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
1308         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1309         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])
1310         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1311         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1312         #
1313         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1314         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1315         refValues2=refValues[:] ; refValues2[7:10]=[1.365,1.26,1.35]
1316         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1317         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1318         mm.write(fname,2)
1319         pass
1320
1321     def testBuildInnerBoundaryAlongM1Group2(self):
1322         fname="Pyfile45.med"
1323         m=MEDCouplingCMesh.New()
1324         m.setCoordsAt(0,DataArrayDouble.New([0.,1.1,2.3,3.6,5.,6.5]))
1325         m.setCoordsAt(1,DataArrayDouble.New([0.,1.1,2.3,3.6,5.]))
1326         m=m.buildUnstructured() ; m.setName("AnthonyDuplicate")
1327         m.getCoords().setInfoOnComponents(["X [km]","Z [mm]"])
1328         m2=m.buildDescendingConnectivity()[0][[8,11,14,20,21,22,23,24,25,26,31,32,33,34,35,36,37]]
1329         m2.setName(m.getName())
1330         grp=DataArrayInt.New([4,6]) ; grp.setName("Grp")
1331         grp2=DataArrayInt.New([9,16]) ; grp2.setName("Grp2")
1332         mm=MEDFileUMesh.New()
1333         mm.setMeshAtLevel(0,m)
1334         mm.setMeshAtLevel(-1,m2)
1335         mm.setGroupsAtLevel(-1,[grp,grp2])
1336         grpNode=DataArrayInt.New([4,21,23]) ; grpNode.setName("GrpNode")
1337         mm.setGroupsAtLevel(1,[grpNode])
1338         ref0=[4,15,14,20,21,4,16,15,21,22,4,17,16,22,23]
1339         ref1=[4,9,8,14,15,4,10,9,15,16]
1340         ref2=[4,9,8,14,30,4,10,9,30,16]
1341         #
1342         self.assertEqual(30,mm.getNumberOfNodes())
1343         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[12,13,14]].getNodalConnectivity().getValues())
1344         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())
1345         #
1346         nodes,cells,cells2=mm.buildInnerBoundaryAlongM1Group("Grp")
1347         self.assertEqual([15],nodes.getValues());
1348         self.assertEqual([7,8],cells.getValues());
1349         self.assertEqual([12,13],cells2.getValues());
1350         self.assertEqual(31,mm.getNumberOfNodes())
1351         self.assertEqual([4,6],mm.getGroupArr(-1,"Grp").getValues())
1352         self.assertEqual([9,16],mm.getGroupArr(-1,"Grp2").getValues())
1353         self.assertEqual([4,21,23],mm.getGroupArr(1,"GrpNode").getValues())
1354         self.assertEqual([17,18],mm.getGroupArr(-1,"Grp_dup").getValues())
1355         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
1356         self.assertEqual(ref2,mm.getMeshAtLevel(0)[[7,8]].getNodalConnectivity().getValues())#
1357         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
1358         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1359         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])
1360         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1361         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1362         #
1363         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1364         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1365         refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47]
1366         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs()
1367         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1368         mm.write(fname,2)       
1369         pass
1370
1371     def testBuildInnerBoundaryAlongM1Group3(self):
1372         """ Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
1373         fname = "Pyfile73.med"
1374         m = MEDCouplingCMesh.New()
1375         m.setCoordsAt(0, DataArrayDouble([0.0,1.1,2.3,3.6,5.0]))
1376         m.setCoordsAt(1, DataArrayDouble([0.,1.,2.]))
1377         m = m.buildUnstructured(); m.setName("simple")
1378         m2 = m.buildDescendingConnectivity()[0]
1379         m2.setName(m.getName())
1380             
1381         # A crack in two non connected parts of the mesh:
1382         grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp") 
1383
1384         mm = MEDFileUMesh.New()
1385         mm.setMeshAtLevel(0,m)
1386         mm.setMeshAtLevel(-1,m2)
1387         mm.setGroupsAtLevel(-1,[grpSeg])
1388         nodes, cellsMod, cellsNotMod = mm.buildInnerBoundaryAlongM1Group("Grp")
1389         self.assertEqual([1,13],nodes.getValues());
1390         self.assertEqual([0,6],cellsMod.getValues());
1391         self.assertEqual([1,7],cellsNotMod.getValues());
1392         self.assertEqual(17,mm.getNumberOfNodes())
1393         self.assertEqual([3,19],mm.getGroupArr(-1,"Grp").getValues())
1394         self.assertEqual([22,23],mm.getGroupArr(-1,"Grp_dup").getValues())
1395         ref0=[4, 15, 0, 5, 6, 4, 8, 7, 12, 16]
1396         ref1=[4, 2, 1, 6, 7, 4, 9, 8, 13, 14]
1397         self.assertEqual(ref0,mm.getMeshAtLevel(0)[[0,6]].getNodalConnectivity().getValues())
1398         self.assertEqual(ref1,mm.getMeshAtLevel(0)[[1,7]].getNodalConnectivity().getValues())
1399         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
1400         mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith(mm.getGroup(-1,"Grp"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1401
1402         refValues=DataArrayDouble([1.1, 1.2, 1.3, 1.4, 1.1, 1.2, 1.3, 1.4])
1403         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues) ; delta.abs()
1404         self.assertTrue(delta.getMaxValue()[0]<1e-10)
1405         #
1406         mm.getCoords()[-len(nodes):]+=[0.,-0.3]
1407         self.assertRaises(InterpKernelException,mm.getGroup(-1,"Grp_dup").checkGeoEquivalWith,mm.getGroup(-1,"Grp"),12,1e-12);
1408         refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105
1409         valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ;     delta=(valsToTest-refValues2) ; delta.abs()
1410         self.assertTrue(delta.getMaxValue()[0]<1e-12)
1411         mm.write(fname,2)   
1412
1413     def testBuildInnerBoundaryAlongM1Group4(self):
1414         """ Test case where cells touch the M1 group on some nodes only and not on full egdes (triangle mesh for ex)
1415         """
1416         coo = DataArrayDouble([0.,0., 1.,0., 2.,0., 3.,0.,
1417                                0.,1., 1.,1., 2.,1., 3.,1.,
1418                                0.,2., 1.,2., 2.,2., 3.,2.], 12, 2)
1419         conn = [3,0,4,1,  3,1,4,5,
1420                 3,5,9,10, 3,5,10,6,
1421                 3,2,6,7,  3,2,7,3,
1422                 3,4,8,9,  3,4,9,5,
1423                 3,1,5,6,  3,1,6,2,
1424                 3,6,10,11,3,6,11,7]
1425         # Only TRI3:
1426         connI = DataArrayInt()
1427         connI.alloc(13, 1); connI.iota(); connI *= 4
1428         m2 = MEDCouplingUMesh("2D", 2)
1429         m2.setCoords(coo)
1430         m2.setConnectivity(DataArrayInt(conn), connI)
1431         m2.checkConsistency()
1432         m1, _, _, _, _ = m2.buildDescendingConnectivity()
1433         grpIds = DataArrayInt([9,11]); grpIds.setName("group")
1434         grpIds2 = DataArrayInt([0,1]); grpIds2.setName("group2")
1435         mfu = MEDFileUMesh()
1436         mfu.setMeshAtLevel(0, m2)
1437         mfu.setMeshAtLevel(-1, m1)
1438         mfu.setGroupsAtLevel(-1, [grpIds, grpIds2])
1439         nNod = m2.getNumberOfNodes()
1440         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1441         m2_bis = mfu.getMeshAtLevel(0)
1442         m2_bis.checkConsistency()
1443         m1_bis = mfu.getMeshAtLevel(-1)
1444         m1_bis.checkConsistency()
1445         self.assertEqual(nNod+2, mfu.getNumberOfNodes())
1446         self.assertEqual(nNod+2, m2_bis.getNumberOfNodes())
1447         self.assertEqual(nNod+2, m1_bis.getNumberOfNodes())
1448         self.assertEqual([6,7], nodesDup.getValues())
1449         self.assertEqual([2.,1., 3.,1.], m2_bis.getCoords()[nNod:].getValues())
1450         self.assertEqual(set([3,10,11]), set(cells1.getValues()))
1451         self.assertEqual(set([8,9,4,5]), set(cells2.getValues()))
1452         self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues())
1453         self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues())
1454         self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues())
1455 #         mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu")
1456         ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13]
1457         ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2]
1458         self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues())
1459         self.assertEqual(ref1,mfu.getMeshAtLevel(0)[[4,5,8,9]].getNodalConnectivity().getValues())
1460         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
1461         mfu.getGroup(-1,"group_dup").checkGeoEquivalWith(mfu.getGroup(-1,"group"),12,1e-12)# Grp_dup and Grp are equal considering connectivity and coordinates
1462         m_bis0 = mfu.getMeshAtLevel(-1)
1463         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1464         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1465
1466     def testBuildInnerBoundary5(self):
1467         """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only
1468         of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """
1469         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, 
1470         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,
1471          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, 
1472          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, 
1473          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, 
1474          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, 
1475          400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483,
1476          99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015, 
1477          100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784, 
1478          97.16750463405486, 97.18018457127863], 46, 3)
1479         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,
1480          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,
1481          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,
1482          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,
1483          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,
1484          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,
1485          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,
1486          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,
1487          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,
1488          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,
1489          30, 2]
1490         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,
1491          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, 
1492          360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430]
1493         m3 = MEDCouplingUMesh("3D", 3)
1494         m3.setCoords(coo)
1495         m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0))
1496         m3.checkConsistency()
1497         m2, _, _, _, _ = m3.buildDescendingConnectivity()
1498         grpIds = DataArrayInt([36,74]); grpIds.setName("group")
1499         mfu = MEDFileUMesh()
1500         mfu.setMeshAtLevel(0, m3)
1501         mfu.setMeshAtLevel(-1, m2)
1502         grpIds3D = DataArrayInt([0,1]); grpIds3D.setName("group_3d")
1503         mfu.setGroupsAtLevel(0, [grpIds3D])  # just to check preservation of 3D group
1504         mfu.setGroupsAtLevel(-1, [grpIds])
1505         nNod = m3.getNumberOfNodes()
1506         nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group")
1507         m3_bis = mfu.getMeshAtLevel(0)
1508         m3_bis.checkConsistency()
1509         m2_bis = mfu.getMeshAtLevel(-1)
1510         m2_bis.checkConsistency()
1511         self.assertEqual(nNod+1, mfu.getNumberOfNodes())
1512         self.assertEqual(nNod+1, m3_bis.getNumberOfNodes())
1513         self.assertEqual(nNod+1, m2_bis.getNumberOfNodes())
1514         self.assertEqual([3], nodesDup.getValues())
1515         self.assertEqual(m3_bis.getCoords()[3].getValues(), m3_bis.getCoords()[nNod:].getValues())
1516         self.assertEqual(set([22]), set(cells1.getValues()))
1517         self.assertEqual(set([77]), set(cells2.getValues()))
1518         self.assertEqual([36,74],mfu.getGroupArr(-1,"group").getValues())
1519         self.assertEqual([0,1],mfu.getGroupArr(0,"group_3d").getValues())
1520         self.assertEqual([213],mfu.getGroupArr(-1,"group_dup").getValues())  # here only one cell has been duplicated
1521         m_bis0 = mfu.getMeshAtLevel(-1)
1522         m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
1523         m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
1524         pass
1525
1526     def testBasicConstructors(self):
1527         fname="Pyfile18.med"
1528         m=MEDFileMesh.New(fname)
1529         m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
1530         m=MEDFileMesh.New(fname)
1531         m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
1532         m=MEDFileUMesh(fname)
1533         m=MEDFileUMesh()
1534         self.testMEDMesh6()
1535         m=MEDFileCMesh("MEDFileMesh5.med")
1536         m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
1537         m=MEDFileCMesh()
1538         m=MEDFileMeshMultiTS()
1539         m=MEDFileMeshMultiTS(fname)
1540         m=MEDFileMeshMultiTS(fname,"ExampleOfMultiDimW")
1541         m=MEDFileMeshes()
1542         m=MEDFileMeshes(fname)
1543         m=MEDFileField1TS()
1544         m=MEDFileField1TS(fname,"FieldOnFacesShuffle",2,7)
1545         m=MEDFileFieldMultiTS()
1546         m=MEDFileFieldMultiTS(fname,"FieldOnFacesShuffle")
1547         m=MEDFileFields()
1548         m=MEDFileFields(fname)
1549         m=MEDFileData()
1550         m=MEDFileData(fname)
1551         #
1552         m=DataArrayInt() ; m=DataArrayInt(5,2) ; m=DataArrayInt([6,5,4,3,2,1],3,2)
1553         m=DataArrayDouble() ; m=DataArrayDouble(5,2) ; m=DataArrayDouble([6,5,4,3,2,1],3,2)
1554         m=MEDCouplingUMesh("jjj",2) ; m=MEDCouplingUMesh()
1555         m=MEDCouplingCMesh()
1556         m=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1557         m=MEDCouplingFieldTemplate(ON_NODES)
1558         m=MEDCouplingMultiFields([])
1559         m=MEDCouplingFieldOverTime([])
1560         pass
1561
1562     # This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
1563     def testBugSemiPartialField(self):
1564         fname="Pyfile46.med"
1565         m=MEDLoaderDataForTest.build2DMesh_3()
1566         m=m[:10] ; m.setName("mesh")
1567         f=m.getMeasureField(False)
1568         f=f.buildNewTimeReprFromThis(ONE_TIME,False)
1569         f.setTime(5.5,3,4)
1570         f.setName("SemiPartialField")
1571         #
1572         f1=f[:6] ; f1.getMesh().setName(m.getName())
1573         f2=f[6:] ; f2.getMesh().setName(m.getName())
1574         #
1575         mm=MEDFileUMesh.New()
1576         mm.setMeshAtLevel(0,m)
1577         ff=MEDFileField1TS.New()
1578         ff.setFieldProfile(f1,mm,0,DataArrayInt.Range(0,6,1)) # no name on profile -> normally it is an error but in this special case
1579         mm.write(fname,2)
1580         ff.write(fname,0)
1581         #
1582         ff2=MEDFileField1TS.New(fname,f.getName(),f.getTime()[1],f.getTime()[2])
1583         fread=ff2.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
1584         fread2=ff2.getFieldAtLevel(ON_CELLS,0)
1585         #
1586         fread.checkConsistencyLight()
1587         fread2.checkConsistencyLight()
1588         self.assertTrue(fread.isEqual(f1,1e-12,1e-12))
1589         self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
1590         pass
1591
1592     def testUnPolyze1(self):
1593         fname="Pyfile47.med"
1594         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1595         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]
1596         self.assertEqual(ref,mm.getFamilyFieldAtLevel(1).getValues())
1597         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]]))
1598         mm.write(fname,2)
1599         self.assertEqual(mm.getGroupArr(0,"grp0_L0").getValues(),[0,1,2,6])
1600         self.assertEqual(mm.getGroupArr(0,"grp1_L0").getValues(),[1,3,4,5,6])
1601         self.assertEqual(mm.getGroupArr(-1,"grp0_LM1").getValues(),[1,2,3,4,5])
1602         self.assertEqual(mm.getGroupArr(-1,"grp1_LM1").getValues(),[3,4,5,6])
1603         self.assertEqual(mm.getGroupArr(-1,"grp2_LM1").getValues(),[2,6,7,8])
1604         self.assertEqual(mm.getGroupArr(1,"grp0_Node").getValues(),[0,11,15,16])
1605         self.assertEqual(mm.getGroupArr(1,"grp1_Node").getValues(),[1,2,13,14,16])
1606         self.assertEqual(mm.getFamilyFieldAtLevel(1).getValues(),ref)
1607         # to test
1608         mm.setRenumFieldArr(0,None)
1609         mm.setFamilyFieldArr(-1,None)
1610         pass
1611
1612     def testUnPolyze2(self):
1613         fname="Pyfile48.med"
1614         mfd=MEDFileData.New()
1615         mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
1616         meshes=MEDFileMeshes.New()
1617         meshes.pushMesh(mm)
1618         mfd.setMeshes(meshes)
1619         fields=MEDFileFields.New()
1620         mfd.setFields(fields)
1621         ff=MEDFileFieldMultiTS.New()
1622         fields.pushField(ff)
1623         #
1624         f0_0=MEDCouplingFieldDouble.New(ON_NODES,ONE_TIME) ; f0_0.setName("f0")
1625         f0_0.setTime(9.5,3,4)
1626         da=DataArrayDouble.New(38*2) ; da.iota(6.) ; da.rearrange(2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1627         f0_0.setArray(da)
1628         f0_0.setMesh(mm.getMeshAtLevel(0))
1629         ff.appendFieldNoProfileSBT(f0_0)
1630         ff0=ff.getTimeStepAtPos(0)
1631         f0_1=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_1.setName("f0")
1632         f0_1.setTime(9.5,3,4)
1633         pfl=DataArrayInt.New([1,4,5,6]) ; pfl.setName("pfltest")
1634         f0_1.setMesh(mm.getMeshAtLevel(0)[pfl])
1635         da=DataArrayDouble.New([1401.,101401.,1602.,101602.,3100.,103100.,3101.,103101.],4,2) ; da.setInfoOnComponents(["Power [MW]","Density [kg/m^3]"])
1636         f0_1.setArray(da)
1637         ff0.setFieldProfile(f0_1,mm,0,pfl)
1638         f0_2=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME) ; f0_2.setName("f0")#provoquer error
1639         f0_2.setTime(9.5,3,4)
1640         pfl2=DataArrayInt.New([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfltestM1")
1641         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
1642         f0_2.setMesh(mm.getMeshAtLevel(-1)[pfl2])
1643         f0_2.setArray(da)
1644         ff0.setFieldProfile(f0_2,mm,-1,pfl2)
1645         mfd.getFields().shallowCpyGlobs(ff0)
1646         #
1647         mfd.unPolyzeMeshes()
1648         #
1649         fmts=mfd.getFields()[0]
1650         self.assertEqual(fmts.getNumberOfTS(),1)
1651         self.assertEqual(fmts.getTimeSteps(),[(3,4,9.5)])
1652         arr,entry=fmts.getUndergroundDataArrayExt(3,4)
1653         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))])
1654         self.assertTrue(arr[38:40].isEqualWithoutConsideringStr(DataArrayDouble([300.0,100300.0,301.0,100301.0],2,2),1e-8))
1655         self.assertTrue(arr[40:43].isEqualWithoutConsideringStr(DataArrayDouble([400.0,100400.0,401.0,100401.0,402.0,100402.0],3,2),1e-8))
1656         self.assertTrue(arr[43:46].isEqualWithoutConsideringStr(DataArrayDouble([3200.0,103200.0,3201.0,103201.0,3203.0,103203.0],3,2),1e-8))
1657         self.assertTrue(arr[46:48].isEqualWithoutConsideringStr(DataArrayDouble([1401.0,101401.0,3100.0,103100.0],2,2),1e-8))
1658         self.assertTrue(arr[48:49].isEqualWithoutConsideringStr(DataArrayDouble([1602.0,101602.0],1,2),1e-8))
1659         self.assertTrue(arr[49:50].isEqualWithoutConsideringStr(DataArrayDouble([3101.0,103101.0],1,2),1e-8))
1660         self.assertEqual(('NewPfl_0','NewPfl_1','NewPfl_2'),fmts.getPflsReallyUsed())
1661         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))
1662         self.assertEqual(fmts.getProfile("NewPfl_0").getValues(),[0,1])
1663         self.assertEqual(fmts.getProfile("NewPfl_1").getValues(),[1,2])
1664         self.assertEqual(fmts.getProfile("NewPfl_2").getValues(),[2])
1665         ftest0=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,0,mfd.getMeshes()[0])
1666         self.assertTrue(ftest0.getArray().isEqualWithoutConsideringStr(DataArrayDouble([1401.,101401.,3100.,103100.,1602.,101602.,3101.,103101.],4,2),1e-8))
1667         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])
1668         self.assertEqual(ftest0.getMesh().getNodalConnectivityIndex().getValues(),[0,5,10,17,26])
1669         ftest1=fmts.getFieldOnMeshAtLevel(ON_CELLS,3,4,-1,mfd.getMeshes()[0])
1670         self.assertTrue(ftest1.getArray().isEqualWithoutConsideringStr(DataArrayDouble([300.,100300.,301.,100301.,400.,100400.,401.,100401.,402.,100402.,3200.,103200.,3201.,103201.,3203.,103203.]),1e-8))
1671         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])
1672         self.assertEqual(ftest1.getMesh().getNodalConnectivityIndex().getValues(),[0,4,8,13,18,23,29,35,43])
1673         #
1674         mfd.write(fname,2)
1675         pass
1676
1677     def testGaussWriteOnPfl1(self):
1678         fname="Pyfile49.med"
1679         fname2="Pyfile50.med"
1680         coords=DataArrayDouble([0.,0.,0.,1.,1.,1.,1.,0.,0.,0.5,0.5,1.,1.,0.5,0.5,0.],8,2)
1681         mQ8=MEDCouplingUMesh("",2) ; mQ8.setCoords(coords)
1682         mQ8.allocateCells(1)
1683         mQ8.insertNextCell(NORM_QUAD8,list(range(8)))
1684         mQ8.finishInsertingCells()
1685         mQ4=MEDCouplingUMesh("",2) ; mQ4.setCoords(coords)
1686         mQ4.allocateCells(1)
1687         mQ4.insertNextCell(NORM_QUAD4,list(range(4)))
1688         mQ4.finishInsertingCells()
1689         mT3=MEDCouplingUMesh("",2) ; mT3.setCoords(coords)
1690         mT3.allocateCells(1)
1691         mT3.insertNextCell(NORM_TRI3,list(range(3)))
1692         mT3.finishInsertingCells()
1693         
1694         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.]]
1695         ms=11*[mT3]+2*[mQ4]+7*[mQ8]
1696         ms[:]=(elt.deepCopy() for elt in ms)
1697         for m,t in zip(ms,tr):
1698             d=m.getCoords() ; d+= t
1699             pass
1700         m=MEDCouplingUMesh.MergeUMeshes(ms)
1701         m.setName("mesh")
1702         m2=m[:13] ; m2.setName(m.getName())
1703         ### 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.
1704         ### So here 2 pfls will be created (pfl_TRI3_loc_0 and pfl_TRI3_loc_1)
1705         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1706         f.setMesh(m2)
1707         f.setTime(4.5,1,2)
1708         da=DataArrayDouble(34) ; da.iota(3.)
1709         f.setArray(da)
1710         f.setName("fieldCellOnPflWithoutPfl")
1711         fInvalid=f.deepCopy()
1712         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])
1713         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])
1714         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])
1715         f.checkConsistencyLight()
1716         fInvalid2=fInvalid.deepCopy()
1717         fInvalid2.getDiscretization().setArrayOfDiscIds(f.getDiscretization().getArrayOfDiscIds())
1718         #
1719         mm=MEDFileUMesh()
1720         mm.setMeshAtLevel(0,m)
1721         mm.write(fname,2)
1722         #
1723         f1ts=MEDFileField1TS.New()
1724         pfl=DataArrayInt(list(range(13))) ; pfl.setName("pfl")
1725         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid,mm,0,pfl) # fails because no Gauss localization per cell set !
1726         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,fInvalid2,mm,0,pfl) # fails because no Gauss localization set whereas gauss locid per cell given !
1727         f1ts.setFieldProfile(f,mm,0,pfl)
1728         f1ts.write(fname,0)
1729         #
1730         self.assertEqual(f1ts.getPfls(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1731         self.assertEqual(f1ts.getPflsReallyUsed(),('pfl_NORM_TRI3_loc_0', 'pfl_NORM_TRI3_loc_1'))
1732         da1=DataArrayInt([0,1,2,3,4,5,6,7,8]) ; da1.setName("pfl_NORM_TRI3_loc_0")
1733         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_0").isEqual(da1))
1734         da1=DataArrayInt([9,10]) ; da1.setName("pfl_NORM_TRI3_loc_1")
1735         self.assertTrue(f1ts.getProfile("pfl_NORM_TRI3_loc_1").isEqual(da1))
1736         self.assertEqual(f1ts.getLocs(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1737         self.assertEqual(f1ts.getLocsReallyUsed(),('Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_0', 'Loc_fieldCellOnPflWithoutPfl_NORM_TRI3_1', 'Loc_fieldCellOnPflWithoutPfl_NORM_QUAD4_2'))
1738         #
1739         dataRead=MEDFileData.New(fname)
1740         mRead=dataRead.getMeshes()[0]
1741         f1tsRead=dataRead.getFields()[0][0]
1742         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1743         f2=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1744         self.assertTrue(f.isEqual(f2,1e-12,1e-12))
1745         f2_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1746         f2_bis.checkConsistencyLight()
1747         self.assertTrue(f.isEqual(f2_bis,1e-12,1e-12))
1748         #
1749         WriteField(fname2,f,True)
1750         f2_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1751         self.assertTrue(f.isEqual(f2_ter,1e-12,1e-12))
1752         ## Use case 2 : Pfl on part tri3 with 2 disc and on part quad8 with 1 disc
1753         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1754         pfl=DataArrayInt([1,2,5,6,8,9,15,16,17,18]) ; pfl.setName("pfl2")
1755         m2=m[pfl] ; m2.setName(m.getName())
1756         f.setMesh(m2)
1757         f.setTime(4.5,1,2)
1758         da=DataArrayDouble(35) ; da.iota(3.)
1759         f.setArray(da)
1760         f.setName("fieldCellOnPflWithoutPfl2")
1761         f.setGaussLocalizationOnCells([0,1,3],[0.,0.,1.,0.,1.,1.],[0.3,0.3,0.7,0.7],[0.8,0.2])
1762         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])
1763         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])
1764         f.checkConsistencyLight()
1765         #
1766         mm=MEDFileUMesh()
1767         mm.setMeshAtLevel(0,m)
1768         mm.write(fname,2)
1769         f1ts=MEDFileField1TS.New()
1770         f1ts.setFieldProfile(f,mm,0,pfl)
1771         self.assertEqual(f1ts.getPfls(),('pfl2_NORM_TRI3_loc_0','pfl2_NORM_TRI3_loc_1','pfl2_NORM_QUAD8_loc_2'))
1772         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_0").getValues(),[1,2,6])
1773         self.assertEqual(f1ts.getProfile("pfl2_NORM_TRI3_loc_1").getValues(),[5,8,9])
1774         self.assertEqual(f1ts.getProfile("pfl2_NORM_QUAD8_loc_2").getValues(),[2,3,4,5])
1775         f1ts.write(fname,0)
1776         dataRead=MEDFileData.New(fname)
1777         mRead=dataRead.getMeshes()[0]
1778         f1tsRead=dataRead.getFields()[0][0]
1779         f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1780         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1781         f3.renumberCells([0,1,3,2,4,5,6,7,8,9])
1782         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1783         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1784         f3_bis.renumberCells([0,1,3,2,4,5,6,7,8,9])
1785         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1786         #
1787         WriteField(fname2,f,True)
1788         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1789         f3_ter.renumberCells([0,1,3,2,4,5,6,7,8,9])
1790         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1791         ## Use case 3 : no pfl but creation of pfls due to gauss pts
1792         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME)
1793         f.setMesh(m)
1794         f.setTime(4.5,1,2)
1795         da=DataArrayDouble(60) ; da.iota(3.)
1796         f.setArray(da)
1797         f.setName("fieldCellWithoutPfl")
1798         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])
1799         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])
1800         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])
1801         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])
1802         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])
1803         f.checkConsistencyLight()
1804         mm=MEDFileUMesh()
1805         mm.setMeshAtLevel(0,m) 
1806         f1ts=MEDFileField1TS.New()
1807         f1ts.setFieldNoProfileSBT(f)
1808         self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4'))
1809         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_0").getValues(),[0,1,2,3,4,5,6,7,8])
1810         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_TRI3_1").getValues(),[9,10])
1811         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_3").getValues(),[0,1,2,4,5])
1812         self.assertEqual(f1ts.getProfile("Pfl_fieldCellWithoutPfl_NORM_QUAD8_4").getValues(),[3,6])
1813         mm.write(fname,2)
1814         f1ts.write(fname,0)
1815         #
1816         dataRead=MEDFileData.New(fname)
1817         mRead=dataRead.getMeshes()[0]
1818         f1tsRead=dataRead.getFields()[0][0]
1819         f3=f1tsRead.getFieldOnMeshAtLevel(ON_GAUSS_PT,0,mRead)
1820         f3.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1821         self.assertTrue(f.isEqual(f3,1e-12,1e-12))
1822         f3_bis=ReadFieldGauss(fname,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1823         f3_bis.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1824         self.assertTrue(f.isEqual(f3_bis,1e-12,1e-12))
1825         #
1826         WriteField(fname2,f,True)
1827         f3_ter=ReadFieldGauss(fname2,m.getName(),0,f.getName(),f.getTime()[1],f.getTime()[2])
1828         f3_ter.renumberCells([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,16,19])
1829         self.assertTrue(f.isEqual(f3_ter,1e-12,1e-12))
1830         pass
1831
1832     # Testing profile on nodes when the profile is identity but not on all nodes.
1833     def testMEDFieldPflOnNode1(self):
1834         fname="Pyfile51.med"
1835         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)
1836         m0=MEDCouplingUMesh("Mesh",2)
1837         m0.allocateCells(5)
1838         m0.insertNextCell(NORM_TRI3,[1,4,2])
1839         m0.insertNextCell(NORM_TRI3,[4,5,2])
1840         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1841         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1842         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1843         m0.finishInsertingCells()
1844         m0.setCoords(coo)
1845         m1=MEDCouplingUMesh(m0.getName(),1)
1846         m1.allocateCells(9)
1847         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1848         for i in range(9):
1849             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1850             pass
1851         m1.finishInsertingCells()
1852         m1.setCoords(coo)
1853         #
1854         m=MEDFileUMesh()
1855         m.setMeshAtLevel(0,m0)
1856         m.setMeshAtLevel(-1,m1)
1857         #
1858         dt=3 ; it=2 ; tim=4.5
1859         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1860         fieldNode0.setName("fieldNode0")
1861         fieldNode0.setTime(tim,dt,it)
1862         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
1863         arr=DataArrayDouble([10,11,12,13,14])
1864         fieldNode0.setArray(arr)
1865         f0=MEDFileField1TS()
1866         f0.setFieldProfile(fieldNode0,m,0,pfl0)
1867         m.write(fname,2) ; f0.write(fname,0)
1868         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
1869         fieldNode1.setName("fieldNode1")
1870         fieldNode1.setTime(tim,dt,it)
1871         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1872         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1873         fieldNode1.setArray(arr1)
1874         f1=MEDFileField1TS()
1875         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
1876         f1.write(fname,0)
1877         del m,f0,m0,m1,f1
1878         ## Reading from file
1879         m=MEDFileMesh.New(fname)
1880         m0=m.getMeshAtLevel(0)
1881         m00=m0.deepCopy() ; m00=m00[[0,2]] ; m00.setName(m.getName()) ; m00.zipCoords()
1882         fieldNode0.setMesh(m00)
1883         f0=MEDFileField1TS.New(fname,fieldNode0.getName(),dt,it)
1884         ff0_1=f0.getFieldOnMeshAtLevel(ON_NODES,m0)
1885         ff0_1.checkConsistencyLight()
1886         self.assertTrue(ff0_1.isEqual(fieldNode0,1e-12,1e-12))
1887         ff0_2=f0.getFieldAtLevel(ON_NODES,0)
1888         ff0_2.checkConsistencyLight()
1889         self.assertTrue(ff0_2.isEqual(fieldNode0,1e-12,1e-12))
1890         ff0_3=f0.getFieldOnMeshAtLevel(ON_NODES,0,m)
1891         ff0_3.checkConsistencyLight()
1892         self.assertTrue(ff0_3.isEqual(fieldNode0,1e-12,1e-12))
1893         ff0_4=ReadFieldNode(fname,m.getName(),0,fieldNode0.getName(),dt,it)
1894         ff0_4.checkConsistencyLight()
1895         self.assertTrue(ff0_4.isEqual(fieldNode0,1e-12,1e-12))
1896         f1=MEDFileField1TS.New(fname,fieldNode1.getName(),dt,it)
1897         m1=m.getMeshAtLevel(-1)
1898         m10=m1.deepCopy() ; m10=m10[[0,1,2,3,4,5,6,7]] ; m10.setName(m.getName()) ; m10.zipCoords()
1899         fieldNode1.setMesh(m10)
1900         ff1_1=f1.getFieldOnMeshAtLevel(ON_NODES,m1)
1901         ff1_1.checkConsistencyLight()
1902         self.assertTrue(ff1_1.isEqual(fieldNode1,1e-12,1e-12))
1903         ff1_2=f1.getFieldAtLevel(ON_NODES,-1)
1904         ff1_2.checkConsistencyLight()
1905         self.assertTrue(ff1_2.isEqual(fieldNode1,1e-12,1e-12))
1906         ff1_3=f1.getFieldOnMeshAtLevel(ON_NODES,-1,m)
1907         ff1_3.checkConsistencyLight()
1908         self.assertTrue(ff1_3.isEqual(fieldNode1,1e-12,1e-12))
1909         ff1_4=ReadFieldNode(fname,m.getName(),-1,fieldNode1.getName(),dt,it)
1910         ff1_4.checkConsistencyLight()
1911         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
1912         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]
1913         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]
1914         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]
1915         arr_r,pfl1_r=f1.getFieldWithProfile(ON_NODES,-1,m)
1916         arr_r.setName(fieldNode1.getArray().getName())
1917         self.assertTrue(arr_r.isEqual(fieldNode1.getArray(),1e-12))
1918         pfl1_r.setName(pfl1.getName())
1919         self.assertTrue(pfl1_r.isEqual(pfl1))
1920         pass
1921     
1922         # Testing profile on nodes when the profile is identity but not on all nodes.
1923     def testMEDFieldPflOnCell1(self):
1924         fname="Pyfile52.med"
1925         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)
1926         m0=MEDCouplingUMesh("Mesh",2)
1927         m0.allocateCells(5)
1928         m0.insertNextCell(NORM_TRI3,[1,4,2])
1929         m0.insertNextCell(NORM_TRI3,[4,5,2])
1930         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
1931         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
1932         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
1933         m0.finishInsertingCells()
1934         m0.setCoords(coo)
1935         m1=MEDCouplingUMesh(m0.getName(),1)
1936         m1.allocateCells(9)
1937         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
1938         for i in range(9):
1939             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
1940             pass
1941         m1.finishInsertingCells()
1942         m1.setCoords(coo)
1943         #
1944         m=MEDFileUMesh()
1945         m.setMeshAtLevel(0,m0)
1946         m.setMeshAtLevel(-1,m1)
1947         #
1948         dt=3 ; it=2 ; tim=4.5
1949         fieldCell0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1950         fieldCell0.setName("fieldCell0")
1951         fieldCell0.setTime(tim,dt,it)
1952         pfl0=DataArrayInt([0,1,2]) ; pfl0.setName("PflIdentity0") # important to keep like that
1953         arr=DataArrayDouble([10,11,12])
1954         fieldCell0.setArray(arr)
1955         f0=MEDFileField1TS()
1956         f0.setFieldProfile(fieldCell0,m,0,pfl0)
1957         m.write(fname,2) ; f0.write(fname,0)
1958         fieldCell1=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME)
1959         fieldCell1.setName("fieldCell1")
1960         fieldCell1.setTime(tim,dt,it)
1961         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
1962         arr1=DataArrayDouble([20,21,22,23,24,25,26])
1963         fieldCell1.setArray(arr1)
1964         f1=MEDFileField1TS()
1965         f1.setFieldProfile(fieldCell1,m,-1,pfl1)
1966         f1.write(fname,0)
1967         del m,f0,m0,m1,f1
1968         ## Reading from file
1969         m=MEDFileMesh.New(fname)
1970         m0=m.getMeshAtLevel(0)
1971         m00=m0.deepCopy() ; m00=m00[pfl0] ; m00.setName(m.getName())
1972         fieldCell0.setMesh(m00)
1973         f0=MEDFileField1TS.New(fname,fieldCell0.getName(),dt,it)
1974         ff0_1=f0.getFieldOnMeshAtLevel(ON_CELLS,m0)
1975         ff0_1.checkConsistencyLight()
1976         self.assertTrue(ff0_1.isEqual(fieldCell0,1e-12,1e-12))
1977         ff0_2=f0.getFieldAtLevel(ON_CELLS,0)
1978         ff0_2.checkConsistencyLight()
1979         self.assertTrue(ff0_2.isEqual(fieldCell0,1e-12,1e-12))
1980         ff0_3=f0.getFieldOnMeshAtLevel(ON_CELLS,0,m)
1981         ff0_3.checkConsistencyLight()
1982         self.assertTrue(ff0_3.isEqual(fieldCell0,1e-12,1e-12))
1983         ff0_4=ReadFieldCell(fname,m.getName(),0,fieldCell0.getName(),dt,it)
1984         ff0_4.checkConsistencyLight()
1985         self.assertTrue(ff0_4.isEqual(fieldCell0,1e-12,1e-12))
1986         f1=MEDFileField1TS.New(fname,fieldCell1.getName(),dt,it)
1987         m1=m.getMeshAtLevel(-1)
1988         m10=m1.deepCopy() ; m10=m10[pfl1] ; m10.setName(m.getName())
1989         fieldCell1.setMesh(m10)
1990         ff1_1=f1.getFieldOnMeshAtLevel(ON_CELLS,m1)
1991         ff1_1.checkConsistencyLight()
1992         self.assertTrue(ff1_1.isEqual(fieldCell1,1e-12,1e-12))
1993         ff1_2=f1.getFieldAtLevel(ON_CELLS,-1)
1994         ff1_2.checkConsistencyLight()
1995         self.assertTrue(ff1_2.isEqual(fieldCell1,1e-12,1e-12))
1996         ff1_3=f1.getFieldOnMeshAtLevel(ON_CELLS,-1,m)
1997         ff1_3.checkConsistencyLight()
1998         self.assertTrue(ff1_3.isEqual(fieldCell1,1e-12,1e-12))
1999         ff1_4=ReadFieldCell(fname,m.getName(),-1,fieldCell1.getName(),dt,it)
2000         ff1_4.checkConsistencyLight()
2001         self.assertTrue(ff1_4.getMesh().isEqual(m10,1e-12))
2002         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]
2003         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]
2004         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]
2005         arr_r,pfl1_r=f1.getFieldWithProfile(ON_CELLS,-1,m)
2006         arr_r.setName(fieldCell1.getArray().getName())
2007         self.assertTrue(arr_r.isEqual(fieldCell1.getArray(),1e-12))
2008         pfl1_r.setName(pfl1.getName())
2009         self.assertTrue(pfl1_r.isEqual(pfl1))
2010         pass
2011
2012     def testMEDFileUMeshZipCoords1(self):
2013         m=MEDFileUMesh()
2014         coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2015         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])
2016         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2017         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2018         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2019         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2020         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2021         numCoo=DataArrayInt(10) ; numCoo.iota(3) ; m.setRenumFieldArr(1,numCoo)
2022         famCoo=DataArrayInt(10) ; famCoo.iota(4) ; m.setFamilyFieldArr(1,famCoo)
2023         da=DataArrayInt([20,30,40]) ; m.setRenumFieldArr(0,da) ; da=DataArrayInt([200,300,400]) ; m.setFamilyFieldArr(0,da)
2024         da=DataArrayInt([50,60]) ; m.setRenumFieldArr(-1,da) ; da=DataArrayInt([500,600]) ; m.setFamilyFieldArr(-1,da)
2025         da=DataArrayInt([70,80,90]) ; m.setRenumFieldArr(-2,da) ; da=DataArrayInt([700,800,900]) ; m.setFamilyFieldArr(-2,da)
2026         o2n=m.zipCoords()
2027         self.assertTrue(o2n.isEqual(DataArrayInt([-1,0,1,2,3,-1,4,5,6,-1])))
2028         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt([4,5,6,7,9,10,11])))
2029         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([5,6,7,8,10,11,12])))
2030         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivity().isEqual(DataArrayInt([3,0,1,2,4,1,3,2,3,5,0,4,4,4,1])))
2031         self.assertTrue(m.getMeshAtLevel(0).getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,9,15])))
2032         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivity().isEqual(DataArrayInt([1,0,4,1,5,2])))
2033         self.assertTrue(m.getMeshAtLevel(-1).getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6])))
2034         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivity().isEqual(DataArrayInt([0,1,0,4,0,6])))
2035         self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
2036         pass
2037
2038     def testMEDUMeshAddNodeGroup1(self):
2039         fname="Pyfile53.med"
2040         m=MEDFileUMesh()
2041         coo=DataArrayDouble(39) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2042         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])
2043         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2044         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2045         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2046         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2047         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2048         #
2049         mm=m.deepCopy()
2050         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(1,famCoo)
2051         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(0,da0)
2052         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2053         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2054         mm.setFamilyId("MyFam",2)
2055         mm.setFamilyId("MyOtherFam",3)
2056         mm.setFamilyId("MyOther-1",-1)
2057         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2058         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2059         #
2060         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2061         mm.addNodeGroup(daTest)
2062         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2063         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2064         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2065             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2066             pass
2067         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2068         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2069         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2070         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2071         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2072             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2073             pass
2074         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2075         da=DataArrayInt([3,12]) ; da.setName("grp0")
2076         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2077         da.setValues([1])
2078         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2079         mm.write(fname,2)
2080         mm=MEDFileMesh.New(fname)
2081         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2082         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2083         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2084             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2085             pass
2086         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2087         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2088         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2089         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2090         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2091             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2092             pass
2093         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2094         da=DataArrayInt([3,12]) ; da.setName("grp0")
2095         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2096         da.setValues([1])
2097         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2098         pass
2099
2100     def testMEDUMeshAddGroup1(self):
2101         fname="Pyfile54.med"
2102         m=MEDFileUMesh()
2103         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2104         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2105         for i in range(7):
2106             m0.insertNextCell(NORM_TRI3,[1,2,1])
2107             pass
2108         for i in range(4):
2109             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2110             pass
2111         for i in range(2):
2112             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2113             pass
2114         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2115         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2116         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2117         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2118         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2119         #
2120         mm=m.deepCopy()
2121         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2122         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2123         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2124         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2125         mm.setFamilyId("MyFam",2)
2126         mm.setFamilyId("MyOtherFam",3)
2127         mm.setFamilyId("MyOther-1",-1)
2128         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2129         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2130         #
2131         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2132         mm.addGroup(0,daTest)
2133         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2134         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2135         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2136             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2137             pass
2138         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2139         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2140         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2141         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2142         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2143             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2144             pass
2145         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2146         da=DataArrayInt([3,12]) ; da.setName("grp0")
2147         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2148         da.setValues([1])
2149         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2150         mm.write(fname,2)
2151         mm=MEDFileMesh.New(fname)
2152         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2153         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2154         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2155             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2156             pass
2157         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2158         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2159         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2160         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2161         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2162             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2163             pass
2164         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2165         da=DataArrayInt([3,12]) ; da.setName("grp0")
2166         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2167         da.setValues([1])
2168         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2169         pass
2170
2171     def testHeapMem1(self):
2172         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2173         a.alloc(0,1)
2174         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2175         #
2176         m=MEDCouplingCMesh()
2177         arr=DataArrayDouble(10,1) ; arr.iota(0)
2178         m.setCoords(arr,arr)
2179         m=m.buildUnstructured()
2180         m.setName("mm")
2181         f=m.getMeasureField(False)
2182         self.assertIn(m.getHeapMemorySize(), list(range(3552 - 100, 3552 + 100 + 4 * strMulFac)))
2183         self.assertIn(f.getHeapMemorySize(), list(range(4215 - 100, 4215 + 100 + 8 * strMulFac)))
2184         #
2185         mm=MEDFileUMesh()
2186         mm.setMeshAtLevel(0,m)
2187         self.assertIn(mm.getHeapMemorySize(), list(range(3889 - 100, 4225 + 100 + 10 * strMulFac)))
2188         ff=MEDFileField1TS()
2189         ff.setFieldNoProfileSBT(f)
2190         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2191         #
2192         fff=MEDFileFieldMultiTS()
2193         fff.appendFieldNoProfileSBT(f)
2194         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2195         f.setTime(1.,0,-1)
2196         fff.appendFieldNoProfileSBT(f)
2197         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2198         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2199         f2=f[:50]
2200         f2.setTime(2.,1,-1)
2201         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2202         fff.appendFieldProfile(f2,mm,0,pfl)
2203         self.assertIn(fff.getHeapMemorySize(), list(range(2348 - 130, 2608 + 100 + (10 + 2) * strMulFac)))
2204         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(204 - 10, 204 + 10 + 2 * strMulFac)))
2205         self.assertIn(fff[1, -1].getHeapMemorySize(), list(range(738 - 50, 838 + 30 + 4 * strMulFac)))
2206         pass
2207
2208     def testCurveLinearMesh1(self):
2209         fname="Pyfile55.med"
2210         mesh=MEDCouplingCurveLinearMesh();
2211         mesh.setTime(2.3,4,5);
2212         mesh.setTimeUnit("us");
2213         mesh.setName("Example of Cuve linear mesh");
2214         mesh.setDescription("buildCLMesh");
2215         a1=DataArrayDouble(3*20,1);
2216         a1.iota(7.) ; a1.rearrange(3);
2217         mesh.setCoords(a1);
2218         mesh.setNodeGridStructure([4,5]);
2219         mesh.checkConsistencyLight();
2220         #
2221         m=MEDFileCurveLinearMesh()
2222         m.setMesh(mesh)
2223         d=DataArrayInt(20) ; d.iota(4)
2224         m.setFamilyFieldArr(1,d)
2225         d3=DataArrayInt(20) ; d3.iota(400)
2226         m.setRenumFieldArr(1,d3)
2227         d2=DataArrayInt(12) ; d2.iota(40)
2228         m.setFamilyFieldArr(0,d2)
2229         d4=DataArrayInt(21) ; d4.iota(4000)
2230         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2231         d4.popBackSilent()
2232         m.setRenumFieldArr(1,d4)
2233         m.write(fname,2)
2234         #
2235         m1=MEDFileCurveLinearMesh(fname)
2236         mm=m1.getMesh()
2237         self.assertTrue(mm.isEqual(mesh,1e-12))
2238         self.assertEqual(mm.getSpaceDimension(),3)
2239         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2240         #
2241         m1=MEDFileMesh.New(fname)
2242         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2243         self.assertTrue(isinstance(m1.getUnivName(),str))
2244         self.assertTrue(len(m1.getUnivName())!=0)
2245         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2246         pass
2247
2248     def testParameters1(self):
2249         fname="Pyfile56.med"
2250         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2251         mm=MEDFileCMesh() ; mm.setMesh(m)
2252         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2253         data=MEDFileData()
2254         p=MEDFileParameters()
2255         data.setParams(p) ; data.setMeshes(ms)
2256         pts=MEDFileParameterMultiTS()
2257         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2258         pts.appendValue(1,2,3.4,567.89)
2259         pts.appendValue(2,3,5.6,999.123)
2260         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2261         p.pushParam(pts) ; p.pushParam(pts2)
2262         data.write(fname,2)
2263         p2=MEDFileParameters(fname)
2264         self.assertTrue(p.isEqual(p2,1e-14)[0])
2265         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2266         p3=p.deepCopy()
2267         pts4=pts2.deepCopy()
2268         pts3=pts2.deepCopy()
2269         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2270         pts2.eraseTimeStepIds([0])
2271         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2272         del pts3[[3.4]]
2273         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2274         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2275         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2276         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2277         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2278         p=p3
2279         self.assertTrue(p.isEqual(p2,1e-14)[0])
2280         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2281         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2282         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2283         self.assertEqual(p.getParamsNames(),('A','B'))
2284         ptsr=MEDFileParameterMultiTS(fname,"B")
2285         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2286         ptsr=MEDFileParameterMultiTS(fname)
2287         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2288         p1tsr=MEDFileParameterDouble1TS(fname)
2289         self.assertEqual(p1tsr.getName(),"A")
2290         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2291         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2292         self.assertEqual(p1tsr.getName(),"B")
2293         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2294         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2295         self.assertEqual(p1tsr.getName(),"B")
2296         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2297         data2=MEDFileData(fname)
2298         self.assertEqual(2,data2.getNumberOfParams())
2299         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2300         pass
2301
2302     def testNamesOnCellAndNodesInMeshes1(self):
2303         fname="Pyfile58.med"
2304         fname2="Pyfile59.med"
2305         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2306         m1=m.buildDescendingConnectivity()[0]
2307         m1.sortCellsInMEDFileFrmt()
2308         #
2309         mm=MEDFileUMesh()
2310         mm.setMeshAtLevel(0,m)
2311         mm.setMeshAtLevel(-1,m1)
2312         namesCellL0=DataArrayAsciiChar(6,16)
2313         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2314         mm.setNameFieldAtLevel(0,namesCellL0)
2315         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2316         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2317         mm.setNameFieldAtLevel(-1,namesCellL1)
2318         namesNodes=namesCellL1.subArray(4,16)
2319         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2320         mm.setNameFieldAtLevel(1,namesNodes)
2321         mm.write(fname,2)
2322         #
2323         mmr=MEDFileMesh.New(fname)
2324         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2325         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2326         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2327         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2328         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2329         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2330         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2331         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2332         mmCpy=mm.deepCopy()
2333         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2334         # remove names on nodes
2335         mmCpy.setNameFieldAtLevel(1,None)
2336         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2337         mm.setNameFieldAtLevel(1,None)
2338         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2339         mm.setNameFieldAtLevel(-1,None)
2340         mm.write(fname,2)
2341         mmr=MEDFileMesh.New(fname)
2342         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2343         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2344         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2345         #
2346         c=MEDCouplingCMesh()
2347         arr=DataArrayDouble([0.,1.1,2.3])
2348         c.setCoords(arr,arr)
2349         c.setName("cmesh")
2350         cc=MEDFileCMesh()
2351         cc.setMesh(c)
2352         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2353         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2354         cc.write(fname2,2)
2355         ccr=MEDFileMesh.New(fname2)
2356         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2357         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2358         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2359         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2360         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2361         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2362         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2363         ccCpy=cc.deepCopy()
2364         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2365         pass
2366
2367     def testToExportInExamples1(self):
2368         m=MEDCouplingCMesh()
2369         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2370         m.setCoords(arr,arr)
2371         m=m.buildUnstructured() ; m.setName("mesh")
2372         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2373         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2374         m2=m.computeSkin()
2375         mm=MEDFileUMesh()
2376         mm.setMeshAtLevel(0,m)
2377         mm.setMeshAtLevel(-1,m2)
2378         mm.setGroupsAtLevel(0,[grp1,grp2])
2379         mm.write("example.med",2)
2380         #
2381         m0=mm.getMeshAtLevel(0)
2382         m1=mm.getMeshAtLevel(-1)
2383         grp1=mm.getGroupArr(0,"grp1")
2384         grp2=mm.getGroupArr(0,"grp2")
2385         grps=[grp1,grp2]
2386         whichGrp=DataArrayInt(m0.getNumberOfCells())
2387         whichGrp.fillWithValue(-1)
2388         for grpId,grp in enumerate(grps):
2389             whichGrp[grp]=grpId
2390             pass
2391         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2392         e,f=a.areCellsIncludedIn(m1,2)
2393         self.assertTrue(e)
2394         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2395         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2396         c2.transformWithIndArr(whichGrp)
2397         splitOfM1=len(grps)*[None]
2398         for grpId,grp in enumerate(grps):
2399             tmp=c2.findIdsEqual(grpId)
2400             splitOfM1[grpId]=tmp
2401             pass
2402         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2403         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2404         pass
2405
2406     def testBugCorrection1(self):
2407         fs=MEDFileFields()
2408         fs.resize(3)
2409         self.assertEqual(fs[0],None)
2410         self.assertEqual(3,len(fs))
2411         pass
2412
2413     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2414         f1Name="Pyfile60.med"
2415         f2Name="Pyfile61.med"
2416         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2417         d1.write(f1Name,2)
2418         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2419         d2.write(f2Name,2)
2420         # reading and compare
2421         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2422         for mn in d1.getMeshes().getMeshesNames():
2423             m1=d1.getMeshes()[mn]
2424             m2=d2.getMeshes()[mn]
2425             for lev in m1.getNonEmptyLevels():
2426                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2427                 for grpName in grpsNames:
2428                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2429                     pass
2430                 pass
2431             pass
2432         for fieldn in d1.getFields().getFieldsNames():
2433             f1=d1.getFields()[fieldn]
2434             f2=d2.getFields()[fieldn]
2435             for it,order,tim in f1.getTimeSteps():
2436                 f1t=f1[it,order]
2437                 f2t=f2[it,order]
2438                 if len(f1t.getPflsReallyUsed())!=0:
2439                     # profile case
2440                     for lev in f1t.getNonEmptyLevels()[1]:
2441                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2442                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2443                         self.assertTrue(pfl1.isEqual(pfl2))
2444                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2445                         pass
2446                     pass
2447                 else:
2448                     # no profile case
2449                     for lev in f1t.getNonEmptyLevels()[1]:
2450                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2451                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2452                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2453                         pass
2454                     pass
2455                 pass
2456             pass
2457         pass
2458
2459     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2460         m=MEDCouplingCMesh()
2461         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2462         m.setCoords(arr,arr,arr)
2463         m=m.buildUnstructured()
2464         m2=m.buildDescendingConnectivity()[0]
2465         m.setName("mesh")
2466         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2467         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2468         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2469         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2470         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2471         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2472         mm=MEDFileUMesh()
2473         mm.setMeshAtLevel(0,m)
2474         mm.setGroupsAtLevel(0,[g1,g2])
2475         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2476         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2477         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2478         mm.normalizeFamIdsMEDFile()
2479         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2480         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2481         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2482         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2483         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2484         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2485         for g in mm.getGroupsOnSpecifiedLev(0):
2486             for f in mm.getFamiliesIdsOnGroup(g):
2487                 self.assertTrue(f<0)
2488                 pass
2489             pass
2490         #
2491         mm=MEDFileUMesh()
2492         mm.setMeshAtLevel(0,m)
2493         mm.setMeshAtLevel(-1,m2)
2494         mm.setGroupsAtLevel(0,[g1,g2])
2495         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2496         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2497         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2498         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2499         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2500         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2501         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2502         mm.normalizeFamIdsMEDFile()
2503         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2504         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2505         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2506         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2507         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2508         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2509         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2510         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2511         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2512         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2513         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2514         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2515         for lev in [0,-1]:
2516             for g in mm.getGroupsOnSpecifiedLev(lev):
2517                 for f in mm.getFamiliesIdsOnGroup(g):
2518                     self.assertTrue(f<0)
2519                     pass
2520                 pass
2521             pass
2522          #
2523         mm=MEDFileUMesh()
2524         mm.setMeshAtLevel(0,m)
2525         mm.setMeshAtLevel(-1,m2)
2526         mm.setGroupsAtLevel(0,[g1,g2])
2527         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2528         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2529         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2530         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2531         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2532         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2533         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2534         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2535         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2536         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2537         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2538         mm.normalizeFamIdsMEDFile()
2539         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2540         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2541         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2542         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2543         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2544         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2545         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2546         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2547         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2548         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2549         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2550         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2551         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2552         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2553         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2554         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2555         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2556         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2557         for lev in [0,-1]:
2558             for g in mm.getGroupsOnSpecifiedLev(lev):
2559                 for f in mm.getFamiliesIdsOnGroup(g):
2560                     self.assertTrue(f<0)
2561                     pass
2562                 pass
2563             pass
2564         for g in mm.getGroupsOnSpecifiedLev(1):
2565             for f in mm.getFamiliesIdsOnGroup(g):
2566                 self.assertTrue(f>0)
2567                 pass
2568             pass
2569         pass
2570     
2571     def testNonRegressionMantis22212ChangeGrpName(self):
2572         fileName="Pyfile62.med"
2573         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2574         m=MEDFileUMesh.New()
2575         m.setCoords(m2.getCoords())
2576         m.setMeshAtLevel(0,m2)
2577         m.setMeshAtLevel(-1,m1)
2578         m.setMeshAtLevel(-2,m0)
2579         m.setFamilyFieldArr(0,f2)
2580         m.setFamilyFieldArr(-1,f1)
2581         m.setFamilyFieldArr(-2,f0)
2582         m.setFamilyFieldArr(1,p)
2583         nbOfFams=len(fns)
2584         for i in range(nbOfFams):
2585             m.addFamily(fns[i],fids[i])
2586             pass
2587         nbOfGrps=len(grpns)
2588         for i in range(nbOfGrps):
2589             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2590             pass
2591         m.setName(m2.getName())
2592         m.setDescription(m2.getDescription())
2593         m.write(fileName,2)
2594         #
2595         mm0=MEDFileMesh.New(fileName)
2596         mm1=MEDFileMesh.New(fileName)
2597         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2598         for name in groupNamesIni:
2599             mm1.changeGroupName(name,name+'N')
2600             pass
2601         mm1.write(fileName,2)
2602         del mm1
2603         #
2604         mm2=MEDFileMesh.New(fileName)
2605         for name in groupNamesIni:
2606             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2607                 arr0=mm0.getGroupArr(lev,name)
2608                 arr2=mm2.getGroupArr(lev,name+'N')
2609                 arr0.setName(name+'N')
2610                 self.assertTrue(arr0.isEqual(arr2))
2611                 pass
2612             pass
2613         pass
2614
2615     def testInt32InMEDFileFieldStar1(self):
2616         fname="Pyfile63.med"
2617         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2618         f1=f1.convertToIntField()
2619         m1=f1.getMesh()
2620         mm1=MEDFileUMesh.New()
2621         mm1.setCoords(m1.getCoords())
2622         mm1.setMeshAtLevel(0,m1)
2623         mm1.setName(m1.getName())
2624         mm1.write(fname,2)
2625         ff1=MEDFileIntField1TS()
2626         ff1.setFieldNoProfileSBT(f1)
2627         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2628         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2629         self.assertTrue(a.isEqual(f1,1e-12,0))
2630         ff1.write(fname,0)
2631         ff2=MEDFileAnyTypeField1TS.New(fname)
2632         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2633         self.assertEqual(ff2.getTime(),[0,1,2.0])
2634         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2635         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2636         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2637         self.assertTrue(a.isEqual(f1,1e-12,0))
2638         ff2.setTime(1,2,3.)
2639         c=ff2.getUndergroundDataArray() ; c*=2
2640         ff2.write(fname,0) # 2 time steps in 
2641         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2642         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2643         self.assertEqual(len(ffs1),2)
2644         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2645         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2646         self.assertTrue(a.isEqual(f1,1e-12,0))
2647         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2648         self.assertTrue(a.isEqual(f1,1e-12,0))
2649         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2650         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2651         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2652         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2653         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2654         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2655         for it in ffs1:
2656             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2657             bc+=a.getArray()
2658             pass
2659         self.assertTrue(bc.isEqual(3*f1.getArray()))
2660         nf1=MEDCouplingFieldInt(ON_NODES)
2661         nf1.setTime(9.,10,-1)
2662         nf1.setMesh(f1.getMesh())
2663         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2664         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2665         nff1=MEDFileIntField1TS.New()
2666         nff1.setFieldNoProfileSBT(nf1)
2667         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2668         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2669         nff1.write(fname,0)
2670         #
2671         nf2=MEDCouplingFieldInt(ON_NODES)
2672         nf2.setTime(19.,20,-11)
2673         nf2.setMesh(f1.getMesh())
2674         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2675         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2676         nff2=MEDFileIntField1TS.New()
2677         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2678         nff2.setFieldProfile(nf2,mm1,0,npfl)
2679         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2680         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2681         self.assertTrue(b.isEqual(npfl))
2682         self.assertTrue(a.isEqual(narr2))
2683         nff2.write(fname,0)
2684         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2685         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2686         self.assertTrue(b.isEqual(npfl))
2687         self.assertTrue(a.isEqual(narr2))
2688         #
2689         nf3=MEDCouplingFieldDouble(ON_NODES)
2690         nf3.setName("VectorFieldOnNodesDouble")
2691         nf3.setTime(29.,30,-21)
2692         nf3.setMesh(f1.getMesh())
2693         nf3.setArray(f1.getMesh().getCoords())
2694         nff3=MEDFileField1TS.New()
2695         nff3.setFieldNoProfileSBT(nf3)
2696         nff3.write(fname,0)
2697         fs=MEDFileFields(fname)
2698         self.assertEqual(len(fs),4)
2699         ffs=[it for it in fs]
2700         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2701         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2702         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2703         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2704         #
2705         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2706         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2707         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2708         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2709         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2710         #
2711         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2712         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2713         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2714         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2715         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2716         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2717         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2718         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2719         #
2720         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2721         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2722         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2723         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2724         pass
2725
2726     def testMEDFileFields1(self):
2727         fname="Pyfile64.med"
2728         f1=MEDCouplingFieldDouble(ON_NODES)
2729         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2730         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2731         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2732         f1.setMesh(m)
2733         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2734         f1.setArray(arr)
2735         f1.setName("Field1")
2736         ff1=MEDFileField1TS.New()
2737         ff1.setFieldNoProfileSBT(f1)
2738         self.assertEqual(ff1.getDtUnit(),"us")
2739         ff1.write(fname,0)
2740         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2741         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2742         #
2743         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2744         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2745         ff1s.setName("Field2")
2746         ff1s.write(fname,0)
2747         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2748         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2749         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2750         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2751         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2752         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2753         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2754         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2755         pass
2756
2757     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2758     def testMEDFileFields2(self):
2759         fname="Pyfile65.med"
2760         # to check that all is initialize 
2761         MEDFileField1TS().__str__()
2762         MEDFileFieldMultiTS().__str__()
2763         # building a mesh containing 4 tri3 + 5 quad4
2764         tri=MEDCouplingUMesh("tri",2)
2765         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2766         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2767         tris = [tri.deepCopy() for i in range(4)]
2768         for i,elt in enumerate(tris): elt.translate([i,0])
2769         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2770         quad=MEDCouplingUMesh("quad",2)
2771         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2772         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2773         quads = [quad.deepCopy() for i in range(5)]
2774         for i,elt in enumerate(quads): elt.translate([5+i,0])
2775         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2776         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2777         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2778         #
2779         fmts0_0=MEDFileFieldMultiTS()
2780         fmts0_1=MEDFileFieldMultiTS()
2781         # time steps
2782         for i in range(10):
2783             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2784             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2785             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2786             f.setTime(float(i+1)+0.1,i+1,-i-1)
2787             fmts0_0.appendFieldNoProfileSBT(f)
2788             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2789             self.assertEqual(fmts0_1.getName(),name1)
2790             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2791             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2792             if i>1:
2793                 # components names have been modified to generate errors
2794                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2795                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2796                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2797                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2798                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2799                 pass
2800             # add a mismatch of nb of compos
2801             pass
2802         fmts0_2=fmts0_0.deepCopy()
2803         fmts0_3=fmts0_0.deepCopy()
2804         fmts0_4=fmts0_0.deepCopy()
2805         fmts0_5=fmts0_0.shallowCpy()
2806         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)
2807         del fmts0_2[::2]
2808         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2809         del fmts0_3[[1.1,(6,-6),9]]
2810         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2811         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2812         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2813         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2814         fmts0_7=fmts0_4[::-3]
2815         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2816         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2817         #
2818         fs0=MEDFileFields()
2819         fs0.pushField(fmts0_0)
2820         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2821         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2822         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2823         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2824         fs0.write(fname,2)
2825         fs0=MEDFileFields(fname)
2826         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2827         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2828         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2829         del fs1[["2ndField",3]]
2830         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2831         fs2=fs0[[0,"4thField"]]
2832         self.assertTrue(isinstance(fs2,MEDFileFields))
2833         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2834         #
2835         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2836         pass
2837
2838     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2839     def testMEDFileFields3(self):
2840         fname="Pyfile66.med"
2841         # building a mesh containing 4 tri3 + 5 quad4
2842         tri=MEDCouplingUMesh("tri",2)
2843         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2844         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2845         tris = [tri.deepCopy() for i in range(4)]
2846         for i,elt in enumerate(tris): elt.translate([i,0])
2847         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2848         quad=MEDCouplingUMesh("quad",2)
2849         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2850         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2851         quads = [quad.deepCopy() for i in range(5)]
2852         for i,elt in enumerate(quads): elt.translate([5+i,0])
2853         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2854         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2855         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2856         #
2857         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2858         #
2859         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2860         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2861         fmts0_0=MEDFileFieldMultiTS()
2862         fmts0_1=MEDFileFieldMultiTS()
2863         # time steps
2864         for i in range(10):
2865             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2866             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2867             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2868             f.setTime(float(i+1)+0.1,i+1,-i-1)
2869             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2870             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2871             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2872             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2873             pass
2874         #
2875         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2876         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2877         fmts0_0.zipPflsNames()
2878         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2879         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2880         fmts0_2=fmts0_0.deepCopy()
2881         fmts0_3=fmts0_0.deepCopy()
2882         fmts0_4=fmts0_0.deepCopy()
2883         fs0=MEDFileFields()
2884         fs0.pushField(fmts0_0)
2885         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2886         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2887         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2888         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2889         #
2890         fmts0_5=MEDFileFieldMultiTS()
2891         for i in range(7):
2892             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2893             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2894             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2895             f.setTime(float(i+1)+0.1,i+1,-i-1)
2896             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2897             pass
2898         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2899         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2900         fs0.checkGlobsCoherency()
2901         fs0.write(fname,0)
2902         pass
2903     
2904     def testSplitComponents1(self):
2905         fname="Pyfile67.med"
2906         # building a mesh containing 4 tri3 + 5 quad4
2907         tri=MEDCouplingUMesh("tri",2)
2908         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2909         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2910         tris = [tri.deepCopy() for i in range(4)]
2911         for i,elt in enumerate(tris): elt.translate([i,0])
2912         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2913         quad=MEDCouplingUMesh("quad",2)
2914         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2915         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2916         quads = [quad.deepCopy() for i in range(5)]
2917         for i,elt in enumerate(quads): elt.translate([5+i,0])
2918         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2919         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2920         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2921         #
2922         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2923         #
2924         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2925         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2926         fs=MEDFileFields()
2927         fmts0_1=MEDFileFieldMultiTS()
2928         # time steps
2929         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2930         for i in range(10):
2931             name1="1stField"
2932             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2933             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2934             f.setTime(float(i+1)+0.1,i+1,-i-1)
2935             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2936             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2937             pass
2938         fs.pushField(fmts0_1)
2939         self.assertEqual(1,len(fs))
2940         l=fmts0_1.splitComponents()
2941         self.assertEqual(3,len(l))
2942         for elt in l: self.assertEqual(10,len(elt))
2943         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2944         for elt in l:
2945             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2946             pass
2947         fs.pushFields(l)
2948         self.assertEqual(4,len(fs))
2949         for elt in fs: self.assertEqual(10,len(elt))
2950         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2951         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2952         #
2953         fs.write(fname,0) ; del fs
2954         #
2955         fs1=MEDFileFields(fname)
2956         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2957         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2958         self.assertEqual(4,len(fs1))
2959         for i in range(10):
2960             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2961                 f1ts=fs1[fieldName][i]
2962                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2963                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2964                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2965                 pass
2966             f1ts=fs1["1stField"][i]
2967             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2968             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2969             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2970             pass
2971         pass
2972
2973     def testMEDFileFieldConvertTo1(self):
2974         fname="Pyfile68.med"
2975         # building a mesh containing 4 tri3 + 5 quad4
2976         tri=MEDCouplingUMesh("tri",2)
2977         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2978         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2979         tris = [tri.deepCopy() for i in range(4)]
2980         for i,elt in enumerate(tris): elt.translate([i,0])
2981         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2982         quad=MEDCouplingUMesh("quad",2)
2983         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2984         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2985         quads = [quad.deepCopy() for i in range(5)]
2986         for i,elt in enumerate(quads): elt.translate([5+i,0])
2987         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2988         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2989         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2990         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
2991         #
2992         ff0=MEDFileField1TS()
2993         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")
2994         f0.checkConsistencyLight()
2995         ff0.setFieldNoProfileSBT(f0)
2996         #
2997         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
2998         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
2999         #
3000         ff0i=ff0.convertToInt()
3001         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3002         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3003         #
3004         ff1=ff0i.convertToDouble()
3005         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3006         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3007         # With profiles
3008         del arr,f0,ff0,ff1,ff0i,fspExp
3009         ff0=MEDFileField1TS()
3010         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")
3011         f0.checkConsistencyLight()
3012         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3013         ff0.setFieldProfile(f0,mm,0,pfl)
3014         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3015         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3016         #
3017         ff0i=ff0.convertToInt()
3018         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3019         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3020         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3021         #
3022         ff1=ff0i.convertToDouble()
3023         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3024         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3025         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3026         ## MultiTimeSteps
3027         ff0=MEDFileFieldMultiTS()
3028         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)
3029         f0.checkConsistencyLight()
3030         ff0.appendFieldProfile(f0,mm,0,pfl)
3031         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)
3032         f0.checkConsistencyLight()
3033         ff0.appendFieldProfile(f0,mm,0,pfl)
3034         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)
3035         f0.checkConsistencyLight()
3036         ff0.appendFieldProfile(f0,mm,0,pfl)
3037         ff1=ff0.convertToInt()
3038         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3039         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3040         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3041             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3042             arr=ff1.getUndergroundDataArray(dt,it)
3043             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3044             pass
3045         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3046         #
3047         mm.write(fname,2)
3048         ff1.write(fname,0)
3049         #
3050         ff1=ff1.convertToDouble()
3051         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3052         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3053         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3054             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3055             arr=ff1.getUndergroundDataArray(dt,it)
3056             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3057             pass
3058         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3059         #
3060         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3061         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3062         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3063         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3064             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3065             arr=ff1.getUndergroundDataArray(dt,it)
3066             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3067             pass
3068         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3069         pass
3070
3071     def testMEDFileFieldPartialLoading(self):
3072         fname="Pyfile69.med"
3073         #
3074         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3075         a.alloc(0,1)
3076         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3077         # building a mesh containing 30 tri3 + 40 quad4
3078         tri=MEDCouplingUMesh("tri",2)
3079         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3080         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3081         tris = [tri.deepCopy() for i in range(30)]
3082         for i,elt in enumerate(tris): elt.translate([i,0])
3083         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3084         quad=MEDCouplingUMesh("quad",2)
3085         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3086         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3087         quads = [quad.deepCopy() for i in range(40)]
3088         for i,elt in enumerate(quads): elt.translate([40+i,0])
3089         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3090         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3091         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3092         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3093         #
3094         ff0=MEDFileField1TS()
3095         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")
3096         f0.checkConsistencyLight()
3097         ff0.setFieldNoProfileSBT(f0)
3098         ff0.write(fname,0)
3099         #
3100         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3101         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3102         # With profiles
3103         ff0=MEDFileField1TS()
3104         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")
3105         f0.checkConsistencyLight()
3106         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3107         ff0.setFieldProfile(f0,mm,0,pfl)
3108         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3109         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3110         ff0.write(fname,0)
3111         #
3112         ff0=MEDFileField1TS(fname,False)
3113         self.assertEqual(ff0.getName(),"FieldCell")
3114         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3115         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3116         heap_memory_ref=ff0.getHeapMemorySize()
3117         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3118         ff0.loadArrays() ##
3119         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3120         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3121         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3122         #
3123         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3124         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3125         heap_memory_ref=ff0.getHeapMemorySize()
3126         self.assertIn(heap_memory_ref, list(range(350, 600 + 6 * strMulFac)))
3127         ff0.loadArrays() ##
3128         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3129         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3130         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3131         ff0.loadArrays() ##
3132         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3133         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3134         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3135         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3136         ff0.loadArrays() ##
3137         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3138         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3139         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3140         ff0.loadArraysIfNecessary() ##
3141         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3142         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3143         heap_memory_ref=ff0.getHeapMemorySize()
3144         self.assertIn(heap_memory_ref, list(range(1100, 1400 + 2 * strMulFac)))
3145         ff0.unloadArrays()
3146         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3147         self.assertEqual(hmd,-800) # -50*8*2
3148         ff0.loadArrays() ##
3149         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3150         #
3151         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3152         heap_memory_ref=ff0.getHeapMemorySize()
3153         self.assertIn(heap_memory_ref, list(range(299, 620 + 6 * strMulFac)))
3154         ff0.loadArrays() ##
3155         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3156         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3157         #
3158         fieldName="FieldCellMultiTS"
3159         ff0=MEDFileFieldMultiTS()
3160         for t in range(20):
3161             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)
3162             f0.setTime(float(t)+0.1,t,100+t)
3163             f0.checkConsistencyLight()
3164             ff0.appendFieldNoProfileSBT(f0)
3165             pass
3166         ff0.write(fname,0)
3167         #
3168         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3169         heap_memory_ref=ff0.getHeapMemorySize()
3170         self.assertIn(heap_memory_ref, list(range(5536, 9212 + (80 + 26 + 1) * strMulFac)))
3171         ff0.loadArrays()
3172         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3173         del ff0
3174         #
3175         ffs=MEDFileFields(fname,False)
3176         heap_memory_ref=ffs.getHeapMemorySize()
3177         self.assertIn(heap_memory_ref, list(range(5335, 10031 + (80 + 50 + len(ffs)) * strMulFac)))
3178         ffs.loadArrays()
3179         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3180         pass
3181
3182     def testMEDFileMeshReadSelector1(self):
3183         mrs=MEDFileMeshReadSelector()
3184         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3185         mrs.__str__() ; mrs.__repr__()
3186         #
3187         mrs=MEDFileMeshReadSelector(0)
3188         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())
3189         mrs=MEDFileMeshReadSelector(1)
3190         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3191         mrs=MEDFileMeshReadSelector(2)
3192         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3193         mrs=MEDFileMeshReadSelector(3)
3194         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3195         mrs=MEDFileMeshReadSelector(4)
3196         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3197         mrs=MEDFileMeshReadSelector(5)
3198         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3199         mrs=MEDFileMeshReadSelector(6)
3200         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3201         mrs=MEDFileMeshReadSelector(7)
3202         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3203         mrs=MEDFileMeshReadSelector(8)
3204         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3205         mrs=MEDFileMeshReadSelector(9)
3206         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3207         mrs=MEDFileMeshReadSelector(10)
3208         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3209         mrs=MEDFileMeshReadSelector(11)
3210         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3211         mrs=MEDFileMeshReadSelector(12)
3212         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3213         mrs=MEDFileMeshReadSelector(13)
3214         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3215         mrs=MEDFileMeshReadSelector(14)
3216         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3217         mrs=MEDFileMeshReadSelector(15)
3218         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3219         mrs=MEDFileMeshReadSelector(16)
3220         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3221         mrs=MEDFileMeshReadSelector(17)
3222         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3223         mrs=MEDFileMeshReadSelector(18)
3224         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3225         mrs=MEDFileMeshReadSelector(19)
3226         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3227         mrs=MEDFileMeshReadSelector(20)
3228         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3229         mrs=MEDFileMeshReadSelector(21)
3230         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3231         mrs=MEDFileMeshReadSelector(22)
3232         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3233         mrs=MEDFileMeshReadSelector(23)
3234         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3235         mrs=MEDFileMeshReadSelector(24)
3236         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3237         mrs=MEDFileMeshReadSelector(25)
3238         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3239         mrs=MEDFileMeshReadSelector(26)
3240         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3241         mrs=MEDFileMeshReadSelector(27)
3242         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3243         mrs=MEDFileMeshReadSelector(28)
3244         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3245         mrs=MEDFileMeshReadSelector(29)
3246         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3247         mrs=MEDFileMeshReadSelector(30)
3248         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3249         mrs=MEDFileMeshReadSelector(31)
3250         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3251         mrs=MEDFileMeshReadSelector(32)
3252         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3253         mrs=MEDFileMeshReadSelector(33)
3254         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3255         mrs=MEDFileMeshReadSelector(34)
3256         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3257         mrs=MEDFileMeshReadSelector(35)
3258         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3259         mrs=MEDFileMeshReadSelector(36)
3260         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3261         mrs=MEDFileMeshReadSelector(37)
3262         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3263         mrs=MEDFileMeshReadSelector(38)
3264         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3265         mrs=MEDFileMeshReadSelector(39)
3266         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3267         mrs=MEDFileMeshReadSelector(40)
3268         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3269         mrs=MEDFileMeshReadSelector(41)
3270         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3271         mrs=MEDFileMeshReadSelector(42)
3272         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3273         mrs=MEDFileMeshReadSelector(43)
3274         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3275         mrs=MEDFileMeshReadSelector(44)
3276         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3277         mrs=MEDFileMeshReadSelector(45)
3278         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3279         mrs=MEDFileMeshReadSelector(46)
3280         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3281         mrs=MEDFileMeshReadSelector(47)
3282         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3283         mrs=MEDFileMeshReadSelector(48)
3284         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3285         mrs=MEDFileMeshReadSelector(49)
3286         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3287         mrs=MEDFileMeshReadSelector(50)
3288         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3289         mrs=MEDFileMeshReadSelector(51)
3290         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3291         mrs=MEDFileMeshReadSelector(52)
3292         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3293         mrs=MEDFileMeshReadSelector(53)
3294         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3295         mrs=MEDFileMeshReadSelector(54)
3296         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3297         mrs=MEDFileMeshReadSelector(55)
3298         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3299         mrs=MEDFileMeshReadSelector(56)
3300         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3301         mrs=MEDFileMeshReadSelector(57)
3302         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3303         mrs=MEDFileMeshReadSelector(58)
3304         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3305         mrs=MEDFileMeshReadSelector(59)
3306         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3307         mrs=MEDFileMeshReadSelector(60)
3308         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3309         mrs=MEDFileMeshReadSelector(61)
3310         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3311         mrs=MEDFileMeshReadSelector(62)
3312         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3313         mrs=MEDFileMeshReadSelector(63)
3314         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3315         #
3316         mrs=MEDFileMeshReadSelector(63)
3317         mrs.setCellFamilyFieldReading(False)
3318         self.assertEqual(mrs.getCode(),62)
3319         mrs.setCellFamilyFieldReading(True)
3320         self.assertEqual(mrs.getCode(),63)
3321         mrs.setNodeFamilyFieldReading(False)
3322         self.assertEqual(mrs.getCode(),61)
3323         mrs.setNodeFamilyFieldReading(True)
3324         self.assertEqual(mrs.getCode(),63)
3325         mrs.setCellNameFieldReading(False)
3326         self.assertEqual(mrs.getCode(),59)
3327         mrs.setCellNameFieldReading(True)
3328         self.assertEqual(mrs.getCode(),63)
3329         mrs.setNodeNameFieldReading(False)
3330         self.assertEqual(mrs.getCode(),55)
3331         mrs.setNodeNameFieldReading(True)
3332         self.assertEqual(mrs.getCode(),63)
3333         mrs.setCellNumFieldReading(False)
3334         self.assertEqual(mrs.getCode(),47)
3335         mrs.setCellNumFieldReading(True)
3336         self.assertEqual(mrs.getCode(),63)
3337         mrs.setNodeNumFieldReading(False)
3338         self.assertEqual(mrs.getCode(),31)
3339         mrs.setNodeNumFieldReading(True)
3340         self.assertEqual(mrs.getCode(),63)
3341         pass
3342     
3343     def testPartialReadOfMeshes(self):
3344         fname="Pyfile70.med"
3345         # building a mesh containing 4 tri3 + 5 quad4
3346         tri=MEDCouplingUMesh("tri",2)
3347         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3348         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3349         tris = [tri.deepCopy() for i in range(4)]
3350         for i,elt in enumerate(tris): elt.translate([i,0])
3351         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3352         quad=MEDCouplingUMesh("quad",2)
3353         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3354         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3355         quads = [quad.deepCopy() for i in range(5)]
3356         for i,elt in enumerate(quads): elt.translate([5+i,0])
3357         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3358         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3359         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3360         m1=m.buildDescendingConnectivity()[0]
3361         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3362         #
3363         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3364         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3365         mm.setGroupsAtLevel(0,[grp0,grp1])
3366         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3367         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3368         mm.setGroupsAtLevel(-1,[grp2,grp3])
3369         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3370         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3371         mm.setGroupsAtLevel(1,[grp4,grp5])
3372         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3373         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3374         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3375         #
3376         mm.write(fname,2)
3377         ##
3378         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3379         b4_ref_heap_mem=mm.getHeapMemorySize()
3380         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3381         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3382         ref_heap_mem=mm.getHeapMemorySize()
3383         # check the gain of memory using 1GTUMesh instead of UMesh
3384         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
3385         #
3386         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3387         self.assertEqual(len(mm.getGroupsNames()),0)
3388         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3389         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3390         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3391         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3392         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3393         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3394         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3395         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3396         delta1=ref_heap_mem-mm.getHeapMemorySize()
3397         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3398         #
3399         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3400         self.assertEqual(len(mm.getGroupsNames()),6)
3401         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3402         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3403         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3404         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3405         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3406         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3407         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3408         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3409         delta2=ref_heap_mem-mm.getHeapMemorySize()
3410         self.assertTrue(delta2<delta1)
3411         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3412         #
3413         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3414         self.assertEqual(len(mm.getGroupsNames()),6)
3415         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3416         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3417         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3418         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3419         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3420         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3421         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3422         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3423         delta3=ref_heap_mem-mm.getHeapMemorySize()
3424         self.assertTrue(delta3<delta2)
3425         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3426         #
3427         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3428         self.assertEqual(len(mm.getGroupsNames()),6)
3429         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3430         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3431         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3432         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3433         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3434         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3435         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3436         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3437         delta4=ref_heap_mem-mm.getHeapMemorySize()
3438         self.assertTrue(delta4<delta3)
3439         self.assertTrue(delta4>=32*4*2)
3440         #
3441         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3442         self.assertEqual(len(mm.getGroupsNames()),6)
3443         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3444         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3445         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3446         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3447         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3448         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3449         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3450         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3451         delta5=ref_heap_mem-mm.getHeapMemorySize()
3452         self.assertTrue(delta5<delta4)
3453         self.assertEqual(delta5,0)
3454         pass
3455
3456     # this test checks that setFieldProfile perform a check of the array length
3457     # compared to the profile length. This test also checks that mesh attribute of field
3458     # is not used by setFieldProfile (because across this test mesh is equal to None)
3459     def testCheckCompatibilityPfl1(self):
3460         # building a mesh containing 4 tri3 + 5 quad4
3461         tri=MEDCouplingUMesh("tri",2)
3462         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3463         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3464         tris = [tri.deepCopy() for i in range(4)]
3465         for i,elt in enumerate(tris): elt.translate([i,0])
3466         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3467         quad=MEDCouplingUMesh("quad",2)
3468         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3469         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3470         quads = [quad.deepCopy() for i in range(5)]
3471         for i,elt in enumerate(quads): elt.translate([5+i,0])
3472         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3473         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3474         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3475         m1=m.buildDescendingConnectivity()[0]
3476         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3477         #
3478         f1ts=MEDFileField1TS()
3479         f=MEDCouplingFieldDouble(ON_NODES)
3480         vals=DataArrayDouble(7) ; vals.iota(1000)
3481         f.setArray(vals)
3482         f.setName("anonymous") # f has no mesh it is not a bug
3483         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3484         f1ts.setFieldProfile(f,mm,0,pfl)
3485         #
3486         f1ts=MEDFileField1TS()
3487         f=MEDCouplingFieldDouble(ON_NODES)
3488         vals=DataArrayDouble(8) ; vals.iota(1000)
3489         f.setArray(vals)
3490         f.setName("anonymous") # f has no mesh it is not a bug
3491         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3492         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3493         #
3494         f1ts=MEDFileField1TS()
3495         f=MEDCouplingFieldDouble(ON_CELLS)
3496         vals=DataArrayDouble(7) ; vals.iota(1000)
3497         f.setArray(vals)
3498         f.setName("anonymous") # f has no mesh it is not a bug
3499         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3500         f1ts.setFieldProfile(f,mm,0,pfl)
3501         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3502         #
3503         f1ts=MEDFileField1TS()
3504         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3505         vals=DataArrayDouble(27) ; vals.iota(1000)
3506         f.setArray(vals)
3507         f.setName("anonymous") # f has no mesh it is not a bug
3508         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3509         f.setMesh(m[pfl])
3510         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])
3511         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3512         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])
3513         f.setMesh(None)
3514         f1ts.setFieldProfile(f,mm,0,pfl)
3515         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3516         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3517         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3518         vals=DataArrayDouble(27) ; vals.iota(1000)
3519         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3520         #
3521         f1ts=MEDFileField1TS()
3522         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3523         vals=DataArrayDouble(25) ; vals.iota(1000)
3524         f.setArray(vals)
3525         f.setName("anonymous") # f has no mesh it is not a bug
3526         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3527         f1ts.setFieldProfile(f,mm,0,pfl)
3528         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3529         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3530         f.setArray(vals2)
3531         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3532         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3533         #
3534         f1ts=MEDFileField1TS()
3535         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3536         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3537         f.setArray(vals)
3538         f1ts.setFieldProfile(f,mm,0,pfl)
3539         pass
3540     
3541     def testWRMeshWithNoCells(self):
3542         fname="Pyfile71.med"
3543         a=DataArrayDouble(4) ; a.iota()
3544         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3545         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3546         m=MEDFileUMesh()
3547         m.setMeshAtLevel(0,m00)
3548         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3549         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3550         m.write(fname,2)
3551         del m,a,c,m0,m00
3552         #
3553         m=MEDFileMesh.New(fname)
3554         self.assertEqual((),m.getNonEmptyLevels())
3555         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))
3556         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3557         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3558         pass
3559
3560     def testWRQPolyg1(self):
3561         fname="Pyfile72.med"
3562         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3563         m.insertNextCell([0,2,1,3])
3564         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3565         #
3566         ms = [m.deepCopy() for i in range(4)]
3567         for i,elt in enumerate(ms):
3568             elt.translate([float(i)*1.5,0.])
3569             pass
3570         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3571         m0.convertAllToPoly()
3572         #
3573         ms = [m.deepCopy() for i in range(5)]
3574         for i,elt in enumerate(ms):
3575             elt.translate([float(i)*1.5,1.5])
3576             pass
3577         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3578         m1.convertAllToPoly()
3579         m1.convertLinearCellsToQuadratic()
3580         #
3581         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3582         ##
3583         mm=MEDFileUMesh()
3584         mm.setMeshAtLevel(0,m)
3585         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3586         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3587         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3588         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3589         ##
3590         mm.write(fname,2)
3591         del mm
3592         #
3593         mm_read=MEDFileUMesh(fname)
3594         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3595         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3596         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3597         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3598         ##
3599         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3600         f.setMesh(m)
3601         arr0=DataArrayDouble(9) ; arr0.iota()
3602         arr1=DataArrayDouble(9) ; arr1.iota(100)
3603         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3604         f.setArray(arr) ; f.checkConsistencyLight()
3605         f.setTime(5.6,1,2)
3606         ff=MEDFileField1TS()
3607         ff.setFieldNoProfileSBT(f)
3608         ff.write(fname,0)
3609         ##
3610         ff_read=MEDFileField1TS(fname)
3611         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3612         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3613         pass
3614
3615     def testLoadIfNecessaryOnFromScratchFields0(self):
3616         """
3617         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3618         """
3619         fname="Pyfile77.med"
3620         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3621         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3622         m.allocateCells()
3623         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3624         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3625         m.finishInsertingCells()
3626         #
3627         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3628         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3629         fs=MEDFileFields()
3630         arrs=4*[None]
3631         #
3632         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3633         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3634         f0.setTime(1.1,1,1)
3635         f0.setName("myELNOField")
3636         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3637         f0.setArray(arrs[0])
3638         ff0.appendFieldNoProfileSBT(f0)
3639         #
3640         f0.setTime(2.2,2,1)
3641         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3642         f0.setArray(arrs[1])
3643         ff0.appendFieldNoProfileSBT(f0)
3644         #
3645         f0.setTime(3.3,3,1)
3646         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3647         f0.setArray(arrs[2])
3648         ff0.appendFieldNoProfileSBT(f0)
3649         #
3650         f0.setTime(4.4,4,1)
3651         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3652         f0.setArray(arrs[3])
3653         ff0.appendFieldNoProfileSBT(f0)
3654         #
3655         for i,arr in enumerate(arrs):
3656             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3657             fs[0][i].loadArraysIfNecessary()
3658             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3659             pass
3660         fs.loadArraysIfNecessary()
3661         for i,arr in enumerate(arrs):
3662             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3663             pass
3664         fs[0].loadArraysIfNecessary()
3665         for i,arr in enumerate(arrs):
3666             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3667             pass
3668         pass
3669     
3670     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3671         """ 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.
3672         """
3673         fname="Pyfile78.med"
3674         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)
3675         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3676         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3677         m0.allocateCells()
3678         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
3679             m0.insertNextCell(NORM_TETRA4,elt)
3680             pass
3681         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
3682             m0.insertNextCell(NORM_PYRA5,elt)
3683             pass
3684         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
3685             m0.insertNextCell(NORM_PENTA6,elt)
3686             pass
3687         m0.checkConsistency()
3688         m1=MEDCouplingUMesh(); m1.setName("mesh")
3689         m1.setMeshDimension(2);
3690         m1.allocateCells(5);
3691         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3692         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3693         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3694         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3695         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3696         m1.setCoords(coords);
3697         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3698         m3.allocateCells()
3699         m3.insertNextCell(NORM_POINT1,[2])
3700         m3.insertNextCell(NORM_POINT1,[3])
3701         m3.insertNextCell(NORM_POINT1,[4])
3702         m3.insertNextCell(NORM_POINT1,[5])
3703         #
3704         mm=MEDFileUMesh()
3705         mm.setMeshAtLevel(0,m0)
3706         mm.setMeshAtLevel(-1,m1)
3707         mm.setMeshAtLevel(-3,m3)
3708         mm.write(fname,2)
3709         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3710         mm=MEDFileMesh.New(fname)
3711         fs=MEDFileFields()
3712         fmts=MEDFileFieldMultiTS()
3713         f1ts=MEDFileField1TS()
3714         for lev in mm.getNonEmptyLevels():
3715             for gt in mm.getGeoTypesAtLevel(lev):
3716                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3717                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3718                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3719                 f.setArray(arr) ; f.setName("f0")
3720                 f1ts.setFieldNoProfileSBT(f)
3721                 pass
3722             pass
3723         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3724         for lev in [0,-1,-3]:
3725             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3726             pass
3727         fmts.pushBackTimeStep(f1ts)
3728         fs.pushField(fmts)
3729         fs.write(fname,0)
3730         del fs,fmts,f1ts
3731         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3732         fs=MEDFileFields(fname)
3733         self.assertEqual(len(fs),1)
3734         self.assertEqual(len(fs[0]),1)
3735         f1ts=fs[0][0]
3736         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),'','')])])
3737         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))
3738         pass
3739
3740     def testMEDFileUMeshSetName(self):
3741         """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the convertion is performed in memory and a preparation is done then.
3742         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3743         """
3744         fname="Pyfile79.med"
3745         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3746         mm=MEDFileUMesh()
3747         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3748         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)
3749         m0.allocateCells(5);
3750         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3751         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3752         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3753         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3754         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3755         m0.setCoords(coords);
3756         mm.setMeshAtLevel(0,m0)
3757         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3758         m2.allocateCells()
3759         m2.insertNextCell(NORM_POINT1,[2])
3760         m2.insertNextCell(NORM_POINT1,[3])
3761         m2.insertNextCell(NORM_POINT1,[4])
3762         m2.insertNextCell(NORM_POINT1,[5])
3763         mm.setMeshAtLevel(-2,m2)
3764         self.assertEqual(mm.getName(),"")
3765         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3766         mm.forceComputationOfParts()
3767         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3768         mm.setName("abc")
3769         self.assertEqual(mm.getName(),"abc")
3770         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3771         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3772         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3773         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3774         pass
3775
3776     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3777         fileName="Pyfile80.med"
3778         m=MEDCouplingCMesh() ; m.setName("cmesh")
3779         arr=DataArrayDouble(6) ; arr.iota()
3780         m.setCoords(arr,arr)
3781         nbCells=m.getNumberOfCells()
3782         self.assertEqual(25,nbCells)
3783         f=MEDCouplingFieldDouble(ON_CELLS)
3784         f.setName("FieldOnCell") ; f.setMesh(m)
3785         arr=DataArrayDouble(nbCells) ; arr.iota()
3786         mm=MEDFileCMesh()
3787         mm.setMesh(m)
3788         #
3789         fmts=MEDFileFieldMultiTS()
3790         #
3791         for i in range(nbCells):
3792             t=(float(i)+0.1,i+1,-i-2)
3793             f.setTime(*t)
3794             arr2=DataArrayDouble(nbCells)
3795             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3796             arr2[perm]=arr
3797             f.setArray(arr2)
3798             f1ts=MEDFileField1TS()
3799             f1ts.setFieldNoProfileSBT(f)
3800             fmts.pushBackTimeStep(f1ts)
3801             pass
3802         fmts.unloadArraysWithoutDataLoss()
3803         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))
3804         fs=MEDFileFields() ; fs.pushField(fmts)
3805         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))
3806         fs.unloadArraysWithoutDataLoss()
3807         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))
3808         f1ts=fs[0][0]
3809         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))
3810         f1ts.unloadArraysWithoutDataLoss()
3811         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))
3812         mm.write(fileName,2)
3813         fs.write(fileName,0)
3814         del m,fmts,mm,f,f1ts
3815         ##
3816         mm=MEDFileMesh.New(fileName)
3817         fmts=MEDFileFieldMultiTS(fileName)
3818         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))
3819         fmts.unloadArraysWithoutDataLoss()
3820         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3821         fmts.loadArraysIfNecessary()
3822         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))
3823         del mm,fmts
3824         fs=MEDFileFields(fileName)
3825         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))
3826         fs.unloadArraysWithoutDataLoss()
3827         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3828         fs.loadArraysIfNecessary()
3829         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))
3830         del fs
3831         f1ts=MEDFileField1TS(fileName)
3832         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))
3833         f1ts.unloadArraysWithoutDataLoss()
3834         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3835         f1ts.loadArraysIfNecessary()
3836         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))
3837         pass
3838
3839     def testMEDFileUMeshLoadPart1(self):
3840         """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specfied using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
3841         memory of the returned instance.
3842         """
3843         fileName="Pyfile81.med"
3844         arr=DataArrayDouble(6) ; arr.iota()
3845         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3846         m=m.buildUnstructured()
3847         m.setName("Mesh")
3848         m.changeSpaceDimension(3,0.)
3849         infos=["aa [b]","cc [de]","gg [klm]"]
3850         m.getCoords().setInfoOnComponents(infos)
3851         m.checkConsistency()
3852         mm=MEDFileUMesh()
3853         mm.setMeshAtLevel(0,m)
3854         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3855         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3856         mm.setMeshAtLevel(-1,m1)
3857         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])
3858         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])
3859         namesCellL0=DataArrayAsciiChar(25,16)
3860         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
3861         renumM1=DataArrayInt([3,4,0,2,1])
3862         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3863         mm.setRenumFieldArr(0,renum0)
3864         mm.setFamilyFieldArr(0,famField0)
3865         mm.setNameFieldAtLevel(0,namesCellL0)
3866         mm.setRenumFieldArr(-1,renumM1)
3867         mm.setFamilyFieldArr(-1,famFieldM1)
3868         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])
3869         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])
3870         namesNodes=DataArrayAsciiChar(36,16)
3871         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
3872         mm.setRenumFieldArr(1,renum1)
3873         mm.setFamilyFieldArr(1,famField1)
3874         mm.setNameFieldAtLevel(1,namesNodes)
3875         mm.setFamilyId("Fam7",77)
3876         mm.setFamilyId("Fam8",88)
3877         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3878         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3879         mm.write(fileName,2)
3880         #
3881         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3882         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3883         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])))
3884         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)
3885         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3886         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3887         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3888         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3889         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3890         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3891         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3892         #
3893         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3894         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3895         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])))
3896         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)
3897         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3898         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3899         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3900         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3901         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3902         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3903         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3904         #
3905         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3906         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3907         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3908         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3909         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3910         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3911         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3912         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3913         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])))
3914         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3915         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)
3916         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3917         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3918         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3919         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3920         pass
3921
3922     def testMEDFileFieldsLoadPart1(self):
3923         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3924         """
3925         fileName="Pyfile82.med"
3926         meshName="Mesh"
3927         compos=["aa [kg]","bbb [m/s]"]
3928         arr=DataArrayDouble(6) ; arr.iota()
3929         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3930         m=m.buildUnstructured()
3931         m.setName(meshName)
3932         m.changeSpaceDimension(3,0.)
3933         infos=["aa [b]","cc [de]","gg [klm]"]
3934         m.getCoords().setInfoOnComponents(infos)
3935         m.checkConsistency()
3936         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3937         f.setName("Field")
3938         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3939         arr[:,0]=list(range(25))
3940         arr[:,1]=list(range(100,125))
3941         f.setArray(arr)
3942         WriteField(fileName,f,True)
3943         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3944         f.setName("FieldNode")
3945         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3946         arr[:,0]=list(range(200,236))
3947         arr[:,1]=list(range(300,336))
3948         f.setArray(arr)
3949         f.checkConsistencyLight()
3950         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3951         #
3952         ms=MEDFileMeshes()
3953         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3954         ms.pushMesh(mm)
3955         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3956         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3957         #
3958         ms=MEDFileMeshes()
3959         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3960         ms.pushMesh(mm)
3961         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3962         fs=fs.deepCopy()
3963         fs[0][0].loadArrays()
3964         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
3965         arr.setInfoOnComponents(compos)
3966         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3967         fs[1][0].loadArrays()
3968         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
3969         arr.setInfoOnComponents(compos)
3970         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3971         pass
3972
3973     def testMEDFileWithoutCells1(self):
3974         fileName="Pyfile83.med"
3975         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3976         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3977         mm=MEDFileUMesh()
3978         mm.setCoords(coo)
3979         mm.setName("mesh")
3980         mm.write(fileName,2)
3981         #
3982         mm=MEDFileMesh.New(fileName)
3983         self.assertEqual(mm.getName(),"mesh")
3984         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3985         pass
3986
3987     def testZipCoordsWithLoadPart1(self):
3988         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
3989         """
3990         fileName="Pyfile84.med"
3991         meshName="Mesh"
3992         compos=["aa [kg]","bbb [m/s]"]
3993         arr=DataArrayDouble(6) ; arr.iota()
3994         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3995         m=m.buildUnstructured()
3996         m.setName(meshName)
3997         m.changeSpaceDimension(3,0.)
3998         infos=["aa [b]","cc [de]","gg [klm]"]
3999         m.getCoords().setInfoOnComponents(infos)
4000         m.checkConsistency()
4001         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4002         f.setName("Field")
4003         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4004         arr[:,0]=list(range(25))
4005         arr[:,1]=list(range(100,125))
4006         f.setArray(arr)
4007         WriteField(fileName,f,True)
4008         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4009         f.setName("FieldNode")
4010         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4011         arr[:,0]=list(range(200,236))
4012         arr[:,1]=list(range(300,336))
4013         f.setArray(arr)
4014         f.checkConsistencyLight()
4015         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4016         #
4017         ms=MEDFileMeshes()
4018         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4019         ms.pushMesh(mm)
4020         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4021         self.assertEqual(spd.getSlice(),slice(4,6,1))
4022         spd=mm.getPartDefAtLevel(1)
4023         self.assertEqual(spd.getSlice(),slice(4,14,1))
4024         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4025         mm.zipCoords() # <- The important line is here !
4026         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4027         self.assertEqual(spd.getSlice(),slice(4,6,1))
4028         spd=mm.getPartDefAtLevel(1)
4029         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4030         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4031         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4032         fs[0][0].loadArrays()
4033         arr=DataArrayDouble([(4,104),(5,105)])
4034         arr.setInfoOnComponents(compos)
4035         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4036         fs[1][0].loadArrays()
4037         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4038         arr.setInfoOnComponents(compos)
4039         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4040         pass
4041
4042     def testMEDFileCMeshSetGroupsAtLevel(self):
4043         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4044         """
4045         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4046         m.setName("Mesh")
4047         mm=MEDFileCMesh() ; mm.setMesh(m)
4048         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4049         mm.setGroupsAtLevel(0,[grp])
4050         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4051         pass
4052
4053     def testMEDFileUMeshBuildExtrudedMesh1(self):
4054         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4055         fileName="Pyfile85.med"
4056         meshName2D="Mesh"
4057         meshName1D="Mesh1D"
4058         meshName3DOut="Mesh3D"
4059         #
4060         d1=DataArrayInt([0,4,20,24])
4061         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4062         #
4063         a=DataArrayDouble(6) ; a.iota()
4064         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4065         m=m.buildUnstructured()
4066         d1c=d1.buildComplement(m.getNumberOfCells())
4067         m=m[d1c] ; m.zipCoords()
4068         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4069         m0.simplexize(0)
4070         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4071         m.setName(meshName2D)
4072         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4073         e=d.deltaShiftIndex().findIdsEqual(1)
4074         #
4075         mm=MEDFileUMesh()
4076         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4077         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4078         mm.setGroupsAtLevel(0,[grp0])
4079         grp1=e ; grp1.setName("grp1")
4080         mm.setGroupsAtLevel(-1,[grp1])
4081         mm.write(fileName,2)
4082         #
4083         a=DataArrayDouble(3) ; a.iota()
4084         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4085         tmp.setName(meshName1D)
4086         tmp.changeSpaceDimension(3)
4087         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4088         mm1D=MEDFileUMesh()
4089         mm1D.setMeshAtLevel(0,tmp)
4090         mm1D.write(fileName,0)
4091         # test is here !
4092         mm2D=MEDFileMesh.New(fileName,meshName2D)
4093         mm1D=MEDFileMesh.New(fileName,meshName1D)
4094         m1D=mm1D.getMeshAtLevel(0)
4095         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4096         #
4097         self.assertEqual(mm3D.getName(),mm2D.getName())
4098         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4099         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4100         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4101         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4102         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4103         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4104         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4105         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4106         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4107         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.)])
4108         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4109         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])
4110         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4111         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])
4112         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4113         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])
4114         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4115         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])
4116         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4117         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])
4118         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4119         d=DataArrayInt(129) ; d.iota() ; d*=3
4120         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4121         #
4122         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4123         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4124         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4125         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4126         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])))
4127         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])))
4128         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])))
4129         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])))
4130         mm3D.setName("MeshExtruded")
4131         mm3D.write(fileName,0)
4132         pass
4133
4134     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4135     def testMEDFileUMeshPickeling1(self):
4136         outFileName="Pyfile86.med"
4137         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)
4138         c.setInfoOnComponents(["aa","bbb"])
4139         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4140         m=MEDCouplingUMesh();
4141         m.setMeshDimension(2);
4142         m.allocateCells(5);
4143         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4144         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4145         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4146         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4147         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4148         m.finishInsertingCells();
4149         m.setCoords(c)
4150         m.checkConsistencyLight()
4151         m1=MEDCouplingUMesh.New();
4152         m1.setMeshDimension(1);
4153         m1.allocateCells(3);
4154         m1.insertNextCell(NORM_SEG2,2,[1,4])
4155         m1.insertNextCell(NORM_SEG2,2,[3,6])
4156         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4157         m1.finishInsertingCells();
4158         m1.setCoords(c)
4159         m1.checkConsistencyLight()
4160         m2=MEDCouplingUMesh.New();
4161         m2.setMeshDimension(0);
4162         m2.allocateCells(4);
4163         m2.insertNextCell(NORM_POINT1,1,[1])
4164         m2.insertNextCell(NORM_POINT1,1,[3])
4165         m2.insertNextCell(NORM_POINT1,1,[2])
4166         m2.insertNextCell(NORM_POINT1,1,[6])
4167         m2.finishInsertingCells();
4168         m2.setCoords(c)
4169         m2.checkConsistencyLight()
4170         #
4171         mm=MEDFileUMesh.New()
4172         self.assertTrue(mm.getUnivNameWrStatus())
4173         mm.setName("MyFirstMEDCouplingMEDmesh")
4174         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4175         mm.setCoords(c)
4176         mm[-1]=m1;
4177         mm[0]=m;
4178         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4179         mm[-2]=m2;
4180         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4181         # playing with groups
4182         g1_2=DataArrayInt.New()
4183         g1_2.setValues([1,3],2,1)
4184         g1_2.setName("G1")
4185         g2_2=DataArrayInt.New()
4186         g2_2.setValues([1,2,3],3,1)
4187         g2_2.setName("G2")
4188         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4189         g1_1=DataArrayInt.New()
4190         g1_1.setValues([0,1,2],3,1)
4191         g1_1.setName("G1")
4192         g2_1=DataArrayInt.New()
4193         g2_1.setValues([0,2],2,1)
4194         g2_1.setName("G2")
4195         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4196         g1_N=DataArrayInt.New()
4197         g1_N.setValues(list(range(8)),8,1)
4198         g1_N.setName("G1")
4199         g2_N=DataArrayInt.New()
4200         g2_N.setValues(list(range(9)),9,1)
4201         g2_N.setName("G2")
4202         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4203         mm.createGroupOnAll(0,"GrpOnAllCell")
4204         # check content of mm
4205         t=mm.getGroupArr(0,"G1",False)
4206         self.assertTrue(g1_2.isEqual(t));
4207         t=mm.getGroupArr(0,"G2",False)
4208         self.assertTrue(g2_2.isEqual(t));
4209         t=mm.getGroupArr(-1,"G1",False)
4210         self.assertTrue(g1_1.isEqual(t));
4211         t=mm.getGroupArr(-1,"G2",False)
4212         self.assertTrue(g2_1.isEqual(t));
4213         t=mm.getGroupArr(1,"G1",False)
4214         self.assertTrue(g1_N.isEqual(t));
4215         t=mm.getGroupArr(1,"G2",False)
4216         self.assertTrue(g2_N.isEqual(t));
4217         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4218         t=mm.getGroupArr(0,"GrpOnAllCell")
4219         #
4220         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4221         mm2=pickle.loads(st)
4222         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4223         self.assertEqual(mm.getAxisType(),AX_CART)
4224         #
4225         mm.setAxisType(AX_CYL)
4226         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4227         mm2=pickle.loads(st)
4228         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4229         self.assertEqual(mm2.getAxisType(),AX_CYL)
4230         pass
4231
4232     def testMEDFileFieldsLoadSpecificEntities1(self):
4233         nbNodes=11
4234         fieldName="myField"
4235         fileName="Pyfile87.med"
4236         nbPdt=10
4237         meshName="Mesh"
4238         #
4239         m=MEDCouplingCMesh()
4240         arr=DataArrayDouble(nbNodes) ; arr.iota()
4241         m.setCoords(arr)
4242         m=m.buildUnstructured()
4243         m.setName(meshName)
4244         #
4245         fmts=MEDFileFieldMultiTS()
4246         for i in range(nbPdt):
4247             f=MEDCouplingFieldDouble(ON_NODES)
4248             f.setMesh(m)
4249             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4250             f.setArray(arr)
4251             f.setName(fieldName)
4252             f.setTime(float(i),i,0)
4253             fmts.appendFieldNoProfileSBT(f)
4254             pass
4255         #
4256         mm=MEDFileUMesh() ; mm[0]=m
4257         fmts.write(fileName,2)
4258         mm.write(fileName,0)
4259         #
4260         fs=MEDFileFields(fileName,False)
4261         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4262         fs.loadArraysIfNecessary()
4263         fs2.loadArraysIfNecessary()
4264         for i in range(nbPdt):
4265             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4266             pass
4267         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4268         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4269         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4270         fmts=MEDFileFieldMultiTS()
4271         for i in range(nbPdt):
4272             f=MEDCouplingFieldDouble(ON_CELLS)
4273             f.setMesh(m3)
4274             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4275             f.setArray(arr)
4276             f.setName(fieldName)
4277             f.setTime(float(i),i,0)
4278             fmts.appendFieldNoProfileSBT(f)
4279             pass
4280         mm=MEDFileUMesh() ; mm[0]=m3
4281         del mm[0]
4282         self.assertEqual(mm.getNonEmptyLevels(),())
4283         mm[0]=m3
4284         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4285         fmts.write(fileName,2)
4286         fs=MEDFileFields(fileName,False)
4287         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4288         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4289         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4290         fs.loadArraysIfNecessary()
4291         fs2.loadArraysIfNecessary()
4292         fs3.loadArraysIfNecessary()
4293         fs4.loadArraysIfNecessary()
4294         for i in range(nbPdt):
4295             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4296             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4297             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4298             pass
4299         pass
4300
4301     def testMEDFileLotsOfTSRW1(self):
4302         nbNodes=11
4303         fieldName="myField"
4304         fileName="Pyfile88.med"
4305         nbPdt=300 # <- perftest = 30000
4306         meshName="Mesh"
4307         #
4308         maxPdt=100 # <- optimum = 500
4309         m=MEDCouplingCMesh()
4310         arr=DataArrayDouble(nbNodes) ; arr.iota()
4311         m.setCoords(arr)
4312         m=m.buildUnstructured()
4313         m.setName(meshName)
4314         #
4315         nbOfField=nbPdt//maxPdt
4316         fs=MEDFileFields()
4317         for j in range(nbOfField):
4318             fmts=MEDFileFieldMultiTS()
4319             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4320             for i in range(s.start, s.stop, s.step):
4321                 f=MEDCouplingFieldDouble(ON_NODES)
4322                 f.setMesh(m)
4323                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4324                 f.setArray(arr)
4325                 f.setName("%s_%d"%(fieldName,j))
4326                 f.setTime(float(i),i,0)
4327                 fmts.appendFieldNoProfileSBT(f)
4328                 pass
4329             fs.pushField(fmts)
4330             pass
4331         #
4332         mm=MEDFileUMesh() ; mm[0]=m
4333         fs.write(fileName,2)
4334         mm.write(fileName,0)
4335         ############
4336         def appendInDict(d,key,val):
4337             if key in d:
4338                 d[key].append(val)
4339             else:
4340                 d[key]=[val]
4341             pass
4342         import re
4343         allFields=GetAllFieldNames(fileName)
4344         allFieldsDict={}
4345         pat=re.compile("([\d]+)([\s\S]+)$")
4346         for st in allFields:
4347             stRev=st[::-1]
4348             m=pat.match(stRev)
4349             if m:
4350                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4351                 pass
4352             else:
4353                 appendInDict(allFieldsDict,st,'')
4354                 pass
4355             pass
4356         fs2=MEDFileFields()
4357         for k in allFieldsDict:
4358             if allFieldsDict[k]!=['']:
4359                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4360                 pass
4361             fmts2=[]
4362             for it in allFieldsDict[k]:
4363                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4364                 pass
4365             fmts2.reverse()
4366             zeResu=fmts2.pop()
4367             nbIter=len(fmts2)
4368             for ii in range(nbIter):
4369                 zeResu.pushBackTimeSteps(fmts2.pop())
4370                 pass
4371             zeResu.setName(k)
4372             fs2.pushField(zeResu)
4373             pass
4374         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4375         pass
4376     
4377     def testMEDFileMeshRearrangeFamIds1(self):
4378         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4379         fileName="Pyfile89.med"
4380         meshName='Maillage_2'
4381         mm=MEDFileUMesh()
4382         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)])
4383         #
4384         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])
4385         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])
4386         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4387         m0.setConnectivity(c0,c0i)
4388         mm[0]=m0
4389         #
4390         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])
4391         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])
4392         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4393         m1.setConnectivity(c1,c1i)
4394         mm[-1]=m1
4395         #
4396         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])
4397         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4398         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4399         mm[-2]=m2.buildUnstructured()
4400         #
4401         ref0=DataArrayInt(55) ; ref0[:]=0
4402         mm.setFamilyFieldArr(0,ref0)
4403         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]))
4404         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])
4405         mm.setFamilyFieldArr(-1,ref1)
4406         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])
4407         mm.setFamilyFieldArr(-2,ref2)
4408         #
4409         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4410             mm.setFamilyId(f,fid)
4411         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4412             mm.setFamiliesOnGroup(grp,fams)
4413         mm.write(fileName,2)
4414         #
4415         mm=MEDFileMesh.New(fileName)
4416         grp=mm.getGroup(-1,"Groupe_1")
4417         dai=grp.computeFetchedNodeIds()
4418         dai.setName("TOTO")
4419         mm.addGroup(1,dai)
4420         mm.rearrangeFamilies() # <- the aim of the test
4421         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4422         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4423         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4424         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4425         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])))
4426         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4427         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4428         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4429         for elt,fams in allGrps:
4430             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4431         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4432         for elt,eltId in allFams:
4433             self.assertEqual(mm.getFamilyId(elt),eltId)
4434         pass
4435
4436     def testNonRegrCMeshSetFieldPfl1(self):
4437         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4438         ff=MEDFileField1TS()
4439         meshName="mesh"
4440         mm=MEDFileCMesh()
4441         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4442         m.setCoords(arr)
4443         m.setName(meshName)
4444         mm.setMesh(m)
4445         field=MEDCouplingFieldDouble(ON_CELLS)
4446         field.setMesh(m)
4447         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4448         field.setName("Field")
4449         field.checkConsistencyLight()
4450         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4451         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4452         self.assertEqual(ff.getPfls(),())
4453         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4454         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4455         del ff,mm,field,field2,pfl
4456         # same with unstructured mesh
4457         ff=MEDFileField1TS()
4458         meshName="mesh"
4459         mm=MEDFileUMesh()
4460         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4461         m.setCoords(arr)
4462         m.setName(meshName)
4463         m=m.buildUnstructured()
4464         mm[0]=m
4465         field=MEDCouplingFieldDouble(ON_CELLS)
4466         field.setMesh(m)
4467         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4468         field.setName("Field")
4469         field.checkConsistencyLight()
4470         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4471         ff.setFieldProfile(field,mm,0,pfl)
4472         self.assertEqual(ff.getPfls(),())
4473         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4474         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4475         pass
4476
4477     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4478         meshName="mesh"
4479         fileName="Pyfile90.med"
4480         fileName2="Pyfile91.med"
4481         arr=DataArrayDouble(5) ; arr.iota()
4482         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4483         m=m.buildUnstructured()
4484         d=DataArrayInt([3,7,11,15])
4485         m1=m[d]
4486         m1.simplexize(0)
4487         m2=m[d.buildComplement(m.getNumberOfCells())]
4488         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4489         m.changeSpaceDimension(3,0.)
4490         arr=DataArrayDouble(3) ; arr.iota()
4491         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4492         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4493         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4494         m3D=m.buildExtrudedMesh(m1D,0)
4495         m3D.sortCellsInMEDFileFrmt()
4496         m3D.setName(meshName)
4497         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4498         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4499         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4500         #
4501         mm=MEDFileUMesh()
4502         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4503         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4504         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4505         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4506         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4507         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4508         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4509         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4510         mm.setGroupsAtLevel(0,[vol1,vol2])
4511         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4512         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4513         #
4514         mmOut1=mm.linearToQuadratic(0,0.)
4515         mmOut1.write(fileName2,2)
4516         mmOut2=mmOut1.quadraticToLinear(0.)
4517         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4518         pass
4519
4520     def testMEDFileMeshAddGroup1(self):
4521         m=MEDCouplingCMesh()
4522         arrX=DataArrayDouble(9) ; arrX.iota()
4523         arrY=DataArrayDouble(4) ; arrY.iota()
4524         m.setCoords(arrX,arrY)
4525         m.setName("mesh")
4526         mm=MEDFileCMesh()
4527         mm.setMesh(m)
4528         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4529         mm.addGroup(0,grp0)
4530         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4531         mm.addGroup(0,grp1)
4532         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4533         mm.addGroup(0,grp2)
4534         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4535         mm.addGroup(0,grp3)
4536         for grp in [grp0,grp1,grp2,grp3]:
4537             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4538         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4539         delta=12
4540         for grp in [grp0,grp1,grp2,grp3]:
4541             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4542             mm.addGroup(1,grpNode)
4543         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4544         for grp in [grp0,grp1,grp2,grp3]:
4545             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4546         for grp in [grp0,grp1,grp2,grp3]:
4547             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4548             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4549         mm.normalizeFamIdsMEDFile()
4550         for grp in [grp0,grp1,grp2,grp3]:
4551             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4552         for grp in [grp0,grp1,grp2,grp3]:
4553             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4554             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4555         pass
4556     
4557     def testMEDFileJoint1(self):
4558         fileName="Pyfile92.med"
4559         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4560         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4561         mm=MEDFileUMesh()
4562         mm.setCoords(coo)
4563         mm.setName("maa1")
4564         mm.setDescription("un maillage")
4565         mm.write(fileName,2)
4566         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4567         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4568         one_step_joint=MEDFileJointOneStep()
4569         one_step_joint.pushCorrespondence(cell_correspond)
4570         one_step_joint.pushCorrespondence(node_correspond)
4571         one_joint=MEDFileJoint()
4572         one_joint.pushStep(one_step_joint)
4573         one_joint.setLocalMeshName("maa1")
4574         one_joint.setRemoteMeshName("maa1")
4575         one_joint.setDescription("joint_description")
4576         one_joint.setJointName("joint_1")
4577         one_joint.setDomainNumber(1)
4578         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4579         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4580         self.assertEqual( one_joint.getDescription(), "joint_description")
4581         self.assertEqual( one_joint.getJointName(), "joint_1")
4582         self.assertEqual( one_joint.getDomainNumber(), 1)
4583         joints=MEDFileJoints()
4584         joints.pushJoint(one_joint);
4585         joints.write(fileName,0)
4586         # read back
4587         jointsR=MEDFileJoints(fileName,mm.getName())
4588         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4589         jR = jointsR.getJointAtPos(0)
4590         self.assertTrue( jR.isEqual( one_joint ))
4591         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4592         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4593         jointsR.destroyJointAtPos(0)
4594         pass
4595     
4596     def testMEDFileJoint2(self):
4597         fileNameWr="Pyfile93.med"
4598         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4599         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4600         mm=MEDFileUMesh()
4601         mm.setCoords(coo)
4602         mm.setName("maa1")
4603         mm.setDescription("un maillage")
4604         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4605         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4606         one_step_joint=MEDFileJointOneStep()
4607         two_step_joint=MEDFileJointOneStep()
4608         one_joint=MEDFileJoint()
4609         two_joint=MEDFileJoint()
4610         one_step_joint.pushCorrespondence(node_correspond)
4611         one_joint.pushStep(one_step_joint)
4612         two_step_joint.pushCorrespondence(cell_correspond)
4613         two_step_joint.pushCorrespondence(node_correspond)
4614         two_joint.pushStep(two_step_joint)
4615         one_joint.setLocalMeshName("maa1")
4616         one_joint.setRemoteMeshName("maa1")
4617         one_joint.setDescription("joint_description_1")
4618         one_joint.setJointName("joint_1")
4619         one_joint.setDomainNumber(1)
4620         two_joint.setLocalMeshName("maa1")
4621         two_joint.setRemoteMeshName("maa1")
4622         two_joint.setDescription("joint_description_2")
4623         two_joint.setJointName("joint_2")
4624         two_joint.setDomainNumber(2)
4625         joints=MEDFileJoints()
4626         joints.pushJoint(one_joint)
4627         joints.pushJoint(two_joint)
4628         mm.setJoints( joints )
4629         mm.write(fileNameWr,2)
4630         #
4631         mm=MEDFileMesh.New(fileNameWr)
4632         self.assertEqual( mm.getNumberOfJoints(), 2)
4633         jointsR = mm.getJoints();
4634         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4635         self.assertEqual( len( jointsR ), 2 )
4636         jointR1 = jointsR[0]
4637         jointR2 = jointsR[1]
4638         self.assertFalse( jointR1 is None )
4639         self.assertFalse( jointR2 is None )
4640         self.assertTrue( jointR1.isEqual( one_joint ))
4641         self.assertTrue( jointR2.isEqual( two_joint ))
4642         pass
4643
4644     def testMEDFileJoint1(self):
4645         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4646         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4647         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4648         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4649         joint1st_1=MEDFileJointOneStep()
4650         joint1st_1.pushCorrespondence(cell_correspond)
4651         joint1st_1.pushCorrespondence(node_correspond)
4652         joint1st_2=MEDFileJointOneStep()
4653         joint1st_2.pushCorrespondence(cell_correspond)
4654         joint1st_2.pushCorrespondence(node_correspond)
4655         joint1st_3=MEDFileJointOneStep()
4656         joint1st_3.pushCorrespondence(node_correspond)
4657         joint1st_3.pushCorrespondence(cell_correspond)
4658         joint1st_4=MEDFileJointOneStep()
4659         joint1st_4.pushCorrespondence(cell_correspond)
4660         joint1st_5=MEDFileJointOneStep()
4661         joint1st_5.pushCorrespondence(cell_correspon2)
4662         joint1st_6=MEDFileJointOneStep()
4663         joint1st_6.pushCorrespondence(cell_correspon3)
4664         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4665         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4666         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4667         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4668         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4669         one_joint=MEDFileJoint()
4670         one_joint.pushStep(joint1st_1)
4671         one_joint.setLocalMeshName("maa1")
4672         one_joint.setRemoteMeshName("maa2")
4673         one_joint.setDescription("joint_description")
4674         one_joint.setJointName("joint_1")
4675         one_joint.setDomainNumber(1)
4676         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4677         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4678         self.assertEqual( "joint_description", one_joint.getDescription())
4679         self.assertEqual( 1, one_joint.getDomainNumber())
4680         self.assertEqual( "joint_1", one_joint.getJointName())
4681         pass
4682
4683     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4684     def testMEDFileSafeCall0(self):
4685         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4686         fname="Pyfile94.med"
4687         errfname="Pyfile94.err"
4688         
4689         import os
4690         # first clean file if needed
4691         if os.path.exists(fname):
4692             os.remove(fname)
4693             pass
4694         # second : build a file from scratch
4695         m=MEDCouplingCMesh()
4696         arr=DataArrayDouble(11) ; arr.iota()
4697         m.setCoords(arr,arr)
4698         mm=MEDFileCMesh()
4699         mm.setMesh(m)
4700         mm.setName("mesh")
4701         mm.write(fname,2)
4702         # third : change permissions to remove write access on created file
4703         os.chmod(fname, 0o444)
4704         # four : try to append data on file -> check that it raises Exception
4705         f=MEDCouplingFieldDouble(ON_CELLS)
4706         f.setName("field")
4707         f.setMesh(m)
4708         f.setArray(DataArrayDouble(100))
4709         f.getArray()[:]=100.
4710         f.checkConsistencyLight()
4711         f1ts=MEDFileField1TS()
4712         f1ts.setFieldNoProfileSBT(f)
4713         # redirect stderr
4714         tmp=StdOutRedirect(errfname)
4715         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4716         del tmp
4717         #
4718         if os.path.exists(errfname):
4719             os.remove(errfname)
4720         #
4721         pass
4722
4723     def testUnivStatus1(self):
4724         """ Non regression test to check the effectiveness of univ write status."""
4725         fname="Pyfile95.med"
4726         arr=DataArrayDouble(10) ; arr.iota()
4727         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4728         mm=MEDFileCMesh() ; mm.setMesh(m)
4729         mm.setUnivNameWrStatus(False) # test is here
4730         mm.write(fname,2)
4731         mm=MEDFileCMesh(fname)
4732         self.assertEqual(mm.getUnivName(),"")
4733         mm.setUnivNameWrStatus(True)
4734         mm.write(fname,2)
4735         mm=MEDFileCMesh(fname)
4736         self.assertTrue(mm.getUnivName()!="")
4737         pass
4738     
4739     def testEmptyMesh(self):
4740       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4741       with 0 tuples """
4742       fname = "Pyfile96.med" 
4743       m = MEDCouplingUMesh('toto', 2)
4744       m.setCoords(DataArrayDouble([], 0, 2))
4745       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4746       mfu = MEDFileUMesh()
4747       mfu.setMeshAtLevel(0, m)
4748       mfu.write(fname, 2)
4749       mfu2 = MEDFileUMesh(fname)
4750       self.assertEqual('toto', mfu2.getName())
4751       lvl = mfu2.getNonEmptyLevels()
4752       self.assertEqual((), lvl)
4753
4754     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4755     def testMEDFileUMeshPickeling2(self):
4756       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4757       name="Mesh_1"
4758       grpName1="HAUT"
4759       grpName2="BASE"
4760       hauteur=1.
4761       nbOfNodesPerAxis=3
4762       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4763       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4764       mesh=MEDFileUMesh() ; mesh[0]=m
4765       m1=m.computeSkin() ; mesh[-1]=m1
4766       #
4767       bary1=m1.computeCellCenterOfMass()[:,2]
4768       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4769       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4770       mesh.setGroupsAtLevel(-1,[grp1,grp2])
4771       
4772       st=pickle.dumps(mesh,2)
4773       mm=pickle.loads(st)
4774       st2=pickle.dumps(mm,2)
4775       mm2=pickle.loads(st2)
4776       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4777       pass
4778
4779     def testMEDFileEquivalence1(self):
4780       """ First check of equivalence implementation in MEDFileMesh"""
4781       fileName="Pyfile97.med"
4782       meshName="M_01"
4783       mm=MEDFileUMesh()
4784       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)])
4785       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4786       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])
4787       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4788       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])
4789       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4790       mm.getFamilyFieldAtLevel(-1)[:]=-2
4791       mm.getFamilyFieldAtLevel(0)[:]=0
4792       mm.addFamily("HOMARD________-1",-1)
4793       mm.addFamily("HOMARD________-2",-2)
4794       mm.addFamily("HOMARD________-3",-3)
4795       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4796       
4797       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4798       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."
4799       mm.initializeEquivalences()
4800       eqs=mm.getEquivalences()
4801       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4802       eq0.setDescription(descEq)
4803       corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
4804       eq0.setArray(-1,corr)
4805       self.assertEqual(eq0.getCell().size(),1)
4806       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4807       eq0.getCell().clear()
4808       self.assertEqual(eq0.getCell().size(),0)
4809       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4810       self.assertEqual(eq0.getCell().size(),1)
4811       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4812       mm.killEquivalences()
4813       mm.initializeEquivalences()
4814       eqs=mm.getEquivalences()
4815       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4816       eq0.setDescription(descEq)
4817       c=eq0.initCell()
4818       c.setArrayForType(NORM_QUAD4,corr)
4819       self.assertEqual(eq0.getCell().size(),1)
4820       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4821       mm2=mm.deepCopy()
4822       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4823       self.assertEqual(mm2.getEquivalences().size(),1)
4824       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4825       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4826       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4827       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4828       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4829       mm.write(fileName,2)
4830       #
4831       mm3=MEDFileMesh.New(fileName)
4832       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4833       pass
4834
4835     def testMEDFileForFamiliesPlayer1(self):
4836       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4837       fileName="Pyfile98.med"
4838       meshName="mesh"
4839       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
4840       arr=DataArrayDouble(4) ; arr.iota()
4841       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4842       m=m.buildUnstructured()
4843       mm=MEDFileUMesh()
4844       mm[0]=m
4845       mm.setName(meshName)
4846       mm.setFamilyId("FAMILLE_ZERO",0)
4847       mm.getFamilyFieldAtLevel(0)[-3:]=-4
4848       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
4849       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
4850       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
4851       mm.setFamilyFieldArr(1,d)
4852       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
4853       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
4854       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4855       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
4856       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
4857       mm.write(fileName,2)
4858       # now read such funny file !
4859       mm2=MEDFileMesh.New(fileName) # <- normaly mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
4860       self.assertTrue(mm.isEqual(mm2,1e-16))
4861       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4862       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
4863       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
4864       pass
4865
4866     def testCartesianizer1(self):
4867       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
4868       # UMesh non cart
4869       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4870       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
4871       d0=DataArrayInt(16) ; d0[:]=0
4872       d1=DataArrayInt(9)  ; d1[:]=0
4873       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4874       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4875       ref0=mm.getCoords().getHiddenCppPointer()
4876       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
4877       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
4878       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
4879       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
4880       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4881       mm.setAxisType(AX_CYL) #<- important
4882       mm2=mm.cartesianize() # the trigger
4883       self.assertEqual(mm2.getAxisType(),AX_CART)
4884       mm.setAxisType(AX_CART) # this is here only to avoid complaints
4885       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4886       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4887       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
4888       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
4889       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
4890       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4891       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
4892       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
4893       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
4894       self.assertEqual(mm2.getName(),mm.getName())
4895       self.assertEqual(mm2.getDescription(),mm.getDescription())
4896       self.assertEqual(mm2.getTime(),mm.getTime())
4897       self.assertEqual(mm2.getTime(),mm.getTime())
4898       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4899       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4900       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4901       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4902       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4903       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4904       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4905       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4906       # UMesh cart
4907       mm.setAxisType(AX_CART)
4908       mm2=mm.cartesianize() # the trigger
4909       self.assertEqual(mm2.getAxisType(),AX_CART)
4910       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4911       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4912       # CurveLinearMesh non cart
4913       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
4914       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4915       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4916       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4917       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
4918       mm2=mm.cartesianize() # the trigger
4919       self.assertEqual(mm2.getAxisType(),AX_CART)
4920       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4921       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4922       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4923       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4924       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4925       self.assertEqual(mm2.getName(),mm.getName())
4926       self.assertEqual(mm2.getDescription(),mm.getDescription())
4927       self.assertEqual(mm2.getTime(),mm.getTime())
4928       self.assertEqual(mm2.getTime(),mm.getTime())
4929       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4930       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4931       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4932       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4933       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4934       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4935       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4936       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4937       # CurveLinearMesh cart
4938       mm.setAxisType(AX_CART)
4939       mm2=mm.cartesianize() # the trigger
4940       self.assertEqual(mm2.getAxisType(),AX_CART)
4941       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4942       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4943       # CMesh non cart
4944       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4945       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4946       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4947       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4948       mm2=mm.cartesianize() # the trigger
4949       self.assertEqual(mm2.getAxisType(),AX_CART)
4950       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4951       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4952       self.assertEqual(mm2.getName(),mm.getName())
4953       self.assertEqual(mm2.getDescription(),mm.getDescription())
4954       self.assertEqual(mm2.getTime(),mm.getTime())
4955       self.assertEqual(mm2.getTime(),mm.getTime())
4956       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4957       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4958       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4959       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4960       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4961       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4962       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4963       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4964       # CMesh cart
4965       mm.setAxisType(AX_CART)
4966       mm2=mm.cartesianize() # the trigger
4967       self.assertEqual(mm2.getAxisType(),AX_CART)
4968       self.assertTrue(isinstance(mm2,MEDFileCMesh))
4969       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4970       pass
4971
4972     def testCheckCoherency(self):
4973       m2 = MEDCouplingUMesh("2d", 2)
4974       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
4975       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
4976       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
4977       mum = MEDFileUMesh()
4978       mum.setMeshAtLevel(0, m2)
4979       mum.setMeshAtLevel(-1, m1)
4980       mum.checkConsistency()
4981       mum2 = mum.deepCopy()
4982
4983       # Nodes
4984       arr = DataArrayInt([2]*4)
4985       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
4986       self.assertRaises(InterpKernelException, mum.checkConsistency)
4987       mum=mum2; mum2=mum.deepCopy();
4988       arr = DataArrayInt([2]*4)
4989       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
4990       self.assertRaises(InterpKernelException, mum.checkConsistency)
4991       mum=mum2; mum2=mum.deepCopy();
4992       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
4993       self.assertRaises(InterpKernelException, mum.checkConsistency)
4994       mum=mum2; mum2=mum.deepCopy();
4995       arr = DataArrayAsciiChar(['tutu           x']*4)
4996       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
4997       self.assertRaises(InterpKernelException, mum.checkConsistency)
4998
4999       # 2D
5000       mum=mum2; mum2=mum.deepCopy();
5001       arr = DataArrayInt([2]*2)
5002       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5003       self.assertRaises(InterpKernelException, mum.checkConsistency)
5004       mum=mum2; mum2=mum.deepCopy();
5005       arr = DataArrayInt([2]*2)
5006       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5007       self.assertRaises(InterpKernelException, mum.checkConsistency)
5008       mum=mum2; mum2=mum.deepCopy();
5009       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5010       self.assertRaises(InterpKernelException, mum.checkConsistency)
5011       mum=mum2; mum2=mum.deepCopy();
5012       arr = DataArrayAsciiChar(['tutu           x']*2)
5013       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5014       self.assertRaises(InterpKernelException, mum.checkConsistency)
5015
5016       # 1D
5017       mum=mum2; mum2=mum.deepCopy();
5018       arr = DataArrayInt([2]*5)
5019       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5020       self.assertRaises(InterpKernelException, mum.checkConsistency)
5021       mum=mum2; mum2=mum.deepCopy();
5022       arr = DataArrayInt([2]*5)
5023       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5024       self.assertRaises(InterpKernelException, mum.checkConsistency)
5025       mum=mum2; mum2=mum.deepCopy();
5026       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5027       self.assertRaises(InterpKernelException, mum.checkConsistency)
5028       mum=mum2; mum2=mum.deepCopy();
5029       arr = DataArrayAsciiChar(['tutu           x']*5)
5030       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5031       self.assertRaises(InterpKernelException, mum.checkConsistency)
5032
5033     def testCheckSMESHConsistency(self):
5034       m2 = MEDCouplingUMesh("2d", 2)
5035       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5036       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5037       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5038       mum = MEDFileUMesh()
5039       mum.setMeshAtLevel(0, m2)
5040       mum.setMeshAtLevel(-1, m1)
5041       mum.checkConsistency()
5042       mum.checkSMESHConsistency()
5043       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5044       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5045       mum.setRenumFieldArr(0, n2)
5046       mum.setRenumFieldArr(-1, n1)
5047       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5048       mum.setRenumFieldArr(-1, n1+100)
5049       mum.checkSMESHConsistency()
5050       pass
5051
5052     def testClearNodeAndCellNumbers(self):
5053       m2 = MEDCouplingUMesh("2d", 2)
5054       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5055       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5056       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5057       mum = MEDFileUMesh()
5058       mum.setMeshAtLevel(0, m2)
5059       mum.setMeshAtLevel(-1, m1)
5060       mum.checkConsistency()
5061       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5062       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5063       mum.setRenumFieldArr(0, n2)
5064       mum.setRenumFieldArr(-1, n1)
5065       mum.clearNodeAndCellNumbers()
5066       mum.checkSMESHConsistency()
5067       pass
5068
5069     def testCMeshSetFamilyFieldArrNull(self):
5070       meshName="mesh"
5071       fname="Pyfile99.med"
5072       arrX=DataArrayDouble([0,1,2,3])
5073       arrY=DataArrayDouble([0,1,2])
5074       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5075       mm=MEDFileCMesh() ; mm.setMesh(m)
5076       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5077       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5078       mm.setFamilyFieldArr(0,famCellIds)
5079       mm.setFamilyFieldArr(1,famNodeIds)
5080       mm.write(fname,2)
5081       mm=MEDFileMesh.New(fname)
5082       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5083       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5084       mm.setFamilyFieldArr(0,None)#<- bug was here
5085       mm.setFamilyFieldArr(1,None)#<- bug was here
5086       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5087       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5088       mm3=mm.deepCopy()
5089       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5090       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5091       mm.write(fname,2)
5092       mm2=MEDFileMesh.New(fname)
5093       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5094       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5095       pass
5096
5097     def testAppendFieldProfileOnIntField(self):
5098       fname="Pyfile100.med"
5099       arrX=DataArrayDouble([0,1,2,3])
5100       arrY=DataArrayDouble([0,1,2])
5101       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5102       mm=MEDFileCMesh()
5103       mm.setMesh(mesh)
5104       #
5105       fmts=MEDFileIntFieldMultiTS()
5106       pflName="PFL"
5107       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5108       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5109       fieldName="FieldOnCell"
5110       f.setTime(1.2,1,1) ; f.setName(fieldName)
5111       arr=DataArrayInt([101,102,103]) ; f.setArray(arr)
5112       fmts.appendFieldProfile(f,mm,0,pfl)
5113       #
5114       mm.write(fname,2)
5115       fmts.write(fname,0)
5116       #
5117       mm=MEDFileMesh.New(fname)
5118       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5119       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5120       self.assertEqual(fmts.getName(),fieldName)
5121       self.assertEqual(len(fmts),1)
5122       f1ts=fmts[0]
5123       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5124       self.assertEqual(pfltest.getName(),pflName)
5125       self.assertEqual(ftest.getName(),fieldName)
5126       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5127       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5128       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5129       self.assertEqual(ftest2.getTime(),f.getTime())
5130       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5131       pass
5132
5133     def testMEDFileFieldEasyField1(self):
5134       """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."""
5135       ## Basic test on cells on top level
5136       fname="Pyfile101.med"
5137       fieldName="field1"
5138       mm=MEDFileUMesh()
5139       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5140       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5141       m.allocateCells()
5142       m.insertNextCell(NORM_TRI3,[0,1,2])
5143       m.insertNextCell(NORM_TRI3,[3,4,5])
5144       m.insertNextCell(NORM_TRI3,[6,7,8])
5145       m.insertNextCell(NORM_TRI3,[9,10,11])
5146       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5147       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5148       mm[0]=m
5149       mm.write(fname,2)
5150       arr0=DataArrayDouble([10,11,12,13,100,101])
5151       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5152       f.setName(fieldName) ; f.setTime(2.,6,7)
5153       f0=f.deepCopy()
5154       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5155       ff.write(fname,0)
5156       arr2=arr0+1000 ; f.setArray(arr2)
5157       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5158       ff.write(fname,0)
5159       f1=f.deepCopy()
5160       ##
5161       mm=MEDFileMesh.New(fname)
5162       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5163       ftst0=f1ts.field(mm)
5164       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5165       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5166       ftst1=f1ts.field(mm)
5167       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5168       fmts=MEDFileFieldMultiTS(fname,fieldName)
5169       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5170       ## Basic test on nodes on top level
5171       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5172       f2.setName(fieldName)
5173       mm.write(fname,2)
5174       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5175       #
5176       mm=MEDFileMesh.New(fname)
5177       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5178       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5179       fmts=MEDFileFieldMultiTS(fname,fieldName)
5180       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5181       ## Node on elements
5182       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)
5183       f3.setName(fieldName) ; f3.checkConsistencyLight()
5184       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5185       #
5186       mm=MEDFileMesh.New(fname)
5187       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5188       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5189       ## Gauss
5190       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5191       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])
5192       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)
5193       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)
5194       f4.checkConsistencyLight()
5195       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5196       #
5197       mm=MEDFileMesh.New(fname)
5198       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5199       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5200       pass
5201   
5202     def testMEDFileFieldEasyField2(self):
5203         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5204         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."""
5205         ## Basic test on cells on top level
5206         fname="Pyfile102.med"
5207         fieldName="field1"
5208         mm=MEDFileUMesh()
5209         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5210         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5211         m.allocateCells()
5212         m.insertNextCell(NORM_TRI3,[0,1,2])
5213         m.insertNextCell(NORM_TRI3,[3,4,5])
5214         m.insertNextCell(NORM_TRI3,[6,7,8])
5215         m.insertNextCell(NORM_TRI3,[9,10,11])
5216         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5217         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5218         mm[0]=m
5219         mm.write(fname,2)
5220         arr0=DataArrayInt([10,11,12,13,100,101])
5221         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5222         f.setName(fieldName) ; f.setTime(2.,6,7)
5223         f0=f.deepCopy()
5224         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5225         ff.write(fname,0)
5226         arr2=arr0+1000 ; f.setArray(arr2)
5227         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5228         ff.write(fname,0)
5229         f1=f.deepCopy()
5230         ##
5231         mm=MEDFileMesh.New(fname)
5232         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5233         ftst0=f1ts.field(mm)
5234         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5235         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5236         ftst1=f1ts.field(mm)
5237         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5238         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5239         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5240         ## Basic test on nodes on top level
5241         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5242         f2.setName(fieldName)
5243         mm.write(fname,2)
5244         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5245         #
5246         mm=MEDFileMesh.New(fname)
5247         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5248         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5249         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5250         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5251         ## Node on elements
5252         f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt([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)
5253         f3.setName(fieldName) ; f3.checkConsistencyLight()
5254         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5255         #
5256         mm=MEDFileMesh.New(fname)
5257         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5258         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5259         ## Gauss
5260         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5261         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])
5262         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)
5263         arr4=DataArrayInt([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)
5264         f4.checkConsistencyLight()
5265         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5266         #
5267         mm=MEDFileMesh.New(fname)
5268         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5269         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5270         pass
5271
5272     def testMEDFileFieldEasyField3(self):
5273         """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."""
5274         fname="Pyfile103.med"
5275         fieldName="field1"
5276         mm=MEDFileUMesh()
5277         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5278         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5279         m.allocateCells()
5280         m.insertNextCell(NORM_TRI3,[0,1,2])
5281         m.insertNextCell(NORM_TRI3,[3,4,5])
5282         m.insertNextCell(NORM_TRI3,[6,7,8])
5283         m.insertNextCell(NORM_TRI3,[9,10,11])
5284         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5285         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5286         mm[-1]=m
5287         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5288         m0.allocateCells()
5289         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5290         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5291         mm[0]=m0
5292         mm.write(fname,2)
5293         # start slowly
5294         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5295         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5296         #
5297         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5298         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5299         # here f1 lying on level -1 not 0 check if "field" method detect it !
5300         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5301         f1.setMesh(mm[-1]) # -1 is very important
5302         f1.setTime(16.,3,4)
5303         f1.checkConsistencyLight()
5304         mm.write(fname,2)
5305         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5306         #
5307         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5308         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5309         # nodes on elements
5310         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5311         f3.setMesh(mm[-1]) # this line is important
5312         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)
5313         f3.setName(fieldName) ; f3.checkConsistencyLight()
5314         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5315         #
5316         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5317         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5318         # gauss
5319         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5320         f4.setMesh(mm[-1]) # this line is important
5321         f4.setName(fieldName)
5322         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])
5323         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)
5324         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)
5325         f4.checkConsistencyLight()
5326         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5327         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5328         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5329         pass
5330
5331     def testMEDFileFieldEasyField4(self):
5332         """ Same than testMEDFileFieldEasyField3 but with integers"""
5333         fname="Pyfile104.med"
5334         fieldName="field1"
5335         mm=MEDFileUMesh()
5336         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5337         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5338         m.allocateCells()
5339         m.insertNextCell(NORM_TRI3,[0,1,2])
5340         m.insertNextCell(NORM_TRI3,[3,4,5])
5341         m.insertNextCell(NORM_TRI3,[6,7,8])
5342         m.insertNextCell(NORM_TRI3,[9,10,11])
5343         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5344         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5345         mm[-1]=m
5346         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5347         m0.allocateCells()
5348         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5349         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5350         mm[0]=m0
5351         mm.write(fname,2)
5352         # start slowly
5353         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5354         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5355         #
5356         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5357         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5358         # here f1 lying on level -1 not 0 check if "field" method detect it !
5359         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5360         f1.setMesh(mm[-1]) # -1 is very important
5361         f1.setTime(16.,3,4)
5362         f1.checkConsistencyLight()
5363         mm.write(fname,2)
5364         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5365         #
5366         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5367         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5368         # nodes on elements
5369         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5370         f3.setMesh(mm[-1]) # this line is important
5371         arr3=DataArrayInt([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)
5372         f3.setName(fieldName) ; f3.checkConsistencyLight()
5373         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5374         #
5375         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5376         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5377         # gauss
5378         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5379         f4.setMesh(mm[-1]) # this line is important
5380         f4.setName(fieldName)
5381         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])
5382         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)
5383         arr4=DataArrayInt([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)
5384         f4.checkConsistencyLight()
5385         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5386         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5387         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5388         pass
5389
5390     def testMEDFileFieldEasyField5(self):
5391         """More and more difficult now look at how profiles are managed by "field" method."""
5392         fname="Pyfile105.med"
5393         fieldName="field1"
5394         mm=MEDFileUMesh()
5395         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5396         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5397         m.allocateCells()
5398         m.insertNextCell(NORM_TRI3,[0,1,2])
5399         m.insertNextCell(NORM_TRI3,[3,4,5])
5400         m.insertNextCell(NORM_TRI3,[6,7,8])
5401         m.insertNextCell(NORM_TRI3,[9,10,11])
5402         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5403         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5404         mm[0]=m
5405         mm.write(fname,2)
5406         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5407         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5408         #
5409         arr0=DataArrayDouble([10,11,12,13])
5410         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5411         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5412         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5413         ff.write(fname,0)
5414         #
5415         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5416         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5417         # more complicated -> multi level
5418         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5419         m0.allocateCells()
5420         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5421         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5422         mm2=MEDFileUMesh()
5423         mm2[0]=m0 ; mm2[-1]=m
5424         #
5425         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5426         #
5427         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5428         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5429         pass
5430
5431     def testExtractPart1(self):
5432         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)])
5433         meshName="mesh"
5434         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5435         m0.insertNextCell(NORM_TRI3,[8,4,3])
5436         m0.insertNextCell(NORM_TRI3,[8,9,4])
5437         m0.insertNextCell(NORM_TRI3,[7,13,8])
5438         m0.insertNextCell(NORM_TRI3,[7,12,13])
5439         m0.insertNextCell(NORM_TRI3,[0,6,1])
5440         m0.insertNextCell(NORM_TRI3,[0,5,6])
5441         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5442         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5443         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5444         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5445         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5446         #
5447         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5448         m1.insertNextCell(NORM_SEG2,[10,5])
5449         m1.insertNextCell(NORM_SEG2,[5,0])
5450         m1.insertNextCell(NORM_SEG2,[0,1])
5451         m1.insertNextCell(NORM_SEG2,[1,2])
5452         m1.insertNextCell(NORM_SEG2,[2,3])
5453         m1.insertNextCell(NORM_SEG2,[3,4])
5454         m1.insertNextCell(NORM_SEG2,[4,9])
5455         m1.insertNextCell(NORM_SEG2,[9,14])
5456         m1.insertNextCell(NORM_SEG2,[14,13])
5457         m1.insertNextCell(NORM_SEG2,[13,12])
5458         m1.insertNextCell(NORM_SEG2,[12,11])
5459         m1.insertNextCell(NORM_SEG2,[11,10])
5460         mm=MEDFileUMesh()
5461         mm[0]=m0 ; mm[-1]=m1
5462         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5463         tab={} #
5464         tab[0]=DataArrayInt([0,2,3,4,6,7])
5465         tab[-1]=DataArrayInt([2,3,4,5,9])
5466         fs=MEDFileFields()
5467         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5468         tab[1]=arr0
5469         #
5470         fname0="Field0"
5471         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5472         t0=(16.5,3,4)
5473         ic=["toto [m]"]
5474         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5475         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5476         f0.setMesh(m0) ; f0.setName(fname0)
5477         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5478         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5479         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]))
5480         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5481         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5482         fmts.pushBackTimeStep(f1ts)
5483         #
5484         mmOut=mm.extractPart(tab)
5485         #
5486         fsPart0=fs.extractPart(tab,mm)
5487         self.assertEqual(len(fsPart0),1)
5488         fmtsP=fsPart0[0]
5489         self.assertEqual(len(fmtsP),1)
5490         f1ts=fmtsP[0]
5491         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5492         #
5493         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5494         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5495         #
5496         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5497         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5498         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5499         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5500         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5501         #
5502         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5503         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5504         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5505         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5506         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5507         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5508         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5509         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5510         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5511         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5512         #
5513         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5514         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5515         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5516         # multisteps
5517         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5518         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5519         for i,tt in enumerate(tss):
5520             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5521             myarr=arr0_0+i*1000.
5522             f0.setArray(myarr)
5523             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5524             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5525             pass
5526         fsPart1=fs.extractPart(tab,mm)
5527         self.assertEqual(len(fsPart1),1)
5528         fmtsP=fsPart1[0]
5529         self.assertEqual(len(fmtsP),len(tss))
5530         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5531             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5532             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5533             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5534             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5535             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5536             self.assertEqual(fPart.getTime(),list(tt))
5537             pass
5538         pass
5539
5540     def testSymmetryPlusAggregationMFD1(self):
5541         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5542         fname1="Pyfile106_1.med"
5543         fname2="Pyfile106_2.med"
5544         fname3="Pyfile106_3.med"
5545         meshName="mesh"
5546         mm1=MEDFileUMesh()
5547         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5548         mm1.setCoords(da1)
5549         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5550         mm1_0.setCoords(da1)
5551         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5552         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5553         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5554         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5555         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5556         mm1[0]=mm1_0
5557         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5558         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5559         #
5560         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5561         mm1_1.setCoords(da1)
5562         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5563         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5564         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5565         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5566         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5567         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5568         mm1[-1]=mm1_1
5569         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5570         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5571         for i in range(1,10):
5572             mm1.setFamilyId("F%d"%i,i)
5573         mm1.setFamilyId("FAMILLE_ZERO",0)
5574         mm1.setFamilyId("H1",100)
5575         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5576         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5577         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5578         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5579         ##############
5580         mm2=MEDFileUMesh()
5581         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]"])
5582         mm2.setCoords(da1)
5583         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5584         mm2_0.setCoords(da1)
5585         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5586         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5587         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5588         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5589         mm2[0]=mm2_0
5590         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5591         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5592         #
5593         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5594         mm2_1.setCoords(da1)
5595         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5596         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5597         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5598         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5599         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5600         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5601         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5602         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5603         mm2[-1]=mm2_1
5604         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5605         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5606         for i in range(1,12):
5607             mm2.setFamilyId("G%d"%i,i+30)
5608         mm2.setFamilyId("H1",100)
5609         mm2.setFamilyId("FAMILLE_ZERO",0)
5610         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5611         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5612         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5613         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5614         #
5615         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5616         #######
5617         def CheckMesh(tester,mm):
5618             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]"])
5619             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5620             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])))
5621             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5622             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])))
5623             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5624             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5625             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5626             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5627             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5628             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)]
5629             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5630             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5631             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5632             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5633             pass
5634         CheckMesh(self,mm)
5635         ##
5636         fieldName="zeField"
5637         t1=(2.3,3,5)
5638         t2=(5.6,7,12)
5639         infoc=["dd [W]","eee [kA]"]
5640         ##
5641         fmts1=MEDFileFieldMultiTS()
5642         f1ts1=MEDFileField1TS()
5643         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5644         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5645         arr1.setInfoOnComponents(infoc)
5646         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5647         f1_1.checkConsistencyLight()
5648         f1ts1.setFieldNoProfileSBT(f1_1)
5649         #
5650         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5651         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5652         arr2.setInfoOnComponents(infoc)
5653         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5654         f1_2.checkConsistencyLight()
5655         f1ts1.setFieldNoProfileSBT(f1_2)
5656         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5657         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5658         arr3.setInfoOnComponents(infoc)
5659         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5660         f1_3.checkConsistencyLight()
5661         f1ts1.setFieldNoProfileSBT(f1_3)
5662         fmts1.pushBackTimeStep(f1ts1)
5663         #
5664         f1ts2=f1ts1.deepCopy()
5665         f1ts2.setTime(t2[1],t2[2],t2[0])
5666         f1ts2.getUndergroundDataArray()[:]+=2000
5667         fmts1.pushBackTimeStep(f1ts2)
5668         ### fmts2
5669         fmts2=MEDFileFieldMultiTS()
5670         f1ts3=MEDFileField1TS()
5671         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5672         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5673         arr4.setInfoOnComponents(infoc)
5674         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5675         f2_1.checkConsistencyLight()
5676         f1ts3.setFieldNoProfileSBT(f2_1)
5677         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5678         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5679         arr5.setInfoOnComponents(infoc)
5680         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5681         f2_2.checkConsistencyLight()
5682         f1ts3.setFieldNoProfileSBT(f2_2)
5683         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5684         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5685         arr6.setInfoOnComponents(infoc)
5686         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5687         f2_3.checkConsistencyLight()
5688         f1ts3.setFieldNoProfileSBT(f2_3)
5689         fmts2.pushBackTimeStep(f1ts3)
5690         #
5691         f1ts4=f1ts3.deepCopy()
5692         f1ts4.setTime(t2[1],t2[2],t2[0])
5693         f1ts4.getUndergroundDataArray()[:]+=2000
5694         fmts2.pushBackTimeStep(f1ts4)
5695         #
5696         mfd1=MEDFileData()
5697         mfd1.setMeshes(MEDFileMeshes())
5698         mfd1.getMeshes().pushMesh(mm1)
5699         mfd1.setFields(MEDFileFields())
5700         mfd1.getFields().pushField(fmts1)
5701         #
5702         mfd2=MEDFileData()
5703         mfd2.setMeshes(MEDFileMeshes())
5704         mfd2.getMeshes().pushMesh(mm2)
5705         mfd2.setFields(MEDFileFields())
5706         mfd2.getFields().pushField(fmts2)
5707         # ze Call !
5708         mfd=MEDFileData.Aggregate([mfd1,mfd2])
5709         def CheckMFD(tester,mfd):
5710             tester.assertEqual(len(mfd.getMeshes()),1)
5711             tester.assertEqual(len(mfd.getFields()),1)
5712             CheckMesh(self,mfd.getMeshes()[0])
5713             tester.assertEqual(len(mfd.getFields()[0]),2)
5714             zeF1=mfd.getFields()[0][0]
5715             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5716             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5717             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5718             ref.renumberCells(o2n)
5719             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5720             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5721             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5722             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5723             ref.renumberCells(o2n)
5724             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5725             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5726             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5727             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5728             ref.renumberCells(o2n)
5729             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5730             #
5731             zeF2=mfd.getFields()[0][1]
5732             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5733             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5734             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5735             ref.renumberCells(o2n)
5736             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5737             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5738             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5739             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5740             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5741             ref.renumberCells(o2n)
5742             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5743             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5744             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5745             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5746             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5747             ref.renumberCells(o2n)
5748             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5749             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5750         CheckMFD(self,mfd)
5751         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5752         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5753         CheckMFD(self,mfd)
5754         pass
5755
5756     def testExtrudedMesh1(self):
5757         fname="Pyfile107.med"
5758         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
5759         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
5760         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
5761         mm=MEDFileUMesh(ex)
5762         mm.write(fname,2)
5763         ex2=mm.convertToExtrudedMesh()
5764         mm2=MEDFileMesh.New(fname)
5765         ex3=mm2.convertToExtrudedMesh()
5766         self.assertTrue(ex.isEqual(ex2,1e-12))
5767         self.assertTrue(ex.isEqual(ex3,1e-12))
5768         pass
5769     
5770     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
5771     def testWriteInto30(self):
5772         fname="Pyfile108.med"
5773         fname2="Pyfile109.med"
5774         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
5775         mm=MEDFileUMesh() ; mm[0]=m
5776         mm.setFamilyId("FAMILLE_ZERO",0)
5777         #
5778         mm.write30(fname,2)
5779         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,0]) # checks that just written MED file has a version == 3.0.x
5780         mm2=MEDFileUMesh(fname)
5781         self.assertTrue(mm.isEqual(mm2,1e-12))
5782         #
5783         mm.write(fname2,2)
5784         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
5785         pass
5786
5787     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5788     def testPickelizationOfMEDFileObjects1(self):
5789         fname="Pyfile110.med"
5790         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)
5791         m0=MEDCouplingUMesh("Mesh",2)
5792         m0.allocateCells(5)
5793         m0.insertNextCell(NORM_TRI3,[1,4,2])
5794         m0.insertNextCell(NORM_TRI3,[4,5,2])
5795         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
5796         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
5797         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
5798         m0.finishInsertingCells()
5799         m0.setCoords(coo)
5800         m1=MEDCouplingUMesh(m0.getName(),1)
5801         m1.allocateCells(9)
5802         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
5803         for i in range(9):
5804             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
5805             pass
5806         m1.finishInsertingCells()
5807         m1.setCoords(coo)
5808         #
5809         m=MEDFileUMesh()
5810         m.setMeshAtLevel(0,m0)
5811         m.setMeshAtLevel(-1,m1)
5812         #
5813         dt=3 ; it=2 ; tim=4.5
5814         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
5815         fieldNode0.setName("fieldNode0")
5816         fieldNode0.setTime(tim,dt,it)
5817         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
5818         arr=DataArrayDouble([10,11,12,13,14])
5819         fieldNode0.setArray(arr)
5820         f0=MEDFileField1TS()
5821         f0.setFieldProfile(fieldNode0,m,0,pfl0)
5822         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
5823         fieldNode1.setName("fieldNode1")
5824         fieldNode1.setTime(tim,dt,it)
5825         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
5826         arr1=DataArrayDouble([20,21,22,23,24,25,26])
5827         fieldNode1.setArray(arr1)
5828         f1=MEDFileField1TS()
5829         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
5830         mfd=MEDFileData()
5831         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
5832         mfd.getMeshes().pushMesh(m)
5833         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
5834         mfd.getFields().pushField(fmts)
5835         # first start gently
5836         d=mfd.serialize()
5837         mfd2=MEDFileData(d)
5838         self.assertEqual(len(mfd2.getMeshes()),1)
5839         self.assertEqual(len(mfd2.getFields()),1)
5840         self.assertEqual(len(mfd2.getFields()[0]),1)
5841         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
5842         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
5843         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
5844         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
5845         # OK now end of joke -> serialization of MEDFileData
5846         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
5847         mfd3=pickle.loads(st)
5848         # check of object
5849         self.assertEqual(len(mfd3.getMeshes()),1)
5850         self.assertEqual(len(mfd3.getFields()),1)
5851         self.assertEqual(len(mfd3.getFields()[0]),1)
5852         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
5853         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
5854         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
5855         # serialization of MEDFileFields
5856         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
5857         fs4=pickle.loads(st)
5858         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
5859         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
5860         # serialization of MEDFileFieldMulitTS
5861         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
5862         fmts5=pickle.loads(st)
5863         ff5=fmts5[0].field(mfd3.getMeshes()[0])
5864         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
5865         # serialization of MEDFileField1TS
5866         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
5867         f1ts6=pickle.loads(st)
5868         ff6=f1ts6.field(mfd3.getMeshes()[0])
5869         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
5870         # serialization of MEDFileMeshes
5871         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
5872         ms7=pickle.loads(st)
5873         self.assertEqual(len(ms7),1)
5874         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
5875         pass
5876
5877     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5878     def testPickelizationOfMEDFileObjects2(self):
5879         # CMesh
5880         self.testMEDMesh6() # generates MEDFileMesh5.med file
5881         mm=MEDFileMesh.New("MEDFileMesh5.med")
5882         self.assertTrue(isinstance(mm,MEDFileCMesh))
5883         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
5884         mm2=pickle.loads(st)
5885         self.assertTrue(isinstance(mm2,MEDFileCMesh))
5886         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
5887         # CurveLinear
5888         self.testCurveLinearMesh1() # generates Pyfile55.med
5889         mm=MEDFileMesh.New("Pyfile55.med")
5890         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
5891         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
5892         mm3=pickle.loads(st)
5893         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
5894         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
5895         self.testInt32InMEDFileFieldStar1()# generates Pyfile63.med
5896         # MEDFileIntFieldMultiTS
5897         fs4=MEDFileFields("Pyfile63.med")
5898         ms4=MEDFileMeshes("Pyfile63.med")
5899         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
5900         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
5901         fmts5=pickle.loads(st)
5902         self.assertEqual(len(fs4[0]),len(fmts5))
5903         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
5904         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
5905         # MEDFileIntField1TS
5906         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
5907         f1ts6=pickle.loads(st)
5908         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
5909         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
5910         # MEDFileParameters
5911         self.testParameters1()# generates Pyfile56.med
5912         params=MEDFileParameters("Pyfile56.med")
5913         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
5914         params7=pickle.loads(st)
5915         self.assertEqual(len(params),len(params7))
5916         for i in range(len(params)):
5917             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
5918             pass
5919         pass
5920
5921     def testGlobalNumOnNodes1(self):
5922         """Test global number on nodes here. Used by partitionners."""
5923         fname="Pyfile112.med"
5924         arr=DataArrayDouble(5) ; arr.iota()
5925         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
5926         m.setName("mesh")
5927         mm=MEDFileUMesh()
5928         mm[0]=m
5929         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
5930         d=DataArrayInt([7,8,9,2,0])
5931         dRef=d.deepCopy()
5932         mm.setGlobalNumFieldAtLevel(1,d)
5933         mm.checkConsistency()
5934         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
5935         mm.checkConsistency()
5936         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
5937         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
5938         mm.write(fname,2)
5939         mm2=MEDFileMesh.New(fname)
5940         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5941         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
5942         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
5943         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5944         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
5945         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5946         pass
5947
5948     def testPartialReadOfEntities1(self):
5949         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
5950         fname="Pyfile113.med"
5951         arr=DataArrayDouble(5) ; arr.iota()
5952         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
5953         m.setName("mesh")
5954         mm=MEDFileUMesh()
5955         mm[0]=m
5956         #
5957         fieldName="Field"
5958         ts1=(5.,1,2)
5959         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
5960         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
5961         f1.setTime(*ts1)
5962         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
5963         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
5964         f2.setTime(*ts1)
5965         f1ts=MEDFileField1TS()
5966         f1ts.setFieldNoProfileSBT(f1)
5967         f1ts.setFieldNoProfileSBT(f2)
5968         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
5969         f1ts_2=f1ts.deepCopy()
5970         f1ts_2.getUndergroundDataArray()[:]+=2
5971         f1ts_2.setTime(3,4,6.)
5972         fmts=MEDFileFieldMultiTS()
5973         fmts.pushBackTimeStep(f1ts)
5974         fmts.pushBackTimeStep(f1ts_2)
5975         #
5976         mm.write(fname,2)
5977         fmts.write(fname,0)
5978         #
5979         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
5980         mm=MEDFileMesh.New(fname)
5981         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)
5982         fs.loadArrays()
5983         self.assertEqual(len(fs),1)
5984         fmts=fs[0]
5985         self.assertEqual(len(fmts),2)
5986         ff0=fmts[0] ; ff1=fmts[1]
5987         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
5988         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
5989         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
5990         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
5991         pass
5992     
5993     def testFloat32InMEDFileFieldStar1(self):
5994         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
5995         fname="Pyfile114.med"
5996         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
5997         f1=f1.convertToFloatField()
5998         m1=f1.getMesh()
5999         mm1=MEDFileUMesh.New()
6000         mm1.setCoords(m1.getCoords())
6001         mm1.setMeshAtLevel(0,m1)
6002         mm1.setName(m1.getName())
6003         mm1.write(fname,2)
6004         ff1=MEDFileFloatField1TS()
6005         ff1.setFieldNoProfileSBT(f1)
6006         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6007         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6008         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6009         ff1.write(fname,0)
6010         ff2=MEDFileAnyTypeField1TS.New(fname)
6011         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6012         self.assertEqual(ff2.getTime(),[0,1,2.0])
6013         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6014         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6015         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6016         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6017         ff2.setTime(1,2,3.)
6018         c=ff2.getUndergroundDataArray() ; c*=2
6019         ff2.write(fname,0) # 2 time steps in 
6020         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6021         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6022         self.assertEqual(len(ffs1),2)
6023         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6024         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6025         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6026         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6027         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6028         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6029         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6030         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6031         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6032         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6033         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6034         for it in ffs1:
6035             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6036             bc+=a.getArray()
6037             pass
6038         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6039         nf1=MEDCouplingFieldFloat(ON_NODES)
6040         nf1.setTime(9.,10,-1)
6041         nf1.setMesh(f1.getMesh())
6042         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6043         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6044         nff1=MEDFileFloatField1TS.New()
6045         nff1.setFieldNoProfileSBT(nf1)
6046         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6047         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6048         nff1.write(fname,0)
6049         #
6050         nf2=MEDCouplingFieldFloat(ON_NODES)
6051         nf2.setTime(19.,20,-11)
6052         nf2.setMesh(f1.getMesh())
6053         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6054         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6055         nff2=MEDFileFloatField1TS.New()
6056         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6057         nff2.setFieldProfile(nf2,mm1,0,npfl)
6058         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6059         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6060         self.assertTrue(b.isEqual(npfl))
6061         self.assertTrue(a.isEqual(narr2,1e-7))
6062         nff2.write(fname,0)
6063         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6064         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6065         self.assertTrue(b.isEqual(npfl))
6066         self.assertTrue(a.isEqual(narr2,1e-7))
6067         #
6068         nf3=MEDCouplingFieldDouble(ON_NODES)
6069         nf3.setName("VectorFieldOnNodesDouble")
6070         nf3.setTime(29.,30,-21)
6071         nf3.setMesh(f1.getMesh())
6072         nf3.setArray(f1.getMesh().getCoords())
6073         nff3=MEDFileField1TS.New()
6074         nff3.setFieldNoProfileSBT(nf3)
6075         nff3.write(fname,0)
6076         fs=MEDFileFields(fname)
6077         self.assertEqual(len(fs),4)
6078         ffs=[it for it in fs]
6079         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6080         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6081         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6082         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6083         #
6084         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6085         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6086         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6087         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6088         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6089         #
6090         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6091         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6092         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6093         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6094         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6095         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6096         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6097         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6098         #
6099         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6100         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6101         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6102         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6103         pass
6104
6105     def testPenta18_1(self):
6106         """EDF8478 : Test of read/write of penta18"""
6107         fname="Pyfile115.med"
6108         arr=DataArrayDouble([
6109             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6110             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6111             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6112             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6113             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6114             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6115         m=MEDCouplingUMesh("mesh",3)
6116         m.setCoords(arr)
6117         m.allocateCells(1)
6118         m.insertNextCell(NORM_PENTA18,list(range(18)))
6119         m.checkConsistencyLight()
6120         #
6121         f=MEDCouplingFieldDouble(ON_NODES)
6122         f.setMesh(m)
6123         f.setName("FieldOnPenta18")
6124         f.setArray(DataArrayDouble(list(range(18))))
6125         f.checkConsistencyLight()
6126         #
6127         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6128         #
6129         f2=MEDCouplingFieldDouble(ON_NODES)
6130         f2.setMesh(m)
6131         f2.setName("FieldOnPenta18Sub")
6132         f2.setArray(DataArrayDouble(list(range(18))))
6133         f2.checkConsistencyLight()
6134         WriteField(fname,f2,True)
6135         f3=ReadField(fname)
6136         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6137         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6138         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6139         pass
6140
6141     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
6142     def testMedFileCapabilityToCryOnNewFeatureWritingIntoOldFiles(self):
6143         fname="Pyfile116.med"
6144         errfname="Pyfile116.err"
6145         c=DataArrayDouble([0,1,2,3])
6146         m=MEDCouplingCMesh()
6147         m.setCoords(c,c)
6148         m=m.buildUnstructured()
6149         m.setName("mesh")
6150         mm=MEDFileUMesh()
6151         mm[0]=m
6152         f=MEDCouplingFieldInt(ON_CELLS)
6153         f.setMesh(m) ; arr2=DataArrayInt(m.getNumberOfCells()) ; arr2.iota()
6154         f.setArray(arr2)
6155         f.setName("field")
6156         f1ts=MEDFileIntField1TS()
6157         f1ts.setFieldNoProfileSBT(f)
6158         mm.write30(fname,2)
6159         f1ts.write30(fname,0)
6160         #
6161         f=MEDCouplingFieldFloat(ON_CELLS)
6162         f.setMesh(m) ; arr2=DataArrayFloat(m.getNumberOfCells()) ; arr2.iota()
6163         f.setArray(arr2)
6164         f.setName("field2")
6165         f1ts=MEDFileFloatField1TS()
6166         f1ts.setFieldNoProfileSBT(f)
6167         #
6168         import os,gc
6169         tmp=StdOutRedirect(errfname)
6170         self.assertRaises(InterpKernelException,f1ts.write30,fname,0)
6171         del tmp
6172         gc.collect(0)
6173         if os.path.exists(errfname):
6174             os.remove(errfname)
6175         pass
6176     
6177     pass
6178
6179 if __name__ == "__main__":
6180     unittest.main()