Salome HOME
Merge V8_4_BR branch.
[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             def close(self):
54                 os.fsync(self.f)
55                 self.f.close();
56         sys.stderr=FlushFile(os.fdopen(self.fdOfSinkFile,"w"))
57     def __del__(self):
58         import os,sys
59         sys.stderr.close()
60         sys.stderr=self.origPyVal
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 fictitious 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         self.assertTrue(mm.getNodeFamiliesArr(["MyFam","MyOtherFam"]).isEqual(DataArrayInt([1,3,4,12]))) # find family id 2 and 3 into famCoo
2061         #
2062         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2063         mm.addNodeGroup(daTest)
2064         self.assertTrue(mm.getNodeGroupArr(daTest.getName()).isEqual(daTest)) # the node group has been pushed right before -> now read it
2065         self.assertTrue(mm.getNodeGroupsArr(["grp1","grpA"]).isEqual(DataArrayInt([1,3,4,6,9,10,11,12])))#daTest+[11] because 11 is the rank of -1 (MyOther-1) in famCoo
2066         #
2067         expect1=DataArrayInt([1,4]) ; expect1.setName("MyFam")
2068         self.assertTrue(mm.getNodeFamilyArr(expect1.getName()).isEqual(expect1))
2069         #
2070         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2071         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2072         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2073             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2074             pass
2075         self.assertEqual(mm.getFamiliesNames(),('Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2076         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2077         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2078         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2079         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2080             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2081             pass
2082         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_8'))
2083         da=DataArrayInt([3,12]) ; da.setName("grp0")
2084         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2085         da.setValues([1])
2086         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2087         mm.write(fname,2)
2088         mm=MEDFileMesh.New(fname)
2089         self.assertTrue(mm.getGroupArr(1,daTest.getName()).isEqual(daTest))
2090         self.assertTrue(mm.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([6,2,6,8,2,6,5,6,6,7,7,4,8])))
2091         for lev,arr in [(0,da0),(-1,da1),(-2,da2)]:
2092             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2093             pass
2094         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_4','Family_5','Family_7','Family_8','MyFam','MyOther-1','MyOtherFam'))
2095         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2096         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2097         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2098         for famName,famId in [('Family_4',4),('Family_5',5),('Family_7',7),('Family_8',8)]:
2099             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2100             pass
2101         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_8','MyOtherFam'))
2102         da=DataArrayInt([3,12]) ; da.setName("grp0")
2103         self.assertTrue(mm.getGroupArr(1,"grp0").isEqual(da))
2104         da.setValues([1])
2105         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2106         pass
2107
2108     def testMEDUMeshAddGroup1(self):
2109         fname="Pyfile54.med"
2110         m=MEDFileUMesh()
2111         coo=DataArrayDouble(9) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
2112         m0=MEDCouplingUMesh("toto",2) ; m0.allocateCells(0)
2113         for i in range(7):
2114             m0.insertNextCell(NORM_TRI3,[1,2,1])
2115             pass
2116         for i in range(4):
2117             m0.insertNextCell(NORM_QUAD4,[1,1,2,0])
2118             pass
2119         for i in range(2):
2120             m0.insertNextCell(NORM_POLYGON,[0,0,1,1,2,2])
2121             pass
2122         m1=MEDCouplingUMesh("toto",1) ; m1.allocateCells(0) ; m1.insertNextCell(NORM_SEG2,[1,6]) ; m1.insertNextCell(NORM_SEG2,[7,3])
2123         m2=MEDCouplingUMesh("toto",0) ; m2.allocateCells(0) ; m2.insertNextCell(NORM_POINT1,[2]) ; m2.insertNextCell(NORM_POINT1,[6]) ; m2.insertNextCell(NORM_POINT1,[8])
2124         m0.setCoords(coo) ; m.setMeshAtLevel(0,m0)
2125         m1.setCoords(coo) ; m.setMeshAtLevel(-1,m1)
2126         m2.setCoords(coo) ; m.setMeshAtLevel(-2,m2)
2127         #
2128         mm=m.deepCopy()
2129         famCoo=DataArrayInt([0,2,0,3,2,0,-1,0,0,0,0,-1,3]) ; mm.setFamilyFieldArr(0,famCoo)
2130         da0=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(1,da0)
2131         da1=DataArrayInt([0,3]) ; mm.setFamilyFieldArr(-1,da1)
2132         da2=DataArrayInt([0,0,0]) ; mm.setFamilyFieldArr(-2,da2)
2133         mm.setFamilyId("MyFam",2)
2134         mm.setFamilyId("MyOtherFam",3)
2135         mm.setFamilyId("MyOther-1",-1)
2136         mm.setFamiliesOnGroup("grp0",["MyOtherFam"])
2137         mm.setFamiliesOnGroup("grpA",["MyOther-1"])
2138         #
2139         daTest=DataArrayInt([1,3,4,6,9,10,12]) ; daTest.setName("grp1")
2140         mm.addGroup(0,daTest)
2141         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2142         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2143         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2144             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2145             pass
2146         self.assertEqual(mm.getFamiliesNames(),('Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2147         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2148         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2149         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2150         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2151             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2152             pass
2153         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('MyOtherFam','Family_-8'))
2154         da=DataArrayInt([3,12]) ; da.setName("grp0")
2155         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2156         da.setValues([1])
2157         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2158         mm.write(fname,2)
2159         mm=MEDFileMesh.New(fname)
2160         self.assertTrue(mm.getGroupArr(0,daTest.getName()).isEqual(daTest))
2161         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-6,2,-6,-8,2,-6,-5,-6,-6,-7,-7,-4,-8])))
2162         for lev,arr in [(1,da0),(-1,da1),(-2,da2)]:
2163             self.assertTrue(mm.getFamilyFieldAtLevel(lev).isEqual(arr))
2164             pass
2165         self.assertEqual(mm.getFamiliesNames(),('FAMILLE_ZERO','Family_-4','Family_-5','Family_-7','Family_-8','MyFam','MyOther-1','MyOtherFam'))
2166         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grpA'))
2167         self.assertEqual(mm.getFamilyNameGivenId(3),'MyOtherFam')
2168         self.assertEqual(mm.getFamilyNameGivenId(2),'MyFam')
2169         for famName,famId in [('Family_-4',-4),('Family_-5',-5),('Family_-7',-7),('Family_-8',-8)]:
2170             self.assertEqual(mm.getFamilyNameGivenId(famId),famName)
2171             pass
2172         self.assertEqual(mm.getFamiliesOnGroup("grp0"),('Family_-8','MyOtherFam'))
2173         da=DataArrayInt([3,12]) ; da.setName("grp0")
2174         self.assertTrue(mm.getGroupArr(0,"grp0").isEqual(da))
2175         da.setValues([1])
2176         self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
2177         pass
2178
2179     def testHeapMem1(self):
2180         a=DataArrayInt() ; aa=a.getHeapMemorySize()
2181         a.alloc(0,1)
2182         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
2183         #
2184         m=MEDCouplingCMesh()
2185         arr=DataArrayDouble(10,1) ; arr.iota(0)
2186         m.setCoords(arr,arr)
2187         m=m.buildUnstructured()
2188         m.setName("mm")
2189         f=m.getMeasureField(False)
2190         self.assertIn(m.getHeapMemorySize(), list(range(3552 - 100, 3552 + 100 + 4 * strMulFac)))
2191         self.assertIn(f.getHeapMemorySize(), list(range(4215 - 100, 4215 + 100 + 8 * strMulFac)))
2192         #
2193         mm=MEDFileUMesh()
2194         mm.setMeshAtLevel(0,m)
2195         self.assertIn(mm.getHeapMemorySize(), list(range(3889 - 100, 4225 + 100 + 10 * strMulFac)))
2196         ff=MEDFileField1TS()
2197         ff.setFieldNoProfileSBT(f)
2198         self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac)))
2199         #
2200         fff=MEDFileFieldMultiTS()
2201         fff.appendFieldNoProfileSBT(f)
2202         self.assertIn(fff.getHeapMemorySize(), list(range(815 - 50, 915 + 30 + (6 + 2) * strMulFac)))
2203         f.setTime(1.,0,-1)
2204         fff.appendFieldNoProfileSBT(f)
2205         self.assertIn(fff.getHeapMemorySize(), list(range(1594 - 90, 1794 + 50 + (10 + 1) * strMulFac)))
2206         self.assertIn(fff[0, -1].getHeapMemorySize(), list(range(771 - 40, 871 + 20 + (4 + 1) * strMulFac)))
2207         f2=f[:50]
2208         f2.setTime(2.,1,-1)
2209         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
2210         fff.appendFieldProfile(f2,mm,0,pfl)
2211         self.assertIn(fff.getHeapMemorySize(), list(range(2348 - 130, 2608 + 100 + (10 + 2) * strMulFac)))
2212         self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(204 - 10, 204 + 10 + 2 * strMulFac)))
2213         self.assertIn(fff[1, -1].getHeapMemorySize(), list(range(738 - 50, 838 + 30 + 4 * strMulFac)))
2214         pass
2215
2216     def testCurveLinearMesh1(self):
2217         fname="Pyfile55.med"
2218         mesh=MEDCouplingCurveLinearMesh();
2219         mesh.setTime(2.3,4,5);
2220         mesh.setTimeUnit("us");
2221         mesh.setName("Example of Cuve linear mesh");
2222         mesh.setDescription("buildCLMesh");
2223         a1=DataArrayDouble(3*20,1);
2224         a1.iota(7.) ; a1.rearrange(3);
2225         mesh.setCoords(a1);
2226         mesh.setNodeGridStructure([4,5]);
2227         mesh.checkConsistencyLight();
2228         #
2229         m=MEDFileCurveLinearMesh()
2230         m.setMesh(mesh)
2231         d=DataArrayInt(20) ; d.iota(4)
2232         m.setFamilyFieldArr(1,d)
2233         d3=DataArrayInt(20) ; d3.iota(400)
2234         m.setRenumFieldArr(1,d3)
2235         d2=DataArrayInt(12) ; d2.iota(40)
2236         m.setFamilyFieldArr(0,d2)
2237         d4=DataArrayInt(21) ; d4.iota(4000)
2238         self.assertRaises(InterpKernelException,m.setRenumFieldArr,1,d4)
2239         d4.popBackSilent()
2240         m.setRenumFieldArr(1,d4)
2241         m.write(fname,2)
2242         #
2243         m1=MEDFileCurveLinearMesh(fname)
2244         mm=m1.getMesh()
2245         self.assertTrue(mm.isEqual(mesh,1e-12))
2246         self.assertEqual(mm.getSpaceDimension(),3)
2247         self.assertEqual(mm.getSpaceDimensionOnNodeStruct(),2)
2248         #
2249         m1=MEDFileMesh.New(fname)
2250         self.assertTrue(isinstance(m1,MEDFileCurveLinearMesh))
2251         self.assertTrue(isinstance(m1.getUnivName(),str))
2252         self.assertTrue(len(m1.getUnivName())!=0)
2253         self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
2254         pass
2255
2256     def testParameters1(self):
2257         fname="Pyfile56.med"
2258         m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh")
2259         mm=MEDFileCMesh() ; mm.setMesh(m)
2260         ms=MEDFileMeshes() ; ms.pushMesh(mm)
2261         data=MEDFileData()
2262         p=MEDFileParameters()
2263         data.setParams(p) ; data.setMeshes(ms)
2264         pts=MEDFileParameterMultiTS()
2265         pts.setName("A") ; pts.setDescription("An example of parameter") ; pts.setTimeUnit("ms")
2266         pts.appendValue(1,2,3.4,567.89)
2267         pts.appendValue(2,3,5.6,999.123)
2268         pts2=pts.deepCopy() ; pts2.setName("B") ; pts2.setDescription("A second example")
2269         p.pushParam(pts) ; p.pushParam(pts2)
2270         data.write(fname,2)
2271         p2=MEDFileParameters(fname)
2272         self.assertTrue(p.isEqual(p2,1e-14)[0])
2273         self.assertAlmostEqual(p[1][1,2].getValue(),567.89,13)
2274         p3=p.deepCopy()
2275         pts4=pts2.deepCopy()
2276         pts3=pts2.deepCopy()
2277         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2278         pts2.eraseTimeStepIds([0])
2279         self.assertTrue(not pts3.isEqual(pts2,1e-14)[0])
2280         del pts3[[3.4]]
2281         self.assertTrue(pts3.isEqual(pts2,1e-14)[0])
2282         self.assertRaises(InterpKernelException,p[1].__getitem__,(1,2))
2283         self.assertRaises(InterpKernelException,p["B"].__getitem__,(1,2))
2284         self.assertAlmostEqual(p[0][1,2].getValue(),567.89,13)
2285         self.assertAlmostEqual(p["A"][1,2].getValue(),567.89,13)
2286         p=p3
2287         self.assertTrue(p.isEqual(p2,1e-14)[0])
2288         self.assertTrue(p2["B"].isEqual(pts,1e-14)[0])
2289         self.assertTrue(not p2["B"].isEqual(pts2,1e-14)[0])
2290         self.assertAlmostEqual(p2[0][1,2].getValue(),567.89,13)
2291         self.assertEqual(p.getParamsNames(),('A','B'))
2292         ptsr=MEDFileParameterMultiTS(fname,"B")
2293         self.assertTrue(ptsr.isEqual(pts4,1e-14)[0])
2294         ptsr=MEDFileParameterMultiTS(fname)
2295         self.assertTrue(ptsr.isEqual(pts,1e-14)[0])
2296         p1tsr=MEDFileParameterDouble1TS(fname)
2297         self.assertEqual(p1tsr.getName(),"A")
2298         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2299         p1tsr=MEDFileParameterDouble1TS(fname,"B")
2300         self.assertEqual(p1tsr.getName(),"B")
2301         self.assertAlmostEqual(p1tsr.getValue(),567.89,13)
2302         p1tsr=MEDFileParameterDouble1TS(fname,"B",2,3)
2303         self.assertEqual(p1tsr.getName(),"B")
2304         self.assertAlmostEqual(p1tsr.getValue(),999.123,13)
2305         data2=MEDFileData(fname)
2306         self.assertEqual(2,data2.getNumberOfParams())
2307         self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
2308         pass
2309
2310     def testNamesOnCellAndNodesInMeshes1(self):
2311         fname="Pyfile58.med"
2312         fname2="Pyfile59.med"
2313         m=MEDLoaderDataForTest.build3DSurfMesh_1()
2314         m1=m.buildDescendingConnectivity()[0]
2315         m1.sortCellsInMEDFileFrmt()
2316         #
2317         mm=MEDFileUMesh()
2318         mm.setMeshAtLevel(0,m)
2319         mm.setMeshAtLevel(-1,m1)
2320         namesCellL0=DataArrayAsciiChar(6,16)
2321         namesCellL0[:] = ["CellL0#%.3d      " % (i) for i in range(6)]
2322         mm.setNameFieldAtLevel(0,namesCellL0)
2323         namesCellL1=DataArrayAsciiChar.Aggregate([namesCellL0,namesCellL0,namesCellL0.subArray(2)])
2324         namesCellL1[:] = ["CellLM1#%.3d     " % (i) for i in range(16)]
2325         mm.setNameFieldAtLevel(-1,namesCellL1)
2326         namesNodes=namesCellL1.subArray(4,16)
2327         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(12)]
2328         mm.setNameFieldAtLevel(1,namesNodes)
2329         mm.write(fname,2)
2330         #
2331         mmr=MEDFileMesh.New(fname)
2332         self.assertTrue(mm.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2333         self.assertTrue(mm.getNameFieldAtLevel(-1).isEqual(DataArrayAsciiChar(["CellLM1#%.3d     " % (i) for i in range(16)])))
2334         self.assertTrue(mm.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(12)])))
2335         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2336         mmr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2337         self.assertTrue(not mm.isEqual(mmr,1e-12)[0])
2338         mmr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2339         self.assertTrue(mm.isEqual(mmr,1e-12)[0])
2340         mmCpy=mm.deepCopy()
2341         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2342         # remove names on nodes
2343         mmCpy.setNameFieldAtLevel(1,None)
2344         self.assertTrue(not mm.isEqual(mmCpy,1e-12)[0])
2345         mm.setNameFieldAtLevel(1,None)
2346         self.assertTrue(mm.isEqual(mmCpy,1e-12)[0])
2347         mm.setNameFieldAtLevel(-1,None)
2348         mm.write(fname,2)
2349         mmr=MEDFileMesh.New(fname)
2350         self.assertEqual(mmr.getNameFieldAtLevel(1),None)
2351         self.assertTrue(mmr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["CellL0#%.3d      " % (i) for i in range(6)])))
2352         self.assertEqual(mmr.getNameFieldAtLevel(-1),None)
2353         #
2354         c=MEDCouplingCMesh()
2355         arr=DataArrayDouble([0.,1.1,2.3])
2356         c.setCoords(arr,arr)
2357         c.setName("cmesh")
2358         cc=MEDFileCMesh()
2359         cc.setMesh(c)
2360         cc.setNameFieldAtLevel(0, DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)]))
2361         cc.setNameFieldAtLevel(1, DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)]))
2362         cc.write(fname2,2)
2363         ccr=MEDFileMesh.New(fname2)
2364         self.assertTrue(ccr.getNameFieldAtLevel(0).isEqual(DataArrayAsciiChar(["Cell#%.3d        " % (i) for i in range(4)])))
2365         self.assertTrue(ccr.getNameFieldAtLevel(1).isEqual(DataArrayAsciiChar(["Node#%.3d        " % (i) for i in range(9)])))
2366         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2367         ccr.getNameFieldAtLevel(1).setIJ(0,0,'M')
2368         self.assertTrue(not cc.isEqual(ccr,1e-12)[0])
2369         ccr.getNameFieldAtLevel(1).setIJ(0,0,'N')
2370         self.assertTrue(cc.isEqual(ccr,1e-12)[0])
2371         ccCpy=cc.deepCopy()
2372         self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
2373         pass
2374
2375     def testToExportInExamples1(self):
2376         m=MEDCouplingCMesh()
2377         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2378         m.setCoords(arr,arr)
2379         m=m.buildUnstructured() ; m.setName("mesh")
2380         grp1=DataArrayInt([0,1,2,4,5,6,8,9,10,12,13,14]) ; grp1.setName("grp1")
2381         grp2=DataArrayInt([3,7,11,15]) ; grp2.setName("grp2")
2382         m2=m.computeSkin()
2383         mm=MEDFileUMesh()
2384         mm.setMeshAtLevel(0,m)
2385         mm.setMeshAtLevel(-1,m2)
2386         mm.setGroupsAtLevel(0,[grp1,grp2])
2387         mm.write("example.med",2)
2388         #
2389         m0=mm.getMeshAtLevel(0)
2390         m1=mm.getMeshAtLevel(-1)
2391         grp1=mm.getGroupArr(0,"grp1")
2392         grp2=mm.getGroupArr(0,"grp2")
2393         grps=[grp1,grp2]
2394         whichGrp=DataArrayInt(m0.getNumberOfCells())
2395         whichGrp.fillWithValue(-1)
2396         for grpId,grp in enumerate(grps):
2397             whichGrp[grp]=grpId
2398             pass
2399         a,b,bI,c,cI=m0.buildDescendingConnectivity()
2400         e,f=a.areCellsIncludedIn(m1,2)
2401         self.assertTrue(e)
2402         c2,c2I=MEDCouplingUMesh.ExtractFromIndexedArrays(f,c,cI)
2403         self.assertTrue(c2I.deltaShiftIndex().isUniform(1))
2404         c2.transformWithIndArr(whichGrp)
2405         splitOfM1=len(grps)*[None]
2406         for grpId,grp in enumerate(grps):
2407             tmp=c2.findIdsEqual(grpId)
2408             splitOfM1[grpId]=tmp
2409             pass
2410         splitOfM1[0].isEqual(DataArrayInt([0,1,2,3,6,8,10,11,12,13]))
2411         splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
2412         pass
2413
2414     def testBugCorrection1(self):
2415         fs=MEDFileFields()
2416         fs.resize(3)
2417         self.assertEqual(fs[0],None)
2418         self.assertEqual(3,len(fs))
2419         pass
2420
2421     def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
2422         f1Name="Pyfile60.med"
2423         f2Name="Pyfile61.med"
2424         d1=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2425         d1.write(f1Name,2)
2426         d2=MEDLoaderDataForTest.buildACompleteMEDDataStructureWithFieldsOnCells_1()
2427         d2.write(f2Name,2)
2428         # reading and compare
2429         d1=MEDFileData(f1Name) ; d2=MEDFileData(f2Name)
2430         for mn in d1.getMeshes().getMeshesNames():
2431             m1=d1.getMeshes()[mn]
2432             m2=d2.getMeshes()[mn]
2433             for lev in m1.getNonEmptyLevels():
2434                 grpsNames=m1.getGroupsOnSpecifiedLev(lev)
2435                 for grpName in grpsNames:
2436                     self.assertTrue(m1.getGroupArr(lev,grpName).isEqual(m2.getGroupArr(lev,grpName))) # compare groups
2437                     pass
2438                 pass
2439             pass
2440         for fieldn in d1.getFields().getFieldsNames():
2441             f1=d1.getFields()[fieldn]
2442             f2=d2.getFields()[fieldn]
2443             for it,order,tim in f1.getTimeSteps():
2444                 f1t=f1[it,order]
2445                 f2t=f2[it,order]
2446                 if len(f1t.getPflsReallyUsed())!=0:
2447                     # profile case
2448                     for lev in f1t.getNonEmptyLevels()[1]:
2449                         arr1,pfl1=f1t.getFieldWithProfile(ON_CELLS,lev,m1)
2450                         arr2,pfl2=f2t.getFieldWithProfile(ON_CELLS,lev,m2)
2451                         self.assertTrue(pfl1.isEqual(pfl2))
2452                         self.assertTrue(arr1.isEqual(arr2,1e-10))
2453                         pass
2454                     pass
2455                 else:
2456                     # no profile case
2457                     for lev in f1t.getNonEmptyLevels()[1]:
2458                         f1mc=f1t.getFieldOnMeshAtLevel(ON_CELLS,lev,m1)
2459                         f2mc=f2t.getFieldOnMeshAtLevel(ON_CELLS,lev,m2)
2460                         self.assertTrue(f1mc.isEqual(f2mc,1e-10,1e-10))
2461                         pass
2462                     pass
2463                 pass
2464             pass
2465         pass
2466
2467     def testNonRegBugNormalizeFamIdsMEDFile1(self):
2468         m=MEDCouplingCMesh()
2469         arr=DataArrayDouble([0.,1.,2.,3.,4.])
2470         m.setCoords(arr,arr,arr)
2471         m=m.buildUnstructured()
2472         m2=m.buildDescendingConnectivity()[0]
2473         m.setName("mesh")
2474         g1=DataArrayInt([0,1,2,3]) ; g1.setName("g1")
2475         g2=DataArrayInt([2,3,5,6]) ; g2.setName("g2")
2476         g1Face=DataArrayInt([20,21,22,23]) ; g1Face.setName("g1Face")
2477         g2Face=DataArrayInt([22,23,25,26]) ; g2Face.setName("g2Face")
2478         g1Node=DataArrayInt([10,11,12,13]) ; g1Node.setName("g1Node")
2479         g2Node=DataArrayInt([12,13,15,16]) ; g2Node.setName("g2Node")
2480         mm=MEDFileUMesh()
2481         mm.setMeshAtLevel(0,m)
2482         mm.setGroupsAtLevel(0,[g1,g2])
2483         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2484         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2485         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2486         mm.normalizeFamIdsMEDFile()
2487         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2488         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2489         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2490         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2491         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2492         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2493         for g in mm.getGroupsOnSpecifiedLev(0):
2494             for f in mm.getFamiliesIdsOnGroup(g):
2495                 self.assertTrue(f<0)
2496                 pass
2497             pass
2498         #
2499         mm=MEDFileUMesh()
2500         mm.setMeshAtLevel(0,m)
2501         mm.setMeshAtLevel(-1,m2)
2502         mm.setGroupsAtLevel(0,[g1,g2])
2503         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2504         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2505         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2506         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2507         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2508         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2509         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2510         mm.normalizeFamIdsMEDFile()
2511         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2512         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2513         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2514         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2515         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2516         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2517         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2518         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2519         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2520         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2521         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2522         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2523         for lev in [0,-1]:
2524             for g in mm.getGroupsOnSpecifiedLev(lev):
2525                 for f in mm.getFamiliesIdsOnGroup(g):
2526                     self.assertTrue(f<0)
2527                     pass
2528                 pass
2529             pass
2530          #
2531         mm=MEDFileUMesh()
2532         mm.setMeshAtLevel(0,m)
2533         mm.setMeshAtLevel(-1,m2)
2534         mm.setGroupsAtLevel(0,[g1,g2])
2535         mm.setGroupsAtLevel(-1,[g1Face,g2Face])
2536         mm.setGroupsAtLevel(1,[g1Node,g2Node])
2537         s1=set(mm.getFamiliesOnGroup("g1")) ; s2=set(mm.getFamiliesOnGroup("g2"))
2538         s3=set(mm.getFamiliesOnGroup("g1Face")) ; s4=set(mm.getFamiliesOnGroup("g2Face"))
2539         s5=set(mm.getFamiliesOnGroup("g1Node")) ; s6=set(mm.getFamiliesOnGroup("g2Node"))
2540         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2541         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2542         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2543         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2544         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2545         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2546         mm.normalizeFamIdsMEDFile()
2547         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1"),(0,))
2548         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2"),(0,))
2549         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Face"),(-1,))
2550         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Face"),(-1,))
2551         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g1Node"),(1,))
2552         self.assertEqual(mm.getGrpNonEmptyLevelsExt("g2Node"),(1,))
2553         self.assertTrue(mm.getGroupArr(0,"g1").isEqual(g1))
2554         self.assertTrue(mm.getGroupArr(0,"g2").isEqual(g2))
2555         self.assertTrue(mm.getGroupArr(-1,"g1Face").isEqual(g1Face))
2556         self.assertTrue(mm.getGroupArr(-1,"g2Face").isEqual(g2Face))
2557         self.assertTrue(mm.getGroupArr(1,"g1Node").isEqual(g1Node))
2558         self.assertTrue(mm.getGroupArr(1,"g2Node").isEqual(g2Node))
2559         self.assertEqual(s1,set(mm.getFamiliesOnGroup("g1")))
2560         self.assertEqual(s2,set(mm.getFamiliesOnGroup("g2")))
2561         self.assertEqual(s3,set(mm.getFamiliesOnGroup("g1Face")))
2562         self.assertEqual(s4,set(mm.getFamiliesOnGroup("g2Face")))
2563         self.assertEqual(s5,set(mm.getFamiliesOnGroup("g1Node")))
2564         self.assertEqual(s6,set(mm.getFamiliesOnGroup("g2Node")))
2565         for lev in [0,-1]:
2566             for g in mm.getGroupsOnSpecifiedLev(lev):
2567                 for f in mm.getFamiliesIdsOnGroup(g):
2568                     self.assertTrue(f<0)
2569                     pass
2570                 pass
2571             pass
2572         for g in mm.getGroupsOnSpecifiedLev(1):
2573             for f in mm.getFamiliesIdsOnGroup(g):
2574                 self.assertTrue(f>0)
2575                 pass
2576             pass
2577         pass
2578     
2579     def testNonRegressionMantis22212ChangeGrpName(self):
2580         fileName="Pyfile62.med"
2581         m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
2582         m=MEDFileUMesh.New()
2583         m.setCoords(m2.getCoords())
2584         m.setMeshAtLevel(0,m2)
2585         m.setMeshAtLevel(-1,m1)
2586         m.setMeshAtLevel(-2,m0)
2587         m.setFamilyFieldArr(0,f2)
2588         m.setFamilyFieldArr(-1,f1)
2589         m.setFamilyFieldArr(-2,f0)
2590         m.setFamilyFieldArr(1,p)
2591         nbOfFams=len(fns)
2592         for i in range(nbOfFams):
2593             m.addFamily(fns[i],fids[i])
2594             pass
2595         nbOfGrps=len(grpns)
2596         for i in range(nbOfGrps):
2597             m.setFamiliesIdsOnGroup(grpns[i],famIdsPerGrp[i])
2598             pass
2599         m.setName(m2.getName())
2600         m.setDescription(m2.getDescription())
2601         m.write(fileName,2)
2602         #
2603         mm0=MEDFileMesh.New(fileName)
2604         mm1=MEDFileMesh.New(fileName)
2605         groupNamesIni=GetMeshGroupsNames(fileName,"ma")
2606         for name in groupNamesIni:
2607             mm1.changeGroupName(name,name+'N')
2608             pass
2609         mm1.write(fileName,2)
2610         del mm1
2611         #
2612         mm2=MEDFileMesh.New(fileName)
2613         for name in groupNamesIni:
2614             for lev in mm0.getGrpNonEmptyLevelsExt(name):
2615                 arr0=mm0.getGroupArr(lev,name)
2616                 arr2=mm2.getGroupArr(lev,name+'N')
2617                 arr0.setName(name+'N')
2618                 self.assertTrue(arr0.isEqual(arr2))
2619                 pass
2620             pass
2621         pass
2622
2623     def testInt32InMEDFileFieldStar1(self):
2624         fname="Pyfile63.med"
2625         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
2626         f1=f1.convertToIntField()
2627         m1=f1.getMesh()
2628         mm1=MEDFileUMesh.New()
2629         mm1.setCoords(m1.getCoords())
2630         mm1.setMeshAtLevel(0,m1)
2631         mm1.setName(m1.getName())
2632         mm1.write(fname,2)
2633         ff1=MEDFileIntField1TS()
2634         ff1.setFieldNoProfileSBT(f1)
2635         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,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         ff1.write(fname,0)
2639         a,b=ff1.getUndergroundDataArrayExt()
2640         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
2641         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
2642         ff2=MEDFileAnyTypeField1TS.New(fname)
2643         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
2644         self.assertEqual(ff2.getTime(),[0,1,2.0])
2645         self.assertTrue(isinstance(ff2,MEDFileIntField1TS))
2646         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2647         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2648         self.assertTrue(a.isEqual(f1,1e-12,0))
2649         ff2.setTime(1,2,3.)
2650         c=ff2.getUndergroundDataArray() ; c*=2
2651         ff2.write(fname,0) # 2 time steps in
2652         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
2653         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
2654         self.assertEqual(len(ffs1),2)
2655         self.assertTrue(isinstance(ffs1,MEDFileIntFieldMultiTS))
2656         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2657         self.assertTrue(a.isEqual(f1,1e-12,0))
2658         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
2659         self.assertTrue(a.isEqual(f1,1e-12,0))
2660         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
2661         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
2662         self.assertTrue(a.getArray().isEqual(2*f1.getArray()))
2663         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
2664         self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2
2665         bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
2666         for it in ffs1:
2667             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
2668             bc+=a.getArray()
2669             pass
2670         self.assertTrue(bc.isEqual(3*f1.getArray()))
2671         nf1=MEDCouplingFieldInt(ON_NODES)
2672         nf1.setTime(9.,10,-1)
2673         nf1.setMesh(f1.getMesh())
2674         narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
2675         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
2676         nff1=MEDFileIntField1TS.New()
2677         nff1.setFieldNoProfileSBT(nf1)
2678         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
2679         self.assertEqual(nff1.getTime(),[10,-1,9.0])
2680         nff1.write(fname,0)
2681         #
2682         nf2=MEDCouplingFieldInt(ON_NODES)
2683         nf2.setTime(19.,20,-11)
2684         nf2.setMesh(f1.getMesh())
2685         narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
2686         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
2687         nff2=MEDFileIntField1TS.New()
2688         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
2689         nff2.setFieldProfile(nf2,mm1,0,npfl)
2690         nff2.getFieldWithProfile(ON_NODES,0,mm1)
2691         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2692         self.assertTrue(b.isEqual(npfl))
2693         self.assertTrue(a.isEqual(narr2))
2694         nff2.write(fname,0)
2695         nff2bis=MEDFileIntField1TS(fname,"VectorFieldOnNodesPfl")
2696         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
2697         self.assertTrue(b.isEqual(npfl))
2698         self.assertTrue(a.isEqual(narr2))
2699         #
2700         nf3=MEDCouplingFieldDouble(ON_NODES)
2701         nf3.setName("VectorFieldOnNodesDouble")
2702         nf3.setTime(29.,30,-21)
2703         nf3.setMesh(f1.getMesh())
2704         nf3.setArray(f1.getMesh().getCoords())
2705         nff3=MEDFileField1TS.New()
2706         nff3.setFieldNoProfileSBT(nf3)
2707         nff3.write(fname,0)
2708         fs=MEDFileFields(fname)
2709         self.assertEqual(len(fs),4)
2710         ffs=[it for it in fs]
2711         self.assertTrue(isinstance(ffs[0],MEDFileIntFieldMultiTS))
2712         self.assertTrue(isinstance(ffs[1],MEDFileIntFieldMultiTS))
2713         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
2714         self.assertTrue(isinstance(ffs[3],MEDFileIntFieldMultiTS))
2715         #
2716         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray()))
2717         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray()))
2718         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2))
2719         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr))
2720         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2721         #
2722         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
2723         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
2724         self.assertRaises(InterpKernelException,MEDFileIntFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
2725         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
2726         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
2727         self.assertRaises(InterpKernelException,MEDFileIntField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
2728         MEDFileIntField1TS.New(fname,"VectorFieldOnNodes",10,-1)
2729         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
2730         #
2731         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
2732         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2733         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
2734         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
2735         pass
2736
2737     def testMEDFileFields1(self):
2738         fname="Pyfile64.med"
2739         f1=MEDCouplingFieldDouble(ON_NODES)
2740         f1.setTime(0.001,0,-1) ; f1.setTimeUnit("us")
2741         c=DataArrayDouble(12) ; c.iota(); m=MEDCouplingCMesh() ; m.setCoordsAt(0,c) ; m.setName("mesh")
2742         mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.write(fname,2)
2743         f1.setMesh(m)
2744         arr=DataArrayDouble(12,2) ; arr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; arr[:,0]=list(range(12)) ; arr[:,1]=2*arr[:,0]
2745         f1.setArray(arr)
2746         f1.setName("Field1")
2747         ff1=MEDFileField1TS.New()
2748         ff1.setFieldNoProfileSBT(f1)
2749         self.assertEqual(ff1.getDtUnit(),"us")
2750         ff1.write(fname,0)
2751         f1.setTime(1.001,1,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2752         f1.setTime(2.001,2,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2753         #
2754         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2755         ff1s=MEDFileFieldMultiTS(fname,"Field1")
2756         ff1s.setName("Field2")
2757         ff1s.write(fname,0)
2758         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],False))
2759         f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2760         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1)],True))
2761         self.assertEqual(MEDFileFields(fname).partOfThisLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(1,-1)],False))
2762         self.assertEqual(MEDFileFields(fname).partOfThisNotLyingOnSpecifiedTimeSteps([(1,-1)]).getCommonIterations(),([(0,-1),(2,-1)],True))
2763         f1.setName("Field2") ; f1.setTime(3.001,3,-1) ; ff1=MEDFileField1TS.New() ; ff1.setFieldNoProfileSBT(f1) ; ff1.write(fname,0)
2764         self.assertEqual(MEDFileFields(fname).getCommonIterations(),([(0,-1),(1,-1),(2,-1),(3,-1)],False))
2765         self.assertEqual(MEDFileFields(fname)[1].getDtUnit(),"us")
2766         pass
2767
2768     # Multi time steps and multi fields management without Globals (profiles, locs) aspects
2769     def testMEDFileFields2(self):
2770         fname="Pyfile65.med"
2771         # to check that all is initialize 
2772         MEDFileField1TS().__str__()
2773         MEDFileFieldMultiTS().__str__()
2774         # building a mesh containing 4 tri3 + 5 quad4
2775         tri=MEDCouplingUMesh("tri",2)
2776         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2777         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2778         tris = [tri.deepCopy() for i in range(4)]
2779         for i,elt in enumerate(tris): elt.translate([i,0])
2780         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2781         quad=MEDCouplingUMesh("quad",2)
2782         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2783         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2784         quads = [quad.deepCopy() for i in range(5)]
2785         for i,elt in enumerate(quads): elt.translate([5+i,0])
2786         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2787         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2788         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2789         #
2790         fmts0_0=MEDFileFieldMultiTS()
2791         fmts0_1=MEDFileFieldMultiTS()
2792         # time steps
2793         for i in range(10):
2794             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2795             d=DataArrayDouble(18) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2796             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2797             f.setTime(float(i+1)+0.1,i+1,-i-1)
2798             fmts0_0.appendFieldNoProfileSBT(f)
2799             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f) ; fmts0_1.pushBackTimeStep(f1ts)
2800             self.assertEqual(fmts0_1.getName(),name1)
2801             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2802             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2803             if i>1:
2804                 # components names have been modified to generate errors
2805                 d.setInfoOnComponents(['aa [bb]','eee [dd]'])
2806                 self.assertRaises(InterpKernelException,fmts0_0.appendFieldNoProfileSBT,f)
2807                 self.assertRaises(InterpKernelException,f1ts.setInfo,['aa [bb]'])#throw because mismatch of number of components
2808                 f1ts.setInfo(['aa [bb]','eee [dd]'])
2809                 self.assertRaises(InterpKernelException,fmts0_1.pushBackTimeStep,f1ts)
2810                 pass
2811             # add a mismatch of nb of compos
2812             pass
2813         fmts0_2=fmts0_0.deepCopy()
2814         fmts0_3=fmts0_0.deepCopy()
2815         fmts0_4=fmts0_0.deepCopy()
2816         fmts0_5=fmts0_0.shallowCpy()
2817         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)
2818         del fmts0_2[::2]
2819         self.assertTrue(len(fmts0_2)==5 and fmts0_2.getIterations()==[(2,-2),(4,-4),(6,-6),(8,-8),(10,-10)])
2820         del fmts0_3[[1.1,(6,-6),9]]
2821         self.assertTrue(len(fmts0_3)==7 and fmts0_3.getIterations()==[(2,-2),(3,-3),(4,-4),(5,-5),(7,-7),(8,-8),(9,-9)])
2822         fmts0_6=fmts0_4[[1.1,(6,-6),8]]
2823         self.assertTrue(isinstance(fmts0_6,MEDFileFieldMultiTS))
2824         self.assertTrue(len(fmts0_6)==3 and fmts0_6.getIterations()==[(1,-1),(6,-6),(9,-9)])
2825         fmts0_7=fmts0_4[::-3]
2826         self.assertTrue(isinstance(fmts0_7,MEDFileFieldMultiTS))
2827         self.assertTrue(len(fmts0_7)==4 and fmts0_7.getIterations()==[(10,-10),(7,-7),(4,-4),(1,-1)])
2828         #
2829         fs0=MEDFileFields()
2830         fs0.pushField(fmts0_0)
2831         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2832         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2833         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2834         self.assertTrue(len(fs0)==4 and fs0.getFieldsNames()==('1stField','2ndField','3rdField','4thField'))
2835         fs0.write(fname,2)
2836         fs0=MEDFileFields(fname)
2837         self.assertEqual(fs0.getCommonIterations(),([(2,-2),(4,-4),(8,-8)],True))
2838         fs1=fs0.partOfThisLyingOnSpecifiedTimeSteps(fs0.getCommonIterations()[0])
2839         self.assertTrue(fs1.getFieldsNames()==('1stField','2ndField','3rdField','4thField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2840         del fs1[["2ndField",3]]
2841         self.assertTrue(fs1.getFieldsNames()==('1stField','3rdField') and fs1.getCommonIterations()==([(2,-2),(4,-4),(8,-8)],False))
2842         fs2=fs0[[0,"4thField"]]
2843         self.assertTrue(isinstance(fs2,MEDFileFields))
2844         self.assertEqual(fs2.getFieldsNames(),('1stField','4thField'))
2845         #
2846         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,0)
2847         pass
2848
2849     # Multi time steps and multi fields management with Globals (profiles, locs) aspects
2850     def testMEDFileFields3(self):
2851         fname="Pyfile66.med"
2852         # building a mesh containing 4 tri3 + 5 quad4
2853         tri=MEDCouplingUMesh("tri",2)
2854         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2855         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2856         tris = [tri.deepCopy() for i in range(4)]
2857         for i,elt in enumerate(tris): elt.translate([i,0])
2858         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2859         quad=MEDCouplingUMesh("quad",2)
2860         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2861         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2862         quads = [quad.deepCopy() for i in range(5)]
2863         for i,elt in enumerate(quads): elt.translate([5+i,0])
2864         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2865         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2866         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2867         #
2868         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2869         #
2870         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2871         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2872         fmts0_0=MEDFileFieldMultiTS()
2873         fmts0_1=MEDFileFieldMultiTS()
2874         # time steps
2875         for i in range(10):
2876             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2877             d=DataArrayDouble(14) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2878             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2879             f.setTime(float(i+1)+0.1,i+1,-i-1)
2880             fmts0_0.appendFieldProfile(f,mm,0,pfl)
2881             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2882             self.assertEqual(fmts0_0.getInfo(),('aa [bb]','ccc [ddd]'))
2883             self.assertEqual(fmts0_1.getInfo(),('aa [bb]','ccc [ddd]'))
2884             pass
2885         #
2886         self.assertEqual(fmts0_0.getPfls(),10*('pfl_NORM_QUAD4',))
2887         self.assertEqual(fmts0_1.getPfls(),('pfl_NORM_QUAD4',))
2888         fmts0_0.zipPflsNames()
2889         self.assertEqual(fmts0_0.getPfls(),('pfl_NORM_QUAD4',))
2890         self.assertTrue(fmts0_1.getProfile("pfl_NORM_QUAD4").isEqual(fmts0_0.getProfile("pfl_NORM_QUAD4")))
2891         fmts0_2=fmts0_0.deepCopy()
2892         fmts0_3=fmts0_0.deepCopy()
2893         fmts0_4=fmts0_0.deepCopy()
2894         fs0=MEDFileFields()
2895         fs0.pushField(fmts0_0)
2896         fmts0_2.setName("2ndField") ; fs0.pushField(fmts0_2)
2897         fmts0_3.setName("3rdField") ; fs0.pushField(fmts0_3)
2898         fmts0_4.setName("4thField") ; fs0.pushField(fmts0_4)
2899         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4',))
2900         #
2901         fmts0_5=MEDFileFieldMultiTS()
2902         for i in range(7):
2903             infos1=["aa [bb]","ccc [ddd]"] ; name1="1stField"
2904             d=DataArrayDouble(16) ; d.iota(i*10) ; d.rearrange(2) ; d.setInfoOnComponents(infos1)
2905             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2906             f.setTime(float(i+1)+0.1,i+1,-i-1)
2907             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl2) ; fmts0_5.pushBackTimeStep(f1ts)
2908             pass
2909         fmts0_5.setName("5thField") ; fs0.pushField(fmts0_5)
2910         self.assertEqual(fs0.getPfls(),('pfl_NORM_QUAD4','pfl2_NORM_QUAD4'))
2911         fs0.checkGlobsCoherency()
2912         fs0.write(fname,0)
2913         pass
2914     
2915     def testSplitComponents1(self):
2916         fname="Pyfile67.med"
2917         # building a mesh containing 4 tri3 + 5 quad4
2918         tri=MEDCouplingUMesh("tri",2)
2919         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2920         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2921         tris = [tri.deepCopy() for i in range(4)]
2922         for i,elt in enumerate(tris): elt.translate([i,0])
2923         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2924         quad=MEDCouplingUMesh("quad",2)
2925         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2926         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2927         quads = [quad.deepCopy() for i in range(5)]
2928         for i,elt in enumerate(quads): elt.translate([5+i,0])
2929         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2930         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
2931         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
2932         #
2933         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
2934         #
2935         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
2936         pfl2=DataArrayInt([0,1,2,3,4,5,6,8]) ; pfl2.setName("pfl2")
2937         fs=MEDFileFields()
2938         fmts0_1=MEDFileFieldMultiTS()
2939         # time steps
2940         infos1=['aa [bb]','ccc [ddd]',"ZZZZ [MW*s]"]
2941         for i in range(10):
2942             name1="1stField"
2943             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2944             f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName(name1) ; f.setArray(d) ; f.setMesh(m)
2945             f.setTime(float(i+1)+0.1,i+1,-i-1)
2946             f1ts=MEDFileField1TS() ; f1ts.setFieldProfile(f,mm,0,pfl) ; fmts0_1.pushBackTimeStep(f1ts)
2947             self.assertEqual(fmts0_1.getInfo(),tuple(infos1))
2948             pass
2949         fs.pushField(fmts0_1)
2950         self.assertEqual(1,len(fs))
2951         l=fmts0_1.splitComponents()
2952         self.assertEqual(3,len(l))
2953         for elt in l: self.assertEqual(10,len(elt))
2954         for elt in l: self.assertTrue(isinstance(elt,MEDFileFieldMultiTS))
2955         for elt in l:
2956             elt.setName("%s_%s"%(elt.getName(),DataArray.GetVarNameFromInfo(elt.getInfo()[0])))
2957             pass
2958         fs.pushFields(l)
2959         self.assertEqual(4,len(fs))
2960         for elt in fs: self.assertEqual(10,len(elt))
2961         self.assertEqual(fs.getPfls(),('pfl_NORM_QUAD4',))
2962         self.assertEqual(fs.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2963         #
2964         fs.write(fname,0) ; del fs
2965         #
2966         fs1=MEDFileFields(fname)
2967         self.assertEqual(fs1.getPfls(),('pfl_NORM_QUAD4',))
2968         self.assertEqual(fs1.getPflsReallyUsed(),('pfl_NORM_QUAD4',))
2969         self.assertEqual(4,len(fs1))
2970         for i in range(10):
2971             for j,fieldName in enumerate(['1stField_aa','1stField_ccc','1stField_ZZZZ']):
2972                 f1ts=fs1[fieldName][i]
2973                 f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2974                 d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d=d[:,j] ; d.setInfoOnComponent(0,infos1[j])
2975                 self.assertTrue(d.isEqual(f.getArray(),1e-13))
2976                 pass
2977             f1ts=fs1["1stField"][i]
2978             f=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
2979             d=DataArrayDouble(21) ; d.iota(i*10) ; d.rearrange(3) ; d.setInfoOnComponents(infos1)
2980             self.assertTrue(d.isEqual(f.getArray(),1e-13))
2981             pass
2982         pass
2983
2984     def testMEDFileFieldConvertTo1(self):
2985         fname="Pyfile68.med"
2986         # building a mesh containing 4 tri3 + 5 quad4
2987         tri=MEDCouplingUMesh("tri",2)
2988         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
2989         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
2990         tris = [tri.deepCopy() for i in range(4)]
2991         for i,elt in enumerate(tris): elt.translate([i,0])
2992         tris=MEDCouplingUMesh.MergeUMeshes(tris)
2993         quad=MEDCouplingUMesh("quad",2)
2994         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
2995         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
2996         quads = [quad.deepCopy() for i in range(5)]
2997         for i,elt in enumerate(quads): elt.translate([5+i,0])
2998         quads=MEDCouplingUMesh.MergeUMeshes(quads)
2999         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3000         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3001         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3002         #
3003         ff0=MEDFileField1TS()
3004         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")
3005         f0.checkConsistencyLight()
3006         ff0.setFieldNoProfileSBT(f0)
3007         #
3008         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,9),'','')])]
3009         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3010         #
3011         ff0i=ff0.convertToInt()
3012         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3013         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3014         #
3015         ff1=ff0i.convertToDouble()
3016         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3017         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3018         # With profiles
3019         del arr,f0,ff0,ff1,ff0i,fspExp
3020         ff0=MEDFileField1TS()
3021         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")
3022         f0.checkConsistencyLight()
3023         pfl=DataArrayInt.Range(0,7,1) ; pfl.setName("pfl")
3024         ff0.setFieldProfile(f0,mm,0,pfl)
3025         fspExp=[(3,[(0,(0,4),'','')]),(4,[(0,(4,7),'pfl_NORM_QUAD4','')])]
3026         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3027         #
3028         ff0i=ff0.convertToInt()
3029         self.assertTrue(isinstance(ff0i,MEDFileIntField1TS))
3030         self.assertEqual(ff0i.getFieldSplitedByType(),fspExp)
3031         self.assertTrue(arr.convertToIntArr().isEqual(ff0i.getUndergroundDataArray()))
3032         #
3033         ff1=ff0i.convertToDouble()
3034         self.assertTrue(isinstance(ff1,MEDFileField1TS))
3035         self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13))
3036         self.assertEqual(ff1.getFieldSplitedByType(),fspExp)
3037         ## MultiTimeSteps
3038         ff0=MEDFileFieldMultiTS()
3039         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)
3040         f0.checkConsistencyLight()
3041         ff0.appendFieldProfile(f0,mm,0,pfl)
3042         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)
3043         f0.checkConsistencyLight()
3044         ff0.appendFieldProfile(f0,mm,0,pfl)
3045         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)
3046         f0.checkConsistencyLight()
3047         ff0.appendFieldProfile(f0,mm,0,pfl)
3048         ff1=ff0.convertToInt()
3049         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3050         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3051         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3052             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3053             arr=ff1.getUndergroundDataArray(dt,it)
3054             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3055             pass
3056         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3057         #
3058         mm.write(fname,2)
3059         ff1.write(fname,0)
3060         #
3061         ff1=ff1.convertToDouble()
3062         self.assertTrue(isinstance(ff1,MEDFileFieldMultiTS))
3063         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3064         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3065             self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp)
3066             arr=ff1.getUndergroundDataArray(dt,it)
3067             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1).convertToDblArr(),1e-14)
3068             pass
3069         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4'))
3070         #
3071         ff1=MEDFileAnyTypeFieldMultiTS.New(fname,"FieldCellMTime")
3072         self.assertTrue(isinstance(ff1,MEDFileIntFieldMultiTS))
3073         self.assertEqual(ff1.getTimeSteps(),[(0,10,0.1),(1,11,1.1),(2,12,2.1)])
3074         for delt,(dt,it,t) in  zip([0,100,200],ff1.getTimeSteps()):
3075             self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp)
3076             arr=ff1.getUndergroundDataArray(dt,it)
3077             arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1))
3078             pass
3079         self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',))
3080         pass
3081
3082     def testMEDFileFieldPartialLoading(self):
3083         fname="Pyfile69.med"
3084         #
3085         a=DataArrayInt() ; aa=a.getHeapMemorySize()
3086         a.alloc(0,1)
3087         strMulFac=a.getHeapMemorySize()-aa ; del a ; del aa
3088         # building a mesh containing 30 tri3 + 40 quad4
3089         tri=MEDCouplingUMesh("tri",2)
3090         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3091         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3092         tris = [tri.deepCopy() for i in range(30)]
3093         for i,elt in enumerate(tris): elt.translate([i,0])
3094         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3095         quad=MEDCouplingUMesh("quad",2)
3096         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3097         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3098         quads = [quad.deepCopy() for i in range(40)]
3099         for i,elt in enumerate(quads): elt.translate([40+i,0])
3100         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3101         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3102         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3103         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m) ; mm.write(fname,2)
3104         #
3105         ff0=MEDFileField1TS()
3106         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")
3107         f0.checkConsistencyLight()
3108         ff0.setFieldNoProfileSBT(f0)
3109         ff0.write(fname,0)
3110         #
3111         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,70),'','')])]
3112         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3113         # With profiles
3114         ff0=MEDFileField1TS()
3115         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")
3116         f0.checkConsistencyLight()
3117         pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl")
3118         ff0.setFieldProfile(f0,mm,0,pfl)
3119         fspExp=[(3,[(0,(0,30),'','')]),(4,[(0,(30,50),'pfl_NORM_QUAD4','')])]
3120         self.assertEqual(ff0.getFieldSplitedByType(),fspExp)
3121         ff0.write(fname,0)
3122         #
3123         ff0=MEDFileField1TS(fname,False)
3124         self.assertEqual(ff0.getName(),"FieldCell")
3125         self.assertTrue(not ff0.getUndergroundDataArray().isAllocated())
3126         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),['X [km]','YY [mm]'])
3127         heap_memory_ref=ff0.getHeapMemorySize()
3128         self.assertIn(heap_memory_ref, list(range(182, 540 + 2 * strMulFac)))
3129         ff0.loadArrays() ##
3130         arr=DataArrayDouble(140) ; arr.iota() ; arr.rearrange(2)
3131         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3132         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,70*8*2)
3133         #
3134         ff0=MEDFileField1TS(fname,"FieldCellPfl",False)
3135         self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"])
3136         heap_memory_ref=ff0.getHeapMemorySize()
3137         self.assertIn(heap_memory_ref, list(range(350, 600 + 6 * strMulFac)))
3138         ff0.loadArrays() ##
3139         arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2)
3140         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3141         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3142         ff0.loadArrays() ##
3143         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3144         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3145         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3146         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3147         ff0.loadArrays() ##
3148         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3149         ff0.getUndergroundDataArray().setIJ(30,1,5.5)
3150         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3151         ff0.loadArraysIfNecessary() ##
3152         self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5)
3153         self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3154         heap_memory_ref=ff0.getHeapMemorySize()
3155         self.assertIn(heap_memory_ref, list(range(1100, 1400 + 2 * strMulFac)))
3156         ff0.unloadArrays()
3157         hmd=ff0.getHeapMemorySize()-heap_memory_ref
3158         self.assertEqual(hmd,-800) # -50*8*2
3159         ff0.loadArrays() ##
3160         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,0)
3161         #
3162         ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False)
3163         heap_memory_ref=ff0.getHeapMemorySize()
3164         self.assertIn(heap_memory_ref, list(range(299, 620 + 6 * strMulFac)))
3165         ff0.loadArrays() ##
3166         self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14))
3167         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2)
3168         #
3169         fieldName="FieldCellMultiTS"
3170         ff0=MEDFileFieldMultiTS()
3171         for t in range(20):
3172             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)
3173             f0.setTime(float(t)+0.1,t,100+t)
3174             f0.checkConsistencyLight()
3175             ff0.appendFieldNoProfileSBT(f0)
3176             pass
3177         ff0.write(fname,0)
3178         #
3179         ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False)
3180         heap_memory_ref=ff0.getHeapMemorySize()
3181         self.assertIn(heap_memory_ref, list(range(5536, 9212 + (80 + 26 + 1) * strMulFac)))
3182         ff0.loadArrays()
3183         self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2)
3184         del ff0
3185         #
3186         ffs=MEDFileFields(fname,False)
3187         heap_memory_ref=ffs.getHeapMemorySize()
3188         self.assertIn(heap_memory_ref, list(range(5335, 10031 + (80 + 50 + len(ffs)) * strMulFac)))
3189         ffs.loadArrays()
3190         self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2)
3191         pass
3192
3193     def testMEDFileMeshReadSelector1(self):
3194         mrs=MEDFileMeshReadSelector()
3195         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3196         mrs.__str__() ; mrs.__repr__()
3197         #
3198         mrs=MEDFileMeshReadSelector(0)
3199         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())
3200         mrs=MEDFileMeshReadSelector(1)
3201         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3202         mrs=MEDFileMeshReadSelector(2)
3203         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3204         mrs=MEDFileMeshReadSelector(3)
3205         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3206         mrs=MEDFileMeshReadSelector(4)
3207         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3208         mrs=MEDFileMeshReadSelector(5)
3209         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3210         mrs=MEDFileMeshReadSelector(6)
3211         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3212         mrs=MEDFileMeshReadSelector(7)
3213         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3214         mrs=MEDFileMeshReadSelector(8)
3215         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3216         mrs=MEDFileMeshReadSelector(9)
3217         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3218         mrs=MEDFileMeshReadSelector(10)
3219         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3220         mrs=MEDFileMeshReadSelector(11)
3221         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3222         mrs=MEDFileMeshReadSelector(12)
3223         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3224         mrs=MEDFileMeshReadSelector(13)
3225         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3226         mrs=MEDFileMeshReadSelector(14)
3227         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3228         mrs=MEDFileMeshReadSelector(15)
3229         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3230         mrs=MEDFileMeshReadSelector(16)
3231         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3232         mrs=MEDFileMeshReadSelector(17)
3233         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3234         mrs=MEDFileMeshReadSelector(18)
3235         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3236         mrs=MEDFileMeshReadSelector(19)
3237         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3238         mrs=MEDFileMeshReadSelector(20)
3239         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3240         mrs=MEDFileMeshReadSelector(21)
3241         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3242         mrs=MEDFileMeshReadSelector(22)
3243         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3244         mrs=MEDFileMeshReadSelector(23)
3245         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3246         mrs=MEDFileMeshReadSelector(24)
3247         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3248         mrs=MEDFileMeshReadSelector(25)
3249         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3250         mrs=MEDFileMeshReadSelector(26)
3251         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3252         mrs=MEDFileMeshReadSelector(27)
3253         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3254         mrs=MEDFileMeshReadSelector(28)
3255         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3256         mrs=MEDFileMeshReadSelector(29)
3257         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3258         mrs=MEDFileMeshReadSelector(30)
3259         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3260         mrs=MEDFileMeshReadSelector(31)
3261         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and not mrs.isNodeNumFieldReading())
3262         mrs=MEDFileMeshReadSelector(32)
3263         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3264         mrs=MEDFileMeshReadSelector(33)
3265         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3266         mrs=MEDFileMeshReadSelector(34)
3267         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3268         mrs=MEDFileMeshReadSelector(35)
3269         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3270         mrs=MEDFileMeshReadSelector(36)
3271         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3272         mrs=MEDFileMeshReadSelector(37)
3273         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3274         mrs=MEDFileMeshReadSelector(38)
3275         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3276         mrs=MEDFileMeshReadSelector(39)
3277         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3278         mrs=MEDFileMeshReadSelector(40)
3279         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3280         mrs=MEDFileMeshReadSelector(41)
3281         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3282         mrs=MEDFileMeshReadSelector(42)
3283         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3284         mrs=MEDFileMeshReadSelector(43)
3285         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3286         mrs=MEDFileMeshReadSelector(44)
3287         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3288         mrs=MEDFileMeshReadSelector(45)
3289         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3290         mrs=MEDFileMeshReadSelector(46)
3291         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3292         mrs=MEDFileMeshReadSelector(47)
3293         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and not mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3294         mrs=MEDFileMeshReadSelector(48)
3295         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3296         mrs=MEDFileMeshReadSelector(49)
3297         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3298         mrs=MEDFileMeshReadSelector(50)
3299         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3300         mrs=MEDFileMeshReadSelector(51)
3301         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3302         mrs=MEDFileMeshReadSelector(52)
3303         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3304         mrs=MEDFileMeshReadSelector(53)
3305         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3306         mrs=MEDFileMeshReadSelector(54)
3307         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3308         mrs=MEDFileMeshReadSelector(55)
3309         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and not mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3310         mrs=MEDFileMeshReadSelector(56)
3311         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3312         mrs=MEDFileMeshReadSelector(57)
3313         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3314         mrs=MEDFileMeshReadSelector(58)
3315         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3316         mrs=MEDFileMeshReadSelector(59)
3317         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and not mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3318         mrs=MEDFileMeshReadSelector(60)
3319         self.assertTrue(not mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3320         mrs=MEDFileMeshReadSelector(61)
3321         self.assertTrue(mrs.isCellFamilyFieldReading() and not mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3322         mrs=MEDFileMeshReadSelector(62)
3323         self.assertTrue(not mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3324         mrs=MEDFileMeshReadSelector(63)
3325         self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
3326         #
3327         mrs=MEDFileMeshReadSelector(63)
3328         mrs.setCellFamilyFieldReading(False)
3329         self.assertEqual(mrs.getCode(),62)
3330         mrs.setCellFamilyFieldReading(True)
3331         self.assertEqual(mrs.getCode(),63)
3332         mrs.setNodeFamilyFieldReading(False)
3333         self.assertEqual(mrs.getCode(),61)
3334         mrs.setNodeFamilyFieldReading(True)
3335         self.assertEqual(mrs.getCode(),63)
3336         mrs.setCellNameFieldReading(False)
3337         self.assertEqual(mrs.getCode(),59)
3338         mrs.setCellNameFieldReading(True)
3339         self.assertEqual(mrs.getCode(),63)
3340         mrs.setNodeNameFieldReading(False)
3341         self.assertEqual(mrs.getCode(),55)
3342         mrs.setNodeNameFieldReading(True)
3343         self.assertEqual(mrs.getCode(),63)
3344         mrs.setCellNumFieldReading(False)
3345         self.assertEqual(mrs.getCode(),47)
3346         mrs.setCellNumFieldReading(True)
3347         self.assertEqual(mrs.getCode(),63)
3348         mrs.setNodeNumFieldReading(False)
3349         self.assertEqual(mrs.getCode(),31)
3350         mrs.setNodeNumFieldReading(True)
3351         self.assertEqual(mrs.getCode(),63)
3352         pass
3353     
3354     def testPartialReadOfMeshes(self):
3355         fname="Pyfile70.med"
3356         # building a mesh containing 4 tri3 + 5 quad4
3357         tri=MEDCouplingUMesh("tri",2)
3358         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3359         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3360         tris = [tri.deepCopy() for i in range(4)]
3361         for i,elt in enumerate(tris): elt.translate([i,0])
3362         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3363         quad=MEDCouplingUMesh("quad",2)
3364         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3365         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3366         quads = [quad.deepCopy() for i in range(5)]
3367         for i,elt in enumerate(quads): elt.translate([5+i,0])
3368         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3369         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3370         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3371         m1=m.buildDescendingConnectivity()[0]
3372         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3373         #
3374         grp0=DataArrayInt([1,2,3,5,6]) ; grp0.setName("grp0")
3375         grp1=DataArrayInt([1,2,3,5,7,8]) ; grp1.setName("grp1")
3376         mm.setGroupsAtLevel(0,[grp0,grp1])
3377         grp2=DataArrayInt.Range(0,32,2) ; grp2.setName("grp2")
3378         grp3=DataArrayInt.Range(1,32,7) ; grp3.setName("grp3")
3379         mm.setGroupsAtLevel(-1,[grp2,grp3])
3380         grp4=DataArrayInt.Range(0,32,2) ; grp4.setName("grp4")
3381         grp5=DataArrayInt.Range(1,32,7) ; grp5.setName("grp5")
3382         mm.setGroupsAtLevel(1,[grp4,grp5])
3383         mm.setRenumFieldArr(0,DataArrayInt.Range(2,11,1))
3384         mm.setRenumFieldArr(-1,DataArrayInt.Range(3,35,1))
3385         mm.setRenumFieldArr(1,DataArrayInt.Range(4,36,1))
3386         #
3387         mm.write(fname,2)
3388         ##
3389         mm=MEDFileMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector())
3390         b4_ref_heap_mem=mm.getHeapMemorySize()
3391         mm.getMeshAtLevel(0)## please let this line : force to move 1GTUMesh -> UMesh
3392         mm.getMeshAtLevel(-1)## please let this line : force to move 1GTUMesh -> UMesh
3393         ref_heap_mem=mm.getHeapMemorySize()
3394         # check the gain of memory using 1GTUMesh instead of UMesh
3395         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
3396         #
3397         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(0))
3398         self.assertEqual(len(mm.getGroupsNames()),0)
3399         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3400         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3401         self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
3402         self.assertTrue(mm.getFamilyFieldAtLevel(-1) is None)
3403         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3404         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3405         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3406         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3407         delta1=ref_heap_mem-mm.getHeapMemorySize()
3408         self.assertTrue(delta1>=4*(32+9)*3+32*4*3)
3409         #
3410         mm=MEDFileMesh.New(fname,MEDFileMeshReadSelector(1))
3411         self.assertEqual(len(mm.getGroupsNames()),6)
3412         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3413         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3414         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3415         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3416         self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
3417         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3418         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3419         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3420         delta2=ref_heap_mem-mm.getHeapMemorySize()
3421         self.assertTrue(delta2<delta1)
3422         self.assertTrue(delta2>=4*(32+9)*1+32*4*3)
3423         #
3424         mm=MEDFileUMesh(fname,MEDFileMeshReadSelector(3))
3425         self.assertEqual(len(mm.getGroupsNames()),6)
3426         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3427         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3428         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3429         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3430         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3431         self.assertTrue(mm.getNumberFieldAtLevel(0) is None)
3432         self.assertTrue(mm.getNumberFieldAtLevel(-1) is None)
3433         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3434         delta3=ref_heap_mem-mm.getHeapMemorySize()
3435         self.assertTrue(delta3<delta2)
3436         self.assertTrue(delta3>=4*(32+9)*1+32*4*1)
3437         #
3438         mm=MEDFileUMesh(fname,"mesh",-1,-1,MEDFileMeshReadSelector(19))
3439         self.assertEqual(len(mm.getGroupsNames()),6)
3440         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3441         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3442         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3443         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3444         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3445         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3446         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3447         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
3448         delta4=ref_heap_mem-mm.getHeapMemorySize()
3449         self.assertTrue(delta4<delta3)
3450         self.assertTrue(delta4>=32*4*2)
3451         #
3452         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
3453         self.assertEqual(len(mm.getGroupsNames()),6)
3454         self.assertTrue(mm.getMeshAtLevel(0).isEqual(m,1e-13))
3455         self.assertTrue(mm.getMeshAtLevel(-1).isEqual(m1,1e-13))
3456         self.assertTrue(mm.getFamilyFieldAtLevel(0)!=None)
3457         self.assertTrue(mm.getFamilyFieldAtLevel(-1)!=None)
3458         self.assertTrue(mm.getFamilyFieldAtLevel(1)!=None)
3459         self.assertTrue(mm.getNumberFieldAtLevel(0)!=None)
3460         self.assertTrue(mm.getNumberFieldAtLevel(-1)!=None)
3461         self.assertTrue(mm.getNumberFieldAtLevel(1)!=None)
3462         delta5=ref_heap_mem-mm.getHeapMemorySize()
3463         self.assertTrue(delta5<delta4)
3464         self.assertEqual(delta5,0)
3465         pass
3466
3467     # this test checks that setFieldProfile perform a check of the array length
3468     # compared to the profile length. This test also checks that mesh attribute of field
3469     # is not used by setFieldProfile (because across this test mesh is equal to None)
3470     def testCheckCompatibilityPfl1(self):
3471         # building a mesh containing 4 tri3 + 5 quad4
3472         tri=MEDCouplingUMesh("tri",2)
3473         tri.allocateCells() ; tri.insertNextCell(NORM_TRI3,[0,1,2])
3474         tri.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,0.)]))
3475         tris = [tri.deepCopy() for i in range(4)]
3476         for i,elt in enumerate(tris): elt.translate([i,0])
3477         tris=MEDCouplingUMesh.MergeUMeshes(tris)
3478         quad=MEDCouplingUMesh("quad",2)
3479         quad.allocateCells() ; quad.insertNextCell(NORM_QUAD4,[0,1,2,3])
3480         quad.setCoords(DataArrayDouble([(0.,0.),(0.,1.),(1.,1.),(1.,0.)]))
3481         quads = [quad.deepCopy() for i in range(5)]
3482         for i,elt in enumerate(quads): elt.translate([5+i,0])
3483         quads=MEDCouplingUMesh.MergeUMeshes(quads)
3484         m=MEDCouplingUMesh.MergeUMeshes(tris,quads)
3485         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
3486         m1=m.buildDescendingConnectivity()[0]
3487         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
3488         #
3489         f1ts=MEDFileField1TS()
3490         f=MEDCouplingFieldDouble(ON_NODES)
3491         vals=DataArrayDouble(7) ; vals.iota(1000)
3492         f.setArray(vals)
3493         f.setName("anonymous") # f has no mesh it is not a bug
3494         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3495         f1ts.setFieldProfile(f,mm,0,pfl)
3496         #
3497         f1ts=MEDFileField1TS()
3498         f=MEDCouplingFieldDouble(ON_NODES)
3499         vals=DataArrayDouble(8) ; vals.iota(1000)
3500         f.setArray(vals)
3501         f.setName("anonymous") # f has no mesh it is not a bug
3502         pfl=DataArrayInt([0,1,2,3,4,5,6]) ; pfl.setName("pfl")
3503         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3504         #
3505         f1ts=MEDFileField1TS()
3506         f=MEDCouplingFieldDouble(ON_CELLS)
3507         vals=DataArrayDouble(7) ; vals.iota(1000)
3508         f.setArray(vals)
3509         f.setName("anonymous") # f has no mesh it is not a bug
3510         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3511         f1ts.setFieldProfile(f,mm,0,pfl)
3512         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3513         #
3514         f1ts=MEDFileField1TS()
3515         f=MEDCouplingFieldDouble(ON_GAUSS_PT)
3516         vals=DataArrayDouble(27) ; vals.iota(1000)
3517         f.setArray(vals)
3518         f.setName("anonymous") # f has no mesh it is not a bug
3519         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3520         f.setMesh(m[pfl])
3521         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])
3522         f.setGaussLocalizationOnCells([2],[0.,0.,1.,0.,1.,1.],[0.3,0.3],[1.])
3523         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])
3524         f.setMesh(None)
3525         f1ts.setFieldProfile(f,mm,0,pfl)
3526         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3527         vals=DataArrayDouble(26) ; vals.iota(1040) ; f.setArray(vals)
3528         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3529         vals=DataArrayDouble(27) ; vals.iota(1000)
3530         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3531         #
3532         f1ts=MEDFileField1TS()
3533         f=MEDCouplingFieldDouble(ON_GAUSS_NE)
3534         vals=DataArrayDouble(25) ; vals.iota(1000)
3535         f.setArray(vals)
3536         f.setName("anonymous") # f has no mesh it is not a bug
3537         pfl=DataArrayInt([1,2,3,5,6,7,8]) ; pfl.setName("pfl")
3538         f1ts.setFieldProfile(f,mm,0,pfl)
3539         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3540         vals2=DataArrayDouble(26) ; vals2.iota(1050)
3541         f.setArray(vals2)
3542         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3543         self.assertTrue(f1ts.getUndergroundDataArray().isEqual(vals,1e-10))
3544         #
3545         f1ts=MEDFileField1TS()
3546         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3547         self.assertRaises(InterpKernelException,f1ts.setFieldProfile,f,mm,0,pfl)
3548         f.setArray(vals)
3549         f1ts.setFieldProfile(f,mm,0,pfl)
3550         pass
3551     
3552     def testWRMeshWithNoCells(self):
3553         fname="Pyfile71.med"
3554         a=DataArrayDouble(4) ; a.iota()
3555         c=MEDCouplingCMesh() ; c.setCoords(a,a) ; m0=c.buildUnstructured()
3556         m00=MEDCouplingUMesh("mesh",1) ; m00.setCoords(m0.getCoords()) ; m00.allocateCells(0)
3557         m=MEDFileUMesh()
3558         m.setMeshAtLevel(0,m00)
3559         m.setRenumFieldArr(1,DataArrayInt(list(range(10,26))))
3560         m.setFamilyFieldArr(1,DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3]))
3561         m.write(fname,2)
3562         del m,a,c,m0,m00
3563         #
3564         m=MEDFileMesh.New(fname)
3565         self.assertEqual((),m.getNonEmptyLevels())
3566         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))
3567         self.assertTrue(m.getNumberFieldAtLevel(1).isEqual(DataArrayInt(list(range(10,26)))))
3568         self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
3569         pass
3570
3571     def testWRQPolyg1(self):
3572         fname="Pyfile72.med"
3573         m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
3574         m.insertNextCell([0,2,1,3])
3575         m.setCoords(DataArrayDouble([0.,0.,1.,1.,1.,0.,0.,1.],4,2))
3576         #
3577         ms = [m.deepCopy() for i in range(4)]
3578         for i,elt in enumerate(ms):
3579             elt.translate([float(i)*1.5,0.])
3580             pass
3581         m0=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3582         m0.convertAllToPoly()
3583         #
3584         ms = [m.deepCopy() for i in range(5)]
3585         for i,elt in enumerate(ms):
3586             elt.translate([float(i)*1.5,1.5])
3587             pass
3588         m1=MEDCoupling1SGTUMesh.Merge1SGTUMeshes(ms).buildUnstructured()
3589         m1.convertAllToPoly()
3590         m1.convertLinearCellsToQuadratic()
3591         #
3592         m=MEDCouplingUMesh.MergeUMeshes(m0,m1)
3593         ##
3594         mm=MEDFileUMesh()
3595         mm.setMeshAtLevel(0,m)
3596         grp0=DataArrayInt([0,2,3]) ; grp0.setName("grp0")
3597         grp1=DataArrayInt([4,6,7]) ; grp1.setName("grp1")
3598         grp2=DataArrayInt([0,1,2,4,5,6]) ; grp2.setName("grp2")
3599         mm.setGroupsAtLevel(0,[grp0,grp1,grp2])
3600         ##
3601         mm.write(fname,2)
3602         del mm
3603         #
3604         mm_read=MEDFileUMesh(fname)
3605         self.assertTrue(mm_read.getGroupArr(0,"grp0").isEqual(grp0))
3606         self.assertTrue(mm_read.getGroupArr(0,"grp1").isEqual(grp1))
3607         self.assertTrue(mm_read.getGroupArr(0,"grp2").isEqual(grp2))
3608         self.assertTrue(mm_read.getMeshAtLevel(0).isEqual(m,1e-12))
3609         ##
3610         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setName("MyFirstField")
3611         f.setMesh(m)
3612         arr0=DataArrayDouble(9) ; arr0.iota()
3613         arr1=DataArrayDouble(9) ; arr1.iota(100)
3614         arr=DataArrayDouble.Meld(arr0,arr1) ; arr.setInfoOnComponents(["mm [kg]","sds [m]"])
3615         f.setArray(arr) ; f.checkConsistencyLight()
3616         f.setTime(5.6,1,2)
3617         ff=MEDFileField1TS()
3618         ff.setFieldNoProfileSBT(f)
3619         ff.write(fname,0)
3620         ##
3621         ff_read=MEDFileField1TS(fname)
3622         f_read=ff_read.getFieldOnMeshAtLevel(ON_CELLS,0,mm_read)
3623         self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
3624         pass
3625
3626     def testLoadIfNecessaryOnFromScratchFields0(self):
3627         """
3628         This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
3629         """
3630         fname="Pyfile77.med"
3631         coords=DataArrayDouble([(0,0,0),(2,1,0),(1,0,0),(1,1,0),(2,0,0),(0,1,0)])
3632         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coords)
3633         m.allocateCells()
3634         m.insertNextCell(NORM_QUAD4,[0,5,3,2])
3635         m.insertNextCell(NORM_QUAD4,[4,2,3,1])
3636         m.finishInsertingCells()
3637         #
3638         mm=MEDFileUMesh() ; mm.setMeshAtLevel(0,m)
3639         ms=MEDFileMeshes() ; ms.pushMesh(mm)
3640         fs=MEDFileFields()
3641         arrs=4*[None]
3642         #
3643         ff0=MEDFileFieldMultiTS() ; fs.pushField(ff0)
3644         f0=MEDCouplingFieldDouble(ON_GAUSS_NE) ; f0.setMesh(m) ; f0.setTimeUnit("ms")
3645         f0.setTime(1.1,1,1)
3646         f0.setName("myELNOField")
3647         arrs[0]=DataArrayDouble([7,5,3,1,5,3,1,7]) ; arrs[0].setInfoOnComponent(0,"Comp0")
3648         f0.setArray(arrs[0])
3649         ff0.appendFieldNoProfileSBT(f0)
3650         #
3651         f0.setTime(2.2,2,1)
3652         arrs[1]=DataArrayDouble([1,7,5,3,7,5,3,1]) ; arrs[1].setInfoOnComponent(0,"Comp0")
3653         f0.setArray(arrs[1])
3654         ff0.appendFieldNoProfileSBT(f0)
3655         #
3656         f0.setTime(3.3,3,1)
3657         arrs[2]=DataArrayDouble([3,1,7,5,1,7,5,3]) ; arrs[2].setInfoOnComponent(0,"Comp0")
3658         f0.setArray(arrs[2])
3659         ff0.appendFieldNoProfileSBT(f0)
3660         #
3661         f0.setTime(4.4,4,1)
3662         arrs[3]=DataArrayDouble([5,3,1,7,3,1,7,5]) ; arrs[3].setInfoOnComponent(0,"Comp0")
3663         f0.setArray(arrs[3])
3664         ff0.appendFieldNoProfileSBT(f0)
3665         #
3666         for i,arr in enumerate(arrs):
3667             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3668             fs[0][i].loadArraysIfNecessary()
3669             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3670             pass
3671         fs.loadArraysIfNecessary()
3672         for i,arr in enumerate(arrs):
3673             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3674             pass
3675         fs[0].loadArraysIfNecessary()
3676         for i,arr in enumerate(arrs):
3677             self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12))
3678             pass
3679         pass
3680     
3681     def testField1TSSetFieldNoProfileSBTPerGeoTypes(self):
3682         """ 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.
3683         """
3684         fname="Pyfile78.med"
3685         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)
3686         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3687         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coords)
3688         m0.allocateCells()
3689         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
3690             m0.insertNextCell(NORM_TETRA4,elt)
3691             pass
3692         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
3693             m0.insertNextCell(NORM_PYRA5,elt)
3694             pass
3695         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
3696             m0.insertNextCell(NORM_PENTA6,elt)
3697             pass
3698         m0.checkConsistency()
3699         m1=MEDCouplingUMesh(); m1.setName("mesh")
3700         m1.setMeshDimension(2);
3701         m1.allocateCells(5);
3702         m1.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3703         m1.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3704         m1.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3705         m1.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3706         m1.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3707         m1.setCoords(coords);
3708         m3=MEDCouplingUMesh("mesh",0) ; m3.setCoords(coords)
3709         m3.allocateCells()
3710         m3.insertNextCell(NORM_POINT1,[2])
3711         m3.insertNextCell(NORM_POINT1,[3])
3712         m3.insertNextCell(NORM_POINT1,[4])
3713         m3.insertNextCell(NORM_POINT1,[5])
3714         #
3715         mm=MEDFileUMesh()
3716         mm.setMeshAtLevel(0,m0)
3717         mm.setMeshAtLevel(-1,m1)
3718         mm.setMeshAtLevel(-3,m3)
3719         mm.write(fname,2)
3720         #### The file is written only with one mesh and no fields. Let's put a field on it geo types per geo types.
3721         mm=MEDFileMesh.New(fname)
3722         fs=MEDFileFields()
3723         fmts=MEDFileFieldMultiTS()
3724         f1ts=MEDFileField1TS()
3725         for lev in mm.getNonEmptyLevels():
3726             for gt in mm.getGeoTypesAtLevel(lev):
3727                 p0=mm.getDirectUndergroundSingleGeoTypeMesh(gt)
3728                 f=MEDCouplingFieldDouble(ON_CELLS) ; f.setMesh(p0)
3729                 arr=DataArrayDouble(f.getNumberOfTuplesExpected()) ; arr.iota()
3730                 f.setArray(arr) ; f.setName("f0")
3731                 f1ts.setFieldNoProfileSBT(f)
3732                 pass
3733             pass
3734         self.assertEqual(mm.getNonEmptyLevels(),(0,-1,-3))
3735         for lev in [0,-1,-3]:
3736             mm.getDirectUndergroundSingleGeoTypeMeshes(lev) # please let this line, it is for the test to emulate that
3737             pass
3738         fmts.pushBackTimeStep(f1ts)
3739         fs.pushField(fmts)
3740         fs.write(fname,0)
3741         del fs,fmts,f1ts
3742         #### The file contains now one mesh and one cell field with all cells wathever their level ang type fetched.
3743         fs=MEDFileFields(fname)
3744         self.assertEqual(len(fs),1)
3745         self.assertEqual(len(fs[0]),1)
3746         f1ts=fs[0][0]
3747         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),'','')])])
3748         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))
3749         pass
3750
3751     def testMEDFileUMeshSetName(self):
3752         """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the conversion is performed in memory and a preparation is done then.
3753         This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
3754         """
3755         fname="Pyfile79.med"
3756         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4];
3757         mm=MEDFileUMesh()
3758         m0=MEDCouplingUMesh() ; m0.setMeshDimension(2) # important no name here.
3759         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)
3760         m0.allocateCells(5);
3761         m0.insertNextCell(NORM_TRI3,3,targetConn[4:7]);
3762         m0.insertNextCell(NORM_TRI3,3,targetConn[7:10]);
3763         m0.insertNextCell(NORM_QUAD4,4,targetConn[0:4]);
3764         m0.insertNextCell(NORM_QUAD4,4,targetConn[10:14]);
3765         m0.insertNextCell(NORM_QUAD4,4,targetConn[14:18]);
3766         m0.setCoords(coords);
3767         mm.setMeshAtLevel(0,m0)
3768         m2=MEDCouplingUMesh() ; m2.setMeshDimension(0) ; m2.setCoords(coords) # important no name here.
3769         m2.allocateCells()
3770         m2.insertNextCell(NORM_POINT1,[2])
3771         m2.insertNextCell(NORM_POINT1,[3])
3772         m2.insertNextCell(NORM_POINT1,[4])
3773         m2.insertNextCell(NORM_POINT1,[5])
3774         mm.setMeshAtLevel(-2,m2)
3775         self.assertEqual(mm.getName(),"")
3776         self.assertEqual(mm.getMeshAtLevel(0).getName(),"")
3777         mm.forceComputationOfParts()
3778         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"")
3779         mm.setName("abc")
3780         self.assertEqual(mm.getName(),"abc")
3781         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_TRI3).getName(),"abc")
3782         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getName(),"abc")
3783         self.assertEqual(mm.getDirectUndergroundSingleGeoTypeMesh(NORM_POINT1).getName(),"abc")
3784         self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
3785         pass
3786
3787     def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
3788         fileName="Pyfile80.med"
3789         m=MEDCouplingCMesh() ; m.setName("cmesh")
3790         arr=DataArrayDouble(6) ; arr.iota()
3791         m.setCoords(arr,arr)
3792         nbCells=m.getNumberOfCells()
3793         self.assertEqual(25,nbCells)
3794         f=MEDCouplingFieldDouble(ON_CELLS)
3795         f.setName("FieldOnCell") ; f.setMesh(m)
3796         arr=DataArrayDouble(nbCells) ; arr.iota()
3797         mm=MEDFileCMesh()
3798         mm.setMesh(m)
3799         #
3800         fmts=MEDFileFieldMultiTS()
3801         #
3802         for i in range(nbCells):
3803             t=(float(i)+0.1,i+1,-i-2)
3804             f.setTime(*t)
3805             arr2=DataArrayDouble(nbCells)
3806             perm=DataArrayInt(nbCells) ; perm.iota(i) ; perm%=nbCells
3807             arr2[perm]=arr
3808             f.setArray(arr2)
3809             f1ts=MEDFileField1TS()
3810             f1ts.setFieldNoProfileSBT(f)
3811             fmts.pushBackTimeStep(f1ts)
3812             pass
3813         fmts.unloadArraysWithoutDataLoss()
3814         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))
3815         fs=MEDFileFields() ; fs.pushField(fmts)
3816         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))
3817         fs.unloadArraysWithoutDataLoss()
3818         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))
3819         f1ts=fs[0][0]
3820         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))
3821         f1ts.unloadArraysWithoutDataLoss()
3822         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))
3823         mm.write(fileName,2)
3824         fs.write(fileName,0)
3825         del m,fmts,mm,f,f1ts
3826         ##
3827         mm=MEDFileMesh.New(fileName)
3828         fmts=MEDFileFieldMultiTS(fileName)
3829         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))
3830         fmts.unloadArraysWithoutDataLoss()
3831         self.assertTrue(not fmts[0].getUndergroundDataArray().isAllocated())
3832         fmts.loadArraysIfNecessary()
3833         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))
3834         del mm,fmts
3835         fs=MEDFileFields(fileName)
3836         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))
3837         fs.unloadArraysWithoutDataLoss()
3838         self.assertTrue(not fs[0][0].getUndergroundDataArray().isAllocated())
3839         fs.loadArraysIfNecessary()
3840         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))
3841         del fs
3842         f1ts=MEDFileField1TS(fileName)
3843         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))
3844         f1ts.unloadArraysWithoutDataLoss()
3845         self.assertTrue(not f1ts.getUndergroundDataArray().isAllocated())
3846         f1ts.loadArraysIfNecessary()
3847         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))
3848         pass
3849
3850     def testMEDFileUMeshLoadPart1(self):
3851         """ 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
3852         memory of the returned instance.
3853         """
3854         fileName="Pyfile81.med"
3855         arr=DataArrayDouble(6) ; arr.iota()
3856         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3857         m=m.buildUnstructured()
3858         m.setName("Mesh")
3859         m.changeSpaceDimension(3,0.)
3860         infos=["aa [b]","cc [de]","gg [klm]"]
3861         m.getCoords().setInfoOnComponents(infos)
3862         m.checkConsistency()
3863         mm=MEDFileUMesh()
3864         mm.setMeshAtLevel(0,m)
3865         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
3866         m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords())
3867         mm.setMeshAtLevel(-1,m1)
3868         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])
3869         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])
3870         namesCellL0=DataArrayAsciiChar(25,16)
3871         namesCellL0[:] = ["Cell#%.3d        " % (i) for i in range(25)]
3872         renumM1=DataArrayInt([3,4,0,2,1])
3873         famFieldM1=DataArrayInt([-3,-4,0,-2,-1])
3874         mm.setRenumFieldArr(0,renum0)
3875         mm.setFamilyFieldArr(0,famField0)
3876         mm.setNameFieldAtLevel(0,namesCellL0)
3877         mm.setRenumFieldArr(-1,renumM1)
3878         mm.setFamilyFieldArr(-1,famFieldM1)
3879         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])
3880         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])
3881         namesNodes=DataArrayAsciiChar(36,16)
3882         namesNodes[:] = ["Node#%.3d        " % (i) for i in range(36)]
3883         mm.setRenumFieldArr(1,renum1)
3884         mm.setFamilyFieldArr(1,famField1)
3885         mm.setNameFieldAtLevel(1,namesNodes)
3886         mm.setFamilyId("Fam7",77)
3887         mm.setFamilyId("Fam8",88)
3888         mm.setGroupsOnFamily("Fam7",["Grp0","Grp1"])
3889         mm.setGroupsOnFamily("Fam8",["Grp1","Grp2"])
3890         mm.write(fileName,2)
3891         #
3892         mm0=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[0,10,1])
3893         self.assertEqual(mm0.getAllGeoTypes(),[NORM_QUAD4])
3894         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])))
3895         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)
3896         self.assertTrue(mm0.getCoords().isEqual(coo,1e-12))
3897         self.assertTrue(mm0.getFamilyFieldAtLevel(0).isEqual(famField0[:10]))
3898         self.assertTrue(mm0.getNumberFieldAtLevel(0).isEqual(renum0[:10]))
3899         self.assertTrue(mm0.getNameFieldAtLevel(0).isEqual(namesCellL0[:10]))
3900         self.assertTrue(mm0.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3901         self.assertTrue(mm0.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3902         self.assertTrue(mm0.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3903         #
3904         mm1=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_QUAD4],[11,25,1])
3905         self.assertEqual(mm1.getAllGeoTypes(),[NORM_QUAD4])
3906         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])))
3907         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)
3908         self.assertTrue(mm1.getCoords().isEqual(coo,1e-12))
3909         self.assertTrue(mm1.getFamilyFieldAtLevel(0).isEqual(famField0[11:]))
3910         self.assertTrue(mm1.getNumberFieldAtLevel(0).isEqual(renum0[11:]))
3911         self.assertTrue(mm1.getNameFieldAtLevel(0).isEqual(namesCellL0[11:]))
3912         self.assertTrue(mm1.getFamilyFieldAtLevel(1).isEqual(famField1[13:]))
3913         self.assertTrue(mm1.getNumberFieldAtLevel(1).isEqual(renum1[13:]))
3914         self.assertTrue(mm1.getNameFieldAtLevel(1).isEqual(namesNodes[13:]))
3915         #
3916         mm2=MEDFileUMesh.LoadPartOf(fileName,"Mesh",[NORM_SEG2,NORM_QUAD4],[0,5,1,1,10,1])
3917         self.assertEqual(mm2.getAllGeoTypes(),[NORM_QUAD4,NORM_SEG2])
3918         self.assertTrue(mm2.getFamilyFieldAtLevel(0).isEqual(famField0[1:10]))
3919         self.assertTrue(mm2.getNumberFieldAtLevel(0).isEqual(renum0[1:10]))
3920         self.assertTrue(mm2.getNameFieldAtLevel(0).isEqual(namesCellL0[1:10]))
3921         self.assertTrue(mm2.getFamilyFieldAtLevel(-1).isEqual(famFieldM1))
3922         self.assertTrue(mm2.getNumberFieldAtLevel(-1).isEqual(renumM1))
3923         self.assertTrue(mm2.getNameFieldAtLevel(-1) is None)
3924         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])))
3925         self.assertTrue(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_SEG2).getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2,2,3,3,4,4,5])))
3926         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)
3927         self.assertTrue(mm2.getCoords().isEqual(coo,1e-12))
3928         self.assertTrue(mm2.getFamilyFieldAtLevel(1).isEqual(famField1[:18]))
3929         self.assertTrue(mm2.getNumberFieldAtLevel(1).isEqual(renum1[:18]))
3930         self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
3931         pass
3932
3933     def testMEDFileFieldsLoadPart1(self):
3934         """This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
3935         """
3936         fileName="Pyfile82.med"
3937         meshName="Mesh"
3938         compos=["aa [kg]","bbb [m/s]"]
3939         arr=DataArrayDouble(6) ; arr.iota()
3940         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
3941         m=m.buildUnstructured()
3942         m.setName(meshName)
3943         m.changeSpaceDimension(3,0.)
3944         infos=["aa [b]","cc [de]","gg [klm]"]
3945         m.getCoords().setInfoOnComponents(infos)
3946         m.checkConsistency()
3947         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
3948         f.setName("Field")
3949         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
3950         arr[:,0]=list(range(25))
3951         arr[:,1]=list(range(100,125))
3952         f.setArray(arr)
3953         WriteField(fileName,f,True)
3954         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
3955         f.setName("FieldNode")
3956         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
3957         arr[:,0]=list(range(200,236))
3958         arr[:,1]=list(range(300,336))
3959         f.setArray(arr)
3960         f.checkConsistencyLight()
3961         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
3962         #
3963         ms=MEDFileMeshes()
3964         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[0,6,1])
3965         ms.pushMesh(mm)
3966         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3967         self.assertEqual(fs[1][0].getFieldSplitedByType(),[(40,[(1,(0,14),'','')])])
3968         #
3969         ms=MEDFileMeshes()
3970         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[3,15,1])
3971         ms.pushMesh(mm)
3972         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
3973         fs=fs.deepCopy()
3974         fs[0][0].loadArrays()
3975         arr = DataArrayDouble(12, 2) ; arr[:, 0] = list(range(3, 15)) ; arr[:, 1] = list(range(103, 115))
3976         arr.setInfoOnComponents(compos)
3977         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
3978         fs[1][0].loadArrays()
3979         arr = DataArrayDouble(21, 2) ; arr[:, 0] = list(range(203, 224)) ; arr[:, 1] = list(range(303, 324))
3980         arr.setInfoOnComponents(compos)
3981         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
3982         pass
3983
3984     def testMEDFileWithoutCells1(self):
3985         fileName="Pyfile83.med"
3986         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
3987         coo.setInfoOnComponents(["aa [m]","bbb [s]","cccc [m/s]"])
3988         mm=MEDFileUMesh()
3989         mm.setCoords(coo)
3990         mm.setName("mesh")
3991         mm.write(fileName,2)
3992         #
3993         mm=MEDFileMesh.New(fileName)
3994         self.assertEqual(mm.getName(),"mesh")
3995         self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
3996         pass
3997
3998     def testZipCoordsWithLoadPart1(self):
3999         """ Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
4000         """
4001         fileName="Pyfile84.med"
4002         meshName="Mesh"
4003         compos=["aa [kg]","bbb [m/s]"]
4004         arr=DataArrayDouble(6) ; arr.iota()
4005         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4006         m=m.buildUnstructured()
4007         m.setName(meshName)
4008         m.changeSpaceDimension(3,0.)
4009         infos=["aa [b]","cc [de]","gg [klm]"]
4010         m.getCoords().setInfoOnComponents(infos)
4011         m.checkConsistency()
4012         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
4013         f.setName("Field")
4014         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
4015         arr[:,0]=list(range(25))
4016         arr[:,1]=list(range(100,125))
4017         f.setArray(arr)
4018         WriteField(fileName,f,True)
4019         f=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) ; f.setMesh(m)
4020         f.setName("FieldNode")
4021         arr=DataArrayDouble(36,2) ; arr.setInfoOnComponents(compos)
4022         arr[:,0]=list(range(200,236))
4023         arr[:,1]=list(range(300,336))
4024         f.setArray(arr)
4025         f.checkConsistencyLight()
4026         WriteFieldUsingAlreadyWrittenMesh(fileName,f)
4027         #
4028         ms=MEDFileMeshes()
4029         mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1])
4030         ms.pushMesh(mm)
4031         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4032         self.assertEqual(spd.getSlice(),slice(4,6,1))
4033         spd=mm.getPartDefAtLevel(1)
4034         self.assertEqual(spd.getSlice(),slice(4,14,1))
4035         self.assertTrue(spd.getNumberOfElems()==10 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4036         mm.zipCoords() # <- The important line is here !
4037         spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
4038         self.assertEqual(spd.getSlice(),slice(4,6,1))
4039         spd=mm.getPartDefAtLevel(1)
4040         self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
4041         self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
4042         fs=MEDFileFields.LoadPartOf(fileName,False,ms)
4043         fs[0][0].loadArrays()
4044         arr=DataArrayDouble([(4,104),(5,105)])
4045         arr.setInfoOnComponents(compos)
4046         self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
4047         fs[1][0].loadArrays()
4048         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
4049         arr.setInfoOnComponents(compos)
4050         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
4051         pass
4052
4053     def testMEDFileCMeshSetGroupsAtLevel(self):
4054         """ Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
4055         """
4056         m=MEDCouplingCMesh() ; m.setCoords(DataArrayDouble([0,1,2,3,4]),DataArrayDouble([0,1,2,3,4]))
4057         m.setName("Mesh")
4058         mm=MEDFileCMesh() ; mm.setMesh(m)
4059         grp=DataArrayInt([1,3,4,5,7]) ; grp.setName("MyAssembly")
4060         mm.setGroupsAtLevel(0,[grp])
4061         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
4062         pass
4063
4064     def testMEDFileUMeshBuildExtrudedMesh1(self):
4065         """ New functionality of MEDFileUMesh.buildExtrudedMesh."""
4066         fileName="Pyfile85.med"
4067         meshName2D="Mesh"
4068         meshName1D="Mesh1D"
4069         meshName3DOut="Mesh3D"
4070         #
4071         d1=DataArrayInt([0,4,20,24])
4072         d2=DataArrayInt([0,1,2,3,7,8,12,13,17,18,19,20])
4073         #
4074         a=DataArrayDouble(6) ; a.iota()
4075         m=MEDCouplingCMesh() ; m.setCoords(a,a)
4076         m=m.buildUnstructured()
4077         d1c=d1.buildComplement(m.getNumberOfCells())
4078         m=m[d1c] ; m.zipCoords()
4079         m0=m[d2] ; m1=m[d2.buildComplement(m.getNumberOfCells())]
4080         m0.simplexize(0)
4081         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords([m0,m1])
4082         m.setName(meshName2D)
4083         mMinus1,a,b,c,d=m.buildDescendingConnectivity()
4084         e=d.deltaShiftIndex().findIdsEqual(1)
4085         #
4086         mm=MEDFileUMesh()
4087         mm.setMeshAtLevel(0,m) ; mm.setMeshAtLevel(-1,mMinus1)
4088         grp0=DataArrayInt([0,1,2,3,4,5,24,25,26]) ; grp0.setName("grp0")
4089         mm.setGroupsAtLevel(0,[grp0])
4090         grp1=e ; grp1.setName("grp1")
4091         mm.setGroupsAtLevel(-1,[grp1])
4092         mm.write(fileName,2)
4093         #
4094         a=DataArrayDouble(3) ; a.iota()
4095         tmp=MEDCouplingCMesh() ; tmp.setCoords(a) ; tmp=tmp.buildUnstructured()
4096         tmp.setName(meshName1D)
4097         tmp.changeSpaceDimension(3)
4098         tmp.setCoords(tmp.getCoords()[:,[1,2,0]])
4099         mm1D=MEDFileUMesh()
4100         mm1D.setMeshAtLevel(0,tmp)
4101         mm1D.write(fileName,0)
4102         # test is here !
4103         mm2D=MEDFileMesh.New(fileName,meshName2D)
4104         mm1D=MEDFileMesh.New(fileName,meshName1D)
4105         m1D=mm1D.getMeshAtLevel(0)
4106         mm3D=mm2D.buildExtrudedMesh(m1D,0)
4107         #
4108         self.assertEqual(mm3D.getName(),mm2D.getName())
4109         self.assertEqual(mm3D.getNumberOfCellsAtLevel(0),66)
4110         self.assertEqual(mm3D.getNumberOfCellsAtLevel(-1),194)
4111         self.assertEqual(mm3D.getGroupsNames(),('grp0','grp0_extruded','grp0_top','grp1','grp1_extruded','grp1_top'))
4112         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0"),(-1,))
4113         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_top"),(-1,))
4114         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp0_extruded"),(0,))
4115         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1"),(-2,))
4116         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_top"),(-2,))
4117         self.assertEqual(mm3D.getGrpNonEmptyLevels("grp1_extruded"),(-1,))
4118         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.)])
4119         self.assertTrue(mm3D.getCoords().isEqual(d,1e-12))
4120         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])
4121         self.assertTrue(mm3D[0].getNodalConnectivity().isEqual(d))
4122         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])
4123         self.assertTrue(mm3D[0].getNodalConnectivityIndex().isEqual(d))
4124         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])
4125         self.assertTrue(mm3D[-1].getNodalConnectivity().isEqual(d))
4126         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])
4127         self.assertTrue(mm3D[-1].getNodalConnectivityIndex().isEqual(d))
4128         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])
4129         self.assertTrue(mm3D[-2].getNodalConnectivity().isEqual(d))
4130         d=DataArrayInt(129) ; d.iota() ; d*=3
4131         self.assertTrue(mm3D[-2].getNodalConnectivityIndex().isEqual(d))
4132         #
4133         self.assertEqual(mm3D.getGroupArr(-1,"grp0").getName(),"grp0")
4134         self.assertEqual(mm3D.getGroupArr(-2,"grp1").getName(),"grp1")
4135         self.assertTrue(mm3D.getGroupArr(-1,"grp0").isEqualWithoutConsideringStr(DataArrayInt([0,1,2,3,4,5,176,177,178])))
4136         self.assertTrue(mm3D.getGroupArr(-1,"grp0_top").isEqualWithoutConsideringStr(DataArrayInt([24,25,26,27,28,29,185,186,187])))
4137         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])))
4138         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])))
4139         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])))
4140         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])))
4141         mm3D.setName("MeshExtruded")
4142         mm3D.write(fileName,0)
4143         pass
4144
4145     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4146     def testMEDFileUMeshPickeling1(self):
4147         outFileName="Pyfile86.med"
4148         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)
4149         c.setInfoOnComponents(["aa","bbb"])
4150         targetConn=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4]
4151         m=MEDCouplingUMesh();
4152         m.setMeshDimension(2);
4153         m.allocateCells(5);
4154         m.insertNextCell(NORM_TRI3,3,targetConn[4:7])
4155         m.insertNextCell(NORM_TRI3,3,targetConn[7:10])
4156         m.insertNextCell(NORM_QUAD4,4,targetConn[0:4])
4157         m.insertNextCell(NORM_POLYGON,4,targetConn[10:14])
4158         m.insertNextCell(NORM_POLYGON,4,targetConn[14:18])
4159         m.finishInsertingCells();
4160         m.setCoords(c)
4161         m.checkConsistencyLight()
4162         m1=MEDCouplingUMesh.New();
4163         m1.setMeshDimension(1);
4164         m1.allocateCells(3);
4165         m1.insertNextCell(NORM_SEG2,2,[1,4])
4166         m1.insertNextCell(NORM_SEG2,2,[3,6])
4167         m1.insertNextCell(NORM_SEG3,3,[2,8,5])
4168         m1.finishInsertingCells();
4169         m1.setCoords(c)
4170         m1.checkConsistencyLight()
4171         m2=MEDCouplingUMesh.New();
4172         m2.setMeshDimension(0);
4173         m2.allocateCells(4);
4174         m2.insertNextCell(NORM_POINT1,1,[1])
4175         m2.insertNextCell(NORM_POINT1,1,[3])
4176         m2.insertNextCell(NORM_POINT1,1,[2])
4177         m2.insertNextCell(NORM_POINT1,1,[6])
4178         m2.finishInsertingCells();
4179         m2.setCoords(c)
4180         m2.checkConsistencyLight()
4181         #
4182         mm=MEDFileUMesh.New()
4183         self.assertTrue(mm.getUnivNameWrStatus())
4184         mm.setName("MyFirstMEDCouplingMEDmesh")
4185         mm.setDescription("IHopeToConvinceLastMEDMEMUsers")
4186         mm.setCoords(c)
4187         mm[-1]=m1;
4188         mm[0]=m;
4189         mm.setRenumFieldArr(0,DataArrayInt([32,41,50,56,7]))
4190         mm[-2]=m2;
4191         mm.setRenumFieldArr(-2,DataArrayInt([102,52,45,63]))
4192         # playing with groups
4193         g1_2=DataArrayInt.New()
4194         g1_2.setValues([1,3],2,1)
4195         g1_2.setName("G1")
4196         g2_2=DataArrayInt.New()
4197         g2_2.setValues([1,2,3],3,1)
4198         g2_2.setName("G2")
4199         mm.setGroupsAtLevel(0,[g1_2,g2_2],False)
4200         g1_1=DataArrayInt.New()
4201         g1_1.setValues([0,1,2],3,1)
4202         g1_1.setName("G1")
4203         g2_1=DataArrayInt.New()
4204         g2_1.setValues([0,2],2,1)
4205         g2_1.setName("G2")
4206         mm.setGroupsAtLevel(-1,[g1_1,g2_1],False)
4207         g1_N=DataArrayInt.New()
4208         g1_N.setValues(list(range(8)),8,1)
4209         g1_N.setName("G1")
4210         g2_N=DataArrayInt.New()
4211         g2_N.setValues(list(range(9)),9,1)
4212         g2_N.setName("G2")
4213         mm.setGroupsAtLevel(1,[g1_N,g2_N],False)
4214         mm.createGroupOnAll(0,"GrpOnAllCell")
4215         # check content of mm
4216         t=mm.getGroupArr(0,"G1",False)
4217         self.assertTrue(g1_2.isEqual(t));
4218         t=mm.getGroupArr(0,"G2",False)
4219         self.assertTrue(g2_2.isEqual(t));
4220         t=mm.getGroupArr(-1,"G1",False)
4221         self.assertTrue(g1_1.isEqual(t));
4222         t=mm.getGroupArr(-1,"G2",False)
4223         self.assertTrue(g2_1.isEqual(t));
4224         t=mm.getGroupArr(1,"G1",False)
4225         self.assertTrue(g1_N.isEqual(t));
4226         t=mm.getGroupArr(1,"G2",False)
4227         self.assertTrue(g2_N.isEqual(t));
4228         self.assertTrue(mm.existsGroup("GrpOnAllCell"));
4229         t=mm.getGroupArr(0,"GrpOnAllCell")
4230         #
4231         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4232         mm2=pickle.loads(st)
4233         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4234         self.assertEqual(mm.getAxisType(),AX_CART)
4235         #
4236         mm.setAxisType(AX_CYL)
4237         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
4238         mm2=pickle.loads(st)
4239         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4240         self.assertEqual(mm2.getAxisType(),AX_CYL)
4241         pass
4242
4243     def testMEDFileFieldsLoadSpecificEntities1(self):
4244         nbNodes=11
4245         fieldName="myField"
4246         fileName="Pyfile87.med"
4247         nbPdt=10
4248         meshName="Mesh"
4249         #
4250         m=MEDCouplingCMesh()
4251         arr=DataArrayDouble(nbNodes) ; arr.iota()
4252         m.setCoords(arr)
4253         m=m.buildUnstructured()
4254         m.setName(meshName)
4255         #
4256         fmts=MEDFileFieldMultiTS()
4257         for i in range(nbPdt):
4258             f=MEDCouplingFieldDouble(ON_NODES)
4259             f.setMesh(m)
4260             arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4261             f.setArray(arr)
4262             f.setName(fieldName)
4263             f.setTime(float(i),i,0)
4264             fmts.appendFieldNoProfileSBT(f)
4265             pass
4266         #
4267         mm=MEDFileUMesh() ; mm[0]=m
4268         fmts.write(fileName,2)
4269         mm.write(fileName,0)
4270         #
4271         fs=MEDFileFields(fileName,False)
4272         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_NODES,NORM_ERROR)],False)
4273         fs.loadArraysIfNecessary()
4274         fs2.loadArraysIfNecessary()
4275         for i in range(nbPdt):
4276             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4277             pass
4278         m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1])) ; m1=m1.buildUnstructured() ; m1.simplexize(0)
4279         m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([3,4,5]),DataArrayDouble([0,1])) ; m2=m2.buildUnstructured()
4280         m3=MEDCouplingUMesh.MergeUMeshes(m1,m2) ; m3.setName(meshName)
4281         fmts=MEDFileFieldMultiTS()
4282         for i in range(nbPdt):
4283             f=MEDCouplingFieldDouble(ON_CELLS)
4284             f.setMesh(m3)
4285             arr=DataArrayDouble(8) ; arr.iota() ; arr*=i
4286             f.setArray(arr)
4287             f.setName(fieldName)
4288             f.setTime(float(i),i,0)
4289             fmts.appendFieldNoProfileSBT(f)
4290             pass
4291         mm=MEDFileUMesh() ; mm[0]=m3
4292         del mm[0]
4293         self.assertEqual(mm.getNonEmptyLevels(),())
4294         mm[0]=m3
4295         self.assertEqual(mm.getNonEmptyLevels(),(0,))
4296         fmts.write(fileName,2)
4297         fs=MEDFileFields(fileName,False)
4298         fs2=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3)],False)
4299         fs3=MEDFileFieldMultiTS.LoadSpecificEntities(fileName,fieldName,[(ON_CELLS,NORM_QUAD4)],False)
4300         fs4=MEDFileFields.LoadSpecificEntities(fileName,[(ON_CELLS,NORM_TRI3),(ON_CELLS,NORM_QUAD4)],False)
4301         fs.loadArraysIfNecessary()
4302         fs2.loadArraysIfNecessary()
4303         fs3.loadArraysIfNecessary()
4304         fs4.loadArraysIfNecessary()
4305         for i in range(nbPdt):
4306             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[:6].isEqual(fs2[fieldName][i].getUndergroundDataArray(),1e-12))
4307             self.assertTrue(fs[fieldName][i].getUndergroundDataArray()[6:8].isEqual(fs3[i].getUndergroundDataArray(),1e-12))
4308             self.assertTrue(fs[fieldName][i].getUndergroundDataArray().isEqual(fs4[fieldName][i].getUndergroundDataArray(),1e-12))
4309             pass
4310         pass
4311
4312     def testMEDFileLotsOfTSRW1(self):
4313         nbNodes=11
4314         fieldName="myField"
4315         fileName="Pyfile88.med"
4316         nbPdt=300 # <- perftest = 30000
4317         meshName="Mesh"
4318         #
4319         maxPdt=100 # <- optimum = 500
4320         m=MEDCouplingCMesh()
4321         arr=DataArrayDouble(nbNodes) ; arr.iota()
4322         m.setCoords(arr)
4323         m=m.buildUnstructured()
4324         m.setName(meshName)
4325         #
4326         nbOfField=nbPdt//maxPdt
4327         fs=MEDFileFields()
4328         for j in range(nbOfField):
4329             fmts=MEDFileFieldMultiTS()
4330             s=DataArray.GetSlice(slice(0,nbPdt,1),j,nbOfField)
4331             for i in range(s.start, s.stop, s.step):
4332                 f=MEDCouplingFieldDouble(ON_NODES)
4333                 f.setMesh(m)
4334                 arr=DataArrayDouble(nbNodes) ; arr.iota() ; arr*=i
4335                 f.setArray(arr)
4336                 f.setName("%s_%d"%(fieldName,j))
4337                 f.setTime(float(i),i,0)
4338                 fmts.appendFieldNoProfileSBT(f)
4339                 pass
4340             fs.pushField(fmts)
4341             pass
4342         #
4343         mm=MEDFileUMesh() ; mm[0]=m
4344         fs.write(fileName,2)
4345         mm.write(fileName,0)
4346         ############
4347         def appendInDict(d,key,val):
4348             if key in d:
4349                 d[key].append(val)
4350             else:
4351                 d[key]=[val]
4352             pass
4353         import re
4354         allFields=GetAllFieldNames(fileName)
4355         allFieldsDict={}
4356         pat=re.compile("([\d]+)([\s\S]+)$")
4357         for st in allFields:
4358             stRev=st[::-1]
4359             m=pat.match(stRev)
4360             if m:
4361                 appendInDict(allFieldsDict,m.group(2)[::-1],m.group(1)[::-1])
4362                 pass
4363             else:
4364                 appendInDict(allFieldsDict,st,'')
4365                 pass
4366             pass
4367         fs2=MEDFileFields()
4368         for k in allFieldsDict:
4369             if allFieldsDict[k]!=['']:
4370                 allFieldsDict[k]=sorted(allFieldsDict[k],key=lambda x: int(x))
4371                 pass
4372             fmts2=[]
4373             for it in allFieldsDict[k]:
4374                 fmts2.append(MEDFileFieldMultiTS.LoadSpecificEntities(fileName,k+it,[(ON_NODES,NORM_ERROR)]))
4375                 pass
4376             fmts2.reverse()
4377             zeResu=fmts2.pop()
4378             nbIter=len(fmts2)
4379             for ii in range(nbIter):
4380                 zeResu.pushBackTimeSteps(fmts2.pop())
4381                 pass
4382             zeResu.setName(k)
4383             fs2.pushField(zeResu)
4384             pass
4385         self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)])
4386         pass
4387     
4388     def testMEDFileMeshRearrangeFamIds1(self):
4389         """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies."""
4390         fileName="Pyfile89.med"
4391         meshName='Maillage_2'
4392         mm=MEDFileUMesh()
4393         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)])
4394         #
4395         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])
4396         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])
4397         m0=MEDCouplingUMesh(meshName,3) ; m0.setCoords(coords)
4398         m0.setConnectivity(c0,c0i)
4399         mm[0]=m0
4400         #
4401         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])
4402         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])
4403         m1=MEDCouplingUMesh(meshName,2) ; m1.setCoords(coords)
4404         m1.setConnectivity(c1,c1i)
4405         mm[-1]=m1
4406         #
4407         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])
4408         m2=MEDCoupling1SGTUMesh(meshName,NORM_SEG2)
4409         m2.setNodalConnectivity(c2) ; m2.setCoords(coords)
4410         mm[-2]=m2.buildUnstructured()
4411         #
4412         ref0=DataArrayInt(55) ; ref0[:]=0
4413         mm.setFamilyFieldArr(0,ref0)
4414         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]))
4415         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])
4416         mm.setFamilyFieldArr(-1,ref1)
4417         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])
4418         mm.setFamilyFieldArr(-2,ref2)
4419         #
4420         for f,fid in (('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2)):
4421             mm.setFamilyId(f,fid)
4422         for grp,fams in [('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',))]:
4423             mm.setFamiliesOnGroup(grp,fams)
4424         mm.write(fileName,2)
4425         #
4426         mm=MEDFileMesh.New(fileName)
4427         grp=mm.getGroup(-1,"Groupe_1")
4428         dai=grp.computeFetchedNodeIds()
4429         dai.setName("TOTO")
4430         mm.addGroup(1,dai)
4431         mm.rearrangeFamilies() # <- the aim of the test
4432         self.assertTrue(dai.isEqual(mm.getGroupArr(1,"TOTO")))
4433         self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(ref0))
4434         self.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(ref1))
4435         self.assertTrue(mm.getFamilyFieldAtLevel(-2).isEqual(ref2))
4436         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])))
4437         allGrps=[('Groupe_1',('FAM_-6_Groupe_1',)),('Groupe_2',('FAM_-7_Groupe_2',)),('Groupe_3',('FAM_2_Groupe_3',)),('TOTO',('Family_9',))]
4438         allFams=[('FAMILLE_ZERO',0),('FAM_-6_Groupe_1',-6),('FAM_-7_Groupe_2',-7),('FAM_2_Groupe_3',2),('Family_9',9)]
4439         self.assertEqual(list(mm.getGroupsNames()),[elt[0] for elt in allGrps])
4440         for elt,fams in allGrps:
4441             self.assertEqual(mm.getFamiliesOnGroup(elt),fams)
4442         self.assertEqual(list(mm.getFamiliesNames()),[elt[0] for elt in allFams])
4443         for elt,eltId in allFams:
4444             self.assertEqual(mm.getFamilyId(elt),eltId)
4445         pass
4446
4447     def testNonRegrCMeshSetFieldPfl1(self):
4448         """ Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
4449         ff=MEDFileField1TS()
4450         meshName="mesh"
4451         mm=MEDFileCMesh()
4452         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4453         m.setCoords(arr)
4454         m.setName(meshName)
4455         mm.setMesh(m)
4456         field=MEDCouplingFieldDouble(ON_CELLS)
4457         field.setMesh(m)
4458         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4459         field.setName("Field")
4460         field.checkConsistencyLight()
4461         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU") #<- false profile because defined on all cells !
4462         ff.setFieldProfile(field,mm,0,pfl) # <- bug was revealed here !
4463         self.assertEqual(ff.getPfls(),())
4464         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4465         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4466         del ff,mm,field,field2,pfl
4467         # same with unstructured mesh
4468         ff=MEDFileField1TS()
4469         meshName="mesh"
4470         mm=MEDFileUMesh()
4471         m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota()
4472         m.setCoords(arr)
4473         m.setName(meshName)
4474         m=m.buildUnstructured()
4475         mm[0]=m
4476         field=MEDCouplingFieldDouble(ON_CELLS)
4477         field.setMesh(m)
4478         field.setArray(DataArrayDouble([1.2,2.3,3.4,4.5]))
4479         field.setName("Field")
4480         field.checkConsistencyLight()
4481         pfl=DataArrayInt([0,1,2,3]) ; pfl.setName("TUTU")
4482         ff.setFieldProfile(field,mm,0,pfl)
4483         self.assertEqual(ff.getPfls(),())
4484         field2=ff.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
4485         self.assertTrue(field.isEqual(field2,1e-12,1e-12))
4486         pass
4487
4488     def testMEDFileUMeshLinearToQuadraticAndRev1(self):
4489         meshName="mesh"
4490         fileName="Pyfile90.med"
4491         fileName2="Pyfile91.med"
4492         arr=DataArrayDouble(5) ; arr.iota()
4493         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4494         m=m.buildUnstructured()
4495         d=DataArrayInt([3,7,11,15])
4496         m1=m[d]
4497         m1.simplexize(0)
4498         m2=m[d.buildComplement(m.getNumberOfCells())]
4499         m=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1,m2)
4500         m.changeSpaceDimension(3,0.)
4501         arr=DataArrayDouble(3) ; arr.iota()
4502         m1D=MEDCouplingCMesh() ; m1D.setCoords(arr) ; m1D=m1D.buildUnstructured() ; m1D.changeSpaceDimension(3,0.)
4503         m1D.setCoords(m1D.getCoords()[:,[1,2,0]])
4504         delta=m.getNumberOfNodes()*(m1D.getNumberOfNodes()-1)
4505         m3D=m.buildExtrudedMesh(m1D,0)
4506         m3D.sortCellsInMEDFileFrmt()
4507         m3D.setName(meshName)
4508         m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkConsistency()
4509         m1D=m2D.computeSkin() ; m1D.setName(meshName)
4510         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
4511         #
4512         mm=MEDFileUMesh()
4513         mm[0]=m3D ; mm[-1]=m2D ; mm[-2]=m1D ; mm[-3]=m0D
4514         grpEdge0=DataArrayInt([1,2,3,5]) ; grpEdge0.setName("East")
4515         grpEdge1=DataArrayInt([0,1]) ; grpEdge1.setName("Corner1")
4516         grpFaceSouth=DataArrayInt([0,1,8,9,10]) ; grpFaceSouth.setName("SouthFace")
4517         grpFaceNorth=DataArrayInt([6,7,17,18,19]) ; grpFaceNorth.setName("NorthFace")
4518         diagFace=DataArrayInt([0,1,13,15,17]) ; diagFace.setName("DiagFace")
4519         vol1=DataArrayInt([20,21,23,24]) ; vol1.setName("vol1")
4520         vol2=DataArrayInt([2,3,4,5,21,24]) ; vol2.setName("vol2")
4521         mm.setGroupsAtLevel(0,[vol1,vol2])
4522         mm.setGroupsAtLevel(-1,[grpFaceSouth,grpFaceNorth,diagFace])
4523         mm.setGroupsAtLevel(-2,[grpEdge0,grpEdge1])
4524         #
4525         mmOut1=mm.linearToQuadratic(0,0.)
4526         mmOut1.write(fileName2,2)
4527         mmOut2=mmOut1.quadraticToLinear(0.)
4528         self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
4529         pass
4530
4531     def testMEDFileMeshAddGroup1(self):
4532         m=MEDCouplingCMesh()
4533         arrX=DataArrayDouble(9) ; arrX.iota()
4534         arrY=DataArrayDouble(4) ; arrY.iota()
4535         m.setCoords(arrX,arrY)
4536         m.setName("mesh")
4537         mm=MEDFileCMesh()
4538         mm.setMesh(m)
4539         grp0=DataArrayInt([3,5,6,21,22]) ; grp0.setName("grp0")
4540         mm.addGroup(0,grp0)
4541         grp1=DataArrayInt([3,4,5,8,18,19,22]) ; grp1.setName("grp1")
4542         mm.addGroup(0,grp1)
4543         grp2=DataArrayInt([0,1,2,10,11]) ; grp2.setName("grp2")
4544         mm.addGroup(0,grp2)
4545         grp3=DataArrayInt([23]) ; grp3.setName("grp3")
4546         mm.addGroup(0,grp3)
4547         for grp in [grp0,grp1,grp2,grp3]:
4548             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4549         self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2','grp3'))
4550         delta=12
4551         for grp in [grp0,grp1,grp2,grp3]:
4552             grpNode=grp.deepCopy() ; grpNode+=delta ; grpNode.setName("%s_node"%grp.getName())
4553             mm.addGroup(1,grpNode)
4554         self.assertEqual(mm.getGroupsNames(),('grp0','grp0_node','grp1','grp1_node','grp2','grp2_node','grp3','grp3_node'))
4555         for grp in [grp0,grp1,grp2,grp3]:
4556             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4557         for grp in [grp0,grp1,grp2,grp3]:
4558             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4559             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4560         mm.normalizeFamIdsMEDFile()
4561         for grp in [grp0,grp1,grp2,grp3]:
4562             self.assertTrue(mm.getGroupArr(0,grp.getName()).isEqual(grp))
4563         for grp in [grp0,grp1,grp2,grp3]:
4564             grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName())
4565             self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp))
4566         pass
4567     
4568     def testMEDFileJoint1(self):
4569         fileName="Pyfile92.med"
4570         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4571         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4572         mm=MEDFileUMesh()
4573         mm.setCoords(coo)
4574         mm.setName("maa1")
4575         mm.setDescription("un maillage")
4576         mm.write(fileName,2)
4577         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4578         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4579         one_step_joint=MEDFileJointOneStep()
4580         one_step_joint.pushCorrespondence(cell_correspond)
4581         one_step_joint.pushCorrespondence(node_correspond)
4582         one_joint=MEDFileJoint()
4583         one_joint.pushStep(one_step_joint)
4584         one_joint.setLocalMeshName("maa1")
4585         one_joint.setRemoteMeshName("maa1")
4586         one_joint.setDescription("joint_description")
4587         one_joint.setJointName("joint_1")
4588         one_joint.setDomainNumber(1)
4589         self.assertEqual( one_joint.getLocalMeshName(), "maa1")
4590         self.assertEqual( one_joint.getRemoteMeshName(), "maa1")
4591         self.assertEqual( one_joint.getDescription(), "joint_description")
4592         self.assertEqual( one_joint.getJointName(), "joint_1")
4593         self.assertEqual( one_joint.getDomainNumber(), 1)
4594         joints=MEDFileJoints()
4595         joints.pushJoint(one_joint);
4596         joints.write(fileName,0)
4597         # read back
4598         jointsR=MEDFileJoints(fileName,mm.getName())
4599         self.assertEqual( jointsR.getNumberOfJoints(), 1 )
4600         jR = jointsR.getJointAtPos(0)
4601         self.assertTrue( jR.isEqual( one_joint ))
4602         self.assertRaises( InterpKernelException, jointsR.getJointAtPos,1)
4603         self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
4604         jointsR.destroyJointAtPos(0)
4605         pass
4606     
4607     def testMEDFileJoint2(self):
4608         fileNameWr="Pyfile93.med"
4609         coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
4610         coo.setInfoOnComponents(["x [cm]","y [cm]","z [cm]"])
4611         mm=MEDFileUMesh()
4612         mm.setCoords(coo)
4613         mm.setName("maa1")
4614         mm.setDescription("un maillage")
4615         node_correspond=MEDFileJointCorrespondence(DataArrayInt([13,14,15,16]))
4616         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([17,18]),NORM_TETRA4,NORM_PENTA6)
4617         one_step_joint=MEDFileJointOneStep()
4618         two_step_joint=MEDFileJointOneStep()
4619         one_joint=MEDFileJoint()
4620         two_joint=MEDFileJoint()
4621         one_step_joint.pushCorrespondence(node_correspond)
4622         one_joint.pushStep(one_step_joint)
4623         two_step_joint.pushCorrespondence(cell_correspond)
4624         two_step_joint.pushCorrespondence(node_correspond)
4625         two_joint.pushStep(two_step_joint)
4626         one_joint.setLocalMeshName("maa1")
4627         one_joint.setRemoteMeshName("maa1")
4628         one_joint.setDescription("joint_description_1")
4629         one_joint.setJointName("joint_1")
4630         one_joint.setDomainNumber(1)
4631         two_joint.setLocalMeshName("maa1")
4632         two_joint.setRemoteMeshName("maa1")
4633         two_joint.setDescription("joint_description_2")
4634         two_joint.setJointName("joint_2")
4635         two_joint.setDomainNumber(2)
4636         joints=MEDFileJoints()
4637         joints.pushJoint(one_joint)
4638         joints.pushJoint(two_joint)
4639         mm.setJoints( joints )
4640         mm.write(fileNameWr,2)
4641         #
4642         mm=MEDFileMesh.New(fileNameWr)
4643         self.assertEqual( mm.getNumberOfJoints(), 2)
4644         jointsR = mm.getJoints();
4645         self.assertEqual( jointsR.getMeshName(), mm.getName() )
4646         self.assertEqual( len( jointsR ), 2 )
4647         jointR1 = jointsR[0]
4648         jointR2 = jointsR[1]
4649         self.assertFalse( jointR1 is None )
4650         self.assertFalse( jointR2 is None )
4651         self.assertTrue( jointR1.isEqual( one_joint ))
4652         self.assertTrue( jointR2.isEqual( two_joint ))
4653         pass
4654
4655     def testMEDFileJoint1(self):
4656         node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
4657         cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
4658         cell_correspon2=MEDFileJointCorrespondence(DataArrayInt([9,10,11]),NORM_TRI3,NORM_TRI3)
4659         cell_correspon3=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_QUAD4)
4660         joint1st_1=MEDFileJointOneStep()
4661         joint1st_1.pushCorrespondence(cell_correspond)
4662         joint1st_1.pushCorrespondence(node_correspond)
4663         joint1st_2=MEDFileJointOneStep()
4664         joint1st_2.pushCorrespondence(cell_correspond)
4665         joint1st_2.pushCorrespondence(node_correspond)
4666         joint1st_3=MEDFileJointOneStep()
4667         joint1st_3.pushCorrespondence(node_correspond)
4668         joint1st_3.pushCorrespondence(cell_correspond)
4669         joint1st_4=MEDFileJointOneStep()
4670         joint1st_4.pushCorrespondence(cell_correspond)
4671         joint1st_5=MEDFileJointOneStep()
4672         joint1st_5.pushCorrespondence(cell_correspon2)
4673         joint1st_6=MEDFileJointOneStep()
4674         joint1st_6.pushCorrespondence(cell_correspon3)
4675         self.assertTrue( joint1st_1.isEqual( joint1st_2 ))
4676         self.assertTrue( joint1st_1.isEqual( joint1st_3 ))
4677         self.assertFalse( joint1st_1.isEqual( joint1st_4 ))
4678         self.assertFalse( joint1st_4.isEqual( joint1st_5 ))
4679         self.assertFalse( joint1st_4.isEqual( joint1st_6 ))
4680         one_joint=MEDFileJoint()
4681         one_joint.pushStep(joint1st_1)
4682         one_joint.setLocalMeshName("maa1")
4683         one_joint.setRemoteMeshName("maa2")
4684         one_joint.setDescription("joint_description")
4685         one_joint.setJointName("joint_1")
4686         one_joint.setDomainNumber(1)
4687         self.assertEqual( "maa1", one_joint.getLocalMeshName())
4688         self.assertEqual( "maa2", one_joint.getRemoteMeshName())
4689         self.assertEqual( "joint_description", one_joint.getDescription())
4690         self.assertEqual( 1, one_joint.getDomainNumber())
4691         self.assertEqual( "joint_1", one_joint.getJointName())
4692         pass
4693
4694     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
4695     def testMEDFileSafeCall0(self):
4696         """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !"""
4697         fname="Pyfile94.med"
4698         errfname="Pyfile94.err"
4699         
4700         import os
4701         # first clean file if needed
4702         if os.path.exists(fname):
4703             os.remove(fname)
4704             pass
4705         # second : build a file from scratch
4706         m=MEDCouplingCMesh()
4707         arr=DataArrayDouble(11) ; arr.iota()
4708         m.setCoords(arr,arr)
4709         mm=MEDFileCMesh()
4710         mm.setMesh(m)
4711         mm.setName("mesh")
4712         mm.write(fname,2)
4713         # third : change permissions to remove write access on created file
4714         os.chmod(fname, 0o444)
4715         # four : try to append data on file -> check that it raises Exception
4716         f=MEDCouplingFieldDouble(ON_CELLS)
4717         f.setName("field")
4718         f.setMesh(m)
4719         f.setArray(DataArrayDouble(100))
4720         f.getArray()[:]=100.
4721         f.checkConsistencyLight()
4722         f1ts=MEDFileField1TS()
4723         f1ts.setFieldNoProfileSBT(f)
4724         # redirect stderr
4725         tmp=StdOutRedirect(errfname)
4726         self.assertRaises(InterpKernelException,f1ts.write,fname,0) # it should raise !
4727         del tmp
4728         #
4729         if os.path.exists(errfname):
4730             os.remove(errfname)
4731         #
4732         pass
4733
4734     def testUnivStatus1(self):
4735         """ Non regression test to check the effectiveness of univ write status."""
4736         fname="Pyfile95.med"
4737         arr=DataArrayDouble(10) ; arr.iota()
4738         m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh")
4739         mm=MEDFileCMesh() ; mm.setMesh(m)
4740         mm.setUnivNameWrStatus(False) # test is here
4741         mm.write(fname,2)
4742         mm=MEDFileCMesh(fname)
4743         self.assertEqual(mm.getUnivName(),"")
4744         mm.setUnivNameWrStatus(True)
4745         mm.write(fname,2)
4746         mm=MEDFileCMesh(fname)
4747         self.assertTrue(mm.getUnivName()!="")
4748         pass
4749     
4750     def testEmptyMesh(self):
4751       """ MEDLoader should be able to consistently write and read an empty mesh (coords array
4752       with 0 tuples """
4753       fname = "Pyfile96.med" 
4754       m = MEDCouplingUMesh('toto', 2)
4755       m.setCoords(DataArrayDouble([], 0, 2))
4756       m.setConnectivity(DataArrayInt([]), DataArrayInt([0]))
4757       mfu = MEDFileUMesh()
4758       mfu.setMeshAtLevel(0, m)
4759       mfu.write(fname, 2)
4760       mfu2 = MEDFileUMesh(fname)
4761       self.assertEqual('toto', mfu2.getName())
4762       lvl = mfu2.getNonEmptyLevels()
4763       self.assertEqual((), lvl)
4764
4765     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
4766     def testMEDFileUMeshPickeling2(self):
4767       """ Check that pickalization can be performed on a unpickalized instance. Non regression test."""
4768       name="Mesh_1"
4769       grpName1="HAUT"
4770       grpName2="BASE"
4771       hauteur=1.
4772       nbOfNodesPerAxis=3
4773       arr=DataArrayDouble(nbOfNodesPerAxis) ; arr.iota() ; arr/=(nbOfNodesPerAxis-1) ; arr*=hauteur
4774       m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured() ; m.setName(name)
4775       mesh=MEDFileUMesh() ; mesh[0]=m
4776       m1=m.computeSkin() ; mesh[-1]=m1
4777       #
4778       bary1=m1.computeCellCenterOfMass()[:,2]
4779       grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1)
4780       grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2)
4781       mesh.setGroupsAtLevel(-1,[grp1,grp2])
4782       
4783       st=pickle.dumps(mesh,2)
4784       mm=pickle.loads(st)
4785       st2=pickle.dumps(mm,2)
4786       mm2=pickle.loads(st2)
4787       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
4788       pass
4789
4790     def testMEDFileEquivalence1(self):
4791       """ First check of equivalence implementation in MEDFileMesh"""
4792       fileName="Pyfile97.med"
4793       meshName="M_01"
4794       mm=MEDFileUMesh()
4795       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)])
4796       coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
4797       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])
4798       m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
4799       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])
4800       m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
4801       mm.getFamilyFieldAtLevel(-1)[:]=-2
4802       mm.getFamilyFieldAtLevel(0)[:]=0
4803       mm.addFamily("HOMARD________-1",-1)
4804       mm.addFamily("HOMARD________-2",-2)
4805       mm.addFamily("HOMARD________-3",-3)
4806       mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
4807       
4808       eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
4809       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."
4810       mm.initializeEquivalences()
4811       eqs=mm.getEquivalences()
4812       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4813       eq0.setDescription(descEq)
4814       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)])
4815       eq0.setArray(-1,corr)
4816       self.assertEqual(eq0.getCell().size(),1)
4817       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4818       eq0.getCell().clear()
4819       self.assertEqual(eq0.getCell().size(),0)
4820       eq0.getCell().setArrayForType(NORM_QUAD4,corr)
4821       self.assertEqual(eq0.getCell().size(),1)
4822       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4823       mm.killEquivalences()
4824       mm.initializeEquivalences()
4825       eqs=mm.getEquivalences()
4826       eq0=eqs.appendEmptyEquivalenceWithName(eqName)
4827       eq0.setDescription(descEq)
4828       c=eq0.initCell()
4829       c.setArrayForType(NORM_QUAD4,corr)
4830       self.assertEqual(eq0.getCell().size(),1)
4831       self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
4832       mm2=mm.deepCopy()
4833       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4834       self.assertEqual(mm2.getEquivalences().size(),1)
4835       self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
4836       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
4837       self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
4838       mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
4839       self.assertTrue(mm.isEqual(mm2,1e-12)[0])
4840       mm.write(fileName,2)
4841       #
4842       mm3=MEDFileMesh.New(fileName)
4843       self.assertTrue(mm.isEqual(mm3,1e-12)[0])
4844       pass
4845
4846     def testMEDFileForFamiliesPlayer1(self):
4847       """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
4848       fileName="Pyfile98.med"
4849       meshName="mesh"
4850       magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
4851       arr=DataArrayDouble(4) ; arr.iota()
4852       m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4853       m=m.buildUnstructured()
4854       mm=MEDFileUMesh()
4855       mm[0]=m
4856       mm.setName(meshName)
4857       mm.setFamilyId("FAMILLE_ZERO",0)
4858       mm.getFamilyFieldAtLevel(0)[-3:]=-4
4859       mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
4860       mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
4861       d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
4862       mm.setFamilyFieldArr(1,d)
4863       mm.setFamilyId("RIDF%s"%(magicSt%1),3)
4864       mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
4865       self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4866       self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
4867       self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
4868       mm.write(fileName,2)
4869       # now read such funny file !
4870       mm2=MEDFileMesh.New(fileName) # <- normally mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
4871       self.assertTrue(mm.isEqual(mm2,1e-16))
4872       self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
4873       self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
4874       self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
4875       pass
4876
4877     def testCartesianizer1(self):
4878       """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
4879       # UMesh non cart
4880       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
4881       mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
4882       d0=DataArrayInt(16) ; d0[:]=0
4883       d1=DataArrayInt(9)  ; d1[:]=0
4884       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4885       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4886       ref0=mm.getCoords().getHiddenCppPointer()
4887       ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
4888       self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
4889       ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
4890       ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
4891       self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4892       mm.setAxisType(AX_CYL) #<- important
4893       mm2=mm.cartesianize() # the trigger
4894       self.assertEqual(mm2.getAxisType(),AX_CART)
4895       mm.setAxisType(AX_CART) # this is here only to avoid complaints
4896       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4897       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4898       self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
4899       self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
4900       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
4901       self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
4902       self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
4903       self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
4904       self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
4905       self.assertEqual(mm2.getName(),mm.getName())
4906       self.assertEqual(mm2.getDescription(),mm.getDescription())
4907       self.assertEqual(mm2.getTime(),mm.getTime())
4908       self.assertEqual(mm2.getTime(),mm.getTime())
4909       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4910       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4911       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4912       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4913       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4914       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4915       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4916       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4917       # UMesh cart
4918       mm.setAxisType(AX_CART)
4919       mm2=mm.cartesianize() # the trigger
4920       self.assertEqual(mm2.getAxisType(),AX_CART)
4921       self.assertTrue(isinstance(mm2,MEDFileUMesh))
4922       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4923       # CurveLinearMesh non cart
4924       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
4925       mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4926       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4927       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4928       ref0=mm.getMesh().getCoords().getHiddenCppPointer()
4929       mm2=mm.cartesianize() # the trigger
4930       self.assertEqual(mm2.getAxisType(),AX_CART)
4931       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4932       self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
4933       self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4934       self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
4935       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4936       self.assertEqual(mm2.getName(),mm.getName())
4937       self.assertEqual(mm2.getDescription(),mm.getDescription())
4938       self.assertEqual(mm2.getTime(),mm.getTime())
4939       self.assertEqual(mm2.getTime(),mm.getTime())
4940       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4941       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4942       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4943       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4944       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4945       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4946       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4947       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4948       # CurveLinearMesh cart
4949       mm.setAxisType(AX_CART)
4950       mm2=mm.cartesianize() # the trigger
4951       self.assertEqual(mm2.getAxisType(),AX_CART)
4952       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4953       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4954       # CMesh non cart
4955       arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
4956       mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxisType(AX_CYL) #<- important
4957       mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
4958       mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
4959       mm2=mm.cartesianize() # the trigger
4960       self.assertEqual(mm2.getAxisType(),AX_CART)
4961       self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
4962       self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
4963       self.assertEqual(mm2.getName(),mm.getName())
4964       self.assertEqual(mm2.getDescription(),mm.getDescription())
4965       self.assertEqual(mm2.getTime(),mm.getTime())
4966       self.assertEqual(mm2.getTime(),mm.getTime())
4967       self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
4968       self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
4969       self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
4970       self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
4971       self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
4972       self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
4973       self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
4974       self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
4975       # CMesh cart
4976       mm.setAxisType(AX_CART)
4977       mm2=mm.cartesianize() # the trigger
4978       self.assertEqual(mm2.getAxisType(),AX_CART)
4979       self.assertTrue(isinstance(mm2,MEDFileCMesh))
4980       self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
4981       pass
4982
4983     def testCheckCoherency(self):
4984       m2 = MEDCouplingUMesh("2d", 2)
4985       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
4986       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
4987       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
4988       mum = MEDFileUMesh()
4989       mum.setMeshAtLevel(0, m2)
4990       mum.setMeshAtLevel(-1, m1)
4991       mum.checkConsistency()
4992       mum2 = mum.deepCopy()
4993
4994       # Nodes
4995       arr = DataArrayInt([2]*4)
4996       mum.setFamilyFieldArr(1, arr); arr.reAlloc(35);
4997       self.assertRaises(InterpKernelException, mum.checkConsistency)
4998       mum=mum2; mum2=mum.deepCopy();
4999       arr = DataArrayInt([2]*4)
5000       mum.setRenumFieldArr(1, arr); arr.reAlloc(35);
5001       self.assertRaises(InterpKernelException, mum.checkConsistency)
5002       mum=mum2; mum2=mum.deepCopy();
5003       mum.setRenumFieldArr(1, DataArrayInt([2]*4))
5004       self.assertRaises(InterpKernelException, mum.checkConsistency)
5005       mum=mum2; mum2=mum.deepCopy();
5006       arr = DataArrayAsciiChar(['tutu           x']*4)
5007       mum.setNameFieldAtLevel(1, arr); arr.reAlloc(35);
5008       self.assertRaises(InterpKernelException, mum.checkConsistency)
5009
5010       # 2D
5011       mum=mum2; mum2=mum.deepCopy();
5012       arr = DataArrayInt([2]*2)
5013       mum.setFamilyFieldArr(0, arr); arr.reAlloc(35);
5014       self.assertRaises(InterpKernelException, mum.checkConsistency)
5015       mum=mum2; mum2=mum.deepCopy();
5016       arr = DataArrayInt([2]*2)
5017       mum.setRenumFieldArr(0, arr); arr.reAlloc(35);
5018       self.assertRaises(InterpKernelException, mum.checkConsistency)
5019       mum=mum2; mum2=mum.deepCopy();
5020       mum.setRenumFieldArr(0, DataArrayInt([2]*2))
5021       self.assertRaises(InterpKernelException, mum.checkConsistency)
5022       mum=mum2; mum2=mum.deepCopy();
5023       arr = DataArrayAsciiChar(['tutu           x']*2)
5024       mum.setNameFieldAtLevel(0, arr); arr.reAlloc(35);
5025       self.assertRaises(InterpKernelException, mum.checkConsistency)
5026
5027       # 1D
5028       mum=mum2; mum2=mum.deepCopy();
5029       arr = DataArrayInt([2]*5)
5030       mum.setFamilyFieldArr(-1, arr); arr.reAlloc(35);
5031       self.assertRaises(InterpKernelException, mum.checkConsistency)
5032       mum=mum2; mum2=mum.deepCopy();
5033       arr = DataArrayInt([2]*5)
5034       mum.setRenumFieldArr(-1, arr); arr.reAlloc(35);
5035       self.assertRaises(InterpKernelException, mum.checkConsistency)
5036       mum=mum2; mum2=mum.deepCopy();
5037       mum.setRenumFieldArr(-1, DataArrayInt([2]*5))
5038       self.assertRaises(InterpKernelException, mum.checkConsistency)
5039       mum=mum2; mum2=mum.deepCopy();
5040       arr = DataArrayAsciiChar(['tutu           x']*5)
5041       mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
5042       self.assertRaises(InterpKernelException, mum.checkConsistency)
5043
5044     def testCheckSMESHConsistency(self):
5045       m2 = MEDCouplingUMesh("2d", 2)
5046       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5047       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5048       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5049       mum = MEDFileUMesh()
5050       mum.setMeshAtLevel(0, m2)
5051       mum.setMeshAtLevel(-1, m1)
5052       mum.checkConsistency()
5053       mum.checkSMESHConsistency()
5054       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5055       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5056       mum.setRenumFieldArr(0, n2)
5057       mum.setRenumFieldArr(-1, n1)
5058       self.assertRaises(InterpKernelException, mum.checkSMESHConsistency)
5059       mum.setRenumFieldArr(-1, n1+100)
5060       mum.checkSMESHConsistency()
5061       pass
5062
5063     def testClearNodeAndCellNumbers(self):
5064       m2 = MEDCouplingUMesh("2d", 2)
5065       m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2))  # whatever
5066       m2.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2,NORM_TRI3, 1,2,3]), DataArrayInt(([0,4,8])))
5067       m1 , _, _ , _, _ = m2.buildDescendingConnectivity()
5068       mum = MEDFileUMesh()
5069       mum.setMeshAtLevel(0, m2)
5070       mum.setMeshAtLevel(-1, m1)
5071       mum.checkConsistency()
5072       n2 = DataArrayInt(m2.getNumberOfCells(), 1); n2.iota(1)
5073       n1 = DataArrayInt(m1.getNumberOfCells(), 1); n1.iota(1)
5074       mum.setRenumFieldArr(0, n2)
5075       mum.setRenumFieldArr(-1, n1)
5076       mum.clearNodeAndCellNumbers()
5077       mum.checkSMESHConsistency()
5078       pass
5079
5080     def testCMeshSetFamilyFieldArrNull(self):
5081       meshName="mesh"
5082       fname="Pyfile99.med"
5083       arrX=DataArrayDouble([0,1,2,3])
5084       arrY=DataArrayDouble([0,1,2])
5085       m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY) ; m.setName(meshName)
5086       mm=MEDFileCMesh() ; mm.setMesh(m)
5087       famCellIds=DataArrayInt([0,-2,-2,-1,-2,0])
5088       famNodeIds=DataArrayInt([0,0,0,3,4,1,2,7,2,1,0,0])
5089       mm.setFamilyFieldArr(0,famCellIds)
5090       mm.setFamilyFieldArr(1,famNodeIds)
5091       mm.write(fname,2)
5092       mm=MEDFileMesh.New(fname)
5093       self.assertTrue(mm.getFamilyFieldAtLevel(0) is not None)
5094       self.assertTrue(mm.getFamilyFieldAtLevel(1) is not None)
5095       mm.setFamilyFieldArr(0,None)#<- bug was here
5096       mm.setFamilyFieldArr(1,None)#<- bug was here
5097       self.assertTrue(mm.getFamilyFieldAtLevel(0) is None)
5098       self.assertTrue(mm.getFamilyFieldAtLevel(1) is None)
5099       mm3=mm.deepCopy()
5100       self.assertTrue(mm3.getFamilyFieldAtLevel(0) is None)
5101       self.assertTrue(mm3.getFamilyFieldAtLevel(1) is None)
5102       mm.write(fname,2)
5103       mm2=MEDFileMesh.New(fname)
5104       self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None)
5105       self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
5106       pass
5107
5108     def testAppendFieldProfileOnIntField(self):
5109       fname="Pyfile100.med"
5110       arrX=DataArrayDouble([0,1,2,3])
5111       arrY=DataArrayDouble([0,1,2])
5112       mesh=MEDCouplingCMesh() ; mesh.setCoords(arrX,arrY) ; mesh.setName("Mesh")
5113       mm=MEDFileCMesh()
5114       mm.setMesh(mesh)
5115       #
5116       fmts=MEDFileIntFieldMultiTS()
5117       pflName="PFL"
5118       pfl=DataArrayInt([1,3,5]) ; pfl.setName(pflName)
5119       f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh)
5120       fieldName="FieldOnCell"
5121       f.setTime(1.2,1,1) ; f.setName(fieldName)
5122       arr=DataArrayInt([101,102,103]) ; f.setArray(arr)
5123       fmts.appendFieldProfile(f,mm,0,pfl)
5124       #
5125       mm.write(fname,2)
5126       fmts.write(fname,0)
5127       #
5128       mm=MEDFileMesh.New(fname)
5129       fmts=MEDFileAnyTypeFieldMultiTS.New(fname)
5130       self.assertTrue(isinstance(fmts,MEDFileIntFieldMultiTS))
5131       self.assertEqual(fmts.getName(),fieldName)
5132       self.assertEqual(len(fmts),1)
5133       f1ts=fmts[0]
5134       ftest,pfltest=f1ts.getFieldWithProfile(ON_CELLS,0,mm)
5135       self.assertEqual(pfltest.getName(),pflName)
5136       self.assertEqual(ftest.getName(),fieldName)
5137       self.assertTrue(ftest.isEqualWithoutConsideringStr(arr))
5138       ftest2=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mm)
5139       self.assertTrue(ftest2.getArray().isEqualWithoutConsideringStr(arr))
5140       self.assertEqual(ftest2.getTime(),f.getTime())
5141       self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
5142       pass
5143
5144     def testMEDFileFieldEasyField1(self):
5145       """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."""
5146       ## Basic test on cells on top level
5147       fname="Pyfile101.med"
5148       fieldName="field1"
5149       mm=MEDFileUMesh()
5150       coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5151       m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5152       m.allocateCells()
5153       m.insertNextCell(NORM_TRI3,[0,1,2])
5154       m.insertNextCell(NORM_TRI3,[3,4,5])
5155       m.insertNextCell(NORM_TRI3,[6,7,8])
5156       m.insertNextCell(NORM_TRI3,[9,10,11])
5157       m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5158       m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5159       mm[0]=m
5160       mm.write(fname,2)
5161       arr0=DataArrayDouble([10,11,12,13,100,101])
5162       f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5163       f.setName(fieldName) ; f.setTime(2.,6,7)
5164       f0=f.deepCopy()
5165       ff=MEDFileFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5166       ff.write(fname,0)
5167       arr2=arr0+1000 ; f.setArray(arr2)
5168       f.setTime(3.,8,9) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f)
5169       ff.write(fname,0)
5170       f1=f.deepCopy()
5171       ##
5172       mm=MEDFileMesh.New(fname)
5173       f1ts=MEDFileField1TS(fname,fieldName,6,7)
5174       ftst0=f1ts.field(mm)
5175       self.assertTrue(f0.isEqual(ftst0,1e-12,1e-12))
5176       f1ts=MEDFileField1TS(fname,fieldName,8,9)
5177       ftst1=f1ts.field(mm)
5178       self.assertTrue(f1.isEqual(ftst1,1e-12,1e-12))
5179       fmts=MEDFileFieldMultiTS(fname,fieldName)
5180       self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,1e-12))
5181       ## Basic test on nodes on top level
5182       f2=MEDCouplingFieldDouble(ON_NODES) ; arr2=DataArrayDouble([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5183       f2.setName(fieldName)
5184       mm.write(fname,2)
5185       ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5186       #
5187       mm=MEDFileMesh.New(fname)
5188       f1ts=MEDFileField1TS(fname,fieldName,23,24)
5189       self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,1e-12))
5190       fmts=MEDFileFieldMultiTS(fname,fieldName)
5191       self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,1e-12))
5192       ## Node on elements
5193       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)
5194       f3.setName(fieldName) ; f3.checkConsistencyLight()
5195       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5196       #
5197       mm=MEDFileMesh.New(fname)
5198       f1ts=MEDFileField1TS(fname,fieldName,2,3)
5199       self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5200       ## Gauss
5201       f4=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5202       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])
5203       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)
5204       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)
5205       f4.checkConsistencyLight()
5206       mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5207       #
5208       mm=MEDFileMesh.New(fname)
5209       f1ts=MEDFileField1TS(fname,fieldName,4,5)
5210       self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5211       pass
5212   
5213     def testMEDFileFieldEasyField2(self):
5214         """Same thantestMEDFileFieldEasyField1 except that here intfields are considered.
5215         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."""
5216         ## Basic test on cells on top level
5217         fname="Pyfile102.med"
5218         fieldName="field1"
5219         mm=MEDFileUMesh()
5220         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5221         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5222         m.allocateCells()
5223         m.insertNextCell(NORM_TRI3,[0,1,2])
5224         m.insertNextCell(NORM_TRI3,[3,4,5])
5225         m.insertNextCell(NORM_TRI3,[6,7,8])
5226         m.insertNextCell(NORM_TRI3,[9,10,11])
5227         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5228         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5229         mm[0]=m
5230         mm.write(fname,2)
5231         arr0=DataArrayInt([10,11,12,13,100,101])
5232         f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m)
5233         f.setName(fieldName) ; f.setTime(2.,6,7)
5234         f0=f.deepCopy()
5235         ff=MEDFileIntFieldMultiTS() ; ff.appendFieldNoProfileSBT(f)
5236         ff.write(fname,0)
5237         arr2=arr0+1000 ; f.setArray(arr2)
5238         f.setTime(3.,8,9) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f)
5239         ff.write(fname,0)
5240         f1=f.deepCopy()
5241         ##
5242         mm=MEDFileMesh.New(fname)
5243         f1ts=MEDFileIntField1TS(fname,fieldName,6,7)
5244         ftst0=f1ts.field(mm)
5245         self.assertTrue(f0.isEqual(ftst0,1e-12,0))
5246         f1ts=MEDFileIntField1TS(fname,fieldName,8,9)
5247         ftst1=f1ts.field(mm)
5248         self.assertTrue(f1.isEqual(ftst1,1e-12,0))
5249         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5250         self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0))
5251         ## Basic test on nodes on top level
5252         f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24)
5253         f2.setName(fieldName)
5254         mm.write(fname,2)
5255         ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0)
5256         #
5257         mm=MEDFileMesh.New(fname)
5258         f1ts=MEDFileIntField1TS(fname,fieldName,23,24)
5259         self.assertTrue(f2.isEqual(f1ts.field(mm),1e-12,0))
5260         fmts=MEDFileIntFieldMultiTS(fname,fieldName)
5261         self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0))
5262         ## Node on elements
5263         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)
5264         f3.setName(fieldName) ; f3.checkConsistencyLight()
5265         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5266         #
5267         mm=MEDFileMesh.New(fname)
5268         f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5269         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5270         ## Gauss
5271         f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName)
5272         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])
5273         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)
5274         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)
5275         f4.checkConsistencyLight()
5276         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5277         #
5278         mm=MEDFileMesh.New(fname)
5279         f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5280         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5281         pass
5282
5283     def testMEDFileFieldEasyField3(self):
5284         """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."""
5285         fname="Pyfile103.med"
5286         fieldName="field1"
5287         mm=MEDFileUMesh()
5288         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5289         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5290         m.allocateCells()
5291         m.insertNextCell(NORM_TRI3,[0,1,2])
5292         m.insertNextCell(NORM_TRI3,[3,4,5])
5293         m.insertNextCell(NORM_TRI3,[6,7,8])
5294         m.insertNextCell(NORM_TRI3,[9,10,11])
5295         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5296         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5297         mm[-1]=m
5298         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5299         m0.allocateCells()
5300         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5301         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5302         mm[0]=m0
5303         mm.write(fname,2)
5304         # start slowly
5305         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5306         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5307         #
5308         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,1,2)
5309         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5310         # here f1 lying on level -1 not 0 check if "field" method detect it !
5311         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayDouble([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5312         f1.setMesh(mm[-1]) # -1 is very important
5313         f1.setTime(16.,3,4)
5314         f1.checkConsistencyLight()
5315         mm.write(fname,2)
5316         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5317         #
5318         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,3,4)
5319         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,1e-12))
5320         # nodes on elements
5321         f3=MEDCouplingFieldDouble(ON_GAUSS_NE)
5322         f3.setMesh(mm[-1]) # this line is important
5323         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)
5324         f3.setName(fieldName) ; f3.checkConsistencyLight()
5325         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5326         #
5327         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,2,3)
5328         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,1e-12))
5329         # gauss
5330         f4=MEDCouplingFieldDouble(ON_GAUSS_PT)
5331         f4.setMesh(mm[-1]) # this line is important
5332         f4.setName(fieldName)
5333         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])
5334         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)
5335         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)
5336         f4.checkConsistencyLight()
5337         mm.write(fname,2) ; ff=MEDFileField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5338         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,4,5)
5339         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
5340         pass
5341
5342     def testMEDFileFieldEasyField4(self):
5343         """ Same than testMEDFileFieldEasyField3 but with integers"""
5344         fname="Pyfile104.med"
5345         fieldName="field1"
5346         mm=MEDFileUMesh()
5347         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5348         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5349         m.allocateCells()
5350         m.insertNextCell(NORM_TRI3,[0,1,2])
5351         m.insertNextCell(NORM_TRI3,[3,4,5])
5352         m.insertNextCell(NORM_TRI3,[6,7,8])
5353         m.insertNextCell(NORM_TRI3,[9,10,11])
5354         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5355         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5356         mm[-1]=m
5357         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5358         m0.allocateCells()
5359         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5360         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5361         mm[0]=m0
5362         mm.write(fname,2)
5363         # start slowly
5364         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2)
5365         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5366         #
5367         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2)
5368         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5369         # here f1 lying on level -1 not 0 check if "field" method detect it !
5370         f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)]))
5371         f1.setMesh(mm[-1]) # -1 is very important
5372         f1.setTime(16.,3,4)
5373         f1.checkConsistencyLight()
5374         mm.write(fname,2)
5375         f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0)
5376         #
5377         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,3,4)
5378         self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0))
5379         # nodes on elements
5380         f3=MEDCouplingFieldInt(ON_GAUSS_NE)
5381         f3.setMesh(mm[-1]) # this line is important
5382         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)
5383         f3.setName(fieldName) ; f3.checkConsistencyLight()
5384         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0)
5385         #
5386         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,2,3)
5387         self.assertTrue(f3.isEqual(f1ts.field(mm),1e-12,0))
5388         # gauss
5389         f4=MEDCouplingFieldInt(ON_GAUSS_PT)
5390         f4.setMesh(mm[-1]) # this line is important
5391         f4.setName(fieldName)
5392         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])
5393         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)
5394         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)
5395         f4.checkConsistencyLight()
5396         mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0)
5397         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5)
5398         self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
5399         pass
5400
5401     def testMEDFileFieldEasyField5(self):
5402         """More and more difficult now look at how profiles are managed by "field" method."""
5403         fname="Pyfile105.med"
5404         fieldName="field1"
5405         mm=MEDFileUMesh()
5406         coo=DataArrayDouble([(3,2,1),(8,7,6),(5,9,10)])
5407         m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo)
5408         m.allocateCells()
5409         m.insertNextCell(NORM_TRI3,[0,1,2])
5410         m.insertNextCell(NORM_TRI3,[3,4,5])
5411         m.insertNextCell(NORM_TRI3,[6,7,8])
5412         m.insertNextCell(NORM_TRI3,[9,10,11])
5413         m.insertNextCell(NORM_QUAD4,[100,101,102,103])
5414         m.insertNextCell(NORM_QUAD4,[104,105,106,107])
5415         mm[0]=m
5416         mm.write(fname,2)
5417         pfl=DataArrayInt([0,2,3,5]) ; pfl.setName("pfl")
5418         m2=m.deepCopy()[pfl] ; m2.setName(m.getName())
5419         #
5420         arr0=DataArrayDouble([10,11,12,13])
5421         f=MEDCouplingFieldDouble(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m2)
5422         f.setName(fieldName) ; f.setTime(2.,6,7) ; f.checkConsistencyLight()
5423         ff=MEDFileFieldMultiTS() ; ff.appendFieldProfile(f,mm,0,pfl) # ff is a field on profile
5424         ff.write(fname,0)
5425         #
5426         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5427         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5428         # more complicated -> multi level
5429         m0=MEDCouplingUMesh("mesh",3) ; m0.setCoords(coo)
5430         m0.allocateCells()
5431         m0.insertNextCell(NORM_TETRA4,[3,2,5,0])
5432         m0.insertNextCell(NORM_TETRA4,[7,6,3,2])
5433         mm2=MEDFileUMesh()
5434         mm2[0]=m0 ; mm2[-1]=m
5435         #
5436         ff=MEDFileField1TS() ; ff.setFieldProfile(f,mm2,-1,pfl)
5437         #
5438         mm=MEDFileMesh.New(fname) ; f1ts=MEDFileField1TS(fname,fieldName,6,7)
5439         self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
5440         pass
5441
5442     def testExtractPart1(self):
5443         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)])
5444         meshName="mesh"
5445         m0=MEDCouplingUMesh(meshName,2) ; m0.setCoords(coo) ; m0.allocateCells()
5446         m0.insertNextCell(NORM_TRI3,[8,4,3])
5447         m0.insertNextCell(NORM_TRI3,[8,9,4])
5448         m0.insertNextCell(NORM_TRI3,[7,13,8])
5449         m0.insertNextCell(NORM_TRI3,[7,12,13])
5450         m0.insertNextCell(NORM_TRI3,[0,6,1])
5451         m0.insertNextCell(NORM_TRI3,[0,5,6])
5452         m0.insertNextCell(NORM_QUAD4,[1,6,7,2])
5453         m0.insertNextCell(NORM_QUAD4,[2,7,8,3])
5454         m0.insertNextCell(NORM_QUAD4,[8,13,14,9])
5455         m0.insertNextCell(NORM_QUAD4,[6,11,12,7])
5456         m0.insertNextCell(NORM_QUAD4,[5,10,11,6])
5457         #
5458         m1=MEDCouplingUMesh(meshName,1) ; m1.setCoords(coo) ; m1.allocateCells()
5459         m1.insertNextCell(NORM_SEG2,[10,5])
5460         m1.insertNextCell(NORM_SEG2,[5,0])
5461         m1.insertNextCell(NORM_SEG2,[0,1])
5462         m1.insertNextCell(NORM_SEG2,[1,2])
5463         m1.insertNextCell(NORM_SEG2,[2,3])
5464         m1.insertNextCell(NORM_SEG2,[3,4])
5465         m1.insertNextCell(NORM_SEG2,[4,9])
5466         m1.insertNextCell(NORM_SEG2,[9,14])
5467         m1.insertNextCell(NORM_SEG2,[14,13])
5468         m1.insertNextCell(NORM_SEG2,[13,12])
5469         m1.insertNextCell(NORM_SEG2,[12,11])
5470         m1.insertNextCell(NORM_SEG2,[11,10])
5471         mm=MEDFileUMesh()
5472         mm[0]=m0 ; mm[-1]=m1
5473         arr0=DataArrayInt([0,1,2,3,4,6,7,8,12,13])
5474         tab={} #
5475         tab[0]=DataArrayInt([0,2,3,4,6,7])
5476         tab[-1]=DataArrayInt([2,3,4,5,9])
5477         fs=MEDFileFields()
5478         self.assertTrue(mm.deduceNodeSubPartFromCellSubPart(tab).isEqual(arr0))
5479         tab[1]=arr0
5480         #
5481         fname0="Field0"
5482         fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5483         t0=(16.5,3,4)
5484         ic=["toto [m]"]
5485         arr0_0=DataArrayDouble([100,101,102,103,104,105,106,107,108,109,110]) ; arr0_0.setInfoOnComponents(ic)
5486         f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*t0) ; f0.setArray(arr0_0)
5487         f0.setMesh(m0) ; f0.setName(fname0)
5488         f1=MEDCouplingFieldDouble(ON_CELLS) ; f1.setTime(*t0) ; f1.setArray(DataArrayDouble([200,201,202,203,204,205,206,207,208,209,210,211]))
5489         f1.setMesh(m1) ; f1.setName(fname0) ; f1.getArray().setInfoOnComponents(ic)
5490         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]))
5491         f2.setMesh(m0) ; f2.setName(fname0) ; f2.getArray().setInfoOnComponents(ic)
5492         f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.setFieldNoProfileSBT(f2)
5493         fmts.pushBackTimeStep(f1ts)
5494         #
5495         mmOut=mm.extractPart(tab)
5496         #
5497         fsPart0=fs.extractPart(tab,mm)
5498         self.assertEqual(len(fsPart0),1)
5499         fmtsP=fsPart0[0]
5500         self.assertEqual(len(fmtsP),1)
5501         f1ts=fmtsP[0]
5502         self.assertRaises(InterpKernelException,f1ts.field,mmOut)
5503         #
5504         self.assertTrue(mmOut[0].computeCellCenterOfMass().isEqual(m0[tab[0]].computeCellCenterOfMass(),1e-12))
5505         self.assertTrue(mmOut[-1].computeCellCenterOfMass().isEqual(m1[tab[-1]].computeCellCenterOfMass(),1e-12))
5506         #
5507         m0Part=m0.deepCopy()[tab[0]] ; m0Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m0Part.setName(m0.getName())
5508         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5509         m1Part=m1.deepCopy()[tab[-1]] ; m1Part.renumberNodes(tab[1].invertArrayN2O2O2N(mm.getNumberOfNodes()),len(tab[1])) ; m1Part.setName(m0.getName())
5510         self.assertTrue(mmOut[0].isEqual(m0Part,1e-12))
5511         self.assertTrue(mmOut[-1].isEqual(m1Part,1e-12))
5512         #
5513         f0Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,0,mmOut) ; f0Part.checkConsistencyLight()
5514         self.assertEqual(f0Part.getTypeOfField(),ON_CELLS)
5515         self.assertTrue(f0Part.getMesh().isEqual(m0Part,1e-12))
5516         arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic)
5517         self.assertTrue(f0Part.getArray().isEqual(arr0Exp,1e-12)) ; self.assertEqual(f0Part.getTime(),list(t0))
5518         f1Part=f1ts.getFieldOnMeshAtLevel(ON_CELLS,-1,mmOut) ; f1Part.checkConsistencyLight()
5519         self.assertEqual(f1Part.getTypeOfField(),ON_CELLS)
5520         self.assertTrue(f1Part.getMesh().isEqual(m1Part,1e-12))
5521         arr1Exp=DataArrayDouble([202,203,204,205,209]) ; arr1Exp.setInfoOnComponents(ic)
5522         self.assertTrue(f1Part.getArray().isEqual(arr1Exp,1e-12)) ; self.assertEqual(f1Part.getTime(),list(t0))
5523         #
5524         f2Part=f1ts.getFieldOnMeshAtLevel(ON_NODES,0,mmOut) ; f2Part.checkConsistencyLight()
5525         arr2Exp=DataArrayDouble([300,301,302,303,304,306,307,308,312,313]) ; arr2Exp.setInfoOnComponents(ic)
5526         self.assertTrue(f2Part.getArray().isEqual(arr2Exp,1e-12)) ; self.assertEqual(f2Part.getTime(),list(t0))
5527         # multisteps
5528         fs=MEDFileFields() ; fmts=MEDFileFieldMultiTS() ; fs.pushField(fmts)
5529         tss=[(16.5,3,4),(17.5,4,5),(18.5,5,6)]
5530         for i,tt in enumerate(tss):
5531             f0=MEDCouplingFieldDouble(ON_CELLS) ; f0.setTime(*tt)
5532             myarr=arr0_0+i*1000.
5533             f0.setArray(myarr)
5534             f0.setMesh(m0) ; f0.setName(fname0) ; f0.getArray().setInfoOnComponents(ic)
5535             f1ts=MEDFileField1TS() ; f1ts.setFieldNoProfileSBT(f0) ; fmts.pushBackTimeStep(f1ts)
5536             pass
5537         fsPart1=fs.extractPart(tab,mm)
5538         self.assertEqual(len(fsPart1),1)
5539         fmtsP=fsPart1[0]
5540         self.assertEqual(len(fmtsP),len(tss))
5541         for i,(f1tsP,tt) in enumerate(zip(fmtsP,tss)):
5542             fPart=f1tsP.field(mmOut) ; fPart.checkConsistencyLight()
5543             self.assertEqual(fPart.getTypeOfField(),ON_CELLS)
5544             arr0Exp=DataArrayDouble([100,102,103,104,106,107]) ; arr0Exp.setInfoOnComponents(ic) ; arr0Exp+=i*1000.
5545             self.assertTrue(fPart.getMesh().isEqual(m0Part,1e-12))
5546             self.assertTrue(fPart.getArray().isEqual(arr0Exp,1e-12))
5547             self.assertEqual(fPart.getTime(),list(tt))
5548             pass
5549         pass
5550
5551     def testSymmetryPlusAggregationMFD1(self):
5552         """ Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
5553         fname1="Pyfile106_1.med"
5554         fname2="Pyfile106_2.med"
5555         fname3="Pyfile106_3.med"
5556         meshName="mesh"
5557         mm1=MEDFileUMesh()
5558         da1=DataArrayDouble([1,2,10,3,4,11,5,6,12,7,8,13],4,3) ; da1.setInfoOnComponents(["aa [m]","bbb [kg]","cccc [MW]"])
5559         mm1.setCoords(da1)
5560         mm1_0=MEDCouplingUMesh(meshName,3) ; mm1_0.allocateCells()
5561         mm1_0.setCoords(da1)
5562         mm1_0.insertNextCell(NORM_TETRA4,[0,1,2,3])
5563         mm1_0.insertNextCell(NORM_TETRA4,[4,5,6,7])
5564         mm1_0.insertNextCell(NORM_PENTA6,[8,9,10,11,12,13])
5565         mm1_0.insertNextCell(NORM_PENTA6,[14,15,16,17,18,19])
5566         mm1_0.insertNextCell(NORM_PENTA6,[20,21,22,23,24,25])
5567         mm1[0]=mm1_0
5568         mm1.setFamilyFieldArr(0,DataArrayInt([1,2,3,4,5]))
5569         mm1.setRenumFieldArr(0,DataArrayInt([11,12,13,14,15]))
5570         #
5571         mm1_1=MEDCouplingUMesh(meshName,2) ; mm1_1.allocateCells()
5572         mm1_1.setCoords(da1)
5573         mm1_1.insertNextCell(NORM_TRI3,[0,1,2])
5574         mm1_1.insertNextCell(NORM_TRI3,[3,4,5])
5575         mm1_1.insertNextCell(NORM_QUAD4,[6,7,8,9])
5576         mm1_1.insertNextCell(NORM_QUAD4,[10,11,12,13])
5577         mm1_1.insertNextCell(NORM_QUAD4,[14,15,16,17])
5578         mm1_1.insertNextCell(NORM_QUAD4,[18,19,20,21])
5579         mm1[-1]=mm1_1
5580         mm1.setFamilyFieldArr(-1,DataArrayInt([6,7,8,9,10,11]))
5581         mm1.setRenumFieldArr(-1,DataArrayInt([16,17,18,19,20,21]))
5582         for i in range(1,10):
5583             mm1.setFamilyId("F%d"%i,i)
5584         mm1.setFamilyId("FAMILLE_ZERO",0)
5585         mm1.setFamilyId("H1",100)
5586         mm1.setFamiliesOnGroup("myGRP",["F2","F6"])
5587         mm1.setFamiliesOnGroup("myGRP1",["F2","F6"])
5588         mm1.setFamilyFieldArr(1,DataArrayInt([12,13,14,15]))
5589         mm1.setRenumFieldArr(1,DataArrayInt([22,23,24,25]))
5590         ##############
5591         mm2=MEDFileUMesh()
5592         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]"])
5593         mm2.setCoords(da1)
5594         mm2_0=MEDCouplingUMesh(meshName,3) ; mm2_0.allocateCells()
5595         mm2_0.setCoords(da1)
5596         mm2_0.insertNextCell(NORM_TETRA4,[100,101,102,103])
5597         mm2_0.insertNextCell(NORM_TETRA4,[104,105,106,107])
5598         mm2_0.insertNextCell(NORM_TETRA4,[108,109,110,111])
5599         mm2_0.insertNextCell(NORM_PENTA6,[112,113,114,115,116,117])
5600         mm2[0]=mm2_0
5601         mm2.setFamilyFieldArr(0,DataArrayInt([40,41,42,43]))
5602         mm2.setRenumFieldArr(0,DataArrayInt([50,51,52,53]))
5603         #
5604         mm2_1=MEDCouplingUMesh(meshName,2) ; mm2_1.allocateCells()
5605         mm2_1.setCoords(da1)
5606         mm2_1.insertNextCell(NORM_TRI3,[100,101,102])
5607         mm2_1.insertNextCell(NORM_TRI3,[103,104,105])
5608         mm2_1.insertNextCell(NORM_TRI3,[106,107,108])
5609         mm2_1.insertNextCell(NORM_QUAD4,[109,110,111,112])
5610         mm2_1.insertNextCell(NORM_QUAD4,[113,114,115,116])
5611         mm2_1.insertNextCell(NORM_QUAD4,[117,118,119,120])
5612         mm2_1.insertNextCell(NORM_QUAD4,[121,122,123,124])
5613         mm2_1.insertNextCell(NORM_QUAD4,[125,126,127,128])
5614         mm2[-1]=mm2_1
5615         mm2.setFamilyFieldArr(-1,DataArrayInt([200,201,202,203,204,205,206,207]))
5616         mm2.setRenumFieldArr(-1,DataArrayInt([300,301,302,303,304,305,306,307]))
5617         for i in range(1,12):
5618             mm2.setFamilyId("G%d"%i,i+30)
5619         mm2.setFamilyId("H1",100)
5620         mm2.setFamilyId("FAMILLE_ZERO",0)
5621         mm2.setFamiliesOnGroup("myGRP",["G2","G6"])
5622         mm2.setFamiliesOnGroup("myGRP2",["G4","G7"])
5623         mm2.setFamilyFieldArr(1,DataArrayInt([112,113,114,115,116]))
5624         mm2.setRenumFieldArr(1,DataArrayInt([122,123,124,125,126]))
5625         #
5626         mm=MEDFileUMesh.Aggregate([mm1,mm2])
5627         #######
5628         def CheckMesh(tester,mm):
5629             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]"])
5630             tester.assertTrue(mm.getCoords().isEqual(cooExp,1e-12))
5631             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])))
5632             tester.assertTrue(mm[0].getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,32,39,46,53])))
5633             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])))
5634             tester.assertTrue(mm[-1].getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,16,20,25,30,35,40,45,50,55,60,65])))
5635             tester.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([1,2,40,41,42,3,4,5,43])))
5636             tester.assertTrue(mm.getNumberFieldAtLevel(0).isEqual(DataArrayInt([11,12,50,51,52,13,14,15,53])))
5637             tester.assertTrue(mm.getFamilyFieldAtLevel(-1).isEqual(DataArrayInt([6,7,200,201,202,8,9,10,11,203,204,205,206,207])))
5638             tester.assertTrue(mm.getNumberFieldAtLevel(-1).isEqual(DataArrayInt([16,17,300,301,302,18,19,20,21,303,304,305,306,307])))
5639             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)]
5640             tester.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds]))
5641             tester.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds]))
5642             tester.assertEqual(mm.getGroupsNames(),('myGRP','myGRP1','myGRP2'))
5643             tester.assertEqual(mm.getAllDistributionOfTypes(),[(NORM_TRI3,5),(NORM_QUAD4,9),(NORM_TETRA4,5),(NORM_PENTA6,4),(NORM_ERROR,9)])
5644             pass
5645         CheckMesh(self,mm)
5646         ##
5647         fieldName="zeField"
5648         t1=(2.3,3,5)
5649         t2=(5.6,7,12)
5650         infoc=["dd [W]","eee [kA]"]
5651         ##
5652         fmts1=MEDFileFieldMultiTS()
5653         f1ts1=MEDFileField1TS()
5654         f1_1=MEDCouplingFieldDouble(ON_CELLS) ; f1_1.setMesh(mm1[0]) ; f1_1.setName(fieldName)
5655         arr1=DataArrayDouble([(10,110),(11,111),(12,112),(13,113),(14,114)])
5656         arr1.setInfoOnComponents(infoc)
5657         f1_1.setArray(arr1) ; f1_1.setTime(*t1) ; f1_1.setTimeUnit("ms")
5658         f1_1.checkConsistencyLight()
5659         f1ts1.setFieldNoProfileSBT(f1_1)
5660         #
5661         f1_2=MEDCouplingFieldDouble(ON_CELLS) ; f1_2.setMesh(mm1[-1]) ; f1_2.setName(fieldName)
5662         arr2=DataArrayDouble([(15,115),(16,116),(17,117),(18,118),(19,119),(20,120)])
5663         arr2.setInfoOnComponents(infoc)
5664         f1_2.setArray(arr2) ; f1_2.setTime(*t1) ; f1_2.setTimeUnit("ms")
5665         f1_2.checkConsistencyLight()
5666         f1ts1.setFieldNoProfileSBT(f1_2)
5667         f1_3=MEDCouplingFieldDouble(ON_NODES) ; f1_3.setMesh(mm1[0]) ; f1_3.setName(fieldName)
5668         arr3=DataArrayDouble([(21,121),(22,122),(23,123),(24,124)])
5669         arr3.setInfoOnComponents(infoc)
5670         f1_3.setArray(arr3) ; f1_3.setTime(*t1) ; f1_3.setTimeUnit("ms")
5671         f1_3.checkConsistencyLight()
5672         f1ts1.setFieldNoProfileSBT(f1_3)
5673         fmts1.pushBackTimeStep(f1ts1)
5674         #
5675         f1ts2=f1ts1.deepCopy()
5676         f1ts2.setTime(t2[1],t2[2],t2[0])
5677         f1ts2.getUndergroundDataArray()[:]+=2000
5678         fmts1.pushBackTimeStep(f1ts2)
5679         ### fmts2
5680         fmts2=MEDFileFieldMultiTS()
5681         f1ts3=MEDFileField1TS()
5682         f2_1=MEDCouplingFieldDouble(ON_CELLS) ; f2_1.setMesh(mm2[0]) ; f2_1.setName(fieldName)
5683         arr4=DataArrayDouble([(50,150),(51,151),(52,152),(53,153)])
5684         arr4.setInfoOnComponents(infoc)
5685         f2_1.setArray(arr4) ; f2_1.setTime(*t1) ; f2_1.setTimeUnit("ms")
5686         f2_1.checkConsistencyLight()
5687         f1ts3.setFieldNoProfileSBT(f2_1)
5688         f2_2=MEDCouplingFieldDouble(ON_CELLS) ; f2_2.setMesh(mm2[-1]) ; f2_2.setName(fieldName)
5689         arr5=DataArrayDouble([(54,154),(55,155),(56,156),(57,157),(158,158),(59,159),(60,160),(61,161)])
5690         arr5.setInfoOnComponents(infoc)
5691         f2_2.setArray(arr5) ; f2_2.setTime(*t1) ; f2_2.setTimeUnit("ms")
5692         f2_2.checkConsistencyLight()
5693         f1ts3.setFieldNoProfileSBT(f2_2)
5694         f2_3=MEDCouplingFieldDouble(ON_NODES) ; f2_3.setMesh(mm2[0]) ; f2_3.setName(fieldName)
5695         arr6=DataArrayDouble([(62,162),(63,163),(64,164),(65,165),(66,166)])
5696         arr6.setInfoOnComponents(infoc)
5697         f2_3.setArray(arr6) ; f2_3.setTime(*t1) ; f2_3.setTimeUnit("ms")
5698         f2_3.checkConsistencyLight()
5699         f1ts3.setFieldNoProfileSBT(f2_3)
5700         fmts2.pushBackTimeStep(f1ts3)
5701         #
5702         f1ts4=f1ts3.deepCopy()
5703         f1ts4.setTime(t2[1],t2[2],t2[0])
5704         f1ts4.getUndergroundDataArray()[:]+=2000
5705         fmts2.pushBackTimeStep(f1ts4)
5706         #
5707         mfd1=MEDFileData()
5708         mfd1.setMeshes(MEDFileMeshes())
5709         mfd1.getMeshes().pushMesh(mm1)
5710         mfd1.setFields(MEDFileFields())
5711         mfd1.getFields().pushField(fmts1)
5712         #
5713         mfd2=MEDFileData()
5714         mfd2.setMeshes(MEDFileMeshes())
5715         mfd2.getMeshes().pushMesh(mm2)
5716         mfd2.setFields(MEDFileFields())
5717         mfd2.getFields().pushField(fmts2)
5718         # ze Call !
5719         mfd=MEDFileData.Aggregate([mfd1,mfd2])
5720         def CheckMFD(tester,mfd):
5721             tester.assertEqual(len(mfd.getMeshes()),1)
5722             tester.assertEqual(len(mfd.getFields()),1)
5723             CheckMesh(self,mfd.getMeshes()[0])
5724             tester.assertEqual(len(mfd.getFields()[0]),2)
5725             zeF1=mfd.getFields()[0][0]
5726             zeF1_1=zeF1.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5727             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5728             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5729             ref.renumberCells(o2n)
5730             tester.assertTrue(ref.isEqual(zeF1_1,1e-12,1e-12))
5731             zeF1_2=zeF1.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5732             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5733             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5734             ref.renumberCells(o2n)
5735             tester.assertTrue(ref.isEqual(zeF1_2,1e-12,1e-12))
5736             zeF1_3=zeF1.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5737             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5738             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5739             ref.renumberCells(o2n)
5740             tester.assertTrue(ref.isEqual(zeF1_3,1e-12,1e-12))
5741             #
5742             zeF2=mfd.getFields()[0][1]
5743             zeF2_1=zeF2.getFieldOnMeshAtLevel(ON_CELLS,0,mfd.getMeshes()[0])
5744             ref=MEDCouplingFieldDouble.MergeFields([f1_1,f2_1])
5745             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5746             ref.renumberCells(o2n)
5747             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5748             tester.assertTrue(ref.isEqual(zeF2_1,1e-12,1e-12))
5749             zeF2_2=zeF2.getFieldOnMeshAtLevel(ON_CELLS,-1,mfd.getMeshes()[0])
5750             ref=MEDCouplingFieldDouble.MergeFields([f1_2,f2_2])
5751             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5752             ref.renumberCells(o2n)
5753             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5754             tester.assertTrue(ref.isEqual(zeF2_2,1e-12,1e-12))
5755             zeF2_3=zeF2.getFieldOnMeshAtLevel(ON_NODES,0,mfd.getMeshes()[0])
5756             ref=MEDCouplingFieldDouble.MergeFields([f1_3,f2_3])
5757             o2n=ref.getMesh().deepCopy().sortCellsInMEDFileFrmt()
5758             ref.renumberCells(o2n)
5759             ref.setTime(*t2) ; ref.getArray()[:]+=2000
5760             tester.assertTrue(ref.isEqual(zeF2_3,1e-12,1e-12))
5761         CheckMFD(self,mfd)
5762         mfd1.write(fname1,2) ; mfd2.write(fname2,2)
5763         mfd=MEDFileData.Aggregate([MEDFileData(fname1),MEDFileData(fname2)])
5764         CheckMFD(self,mfd)
5765         pass
5766
5767     def testExtrudedMesh1(self):
5768         fname="Pyfile107.med"
5769         arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
5770         mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ) ; mesh3D.setName("mesh")
5771         ex=MEDCouplingMappedExtrudedMesh(mesh3D)
5772         mm=MEDFileUMesh(ex)
5773         mm.write(fname,2)
5774         ex2=mm.convertToExtrudedMesh()
5775         mm2=MEDFileMesh.New(fname)
5776         ex3=mm2.convertToExtrudedMesh()
5777         self.assertTrue(ex.isEqual(ex2,1e-12))
5778         self.assertTrue(ex.isEqual(ex3,1e-12))
5779         pass
5780     
5781     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1")
5782     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())<LooseVersion('4.0.0'),
5783                          "This test is not compatible with MEDFile version 4.0.0 and above")
5784     def testWriteInto30(self):
5785         fname="Pyfile108.med"
5786         fname2="Pyfile109.med"
5787         m=MEDCouplingUMesh("mesh",1) ; m.setCoords(DataArrayDouble([0,0,1,1],2,2)) ; m.allocateCells() ; m.insertNextCell(NORM_SEG2,[1,0])
5788         mm=MEDFileUMesh() ; mm[0]=m
5789         mm.setFamilyId("FAMILLE_ZERO",0)
5790         #
5791         mm.write30(fname,2)
5792         assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,0]) # checks that just written MED file has a version == 3.0.x
5793         mm2=MEDFileUMesh(fname)
5794         self.assertTrue(mm.isEqual(mm2,1e-12))
5795         #
5796         mm.write(fname2,2)
5797         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
5798         pass
5799
5800     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5801     def testPickelizationOfMEDFileObjects1(self):
5802         fname="Pyfile110.med"
5803         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)
5804         m0=MEDCouplingUMesh("Mesh",2)
5805         m0.allocateCells(5)
5806         m0.insertNextCell(NORM_TRI3,[1,4,2])
5807         m0.insertNextCell(NORM_TRI3,[4,5,2])
5808         m0.insertNextCell(NORM_QUAD4,[0,3,4,1])
5809         m0.insertNextCell(NORM_QUAD4,[3,6,7,4])
5810         m0.insertNextCell(NORM_QUAD4,[4,7,8,5])
5811         m0.finishInsertingCells()
5812         m0.setCoords(coo)
5813         m1=MEDCouplingUMesh(m0.getName(),1)
5814         m1.allocateCells(9)
5815         conn1=[0,1,0,3,3,4,4,1,5,4,2,4,1,2,3,6,5,8]
5816         for i in range(9):
5817             m1.insertNextCell(NORM_SEG2,conn1[2*i:2*i+2])
5818             pass
5819         m1.finishInsertingCells()
5820         m1.setCoords(coo)
5821         #
5822         m=MEDFileUMesh()
5823         m.setMeshAtLevel(0,m0)
5824         m.setMeshAtLevel(-1,m1)
5825         #
5826         dt=3 ; it=2 ; tim=4.5
5827         fieldNode0=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
5828         fieldNode0.setName("fieldNode0")
5829         fieldNode0.setTime(tim,dt,it)
5830         pfl0=DataArrayInt([0,1,2,3,4]) ; pfl0.setName("PflIdentity0") # important to keep like that
5831         arr=DataArrayDouble([10,11,12,13,14])
5832         fieldNode0.setArray(arr)
5833         f0=MEDFileField1TS()
5834         f0.setFieldProfile(fieldNode0,m,0,pfl0)
5835         fieldNode1=MEDCouplingFieldDouble(ON_NODES,ONE_TIME)
5836         fieldNode1.setName("fieldNode1")
5837         fieldNode1.setTime(tim,dt,it)
5838         pfl1=DataArrayInt([0,1,2,3,4,5,6]) ; pfl1.setName("PflIdentity1")
5839         arr1=DataArrayDouble([20,21,22,23,24,25,26])
5840         fieldNode1.setArray(arr1)
5841         f1=MEDFileField1TS()
5842         f1.setFieldProfile(fieldNode1,m,-1,pfl1)
5843         mfd=MEDFileData()
5844         mfd.setMeshes(MEDFileMeshes()) ; mfd.setFields(MEDFileFields())
5845         mfd.getMeshes().pushMesh(m)
5846         fmts=MEDFileFieldMultiTS() ; fmts.pushBackTimeStep(f0)
5847         mfd.getFields().pushField(fmts)
5848         # first start gently
5849         d=mfd.serialize()
5850         mfd2=MEDFileData(d)
5851         self.assertEqual(len(mfd2.getMeshes()),1)
5852         self.assertEqual(len(mfd2.getFields()),1)
5853         self.assertEqual(len(mfd2.getFields()[0]),1)
5854         self.assertTrue(mfd2.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
5855         ff2=mfd2.getFields()[0][0].field(mfd2.getMeshes()[0])
5856         ff =mfd.getFields()[0][0].field(mfd.getMeshes()[0])
5857         self.assertTrue(ff2.isEqual(ff,1e-12,1e-12))
5858         # OK now end of joke -> serialization of MEDFileData
5859         st=pickle.dumps(mfd,pickle.HIGHEST_PROTOCOL)
5860         mfd3=pickle.loads(st)
5861         # check of object
5862         self.assertEqual(len(mfd3.getMeshes()),1)
5863         self.assertEqual(len(mfd3.getFields()),1)
5864         self.assertEqual(len(mfd3.getFields()[0]),1)
5865         self.assertTrue(mfd3.getMeshes()[0].isEqual(mfd.getMeshes()[0],1e-12))
5866         ff3=mfd3.getFields()[0][0].field(mfd3.getMeshes()[0])
5867         self.assertTrue(ff3.isEqual(ff,1e-12,1e-12))
5868         # serialization of MEDFileFields
5869         st=pickle.dumps(mfd.getFields(),pickle.HIGHEST_PROTOCOL)
5870         fs4=pickle.loads(st)
5871         ff4=fs4[0][0].field(mfd3.getMeshes()[0])
5872         self.assertTrue(ff4.isEqual(ff,1e-12,1e-12))
5873         # serialization of MEDFileFieldMulitTS
5874         st=pickle.dumps(mfd.getFields()[0],pickle.HIGHEST_PROTOCOL)
5875         fmts5=pickle.loads(st)
5876         ff5=fmts5[0].field(mfd3.getMeshes()[0])
5877         self.assertTrue(ff5.isEqual(ff,1e-12,1e-12))
5878         # serialization of MEDFileField1TS
5879         st=pickle.dumps(mfd.getFields()[0][0],pickle.HIGHEST_PROTOCOL)
5880         f1ts6=pickle.loads(st)
5881         ff6=f1ts6.field(mfd3.getMeshes()[0])
5882         self.assertTrue(ff6.isEqual(ff,1e-12,1e-12))
5883         # serialization of MEDFileMeshes
5884         st=pickle.dumps(mfd.getMeshes(),pickle.HIGHEST_PROTOCOL)
5885         ms7=pickle.loads(st)
5886         self.assertEqual(len(ms7),1)
5887         self.assertTrue(ms7[0].isEqual(mfd.getMeshes()[0],1e-12))
5888         pass
5889
5890     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
5891     def testPickelizationOfMEDFileObjects2(self):
5892         # CMesh
5893         self.testMEDMesh6() # generates MEDFileMesh5.med file
5894         mm=MEDFileMesh.New("MEDFileMesh5.med")
5895         self.assertTrue(isinstance(mm,MEDFileCMesh))
5896         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
5897         mm2=pickle.loads(st)
5898         self.assertTrue(isinstance(mm2,MEDFileCMesh))
5899         self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
5900         # CurveLinear
5901         self.testCurveLinearMesh1() # generates Pyfile55.med
5902         mm=MEDFileMesh.New("Pyfile55.med")
5903         self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
5904         st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
5905         mm3=pickle.loads(st)
5906         self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
5907         self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
5908         self.testInt32InMEDFileFieldStar1()# generates Pyfile63.med
5909         # MEDFileIntFieldMultiTS
5910         fs4=MEDFileFields("Pyfile63.med")
5911         ms4=MEDFileMeshes("Pyfile63.med")
5912         self.assertTrue(isinstance(fs4[0],MEDFileIntFieldMultiTS))
5913         st=pickle.dumps(fs4[0],pickle.HIGHEST_PROTOCOL)
5914         fmts5=pickle.loads(st)
5915         self.assertEqual(len(fs4[0]),len(fmts5))
5916         self.assertTrue(isinstance(fmts5,MEDFileIntFieldMultiTS))
5917         self.assertTrue(fmts5[0].field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
5918         # MEDFileIntField1TS
5919         st=pickle.dumps(fs4[0][0],pickle.HIGHEST_PROTOCOL)
5920         f1ts6=pickle.loads(st)
5921         self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
5922         self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
5923         # MEDFileParameters
5924         self.testParameters1()# generates Pyfile56.med
5925         params=MEDFileParameters("Pyfile56.med")
5926         st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
5927         params7=pickle.loads(st)
5928         self.assertEqual(len(params),len(params7))
5929         for i in range(len(params)):
5930             self.assertTrue(params[i].isEqual(params7[i],1e-12)[0])
5931             pass
5932         pass
5933
5934     def testGlobalNumOnNodes1(self):
5935         """Test global number on nodes here. Used by partitionners."""
5936         fname="Pyfile112.med"
5937         arr=DataArrayDouble(5) ; arr.iota()
5938         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
5939         m.setName("mesh")
5940         mm=MEDFileUMesh()
5941         mm[0]=m
5942         self.assertTrue(not mm.getGlobalNumFieldAtLevel(1))
5943         d=DataArrayInt([7,8,9,2,0])
5944         dRef=d.deepCopy()
5945         mm.setGlobalNumFieldAtLevel(1,d)
5946         mm.checkConsistency()
5947         self.assertRaises(InterpKernelException,mm.setGlobalNumFieldAtLevel,1,d[::2])
5948         mm.checkConsistency()
5949         self.assertEqual(d.getHiddenCppPointer(),mm.getGlobalNumFieldAtLevel(1).getHiddenCppPointer())
5950         self.assertTrue(mm.getGlobalNumFieldAtLevel(1).isEqual(dRef))
5951         mm.write(fname,2)
5952         mm2=MEDFileMesh.New(fname)
5953         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5954         self.assertTrue(mm2.getGlobalNumFieldAtLevel(1).isEqual(dRef))
5955         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,10)
5956         self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
5957         mm2.getGlobalNumFieldAtLevel(1).setIJ(0,0,7)
5958         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
5959         pass
5960
5961     def testPartialReadOfEntities1(self):
5962         """Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
5963         fname="Pyfile113.med"
5964         arr=DataArrayDouble(5) ; arr.iota()
5965         m=MEDCouplingUMesh.Build1DMeshFromCoords(arr)
5966         m.setName("mesh")
5967         mm=MEDFileUMesh()
5968         mm[0]=m
5969         #
5970         fieldName="Field"
5971         ts1=(5.,1,2)
5972         f1=MEDCouplingFieldDouble(ON_NODES) ; f1.setMesh(m) ; f1.setName(fieldName)
5973         f1.setArray(DataArrayDouble([0.,0.1,0.2,0.3,0.4]))
5974         f1.setTime(*ts1)
5975         f2=MEDCouplingFieldDouble(ON_CELLS) ; f2.setMesh(m) ; f2.setName(fieldName)
5976         f2.setArray(DataArrayDouble([1.,1.1,1.2,1.3]))
5977         f2.setTime(*ts1)
5978         f1ts=MEDFileField1TS()
5979         f1ts.setFieldNoProfileSBT(f1)
5980         f1ts.setFieldNoProfileSBT(f2)
5981         self.assertEqual(set(f1ts.getTypesOfFieldAvailable()),set([ON_NODES,ON_CELLS]))
5982         f1ts_2=f1ts.deepCopy()
5983         f1ts_2.getUndergroundDataArray()[:]+=2
5984         f1ts_2.setTime(3,4,6.)
5985         fmts=MEDFileFieldMultiTS()
5986         fmts.pushBackTimeStep(f1ts)
5987         fmts.pushBackTimeStep(f1ts_2)
5988         #
5989         mm.write(fname,2)
5990         fmts.write(fname,0)
5991         #
5992         ent=MEDFileEntities.BuildFrom([(ON_NODES,NORM_ERROR)])
5993         mm=MEDFileMesh.New(fname)
5994         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)
5995         fs.loadArrays()
5996         self.assertEqual(len(fs),1)
5997         fmts=fs[0]
5998         self.assertEqual(len(fmts),2)
5999         ff0=fmts[0] ; ff1=fmts[1]
6000         self.assertEqual(ff0.getTypesOfFieldAvailable(),[ON_NODES]) # only NODES have been loaded
6001         self.assertTrue(ff0.field(mm).isEqual(f1,1e-12,1e-12))
6002         f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4)
6003         self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12))
6004         pass
6005     
6006     def testFloat32InMEDFileFieldStar1(self):
6007         """Like testInt32InMEDFileFieldStar1 but with float32 :)"""
6008         fname="Pyfile114.med"
6009         f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
6010         f1=f1.convertToFloatField()
6011         m1=f1.getMesh()
6012         mm1=MEDFileUMesh.New()
6013         mm1.setCoords(m1.getCoords())
6014         mm1.setMeshAtLevel(0,m1)
6015         mm1.setName(m1.getName())
6016         mm1.write(fname,2)
6017         ff1=MEDFileFloatField1TS()
6018         ff1.setFieldNoProfileSBT(f1)
6019         a=ff1.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6020         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6021         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6022         ff1.write(fname,0)
6023         a,b=ff1.getUndergroundDataArrayExt()
6024         self.assertEqual(a.getHiddenCppPointer(),ff1.getUndergroundDataArray().getHiddenCppPointer())
6025         self.assertEqual(b,[((3,0),(0,2)),((4,0),(2,4)),((6,0),(4,5)),((5,0),(5,6))])
6026         ff2=MEDFileAnyTypeField1TS.New(fname)
6027         self.assertEqual(ff2.getName(),"VectorFieldOnCells")
6028         self.assertEqual(ff2.getTime(),[0,1,2.0])
6029         self.assertTrue(isinstance(ff2,MEDFileFloatField1TS))
6030         a=ff1.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6031         self.assertEqual(a.getArray().getInfoOnComponents(),['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6032         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6033         ff2.setTime(1,2,3.)
6034         c=ff2.getUndergroundDataArray() ; c*=2
6035         ff2.write(fname,0) # 2 time steps in 
6036         ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells")
6037         self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)])
6038         self.assertEqual(len(ffs1),2)
6039         self.assertTrue(isinstance(ffs1,MEDFileFloatFieldMultiTS))
6040         a=ffs1[2.].getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6041         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6042         a=ffs1.getFieldOnMeshAtLevel(ON_CELLS,0,1,0,mm1)
6043         self.assertTrue(a.isEqual(f1,1e-12,1e-12))
6044         it=ffs1.__iter__() ; it.next() ; ff2bis=it.next()
6045         a=ff2bis.getFieldOnMeshAtLevel(0,ON_CELLS,mm1)
6046         self.assertTrue(a.getArray().isEqual(2*f1.getArray(),1e-7))
6047         f1.setTime(3.,1,2) ; f1.getArray()[:]*=2
6048         self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ; f1.getArray()[:]/=2
6049         bc=DataArrayFloat(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]'])
6050         for it in ffs1:
6051             a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1)
6052             bc+=a.getArray()
6053             pass
6054         self.assertTrue(bc.isEqual(3*f1.getArray(),1e-7))
6055         nf1=MEDCouplingFieldFloat(ON_NODES)
6056         nf1.setTime(9.,10,-1)
6057         nf1.setMesh(f1.getMesh())
6058         narr=DataArrayFloat(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0]
6059         nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr)
6060         nff1=MEDFileFloatField1TS.New()
6061         nff1.setFieldNoProfileSBT(nf1)
6062         self.assertEqual(nff1.getInfo(),('aa [u1]','bbbvv [ppp]'))
6063         self.assertEqual(nff1.getTime(),[10,-1,9.0])
6064         nff1.write(fname,0)
6065         #
6066         nf2=MEDCouplingFieldFloat(ON_NODES)
6067         nf2.setTime(19.,20,-11)
6068         nf2.setMesh(f1.getMesh())
6069         narr2=DataArrayFloat(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10  ; narr2[:,1]=3*narr2[:,0]
6070         nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2)
6071         nff2=MEDFileFloatField1TS.New()
6072         npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl")
6073         nff2.setFieldProfile(nf2,mm1,0,npfl)
6074         nff2.getFieldWithProfile(ON_NODES,0,mm1)
6075         a,b=nff2.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6076         self.assertTrue(b.isEqual(npfl))
6077         self.assertTrue(a.isEqual(narr2,1e-7))
6078         nff2.write(fname,0)
6079         nff2bis=MEDFileFloatField1TS(fname,"VectorFieldOnNodesPfl")
6080         a,b=nff2bis.getFieldWithProfile(ON_NODES,0,mm1) ; b.setName(npfl.getName())
6081         self.assertTrue(b.isEqual(npfl))
6082         self.assertTrue(a.isEqual(narr2,1e-7))
6083         #
6084         nf3=MEDCouplingFieldDouble(ON_NODES)
6085         nf3.setName("VectorFieldOnNodesDouble")
6086         nf3.setTime(29.,30,-21)
6087         nf3.setMesh(f1.getMesh())
6088         nf3.setArray(f1.getMesh().getCoords())
6089         nff3=MEDFileField1TS.New()
6090         nff3.setFieldNoProfileSBT(nf3)
6091         nff3.write(fname,0)
6092         fs=MEDFileFields(fname)
6093         self.assertEqual(len(fs),4)
6094         ffs=[it for it in fs]
6095         self.assertTrue(isinstance(ffs[0],MEDFileFloatFieldMultiTS))
6096         self.assertTrue(isinstance(ffs[1],MEDFileFloatFieldMultiTS))
6097         self.assertTrue(isinstance(ffs[2],MEDFileFieldMultiTS))
6098         self.assertTrue(isinstance(ffs[3],MEDFileFloatFieldMultiTS))
6099         #
6100         self.assertTrue(fs["VectorFieldOnCells"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getArray(),1e-7))
6101         self.assertTrue(fs["VectorFieldOnCells"][1,2].getUndergroundDataArray().isEqualWithoutConsideringStr(2*f1.getArray(),1e-7))
6102         self.assertTrue(fs["VectorFieldOnNodesPfl"][0].getUndergroundDataArray().isEqualWithoutConsideringStr(narr2,1e-7))
6103         self.assertTrue(fs["VectorFieldOnNodes"][9.].getUndergroundDataArray().isEqualWithoutConsideringStr(narr,1e-7))
6104         self.assertTrue(fs["VectorFieldOnNodesDouble"][29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6105         #
6106         nf3_read=MEDFileFieldMultiTS(fname,"VectorFieldOnNodesDouble")
6107         self.assertTrue(nf3_read[29.].getUndergroundDataArray().isEqualWithoutConsideringStr(f1.getMesh().getCoords(),1e-12))
6108         self.assertRaises(InterpKernelException,MEDFileFloatFieldMultiTS.New,fname,"VectorFieldOnNodesDouble")# exception because trying to read a double field with int instance
6109         self.assertRaises(InterpKernelException,MEDFileFieldMultiTS.New,fname,"VectorFieldOnNodes")# exception because trying to read a int field with double instance
6110         MEDFileField1TS.New(fname,"VectorFieldOnNodesDouble",30,-21)
6111         self.assertRaises(InterpKernelException,MEDFileFloatField1TS.New,fname,"VectorFieldOnNodesDouble",30,-21)# exception because trying to read a double field with int instance
6112         MEDFileFloatField1TS.New(fname,"VectorFieldOnNodes",10,-1)
6113         self.assertRaises(InterpKernelException,MEDFileField1TS.New,fname,"VectorFieldOnNodes",10,-1)# exception because trying to read a double field with int instance
6114         #
6115         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1','3DSurfMesh_1'))
6116         self.assertTrue(fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6117         self.assertEqual(fs.getMeshesNames(),('3DSurfMesh','3DSurfMesh','3DSurfMesh','3DSurfMesh'))
6118         self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
6119         pass
6120
6121     def testPenta18_1(self):
6122         """EDF8478 : Test of read/write of penta18"""
6123         fname="Pyfile115.med"
6124         arr=DataArrayDouble([
6125             (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
6126             (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
6127             (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
6128             (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
6129             (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
6130             (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
6131         m=MEDCouplingUMesh("mesh",3)
6132         m.setCoords(arr)
6133         m.allocateCells(1)
6134         m.insertNextCell(NORM_PENTA18,list(range(18)))
6135         m.checkConsistencyLight()
6136         #
6137         f=MEDCouplingFieldDouble(ON_NODES)
6138         f.setMesh(m)
6139         f.setName("FieldOnPenta18")
6140         f.setArray(DataArrayDouble(list(range(18))))
6141         f.checkConsistencyLight()
6142         #
6143         m2,d,di,rd,rdi=m.buildDescendingConnectivity()
6144         #
6145         f2=MEDCouplingFieldDouble(ON_NODES)
6146         f2.setMesh(m)
6147         f2.setName("FieldOnPenta18Sub")
6148         f2.setArray(DataArrayDouble(list(range(18))))
6149         f2.checkConsistencyLight()
6150         WriteField(fname,f2,True)
6151         f3=ReadField(fname)
6152         self.assertTrue(f2.isEqual(f3,1e-12,1e-12))
6153         self.assertEqual(f3.getMesh().getNumberOfCells(),1)
6154         self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
6155         pass
6156
6157     @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
6158     @unittest.skipUnless(LooseVersion(MEDFileVersionStr())<LooseVersion('4.0.0'),
6159                          "This test is not compatible with MEDFile version 4.0.0 and above")
6160     def testMedFileCapabilityToCryOnNewFeatureWritingIntoOldFiles(self):
6161         fname="Pyfile116.med"
6162         errfname="Pyfile116.err"
6163         c=DataArrayDouble([0,1,2,3])
6164         m=MEDCouplingCMesh()
6165         m.setCoords(c,c)
6166         m=m.buildUnstructured()
6167         m.setName("mesh")
6168         mm=MEDFileUMesh()
6169         mm[0]=m
6170         f=MEDCouplingFieldInt(ON_CELLS)
6171         f.setMesh(m) ; arr2=DataArrayInt(m.getNumberOfCells()) ; arr2.iota()
6172         f.setArray(arr2)
6173         f.setName("field")
6174         f1ts=MEDFileIntField1TS()
6175         f1ts.setFieldNoProfileSBT(f)
6176         mm.write30(fname,2)
6177         f1ts.write30(fname,0)
6178         #
6179         f=MEDCouplingFieldFloat(ON_CELLS)
6180         f.setMesh(m) ; arr2=DataArrayFloat(m.getNumberOfCells()) ; arr2.iota()
6181         f.setArray(arr2)
6182         f.setName("field2")
6183         f1ts=MEDFileFloatField1TS()
6184         f1ts.setFieldNoProfileSBT(f)
6185         #
6186         import os,gc
6187         tmp=StdOutRedirect(errfname)
6188         self.assertRaises(InterpKernelException,f1ts.write30,fname,0)
6189         del tmp
6190         gc.collect(0)
6191         if os.path.exists(errfname):
6192             os.remove(errfname)
6193         pass
6194     
6195     pass
6196
6197 if __name__ == "__main__":
6198     unittest.main()