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